From 0b293e2c37af00d76f7929a826b2d61a927aa76f Mon Sep 17 00:00:00 2001 From: Loraine Monteagudo <44000054+lorainemg@users.noreply.github.com> Date: Thu, 31 Oct 2019 11:19:00 -0600 Subject: [PATCH 01/60] Initial commit --- README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 00000000..edd14b09 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# Compiler \ No newline at end of file From 2eefd51c34480eaec5213d7fee27ab7678cde99e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Loraine=20Monteagudo=20Garc=C3=ADa?= Date: Thu, 31 Oct 2019 13:22:54 -0600 Subject: [PATCH 02/60] First version of the parser and the lexer done --- .gitignore | 104 ++ Pipfile | 12 + Pipfile.lock | 29 + src/__init__.py | 1 + src/cool_grammar.py | 270 ++++ src/lexer.py | 106 ++ src/makefile | 3 + src/parser.out | 3170 +++++++++++++++++++++++++++++++++++++++++++ src/parsetab.py | 92 ++ src/tokens.py | 62 + src/tools/ast.py | 174 +++ src/tools/errors.py | 83 ++ src/tools/tokens.py | 61 + 13 files changed, 4167 insertions(+) create mode 100644 .gitignore create mode 100644 Pipfile create mode 100644 Pipfile.lock create mode 100644 src/__init__.py create mode 100644 src/cool_grammar.py create mode 100644 src/lexer.py create mode 100644 src/makefile create mode 100644 src/parser.out create mode 100644 src/parsetab.py create mode 100644 src/tokens.py create mode 100644 src/tools/ast.py create mode 100644 src/tools/errors.py create mode 100644 src/tools/tokens.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..7db61e6d --- /dev/null +++ b/.gitignore @@ -0,0 +1,104 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ \ No newline at end of file diff --git a/Pipfile b/Pipfile new file mode 100644 index 00000000..5b7ff3c2 --- /dev/null +++ b/Pipfile @@ -0,0 +1,12 @@ +[[source]] +name = "pypi" +url = "https://pypi.org/simple" +verify_ssl = true + +[dev-packages] + +[packages] +ply = "*" + +[requires] +python_version = "3.7" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 00000000..e971880a --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,29 @@ +{ + "_meta": { + "hash": { + "sha256": "768c4b66d0ce858fbbf1b8a8998ffa9616166666555d0dc7bd1b92a9316518c8" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.7" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "ply": { + "hashes": [ + "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", + "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce" + ], + "index": "pypi", + "version": "==3.11" + } + }, + "develop": {} +} diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 00000000..c6cf9b78 --- /dev/null +++ b/src/__init__.py @@ -0,0 +1 @@ +from src.errors import * \ No newline at end of file diff --git a/src/cool_grammar.py b/src/cool_grammar.py new file mode 100644 index 00000000..e980179a --- /dev/null +++ b/src/cool_grammar.py @@ -0,0 +1,270 @@ +import ply.yacc as yacc +from tools.tokens import tokens +from tools.ast import * +from lexer import CoolLexer + +# TODO: juntar las producciones +#? TODO: If siempre tiene else + +def p_program(p): + 'program : class_list' + p[0] = p[1] + +def p_epsilon(p): + 'epsilon :' + pass + +def p_class_list(p): + '''class_list : def_class class_list + | def_class''' + if len(p) == 2: + p[0] = [p[1]] + else: + p[0] = [p[1]] + p[2] + +def p_def_class(p): + '''def_class : class id ocur feature_list ccur semi + | class id inherits id ocur feature_list ccur semi''' + if len(p) == 7: + p[0] = ClassDeclarationNode(p[2], p[4]) + else: + p[0] = ClassDeclarationNode(p[2], p[6], p[4]) + +def p_feature_list(p): + '''feature_list : epsilon + | def_attr semi feature_list + | def_func semi feature_list''' + if len(p) == 2: + p[0] = [] + else: + p[0] = [p[1]] + p[3] + + +def p_def_attr(p): + '''def_attr : id colon id + | id colon id larrow expr''' + if len(p) == 4: + p[0] = AttrDeclarationNode(p[1], p[3]) + else: + p[0] = AttrDeclarationNode(p[1], p[3], p[5]) + +def p_def_func(p): + 'def_func : id opar param_list cpar colon id ocur expr ccur' + p[0] = FuncDeclarationNode(p[1], p[3], p[6], p[8]) + +def p_param_list(p): + '''param_list : param + | param comma param_list''' + if len(p) == 2: + p[0] = [p[1]] + else: + p[0] = [p[1]] + p[3] + +def p_param_list_empty(p): + 'param_list : epsilon' + p[0] = [] + +def p_param(p): + 'param : id colon id' + p[0] = (p[1], p[3]) + +def p_expr_let(p): + 'expr : let let_list in expr' + p[0] = LetNode(p[2], p[4]) + +def p_expr_case(p): + 'expr : case expr of cases_list esac' + p[0] = CaseNode(p[2], p[4]) + +def p_expr_if(p): + 'expr : if expr then expr else expr fi' + p[0] = ConditionalNode(p[2], p[4], p[6]) + +def p_expr_while(p): + 'expr : while expr loop expr pool' + p[0] = WhileNode(p[2], p[4]) + +def p_expr_arith(p): + 'expr : arith' + p[0] = p[1] + + +def p_let_list(p): + '''let_list : let_assign + | let_assign comma let_list''' + if len(p) == 2: + p[0] = [p[1]] + else: + p[0] = [p[1]] + p[3] + +def p_let_assign(p): + '''let_assign : param larrow expr + | param''' + if len(p) == 2: + p[0] = VariableNode(p[1][0], p[1][1]) + else: + p[0] = VarDeclarationNode(p[1][0], p[1][1], p[3]) + + +def p_cases_list(p): + '''cases_list : casep semi + | casep semi cases_list''' + if len(p) == 3: + p[0] = [p[1]] + else: + p[0] = [p[1]] + p[3] + +def p_case(p): + 'casep : id colon id rarrow expr' + p[0] = OptionNode(p[1], p[3], p[5]) + + +def p_arith(p): + '''arith : id larrow expr + | not comp + | comp + ''' + if len(p) == 4: + p[0] = AssignNode(p[1], p[3]) + elif len(p) == 3: + p[0] = NotNode(p[2]) + else: + p[0] = p[1] + +def p_comp(p): + '''comp : comp less op + | comp lesseq op + | comp equal op + | op''' + if len(p) == 2: + p[0] = p[1] + elif p[2] == '<': + p[0] = LessNode(p[1], p[3]) + elif p[2] == '<=': + p[0] = LessEqNode(p[1], p[3]) + elif p[2] == '=': + p[0] = EqualNode(p[1], p[3]) + + +def p_op(p): + '''op : op plus term + | op minus term + | term''' + if len(p) == 2: + p[0] = p[1] + elif p[2] == '+': + p[0] = PlusNode(p[1], p[3]) + elif p[2] == '-': + p[0] = MinusNode(p[1], p[3]) + +def p_term(p): + '''term : term star base_call + | term div base_call + | isvoid base_call + | nox base_call + | base_call''' + if len(p) == 2: + p[0] = p[1] + elif p[1] == 'isvoid': + p[0] = IsVoidNode(p[2]) + elif p[1] == '~': + p[0] = BinaryNotNode(p[2]) + elif p[2] == '*': + p[0] = StarNode(p[1], p[3]) + elif p[2] == '/': + p[0] = DivNode(p[1], p[3]) + +def p_base_call(p): + '''base_call : factor arroba id dot func_call + | factor''' + if len(p) == 2: + p[0] = p[1] + else: + p[0] = BaseCallNode(p[1], p[3], *p[5]) + +def p_factor1(p): + '''factor : atom + | opar expr cpar''' + if len(p) == 2: + p[0] = p[1] + else: + p[0] = p[2] + +def p_factor2(p): + '''factor : factor dot func_call + | func_call''' + if len(p) == 2: + p[0] = StaticCallNode(*p[1]) + else: + p[0] = CallNode(p[1], *p[3]) + +def p_atom_num(p): + 'atom : num' + p[0] = ConstantNumNode(p[1]) + +def p_atom_id(p): + 'atom : id' + p[0] = VariableNode(p[1]) + +def p_atom_new(p): + 'atom : new id' + p[0] = InstantiateNode(p[2]) + +def p_atom_block(p): + 'atom : ocur block ccur' + p[0] = BlockNode(p[2]) + +def p_atom_boolean(p): + '''atom : true + | false''' + p[0] = ConstantBoolNode(p[1]) + +def p_atom_string(p): + 'atom : string' + p[0] = ConstantStrNode(p[1]) + +def p_block(p): + '''block : expr semi + | expr semi block''' + if len(p) == 3: + p[0] = [p[1]] + else: + p[0] = [p[1]] + p[3] + +def p_func_call(p): + 'func_call : id opar arg_list cpar' + p[0] = (p[1], p[3]) + +def p_arg_list(p): + '''arg_list : expr + | expr comma arg_list''' + if len(p) == 2: + p[0] = [p[1]] + else: + p[0] = [p[1]] + p[3] + +def p_arg_list_empty(p): + 'arg_list : epsilon' + p[0] = [] + + # Error rule for syntax errors +def p_error(p): + print("Syntax error in input!") + +if __name__ == "__main__": + parser = yacc.yacc(start='program') + lexer = CoolLexer() + + s = ''' + class A { + ackermann ( m : AUTO_TYPE , n : AUTO_TYPE ) : AUTO_TYPE { + if ( m = 0 ) then n + 1 else + if ( n = 0 ) then ackermann ( m - 1 , 1 ) else + ackermann ( m - 1 , ackermann ( m , n - 1 ) ) + fi + fi + } ; + } ; + ''' + result = parser.parse(s, lexer.lexer, debug=True) + print(result) \ No newline at end of file diff --git a/src/lexer.py b/src/lexer.py new file mode 100644 index 00000000..c599c80f --- /dev/null +++ b/src/lexer.py @@ -0,0 +1,106 @@ +import ply.lex as lex +from tools.tokens import tokens, reserved, Token +from pprint import pprint +# from src.errors import LexicographicErrors + +# TODO: las palabras reservadas, excepto true y false son case insensitive +# TODO: Poner la regla para los strings de q no puede contener \n +# TODO: Arreglar los comentarios + +class CoolLexer: + def __init__(self, **kwargs): + self.reserved = reserved + self.tokens = tokens + self.errors = [] + self.lexer = lex.lex(module=self, **kwargs) + + # Regular expressions for simple tokens + t_ignore_COMMENT = r'--.* | \*(.)*\*' + # A string containing ignored characters + t_ignore = ' \t\f\r\t\v' + + t_def = r'def' + t_print = r'print' + t_semi = r';' + t_colon = r':' + t_comma = r',' + t_dot = r'\.' + t_opar = r'\(' + t_cpar = r'\)' + t_ocur = r'\{' + t_ccur = r'\}' + t_larrow = r'<-' + t_arroba = r'@' + t_rarrow = r'=>' + t_nox = r'~' + t_equal = r'=' + t_plus = r'\+' + t_of = r'of' + t_minus = r'-' + t_star = r'\*' + t_div = r'/' + t_less = r'<' + t_lesseq = r'<=' + t_inherits = r'inherits' + + # Check for reserved words: + def t_id(self, t): + r'[a-zA-Z_][a-zA-Z_0-9]*' + t.type = self.reserved.get(t.value.lower(), 'id') + return t + + # Get Numbers + def t_num(self, t): + r'\d+(\.\d+)? ' + t.value = float(t.value) + return t + + def t_string(self, t): + r'".*"' + #r'\"([^\\\n]|(\\.))*?\"' + t.value = t.value[1:-1] + return t + + # Define a rule so we can track line numbers + def t_newline(self, t): + r'\n+' + t.lexer.lineno += len(t.value) + + # Error handling rule + def t_error(self, t): + self.errors.append(LexicographicError(LexicographicError.UNKNOWN_TOKEN % t.value)) + t.lexer.skip(len(t.value)) + + + def find_column(self, token): + line_start = self.lexer.lexdata.rfind('\n', 0, token.lexpos) + 1 + return (token.lexpos - line_start) + 1 + + def tokenize_text(self, text): + self.lexer.input(data) + tokens = [] + for tok in self.lexer: + tokens.append(Token(tok.type, tok.value, tok.lineno, self.find_column(tok))) + return tokens + + +if __name__ == "__main__": + m = CoolLexer() + + data = ''' + CLASS Cons inherits List { + xcar : Int; + xcdr : List; + isNil() : Bool { false }; + init(hd : Int, tl : List) : Cons { + { + xcar <- hd; + xcdr <- 2; + self; + p . translate ( 1 , 1 ) ; + } + } + ''' + + res = m.tokenize_text(data) + pprint(res) diff --git a/src/makefile b/src/makefile new file mode 100644 index 00000000..99e8a80c --- /dev/null +++ b/src/makefile @@ -0,0 +1,3 @@ + +run lexer: + pipenv run python lexer/lexer.py \ No newline at end of file diff --git a/src/parser.out b/src/parser.out new file mode 100644 index 00000000..90540836 --- /dev/null +++ b/src/parser.out @@ -0,0 +1,3170 @@ +Created by PLY version 3.11 (http://www.dabeaz.com/ply) + +Unused terminals: + + def + print + +Grammar + +Rule 0 S' -> program +Rule 1 program -> class_list +Rule 2 epsilon -> +Rule 3 class_list -> def_class class_list +Rule 4 class_list -> def_class +Rule 5 def_class -> class id ocur feature_list ccur semi +Rule 6 def_class -> class id inherits id ocur feature_list ccur semi +Rule 7 feature_list -> epsilon +Rule 8 feature_list -> def_attr semi feature_list +Rule 9 feature_list -> def_func semi feature_list +Rule 10 def_attr -> id colon id +Rule 11 def_attr -> id colon id larrow expr +Rule 12 def_func -> id opar param_list cpar colon id ocur expr ccur +Rule 13 param_list -> param +Rule 14 param_list -> param comma param_list +Rule 15 param_list -> epsilon +Rule 16 param -> id colon id +Rule 17 expr -> let let_list in expr +Rule 18 expr -> case expr of cases_list esac +Rule 19 expr -> if expr then expr else expr fi +Rule 20 expr -> while expr loop expr pool +Rule 21 expr -> arith +Rule 22 let_list -> let_assign +Rule 23 let_list -> let_assign comma let_list +Rule 24 let_assign -> param larrow expr +Rule 25 let_assign -> param +Rule 26 cases_list -> casep semi +Rule 27 cases_list -> casep semi cases_list +Rule 28 casep -> id colon id rarrow expr +Rule 29 arith -> id larrow expr +Rule 30 arith -> not comp +Rule 31 arith -> comp +Rule 32 comp -> comp less op +Rule 33 comp -> comp lesseq op +Rule 34 comp -> comp equal op +Rule 35 comp -> op +Rule 36 op -> op plus term +Rule 37 op -> op minus term +Rule 38 op -> term +Rule 39 term -> term star base_call +Rule 40 term -> term div base_call +Rule 41 term -> isvoid base_call +Rule 42 term -> nox base_call +Rule 43 term -> base_call +Rule 44 base_call -> factor arroba id dot func_call +Rule 45 base_call -> factor +Rule 46 factor -> atom +Rule 47 factor -> opar expr cpar +Rule 48 factor -> factor dot func_call +Rule 49 factor -> func_call +Rule 50 atom -> num +Rule 51 atom -> id +Rule 52 atom -> new id +Rule 53 atom -> ocur block ccur +Rule 54 atom -> true +Rule 55 atom -> false +Rule 56 atom -> string +Rule 57 block -> expr semi +Rule 58 block -> expr semi block +Rule 59 func_call -> id opar arg_list cpar +Rule 60 arg_list -> expr +Rule 61 arg_list -> expr comma arg_list +Rule 62 arg_list -> epsilon + +Terminals, with rules where they appear + +arroba : 44 +case : 18 +ccur : 5 6 12 53 +class : 5 6 +colon : 10 11 12 16 28 +comma : 14 23 61 +cpar : 12 47 59 +def : +div : 40 +dot : 44 48 +else : 19 +equal : 34 +error : +esac : 18 +false : 55 +fi : 19 +id : 5 6 6 10 10 11 11 12 12 16 16 28 28 29 44 51 52 59 +if : 19 +in : 17 +inherits : 6 +isvoid : 41 +larrow : 11 24 29 +less : 32 +lesseq : 33 +let : 17 +loop : 20 +minus : 37 +new : 52 +not : 30 +nox : 42 +num : 50 +ocur : 5 6 12 53 +of : 18 +opar : 12 47 59 +plus : 36 +pool : 20 +print : +rarrow : 28 +semi : 5 6 8 9 26 27 57 58 +star : 39 +string : 56 +then : 19 +true : 54 +while : 20 + +Nonterminals, with rules where they appear + +arg_list : 59 61 +arith : 21 +atom : 46 +base_call : 39 40 41 42 43 +block : 53 58 +casep : 26 27 +cases_list : 18 27 +class_list : 1 3 +comp : 30 31 32 33 34 +def_attr : 8 +def_class : 3 4 +def_func : 9 +epsilon : 7 15 62 +expr : 11 12 17 18 19 19 19 20 20 24 28 29 47 57 58 60 61 +factor : 44 45 48 +feature_list : 5 6 8 9 +func_call : 44 48 49 +let_assign : 22 23 +let_list : 17 23 +op : 32 33 34 35 36 37 +param : 13 14 24 25 +param_list : 12 14 +program : 0 +term : 36 37 38 39 40 + +Parsing method: LALR + +state 0 + + (0) S' -> . program + (1) program -> . class_list + (3) class_list -> . def_class class_list + (4) class_list -> . def_class + (5) def_class -> . class id ocur feature_list ccur semi + (6) def_class -> . class id inherits id ocur feature_list ccur semi + + class shift and go to state 4 + + program shift and go to state 1 + class_list shift and go to state 2 + def_class shift and go to state 3 + +state 1 + + (0) S' -> program . + + + +state 2 + + (1) program -> class_list . + + $end reduce using rule 1 (program -> class_list .) + + +state 3 + + (3) class_list -> def_class . class_list + (4) class_list -> def_class . + (3) class_list -> . def_class class_list + (4) class_list -> . def_class + (5) def_class -> . class id ocur feature_list ccur semi + (6) def_class -> . class id inherits id ocur feature_list ccur semi + + $end reduce using rule 4 (class_list -> def_class .) + class shift and go to state 4 + + def_class shift and go to state 3 + class_list shift and go to state 5 + +state 4 + + (5) def_class -> class . id ocur feature_list ccur semi + (6) def_class -> class . id inherits id ocur feature_list ccur semi + + id shift and go to state 6 + + +state 5 + + (3) class_list -> def_class class_list . + + $end reduce using rule 3 (class_list -> def_class class_list .) + + +state 6 + + (5) def_class -> class id . ocur feature_list ccur semi + (6) def_class -> class id . inherits id ocur feature_list ccur semi + + ocur shift and go to state 7 + inherits shift and go to state 8 + + +state 7 + + (5) def_class -> class id ocur . feature_list ccur semi + (7) feature_list -> . epsilon + (8) feature_list -> . def_attr semi feature_list + (9) feature_list -> . def_func semi feature_list + (2) epsilon -> . + (10) def_attr -> . id colon id + (11) def_attr -> . id colon id larrow expr + (12) def_func -> . id opar param_list cpar colon id ocur expr ccur + + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 9 + + feature_list shift and go to state 10 + epsilon shift and go to state 11 + def_attr shift and go to state 12 + def_func shift and go to state 13 + +state 8 + + (6) def_class -> class id inherits . id ocur feature_list ccur semi + + id shift and go to state 14 + + +state 9 + + (10) def_attr -> id . colon id + (11) def_attr -> id . colon id larrow expr + (12) def_func -> id . opar param_list cpar colon id ocur expr ccur + + colon shift and go to state 15 + opar shift and go to state 16 + + +state 10 + + (5) def_class -> class id ocur feature_list . ccur semi + + ccur shift and go to state 17 + + +state 11 + + (7) feature_list -> epsilon . + + ccur reduce using rule 7 (feature_list -> epsilon .) + + +state 12 + + (8) feature_list -> def_attr . semi feature_list + + semi shift and go to state 18 + + +state 13 + + (9) feature_list -> def_func . semi feature_list + + semi shift and go to state 19 + + +state 14 + + (6) def_class -> class id inherits id . ocur feature_list ccur semi + + ocur shift and go to state 20 + + +state 15 + + (10) def_attr -> id colon . id + (11) def_attr -> id colon . id larrow expr + + id shift and go to state 21 + + +state 16 + + (12) def_func -> id opar . param_list cpar colon id ocur expr ccur + (13) param_list -> . param + (14) param_list -> . param comma param_list + (15) param_list -> . epsilon + (16) param -> . id colon id + (2) epsilon -> . + + id shift and go to state 22 + cpar reduce using rule 2 (epsilon -> .) + + param_list shift and go to state 23 + param shift and go to state 24 + epsilon shift and go to state 25 + +state 17 + + (5) def_class -> class id ocur feature_list ccur . semi + + semi shift and go to state 26 + + +state 18 + + (8) feature_list -> def_attr semi . feature_list + (7) feature_list -> . epsilon + (8) feature_list -> . def_attr semi feature_list + (9) feature_list -> . def_func semi feature_list + (2) epsilon -> . + (10) def_attr -> . id colon id + (11) def_attr -> . id colon id larrow expr + (12) def_func -> . id opar param_list cpar colon id ocur expr ccur + + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 9 + + def_attr shift and go to state 12 + feature_list shift and go to state 27 + epsilon shift and go to state 11 + def_func shift and go to state 13 + +state 19 + + (9) feature_list -> def_func semi . feature_list + (7) feature_list -> . epsilon + (8) feature_list -> . def_attr semi feature_list + (9) feature_list -> . def_func semi feature_list + (2) epsilon -> . + (10) def_attr -> . id colon id + (11) def_attr -> . id colon id larrow expr + (12) def_func -> . id opar param_list cpar colon id ocur expr ccur + + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 9 + + def_func shift and go to state 13 + feature_list shift and go to state 28 + epsilon shift and go to state 11 + def_attr shift and go to state 12 + +state 20 + + (6) def_class -> class id inherits id ocur . feature_list ccur semi + (7) feature_list -> . epsilon + (8) feature_list -> . def_attr semi feature_list + (9) feature_list -> . def_func semi feature_list + (2) epsilon -> . + (10) def_attr -> . id colon id + (11) def_attr -> . id colon id larrow expr + (12) def_func -> . id opar param_list cpar colon id ocur expr ccur + + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 9 + + feature_list shift and go to state 29 + epsilon shift and go to state 11 + def_attr shift and go to state 12 + def_func shift and go to state 13 + +state 21 + + (10) def_attr -> id colon id . + (11) def_attr -> id colon id . larrow expr + + semi reduce using rule 10 (def_attr -> id colon id .) + larrow shift and go to state 30 + + +state 22 + + (16) param -> id . colon id + + colon shift and go to state 31 + + +state 23 + + (12) def_func -> id opar param_list . cpar colon id ocur expr ccur + + cpar shift and go to state 32 + + +state 24 + + (13) param_list -> param . + (14) param_list -> param . comma param_list + + cpar reduce using rule 13 (param_list -> param .) + comma shift and go to state 33 + + +state 25 + + (15) param_list -> epsilon . + + cpar reduce using rule 15 (param_list -> epsilon .) + + +state 26 + + (5) def_class -> class id ocur feature_list ccur semi . + + class reduce using rule 5 (def_class -> class id ocur feature_list ccur semi .) + $end reduce using rule 5 (def_class -> class id ocur feature_list ccur semi .) + + +state 27 + + (8) feature_list -> def_attr semi feature_list . + + ccur reduce using rule 8 (feature_list -> def_attr semi feature_list .) + + +state 28 + + (9) feature_list -> def_func semi feature_list . + + ccur reduce using rule 9 (feature_list -> def_func semi feature_list .) + + +state 29 + + (6) def_class -> class id inherits id ocur feature_list . ccur semi + + ccur shift and go to state 34 + + +state 30 + + (11) def_attr -> id colon id larrow . expr + (17) expr -> . let let_list in expr + (18) expr -> . case expr of cases_list esac + (19) expr -> . if expr then expr else expr fi + (20) expr -> . while expr loop expr pool + (21) expr -> . arith + (29) arith -> . id larrow expr + (30) arith -> . not comp + (31) arith -> . comp + (32) comp -> . comp less op + (33) comp -> . comp lesseq op + (34) comp -> . comp equal op + (35) comp -> . op + (36) op -> . op plus term + (37) op -> . op minus term + (38) op -> . term + (39) term -> . term star base_call + (40) term -> . term div base_call + (41) term -> . isvoid base_call + (42) term -> . nox base_call + (43) term -> . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + let shift and go to state 37 + case shift and go to state 38 + if shift and go to state 39 + while shift and go to state 40 + id shift and go to state 35 + not shift and go to state 42 + isvoid shift and go to state 47 + nox shift and go to state 48 + opar shift and go to state 52 + num shift and go to state 53 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + expr shift and go to state 36 + arith shift and go to state 41 + comp shift and go to state 43 + op shift and go to state 44 + term shift and go to state 45 + base_call shift and go to state 46 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 31 + + (16) param -> id colon . id + + id shift and go to state 59 + + +state 32 + + (12) def_func -> id opar param_list cpar . colon id ocur expr ccur + + colon shift and go to state 60 + + +state 33 + + (14) param_list -> param comma . param_list + (13) param_list -> . param + (14) param_list -> . param comma param_list + (15) param_list -> . epsilon + (16) param -> . id colon id + (2) epsilon -> . + + id shift and go to state 22 + cpar reduce using rule 2 (epsilon -> .) + + param shift and go to state 24 + param_list shift and go to state 61 + epsilon shift and go to state 25 + +state 34 + + (6) def_class -> class id inherits id ocur feature_list ccur . semi + + semi shift and go to state 62 + + +state 35 + + (29) arith -> id . larrow expr + (51) atom -> id . + (59) func_call -> id . opar arg_list cpar + + larrow shift and go to state 63 + arroba reduce using rule 51 (atom -> id .) + dot reduce using rule 51 (atom -> id .) + star reduce using rule 51 (atom -> id .) + div reduce using rule 51 (atom -> id .) + plus reduce using rule 51 (atom -> id .) + minus reduce using rule 51 (atom -> id .) + less reduce using rule 51 (atom -> id .) + lesseq reduce using rule 51 (atom -> id .) + equal reduce using rule 51 (atom -> id .) + semi reduce using rule 51 (atom -> id .) + of reduce using rule 51 (atom -> id .) + then reduce using rule 51 (atom -> id .) + loop reduce using rule 51 (atom -> id .) + cpar reduce using rule 51 (atom -> id .) + comma reduce using rule 51 (atom -> id .) + in reduce using rule 51 (atom -> id .) + else reduce using rule 51 (atom -> id .) + pool reduce using rule 51 (atom -> id .) + ccur reduce using rule 51 (atom -> id .) + fi reduce using rule 51 (atom -> id .) + opar shift and go to state 64 + + +state 36 + + (11) def_attr -> id colon id larrow expr . + + semi reduce using rule 11 (def_attr -> id colon id larrow expr .) + + +state 37 + + (17) expr -> let . let_list in expr + (22) let_list -> . let_assign + (23) let_list -> . let_assign comma let_list + (24) let_assign -> . param larrow expr + (25) let_assign -> . param + (16) param -> . id colon id + + id shift and go to state 22 + + let_list shift and go to state 65 + let_assign shift and go to state 66 + param shift and go to state 67 + +state 38 + + (18) expr -> case . expr of cases_list esac + (17) expr -> . let let_list in expr + (18) expr -> . case expr of cases_list esac + (19) expr -> . if expr then expr else expr fi + (20) expr -> . while expr loop expr pool + (21) expr -> . arith + (29) arith -> . id larrow expr + (30) arith -> . not comp + (31) arith -> . comp + (32) comp -> . comp less op + (33) comp -> . comp lesseq op + (34) comp -> . comp equal op + (35) comp -> . op + (36) op -> . op plus term + (37) op -> . op minus term + (38) op -> . term + (39) term -> . term star base_call + (40) term -> . term div base_call + (41) term -> . isvoid base_call + (42) term -> . nox base_call + (43) term -> . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + let shift and go to state 37 + case shift and go to state 38 + if shift and go to state 39 + while shift and go to state 40 + id shift and go to state 35 + not shift and go to state 42 + isvoid shift and go to state 47 + nox shift and go to state 48 + opar shift and go to state 52 + num shift and go to state 53 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + expr shift and go to state 68 + arith shift and go to state 41 + comp shift and go to state 43 + op shift and go to state 44 + term shift and go to state 45 + base_call shift and go to state 46 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 39 + + (19) expr -> if . expr then expr else expr fi + (17) expr -> . let let_list in expr + (18) expr -> . case expr of cases_list esac + (19) expr -> . if expr then expr else expr fi + (20) expr -> . while expr loop expr pool + (21) expr -> . arith + (29) arith -> . id larrow expr + (30) arith -> . not comp + (31) arith -> . comp + (32) comp -> . comp less op + (33) comp -> . comp lesseq op + (34) comp -> . comp equal op + (35) comp -> . op + (36) op -> . op plus term + (37) op -> . op minus term + (38) op -> . term + (39) term -> . term star base_call + (40) term -> . term div base_call + (41) term -> . isvoid base_call + (42) term -> . nox base_call + (43) term -> . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + let shift and go to state 37 + case shift and go to state 38 + if shift and go to state 39 + while shift and go to state 40 + id shift and go to state 35 + not shift and go to state 42 + isvoid shift and go to state 47 + nox shift and go to state 48 + opar shift and go to state 52 + num shift and go to state 53 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + expr shift and go to state 69 + arith shift and go to state 41 + comp shift and go to state 43 + op shift and go to state 44 + term shift and go to state 45 + base_call shift and go to state 46 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 40 + + (20) expr -> while . expr loop expr pool + (17) expr -> . let let_list in expr + (18) expr -> . case expr of cases_list esac + (19) expr -> . if expr then expr else expr fi + (20) expr -> . while expr loop expr pool + (21) expr -> . arith + (29) arith -> . id larrow expr + (30) arith -> . not comp + (31) arith -> . comp + (32) comp -> . comp less op + (33) comp -> . comp lesseq op + (34) comp -> . comp equal op + (35) comp -> . op + (36) op -> . op plus term + (37) op -> . op minus term + (38) op -> . term + (39) term -> . term star base_call + (40) term -> . term div base_call + (41) term -> . isvoid base_call + (42) term -> . nox base_call + (43) term -> . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + let shift and go to state 37 + case shift and go to state 38 + if shift and go to state 39 + while shift and go to state 40 + id shift and go to state 35 + not shift and go to state 42 + isvoid shift and go to state 47 + nox shift and go to state 48 + opar shift and go to state 52 + num shift and go to state 53 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + expr shift and go to state 70 + arith shift and go to state 41 + comp shift and go to state 43 + op shift and go to state 44 + term shift and go to state 45 + base_call shift and go to state 46 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 41 + + (21) expr -> arith . + + semi reduce using rule 21 (expr -> arith .) + of reduce using rule 21 (expr -> arith .) + then reduce using rule 21 (expr -> arith .) + loop reduce using rule 21 (expr -> arith .) + cpar reduce using rule 21 (expr -> arith .) + comma reduce using rule 21 (expr -> arith .) + in reduce using rule 21 (expr -> arith .) + else reduce using rule 21 (expr -> arith .) + pool reduce using rule 21 (expr -> arith .) + ccur reduce using rule 21 (expr -> arith .) + fi reduce using rule 21 (expr -> arith .) + + +state 42 + + (30) arith -> not . comp + (32) comp -> . comp less op + (33) comp -> . comp lesseq op + (34) comp -> . comp equal op + (35) comp -> . op + (36) op -> . op plus term + (37) op -> . op minus term + (38) op -> . term + (39) term -> . term star base_call + (40) term -> . term div base_call + (41) term -> . isvoid base_call + (42) term -> . nox base_call + (43) term -> . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + isvoid shift and go to state 47 + nox shift and go to state 48 + opar shift and go to state 52 + num shift and go to state 53 + id shift and go to state 72 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + comp shift and go to state 71 + op shift and go to state 44 + term shift and go to state 45 + base_call shift and go to state 46 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 43 + + (31) arith -> comp . + (32) comp -> comp . less op + (33) comp -> comp . lesseq op + (34) comp -> comp . equal op + + semi reduce using rule 31 (arith -> comp .) + of reduce using rule 31 (arith -> comp .) + then reduce using rule 31 (arith -> comp .) + loop reduce using rule 31 (arith -> comp .) + cpar reduce using rule 31 (arith -> comp .) + comma reduce using rule 31 (arith -> comp .) + in reduce using rule 31 (arith -> comp .) + else reduce using rule 31 (arith -> comp .) + pool reduce using rule 31 (arith -> comp .) + ccur reduce using rule 31 (arith -> comp .) + fi reduce using rule 31 (arith -> comp .) + less shift and go to state 73 + lesseq shift and go to state 74 + equal shift and go to state 75 + + +state 44 + + (35) comp -> op . + (36) op -> op . plus term + (37) op -> op . minus term + + less reduce using rule 35 (comp -> op .) + lesseq reduce using rule 35 (comp -> op .) + equal reduce using rule 35 (comp -> op .) + semi reduce using rule 35 (comp -> op .) + of reduce using rule 35 (comp -> op .) + then reduce using rule 35 (comp -> op .) + loop reduce using rule 35 (comp -> op .) + cpar reduce using rule 35 (comp -> op .) + comma reduce using rule 35 (comp -> op .) + in reduce using rule 35 (comp -> op .) + else reduce using rule 35 (comp -> op .) + pool reduce using rule 35 (comp -> op .) + ccur reduce using rule 35 (comp -> op .) + fi reduce using rule 35 (comp -> op .) + plus shift and go to state 76 + minus shift and go to state 77 + + +state 45 + + (38) op -> term . + (39) term -> term . star base_call + (40) term -> term . div base_call + + plus reduce using rule 38 (op -> term .) + minus reduce using rule 38 (op -> term .) + less reduce using rule 38 (op -> term .) + lesseq reduce using rule 38 (op -> term .) + equal reduce using rule 38 (op -> term .) + semi reduce using rule 38 (op -> term .) + of reduce using rule 38 (op -> term .) + then reduce using rule 38 (op -> term .) + loop reduce using rule 38 (op -> term .) + cpar reduce using rule 38 (op -> term .) + comma reduce using rule 38 (op -> term .) + in reduce using rule 38 (op -> term .) + else reduce using rule 38 (op -> term .) + pool reduce using rule 38 (op -> term .) + ccur reduce using rule 38 (op -> term .) + fi reduce using rule 38 (op -> term .) + star shift and go to state 78 + div shift and go to state 79 + + +state 46 + + (43) term -> base_call . + + star reduce using rule 43 (term -> base_call .) + div reduce using rule 43 (term -> base_call .) + plus reduce using rule 43 (term -> base_call .) + minus reduce using rule 43 (term -> base_call .) + less reduce using rule 43 (term -> base_call .) + lesseq reduce using rule 43 (term -> base_call .) + equal reduce using rule 43 (term -> base_call .) + semi reduce using rule 43 (term -> base_call .) + of reduce using rule 43 (term -> base_call .) + then reduce using rule 43 (term -> base_call .) + loop reduce using rule 43 (term -> base_call .) + cpar reduce using rule 43 (term -> base_call .) + comma reduce using rule 43 (term -> base_call .) + in reduce using rule 43 (term -> base_call .) + else reduce using rule 43 (term -> base_call .) + pool reduce using rule 43 (term -> base_call .) + ccur reduce using rule 43 (term -> base_call .) + fi reduce using rule 43 (term -> base_call .) + + +state 47 + + (41) term -> isvoid . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + opar shift and go to state 52 + num shift and go to state 53 + id shift and go to state 72 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + base_call shift and go to state 80 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 48 + + (42) term -> nox . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + opar shift and go to state 52 + num shift and go to state 53 + id shift and go to state 72 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + base_call shift and go to state 81 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 49 + + (44) base_call -> factor . arroba id dot func_call + (45) base_call -> factor . + (48) factor -> factor . dot func_call + + arroba shift and go to state 82 + star reduce using rule 45 (base_call -> factor .) + div reduce using rule 45 (base_call -> factor .) + plus reduce using rule 45 (base_call -> factor .) + minus reduce using rule 45 (base_call -> factor .) + less reduce using rule 45 (base_call -> factor .) + lesseq reduce using rule 45 (base_call -> factor .) + equal reduce using rule 45 (base_call -> factor .) + semi reduce using rule 45 (base_call -> factor .) + of reduce using rule 45 (base_call -> factor .) + then reduce using rule 45 (base_call -> factor .) + loop reduce using rule 45 (base_call -> factor .) + cpar reduce using rule 45 (base_call -> factor .) + comma reduce using rule 45 (base_call -> factor .) + in reduce using rule 45 (base_call -> factor .) + else reduce using rule 45 (base_call -> factor .) + pool reduce using rule 45 (base_call -> factor .) + ccur reduce using rule 45 (base_call -> factor .) + fi reduce using rule 45 (base_call -> factor .) + dot shift and go to state 83 + + +state 50 + + (49) factor -> func_call . + + arroba reduce using rule 49 (factor -> func_call .) + dot reduce using rule 49 (factor -> func_call .) + star reduce using rule 49 (factor -> func_call .) + div reduce using rule 49 (factor -> func_call .) + plus reduce using rule 49 (factor -> func_call .) + minus reduce using rule 49 (factor -> func_call .) + less reduce using rule 49 (factor -> func_call .) + lesseq reduce using rule 49 (factor -> func_call .) + equal reduce using rule 49 (factor -> func_call .) + semi reduce using rule 49 (factor -> func_call .) + of reduce using rule 49 (factor -> func_call .) + then reduce using rule 49 (factor -> func_call .) + loop reduce using rule 49 (factor -> func_call .) + cpar reduce using rule 49 (factor -> func_call .) + comma reduce using rule 49 (factor -> func_call .) + in reduce using rule 49 (factor -> func_call .) + else reduce using rule 49 (factor -> func_call .) + pool reduce using rule 49 (factor -> func_call .) + ccur reduce using rule 49 (factor -> func_call .) + fi reduce using rule 49 (factor -> func_call .) + + +state 51 + + (46) factor -> atom . + + arroba reduce using rule 46 (factor -> atom .) + dot reduce using rule 46 (factor -> atom .) + star reduce using rule 46 (factor -> atom .) + div reduce using rule 46 (factor -> atom .) + plus reduce using rule 46 (factor -> atom .) + minus reduce using rule 46 (factor -> atom .) + less reduce using rule 46 (factor -> atom .) + lesseq reduce using rule 46 (factor -> atom .) + equal reduce using rule 46 (factor -> atom .) + semi reduce using rule 46 (factor -> atom .) + of reduce using rule 46 (factor -> atom .) + then reduce using rule 46 (factor -> atom .) + loop reduce using rule 46 (factor -> atom .) + cpar reduce using rule 46 (factor -> atom .) + comma reduce using rule 46 (factor -> atom .) + in reduce using rule 46 (factor -> atom .) + else reduce using rule 46 (factor -> atom .) + pool reduce using rule 46 (factor -> atom .) + ccur reduce using rule 46 (factor -> atom .) + fi reduce using rule 46 (factor -> atom .) + + +state 52 + + (47) factor -> opar . expr cpar + (17) expr -> . let let_list in expr + (18) expr -> . case expr of cases_list esac + (19) expr -> . if expr then expr else expr fi + (20) expr -> . while expr loop expr pool + (21) expr -> . arith + (29) arith -> . id larrow expr + (30) arith -> . not comp + (31) arith -> . comp + (32) comp -> . comp less op + (33) comp -> . comp lesseq op + (34) comp -> . comp equal op + (35) comp -> . op + (36) op -> . op plus term + (37) op -> . op minus term + (38) op -> . term + (39) term -> . term star base_call + (40) term -> . term div base_call + (41) term -> . isvoid base_call + (42) term -> . nox base_call + (43) term -> . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + let shift and go to state 37 + case shift and go to state 38 + if shift and go to state 39 + while shift and go to state 40 + id shift and go to state 35 + not shift and go to state 42 + isvoid shift and go to state 47 + nox shift and go to state 48 + opar shift and go to state 52 + num shift and go to state 53 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + expr shift and go to state 84 + arith shift and go to state 41 + comp shift and go to state 43 + op shift and go to state 44 + term shift and go to state 45 + base_call shift and go to state 46 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 53 + + (50) atom -> num . + + arroba reduce using rule 50 (atom -> num .) + dot reduce using rule 50 (atom -> num .) + star reduce using rule 50 (atom -> num .) + div reduce using rule 50 (atom -> num .) + plus reduce using rule 50 (atom -> num .) + minus reduce using rule 50 (atom -> num .) + less reduce using rule 50 (atom -> num .) + lesseq reduce using rule 50 (atom -> num .) + equal reduce using rule 50 (atom -> num .) + semi reduce using rule 50 (atom -> num .) + of reduce using rule 50 (atom -> num .) + then reduce using rule 50 (atom -> num .) + loop reduce using rule 50 (atom -> num .) + cpar reduce using rule 50 (atom -> num .) + comma reduce using rule 50 (atom -> num .) + in reduce using rule 50 (atom -> num .) + else reduce using rule 50 (atom -> num .) + pool reduce using rule 50 (atom -> num .) + ccur reduce using rule 50 (atom -> num .) + fi reduce using rule 50 (atom -> num .) + + +state 54 + + (52) atom -> new . id + + id shift and go to state 85 + + +state 55 + + (53) atom -> ocur . block ccur + (57) block -> . expr semi + (58) block -> . expr semi block + (17) expr -> . let let_list in expr + (18) expr -> . case expr of cases_list esac + (19) expr -> . if expr then expr else expr fi + (20) expr -> . while expr loop expr pool + (21) expr -> . arith + (29) arith -> . id larrow expr + (30) arith -> . not comp + (31) arith -> . comp + (32) comp -> . comp less op + (33) comp -> . comp lesseq op + (34) comp -> . comp equal op + (35) comp -> . op + (36) op -> . op plus term + (37) op -> . op minus term + (38) op -> . term + (39) term -> . term star base_call + (40) term -> . term div base_call + (41) term -> . isvoid base_call + (42) term -> . nox base_call + (43) term -> . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + let shift and go to state 37 + case shift and go to state 38 + if shift and go to state 39 + while shift and go to state 40 + id shift and go to state 35 + not shift and go to state 42 + isvoid shift and go to state 47 + nox shift and go to state 48 + opar shift and go to state 52 + num shift and go to state 53 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + block shift and go to state 86 + expr shift and go to state 87 + arith shift and go to state 41 + comp shift and go to state 43 + op shift and go to state 44 + term shift and go to state 45 + base_call shift and go to state 46 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 56 + + (54) atom -> true . + + arroba reduce using rule 54 (atom -> true .) + dot reduce using rule 54 (atom -> true .) + star reduce using rule 54 (atom -> true .) + div reduce using rule 54 (atom -> true .) + plus reduce using rule 54 (atom -> true .) + minus reduce using rule 54 (atom -> true .) + less reduce using rule 54 (atom -> true .) + lesseq reduce using rule 54 (atom -> true .) + equal reduce using rule 54 (atom -> true .) + semi reduce using rule 54 (atom -> true .) + of reduce using rule 54 (atom -> true .) + then reduce using rule 54 (atom -> true .) + loop reduce using rule 54 (atom -> true .) + cpar reduce using rule 54 (atom -> true .) + comma reduce using rule 54 (atom -> true .) + in reduce using rule 54 (atom -> true .) + else reduce using rule 54 (atom -> true .) + pool reduce using rule 54 (atom -> true .) + ccur reduce using rule 54 (atom -> true .) + fi reduce using rule 54 (atom -> true .) + + +state 57 + + (55) atom -> false . + + arroba reduce using rule 55 (atom -> false .) + dot reduce using rule 55 (atom -> false .) + star reduce using rule 55 (atom -> false .) + div reduce using rule 55 (atom -> false .) + plus reduce using rule 55 (atom -> false .) + minus reduce using rule 55 (atom -> false .) + less reduce using rule 55 (atom -> false .) + lesseq reduce using rule 55 (atom -> false .) + equal reduce using rule 55 (atom -> false .) + semi reduce using rule 55 (atom -> false .) + of reduce using rule 55 (atom -> false .) + then reduce using rule 55 (atom -> false .) + loop reduce using rule 55 (atom -> false .) + cpar reduce using rule 55 (atom -> false .) + comma reduce using rule 55 (atom -> false .) + in reduce using rule 55 (atom -> false .) + else reduce using rule 55 (atom -> false .) + pool reduce using rule 55 (atom -> false .) + ccur reduce using rule 55 (atom -> false .) + fi reduce using rule 55 (atom -> false .) + + +state 58 + + (56) atom -> string . + + arroba reduce using rule 56 (atom -> string .) + dot reduce using rule 56 (atom -> string .) + star reduce using rule 56 (atom -> string .) + div reduce using rule 56 (atom -> string .) + plus reduce using rule 56 (atom -> string .) + minus reduce using rule 56 (atom -> string .) + less reduce using rule 56 (atom -> string .) + lesseq reduce using rule 56 (atom -> string .) + equal reduce using rule 56 (atom -> string .) + semi reduce using rule 56 (atom -> string .) + of reduce using rule 56 (atom -> string .) + then reduce using rule 56 (atom -> string .) + loop reduce using rule 56 (atom -> string .) + cpar reduce using rule 56 (atom -> string .) + comma reduce using rule 56 (atom -> string .) + in reduce using rule 56 (atom -> string .) + else reduce using rule 56 (atom -> string .) + pool reduce using rule 56 (atom -> string .) + ccur reduce using rule 56 (atom -> string .) + fi reduce using rule 56 (atom -> string .) + + +state 59 + + (16) param -> id colon id . + + comma reduce using rule 16 (param -> id colon id .) + cpar reduce using rule 16 (param -> id colon id .) + larrow reduce using rule 16 (param -> id colon id .) + in reduce using rule 16 (param -> id colon id .) + + +state 60 + + (12) def_func -> id opar param_list cpar colon . id ocur expr ccur + + id shift and go to state 88 + + +state 61 + + (14) param_list -> param comma param_list . + + cpar reduce using rule 14 (param_list -> param comma param_list .) + + +state 62 + + (6) def_class -> class id inherits id ocur feature_list ccur semi . + + class reduce using rule 6 (def_class -> class id inherits id ocur feature_list ccur semi .) + $end reduce using rule 6 (def_class -> class id inherits id ocur feature_list ccur semi .) + + +state 63 + + (29) arith -> id larrow . expr + (17) expr -> . let let_list in expr + (18) expr -> . case expr of cases_list esac + (19) expr -> . if expr then expr else expr fi + (20) expr -> . while expr loop expr pool + (21) expr -> . arith + (29) arith -> . id larrow expr + (30) arith -> . not comp + (31) arith -> . comp + (32) comp -> . comp less op + (33) comp -> . comp lesseq op + (34) comp -> . comp equal op + (35) comp -> . op + (36) op -> . op plus term + (37) op -> . op minus term + (38) op -> . term + (39) term -> . term star base_call + (40) term -> . term div base_call + (41) term -> . isvoid base_call + (42) term -> . nox base_call + (43) term -> . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + let shift and go to state 37 + case shift and go to state 38 + if shift and go to state 39 + while shift and go to state 40 + id shift and go to state 35 + not shift and go to state 42 + isvoid shift and go to state 47 + nox shift and go to state 48 + opar shift and go to state 52 + num shift and go to state 53 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + expr shift and go to state 89 + arith shift and go to state 41 + comp shift and go to state 43 + op shift and go to state 44 + term shift and go to state 45 + base_call shift and go to state 46 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 64 + + (59) func_call -> id opar . arg_list cpar + (60) arg_list -> . expr + (61) arg_list -> . expr comma arg_list + (62) arg_list -> . epsilon + (17) expr -> . let let_list in expr + (18) expr -> . case expr of cases_list esac + (19) expr -> . if expr then expr else expr fi + (20) expr -> . while expr loop expr pool + (21) expr -> . arith + (2) epsilon -> . + (29) arith -> . id larrow expr + (30) arith -> . not comp + (31) arith -> . comp + (32) comp -> . comp less op + (33) comp -> . comp lesseq op + (34) comp -> . comp equal op + (35) comp -> . op + (36) op -> . op plus term + (37) op -> . op minus term + (38) op -> . term + (39) term -> . term star base_call + (40) term -> . term div base_call + (41) term -> . isvoid base_call + (42) term -> . nox base_call + (43) term -> . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + let shift and go to state 37 + case shift and go to state 38 + if shift and go to state 39 + while shift and go to state 40 + cpar reduce using rule 2 (epsilon -> .) + id shift and go to state 35 + not shift and go to state 42 + isvoid shift and go to state 47 + nox shift and go to state 48 + opar shift and go to state 52 + num shift and go to state 53 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + arg_list shift and go to state 90 + expr shift and go to state 91 + epsilon shift and go to state 92 + arith shift and go to state 41 + comp shift and go to state 43 + op shift and go to state 44 + term shift and go to state 45 + base_call shift and go to state 46 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 65 + + (17) expr -> let let_list . in expr + + in shift and go to state 93 + + +state 66 + + (22) let_list -> let_assign . + (23) let_list -> let_assign . comma let_list + + in reduce using rule 22 (let_list -> let_assign .) + comma shift and go to state 94 + + +state 67 + + (24) let_assign -> param . larrow expr + (25) let_assign -> param . + + larrow shift and go to state 95 + comma reduce using rule 25 (let_assign -> param .) + in reduce using rule 25 (let_assign -> param .) + + +state 68 + + (18) expr -> case expr . of cases_list esac + + of shift and go to state 96 + + +state 69 + + (19) expr -> if expr . then expr else expr fi + + then shift and go to state 97 + + +state 70 + + (20) expr -> while expr . loop expr pool + + loop shift and go to state 98 + + +state 71 + + (30) arith -> not comp . + (32) comp -> comp . less op + (33) comp -> comp . lesseq op + (34) comp -> comp . equal op + + semi reduce using rule 30 (arith -> not comp .) + of reduce using rule 30 (arith -> not comp .) + then reduce using rule 30 (arith -> not comp .) + loop reduce using rule 30 (arith -> not comp .) + cpar reduce using rule 30 (arith -> not comp .) + comma reduce using rule 30 (arith -> not comp .) + in reduce using rule 30 (arith -> not comp .) + else reduce using rule 30 (arith -> not comp .) + pool reduce using rule 30 (arith -> not comp .) + ccur reduce using rule 30 (arith -> not comp .) + fi reduce using rule 30 (arith -> not comp .) + less shift and go to state 73 + lesseq shift and go to state 74 + equal shift and go to state 75 + + +state 72 + + (51) atom -> id . + (59) func_call -> id . opar arg_list cpar + + arroba reduce using rule 51 (atom -> id .) + dot reduce using rule 51 (atom -> id .) + star reduce using rule 51 (atom -> id .) + div reduce using rule 51 (atom -> id .) + plus reduce using rule 51 (atom -> id .) + minus reduce using rule 51 (atom -> id .) + less reduce using rule 51 (atom -> id .) + lesseq reduce using rule 51 (atom -> id .) + equal reduce using rule 51 (atom -> id .) + semi reduce using rule 51 (atom -> id .) + of reduce using rule 51 (atom -> id .) + then reduce using rule 51 (atom -> id .) + loop reduce using rule 51 (atom -> id .) + cpar reduce using rule 51 (atom -> id .) + comma reduce using rule 51 (atom -> id .) + in reduce using rule 51 (atom -> id .) + else reduce using rule 51 (atom -> id .) + pool reduce using rule 51 (atom -> id .) + ccur reduce using rule 51 (atom -> id .) + fi reduce using rule 51 (atom -> id .) + opar shift and go to state 64 + + +state 73 + + (32) comp -> comp less . op + (36) op -> . op plus term + (37) op -> . op minus term + (38) op -> . term + (39) term -> . term star base_call + (40) term -> . term div base_call + (41) term -> . isvoid base_call + (42) term -> . nox base_call + (43) term -> . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + isvoid shift and go to state 47 + nox shift and go to state 48 + opar shift and go to state 52 + num shift and go to state 53 + id shift and go to state 72 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + op shift and go to state 99 + term shift and go to state 45 + base_call shift and go to state 46 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 74 + + (33) comp -> comp lesseq . op + (36) op -> . op plus term + (37) op -> . op minus term + (38) op -> . term + (39) term -> . term star base_call + (40) term -> . term div base_call + (41) term -> . isvoid base_call + (42) term -> . nox base_call + (43) term -> . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + isvoid shift and go to state 47 + nox shift and go to state 48 + opar shift and go to state 52 + num shift and go to state 53 + id shift and go to state 72 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + op shift and go to state 100 + term shift and go to state 45 + base_call shift and go to state 46 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 75 + + (34) comp -> comp equal . op + (36) op -> . op plus term + (37) op -> . op minus term + (38) op -> . term + (39) term -> . term star base_call + (40) term -> . term div base_call + (41) term -> . isvoid base_call + (42) term -> . nox base_call + (43) term -> . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + isvoid shift and go to state 47 + nox shift and go to state 48 + opar shift and go to state 52 + num shift and go to state 53 + id shift and go to state 72 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + op shift and go to state 101 + term shift and go to state 45 + base_call shift and go to state 46 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 76 + + (36) op -> op plus . term + (39) term -> . term star base_call + (40) term -> . term div base_call + (41) term -> . isvoid base_call + (42) term -> . nox base_call + (43) term -> . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + isvoid shift and go to state 47 + nox shift and go to state 48 + opar shift and go to state 52 + num shift and go to state 53 + id shift and go to state 72 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + term shift and go to state 102 + base_call shift and go to state 46 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 77 + + (37) op -> op minus . term + (39) term -> . term star base_call + (40) term -> . term div base_call + (41) term -> . isvoid base_call + (42) term -> . nox base_call + (43) term -> . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + isvoid shift and go to state 47 + nox shift and go to state 48 + opar shift and go to state 52 + num shift and go to state 53 + id shift and go to state 72 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + term shift and go to state 103 + base_call shift and go to state 46 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 78 + + (39) term -> term star . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + opar shift and go to state 52 + num shift and go to state 53 + id shift and go to state 72 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + base_call shift and go to state 104 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 79 + + (40) term -> term div . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + opar shift and go to state 52 + num shift and go to state 53 + id shift and go to state 72 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + base_call shift and go to state 105 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 80 + + (41) term -> isvoid base_call . + + star reduce using rule 41 (term -> isvoid base_call .) + div reduce using rule 41 (term -> isvoid base_call .) + plus reduce using rule 41 (term -> isvoid base_call .) + minus reduce using rule 41 (term -> isvoid base_call .) + less reduce using rule 41 (term -> isvoid base_call .) + lesseq reduce using rule 41 (term -> isvoid base_call .) + equal reduce using rule 41 (term -> isvoid base_call .) + semi reduce using rule 41 (term -> isvoid base_call .) + of reduce using rule 41 (term -> isvoid base_call .) + then reduce using rule 41 (term -> isvoid base_call .) + loop reduce using rule 41 (term -> isvoid base_call .) + cpar reduce using rule 41 (term -> isvoid base_call .) + comma reduce using rule 41 (term -> isvoid base_call .) + in reduce using rule 41 (term -> isvoid base_call .) + else reduce using rule 41 (term -> isvoid base_call .) + pool reduce using rule 41 (term -> isvoid base_call .) + ccur reduce using rule 41 (term -> isvoid base_call .) + fi reduce using rule 41 (term -> isvoid base_call .) + + +state 81 + + (42) term -> nox base_call . + + star reduce using rule 42 (term -> nox base_call .) + div reduce using rule 42 (term -> nox base_call .) + plus reduce using rule 42 (term -> nox base_call .) + minus reduce using rule 42 (term -> nox base_call .) + less reduce using rule 42 (term -> nox base_call .) + lesseq reduce using rule 42 (term -> nox base_call .) + equal reduce using rule 42 (term -> nox base_call .) + semi reduce using rule 42 (term -> nox base_call .) + of reduce using rule 42 (term -> nox base_call .) + then reduce using rule 42 (term -> nox base_call .) + loop reduce using rule 42 (term -> nox base_call .) + cpar reduce using rule 42 (term -> nox base_call .) + comma reduce using rule 42 (term -> nox base_call .) + in reduce using rule 42 (term -> nox base_call .) + else reduce using rule 42 (term -> nox base_call .) + pool reduce using rule 42 (term -> nox base_call .) + ccur reduce using rule 42 (term -> nox base_call .) + fi reduce using rule 42 (term -> nox base_call .) + + +state 82 + + (44) base_call -> factor arroba . id dot func_call + + id shift and go to state 106 + + +state 83 + + (48) factor -> factor dot . func_call + (59) func_call -> . id opar arg_list cpar + + id shift and go to state 108 + + func_call shift and go to state 107 + +state 84 + + (47) factor -> opar expr . cpar + + cpar shift and go to state 109 + + +state 85 + + (52) atom -> new id . + + arroba reduce using rule 52 (atom -> new id .) + dot reduce using rule 52 (atom -> new id .) + star reduce using rule 52 (atom -> new id .) + div reduce using rule 52 (atom -> new id .) + plus reduce using rule 52 (atom -> new id .) + minus reduce using rule 52 (atom -> new id .) + less reduce using rule 52 (atom -> new id .) + lesseq reduce using rule 52 (atom -> new id .) + equal reduce using rule 52 (atom -> new id .) + semi reduce using rule 52 (atom -> new id .) + of reduce using rule 52 (atom -> new id .) + then reduce using rule 52 (atom -> new id .) + loop reduce using rule 52 (atom -> new id .) + cpar reduce using rule 52 (atom -> new id .) + comma reduce using rule 52 (atom -> new id .) + in reduce using rule 52 (atom -> new id .) + else reduce using rule 52 (atom -> new id .) + pool reduce using rule 52 (atom -> new id .) + ccur reduce using rule 52 (atom -> new id .) + fi reduce using rule 52 (atom -> new id .) + + +state 86 + + (53) atom -> ocur block . ccur + + ccur shift and go to state 110 + + +state 87 + + (57) block -> expr . semi + (58) block -> expr . semi block + + semi shift and go to state 111 + + +state 88 + + (12) def_func -> id opar param_list cpar colon id . ocur expr ccur + + ocur shift and go to state 112 + + +state 89 + + (29) arith -> id larrow expr . + + semi reduce using rule 29 (arith -> id larrow expr .) + of reduce using rule 29 (arith -> id larrow expr .) + then reduce using rule 29 (arith -> id larrow expr .) + loop reduce using rule 29 (arith -> id larrow expr .) + cpar reduce using rule 29 (arith -> id larrow expr .) + comma reduce using rule 29 (arith -> id larrow expr .) + in reduce using rule 29 (arith -> id larrow expr .) + else reduce using rule 29 (arith -> id larrow expr .) + pool reduce using rule 29 (arith -> id larrow expr .) + ccur reduce using rule 29 (arith -> id larrow expr .) + fi reduce using rule 29 (arith -> id larrow expr .) + + +state 90 + + (59) func_call -> id opar arg_list . cpar + + cpar shift and go to state 113 + + +state 91 + + (60) arg_list -> expr . + (61) arg_list -> expr . comma arg_list + + cpar reduce using rule 60 (arg_list -> expr .) + comma shift and go to state 114 + + +state 92 + + (62) arg_list -> epsilon . + + cpar reduce using rule 62 (arg_list -> epsilon .) + + +state 93 + + (17) expr -> let let_list in . expr + (17) expr -> . let let_list in expr + (18) expr -> . case expr of cases_list esac + (19) expr -> . if expr then expr else expr fi + (20) expr -> . while expr loop expr pool + (21) expr -> . arith + (29) arith -> . id larrow expr + (30) arith -> . not comp + (31) arith -> . comp + (32) comp -> . comp less op + (33) comp -> . comp lesseq op + (34) comp -> . comp equal op + (35) comp -> . op + (36) op -> . op plus term + (37) op -> . op minus term + (38) op -> . term + (39) term -> . term star base_call + (40) term -> . term div base_call + (41) term -> . isvoid base_call + (42) term -> . nox base_call + (43) term -> . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + let shift and go to state 37 + case shift and go to state 38 + if shift and go to state 39 + while shift and go to state 40 + id shift and go to state 35 + not shift and go to state 42 + isvoid shift and go to state 47 + nox shift and go to state 48 + opar shift and go to state 52 + num shift and go to state 53 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + expr shift and go to state 115 + arith shift and go to state 41 + comp shift and go to state 43 + op shift and go to state 44 + term shift and go to state 45 + base_call shift and go to state 46 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 94 + + (23) let_list -> let_assign comma . let_list + (22) let_list -> . let_assign + (23) let_list -> . let_assign comma let_list + (24) let_assign -> . param larrow expr + (25) let_assign -> . param + (16) param -> . id colon id + + id shift and go to state 22 + + let_assign shift and go to state 66 + let_list shift and go to state 116 + param shift and go to state 67 + +state 95 + + (24) let_assign -> param larrow . expr + (17) expr -> . let let_list in expr + (18) expr -> . case expr of cases_list esac + (19) expr -> . if expr then expr else expr fi + (20) expr -> . while expr loop expr pool + (21) expr -> . arith + (29) arith -> . id larrow expr + (30) arith -> . not comp + (31) arith -> . comp + (32) comp -> . comp less op + (33) comp -> . comp lesseq op + (34) comp -> . comp equal op + (35) comp -> . op + (36) op -> . op plus term + (37) op -> . op minus term + (38) op -> . term + (39) term -> . term star base_call + (40) term -> . term div base_call + (41) term -> . isvoid base_call + (42) term -> . nox base_call + (43) term -> . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + let shift and go to state 37 + case shift and go to state 38 + if shift and go to state 39 + while shift and go to state 40 + id shift and go to state 35 + not shift and go to state 42 + isvoid shift and go to state 47 + nox shift and go to state 48 + opar shift and go to state 52 + num shift and go to state 53 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + expr shift and go to state 117 + arith shift and go to state 41 + comp shift and go to state 43 + op shift and go to state 44 + term shift and go to state 45 + base_call shift and go to state 46 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 96 + + (18) expr -> case expr of . cases_list esac + (26) cases_list -> . casep semi + (27) cases_list -> . casep semi cases_list + (28) casep -> . id colon id rarrow expr + + id shift and go to state 120 + + cases_list shift and go to state 118 + casep shift and go to state 119 + +state 97 + + (19) expr -> if expr then . expr else expr fi + (17) expr -> . let let_list in expr + (18) expr -> . case expr of cases_list esac + (19) expr -> . if expr then expr else expr fi + (20) expr -> . while expr loop expr pool + (21) expr -> . arith + (29) arith -> . id larrow expr + (30) arith -> . not comp + (31) arith -> . comp + (32) comp -> . comp less op + (33) comp -> . comp lesseq op + (34) comp -> . comp equal op + (35) comp -> . op + (36) op -> . op plus term + (37) op -> . op minus term + (38) op -> . term + (39) term -> . term star base_call + (40) term -> . term div base_call + (41) term -> . isvoid base_call + (42) term -> . nox base_call + (43) term -> . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + let shift and go to state 37 + case shift and go to state 38 + if shift and go to state 39 + while shift and go to state 40 + id shift and go to state 35 + not shift and go to state 42 + isvoid shift and go to state 47 + nox shift and go to state 48 + opar shift and go to state 52 + num shift and go to state 53 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + expr shift and go to state 121 + arith shift and go to state 41 + comp shift and go to state 43 + op shift and go to state 44 + term shift and go to state 45 + base_call shift and go to state 46 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 98 + + (20) expr -> while expr loop . expr pool + (17) expr -> . let let_list in expr + (18) expr -> . case expr of cases_list esac + (19) expr -> . if expr then expr else expr fi + (20) expr -> . while expr loop expr pool + (21) expr -> . arith + (29) arith -> . id larrow expr + (30) arith -> . not comp + (31) arith -> . comp + (32) comp -> . comp less op + (33) comp -> . comp lesseq op + (34) comp -> . comp equal op + (35) comp -> . op + (36) op -> . op plus term + (37) op -> . op minus term + (38) op -> . term + (39) term -> . term star base_call + (40) term -> . term div base_call + (41) term -> . isvoid base_call + (42) term -> . nox base_call + (43) term -> . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + let shift and go to state 37 + case shift and go to state 38 + if shift and go to state 39 + while shift and go to state 40 + id shift and go to state 35 + not shift and go to state 42 + isvoid shift and go to state 47 + nox shift and go to state 48 + opar shift and go to state 52 + num shift and go to state 53 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + expr shift and go to state 122 + arith shift and go to state 41 + comp shift and go to state 43 + op shift and go to state 44 + term shift and go to state 45 + base_call shift and go to state 46 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 99 + + (32) comp -> comp less op . + (36) op -> op . plus term + (37) op -> op . minus term + + less reduce using rule 32 (comp -> comp less op .) + lesseq reduce using rule 32 (comp -> comp less op .) + equal reduce using rule 32 (comp -> comp less op .) + semi reduce using rule 32 (comp -> comp less op .) + of reduce using rule 32 (comp -> comp less op .) + then reduce using rule 32 (comp -> comp less op .) + loop reduce using rule 32 (comp -> comp less op .) + cpar reduce using rule 32 (comp -> comp less op .) + comma reduce using rule 32 (comp -> comp less op .) + in reduce using rule 32 (comp -> comp less op .) + else reduce using rule 32 (comp -> comp less op .) + pool reduce using rule 32 (comp -> comp less op .) + ccur reduce using rule 32 (comp -> comp less op .) + fi reduce using rule 32 (comp -> comp less op .) + plus shift and go to state 76 + minus shift and go to state 77 + + +state 100 + + (33) comp -> comp lesseq op . + (36) op -> op . plus term + (37) op -> op . minus term + + less reduce using rule 33 (comp -> comp lesseq op .) + lesseq reduce using rule 33 (comp -> comp lesseq op .) + equal reduce using rule 33 (comp -> comp lesseq op .) + semi reduce using rule 33 (comp -> comp lesseq op .) + of reduce using rule 33 (comp -> comp lesseq op .) + then reduce using rule 33 (comp -> comp lesseq op .) + loop reduce using rule 33 (comp -> comp lesseq op .) + cpar reduce using rule 33 (comp -> comp lesseq op .) + comma reduce using rule 33 (comp -> comp lesseq op .) + in reduce using rule 33 (comp -> comp lesseq op .) + else reduce using rule 33 (comp -> comp lesseq op .) + pool reduce using rule 33 (comp -> comp lesseq op .) + ccur reduce using rule 33 (comp -> comp lesseq op .) + fi reduce using rule 33 (comp -> comp lesseq op .) + plus shift and go to state 76 + minus shift and go to state 77 + + +state 101 + + (34) comp -> comp equal op . + (36) op -> op . plus term + (37) op -> op . minus term + + less reduce using rule 34 (comp -> comp equal op .) + lesseq reduce using rule 34 (comp -> comp equal op .) + equal reduce using rule 34 (comp -> comp equal op .) + semi reduce using rule 34 (comp -> comp equal op .) + of reduce using rule 34 (comp -> comp equal op .) + then reduce using rule 34 (comp -> comp equal op .) + loop reduce using rule 34 (comp -> comp equal op .) + cpar reduce using rule 34 (comp -> comp equal op .) + comma reduce using rule 34 (comp -> comp equal op .) + in reduce using rule 34 (comp -> comp equal op .) + else reduce using rule 34 (comp -> comp equal op .) + pool reduce using rule 34 (comp -> comp equal op .) + ccur reduce using rule 34 (comp -> comp equal op .) + fi reduce using rule 34 (comp -> comp equal op .) + plus shift and go to state 76 + minus shift and go to state 77 + + +state 102 + + (36) op -> op plus term . + (39) term -> term . star base_call + (40) term -> term . div base_call + + plus reduce using rule 36 (op -> op plus term .) + minus reduce using rule 36 (op -> op plus term .) + less reduce using rule 36 (op -> op plus term .) + lesseq reduce using rule 36 (op -> op plus term .) + equal reduce using rule 36 (op -> op plus term .) + semi reduce using rule 36 (op -> op plus term .) + of reduce using rule 36 (op -> op plus term .) + then reduce using rule 36 (op -> op plus term .) + loop reduce using rule 36 (op -> op plus term .) + cpar reduce using rule 36 (op -> op plus term .) + comma reduce using rule 36 (op -> op plus term .) + in reduce using rule 36 (op -> op plus term .) + else reduce using rule 36 (op -> op plus term .) + pool reduce using rule 36 (op -> op plus term .) + ccur reduce using rule 36 (op -> op plus term .) + fi reduce using rule 36 (op -> op plus term .) + star shift and go to state 78 + div shift and go to state 79 + + +state 103 + + (37) op -> op minus term . + (39) term -> term . star base_call + (40) term -> term . div base_call + + plus reduce using rule 37 (op -> op minus term .) + minus reduce using rule 37 (op -> op minus term .) + less reduce using rule 37 (op -> op minus term .) + lesseq reduce using rule 37 (op -> op minus term .) + equal reduce using rule 37 (op -> op minus term .) + semi reduce using rule 37 (op -> op minus term .) + of reduce using rule 37 (op -> op minus term .) + then reduce using rule 37 (op -> op minus term .) + loop reduce using rule 37 (op -> op minus term .) + cpar reduce using rule 37 (op -> op minus term .) + comma reduce using rule 37 (op -> op minus term .) + in reduce using rule 37 (op -> op minus term .) + else reduce using rule 37 (op -> op minus term .) + pool reduce using rule 37 (op -> op minus term .) + ccur reduce using rule 37 (op -> op minus term .) + fi reduce using rule 37 (op -> op minus term .) + star shift and go to state 78 + div shift and go to state 79 + + +state 104 + + (39) term -> term star base_call . + + star reduce using rule 39 (term -> term star base_call .) + div reduce using rule 39 (term -> term star base_call .) + plus reduce using rule 39 (term -> term star base_call .) + minus reduce using rule 39 (term -> term star base_call .) + less reduce using rule 39 (term -> term star base_call .) + lesseq reduce using rule 39 (term -> term star base_call .) + equal reduce using rule 39 (term -> term star base_call .) + semi reduce using rule 39 (term -> term star base_call .) + of reduce using rule 39 (term -> term star base_call .) + then reduce using rule 39 (term -> term star base_call .) + loop reduce using rule 39 (term -> term star base_call .) + cpar reduce using rule 39 (term -> term star base_call .) + comma reduce using rule 39 (term -> term star base_call .) + in reduce using rule 39 (term -> term star base_call .) + else reduce using rule 39 (term -> term star base_call .) + pool reduce using rule 39 (term -> term star base_call .) + ccur reduce using rule 39 (term -> term star base_call .) + fi reduce using rule 39 (term -> term star base_call .) + + +state 105 + + (40) term -> term div base_call . + + star reduce using rule 40 (term -> term div base_call .) + div reduce using rule 40 (term -> term div base_call .) + plus reduce using rule 40 (term -> term div base_call .) + minus reduce using rule 40 (term -> term div base_call .) + less reduce using rule 40 (term -> term div base_call .) + lesseq reduce using rule 40 (term -> term div base_call .) + equal reduce using rule 40 (term -> term div base_call .) + semi reduce using rule 40 (term -> term div base_call .) + of reduce using rule 40 (term -> term div base_call .) + then reduce using rule 40 (term -> term div base_call .) + loop reduce using rule 40 (term -> term div base_call .) + cpar reduce using rule 40 (term -> term div base_call .) + comma reduce using rule 40 (term -> term div base_call .) + in reduce using rule 40 (term -> term div base_call .) + else reduce using rule 40 (term -> term div base_call .) + pool reduce using rule 40 (term -> term div base_call .) + ccur reduce using rule 40 (term -> term div base_call .) + fi reduce using rule 40 (term -> term div base_call .) + + +state 106 + + (44) base_call -> factor arroba id . dot func_call + + dot shift and go to state 123 + + +state 107 + + (48) factor -> factor dot func_call . + + arroba reduce using rule 48 (factor -> factor dot func_call .) + dot reduce using rule 48 (factor -> factor dot func_call .) + star reduce using rule 48 (factor -> factor dot func_call .) + div reduce using rule 48 (factor -> factor dot func_call .) + plus reduce using rule 48 (factor -> factor dot func_call .) + minus reduce using rule 48 (factor -> factor dot func_call .) + less reduce using rule 48 (factor -> factor dot func_call .) + lesseq reduce using rule 48 (factor -> factor dot func_call .) + equal reduce using rule 48 (factor -> factor dot func_call .) + semi reduce using rule 48 (factor -> factor dot func_call .) + of reduce using rule 48 (factor -> factor dot func_call .) + then reduce using rule 48 (factor -> factor dot func_call .) + loop reduce using rule 48 (factor -> factor dot func_call .) + cpar reduce using rule 48 (factor -> factor dot func_call .) + comma reduce using rule 48 (factor -> factor dot func_call .) + in reduce using rule 48 (factor -> factor dot func_call .) + else reduce using rule 48 (factor -> factor dot func_call .) + pool reduce using rule 48 (factor -> factor dot func_call .) + ccur reduce using rule 48 (factor -> factor dot func_call .) + fi reduce using rule 48 (factor -> factor dot func_call .) + + +state 108 + + (59) func_call -> id . opar arg_list cpar + + opar shift and go to state 64 + + +state 109 + + (47) factor -> opar expr cpar . + + arroba reduce using rule 47 (factor -> opar expr cpar .) + dot reduce using rule 47 (factor -> opar expr cpar .) + star reduce using rule 47 (factor -> opar expr cpar .) + div reduce using rule 47 (factor -> opar expr cpar .) + plus reduce using rule 47 (factor -> opar expr cpar .) + minus reduce using rule 47 (factor -> opar expr cpar .) + less reduce using rule 47 (factor -> opar expr cpar .) + lesseq reduce using rule 47 (factor -> opar expr cpar .) + equal reduce using rule 47 (factor -> opar expr cpar .) + semi reduce using rule 47 (factor -> opar expr cpar .) + of reduce using rule 47 (factor -> opar expr cpar .) + then reduce using rule 47 (factor -> opar expr cpar .) + loop reduce using rule 47 (factor -> opar expr cpar .) + cpar reduce using rule 47 (factor -> opar expr cpar .) + comma reduce using rule 47 (factor -> opar expr cpar .) + in reduce using rule 47 (factor -> opar expr cpar .) + else reduce using rule 47 (factor -> opar expr cpar .) + pool reduce using rule 47 (factor -> opar expr cpar .) + ccur reduce using rule 47 (factor -> opar expr cpar .) + fi reduce using rule 47 (factor -> opar expr cpar .) + + +state 110 + + (53) atom -> ocur block ccur . + + arroba reduce using rule 53 (atom -> ocur block ccur .) + dot reduce using rule 53 (atom -> ocur block ccur .) + star reduce using rule 53 (atom -> ocur block ccur .) + div reduce using rule 53 (atom -> ocur block ccur .) + plus reduce using rule 53 (atom -> ocur block ccur .) + minus reduce using rule 53 (atom -> ocur block ccur .) + less reduce using rule 53 (atom -> ocur block ccur .) + lesseq reduce using rule 53 (atom -> ocur block ccur .) + equal reduce using rule 53 (atom -> ocur block ccur .) + semi reduce using rule 53 (atom -> ocur block ccur .) + of reduce using rule 53 (atom -> ocur block ccur .) + then reduce using rule 53 (atom -> ocur block ccur .) + loop reduce using rule 53 (atom -> ocur block ccur .) + cpar reduce using rule 53 (atom -> ocur block ccur .) + comma reduce using rule 53 (atom -> ocur block ccur .) + in reduce using rule 53 (atom -> ocur block ccur .) + else reduce using rule 53 (atom -> ocur block ccur .) + pool reduce using rule 53 (atom -> ocur block ccur .) + ccur reduce using rule 53 (atom -> ocur block ccur .) + fi reduce using rule 53 (atom -> ocur block ccur .) + + +state 111 + + (57) block -> expr semi . + (58) block -> expr semi . block + (57) block -> . expr semi + (58) block -> . expr semi block + (17) expr -> . let let_list in expr + (18) expr -> . case expr of cases_list esac + (19) expr -> . if expr then expr else expr fi + (20) expr -> . while expr loop expr pool + (21) expr -> . arith + (29) arith -> . id larrow expr + (30) arith -> . not comp + (31) arith -> . comp + (32) comp -> . comp less op + (33) comp -> . comp lesseq op + (34) comp -> . comp equal op + (35) comp -> . op + (36) op -> . op plus term + (37) op -> . op minus term + (38) op -> . term + (39) term -> . term star base_call + (40) term -> . term div base_call + (41) term -> . isvoid base_call + (42) term -> . nox base_call + (43) term -> . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + ccur reduce using rule 57 (block -> expr semi .) + let shift and go to state 37 + case shift and go to state 38 + if shift and go to state 39 + while shift and go to state 40 + id shift and go to state 35 + not shift and go to state 42 + isvoid shift and go to state 47 + nox shift and go to state 48 + opar shift and go to state 52 + num shift and go to state 53 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + expr shift and go to state 87 + block shift and go to state 124 + arith shift and go to state 41 + comp shift and go to state 43 + op shift and go to state 44 + term shift and go to state 45 + base_call shift and go to state 46 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 112 + + (12) def_func -> id opar param_list cpar colon id ocur . expr ccur + (17) expr -> . let let_list in expr + (18) expr -> . case expr of cases_list esac + (19) expr -> . if expr then expr else expr fi + (20) expr -> . while expr loop expr pool + (21) expr -> . arith + (29) arith -> . id larrow expr + (30) arith -> . not comp + (31) arith -> . comp + (32) comp -> . comp less op + (33) comp -> . comp lesseq op + (34) comp -> . comp equal op + (35) comp -> . op + (36) op -> . op plus term + (37) op -> . op minus term + (38) op -> . term + (39) term -> . term star base_call + (40) term -> . term div base_call + (41) term -> . isvoid base_call + (42) term -> . nox base_call + (43) term -> . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + let shift and go to state 37 + case shift and go to state 38 + if shift and go to state 39 + while shift and go to state 40 + id shift and go to state 35 + not shift and go to state 42 + isvoid shift and go to state 47 + nox shift and go to state 48 + opar shift and go to state 52 + num shift and go to state 53 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + expr shift and go to state 125 + arith shift and go to state 41 + comp shift and go to state 43 + op shift and go to state 44 + term shift and go to state 45 + base_call shift and go to state 46 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 113 + + (59) func_call -> id opar arg_list cpar . + + arroba reduce using rule 59 (func_call -> id opar arg_list cpar .) + dot reduce using rule 59 (func_call -> id opar arg_list cpar .) + star reduce using rule 59 (func_call -> id opar arg_list cpar .) + div reduce using rule 59 (func_call -> id opar arg_list cpar .) + plus reduce using rule 59 (func_call -> id opar arg_list cpar .) + minus reduce using rule 59 (func_call -> id opar arg_list cpar .) + less reduce using rule 59 (func_call -> id opar arg_list cpar .) + lesseq reduce using rule 59 (func_call -> id opar arg_list cpar .) + equal reduce using rule 59 (func_call -> id opar arg_list cpar .) + semi reduce using rule 59 (func_call -> id opar arg_list cpar .) + of reduce using rule 59 (func_call -> id opar arg_list cpar .) + then reduce using rule 59 (func_call -> id opar arg_list cpar .) + loop reduce using rule 59 (func_call -> id opar arg_list cpar .) + cpar reduce using rule 59 (func_call -> id opar arg_list cpar .) + comma reduce using rule 59 (func_call -> id opar arg_list cpar .) + in reduce using rule 59 (func_call -> id opar arg_list cpar .) + else reduce using rule 59 (func_call -> id opar arg_list cpar .) + pool reduce using rule 59 (func_call -> id opar arg_list cpar .) + ccur reduce using rule 59 (func_call -> id opar arg_list cpar .) + fi reduce using rule 59 (func_call -> id opar arg_list cpar .) + + +state 114 + + (61) arg_list -> expr comma . arg_list + (60) arg_list -> . expr + (61) arg_list -> . expr comma arg_list + (62) arg_list -> . epsilon + (17) expr -> . let let_list in expr + (18) expr -> . case expr of cases_list esac + (19) expr -> . if expr then expr else expr fi + (20) expr -> . while expr loop expr pool + (21) expr -> . arith + (2) epsilon -> . + (29) arith -> . id larrow expr + (30) arith -> . not comp + (31) arith -> . comp + (32) comp -> . comp less op + (33) comp -> . comp lesseq op + (34) comp -> . comp equal op + (35) comp -> . op + (36) op -> . op plus term + (37) op -> . op minus term + (38) op -> . term + (39) term -> . term star base_call + (40) term -> . term div base_call + (41) term -> . isvoid base_call + (42) term -> . nox base_call + (43) term -> . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + let shift and go to state 37 + case shift and go to state 38 + if shift and go to state 39 + while shift and go to state 40 + cpar reduce using rule 2 (epsilon -> .) + id shift and go to state 35 + not shift and go to state 42 + isvoid shift and go to state 47 + nox shift and go to state 48 + opar shift and go to state 52 + num shift and go to state 53 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + expr shift and go to state 91 + arg_list shift and go to state 126 + epsilon shift and go to state 92 + arith shift and go to state 41 + comp shift and go to state 43 + op shift and go to state 44 + term shift and go to state 45 + base_call shift and go to state 46 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 115 + + (17) expr -> let let_list in expr . + + semi reduce using rule 17 (expr -> let let_list in expr .) + of reduce using rule 17 (expr -> let let_list in expr .) + then reduce using rule 17 (expr -> let let_list in expr .) + loop reduce using rule 17 (expr -> let let_list in expr .) + cpar reduce using rule 17 (expr -> let let_list in expr .) + comma reduce using rule 17 (expr -> let let_list in expr .) + in reduce using rule 17 (expr -> let let_list in expr .) + else reduce using rule 17 (expr -> let let_list in expr .) + pool reduce using rule 17 (expr -> let let_list in expr .) + ccur reduce using rule 17 (expr -> let let_list in expr .) + fi reduce using rule 17 (expr -> let let_list in expr .) + + +state 116 + + (23) let_list -> let_assign comma let_list . + + in reduce using rule 23 (let_list -> let_assign comma let_list .) + + +state 117 + + (24) let_assign -> param larrow expr . + + comma reduce using rule 24 (let_assign -> param larrow expr .) + in reduce using rule 24 (let_assign -> param larrow expr .) + + +state 118 + + (18) expr -> case expr of cases_list . esac + + esac shift and go to state 127 + + +state 119 + + (26) cases_list -> casep . semi + (27) cases_list -> casep . semi cases_list + + semi shift and go to state 128 + + +state 120 + + (28) casep -> id . colon id rarrow expr + + colon shift and go to state 129 + + +state 121 + + (19) expr -> if expr then expr . else expr fi + + else shift and go to state 130 + + +state 122 + + (20) expr -> while expr loop expr . pool + + pool shift and go to state 131 + + +state 123 + + (44) base_call -> factor arroba id dot . func_call + (59) func_call -> . id opar arg_list cpar + + id shift and go to state 108 + + func_call shift and go to state 132 + +state 124 + + (58) block -> expr semi block . + + ccur reduce using rule 58 (block -> expr semi block .) + + +state 125 + + (12) def_func -> id opar param_list cpar colon id ocur expr . ccur + + ccur shift and go to state 133 + + +state 126 + + (61) arg_list -> expr comma arg_list . + + cpar reduce using rule 61 (arg_list -> expr comma arg_list .) + + +state 127 + + (18) expr -> case expr of cases_list esac . + + semi reduce using rule 18 (expr -> case expr of cases_list esac .) + of reduce using rule 18 (expr -> case expr of cases_list esac .) + then reduce using rule 18 (expr -> case expr of cases_list esac .) + loop reduce using rule 18 (expr -> case expr of cases_list esac .) + cpar reduce using rule 18 (expr -> case expr of cases_list esac .) + comma reduce using rule 18 (expr -> case expr of cases_list esac .) + in reduce using rule 18 (expr -> case expr of cases_list esac .) + else reduce using rule 18 (expr -> case expr of cases_list esac .) + pool reduce using rule 18 (expr -> case expr of cases_list esac .) + ccur reduce using rule 18 (expr -> case expr of cases_list esac .) + fi reduce using rule 18 (expr -> case expr of cases_list esac .) + + +state 128 + + (26) cases_list -> casep semi . + (27) cases_list -> casep semi . cases_list + (26) cases_list -> . casep semi + (27) cases_list -> . casep semi cases_list + (28) casep -> . id colon id rarrow expr + + esac reduce using rule 26 (cases_list -> casep semi .) + id shift and go to state 120 + + casep shift and go to state 119 + cases_list shift and go to state 134 + +state 129 + + (28) casep -> id colon . id rarrow expr + + id shift and go to state 135 + + +state 130 + + (19) expr -> if expr then expr else . expr fi + (17) expr -> . let let_list in expr + (18) expr -> . case expr of cases_list esac + (19) expr -> . if expr then expr else expr fi + (20) expr -> . while expr loop expr pool + (21) expr -> . arith + (29) arith -> . id larrow expr + (30) arith -> . not comp + (31) arith -> . comp + (32) comp -> . comp less op + (33) comp -> . comp lesseq op + (34) comp -> . comp equal op + (35) comp -> . op + (36) op -> . op plus term + (37) op -> . op minus term + (38) op -> . term + (39) term -> . term star base_call + (40) term -> . term div base_call + (41) term -> . isvoid base_call + (42) term -> . nox base_call + (43) term -> . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + let shift and go to state 37 + case shift and go to state 38 + if shift and go to state 39 + while shift and go to state 40 + id shift and go to state 35 + not shift and go to state 42 + isvoid shift and go to state 47 + nox shift and go to state 48 + opar shift and go to state 52 + num shift and go to state 53 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + expr shift and go to state 136 + arith shift and go to state 41 + comp shift and go to state 43 + op shift and go to state 44 + term shift and go to state 45 + base_call shift and go to state 46 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 131 + + (20) expr -> while expr loop expr pool . + + semi reduce using rule 20 (expr -> while expr loop expr pool .) + of reduce using rule 20 (expr -> while expr loop expr pool .) + then reduce using rule 20 (expr -> while expr loop expr pool .) + loop reduce using rule 20 (expr -> while expr loop expr pool .) + cpar reduce using rule 20 (expr -> while expr loop expr pool .) + comma reduce using rule 20 (expr -> while expr loop expr pool .) + in reduce using rule 20 (expr -> while expr loop expr pool .) + else reduce using rule 20 (expr -> while expr loop expr pool .) + pool reduce using rule 20 (expr -> while expr loop expr pool .) + ccur reduce using rule 20 (expr -> while expr loop expr pool .) + fi reduce using rule 20 (expr -> while expr loop expr pool .) + + +state 132 + + (44) base_call -> factor arroba id dot func_call . + + star reduce using rule 44 (base_call -> factor arroba id dot func_call .) + div reduce using rule 44 (base_call -> factor arroba id dot func_call .) + plus reduce using rule 44 (base_call -> factor arroba id dot func_call .) + minus reduce using rule 44 (base_call -> factor arroba id dot func_call .) + less reduce using rule 44 (base_call -> factor arroba id dot func_call .) + lesseq reduce using rule 44 (base_call -> factor arroba id dot func_call .) + equal reduce using rule 44 (base_call -> factor arroba id dot func_call .) + semi reduce using rule 44 (base_call -> factor arroba id dot func_call .) + of reduce using rule 44 (base_call -> factor arroba id dot func_call .) + then reduce using rule 44 (base_call -> factor arroba id dot func_call .) + loop reduce using rule 44 (base_call -> factor arroba id dot func_call .) + cpar reduce using rule 44 (base_call -> factor arroba id dot func_call .) + comma reduce using rule 44 (base_call -> factor arroba id dot func_call .) + in reduce using rule 44 (base_call -> factor arroba id dot func_call .) + else reduce using rule 44 (base_call -> factor arroba id dot func_call .) + pool reduce using rule 44 (base_call -> factor arroba id dot func_call .) + ccur reduce using rule 44 (base_call -> factor arroba id dot func_call .) + fi reduce using rule 44 (base_call -> factor arroba id dot func_call .) + + +state 133 + + (12) def_func -> id opar param_list cpar colon id ocur expr ccur . + + semi reduce using rule 12 (def_func -> id opar param_list cpar colon id ocur expr ccur .) + + +state 134 + + (27) cases_list -> casep semi cases_list . + + esac reduce using rule 27 (cases_list -> casep semi cases_list .) + + +state 135 + + (28) casep -> id colon id . rarrow expr + + rarrow shift and go to state 137 + + +state 136 + + (19) expr -> if expr then expr else expr . fi + + fi shift and go to state 138 + + +state 137 + + (28) casep -> id colon id rarrow . expr + (17) expr -> . let let_list in expr + (18) expr -> . case expr of cases_list esac + (19) expr -> . if expr then expr else expr fi + (20) expr -> . while expr loop expr pool + (21) expr -> . arith + (29) arith -> . id larrow expr + (30) arith -> . not comp + (31) arith -> . comp + (32) comp -> . comp less op + (33) comp -> . comp lesseq op + (34) comp -> . comp equal op + (35) comp -> . op + (36) op -> . op plus term + (37) op -> . op minus term + (38) op -> . term + (39) term -> . term star base_call + (40) term -> . term div base_call + (41) term -> . isvoid base_call + (42) term -> . nox base_call + (43) term -> . base_call + (44) base_call -> . factor arroba id dot func_call + (45) base_call -> . factor + (46) factor -> . atom + (47) factor -> . opar expr cpar + (48) factor -> . factor dot func_call + (49) factor -> . func_call + (50) atom -> . num + (51) atom -> . id + (52) atom -> . new id + (53) atom -> . ocur block ccur + (54) atom -> . true + (55) atom -> . false + (56) atom -> . string + (59) func_call -> . id opar arg_list cpar + + let shift and go to state 37 + case shift and go to state 38 + if shift and go to state 39 + while shift and go to state 40 + id shift and go to state 35 + not shift and go to state 42 + isvoid shift and go to state 47 + nox shift and go to state 48 + opar shift and go to state 52 + num shift and go to state 53 + new shift and go to state 54 + ocur shift and go to state 55 + true shift and go to state 56 + false shift and go to state 57 + string shift and go to state 58 + + expr shift and go to state 139 + arith shift and go to state 41 + comp shift and go to state 43 + op shift and go to state 44 + term shift and go to state 45 + base_call shift and go to state 46 + factor shift and go to state 49 + func_call shift and go to state 50 + atom shift and go to state 51 + +state 138 + + (19) expr -> if expr then expr else expr fi . + + semi reduce using rule 19 (expr -> if expr then expr else expr fi .) + of reduce using rule 19 (expr -> if expr then expr else expr fi .) + then reduce using rule 19 (expr -> if expr then expr else expr fi .) + loop reduce using rule 19 (expr -> if expr then expr else expr fi .) + cpar reduce using rule 19 (expr -> if expr then expr else expr fi .) + comma reduce using rule 19 (expr -> if expr then expr else expr fi .) + in reduce using rule 19 (expr -> if expr then expr else expr fi .) + else reduce using rule 19 (expr -> if expr then expr else expr fi .) + pool reduce using rule 19 (expr -> if expr then expr else expr fi .) + ccur reduce using rule 19 (expr -> if expr then expr else expr fi .) + fi reduce using rule 19 (expr -> if expr then expr else expr fi .) + + +state 139 + + (28) casep -> id colon id rarrow expr . + + semi reduce using rule 28 (casep -> id colon id rarrow expr .) + diff --git a/src/parsetab.py b/src/parsetab.py new file mode 100644 index 00000000..b9893ba4 --- /dev/null +++ b/src/parsetab.py @@ -0,0 +1,92 @@ + +# parsetab.py +# This file is automatically generated. Do not edit. +# pylint: disable=W,C,R +_tabversion = '3.10' + +_lr_method = 'LALR' + +_lr_signature = 'programarroba case ccur class colon comma cpar def div dot else equal esac false fi id if in inherits isvoid larrow less lesseq let loop minus new not nox num ocur of opar plus pool print rarrow semi star string then true whileprogram : class_listepsilon :class_list : def_class class_list \n | def_classdef_class : class id ocur feature_list ccur semi \n | class id inherits id ocur feature_list ccur semifeature_list : epsilon\n | def_attr semi feature_list\n | def_func semi feature_listdef_attr : id colon id\n | id colon id larrow exprdef_func : id opar param_list cpar colon id ocur expr ccurparam_list : param\n | param comma param_listparam_list : epsilonparam : id colon idexpr : let let_list in exprexpr : case expr of cases_list esacexpr : if expr then expr else expr fiexpr : while expr loop expr poolexpr : arithlet_list : let_assign\n | let_assign comma let_listlet_assign : param larrow expr\n | paramcases_list : casep semi\n | casep semi cases_listcasep : id colon id rarrow exprarith : id larrow expr\n | not comp\n | comp\n comp : comp less op\n | comp lesseq op\n | comp equal op\n | opop : op plus term\n | op minus term\n | termterm : term star base_call\n | term div base_call\n | isvoid base_call\n | nox base_call\n | base_callbase_call : factor arroba id dot func_call\n | factorfactor : atom\n | opar expr cparfactor : factor dot func_call\n | func_callatom : numatom : idatom : new idatom : ocur block ccuratom : true\n | falseatom : stringblock : expr semi\n | expr semi blockfunc_call : id opar arg_list cpararg_list : expr \n | expr comma arg_listarg_list : epsilon' + +_lr_action_items = {'class':([0,3,26,62,],[4,4,-5,-6,]),'$end':([1,2,3,5,26,62,],[0,-1,-4,-3,-5,-6,]),'id':([4,7,8,15,16,18,19,20,30,31,33,37,38,39,40,42,47,48,52,54,55,60,63,64,73,74,75,76,77,78,79,82,83,93,94,95,96,97,98,111,112,114,123,128,129,130,137,],[6,9,14,21,22,9,9,9,35,59,22,22,35,35,35,72,72,72,35,85,35,88,35,35,72,72,72,72,72,72,72,106,108,35,22,35,120,35,35,35,35,35,108,120,135,35,35,]),'ocur':([6,14,30,38,39,40,42,47,48,52,55,63,64,73,74,75,76,77,78,79,88,93,95,97,98,111,112,114,130,137,],[7,20,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,112,55,55,55,55,55,55,55,55,55,]),'inherits':([6,],[8,]),'ccur':([7,10,11,18,19,20,27,28,29,35,41,43,44,45,46,49,50,51,53,56,57,58,71,72,80,81,85,86,89,99,100,101,102,103,104,105,107,109,110,111,113,115,124,125,127,131,132,138,],[-2,17,-7,-2,-2,-2,-8,-9,34,-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,-30,-51,-41,-42,-52,110,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-57,-59,-17,-58,133,-18,-20,-44,-19,]),'colon':([9,22,32,120,],[15,31,60,129,]),'opar':([9,30,35,38,39,40,42,47,48,52,55,63,64,72,73,74,75,76,77,78,79,93,95,97,98,108,111,112,114,130,137,],[16,52,64,52,52,52,52,52,52,52,52,52,52,64,52,52,52,52,52,52,52,52,52,52,52,64,52,52,52,52,52,]),'semi':([12,13,17,21,34,35,36,41,43,44,45,46,49,50,51,53,56,57,58,71,72,80,81,85,87,89,99,100,101,102,103,104,105,107,109,110,113,115,119,127,131,132,133,138,139,],[18,19,26,-10,62,-51,-11,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,-30,-51,-41,-42,-52,111,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,128,-18,-20,-44,-12,-19,-28,]),'cpar':([16,23,24,25,33,35,41,43,44,45,46,49,50,51,53,56,57,58,59,61,64,71,72,80,81,84,85,89,90,91,92,99,100,101,102,103,104,105,107,109,110,113,114,115,126,127,131,132,138,],[-2,32,-13,-15,-2,-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,-16,-14,-2,-30,-51,-41,-42,109,-52,-29,113,-60,-62,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-2,-17,-61,-18,-20,-44,-19,]),'larrow':([21,35,59,67,],[30,63,-16,95,]),'comma':([24,35,41,43,44,45,46,49,50,51,53,56,57,58,59,66,67,71,72,80,81,85,89,91,99,100,101,102,103,104,105,107,109,110,113,115,117,127,131,132,138,],[33,-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,-16,94,-25,-30,-51,-41,-42,-52,-29,114,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,-24,-18,-20,-44,-19,]),'let':([30,38,39,40,52,55,63,64,93,95,97,98,111,112,114,130,137,],[37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,]),'case':([30,38,39,40,52,55,63,64,93,95,97,98,111,112,114,130,137,],[38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,]),'if':([30,38,39,40,52,55,63,64,93,95,97,98,111,112,114,130,137,],[39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,]),'while':([30,38,39,40,52,55,63,64,93,95,97,98,111,112,114,130,137,],[40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,]),'not':([30,38,39,40,52,55,63,64,93,95,97,98,111,112,114,130,137,],[42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,]),'isvoid':([30,38,39,40,42,52,55,63,64,73,74,75,76,77,93,95,97,98,111,112,114,130,137,],[47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,]),'nox':([30,38,39,40,42,52,55,63,64,73,74,75,76,77,93,95,97,98,111,112,114,130,137,],[48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,]),'num':([30,38,39,40,42,47,48,52,55,63,64,73,74,75,76,77,78,79,93,95,97,98,111,112,114,130,137,],[53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,]),'new':([30,38,39,40,42,47,48,52,55,63,64,73,74,75,76,77,78,79,93,95,97,98,111,112,114,130,137,],[54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,]),'true':([30,38,39,40,42,47,48,52,55,63,64,73,74,75,76,77,78,79,93,95,97,98,111,112,114,130,137,],[56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,]),'false':([30,38,39,40,42,47,48,52,55,63,64,73,74,75,76,77,78,79,93,95,97,98,111,112,114,130,137,],[57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,]),'string':([30,38,39,40,42,47,48,52,55,63,64,73,74,75,76,77,78,79,93,95,97,98,111,112,114,130,137,],[58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,]),'arroba':([35,49,50,51,53,56,57,58,72,85,107,109,110,113,],[-51,82,-49,-46,-50,-54,-55,-56,-51,-52,-48,-47,-53,-59,]),'dot':([35,49,50,51,53,56,57,58,72,85,106,107,109,110,113,],[-51,83,-49,-46,-50,-54,-55,-56,-51,-52,123,-48,-47,-53,-59,]),'star':([35,45,46,49,50,51,53,56,57,58,72,80,81,85,102,103,104,105,107,109,110,113,132,],[-51,78,-43,-45,-49,-46,-50,-54,-55,-56,-51,-41,-42,-52,78,78,-39,-40,-48,-47,-53,-59,-44,]),'div':([35,45,46,49,50,51,53,56,57,58,72,80,81,85,102,103,104,105,107,109,110,113,132,],[-51,79,-43,-45,-49,-46,-50,-54,-55,-56,-51,-41,-42,-52,79,79,-39,-40,-48,-47,-53,-59,-44,]),'plus':([35,44,45,46,49,50,51,53,56,57,58,72,80,81,85,99,100,101,102,103,104,105,107,109,110,113,132,],[-51,76,-38,-43,-45,-49,-46,-50,-54,-55,-56,-51,-41,-42,-52,76,76,76,-36,-37,-39,-40,-48,-47,-53,-59,-44,]),'minus':([35,44,45,46,49,50,51,53,56,57,58,72,80,81,85,99,100,101,102,103,104,105,107,109,110,113,132,],[-51,77,-38,-43,-45,-49,-46,-50,-54,-55,-56,-51,-41,-42,-52,77,77,77,-36,-37,-39,-40,-48,-47,-53,-59,-44,]),'less':([35,43,44,45,46,49,50,51,53,56,57,58,71,72,80,81,85,99,100,101,102,103,104,105,107,109,110,113,132,],[-51,73,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,73,-51,-41,-42,-52,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-44,]),'lesseq':([35,43,44,45,46,49,50,51,53,56,57,58,71,72,80,81,85,99,100,101,102,103,104,105,107,109,110,113,132,],[-51,74,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,74,-51,-41,-42,-52,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-44,]),'equal':([35,43,44,45,46,49,50,51,53,56,57,58,71,72,80,81,85,99,100,101,102,103,104,105,107,109,110,113,132,],[-51,75,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,75,-51,-41,-42,-52,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-44,]),'of':([35,41,43,44,45,46,49,50,51,53,56,57,58,68,71,72,80,81,85,89,99,100,101,102,103,104,105,107,109,110,113,115,127,131,132,138,],[-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,96,-30,-51,-41,-42,-52,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,-18,-20,-44,-19,]),'then':([35,41,43,44,45,46,49,50,51,53,56,57,58,69,71,72,80,81,85,89,99,100,101,102,103,104,105,107,109,110,113,115,127,131,132,138,],[-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,97,-30,-51,-41,-42,-52,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,-18,-20,-44,-19,]),'loop':([35,41,43,44,45,46,49,50,51,53,56,57,58,70,71,72,80,81,85,89,99,100,101,102,103,104,105,107,109,110,113,115,127,131,132,138,],[-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,98,-30,-51,-41,-42,-52,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,-18,-20,-44,-19,]),'in':([35,41,43,44,45,46,49,50,51,53,56,57,58,59,65,66,67,71,72,80,81,85,89,99,100,101,102,103,104,105,107,109,110,113,115,116,117,127,131,132,138,],[-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,-16,93,-22,-25,-30,-51,-41,-42,-52,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,-23,-24,-18,-20,-44,-19,]),'else':([35,41,43,44,45,46,49,50,51,53,56,57,58,71,72,80,81,85,89,99,100,101,102,103,104,105,107,109,110,113,115,121,127,131,132,138,],[-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,-30,-51,-41,-42,-52,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,130,-18,-20,-44,-19,]),'pool':([35,41,43,44,45,46,49,50,51,53,56,57,58,71,72,80,81,85,89,99,100,101,102,103,104,105,107,109,110,113,115,122,127,131,132,138,],[-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,-30,-51,-41,-42,-52,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,131,-18,-20,-44,-19,]),'fi':([35,41,43,44,45,46,49,50,51,53,56,57,58,71,72,80,81,85,89,99,100,101,102,103,104,105,107,109,110,113,115,127,131,132,136,138,],[-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,-30,-51,-41,-42,-52,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,-18,-20,-44,138,-19,]),'esac':([118,128,134,],[127,-26,-27,]),'rarrow':([135,],[137,]),} + +_lr_action = {} +for _k, _v in _lr_action_items.items(): + for _x,_y in zip(_v[0],_v[1]): + if not _x in _lr_action: _lr_action[_x] = {} + _lr_action[_x][_k] = _y +del _lr_action_items + +_lr_goto_items = {'program':([0,],[1,]),'class_list':([0,3,],[2,5,]),'def_class':([0,3,],[3,3,]),'feature_list':([7,18,19,20,],[10,27,28,29,]),'epsilon':([7,16,18,19,20,33,64,114,],[11,25,11,11,11,25,92,92,]),'def_attr':([7,18,19,20,],[12,12,12,12,]),'def_func':([7,18,19,20,],[13,13,13,13,]),'param_list':([16,33,],[23,61,]),'param':([16,33,37,94,],[24,24,67,67,]),'expr':([30,38,39,40,52,55,63,64,93,95,97,98,111,112,114,130,137,],[36,68,69,70,84,87,89,91,115,117,121,122,87,125,91,136,139,]),'arith':([30,38,39,40,52,55,63,64,93,95,97,98,111,112,114,130,137,],[41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,]),'comp':([30,38,39,40,42,52,55,63,64,93,95,97,98,111,112,114,130,137,],[43,43,43,43,71,43,43,43,43,43,43,43,43,43,43,43,43,43,]),'op':([30,38,39,40,42,52,55,63,64,73,74,75,93,95,97,98,111,112,114,130,137,],[44,44,44,44,44,44,44,44,44,99,100,101,44,44,44,44,44,44,44,44,44,]),'term':([30,38,39,40,42,52,55,63,64,73,74,75,76,77,93,95,97,98,111,112,114,130,137,],[45,45,45,45,45,45,45,45,45,45,45,45,102,103,45,45,45,45,45,45,45,45,45,]),'base_call':([30,38,39,40,42,47,48,52,55,63,64,73,74,75,76,77,78,79,93,95,97,98,111,112,114,130,137,],[46,46,46,46,46,80,81,46,46,46,46,46,46,46,46,46,104,105,46,46,46,46,46,46,46,46,46,]),'factor':([30,38,39,40,42,47,48,52,55,63,64,73,74,75,76,77,78,79,93,95,97,98,111,112,114,130,137,],[49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,]),'func_call':([30,38,39,40,42,47,48,52,55,63,64,73,74,75,76,77,78,79,83,93,95,97,98,111,112,114,123,130,137,],[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,107,50,50,50,50,50,50,50,132,50,50,]),'atom':([30,38,39,40,42,47,48,52,55,63,64,73,74,75,76,77,78,79,93,95,97,98,111,112,114,130,137,],[51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,]),'let_list':([37,94,],[65,116,]),'let_assign':([37,94,],[66,66,]),'block':([55,111,],[86,124,]),'arg_list':([64,114,],[90,126,]),'cases_list':([96,128,],[118,134,]),'casep':([96,128,],[119,119,]),} + +_lr_goto = {} +for _k, _v in _lr_goto_items.items(): + for _x, _y in zip(_v[0], _v[1]): + if not _x in _lr_goto: _lr_goto[_x] = {} + _lr_goto[_x][_k] = _y +del _lr_goto_items +_lr_productions = [ + ("S' -> program","S'",1,None,None,None), + ('program -> class_list','program',1,'p_program','cool_grammar.py',10), + ('epsilon -> ','epsilon',0,'p_epsilon','cool_grammar.py',14), + ('class_list -> def_class class_list','class_list',2,'p_class_list','cool_grammar.py',18), + ('class_list -> def_class','class_list',1,'p_class_list','cool_grammar.py',19), + ('def_class -> class id ocur feature_list ccur semi','def_class',6,'p_def_class','cool_grammar.py',26), + ('def_class -> class id inherits id ocur feature_list ccur semi','def_class',8,'p_def_class','cool_grammar.py',27), + ('feature_list -> epsilon','feature_list',1,'p_feature_list','cool_grammar.py',34), + ('feature_list -> def_attr semi feature_list','feature_list',3,'p_feature_list','cool_grammar.py',35), + ('feature_list -> def_func semi feature_list','feature_list',3,'p_feature_list','cool_grammar.py',36), + ('def_attr -> id colon id','def_attr',3,'p_def_attr','cool_grammar.py',48), + ('def_attr -> id colon id larrow expr','def_attr',5,'p_def_attr','cool_grammar.py',49), + ('def_func -> id opar param_list cpar colon id ocur expr ccur','def_func',9,'p_def_func','cool_grammar.py',56), + ('param_list -> param','param_list',1,'p_param_list','cool_grammar.py',60), + ('param_list -> param comma param_list','param_list',3,'p_param_list','cool_grammar.py',61), + ('param_list -> epsilon','param_list',1,'p_param_list_empty','cool_grammar.py',68), + ('param -> id colon id','param',3,'p_param','cool_grammar.py',72), + ('expr -> let let_list in expr','expr',4,'p_expr_let','cool_grammar.py',76), + ('expr -> case expr of cases_list esac','expr',5,'p_expr_case','cool_grammar.py',80), + ('expr -> if expr then expr else expr fi','expr',7,'p_expr_if','cool_grammar.py',84), + ('expr -> while expr loop expr pool','expr',5,'p_expr_while','cool_grammar.py',88), + ('expr -> arith','expr',1,'p_expr_arith','cool_grammar.py',92), + ('let_list -> let_assign','let_list',1,'p_let_list','cool_grammar.py',97), + ('let_list -> let_assign comma let_list','let_list',3,'p_let_list','cool_grammar.py',98), + ('let_assign -> param larrow expr','let_assign',3,'p_let_assign','cool_grammar.py',105), + ('let_assign -> param','let_assign',1,'p_let_assign','cool_grammar.py',106), + ('cases_list -> casep semi','cases_list',2,'p_cases_list','cool_grammar.py',114), + ('cases_list -> casep semi cases_list','cases_list',3,'p_cases_list','cool_grammar.py',115), + ('casep -> id colon id rarrow expr','casep',5,'p_case','cool_grammar.py',122), + ('arith -> id larrow expr','arith',3,'p_arith','cool_grammar.py',127), + ('arith -> not comp','arith',2,'p_arith','cool_grammar.py',128), + ('arith -> comp','arith',1,'p_arith','cool_grammar.py',129), + ('comp -> comp less op','comp',3,'p_comp','cool_grammar.py',139), + ('comp -> comp lesseq op','comp',3,'p_comp','cool_grammar.py',140), + ('comp -> comp equal op','comp',3,'p_comp','cool_grammar.py',141), + ('comp -> op','comp',1,'p_comp','cool_grammar.py',142), + ('op -> op plus term','op',3,'p_op','cool_grammar.py',154), + ('op -> op minus term','op',3,'p_op','cool_grammar.py',155), + ('op -> term','op',1,'p_op','cool_grammar.py',156), + ('term -> term star base_call','term',3,'p_term','cool_grammar.py',165), + ('term -> term div base_call','term',3,'p_term','cool_grammar.py',166), + ('term -> isvoid base_call','term',2,'p_term','cool_grammar.py',167), + ('term -> nox base_call','term',2,'p_term','cool_grammar.py',168), + ('term -> base_call','term',1,'p_term','cool_grammar.py',169), + ('base_call -> factor arroba id dot func_call','base_call',5,'p_base_call','cool_grammar.py',182), + ('base_call -> factor','base_call',1,'p_base_call','cool_grammar.py',183), + ('factor -> atom','factor',1,'p_factor1','cool_grammar.py',190), + ('factor -> opar expr cpar','factor',3,'p_factor1','cool_grammar.py',191), + ('factor -> factor dot func_call','factor',3,'p_factor2','cool_grammar.py',198), + ('factor -> func_call','factor',1,'p_factor2','cool_grammar.py',199), + ('atom -> num','atom',1,'p_atom_num','cool_grammar.py',206), + ('atom -> id','atom',1,'p_atom_id','cool_grammar.py',210), + ('atom -> new id','atom',2,'p_atom_new','cool_grammar.py',214), + ('atom -> ocur block ccur','atom',3,'p_atom_block','cool_grammar.py',218), + ('atom -> true','atom',1,'p_atom_boolean','cool_grammar.py',222), + ('atom -> false','atom',1,'p_atom_boolean','cool_grammar.py',223), + ('atom -> string','atom',1,'p_atom_string','cool_grammar.py',227), + ('block -> expr semi','block',2,'p_block','cool_grammar.py',231), + ('block -> expr semi block','block',3,'p_block','cool_grammar.py',232), + ('func_call -> id opar arg_list cpar','func_call',4,'p_func_call','cool_grammar.py',239), + ('arg_list -> expr','arg_list',1,'p_arg_list','cool_grammar.py',243), + ('arg_list -> expr comma arg_list','arg_list',3,'p_arg_list','cool_grammar.py',244), + ('arg_list -> epsilon','arg_list',1,'p_arg_list_empty','cool_grammar.py',251), +] diff --git a/src/tokens.py b/src/tokens.py new file mode 100644 index 00000000..a7fd88ae --- /dev/null +++ b/src/tokens.py @@ -0,0 +1,62 @@ +reserved = { + 'class': 'class', + 'else': 'else', + 'false': 'false', + 'fi': 'fi', + 'if': 'if', + 'in': 'in', + 'inherits': 'inherits', + 'isvoid': 'isvoid', + 'let': 'let', + 'loop': 'loop', + 'pool': 'pool', + 'then': 'then', + 'while': 'while', + 'case': 'case', + 'esac': 'esac', + 'new': 'new', + 'of': 'of', + 'not': 'not', + 'true': 'true', + 'print': 'print', + 'inherits' : 'inherits' +} + +tokens = [ + 'semi', # '; ' + 'colon', # ': ' + 'comma', # ', ' + 'dot', # '. ' + 'opar', # '( ' + 'cpar', # ') ' + 'ocur', # '{' + 'ccur', # '} ' + 'larrow', # '<-' + 'arroba', # '@' + 'rarrow', # '=> ' + 'nox', # '~' + 'equal', # '=' + 'plus', # '+' + 'minus', # '-' + 'star', # '\*' + 'div', # '/ ' + 'less', # '<' + 'lesseq', # '<=' + 'id', + 'of', + 'num', + 'string' +] + list(reserved.values()) + +class Token: + def __init__(self, lex, type_, lineno, pos): + self.lex = lex + self.type = type_ + self.lineno = lineno + self.pos = pos + + def __str__(self): + return f'{self.type}: {self.lex} ({self.lineno}, {self.pos})' + + def __repr__(self): + return str(self) \ No newline at end of file diff --git a/src/tools/ast.py b/src/tools/ast.py new file mode 100644 index 00000000..64cfb538 --- /dev/null +++ b/src/tools/ast.py @@ -0,0 +1,174 @@ +class Node: + pass + +class ProgramNode(Node): + def __init__(self, declarations): + self.declarations = declarations + +class DeclarationNode(Node): + pass + +class ExpressionNode(Node): + pass + +class ClassDeclarationNode(DeclarationNode): + def __init__(self, idx, features, parent=None): + self.id = idx + self.parent = parent + self.features = features + +class FuncDeclarationNode(DeclarationNode): + def __init__(self, idx, params, return_type, body): + self.id = idx + self.params = params + self.type = return_type + self.body = body + +class AttrDeclarationNode(DeclarationNode): + def __init__(self, idx, typex, expr=None): + self.id = idx + self.type = typex + self.expr = expr + +class VarDeclarationNode(ExpressionNode): + def __init__(self, idx, typex, expr=None): + self.id = idx + self.type = typex + self.expr = expr + +class AssignNode(ExpressionNode): + def __init__(self, idx, expr): + self.id = idx + self.expr = expr + +class CallNode(ExpressionNode): + def __init__(self, obj, idx, args): + self.obj = obj + self.id = idx + self.args = args + +class BlockNode(ExpressionNode): + def __init__(self, expr_list): + self.expr_list = expr_list + +class BaseCallNode(ExpressionNode): + def __init__(self, obj, typex, idx, args): + self.obj = obj + self.id = idx + self.args = args + self.type = typex + + +class StaticCallNode(ExpressionNode): + def __init__(self, idx, args): + self.id = idx + self.args = args + + +class AtomicNode(ExpressionNode): + def __init__(self, lex): + self.lex = lex + +class BinaryNode(ExpressionNode): + def __init__(self, left, right): + self.left = left + self.right = right + +class BinaryLogicalNode(BinaryNode): + def __init__(self, left, right): + super().__init__(left, right) + +class BinaryArithNode(BinaryNode): + def __init__(self, left, right): + super().__init__(left, right) + +class UnaryNode(ExpressionNode): + def __init__(self, expr): + self.expr = expr + +class UnaryLogicalNode(UnaryNode): + def __init__(self, operand): + super().__init__(operand) + +class UnaryArithNode(UnaryNode): + def __init__(self, operand): + super().__init__(operand) + +class WhileNode(ExpressionNode): + def __init__(self, cond, expr): + self.cond = cond + self.expr = expr + +class ConditionalNode(ExpressionNode): + def __init__(self, cond, stm, else_stm): + self.cond = cond + self.stm = stm + self.else_stm = else_stm + +class CaseNode(ExpressionNode): + def __init__(self, expr, case_list): + self.expr = expr + self.case_list = case_list + + def __hash__(self): + return id(self) + +class OptionNode(ExpressionNode): + def __init__(self, idx, typex, expr): + self.id = idx + self.typex = typex + self.expr = expr + + +class LetNode(ExpressionNode): + def __init__(self, init_list, expr): + self.init_list = init_list + self.expr = expr + + def __hash__(self): + return id(self) + +class ConstantNumNode(AtomicNode): + pass + +class ConstantBoolNode(AtomicNode): + pass + +class ConstantStrNode(AtomicNode): + pass + +class VariableNode(AtomicNode): + pass + +class InstantiateNode(AtomicNode): + pass + +class BinaryNotNode(UnaryArithNode): + pass + +class NotNode(UnaryLogicalNode): + pass + +class IsVoidNode(UnaryArithNode): + pass + +class PlusNode(BinaryArithNode): + pass + +class MinusNode(BinaryArithNode): + pass + +class StarNode(BinaryArithNode): + pass + +class DivNode(BinaryArithNode): + pass + +class LessNode(BinaryLogicalNode): + pass + +class LessEqNode(BinaryLogicalNode): + pass + +class EqualNode(BinaryLogicalNode): + pass \ No newline at end of file diff --git a/src/tools/errors.py b/src/tools/errors.py new file mode 100644 index 00000000..1f12d0ed --- /dev/null +++ b/src/tools/errors.py @@ -0,0 +1,83 @@ + + +class CoolError(Exception): + @property + def error_type(self): + return 'CoolError' + + @property + def text(self): + return self.args[0] + +class CompilerError(CoolError): + 'Se reporta al presentar alguna anomalia con la entrada del compilador' + + UNKNOWN_FILE = 'The file "%s" does not exist' + + @property + def error_type(self): + return 'CompilerError' + +class LexicographicError(CoolError): + 'Errores detectados por el lexer' + + UNKNOWN_TOKEN = 'Invalid token "%s"' + + @property + def error_type(self): + return 'CompilerError' + +class SyntaticError(CoolError): + 'Errores detectados en el parser' + + @property + def error_type(self): + return 'CompilerError' + +class NameError(CoolError): + 'Se reporta al referenciar a un identificador en un ambito en el que no es visible' + + USED_BEFORE_ASSIGNMENT = 'Variable "%s" used before being assigned' + + @property + def error_type(self): + return 'CompilerError' + + +class TypeError(CoolError): + 'Se reporta al detectar un problema de tipos' + + INVALID_OPERATION = 'Operation is not defined between "%s" and "%s".' + INCOMPATIBLE_TYPES = 'Cannot convert "%s" into "%s".' + #? INCORRECT_TYPE = 'Incorrect type "%s" waiting "%s"' + BOPERATION_NOT_DEFINED = '%s operations are not defined between "%s" and "%s"' + UOPERATION_NOT_DEFINED = '%s operations are not defined for "%s"' + + @property + def error_type(self): + return 'CompilerError' + + +class AttributeError(CoolError): + 'Se reporta cuando un atributo o método se referencia pero no está definido' + + VARIABLE_NOT_DEFINED = 'Variable "%s" is not defined in "%s".' + WRONG_SIGNATURE = 'Method "%s" already defined in "%s" with a different signature.' + + @property + def error_type(self): + return 'CompilerError' + +class SemanticError(CoolError): + 'Otros errores semanticos' + + SELF_IS_READONLY = 'Variable "self" is read-only.' + LOCAL_ALREADY_DEFINED = 'Variable "%s" is already defined in method "%s".' + CIRCULAR_DEPENDENCY = 'Circular dependency between %s and %s' + MISSING_PARAMETER = 'Missing argument "%s" in function call "%s"' + TOO_MANY_ARGUMENTS = 'Too many arguments for function call "%s"' + + @property + def error_type(self): + return 'CompilerError' + \ No newline at end of file diff --git a/src/tools/tokens.py b/src/tools/tokens.py new file mode 100644 index 00000000..99e79f39 --- /dev/null +++ b/src/tools/tokens.py @@ -0,0 +1,61 @@ +reserved = { + 'class': 'class', + 'else': 'else', + 'false': 'false', + 'fi': 'fi', + 'if': 'if', + 'in': 'in', + 'inherits': 'inherits', + 'isvoid': 'isvoid', + 'let': 'let', + 'loop': 'loop', + 'pool': 'pool', + 'then': 'then', + 'while': 'while', + 'case': 'case', + 'esac': 'esac', + 'new': 'new', + 'of': 'of', + 'not': 'not', + 'true': 'true', + 'def': 'def', + 'print': 'print' +} + +tokens = [ + 'semi', # '; ' + 'colon', # ': ' + 'comma', # ', ' + 'dot', # '. ' + 'opar', # '( ' + 'cpar', # ') ' + 'ocur', # '{' + 'ccur', # '} ' + 'larrow', # '<-' + 'arroba', # '@' + 'rarrow', # '=> ' + 'nox', # '~' + 'equal', # '=' + 'plus', # '+' + 'minus', # '-' + 'star', # '\*' + 'div', # '/ ' + 'less', # '<' + 'lesseq', # '<=' + 'id', + 'num', + 'string' +] + list(reserved.values()) + +class Token: + def __init__(self, lex, type_, lineno, pos): + self.lex = lex + self.type = type_ + self.lineno = lineno + self.pos = pos + + def __str__(self): + return f'{self.type}: {self.lex} ({self.lineno}, {self.pos})' + + def __repr__(self): + return str(self) \ No newline at end of file From a2b2bccc6fdc7aefab73c6045cd3b8431e3e781b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Loraine=20Monteagudo=20Garc=C3=ADa?= Date: Thu, 30 Jan 2020 22:46:58 -0700 Subject: [PATCH 03/60] Organizing the project --- .gitignore | 912 ++++---- .travis.yml | 44 +- LICENSE | 42 +- Pipfile | 24 +- Pipfile.lock | 58 +- README.md | 1 - doc/Readme.md | 78 +- requirements.txt | 4 +- src/Readme.md | 156 +- src/cool_grammar.py | 520 +++-- src/coolc.sh | 13 +- src/lexer.py | 221 +- src/main.py | 30 + src/makefile | 23 +- src/{ => output_parser}/parsetab.py | 124 +- src/parser.out | 3170 --------------------------- src/parser.py | 31 + src/tools/ast.py | 346 +-- src/tools/errors.py | 178 +- src/tools/tokens.py | 120 +- src/{ => utils}/tokens.py | 122 +- tests/codegen/arith.cl | 860 ++++---- tests/codegen/book_list.cl | 264 +-- tests/codegen/cells.cl | 194 +- tests/codegen/complex.cl | 104 +- tests/codegen/fib.cl | 58 +- tests/codegen/graph.cl | 762 +++---- tests/codegen/hairyscary.cl | 134 +- tests/codegen/hello_world.cl | 10 +- tests/codegen/helloworld.cl | 12 +- tests/codegen/io.cl | 206 +- tests/codegen/life.cl | 872 ++++---- tests/codegen/new_complex.cl | 158 +- tests/codegen/palindrome.cl | 50 +- tests/codegen_test.py | 28 +- tests/conftest.py | 10 +- tests/lexer/test1.cl | 18 +- tests/lexer/test1_error.txt | 4 +- tests/lexer/test3.cl | 90 +- tests/lexer/test3_error.txt | 2 +- tests/lexer/test5.cl | 6 +- tests/lexer/test5_error.txt | 2 +- tests/lexer/test6.cl | 10 +- tests/lexer/test6_error.txt | 10 +- tests/lexer_test.py | 24 +- tests/parser/err2.cl | 28 +- tests/parser/err2_error.txt | 2 +- tests/parser/isprime.cl | 80 +- tests/parser/isprime_error.txt | 2 +- tests/parser/prod.cl | 42 +- tests/parser/test2.cl | 40 +- tests/parser/test2_error.txt | 8 +- tests/parser/test4.cl | 10 +- tests/parser_test.py | 24 +- tests/semantic/hello_world.cl | 10 +- tests/semantic_test.py | 24 +- tests/utils/utils.py | 92 +- 57 files changed, 3681 insertions(+), 6786 deletions(-) delete mode 100644 README.md create mode 100644 src/main.py rename src/{ => output_parser}/parsetab.py (89%) delete mode 100644 src/parser.out create mode 100644 src/parser.py rename src/{ => utils}/tokens.py (95%) diff --git a/.gitignore b/.gitignore index 2fc88380..7a5c8f3a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,456 +1,456 @@ -# File created using '.gitignore Generator' for Visual Studio Code: https://bit.ly/vscode-gig - -# Created by https://www.gitignore.io/api/visualstudiocode,linux,latex,python -# Edit at https://www.gitignore.io/?templates=visualstudiocode,linux,latex,python - -### LaTeX ### -## Core latex/pdflatex auxiliary files: -*.aux -*.lof -*.log -*.lot -*.fls -*.out -*.toc -*.fmt -*.fot -*.cb -*.cb2 -.*.lb - -## Intermediate documents: -*.dvi -*.xdv -*-converted-to.* -# these rules might exclude image files for figures etc. -# *.ps -# *.eps -# *.pdf - -## Generated if empty string is given at "Please type another file name for output:" -.pdf - -## Bibliography auxiliary files (bibtex/biblatex/biber): -*.bbl -*.bcf -*.blg -*-blx.aux -*-blx.bib -*.run.xml - -## Build tool auxiliary files: -*.fdb_latexmk -*.synctex -*.synctex(busy) -*.synctex.gz -*.synctex.gz(busy) -*.pdfsync - -## Build tool directories for auxiliary files -# latexrun -latex.out/ - -## Auxiliary and intermediate files from other packages: -# algorithms -*.alg -*.loa - -# achemso -acs-*.bib - -# amsthm -*.thm - -# beamer -*.nav -*.pre -*.snm -*.vrb - -# changes -*.soc - -# comment -*.cut - -# cprotect -*.cpt - -# elsarticle (documentclass of Elsevier journals) -*.spl - -# endnotes -*.ent - -# fixme -*.lox - -# feynmf/feynmp -*.mf -*.mp -*.t[1-9] -*.t[1-9][0-9] -*.tfm - -#(r)(e)ledmac/(r)(e)ledpar -*.end -*.?end -*.[1-9] -*.[1-9][0-9] -*.[1-9][0-9][0-9] -*.[1-9]R -*.[1-9][0-9]R -*.[1-9][0-9][0-9]R -*.eledsec[1-9] -*.eledsec[1-9]R -*.eledsec[1-9][0-9] -*.eledsec[1-9][0-9]R -*.eledsec[1-9][0-9][0-9] -*.eledsec[1-9][0-9][0-9]R - -# glossaries -*.acn -*.acr -*.glg -*.glo -*.gls -*.glsdefs - -# uncomment this for glossaries-extra (will ignore makeindex's style files!) -# *.ist - -# gnuplottex -*-gnuplottex-* - -# gregoriotex -*.gaux -*.gtex - -# htlatex -*.4ct -*.4tc -*.idv -*.lg -*.trc -*.xref - -# hyperref -*.brf - -# knitr -*-concordance.tex -# TODO Comment the next line if you want to keep your tikz graphics files -*.tikz -*-tikzDictionary - -# listings -*.lol - -# luatexja-ruby -*.ltjruby - -# makeidx -*.idx -*.ilg -*.ind - -# minitoc -*.maf -*.mlf -*.mlt -*.mtc[0-9]* -*.slf[0-9]* -*.slt[0-9]* -*.stc[0-9]* - -# minted -_minted* -*.pyg - -# morewrites -*.mw - -# nomencl -*.nlg -*.nlo -*.nls - -# pax -*.pax - -# pdfpcnotes -*.pdfpc - -# sagetex -*.sagetex.sage -*.sagetex.py -*.sagetex.scmd - -# scrwfile -*.wrt - -# sympy -*.sout -*.sympy -sympy-plots-for-*.tex/ - -# pdfcomment -*.upa -*.upb - -# pythontex -*.pytxcode -pythontex-files-*/ - -# tcolorbox -*.listing - -# thmtools -*.loe - -# TikZ & PGF -*.dpth -*.md5 -*.auxlock - -# todonotes -*.tdo - -# vhistory -*.hst -*.ver - -# easy-todo -*.lod - -# xcolor -*.xcp - -# xmpincl -*.xmpi - -# xindy -*.xdy - -# xypic precompiled matrices -*.xyc - -# endfloat -*.ttt -*.fff - -# Latexian -TSWLatexianTemp* - -## Editors: -# WinEdt -*.bak -*.sav - -# Texpad -.texpadtmp - -# LyX -*.lyx~ - -# Kile -*.backup - -# KBibTeX -*~[0-9]* - -# auto folder when using emacs and auctex -./auto/* -*.el - -# expex forward references with \gathertags -*-tags.tex - -# standalone packages -*.sta - -### LaTeX Patch ### -# glossaries -*.glstex - -### Linux ### -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* - -### Python ### -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -<<<<<<< HEAD -pip-wheel-metadata/ -share/python-wheels/ -======= ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -<<<<<<< HEAD -.nox/ -======= ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -.hypothesis/ -.pytest_cache/ - -# Translations -*.mo -*.pot - -<<<<<<< HEAD -======= -# Django stuff: -*.log -local_settings.py -db.sqlite3 - -# Flask stuff: -instance/ -.webassets-cache - ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -<<<<<<< HEAD -# pyenv -.python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -======= -# Jupyter Notebook -.ipynb_checkpoints - -# pyenv -.python-version - ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e -# celery beat schedule file -celerybeat-schedule - -# SageMath parsed files -*.sage.py - -<<<<<<< HEAD -======= -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -<<<<<<< HEAD -# Mr Developer -.mr.developer.cfg -.project -.pydevproject - -======= ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e -# mkdocs documentation -/site - -# mypy -<<<<<<< HEAD -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -### VisualStudioCode Patch ### -# Ignore all local history of files -.history - -# End of https://www.gitignore.io/api/visualstudiocode,linux,latex,python - -# Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option) - -======= -.mypy_cache/ ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +# File created using '.gitignore Generator' for Visual Studio Code: https://bit.ly/vscode-gig + +# Created by https://www.gitignore.io/api/visualstudiocode,linux,latex,python +# Edit at https://www.gitignore.io/?templates=visualstudiocode,linux,latex,python + +### LaTeX ### +## Core latex/pdflatex auxiliary files: +*.aux +*.lof +*.log +*.lot +*.fls +*.out +*.toc +*.fmt +*.fot +*.cb +*.cb2 +.*.lb + +## Intermediate documents: +*.dvi +*.xdv +*-converted-to.* +# these rules might exclude image files for figures etc. +# *.ps +# *.eps +# *.pdf + +## Generated if empty string is given at "Please type another file name for output:" +.pdf + +## Bibliography auxiliary files (bibtex/biblatex/biber): +*.bbl +*.bcf +*.blg +*-blx.aux +*-blx.bib +*.run.xml + +## Build tool auxiliary files: +*.fdb_latexmk +*.synctex +*.synctex(busy) +*.synctex.gz +*.synctex.gz(busy) +*.pdfsync + +## Build tool directories for auxiliary files +# latexrun +latex.out/ + +## Auxiliary and intermediate files from other packages: +# algorithms +*.alg +*.loa + +# achemso +acs-*.bib + +# amsthm +*.thm + +# beamer +*.nav +*.pre +*.snm +*.vrb + +# changes +*.soc + +# comment +*.cut + +# cprotect +*.cpt + +# elsarticle (documentclass of Elsevier journals) +*.spl + +# endnotes +*.ent + +# fixme +*.lox + +# feynmf/feynmp +*.mf +*.mp +*.t[1-9] +*.t[1-9][0-9] +*.tfm + +#(r)(e)ledmac/(r)(e)ledpar +*.end +*.?end +*.[1-9] +*.[1-9][0-9] +*.[1-9][0-9][0-9] +*.[1-9]R +*.[1-9][0-9]R +*.[1-9][0-9][0-9]R +*.eledsec[1-9] +*.eledsec[1-9]R +*.eledsec[1-9][0-9] +*.eledsec[1-9][0-9]R +*.eledsec[1-9][0-9][0-9] +*.eledsec[1-9][0-9][0-9]R + +# glossaries +*.acn +*.acr +*.glg +*.glo +*.gls +*.glsdefs + +# uncomment this for glossaries-extra (will ignore makeindex's style files!) +# *.ist + +# gnuplottex +*-gnuplottex-* + +# gregoriotex +*.gaux +*.gtex + +# htlatex +*.4ct +*.4tc +*.idv +*.lg +*.trc +*.xref + +# hyperref +*.brf + +# knitr +*-concordance.tex +# TODO Comment the next line if you want to keep your tikz graphics files +*.tikz +*-tikzDictionary + +# listings +*.lol + +# luatexja-ruby +*.ltjruby + +# makeidx +*.idx +*.ilg +*.ind + +# minitoc +*.maf +*.mlf +*.mlt +*.mtc[0-9]* +*.slf[0-9]* +*.slt[0-9]* +*.stc[0-9]* + +# minted +_minted* +*.pyg + +# morewrites +*.mw + +# nomencl +*.nlg +*.nlo +*.nls + +# pax +*.pax + +# pdfpcnotes +*.pdfpc + +# sagetex +*.sagetex.sage +*.sagetex.py +*.sagetex.scmd + +# scrwfile +*.wrt + +# sympy +*.sout +*.sympy +sympy-plots-for-*.tex/ + +# pdfcomment +*.upa +*.upb + +# pythontex +*.pytxcode +pythontex-files-*/ + +# tcolorbox +*.listing + +# thmtools +*.loe + +# TikZ & PGF +*.dpth +*.md5 +*.auxlock + +# todonotes +*.tdo + +# vhistory +*.hst +*.ver + +# easy-todo +*.lod + +# xcolor +*.xcp + +# xmpincl +*.xmpi + +# xindy +*.xdy + +# xypic precompiled matrices +*.xyc + +# endfloat +*.ttt +*.fff + +# Latexian +TSWLatexianTemp* + +## Editors: +# WinEdt +*.bak +*.sav + +# Texpad +.texpadtmp + +# LyX +*.lyx~ + +# Kile +*.backup + +# KBibTeX +*~[0-9]* + +# auto folder when using emacs and auctex +./auto/* +*.el + +# expex forward references with \gathertags +*-tags.tex + +# standalone packages +*.sta + +### LaTeX Patch ### +# glossaries +*.glstex + +### Linux ### +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +<<<<<<< HEAD +pip-wheel-metadata/ +share/python-wheels/ +======= +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +<<<<<<< HEAD +.nox/ +======= +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +<<<<<<< HEAD +======= +# Django stuff: +*.log +local_settings.py +db.sqlite3 + +# Flask stuff: +instance/ +.webassets-cache + +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +<<<<<<< HEAD +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +======= +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +<<<<<<< HEAD +======= +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +<<<<<<< HEAD +# Mr Developer +.mr.developer.cfg +.project +.pydevproject + +======= +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +# mkdocs documentation +/site + +# mypy +<<<<<<< HEAD +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history + +# End of https://www.gitignore.io/api/visualstudiocode,linux,latex,python + +# Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option) + +======= +.mypy_cache/ +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e diff --git a/.travis.yml b/.travis.yml index 27b0b96d..52b5ba1b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,23 +1,23 @@ -language: python -python: - - "3.7" -# command to install dependencies -install: - - pip install -r requirements.txt -# command to run tests -jobs: - include: - - stage: "Lexer" - name: "Lexer" - script: - - cd src - - make clean - - make - - make test TAG=lexer - - stage: "Parser" - name: "Parser" - script: - - cd src - - make clean - - make +language: python +python: + - "3.7" +# command to install dependencies +install: + - pip install -r requirements.txt +# command to run tests +jobs: + include: + - stage: "Lexer" + name: "Lexer" + script: + - cd src + - make clean + - make + - make test TAG=lexer + - stage: "Parser" + name: "Parser" + script: + - cd src + - make clean + - make - make test TAG=parser \ No newline at end of file diff --git a/LICENSE b/LICENSE index ad9e4865..f543cdb4 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,21 @@ -MIT License - -Copyright (c) 2020 School of Math and Computer Science, University of Havana - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +MIT License + +Copyright (c) 2020 School of Math and Computer Science, University of Havana + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Pipfile b/Pipfile index 5b7ff3c2..6ad89606 100644 --- a/Pipfile +++ b/Pipfile @@ -1,12 +1,12 @@ -[[source]] -name = "pypi" -url = "https://pypi.org/simple" -verify_ssl = true - -[dev-packages] - -[packages] -ply = "*" - -[requires] -python_version = "3.7" +[[source]] +name = "pypi" +url = "https://pypi.org/simple" +verify_ssl = true + +[dev-packages] + +[packages] +ply = "*" + +[requires] +python_version = "3.7" diff --git a/Pipfile.lock b/Pipfile.lock index e971880a..8b110a67 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,29 +1,29 @@ -{ - "_meta": { - "hash": { - "sha256": "768c4b66d0ce858fbbf1b8a8998ffa9616166666555d0dc7bd1b92a9316518c8" - }, - "pipfile-spec": 6, - "requires": { - "python_version": "3.7" - }, - "sources": [ - { - "name": "pypi", - "url": "https://pypi.org/simple", - "verify_ssl": true - } - ] - }, - "default": { - "ply": { - "hashes": [ - "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", - "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce" - ], - "index": "pypi", - "version": "==3.11" - } - }, - "develop": {} -} +{ + "_meta": { + "hash": { + "sha256": "768c4b66d0ce858fbbf1b8a8998ffa9616166666555d0dc7bd1b92a9316518c8" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.7" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "ply": { + "hashes": [ + "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", + "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce" + ], + "index": "pypi", + "version": "==3.11" + } + }, + "develop": {} +} diff --git a/README.md b/README.md deleted file mode 100644 index edd14b09..00000000 --- a/README.md +++ /dev/null @@ -1 +0,0 @@ -# Compiler \ No newline at end of file diff --git a/doc/Readme.md b/doc/Readme.md index 402477c8..92220fc6 100644 --- a/doc/Readme.md +++ b/doc/Readme.md @@ -1,39 +1,39 @@ -# Documentación - -> Introduzca sus datos (de todo el equipo) en la siguiente tabla: - -**Nombre** | **Grupo** | **Github** ---|--|-- -Nombre1 Apellido1 Apellido2 | C4xx | [@github_user](https://github.com/) -Nombre2 Apellido1 Apellido2 | C4xx | [@github_user](https://github.com/) -Nombre3 Apellido1 Apellido2 | C4xx | [@github_user](https://github.com/) - -## Readme - -Modifique el contenido de este documento para documentar de forma clara y concisa los siguientes aspectos: - -- Cómo ejecutar (y compilar si es necesario) su compilador. -- Requisitos adicionales, dependencias, configuración, etc. -- Opciones adicionales que tenga su compilador. - -### Sobre los Equipos de Desarrollo - -Para desarrollar el compilador del lenguaje COOL se trabajará en equipos de 2 o 3 integrantes. El proyecto de Compilación será recogido y evaluado únicamente a través de Github. Es imprescindible tener una cuenta de Github para cada participante, y que su proyecto esté correctamente hosteado en esta plataforma. Próximamente les daremos las instrucciones mínimas necesarias para ello. - -### Sobre los Materiales a Entregar - -Para la evaluación del proyecto Ud. debe entregar un informe en formato PDF (`report.pdf`) que resuma de manera organizada y comprensible la arquitectura e implementación de su compilador. -El documento **NO** debe exceder las 5 cuartillas. -En él explicará en más detalle su solución a los problemas que, durante la implementación de cada una de las fases del proceso de compilación, hayan requerido de Ud. especial atención. - -### Estructura del reporte - -Usted es libre de estructurar su reporte escrito como más conveniente le parezca. A continuación le sugerimos algunas secciones que no deberían faltar, aunque puede mezclar, renombrar y organizarlas de la manera que mejor le parezca: - -- **Uso del compilador**: detalles sobre las opciones de líneas de comando, si tiene opciones adicionales (e.j., `--ast` genera un AST en JSON, etc.). Básicamente lo mismo que pondrá en este Readme. -- **Arquitectura del compilador**: una explicación general de la arquitectura, en cuántos módulos se divide el proyecto, cuantas fases tiene, qué tipo de gramática se utiliza, y en general, como se organiza el proyecto. Una buena imagen siempre ayuda. -- **Problemas técnicos**: detalles sobre cualquier problema teórico o técnico interesante que haya necesitado resolver de forma particular. - -## Sobre la Fecha de Entrega - -Se realizarán recogidas parciales del proyecto a lo largo del curso. En el Canal de Telegram [@matcom_cmp](https://t.me/matcom_cmp) se anunciará la fecha y requisitos de cada primera entrega. +# Documentación + +> Introduzca sus datos (de todo el equipo) en la siguiente tabla: + +**Nombre** | **Grupo** | **Github** +--|--|-- +Loraine Monteagudo García | C411 | [@lorainemg](https://github.com/lorainemg) +Amanda Marrero Santos | C411 | [@github_user](https://github.com/) +Manuel Fernández Arias | C411 | [@github_user](https://github.com/) + +## Readme + +Modifique el contenido de este documento para documentar de forma clara y concisa los siguientes aspectos: + +- Cómo ejecutar (y compilar si es necesario) su compilador. +- Requisitos adicionales, dependencias, configuración, etc. +- Opciones adicionales que tenga su compilador. + +### Sobre los Equipos de Desarrollo + +Para desarrollar el compilador del lenguaje COOL se trabajará en equipos de 2 o 3 integrantes. El proyecto de Compilación será recogido y evaluado únicamente a través de Github. Es imprescindible tener una cuenta de Github para cada participante, y que su proyecto esté correctamente hosteado en esta plataforma. Próximamente les daremos las instrucciones mínimas necesarias para ello. + +### Sobre los Materiales a Entregar + +Para la evaluación del proyecto Ud. debe entregar un informe en formato PDF (`report.pdf`) que resuma de manera organizada y comprensible la arquitectura e implementación de su compilador. +El documento **NO** debe exceder las 5 cuartillas. +En él explicará en más detalle su solución a los problemas que, durante la implementación de cada una de las fases del proceso de compilación, hayan requerido de Ud. especial atención. + +### Estructura del reporte + +Usted es libre de estructurar su reporte escrito como más conveniente le parezca. A continuación le sugerimos algunas secciones que no deberían faltar, aunque puede mezclar, renombrar y organizarlas de la manera que mejor le parezca: + +- **Uso del compilador**: detalles sobre las opciones de líneas de comando, si tiene opciones adicionales (e.j., `--ast` genera un AST en JSON, etc.). Básicamente lo mismo que pondrá en este Readme. +- **Arquitectura del compilador**: una explicación general de la arquitectura, en cuántos módulos se divide el proyecto, cuantas fases tiene, qué tipo de gramática se utiliza, y en general, como se organiza el proyecto. Una buena imagen siempre ayuda. +- **Problemas técnicos**: detalles sobre cualquier problema teórico o técnico interesante que haya necesitado resolver de forma particular. + +## Sobre la Fecha de Entrega + +Se realizarán recogidas parciales del proyecto a lo largo del curso. En el Canal de Telegram [@matcom_cmp](https://t.me/matcom_cmp) se anunciará la fecha y requisitos de cada primera entrega. diff --git a/requirements.txt b/requirements.txt index 9eb0cad1..c250faba 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ -pytest -pytest-ordering +pytest +pytest-ordering diff --git a/src/Readme.md b/src/Readme.md index 1200371b..cdca282e 100644 --- a/src/Readme.md +++ b/src/Readme.md @@ -1,78 +1,78 @@ -# COOL: Proyecto de Compilación - -La evaluación de la asignatura Complementos de Compilación, inscrita en el programa del 4to año de la Licenciatura en Ciencia de la Computación de la Facultad de Matemática y Computación de la -Universidad de La Habana, consiste este curso en la implementación de un compilador completamente -funcional para el lenguaje _COOL_. - -_COOL (Classroom Object-Oriented Language)_ es un pequeño lenguaje que puede ser implementado con un esfuerzo razonable en un semestre del curso. Aun así, _COOL_ mantiene muchas de las características de los lenguajes de programación modernos, incluyendo orientación a objetos, tipado estático y manejo automático de memoria. - -### Sobre el Lenguaje COOL - -Ud. podrá encontrar la especificación formal del lenguaje COOL en el documento _"COOL Language Reference Manual"_, que se distribuye junto con el presente texto. - -## Código Fuente - -### Compilando su proyecto - -Si es necesario compilar su proyecto, incluya todas las instrucciones necesarias en un archivo [`/src/makefile`](/src/makefile). -Durante la evaluación su proyecto se compilará ejecutando la siguiente secuencia: - -```bash -$ cd source -$ make clean -$ make -``` - -### Ejecutando su proyecto - -Incluya en un archivo [`/src/coolc.sh`](/src/coolc.sh) todas las instrucciones que hacen falta para lanzar su compilador. Recibirá como entrada un archivo con extensión `.cl` y debe generar como salida un archivo `.mips` cuyo nombre será el mismo que la entrada. - -Para lanzar el compilador, se ejecutará la siguiente instrucción: - -```bash -$ cd source -$ ./coolc.sh -``` - -### Sobre el Compilador de COOL - -El compilador de COOL se ejecutará como se ha definido anteriormente. -En caso de que no ocurran errores durante la operación del compilador, **coolc.sh** deberá terminar con código de salida 0, generar (o sobrescribir si ya existe) en la misma carpeta del archivo **.cl** procesado, y con el mismo nombre que éste, un archivo con extension **.mips** que pueda ser ejecutado con **spim**. Además, reportar a la salida estándar solamente lo siguiente: - - - - -En caso de que ocurran errores durante la operación del compilador, **coolc.sh** deberá terminar con código -de salida (exit code) 1 y reportar a la salida estándar (standard output stream) lo que sigue... - - - - _1 - ... - _n - -... donde `_i` tiene el siguiente formato: - - (,) - : - -Los campos `` y `` indican la ubicación del error en el fichero **.cl** procesado. En caso -de que la naturaleza del error sea tal que no pueda asociárselo a una línea y columna en el archivo de -código fuente, el valor de dichos campos debe ser 0. - -El campo `` será alguno entre: - -- `CompilerError`: se reporta al detectar alguna anomalía con la entrada del compilador. Por ejemplo, si el fichero a compilar no existe. -- `LexicographicError`: errores detectados por el lexer. -- `SyntacticError`: errores detectados por el parser. -- `NameError`: se reporta al referenciar un `identificador` en un ámbito en el que no es visible. -- `TypeError`: se reporta al detectar un problema de tipos. Incluye: - - incompatibilidad de tipos entre `rvalue` y `lvalue`, - - operación no definida entre objetos de ciertos tipos, y - - tipo referenciado pero no definido. -- `AttributeError`: se reporta cuando un atributo o método se referencia pero no está definido. -- `SemanticError`: cualquier otro error semántico. - -### Sobre la Implementación del Compilador de COOL - -El compilador debe estar implementado en `python`. Usted debe utilizar una herramienta generadora de analizadores -lexicográficos y sintácticos. Puede utilizar la que sea de su preferencia. +# COOL: Proyecto de Compilación + +La evaluación de la asignatura Complementos de Compilación, inscrita en el programa del 4to año de la Licenciatura en Ciencia de la Computación de la Facultad de Matemática y Computación de la +Universidad de La Habana, consiste este curso en la implementación de un compilador completamente +funcional para el lenguaje _COOL_. + +_COOL (Classroom Object-Oriented Language)_ es un pequeño lenguaje que puede ser implementado con un esfuerzo razonable en un semestre del curso. Aun así, _COOL_ mantiene muchas de las características de los lenguajes de programación modernos, incluyendo orientación a objetos, tipado estático y manejo automático de memoria. + +### Sobre el Lenguaje COOL + +Ud. podrá encontrar la especificación formal del lenguaje COOL en el documento _"COOL Language Reference Manual"_, que se distribuye junto con el presente texto. + +## Código Fuente + +### Compilando su proyecto + +Si es necesario compilar su proyecto, incluya todas las instrucciones necesarias en un archivo [`/src/makefile`](/src/makefile). +Durante la evaluación su proyecto se compilará ejecutando la siguiente secuencia: + +```bash +$ cd source +$ make clean +$ make +``` + +### Ejecutando su proyecto + +Incluya en un archivo [`/src/coolc.sh`](/src/coolc.sh) todas las instrucciones que hacen falta para lanzar su compilador. Recibirá como entrada un archivo con extensión `.cl` y debe generar como salida un archivo `.mips` cuyo nombre será el mismo que la entrada. + +Para lanzar el compilador, se ejecutará la siguiente instrucción: + +```bash +$ cd source +$ ./coolc.sh +``` + +### Sobre el Compilador de COOL + +El compilador de COOL se ejecutará como se ha definido anteriormente. +En caso de que no ocurran errores durante la operación del compilador, **coolc.sh** deberá terminar con código de salida 0, generar (o sobrescribir si ya existe) en la misma carpeta del archivo **.cl** procesado, y con el mismo nombre que éste, un archivo con extension **.mips** que pueda ser ejecutado con **spim**. Además, reportar a la salida estándar solamente lo siguiente: + + + + +En caso de que ocurran errores durante la operación del compilador, **coolc.sh** deberá terminar con código +de salida (exit code) 1 y reportar a la salida estándar (standard output stream) lo que sigue... + + + + _1 + ... + _n + +... donde `_i` tiene el siguiente formato: + + (,) - : + +Los campos `` y `` indican la ubicación del error en el fichero **.cl** procesado. En caso +de que la naturaleza del error sea tal que no pueda asociárselo a una línea y columna en el archivo de +código fuente, el valor de dichos campos debe ser 0. + +El campo `` será alguno entre: + +- `CompilerError`: se reporta al detectar alguna anomalía con la entrada del compilador. Por ejemplo, si el fichero a compilar no existe. +- `LexicographicError`: errores detectados por el lexer. +- `SyntacticError`: errores detectados por el parser. +- `NameError`: se reporta al referenciar un `identificador` en un ámbito en el que no es visible. +- `TypeError`: se reporta al detectar un problema de tipos. Incluye: + - incompatibilidad de tipos entre `rvalue` y `lvalue`, + - operación no definida entre objetos de ciertos tipos, y + - tipo referenciado pero no definido. +- `AttributeError`: se reporta cuando un atributo o método se referencia pero no está definido. +- `SemanticError`: cualquier otro error semántico. + +### Sobre la Implementación del Compilador de COOL + +El compilador debe estar implementado en `python`. Usted debe utilizar una herramienta generadora de analizadores +lexicográficos y sintácticos. Puede utilizar la que sea de su preferencia. diff --git a/src/cool_grammar.py b/src/cool_grammar.py index e980179a..8142c54d 100644 --- a/src/cool_grammar.py +++ b/src/cool_grammar.py @@ -1,270 +1,250 @@ -import ply.yacc as yacc -from tools.tokens import tokens -from tools.ast import * -from lexer import CoolLexer - -# TODO: juntar las producciones -#? TODO: If siempre tiene else - -def p_program(p): - 'program : class_list' - p[0] = p[1] - -def p_epsilon(p): - 'epsilon :' - pass - -def p_class_list(p): - '''class_list : def_class class_list - | def_class''' - if len(p) == 2: - p[0] = [p[1]] - else: - p[0] = [p[1]] + p[2] - -def p_def_class(p): - '''def_class : class id ocur feature_list ccur semi - | class id inherits id ocur feature_list ccur semi''' - if len(p) == 7: - p[0] = ClassDeclarationNode(p[2], p[4]) - else: - p[0] = ClassDeclarationNode(p[2], p[6], p[4]) - -def p_feature_list(p): - '''feature_list : epsilon - | def_attr semi feature_list - | def_func semi feature_list''' - if len(p) == 2: - p[0] = [] - else: - p[0] = [p[1]] + p[3] - - -def p_def_attr(p): - '''def_attr : id colon id - | id colon id larrow expr''' - if len(p) == 4: - p[0] = AttrDeclarationNode(p[1], p[3]) - else: - p[0] = AttrDeclarationNode(p[1], p[3], p[5]) - -def p_def_func(p): - 'def_func : id opar param_list cpar colon id ocur expr ccur' - p[0] = FuncDeclarationNode(p[1], p[3], p[6], p[8]) - -def p_param_list(p): - '''param_list : param - | param comma param_list''' - if len(p) == 2: - p[0] = [p[1]] - else: - p[0] = [p[1]] + p[3] - -def p_param_list_empty(p): - 'param_list : epsilon' - p[0] = [] - -def p_param(p): - 'param : id colon id' - p[0] = (p[1], p[3]) - -def p_expr_let(p): - 'expr : let let_list in expr' - p[0] = LetNode(p[2], p[4]) - -def p_expr_case(p): - 'expr : case expr of cases_list esac' - p[0] = CaseNode(p[2], p[4]) - -def p_expr_if(p): - 'expr : if expr then expr else expr fi' - p[0] = ConditionalNode(p[2], p[4], p[6]) - -def p_expr_while(p): - 'expr : while expr loop expr pool' - p[0] = WhileNode(p[2], p[4]) - -def p_expr_arith(p): - 'expr : arith' - p[0] = p[1] - - -def p_let_list(p): - '''let_list : let_assign - | let_assign comma let_list''' - if len(p) == 2: - p[0] = [p[1]] - else: - p[0] = [p[1]] + p[3] - -def p_let_assign(p): - '''let_assign : param larrow expr - | param''' - if len(p) == 2: - p[0] = VariableNode(p[1][0], p[1][1]) - else: - p[0] = VarDeclarationNode(p[1][0], p[1][1], p[3]) - - -def p_cases_list(p): - '''cases_list : casep semi - | casep semi cases_list''' - if len(p) == 3: - p[0] = [p[1]] - else: - p[0] = [p[1]] + p[3] - -def p_case(p): - 'casep : id colon id rarrow expr' - p[0] = OptionNode(p[1], p[3], p[5]) - - -def p_arith(p): - '''arith : id larrow expr - | not comp - | comp - ''' - if len(p) == 4: - p[0] = AssignNode(p[1], p[3]) - elif len(p) == 3: - p[0] = NotNode(p[2]) - else: - p[0] = p[1] - -def p_comp(p): - '''comp : comp less op - | comp lesseq op - | comp equal op - | op''' - if len(p) == 2: - p[0] = p[1] - elif p[2] == '<': - p[0] = LessNode(p[1], p[3]) - elif p[2] == '<=': - p[0] = LessEqNode(p[1], p[3]) - elif p[2] == '=': - p[0] = EqualNode(p[1], p[3]) - - -def p_op(p): - '''op : op plus term - | op minus term - | term''' - if len(p) == 2: - p[0] = p[1] - elif p[2] == '+': - p[0] = PlusNode(p[1], p[3]) - elif p[2] == '-': - p[0] = MinusNode(p[1], p[3]) - -def p_term(p): - '''term : term star base_call - | term div base_call - | isvoid base_call - | nox base_call - | base_call''' - if len(p) == 2: - p[0] = p[1] - elif p[1] == 'isvoid': - p[0] = IsVoidNode(p[2]) - elif p[1] == '~': - p[0] = BinaryNotNode(p[2]) - elif p[2] == '*': - p[0] = StarNode(p[1], p[3]) - elif p[2] == '/': - p[0] = DivNode(p[1], p[3]) - -def p_base_call(p): - '''base_call : factor arroba id dot func_call - | factor''' - if len(p) == 2: - p[0] = p[1] - else: - p[0] = BaseCallNode(p[1], p[3], *p[5]) - -def p_factor1(p): - '''factor : atom - | opar expr cpar''' - if len(p) == 2: - p[0] = p[1] - else: - p[0] = p[2] - -def p_factor2(p): - '''factor : factor dot func_call - | func_call''' - if len(p) == 2: - p[0] = StaticCallNode(*p[1]) - else: - p[0] = CallNode(p[1], *p[3]) - -def p_atom_num(p): - 'atom : num' - p[0] = ConstantNumNode(p[1]) - -def p_atom_id(p): - 'atom : id' - p[0] = VariableNode(p[1]) - -def p_atom_new(p): - 'atom : new id' - p[0] = InstantiateNode(p[2]) - -def p_atom_block(p): - 'atom : ocur block ccur' - p[0] = BlockNode(p[2]) - -def p_atom_boolean(p): - '''atom : true - | false''' - p[0] = ConstantBoolNode(p[1]) - -def p_atom_string(p): - 'atom : string' - p[0] = ConstantStrNode(p[1]) - -def p_block(p): - '''block : expr semi - | expr semi block''' - if len(p) == 3: - p[0] = [p[1]] - else: - p[0] = [p[1]] + p[3] - -def p_func_call(p): - 'func_call : id opar arg_list cpar' - p[0] = (p[1], p[3]) - -def p_arg_list(p): - '''arg_list : expr - | expr comma arg_list''' - if len(p) == 2: - p[0] = [p[1]] - else: - p[0] = [p[1]] + p[3] - -def p_arg_list_empty(p): - 'arg_list : epsilon' - p[0] = [] - - # Error rule for syntax errors -def p_error(p): - print("Syntax error in input!") - -if __name__ == "__main__": - parser = yacc.yacc(start='program') - lexer = CoolLexer() - - s = ''' - class A { - ackermann ( m : AUTO_TYPE , n : AUTO_TYPE ) : AUTO_TYPE { - if ( m = 0 ) then n + 1 else - if ( n = 0 ) then ackermann ( m - 1 , 1 ) else - ackermann ( m - 1 , ackermann ( m , n - 1 ) ) - fi - fi - } ; - } ; - ''' - result = parser.parse(s, lexer.lexer, debug=True) - print(result) \ No newline at end of file +from tools.tokens import tokens +from tools.ast import * + +#? TODO: If siempre tiene else + +def p_program(p): + 'program : class_list' + p[0] = p[1] + +def p_epsilon(p): + 'epsilon :' + pass + +def p_class_list(p): + '''class_list : def_class class_list + | def_class''' + if len(p) == 2: + p[0] = [p[1]] + else: + p[0] = [p[1]] + p[2] + +def p_def_class(p): + '''def_class : class id ocur feature_list ccur semi + | class id inherits id ocur feature_list ccur semi''' + if len(p) == 7: + p[0] = ClassDeclarationNode(p[2], p[4]) + else: + p[0] = ClassDeclarationNode(p[2], p[6], p[4]) + + +def p_feature_list(p): + '''feature_list : epsilon + | def_attr semi feature_list + | def_func semi feature_list''' + if len(p) == 2: + p[0] = [] + else: + p[0] = [p[1]] + p[3] + + +def p_def_attr(p): + '''def_attr : id colon id + | id colon id larrow expr''' + if len(p) == 4: + p[0] = AttrDeclarationNode(p[1], p[3]) + else: + p[0] = AttrDeclarationNode(p[1], p[3], p[5]) + +def p_def_func(p): + 'def_func : id opar param_list cpar colon id ocur expr ccur' + p[0] = FuncDeclarationNode(p[1], p[3], p[6], p[8]) + +def p_param_list(p): + '''param_list : param + | param comma param_list''' + if len(p) == 2: + p[0] = [p[1]] + else: + p[0] = [p[1]] + p[3] + +def p_param_list_empty(p): + 'param_list : epsilon' + p[0] = [] + +def p_param(p): + 'param : id colon id' + p[0] = (p[1], p[3]) + +def p_expr_let(p): + 'expr : let let_list in expr' + p[0] = LetNode(p[2], p[4]) + +def p_expr_case(p): + 'expr : case expr of cases_list esac' + p[0] = CaseNode(p[2], p[4]) + +def p_expr_if(p): + 'expr : if expr then expr else expr fi' + p[0] = ConditionalNode(p[2], p[4], p[6]) + +def p_expr_while(p): + 'expr : while expr loop expr pool' + p[0] = WhileNode(p[2], p[4]) + +def p_expr_arith(p): + 'expr : arith' + p[0] = p[1] + + +def p_let_list(p): + '''let_list : let_assign + | let_assign comma let_list''' + if len(p) == 2: + p[0] = [p[1]] + else: + p[0] = [p[1]] + p[3] + +def p_let_assign(p): + '''let_assign : param larrow expr + | param''' + if len(p) == 2: + p[0] = VariableNode(p[1][0], p[1][1]) + else: + p[0] = VarDeclarationNode(p[1][0], p[1][1], p[3]) + + +def p_cases_list(p): + '''cases_list : casep semi + | casep semi cases_list''' + if len(p) == 3: + p[0] = [p[1]] + else: + p[0] = [p[1]] + p[3] + +def p_case(p): + 'casep : id colon id rarrow expr' + p[0] = OptionNode(p[1], p[3], p[5]) + + +def p_arith(p): + '''arith : id larrow expr + | not comp + | comp + ''' + if len(p) == 4: + p[0] = AssignNode(p[1], p[3]) + elif len(p) == 3: + p[0] = NotNode(p[2]) + else: + p[0] = p[1] + +def p_comp(p): + '''comp : comp less op + | comp lesseq op + | comp equal op + | op''' + if len(p) == 2: + p[0] = p[1] + elif p[2] == '<': + p[0] = LessNode(p[1], p[3]) + elif p[2] == '<=': + p[0] = LessEqNode(p[1], p[3]) + elif p[2] == '=': + p[0] = EqualNode(p[1], p[3]) + + +def p_op(p): + '''op : op plus term + | op minus term + | term''' + if len(p) == 2: + p[0] = p[1] + elif p[2] == '+': + p[0] = PlusNode(p[1], p[3]) + elif p[2] == '-': + p[0] = MinusNode(p[1], p[3]) + +def p_term(p): + '''term : term star base_call + | term div base_call + | isvoid base_call + | nox base_call + | base_call''' + if len(p) == 2: + p[0] = p[1] + elif p[1] == 'isvoid': + p[0] = IsVoidNode(p[2]) + elif p[1] == '~': + p[0] = BinaryNotNode(p[2]) + elif p[2] == '*': + p[0] = StarNode(p[1], p[3]) + elif p[2] == '/': + p[0] = DivNode(p[1], p[3]) + +def p_base_call(p): + '''base_call : factor arroba id dot func_call + | factor''' + if len(p) == 2: + p[0] = p[1] + else: + p[0] = BaseCallNode(p[1], p[3], *p[5]) + +def p_factor1(p): + '''factor : atom + | opar expr cpar''' + if len(p) == 2: + p[0] = p[1] + else: + p[0] = p[2] + +def p_factor2(p): + '''factor : factor dot func_call + | func_call''' + if len(p) == 2: + p[0] = StaticCallNode(*p[1]) + else: + p[0] = CallNode(p[1], *p[3]) + +def p_atom_num(p): + 'atom : num' + p[0] = ConstantNumNode(p[1]) + +def p_atom_id(p): + 'atom : id' + p[0] = VariableNode(p[1]) + +def p_atom_new(p): + 'atom : new id' + p[0] = InstantiateNode(p[2]) + +def p_atom_block(p): + 'atom : ocur block ccur' + p[0] = BlockNode(p[2]) + +def p_atom_boolean(p): + '''atom : true + | false''' + p[0] = ConstantBoolNode(p[1]) + +def p_atom_string(p): + 'atom : string' + p[0] = ConstantStrNode(p[1]) + +def p_block(p): + '''block : expr semi + | expr semi block''' + if len(p) == 3: + p[0] = [p[1]] + else: + p[0] = [p[1]] + p[3] + +def p_func_call(p): + 'func_call : id opar arg_list cpar' + p[0] = (p[1], p[3]) + +def p_arg_list(p): + '''arg_list : expr + | expr comma arg_list''' + if len(p) == 2: + p[0] = [p[1]] + else: + p[0] = [p[1]] + p[3] + +def p_arg_list_empty(p): + 'arg_list : epsilon' + p[0] = [] + + # Error rule for syntax errors +def p_error(p): + print("Syntax error in input!") diff --git a/src/coolc.sh b/src/coolc.sh index 3088de4f..9add51d3 100755 --- a/src/coolc.sh +++ b/src/coolc.sh @@ -1,11 +1,12 @@ -# Incluya aquí las instrucciones necesarias para ejecutar su compilador +# Incluye aqui las instrucciones necesarias para ejecutar su compilador INPUT_FILE=$1 -OUTPUT_FILE=${INPUT_FILE:0: -2}mips +OUTPUT_FILE=$INPUT_FILE +# OUTPUT_FILE=${INPUT_FILE:0:-2} -# Si su compilador no lo hace ya, aquí puede imprimir la información de contacto -echo "LINEA_CON_NOMBRE_Y_VERSION_DEL_COMPILADOR" # TODO: Recuerde cambiar estas -echo "Copyright (c) 2019: Nombre1, Nombre2, Nombre3" # TODO: líneas a los valores correctos +# Si su compilador no lo hace ya, aquí puede imprimir información de contacto +echo "LINEA_CON_NOMBRE_Y_VERSION_DEL_COMPILADOR" # TODO: Recuerde cambiar estas lineas +echo "Copyright (c) 2019: Loraine Monteagudo, Amanda Marrero, Manuel Fernandez" -# Llamar al compilador echo "Compiling $INPUT_FILE into $OUTPUT_FILE" +python main.py $INPUT_FILE $OUTPUT_FILE \ No newline at end of file diff --git a/src/lexer.py b/src/lexer.py index c599c80f..2336e8cf 100644 --- a/src/lexer.py +++ b/src/lexer.py @@ -1,106 +1,115 @@ -import ply.lex as lex -from tools.tokens import tokens, reserved, Token -from pprint import pprint -# from src.errors import LexicographicErrors - -# TODO: las palabras reservadas, excepto true y false son case insensitive -# TODO: Poner la regla para los strings de q no puede contener \n -# TODO: Arreglar los comentarios - -class CoolLexer: - def __init__(self, **kwargs): - self.reserved = reserved - self.tokens = tokens - self.errors = [] - self.lexer = lex.lex(module=self, **kwargs) - - # Regular expressions for simple tokens - t_ignore_COMMENT = r'--.* | \*(.)*\*' - # A string containing ignored characters - t_ignore = ' \t\f\r\t\v' - - t_def = r'def' - t_print = r'print' - t_semi = r';' - t_colon = r':' - t_comma = r',' - t_dot = r'\.' - t_opar = r'\(' - t_cpar = r'\)' - t_ocur = r'\{' - t_ccur = r'\}' - t_larrow = r'<-' - t_arroba = r'@' - t_rarrow = r'=>' - t_nox = r'~' - t_equal = r'=' - t_plus = r'\+' - t_of = r'of' - t_minus = r'-' - t_star = r'\*' - t_div = r'/' - t_less = r'<' - t_lesseq = r'<=' - t_inherits = r'inherits' - - # Check for reserved words: - def t_id(self, t): - r'[a-zA-Z_][a-zA-Z_0-9]*' - t.type = self.reserved.get(t.value.lower(), 'id') - return t - - # Get Numbers - def t_num(self, t): - r'\d+(\.\d+)? ' - t.value = float(t.value) - return t - - def t_string(self, t): - r'".*"' - #r'\"([^\\\n]|(\\.))*?\"' - t.value = t.value[1:-1] - return t - - # Define a rule so we can track line numbers - def t_newline(self, t): - r'\n+' - t.lexer.lineno += len(t.value) - - # Error handling rule - def t_error(self, t): - self.errors.append(LexicographicError(LexicographicError.UNKNOWN_TOKEN % t.value)) - t.lexer.skip(len(t.value)) - - - def find_column(self, token): - line_start = self.lexer.lexdata.rfind('\n', 0, token.lexpos) + 1 - return (token.lexpos - line_start) + 1 - - def tokenize_text(self, text): - self.lexer.input(data) - tokens = [] - for tok in self.lexer: - tokens.append(Token(tok.type, tok.value, tok.lineno, self.find_column(tok))) - return tokens - - -if __name__ == "__main__": - m = CoolLexer() - - data = ''' - CLASS Cons inherits List { - xcar : Int; - xcdr : List; - isNil() : Bool { false }; - init(hd : Int, tl : List) : Cons { - { - xcar <- hd; - xcdr <- 2; - self; - p . translate ( 1 , 1 ) ; - } - } - ''' - - res = m.tokenize_text(data) - pprint(res) +import ply.lex as lex +from tools.tokens import tokens, reserved, Token +from pprint import pprint +from tools.errors import LexicographicError + +class CoolLexer: + def __init__(self, **kwargs): + # TODO: las palabras reservadas, excepto true y false son case insensitive + self.reserved = reserved + self.tokens = tokens + self.errors = [] + self.lexer = lex.lex(module=self, **kwargs) + + # Regular expressions for simple tokens + # t_ignore_COMMENT = r'--.* | \*(.)*\*' + # A string containing ignored characters + t_ignore = ' \t\f\r\t\v' + + t_def = r'def' + t_print = r'print' + t_semi = r';' + t_colon = r':' + t_comma = r',' + t_dot = r'\.' + t_opar = r'\(' + t_cpar = r'\)' + t_ocur = r'\{' + t_ccur = r'\}' + t_larrow = r'<-' + t_arroba = r'@' + t_rarrow = r'=>' + t_nox = r'~' + t_equal = r'=' + t_plus = r'\+' + t_of = r'of' + t_minus = r'-' + t_star = r'\*' + t_div = r'/' + t_less = r'<' + t_lesseq = r'<=' + t_inherits = r'inherits' + + # Check for reserved words: + def t_id(self, t): + r'[a-zA-Z_][a-zA-Z_0-9]*' + t.type = self.reserved.get(t.value.lower(), 'id') + return t + + # Get Numbers + def t_num(self, t): + r'\d+(\.\d+)? ' + t.value = float(t.value) + return t + + # TODO: Los strings no pueden contener \n, \0, strings anidados, eof en strings + def t_string(self, t): + r'".*"' + t.value = t.value[1:-1] + return t + + # TODO: Comentarios anidados, eof en los comentarios + def t_comment(self, t): + r'--.* | \*(.)*\*' + pass + + # Define a rule so we can track line numbers + def t_newline(self, t): + r'\n+' + t.lexer.lineno += len(t.value) + + # Error handling rule + def t_error(self, t): + error_text = LexicographicError.UNKNOWN_TOKEN % t.value + line = t.lineno + column = self.find_column(t) + + self.errors.append(LexicographicError(error_text, line, column)) + t.lexer.skip(len(t.value)) + + + def find_column(self, token): + line_start = self.lexer.lexdata.rfind('\n', 0, token.lexpos) + 1 + return (token.lexpos - line_start) + 1 + + + def tokenize_text(self, text): + self.lexer.input(text) + tokens = [] + for tok in self.lexer: + tokens.append(Token(tok.type, tok.value, tok.lineno, self.find_column(tok))) + return tokens + + +if __name__ == "__main__": + lexer = CoolLexer() + + data = ''' + CLASS Cons inherits List { + xcar : Int; + xcdr : List; + isNil() : Bool { false }; + init(hd : Int, tl : List) : Cons { + { + xcar <- hd; + xcdr <- 2; + "" testing "" + ** testing ** + self; + p . translate ( 1 , 1 ) ; + } + } + ''' + + res = lexer.tokenize_text(data) + pprint(res) diff --git a/src/main.py b/src/main.py new file mode 100644 index 00000000..abd55821 --- /dev/null +++ b/src/main.py @@ -0,0 +1,30 @@ +import argparse +from pprint import pprint +from lexer import CoolLexer +from parser import CoolParser + +arg_parser = argparse.ArgumentParser() +arg_parser.add_argument('input') +arg_parser.add_argument('output') +args = arg_parser.parse_args() + +input_ = args.input +output_ = args.output + +# input_ = './tests/lexer/test3.cl' + +try: + with open(input_) as f: + data = f.read() + + lexer = CoolLexer() + # lexer.tokenize_text(data) + + parser = CoolParser(lexer) + ast = parser.parse(data) + print(lexer.errors) + print(ast) + +except FileNotFoundError: + print(f'No se pude encontrar el fichero {input_}') + \ No newline at end of file diff --git a/src/makefile b/src/makefile index 021189d6..0a8f5154 100644 --- a/src/makefile +++ b/src/makefile @@ -1,11 +1,12 @@ -.PHONY: clean - -main: - # Compiling the compiler :) - -clean: - rm -rf build/* - -test: - pytest ../tests -v --tb=short -m=${TAG} - +.PHONY: clean + +main: + # Compiling the compiler :) + +clean: + rm -rf build/* + +test: + pytest ../tests -v --tb=short -m=${TAG} + + \ No newline at end of file diff --git a/src/parsetab.py b/src/output_parser/parsetab.py similarity index 89% rename from src/parsetab.py rename to src/output_parser/parsetab.py index b9893ba4..ca78b2f9 100644 --- a/src/parsetab.py +++ b/src/output_parser/parsetab.py @@ -27,66 +27,66 @@ del _lr_goto_items _lr_productions = [ ("S' -> program","S'",1,None,None,None), - ('program -> class_list','program',1,'p_program','cool_grammar.py',10), - ('epsilon -> ','epsilon',0,'p_epsilon','cool_grammar.py',14), - ('class_list -> def_class class_list','class_list',2,'p_class_list','cool_grammar.py',18), - ('class_list -> def_class','class_list',1,'p_class_list','cool_grammar.py',19), - ('def_class -> class id ocur feature_list ccur semi','def_class',6,'p_def_class','cool_grammar.py',26), - ('def_class -> class id inherits id ocur feature_list ccur semi','def_class',8,'p_def_class','cool_grammar.py',27), - ('feature_list -> epsilon','feature_list',1,'p_feature_list','cool_grammar.py',34), - ('feature_list -> def_attr semi feature_list','feature_list',3,'p_feature_list','cool_grammar.py',35), - ('feature_list -> def_func semi feature_list','feature_list',3,'p_feature_list','cool_grammar.py',36), - ('def_attr -> id colon id','def_attr',3,'p_def_attr','cool_grammar.py',48), - ('def_attr -> id colon id larrow expr','def_attr',5,'p_def_attr','cool_grammar.py',49), - ('def_func -> id opar param_list cpar colon id ocur expr ccur','def_func',9,'p_def_func','cool_grammar.py',56), - ('param_list -> param','param_list',1,'p_param_list','cool_grammar.py',60), - ('param_list -> param comma param_list','param_list',3,'p_param_list','cool_grammar.py',61), - ('param_list -> epsilon','param_list',1,'p_param_list_empty','cool_grammar.py',68), - ('param -> id colon id','param',3,'p_param','cool_grammar.py',72), - ('expr -> let let_list in expr','expr',4,'p_expr_let','cool_grammar.py',76), - ('expr -> case expr of cases_list esac','expr',5,'p_expr_case','cool_grammar.py',80), - ('expr -> if expr then expr else expr fi','expr',7,'p_expr_if','cool_grammar.py',84), - ('expr -> while expr loop expr pool','expr',5,'p_expr_while','cool_grammar.py',88), - ('expr -> arith','expr',1,'p_expr_arith','cool_grammar.py',92), - ('let_list -> let_assign','let_list',1,'p_let_list','cool_grammar.py',97), - ('let_list -> let_assign comma let_list','let_list',3,'p_let_list','cool_grammar.py',98), - ('let_assign -> param larrow expr','let_assign',3,'p_let_assign','cool_grammar.py',105), - ('let_assign -> param','let_assign',1,'p_let_assign','cool_grammar.py',106), - ('cases_list -> casep semi','cases_list',2,'p_cases_list','cool_grammar.py',114), - ('cases_list -> casep semi cases_list','cases_list',3,'p_cases_list','cool_grammar.py',115), - ('casep -> id colon id rarrow expr','casep',5,'p_case','cool_grammar.py',122), - ('arith -> id larrow expr','arith',3,'p_arith','cool_grammar.py',127), - ('arith -> not comp','arith',2,'p_arith','cool_grammar.py',128), - ('arith -> comp','arith',1,'p_arith','cool_grammar.py',129), - ('comp -> comp less op','comp',3,'p_comp','cool_grammar.py',139), - ('comp -> comp lesseq op','comp',3,'p_comp','cool_grammar.py',140), - ('comp -> comp equal op','comp',3,'p_comp','cool_grammar.py',141), - ('comp -> op','comp',1,'p_comp','cool_grammar.py',142), - ('op -> op plus term','op',3,'p_op','cool_grammar.py',154), - ('op -> op minus term','op',3,'p_op','cool_grammar.py',155), - ('op -> term','op',1,'p_op','cool_grammar.py',156), - ('term -> term star base_call','term',3,'p_term','cool_grammar.py',165), - ('term -> term div base_call','term',3,'p_term','cool_grammar.py',166), - ('term -> isvoid base_call','term',2,'p_term','cool_grammar.py',167), - ('term -> nox base_call','term',2,'p_term','cool_grammar.py',168), - ('term -> base_call','term',1,'p_term','cool_grammar.py',169), - ('base_call -> factor arroba id dot func_call','base_call',5,'p_base_call','cool_grammar.py',182), - ('base_call -> factor','base_call',1,'p_base_call','cool_grammar.py',183), - ('factor -> atom','factor',1,'p_factor1','cool_grammar.py',190), - ('factor -> opar expr cpar','factor',3,'p_factor1','cool_grammar.py',191), - ('factor -> factor dot func_call','factor',3,'p_factor2','cool_grammar.py',198), - ('factor -> func_call','factor',1,'p_factor2','cool_grammar.py',199), - ('atom -> num','atom',1,'p_atom_num','cool_grammar.py',206), - ('atom -> id','atom',1,'p_atom_id','cool_grammar.py',210), - ('atom -> new id','atom',2,'p_atom_new','cool_grammar.py',214), - ('atom -> ocur block ccur','atom',3,'p_atom_block','cool_grammar.py',218), - ('atom -> true','atom',1,'p_atom_boolean','cool_grammar.py',222), - ('atom -> false','atom',1,'p_atom_boolean','cool_grammar.py',223), - ('atom -> string','atom',1,'p_atom_string','cool_grammar.py',227), - ('block -> expr semi','block',2,'p_block','cool_grammar.py',231), - ('block -> expr semi block','block',3,'p_block','cool_grammar.py',232), - ('func_call -> id opar arg_list cpar','func_call',4,'p_func_call','cool_grammar.py',239), - ('arg_list -> expr','arg_list',1,'p_arg_list','cool_grammar.py',243), - ('arg_list -> expr comma arg_list','arg_list',3,'p_arg_list','cool_grammar.py',244), - ('arg_list -> epsilon','arg_list',1,'p_arg_list_empty','cool_grammar.py',251), + ('program -> class_list','program',1,'p_program','cool_grammar.py',7), + ('epsilon -> ','epsilon',0,'p_epsilon','cool_grammar.py',11), + ('class_list -> def_class class_list','class_list',2,'p_class_list','cool_grammar.py',15), + ('class_list -> def_class','class_list',1,'p_class_list','cool_grammar.py',16), + ('def_class -> class id ocur feature_list ccur semi','def_class',6,'p_def_class','cool_grammar.py',23), + ('def_class -> class id inherits id ocur feature_list ccur semi','def_class',8,'p_def_class','cool_grammar.py',24), + ('feature_list -> epsilon','feature_list',1,'p_feature_list','cool_grammar.py',32), + ('feature_list -> def_attr semi feature_list','feature_list',3,'p_feature_list','cool_grammar.py',33), + ('feature_list -> def_func semi feature_list','feature_list',3,'p_feature_list','cool_grammar.py',34), + ('def_attr -> id colon id','def_attr',3,'p_def_attr','cool_grammar.py',42), + ('def_attr -> id colon id larrow expr','def_attr',5,'p_def_attr','cool_grammar.py',43), + ('def_func -> id opar param_list cpar colon id ocur expr ccur','def_func',9,'p_def_func','cool_grammar.py',50), + ('param_list -> param','param_list',1,'p_param_list','cool_grammar.py',54), + ('param_list -> param comma param_list','param_list',3,'p_param_list','cool_grammar.py',55), + ('param_list -> epsilon','param_list',1,'p_param_list_empty','cool_grammar.py',62), + ('param -> id colon id','param',3,'p_param','cool_grammar.py',66), + ('expr -> let let_list in expr','expr',4,'p_expr_let','cool_grammar.py',70), + ('expr -> case expr of cases_list esac','expr',5,'p_expr_case','cool_grammar.py',74), + ('expr -> if expr then expr else expr fi','expr',7,'p_expr_if','cool_grammar.py',78), + ('expr -> while expr loop expr pool','expr',5,'p_expr_while','cool_grammar.py',82), + ('expr -> arith','expr',1,'p_expr_arith','cool_grammar.py',86), + ('let_list -> let_assign','let_list',1,'p_let_list','cool_grammar.py',91), + ('let_list -> let_assign comma let_list','let_list',3,'p_let_list','cool_grammar.py',92), + ('let_assign -> param larrow expr','let_assign',3,'p_let_assign','cool_grammar.py',99), + ('let_assign -> param','let_assign',1,'p_let_assign','cool_grammar.py',100), + ('cases_list -> casep semi','cases_list',2,'p_cases_list','cool_grammar.py',108), + ('cases_list -> casep semi cases_list','cases_list',3,'p_cases_list','cool_grammar.py',109), + ('casep -> id colon id rarrow expr','casep',5,'p_case','cool_grammar.py',116), + ('arith -> id larrow expr','arith',3,'p_arith','cool_grammar.py',121), + ('arith -> not comp','arith',2,'p_arith','cool_grammar.py',122), + ('arith -> comp','arith',1,'p_arith','cool_grammar.py',123), + ('comp -> comp less op','comp',3,'p_comp','cool_grammar.py',133), + ('comp -> comp lesseq op','comp',3,'p_comp','cool_grammar.py',134), + ('comp -> comp equal op','comp',3,'p_comp','cool_grammar.py',135), + ('comp -> op','comp',1,'p_comp','cool_grammar.py',136), + ('op -> op plus term','op',3,'p_op','cool_grammar.py',148), + ('op -> op minus term','op',3,'p_op','cool_grammar.py',149), + ('op -> term','op',1,'p_op','cool_grammar.py',150), + ('term -> term star base_call','term',3,'p_term','cool_grammar.py',159), + ('term -> term div base_call','term',3,'p_term','cool_grammar.py',160), + ('term -> isvoid base_call','term',2,'p_term','cool_grammar.py',161), + ('term -> nox base_call','term',2,'p_term','cool_grammar.py',162), + ('term -> base_call','term',1,'p_term','cool_grammar.py',163), + ('base_call -> factor arroba id dot func_call','base_call',5,'p_base_call','cool_grammar.py',176), + ('base_call -> factor','base_call',1,'p_base_call','cool_grammar.py',177), + ('factor -> atom','factor',1,'p_factor1','cool_grammar.py',184), + ('factor -> opar expr cpar','factor',3,'p_factor1','cool_grammar.py',185), + ('factor -> factor dot func_call','factor',3,'p_factor2','cool_grammar.py',192), + ('factor -> func_call','factor',1,'p_factor2','cool_grammar.py',193), + ('atom -> num','atom',1,'p_atom_num','cool_grammar.py',200), + ('atom -> id','atom',1,'p_atom_id','cool_grammar.py',204), + ('atom -> new id','atom',2,'p_atom_new','cool_grammar.py',208), + ('atom -> ocur block ccur','atom',3,'p_atom_block','cool_grammar.py',212), + ('atom -> true','atom',1,'p_atom_boolean','cool_grammar.py',216), + ('atom -> false','atom',1,'p_atom_boolean','cool_grammar.py',217), + ('atom -> string','atom',1,'p_atom_string','cool_grammar.py',221), + ('block -> expr semi','block',2,'p_block','cool_grammar.py',225), + ('block -> expr semi block','block',3,'p_block','cool_grammar.py',226), + ('func_call -> id opar arg_list cpar','func_call',4,'p_func_call','cool_grammar.py',233), + ('arg_list -> expr','arg_list',1,'p_arg_list','cool_grammar.py',237), + ('arg_list -> expr comma arg_list','arg_list',3,'p_arg_list','cool_grammar.py',238), + ('arg_list -> epsilon','arg_list',1,'p_arg_list_empty','cool_grammar.py',245), ] diff --git a/src/parser.out b/src/parser.out deleted file mode 100644 index 90540836..00000000 --- a/src/parser.out +++ /dev/null @@ -1,3170 +0,0 @@ -Created by PLY version 3.11 (http://www.dabeaz.com/ply) - -Unused terminals: - - def - print - -Grammar - -Rule 0 S' -> program -Rule 1 program -> class_list -Rule 2 epsilon -> -Rule 3 class_list -> def_class class_list -Rule 4 class_list -> def_class -Rule 5 def_class -> class id ocur feature_list ccur semi -Rule 6 def_class -> class id inherits id ocur feature_list ccur semi -Rule 7 feature_list -> epsilon -Rule 8 feature_list -> def_attr semi feature_list -Rule 9 feature_list -> def_func semi feature_list -Rule 10 def_attr -> id colon id -Rule 11 def_attr -> id colon id larrow expr -Rule 12 def_func -> id opar param_list cpar colon id ocur expr ccur -Rule 13 param_list -> param -Rule 14 param_list -> param comma param_list -Rule 15 param_list -> epsilon -Rule 16 param -> id colon id -Rule 17 expr -> let let_list in expr -Rule 18 expr -> case expr of cases_list esac -Rule 19 expr -> if expr then expr else expr fi -Rule 20 expr -> while expr loop expr pool -Rule 21 expr -> arith -Rule 22 let_list -> let_assign -Rule 23 let_list -> let_assign comma let_list -Rule 24 let_assign -> param larrow expr -Rule 25 let_assign -> param -Rule 26 cases_list -> casep semi -Rule 27 cases_list -> casep semi cases_list -Rule 28 casep -> id colon id rarrow expr -Rule 29 arith -> id larrow expr -Rule 30 arith -> not comp -Rule 31 arith -> comp -Rule 32 comp -> comp less op -Rule 33 comp -> comp lesseq op -Rule 34 comp -> comp equal op -Rule 35 comp -> op -Rule 36 op -> op plus term -Rule 37 op -> op minus term -Rule 38 op -> term -Rule 39 term -> term star base_call -Rule 40 term -> term div base_call -Rule 41 term -> isvoid base_call -Rule 42 term -> nox base_call -Rule 43 term -> base_call -Rule 44 base_call -> factor arroba id dot func_call -Rule 45 base_call -> factor -Rule 46 factor -> atom -Rule 47 factor -> opar expr cpar -Rule 48 factor -> factor dot func_call -Rule 49 factor -> func_call -Rule 50 atom -> num -Rule 51 atom -> id -Rule 52 atom -> new id -Rule 53 atom -> ocur block ccur -Rule 54 atom -> true -Rule 55 atom -> false -Rule 56 atom -> string -Rule 57 block -> expr semi -Rule 58 block -> expr semi block -Rule 59 func_call -> id opar arg_list cpar -Rule 60 arg_list -> expr -Rule 61 arg_list -> expr comma arg_list -Rule 62 arg_list -> epsilon - -Terminals, with rules where they appear - -arroba : 44 -case : 18 -ccur : 5 6 12 53 -class : 5 6 -colon : 10 11 12 16 28 -comma : 14 23 61 -cpar : 12 47 59 -def : -div : 40 -dot : 44 48 -else : 19 -equal : 34 -error : -esac : 18 -false : 55 -fi : 19 -id : 5 6 6 10 10 11 11 12 12 16 16 28 28 29 44 51 52 59 -if : 19 -in : 17 -inherits : 6 -isvoid : 41 -larrow : 11 24 29 -less : 32 -lesseq : 33 -let : 17 -loop : 20 -minus : 37 -new : 52 -not : 30 -nox : 42 -num : 50 -ocur : 5 6 12 53 -of : 18 -opar : 12 47 59 -plus : 36 -pool : 20 -print : -rarrow : 28 -semi : 5 6 8 9 26 27 57 58 -star : 39 -string : 56 -then : 19 -true : 54 -while : 20 - -Nonterminals, with rules where they appear - -arg_list : 59 61 -arith : 21 -atom : 46 -base_call : 39 40 41 42 43 -block : 53 58 -casep : 26 27 -cases_list : 18 27 -class_list : 1 3 -comp : 30 31 32 33 34 -def_attr : 8 -def_class : 3 4 -def_func : 9 -epsilon : 7 15 62 -expr : 11 12 17 18 19 19 19 20 20 24 28 29 47 57 58 60 61 -factor : 44 45 48 -feature_list : 5 6 8 9 -func_call : 44 48 49 -let_assign : 22 23 -let_list : 17 23 -op : 32 33 34 35 36 37 -param : 13 14 24 25 -param_list : 12 14 -program : 0 -term : 36 37 38 39 40 - -Parsing method: LALR - -state 0 - - (0) S' -> . program - (1) program -> . class_list - (3) class_list -> . def_class class_list - (4) class_list -> . def_class - (5) def_class -> . class id ocur feature_list ccur semi - (6) def_class -> . class id inherits id ocur feature_list ccur semi - - class shift and go to state 4 - - program shift and go to state 1 - class_list shift and go to state 2 - def_class shift and go to state 3 - -state 1 - - (0) S' -> program . - - - -state 2 - - (1) program -> class_list . - - $end reduce using rule 1 (program -> class_list .) - - -state 3 - - (3) class_list -> def_class . class_list - (4) class_list -> def_class . - (3) class_list -> . def_class class_list - (4) class_list -> . def_class - (5) def_class -> . class id ocur feature_list ccur semi - (6) def_class -> . class id inherits id ocur feature_list ccur semi - - $end reduce using rule 4 (class_list -> def_class .) - class shift and go to state 4 - - def_class shift and go to state 3 - class_list shift and go to state 5 - -state 4 - - (5) def_class -> class . id ocur feature_list ccur semi - (6) def_class -> class . id inherits id ocur feature_list ccur semi - - id shift and go to state 6 - - -state 5 - - (3) class_list -> def_class class_list . - - $end reduce using rule 3 (class_list -> def_class class_list .) - - -state 6 - - (5) def_class -> class id . ocur feature_list ccur semi - (6) def_class -> class id . inherits id ocur feature_list ccur semi - - ocur shift and go to state 7 - inherits shift and go to state 8 - - -state 7 - - (5) def_class -> class id ocur . feature_list ccur semi - (7) feature_list -> . epsilon - (8) feature_list -> . def_attr semi feature_list - (9) feature_list -> . def_func semi feature_list - (2) epsilon -> . - (10) def_attr -> . id colon id - (11) def_attr -> . id colon id larrow expr - (12) def_func -> . id opar param_list cpar colon id ocur expr ccur - - ccur reduce using rule 2 (epsilon -> .) - id shift and go to state 9 - - feature_list shift and go to state 10 - epsilon shift and go to state 11 - def_attr shift and go to state 12 - def_func shift and go to state 13 - -state 8 - - (6) def_class -> class id inherits . id ocur feature_list ccur semi - - id shift and go to state 14 - - -state 9 - - (10) def_attr -> id . colon id - (11) def_attr -> id . colon id larrow expr - (12) def_func -> id . opar param_list cpar colon id ocur expr ccur - - colon shift and go to state 15 - opar shift and go to state 16 - - -state 10 - - (5) def_class -> class id ocur feature_list . ccur semi - - ccur shift and go to state 17 - - -state 11 - - (7) feature_list -> epsilon . - - ccur reduce using rule 7 (feature_list -> epsilon .) - - -state 12 - - (8) feature_list -> def_attr . semi feature_list - - semi shift and go to state 18 - - -state 13 - - (9) feature_list -> def_func . semi feature_list - - semi shift and go to state 19 - - -state 14 - - (6) def_class -> class id inherits id . ocur feature_list ccur semi - - ocur shift and go to state 20 - - -state 15 - - (10) def_attr -> id colon . id - (11) def_attr -> id colon . id larrow expr - - id shift and go to state 21 - - -state 16 - - (12) def_func -> id opar . param_list cpar colon id ocur expr ccur - (13) param_list -> . param - (14) param_list -> . param comma param_list - (15) param_list -> . epsilon - (16) param -> . id colon id - (2) epsilon -> . - - id shift and go to state 22 - cpar reduce using rule 2 (epsilon -> .) - - param_list shift and go to state 23 - param shift and go to state 24 - epsilon shift and go to state 25 - -state 17 - - (5) def_class -> class id ocur feature_list ccur . semi - - semi shift and go to state 26 - - -state 18 - - (8) feature_list -> def_attr semi . feature_list - (7) feature_list -> . epsilon - (8) feature_list -> . def_attr semi feature_list - (9) feature_list -> . def_func semi feature_list - (2) epsilon -> . - (10) def_attr -> . id colon id - (11) def_attr -> . id colon id larrow expr - (12) def_func -> . id opar param_list cpar colon id ocur expr ccur - - ccur reduce using rule 2 (epsilon -> .) - id shift and go to state 9 - - def_attr shift and go to state 12 - feature_list shift and go to state 27 - epsilon shift and go to state 11 - def_func shift and go to state 13 - -state 19 - - (9) feature_list -> def_func semi . feature_list - (7) feature_list -> . epsilon - (8) feature_list -> . def_attr semi feature_list - (9) feature_list -> . def_func semi feature_list - (2) epsilon -> . - (10) def_attr -> . id colon id - (11) def_attr -> . id colon id larrow expr - (12) def_func -> . id opar param_list cpar colon id ocur expr ccur - - ccur reduce using rule 2 (epsilon -> .) - id shift and go to state 9 - - def_func shift and go to state 13 - feature_list shift and go to state 28 - epsilon shift and go to state 11 - def_attr shift and go to state 12 - -state 20 - - (6) def_class -> class id inherits id ocur . feature_list ccur semi - (7) feature_list -> . epsilon - (8) feature_list -> . def_attr semi feature_list - (9) feature_list -> . def_func semi feature_list - (2) epsilon -> . - (10) def_attr -> . id colon id - (11) def_attr -> . id colon id larrow expr - (12) def_func -> . id opar param_list cpar colon id ocur expr ccur - - ccur reduce using rule 2 (epsilon -> .) - id shift and go to state 9 - - feature_list shift and go to state 29 - epsilon shift and go to state 11 - def_attr shift and go to state 12 - def_func shift and go to state 13 - -state 21 - - (10) def_attr -> id colon id . - (11) def_attr -> id colon id . larrow expr - - semi reduce using rule 10 (def_attr -> id colon id .) - larrow shift and go to state 30 - - -state 22 - - (16) param -> id . colon id - - colon shift and go to state 31 - - -state 23 - - (12) def_func -> id opar param_list . cpar colon id ocur expr ccur - - cpar shift and go to state 32 - - -state 24 - - (13) param_list -> param . - (14) param_list -> param . comma param_list - - cpar reduce using rule 13 (param_list -> param .) - comma shift and go to state 33 - - -state 25 - - (15) param_list -> epsilon . - - cpar reduce using rule 15 (param_list -> epsilon .) - - -state 26 - - (5) def_class -> class id ocur feature_list ccur semi . - - class reduce using rule 5 (def_class -> class id ocur feature_list ccur semi .) - $end reduce using rule 5 (def_class -> class id ocur feature_list ccur semi .) - - -state 27 - - (8) feature_list -> def_attr semi feature_list . - - ccur reduce using rule 8 (feature_list -> def_attr semi feature_list .) - - -state 28 - - (9) feature_list -> def_func semi feature_list . - - ccur reduce using rule 9 (feature_list -> def_func semi feature_list .) - - -state 29 - - (6) def_class -> class id inherits id ocur feature_list . ccur semi - - ccur shift and go to state 34 - - -state 30 - - (11) def_attr -> id colon id larrow . expr - (17) expr -> . let let_list in expr - (18) expr -> . case expr of cases_list esac - (19) expr -> . if expr then expr else expr fi - (20) expr -> . while expr loop expr pool - (21) expr -> . arith - (29) arith -> . id larrow expr - (30) arith -> . not comp - (31) arith -> . comp - (32) comp -> . comp less op - (33) comp -> . comp lesseq op - (34) comp -> . comp equal op - (35) comp -> . op - (36) op -> . op plus term - (37) op -> . op minus term - (38) op -> . term - (39) term -> . term star base_call - (40) term -> . term div base_call - (41) term -> . isvoid base_call - (42) term -> . nox base_call - (43) term -> . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - let shift and go to state 37 - case shift and go to state 38 - if shift and go to state 39 - while shift and go to state 40 - id shift and go to state 35 - not shift and go to state 42 - isvoid shift and go to state 47 - nox shift and go to state 48 - opar shift and go to state 52 - num shift and go to state 53 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - expr shift and go to state 36 - arith shift and go to state 41 - comp shift and go to state 43 - op shift and go to state 44 - term shift and go to state 45 - base_call shift and go to state 46 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 31 - - (16) param -> id colon . id - - id shift and go to state 59 - - -state 32 - - (12) def_func -> id opar param_list cpar . colon id ocur expr ccur - - colon shift and go to state 60 - - -state 33 - - (14) param_list -> param comma . param_list - (13) param_list -> . param - (14) param_list -> . param comma param_list - (15) param_list -> . epsilon - (16) param -> . id colon id - (2) epsilon -> . - - id shift and go to state 22 - cpar reduce using rule 2 (epsilon -> .) - - param shift and go to state 24 - param_list shift and go to state 61 - epsilon shift and go to state 25 - -state 34 - - (6) def_class -> class id inherits id ocur feature_list ccur . semi - - semi shift and go to state 62 - - -state 35 - - (29) arith -> id . larrow expr - (51) atom -> id . - (59) func_call -> id . opar arg_list cpar - - larrow shift and go to state 63 - arroba reduce using rule 51 (atom -> id .) - dot reduce using rule 51 (atom -> id .) - star reduce using rule 51 (atom -> id .) - div reduce using rule 51 (atom -> id .) - plus reduce using rule 51 (atom -> id .) - minus reduce using rule 51 (atom -> id .) - less reduce using rule 51 (atom -> id .) - lesseq reduce using rule 51 (atom -> id .) - equal reduce using rule 51 (atom -> id .) - semi reduce using rule 51 (atom -> id .) - of reduce using rule 51 (atom -> id .) - then reduce using rule 51 (atom -> id .) - loop reduce using rule 51 (atom -> id .) - cpar reduce using rule 51 (atom -> id .) - comma reduce using rule 51 (atom -> id .) - in reduce using rule 51 (atom -> id .) - else reduce using rule 51 (atom -> id .) - pool reduce using rule 51 (atom -> id .) - ccur reduce using rule 51 (atom -> id .) - fi reduce using rule 51 (atom -> id .) - opar shift and go to state 64 - - -state 36 - - (11) def_attr -> id colon id larrow expr . - - semi reduce using rule 11 (def_attr -> id colon id larrow expr .) - - -state 37 - - (17) expr -> let . let_list in expr - (22) let_list -> . let_assign - (23) let_list -> . let_assign comma let_list - (24) let_assign -> . param larrow expr - (25) let_assign -> . param - (16) param -> . id colon id - - id shift and go to state 22 - - let_list shift and go to state 65 - let_assign shift and go to state 66 - param shift and go to state 67 - -state 38 - - (18) expr -> case . expr of cases_list esac - (17) expr -> . let let_list in expr - (18) expr -> . case expr of cases_list esac - (19) expr -> . if expr then expr else expr fi - (20) expr -> . while expr loop expr pool - (21) expr -> . arith - (29) arith -> . id larrow expr - (30) arith -> . not comp - (31) arith -> . comp - (32) comp -> . comp less op - (33) comp -> . comp lesseq op - (34) comp -> . comp equal op - (35) comp -> . op - (36) op -> . op plus term - (37) op -> . op minus term - (38) op -> . term - (39) term -> . term star base_call - (40) term -> . term div base_call - (41) term -> . isvoid base_call - (42) term -> . nox base_call - (43) term -> . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - let shift and go to state 37 - case shift and go to state 38 - if shift and go to state 39 - while shift and go to state 40 - id shift and go to state 35 - not shift and go to state 42 - isvoid shift and go to state 47 - nox shift and go to state 48 - opar shift and go to state 52 - num shift and go to state 53 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - expr shift and go to state 68 - arith shift and go to state 41 - comp shift and go to state 43 - op shift and go to state 44 - term shift and go to state 45 - base_call shift and go to state 46 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 39 - - (19) expr -> if . expr then expr else expr fi - (17) expr -> . let let_list in expr - (18) expr -> . case expr of cases_list esac - (19) expr -> . if expr then expr else expr fi - (20) expr -> . while expr loop expr pool - (21) expr -> . arith - (29) arith -> . id larrow expr - (30) arith -> . not comp - (31) arith -> . comp - (32) comp -> . comp less op - (33) comp -> . comp lesseq op - (34) comp -> . comp equal op - (35) comp -> . op - (36) op -> . op plus term - (37) op -> . op minus term - (38) op -> . term - (39) term -> . term star base_call - (40) term -> . term div base_call - (41) term -> . isvoid base_call - (42) term -> . nox base_call - (43) term -> . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - let shift and go to state 37 - case shift and go to state 38 - if shift and go to state 39 - while shift and go to state 40 - id shift and go to state 35 - not shift and go to state 42 - isvoid shift and go to state 47 - nox shift and go to state 48 - opar shift and go to state 52 - num shift and go to state 53 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - expr shift and go to state 69 - arith shift and go to state 41 - comp shift and go to state 43 - op shift and go to state 44 - term shift and go to state 45 - base_call shift and go to state 46 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 40 - - (20) expr -> while . expr loop expr pool - (17) expr -> . let let_list in expr - (18) expr -> . case expr of cases_list esac - (19) expr -> . if expr then expr else expr fi - (20) expr -> . while expr loop expr pool - (21) expr -> . arith - (29) arith -> . id larrow expr - (30) arith -> . not comp - (31) arith -> . comp - (32) comp -> . comp less op - (33) comp -> . comp lesseq op - (34) comp -> . comp equal op - (35) comp -> . op - (36) op -> . op plus term - (37) op -> . op minus term - (38) op -> . term - (39) term -> . term star base_call - (40) term -> . term div base_call - (41) term -> . isvoid base_call - (42) term -> . nox base_call - (43) term -> . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - let shift and go to state 37 - case shift and go to state 38 - if shift and go to state 39 - while shift and go to state 40 - id shift and go to state 35 - not shift and go to state 42 - isvoid shift and go to state 47 - nox shift and go to state 48 - opar shift and go to state 52 - num shift and go to state 53 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - expr shift and go to state 70 - arith shift and go to state 41 - comp shift and go to state 43 - op shift and go to state 44 - term shift and go to state 45 - base_call shift and go to state 46 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 41 - - (21) expr -> arith . - - semi reduce using rule 21 (expr -> arith .) - of reduce using rule 21 (expr -> arith .) - then reduce using rule 21 (expr -> arith .) - loop reduce using rule 21 (expr -> arith .) - cpar reduce using rule 21 (expr -> arith .) - comma reduce using rule 21 (expr -> arith .) - in reduce using rule 21 (expr -> arith .) - else reduce using rule 21 (expr -> arith .) - pool reduce using rule 21 (expr -> arith .) - ccur reduce using rule 21 (expr -> arith .) - fi reduce using rule 21 (expr -> arith .) - - -state 42 - - (30) arith -> not . comp - (32) comp -> . comp less op - (33) comp -> . comp lesseq op - (34) comp -> . comp equal op - (35) comp -> . op - (36) op -> . op plus term - (37) op -> . op minus term - (38) op -> . term - (39) term -> . term star base_call - (40) term -> . term div base_call - (41) term -> . isvoid base_call - (42) term -> . nox base_call - (43) term -> . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - isvoid shift and go to state 47 - nox shift and go to state 48 - opar shift and go to state 52 - num shift and go to state 53 - id shift and go to state 72 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - comp shift and go to state 71 - op shift and go to state 44 - term shift and go to state 45 - base_call shift and go to state 46 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 43 - - (31) arith -> comp . - (32) comp -> comp . less op - (33) comp -> comp . lesseq op - (34) comp -> comp . equal op - - semi reduce using rule 31 (arith -> comp .) - of reduce using rule 31 (arith -> comp .) - then reduce using rule 31 (arith -> comp .) - loop reduce using rule 31 (arith -> comp .) - cpar reduce using rule 31 (arith -> comp .) - comma reduce using rule 31 (arith -> comp .) - in reduce using rule 31 (arith -> comp .) - else reduce using rule 31 (arith -> comp .) - pool reduce using rule 31 (arith -> comp .) - ccur reduce using rule 31 (arith -> comp .) - fi reduce using rule 31 (arith -> comp .) - less shift and go to state 73 - lesseq shift and go to state 74 - equal shift and go to state 75 - - -state 44 - - (35) comp -> op . - (36) op -> op . plus term - (37) op -> op . minus term - - less reduce using rule 35 (comp -> op .) - lesseq reduce using rule 35 (comp -> op .) - equal reduce using rule 35 (comp -> op .) - semi reduce using rule 35 (comp -> op .) - of reduce using rule 35 (comp -> op .) - then reduce using rule 35 (comp -> op .) - loop reduce using rule 35 (comp -> op .) - cpar reduce using rule 35 (comp -> op .) - comma reduce using rule 35 (comp -> op .) - in reduce using rule 35 (comp -> op .) - else reduce using rule 35 (comp -> op .) - pool reduce using rule 35 (comp -> op .) - ccur reduce using rule 35 (comp -> op .) - fi reduce using rule 35 (comp -> op .) - plus shift and go to state 76 - minus shift and go to state 77 - - -state 45 - - (38) op -> term . - (39) term -> term . star base_call - (40) term -> term . div base_call - - plus reduce using rule 38 (op -> term .) - minus reduce using rule 38 (op -> term .) - less reduce using rule 38 (op -> term .) - lesseq reduce using rule 38 (op -> term .) - equal reduce using rule 38 (op -> term .) - semi reduce using rule 38 (op -> term .) - of reduce using rule 38 (op -> term .) - then reduce using rule 38 (op -> term .) - loop reduce using rule 38 (op -> term .) - cpar reduce using rule 38 (op -> term .) - comma reduce using rule 38 (op -> term .) - in reduce using rule 38 (op -> term .) - else reduce using rule 38 (op -> term .) - pool reduce using rule 38 (op -> term .) - ccur reduce using rule 38 (op -> term .) - fi reduce using rule 38 (op -> term .) - star shift and go to state 78 - div shift and go to state 79 - - -state 46 - - (43) term -> base_call . - - star reduce using rule 43 (term -> base_call .) - div reduce using rule 43 (term -> base_call .) - plus reduce using rule 43 (term -> base_call .) - minus reduce using rule 43 (term -> base_call .) - less reduce using rule 43 (term -> base_call .) - lesseq reduce using rule 43 (term -> base_call .) - equal reduce using rule 43 (term -> base_call .) - semi reduce using rule 43 (term -> base_call .) - of reduce using rule 43 (term -> base_call .) - then reduce using rule 43 (term -> base_call .) - loop reduce using rule 43 (term -> base_call .) - cpar reduce using rule 43 (term -> base_call .) - comma reduce using rule 43 (term -> base_call .) - in reduce using rule 43 (term -> base_call .) - else reduce using rule 43 (term -> base_call .) - pool reduce using rule 43 (term -> base_call .) - ccur reduce using rule 43 (term -> base_call .) - fi reduce using rule 43 (term -> base_call .) - - -state 47 - - (41) term -> isvoid . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - opar shift and go to state 52 - num shift and go to state 53 - id shift and go to state 72 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - base_call shift and go to state 80 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 48 - - (42) term -> nox . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - opar shift and go to state 52 - num shift and go to state 53 - id shift and go to state 72 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - base_call shift and go to state 81 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 49 - - (44) base_call -> factor . arroba id dot func_call - (45) base_call -> factor . - (48) factor -> factor . dot func_call - - arroba shift and go to state 82 - star reduce using rule 45 (base_call -> factor .) - div reduce using rule 45 (base_call -> factor .) - plus reduce using rule 45 (base_call -> factor .) - minus reduce using rule 45 (base_call -> factor .) - less reduce using rule 45 (base_call -> factor .) - lesseq reduce using rule 45 (base_call -> factor .) - equal reduce using rule 45 (base_call -> factor .) - semi reduce using rule 45 (base_call -> factor .) - of reduce using rule 45 (base_call -> factor .) - then reduce using rule 45 (base_call -> factor .) - loop reduce using rule 45 (base_call -> factor .) - cpar reduce using rule 45 (base_call -> factor .) - comma reduce using rule 45 (base_call -> factor .) - in reduce using rule 45 (base_call -> factor .) - else reduce using rule 45 (base_call -> factor .) - pool reduce using rule 45 (base_call -> factor .) - ccur reduce using rule 45 (base_call -> factor .) - fi reduce using rule 45 (base_call -> factor .) - dot shift and go to state 83 - - -state 50 - - (49) factor -> func_call . - - arroba reduce using rule 49 (factor -> func_call .) - dot reduce using rule 49 (factor -> func_call .) - star reduce using rule 49 (factor -> func_call .) - div reduce using rule 49 (factor -> func_call .) - plus reduce using rule 49 (factor -> func_call .) - minus reduce using rule 49 (factor -> func_call .) - less reduce using rule 49 (factor -> func_call .) - lesseq reduce using rule 49 (factor -> func_call .) - equal reduce using rule 49 (factor -> func_call .) - semi reduce using rule 49 (factor -> func_call .) - of reduce using rule 49 (factor -> func_call .) - then reduce using rule 49 (factor -> func_call .) - loop reduce using rule 49 (factor -> func_call .) - cpar reduce using rule 49 (factor -> func_call .) - comma reduce using rule 49 (factor -> func_call .) - in reduce using rule 49 (factor -> func_call .) - else reduce using rule 49 (factor -> func_call .) - pool reduce using rule 49 (factor -> func_call .) - ccur reduce using rule 49 (factor -> func_call .) - fi reduce using rule 49 (factor -> func_call .) - - -state 51 - - (46) factor -> atom . - - arroba reduce using rule 46 (factor -> atom .) - dot reduce using rule 46 (factor -> atom .) - star reduce using rule 46 (factor -> atom .) - div reduce using rule 46 (factor -> atom .) - plus reduce using rule 46 (factor -> atom .) - minus reduce using rule 46 (factor -> atom .) - less reduce using rule 46 (factor -> atom .) - lesseq reduce using rule 46 (factor -> atom .) - equal reduce using rule 46 (factor -> atom .) - semi reduce using rule 46 (factor -> atom .) - of reduce using rule 46 (factor -> atom .) - then reduce using rule 46 (factor -> atom .) - loop reduce using rule 46 (factor -> atom .) - cpar reduce using rule 46 (factor -> atom .) - comma reduce using rule 46 (factor -> atom .) - in reduce using rule 46 (factor -> atom .) - else reduce using rule 46 (factor -> atom .) - pool reduce using rule 46 (factor -> atom .) - ccur reduce using rule 46 (factor -> atom .) - fi reduce using rule 46 (factor -> atom .) - - -state 52 - - (47) factor -> opar . expr cpar - (17) expr -> . let let_list in expr - (18) expr -> . case expr of cases_list esac - (19) expr -> . if expr then expr else expr fi - (20) expr -> . while expr loop expr pool - (21) expr -> . arith - (29) arith -> . id larrow expr - (30) arith -> . not comp - (31) arith -> . comp - (32) comp -> . comp less op - (33) comp -> . comp lesseq op - (34) comp -> . comp equal op - (35) comp -> . op - (36) op -> . op plus term - (37) op -> . op minus term - (38) op -> . term - (39) term -> . term star base_call - (40) term -> . term div base_call - (41) term -> . isvoid base_call - (42) term -> . nox base_call - (43) term -> . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - let shift and go to state 37 - case shift and go to state 38 - if shift and go to state 39 - while shift and go to state 40 - id shift and go to state 35 - not shift and go to state 42 - isvoid shift and go to state 47 - nox shift and go to state 48 - opar shift and go to state 52 - num shift and go to state 53 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - expr shift and go to state 84 - arith shift and go to state 41 - comp shift and go to state 43 - op shift and go to state 44 - term shift and go to state 45 - base_call shift and go to state 46 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 53 - - (50) atom -> num . - - arroba reduce using rule 50 (atom -> num .) - dot reduce using rule 50 (atom -> num .) - star reduce using rule 50 (atom -> num .) - div reduce using rule 50 (atom -> num .) - plus reduce using rule 50 (atom -> num .) - minus reduce using rule 50 (atom -> num .) - less reduce using rule 50 (atom -> num .) - lesseq reduce using rule 50 (atom -> num .) - equal reduce using rule 50 (atom -> num .) - semi reduce using rule 50 (atom -> num .) - of reduce using rule 50 (atom -> num .) - then reduce using rule 50 (atom -> num .) - loop reduce using rule 50 (atom -> num .) - cpar reduce using rule 50 (atom -> num .) - comma reduce using rule 50 (atom -> num .) - in reduce using rule 50 (atom -> num .) - else reduce using rule 50 (atom -> num .) - pool reduce using rule 50 (atom -> num .) - ccur reduce using rule 50 (atom -> num .) - fi reduce using rule 50 (atom -> num .) - - -state 54 - - (52) atom -> new . id - - id shift and go to state 85 - - -state 55 - - (53) atom -> ocur . block ccur - (57) block -> . expr semi - (58) block -> . expr semi block - (17) expr -> . let let_list in expr - (18) expr -> . case expr of cases_list esac - (19) expr -> . if expr then expr else expr fi - (20) expr -> . while expr loop expr pool - (21) expr -> . arith - (29) arith -> . id larrow expr - (30) arith -> . not comp - (31) arith -> . comp - (32) comp -> . comp less op - (33) comp -> . comp lesseq op - (34) comp -> . comp equal op - (35) comp -> . op - (36) op -> . op plus term - (37) op -> . op minus term - (38) op -> . term - (39) term -> . term star base_call - (40) term -> . term div base_call - (41) term -> . isvoid base_call - (42) term -> . nox base_call - (43) term -> . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - let shift and go to state 37 - case shift and go to state 38 - if shift and go to state 39 - while shift and go to state 40 - id shift and go to state 35 - not shift and go to state 42 - isvoid shift and go to state 47 - nox shift and go to state 48 - opar shift and go to state 52 - num shift and go to state 53 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - block shift and go to state 86 - expr shift and go to state 87 - arith shift and go to state 41 - comp shift and go to state 43 - op shift and go to state 44 - term shift and go to state 45 - base_call shift and go to state 46 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 56 - - (54) atom -> true . - - arroba reduce using rule 54 (atom -> true .) - dot reduce using rule 54 (atom -> true .) - star reduce using rule 54 (atom -> true .) - div reduce using rule 54 (atom -> true .) - plus reduce using rule 54 (atom -> true .) - minus reduce using rule 54 (atom -> true .) - less reduce using rule 54 (atom -> true .) - lesseq reduce using rule 54 (atom -> true .) - equal reduce using rule 54 (atom -> true .) - semi reduce using rule 54 (atom -> true .) - of reduce using rule 54 (atom -> true .) - then reduce using rule 54 (atom -> true .) - loop reduce using rule 54 (atom -> true .) - cpar reduce using rule 54 (atom -> true .) - comma reduce using rule 54 (atom -> true .) - in reduce using rule 54 (atom -> true .) - else reduce using rule 54 (atom -> true .) - pool reduce using rule 54 (atom -> true .) - ccur reduce using rule 54 (atom -> true .) - fi reduce using rule 54 (atom -> true .) - - -state 57 - - (55) atom -> false . - - arroba reduce using rule 55 (atom -> false .) - dot reduce using rule 55 (atom -> false .) - star reduce using rule 55 (atom -> false .) - div reduce using rule 55 (atom -> false .) - plus reduce using rule 55 (atom -> false .) - minus reduce using rule 55 (atom -> false .) - less reduce using rule 55 (atom -> false .) - lesseq reduce using rule 55 (atom -> false .) - equal reduce using rule 55 (atom -> false .) - semi reduce using rule 55 (atom -> false .) - of reduce using rule 55 (atom -> false .) - then reduce using rule 55 (atom -> false .) - loop reduce using rule 55 (atom -> false .) - cpar reduce using rule 55 (atom -> false .) - comma reduce using rule 55 (atom -> false .) - in reduce using rule 55 (atom -> false .) - else reduce using rule 55 (atom -> false .) - pool reduce using rule 55 (atom -> false .) - ccur reduce using rule 55 (atom -> false .) - fi reduce using rule 55 (atom -> false .) - - -state 58 - - (56) atom -> string . - - arroba reduce using rule 56 (atom -> string .) - dot reduce using rule 56 (atom -> string .) - star reduce using rule 56 (atom -> string .) - div reduce using rule 56 (atom -> string .) - plus reduce using rule 56 (atom -> string .) - minus reduce using rule 56 (atom -> string .) - less reduce using rule 56 (atom -> string .) - lesseq reduce using rule 56 (atom -> string .) - equal reduce using rule 56 (atom -> string .) - semi reduce using rule 56 (atom -> string .) - of reduce using rule 56 (atom -> string .) - then reduce using rule 56 (atom -> string .) - loop reduce using rule 56 (atom -> string .) - cpar reduce using rule 56 (atom -> string .) - comma reduce using rule 56 (atom -> string .) - in reduce using rule 56 (atom -> string .) - else reduce using rule 56 (atom -> string .) - pool reduce using rule 56 (atom -> string .) - ccur reduce using rule 56 (atom -> string .) - fi reduce using rule 56 (atom -> string .) - - -state 59 - - (16) param -> id colon id . - - comma reduce using rule 16 (param -> id colon id .) - cpar reduce using rule 16 (param -> id colon id .) - larrow reduce using rule 16 (param -> id colon id .) - in reduce using rule 16 (param -> id colon id .) - - -state 60 - - (12) def_func -> id opar param_list cpar colon . id ocur expr ccur - - id shift and go to state 88 - - -state 61 - - (14) param_list -> param comma param_list . - - cpar reduce using rule 14 (param_list -> param comma param_list .) - - -state 62 - - (6) def_class -> class id inherits id ocur feature_list ccur semi . - - class reduce using rule 6 (def_class -> class id inherits id ocur feature_list ccur semi .) - $end reduce using rule 6 (def_class -> class id inherits id ocur feature_list ccur semi .) - - -state 63 - - (29) arith -> id larrow . expr - (17) expr -> . let let_list in expr - (18) expr -> . case expr of cases_list esac - (19) expr -> . if expr then expr else expr fi - (20) expr -> . while expr loop expr pool - (21) expr -> . arith - (29) arith -> . id larrow expr - (30) arith -> . not comp - (31) arith -> . comp - (32) comp -> . comp less op - (33) comp -> . comp lesseq op - (34) comp -> . comp equal op - (35) comp -> . op - (36) op -> . op plus term - (37) op -> . op minus term - (38) op -> . term - (39) term -> . term star base_call - (40) term -> . term div base_call - (41) term -> . isvoid base_call - (42) term -> . nox base_call - (43) term -> . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - let shift and go to state 37 - case shift and go to state 38 - if shift and go to state 39 - while shift and go to state 40 - id shift and go to state 35 - not shift and go to state 42 - isvoid shift and go to state 47 - nox shift and go to state 48 - opar shift and go to state 52 - num shift and go to state 53 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - expr shift and go to state 89 - arith shift and go to state 41 - comp shift and go to state 43 - op shift and go to state 44 - term shift and go to state 45 - base_call shift and go to state 46 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 64 - - (59) func_call -> id opar . arg_list cpar - (60) arg_list -> . expr - (61) arg_list -> . expr comma arg_list - (62) arg_list -> . epsilon - (17) expr -> . let let_list in expr - (18) expr -> . case expr of cases_list esac - (19) expr -> . if expr then expr else expr fi - (20) expr -> . while expr loop expr pool - (21) expr -> . arith - (2) epsilon -> . - (29) arith -> . id larrow expr - (30) arith -> . not comp - (31) arith -> . comp - (32) comp -> . comp less op - (33) comp -> . comp lesseq op - (34) comp -> . comp equal op - (35) comp -> . op - (36) op -> . op plus term - (37) op -> . op minus term - (38) op -> . term - (39) term -> . term star base_call - (40) term -> . term div base_call - (41) term -> . isvoid base_call - (42) term -> . nox base_call - (43) term -> . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - let shift and go to state 37 - case shift and go to state 38 - if shift and go to state 39 - while shift and go to state 40 - cpar reduce using rule 2 (epsilon -> .) - id shift and go to state 35 - not shift and go to state 42 - isvoid shift and go to state 47 - nox shift and go to state 48 - opar shift and go to state 52 - num shift and go to state 53 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - arg_list shift and go to state 90 - expr shift and go to state 91 - epsilon shift and go to state 92 - arith shift and go to state 41 - comp shift and go to state 43 - op shift and go to state 44 - term shift and go to state 45 - base_call shift and go to state 46 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 65 - - (17) expr -> let let_list . in expr - - in shift and go to state 93 - - -state 66 - - (22) let_list -> let_assign . - (23) let_list -> let_assign . comma let_list - - in reduce using rule 22 (let_list -> let_assign .) - comma shift and go to state 94 - - -state 67 - - (24) let_assign -> param . larrow expr - (25) let_assign -> param . - - larrow shift and go to state 95 - comma reduce using rule 25 (let_assign -> param .) - in reduce using rule 25 (let_assign -> param .) - - -state 68 - - (18) expr -> case expr . of cases_list esac - - of shift and go to state 96 - - -state 69 - - (19) expr -> if expr . then expr else expr fi - - then shift and go to state 97 - - -state 70 - - (20) expr -> while expr . loop expr pool - - loop shift and go to state 98 - - -state 71 - - (30) arith -> not comp . - (32) comp -> comp . less op - (33) comp -> comp . lesseq op - (34) comp -> comp . equal op - - semi reduce using rule 30 (arith -> not comp .) - of reduce using rule 30 (arith -> not comp .) - then reduce using rule 30 (arith -> not comp .) - loop reduce using rule 30 (arith -> not comp .) - cpar reduce using rule 30 (arith -> not comp .) - comma reduce using rule 30 (arith -> not comp .) - in reduce using rule 30 (arith -> not comp .) - else reduce using rule 30 (arith -> not comp .) - pool reduce using rule 30 (arith -> not comp .) - ccur reduce using rule 30 (arith -> not comp .) - fi reduce using rule 30 (arith -> not comp .) - less shift and go to state 73 - lesseq shift and go to state 74 - equal shift and go to state 75 - - -state 72 - - (51) atom -> id . - (59) func_call -> id . opar arg_list cpar - - arroba reduce using rule 51 (atom -> id .) - dot reduce using rule 51 (atom -> id .) - star reduce using rule 51 (atom -> id .) - div reduce using rule 51 (atom -> id .) - plus reduce using rule 51 (atom -> id .) - minus reduce using rule 51 (atom -> id .) - less reduce using rule 51 (atom -> id .) - lesseq reduce using rule 51 (atom -> id .) - equal reduce using rule 51 (atom -> id .) - semi reduce using rule 51 (atom -> id .) - of reduce using rule 51 (atom -> id .) - then reduce using rule 51 (atom -> id .) - loop reduce using rule 51 (atom -> id .) - cpar reduce using rule 51 (atom -> id .) - comma reduce using rule 51 (atom -> id .) - in reduce using rule 51 (atom -> id .) - else reduce using rule 51 (atom -> id .) - pool reduce using rule 51 (atom -> id .) - ccur reduce using rule 51 (atom -> id .) - fi reduce using rule 51 (atom -> id .) - opar shift and go to state 64 - - -state 73 - - (32) comp -> comp less . op - (36) op -> . op plus term - (37) op -> . op minus term - (38) op -> . term - (39) term -> . term star base_call - (40) term -> . term div base_call - (41) term -> . isvoid base_call - (42) term -> . nox base_call - (43) term -> . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - isvoid shift and go to state 47 - nox shift and go to state 48 - opar shift and go to state 52 - num shift and go to state 53 - id shift and go to state 72 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - op shift and go to state 99 - term shift and go to state 45 - base_call shift and go to state 46 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 74 - - (33) comp -> comp lesseq . op - (36) op -> . op plus term - (37) op -> . op minus term - (38) op -> . term - (39) term -> . term star base_call - (40) term -> . term div base_call - (41) term -> . isvoid base_call - (42) term -> . nox base_call - (43) term -> . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - isvoid shift and go to state 47 - nox shift and go to state 48 - opar shift and go to state 52 - num shift and go to state 53 - id shift and go to state 72 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - op shift and go to state 100 - term shift and go to state 45 - base_call shift and go to state 46 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 75 - - (34) comp -> comp equal . op - (36) op -> . op plus term - (37) op -> . op minus term - (38) op -> . term - (39) term -> . term star base_call - (40) term -> . term div base_call - (41) term -> . isvoid base_call - (42) term -> . nox base_call - (43) term -> . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - isvoid shift and go to state 47 - nox shift and go to state 48 - opar shift and go to state 52 - num shift and go to state 53 - id shift and go to state 72 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - op shift and go to state 101 - term shift and go to state 45 - base_call shift and go to state 46 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 76 - - (36) op -> op plus . term - (39) term -> . term star base_call - (40) term -> . term div base_call - (41) term -> . isvoid base_call - (42) term -> . nox base_call - (43) term -> . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - isvoid shift and go to state 47 - nox shift and go to state 48 - opar shift and go to state 52 - num shift and go to state 53 - id shift and go to state 72 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - term shift and go to state 102 - base_call shift and go to state 46 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 77 - - (37) op -> op minus . term - (39) term -> . term star base_call - (40) term -> . term div base_call - (41) term -> . isvoid base_call - (42) term -> . nox base_call - (43) term -> . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - isvoid shift and go to state 47 - nox shift and go to state 48 - opar shift and go to state 52 - num shift and go to state 53 - id shift and go to state 72 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - term shift and go to state 103 - base_call shift and go to state 46 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 78 - - (39) term -> term star . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - opar shift and go to state 52 - num shift and go to state 53 - id shift and go to state 72 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - base_call shift and go to state 104 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 79 - - (40) term -> term div . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - opar shift and go to state 52 - num shift and go to state 53 - id shift and go to state 72 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - base_call shift and go to state 105 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 80 - - (41) term -> isvoid base_call . - - star reduce using rule 41 (term -> isvoid base_call .) - div reduce using rule 41 (term -> isvoid base_call .) - plus reduce using rule 41 (term -> isvoid base_call .) - minus reduce using rule 41 (term -> isvoid base_call .) - less reduce using rule 41 (term -> isvoid base_call .) - lesseq reduce using rule 41 (term -> isvoid base_call .) - equal reduce using rule 41 (term -> isvoid base_call .) - semi reduce using rule 41 (term -> isvoid base_call .) - of reduce using rule 41 (term -> isvoid base_call .) - then reduce using rule 41 (term -> isvoid base_call .) - loop reduce using rule 41 (term -> isvoid base_call .) - cpar reduce using rule 41 (term -> isvoid base_call .) - comma reduce using rule 41 (term -> isvoid base_call .) - in reduce using rule 41 (term -> isvoid base_call .) - else reduce using rule 41 (term -> isvoid base_call .) - pool reduce using rule 41 (term -> isvoid base_call .) - ccur reduce using rule 41 (term -> isvoid base_call .) - fi reduce using rule 41 (term -> isvoid base_call .) - - -state 81 - - (42) term -> nox base_call . - - star reduce using rule 42 (term -> nox base_call .) - div reduce using rule 42 (term -> nox base_call .) - plus reduce using rule 42 (term -> nox base_call .) - minus reduce using rule 42 (term -> nox base_call .) - less reduce using rule 42 (term -> nox base_call .) - lesseq reduce using rule 42 (term -> nox base_call .) - equal reduce using rule 42 (term -> nox base_call .) - semi reduce using rule 42 (term -> nox base_call .) - of reduce using rule 42 (term -> nox base_call .) - then reduce using rule 42 (term -> nox base_call .) - loop reduce using rule 42 (term -> nox base_call .) - cpar reduce using rule 42 (term -> nox base_call .) - comma reduce using rule 42 (term -> nox base_call .) - in reduce using rule 42 (term -> nox base_call .) - else reduce using rule 42 (term -> nox base_call .) - pool reduce using rule 42 (term -> nox base_call .) - ccur reduce using rule 42 (term -> nox base_call .) - fi reduce using rule 42 (term -> nox base_call .) - - -state 82 - - (44) base_call -> factor arroba . id dot func_call - - id shift and go to state 106 - - -state 83 - - (48) factor -> factor dot . func_call - (59) func_call -> . id opar arg_list cpar - - id shift and go to state 108 - - func_call shift and go to state 107 - -state 84 - - (47) factor -> opar expr . cpar - - cpar shift and go to state 109 - - -state 85 - - (52) atom -> new id . - - arroba reduce using rule 52 (atom -> new id .) - dot reduce using rule 52 (atom -> new id .) - star reduce using rule 52 (atom -> new id .) - div reduce using rule 52 (atom -> new id .) - plus reduce using rule 52 (atom -> new id .) - minus reduce using rule 52 (atom -> new id .) - less reduce using rule 52 (atom -> new id .) - lesseq reduce using rule 52 (atom -> new id .) - equal reduce using rule 52 (atom -> new id .) - semi reduce using rule 52 (atom -> new id .) - of reduce using rule 52 (atom -> new id .) - then reduce using rule 52 (atom -> new id .) - loop reduce using rule 52 (atom -> new id .) - cpar reduce using rule 52 (atom -> new id .) - comma reduce using rule 52 (atom -> new id .) - in reduce using rule 52 (atom -> new id .) - else reduce using rule 52 (atom -> new id .) - pool reduce using rule 52 (atom -> new id .) - ccur reduce using rule 52 (atom -> new id .) - fi reduce using rule 52 (atom -> new id .) - - -state 86 - - (53) atom -> ocur block . ccur - - ccur shift and go to state 110 - - -state 87 - - (57) block -> expr . semi - (58) block -> expr . semi block - - semi shift and go to state 111 - - -state 88 - - (12) def_func -> id opar param_list cpar colon id . ocur expr ccur - - ocur shift and go to state 112 - - -state 89 - - (29) arith -> id larrow expr . - - semi reduce using rule 29 (arith -> id larrow expr .) - of reduce using rule 29 (arith -> id larrow expr .) - then reduce using rule 29 (arith -> id larrow expr .) - loop reduce using rule 29 (arith -> id larrow expr .) - cpar reduce using rule 29 (arith -> id larrow expr .) - comma reduce using rule 29 (arith -> id larrow expr .) - in reduce using rule 29 (arith -> id larrow expr .) - else reduce using rule 29 (arith -> id larrow expr .) - pool reduce using rule 29 (arith -> id larrow expr .) - ccur reduce using rule 29 (arith -> id larrow expr .) - fi reduce using rule 29 (arith -> id larrow expr .) - - -state 90 - - (59) func_call -> id opar arg_list . cpar - - cpar shift and go to state 113 - - -state 91 - - (60) arg_list -> expr . - (61) arg_list -> expr . comma arg_list - - cpar reduce using rule 60 (arg_list -> expr .) - comma shift and go to state 114 - - -state 92 - - (62) arg_list -> epsilon . - - cpar reduce using rule 62 (arg_list -> epsilon .) - - -state 93 - - (17) expr -> let let_list in . expr - (17) expr -> . let let_list in expr - (18) expr -> . case expr of cases_list esac - (19) expr -> . if expr then expr else expr fi - (20) expr -> . while expr loop expr pool - (21) expr -> . arith - (29) arith -> . id larrow expr - (30) arith -> . not comp - (31) arith -> . comp - (32) comp -> . comp less op - (33) comp -> . comp lesseq op - (34) comp -> . comp equal op - (35) comp -> . op - (36) op -> . op plus term - (37) op -> . op minus term - (38) op -> . term - (39) term -> . term star base_call - (40) term -> . term div base_call - (41) term -> . isvoid base_call - (42) term -> . nox base_call - (43) term -> . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - let shift and go to state 37 - case shift and go to state 38 - if shift and go to state 39 - while shift and go to state 40 - id shift and go to state 35 - not shift and go to state 42 - isvoid shift and go to state 47 - nox shift and go to state 48 - opar shift and go to state 52 - num shift and go to state 53 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - expr shift and go to state 115 - arith shift and go to state 41 - comp shift and go to state 43 - op shift and go to state 44 - term shift and go to state 45 - base_call shift and go to state 46 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 94 - - (23) let_list -> let_assign comma . let_list - (22) let_list -> . let_assign - (23) let_list -> . let_assign comma let_list - (24) let_assign -> . param larrow expr - (25) let_assign -> . param - (16) param -> . id colon id - - id shift and go to state 22 - - let_assign shift and go to state 66 - let_list shift and go to state 116 - param shift and go to state 67 - -state 95 - - (24) let_assign -> param larrow . expr - (17) expr -> . let let_list in expr - (18) expr -> . case expr of cases_list esac - (19) expr -> . if expr then expr else expr fi - (20) expr -> . while expr loop expr pool - (21) expr -> . arith - (29) arith -> . id larrow expr - (30) arith -> . not comp - (31) arith -> . comp - (32) comp -> . comp less op - (33) comp -> . comp lesseq op - (34) comp -> . comp equal op - (35) comp -> . op - (36) op -> . op plus term - (37) op -> . op minus term - (38) op -> . term - (39) term -> . term star base_call - (40) term -> . term div base_call - (41) term -> . isvoid base_call - (42) term -> . nox base_call - (43) term -> . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - let shift and go to state 37 - case shift and go to state 38 - if shift and go to state 39 - while shift and go to state 40 - id shift and go to state 35 - not shift and go to state 42 - isvoid shift and go to state 47 - nox shift and go to state 48 - opar shift and go to state 52 - num shift and go to state 53 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - expr shift and go to state 117 - arith shift and go to state 41 - comp shift and go to state 43 - op shift and go to state 44 - term shift and go to state 45 - base_call shift and go to state 46 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 96 - - (18) expr -> case expr of . cases_list esac - (26) cases_list -> . casep semi - (27) cases_list -> . casep semi cases_list - (28) casep -> . id colon id rarrow expr - - id shift and go to state 120 - - cases_list shift and go to state 118 - casep shift and go to state 119 - -state 97 - - (19) expr -> if expr then . expr else expr fi - (17) expr -> . let let_list in expr - (18) expr -> . case expr of cases_list esac - (19) expr -> . if expr then expr else expr fi - (20) expr -> . while expr loop expr pool - (21) expr -> . arith - (29) arith -> . id larrow expr - (30) arith -> . not comp - (31) arith -> . comp - (32) comp -> . comp less op - (33) comp -> . comp lesseq op - (34) comp -> . comp equal op - (35) comp -> . op - (36) op -> . op plus term - (37) op -> . op minus term - (38) op -> . term - (39) term -> . term star base_call - (40) term -> . term div base_call - (41) term -> . isvoid base_call - (42) term -> . nox base_call - (43) term -> . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - let shift and go to state 37 - case shift and go to state 38 - if shift and go to state 39 - while shift and go to state 40 - id shift and go to state 35 - not shift and go to state 42 - isvoid shift and go to state 47 - nox shift and go to state 48 - opar shift and go to state 52 - num shift and go to state 53 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - expr shift and go to state 121 - arith shift and go to state 41 - comp shift and go to state 43 - op shift and go to state 44 - term shift and go to state 45 - base_call shift and go to state 46 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 98 - - (20) expr -> while expr loop . expr pool - (17) expr -> . let let_list in expr - (18) expr -> . case expr of cases_list esac - (19) expr -> . if expr then expr else expr fi - (20) expr -> . while expr loop expr pool - (21) expr -> . arith - (29) arith -> . id larrow expr - (30) arith -> . not comp - (31) arith -> . comp - (32) comp -> . comp less op - (33) comp -> . comp lesseq op - (34) comp -> . comp equal op - (35) comp -> . op - (36) op -> . op plus term - (37) op -> . op minus term - (38) op -> . term - (39) term -> . term star base_call - (40) term -> . term div base_call - (41) term -> . isvoid base_call - (42) term -> . nox base_call - (43) term -> . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - let shift and go to state 37 - case shift and go to state 38 - if shift and go to state 39 - while shift and go to state 40 - id shift and go to state 35 - not shift and go to state 42 - isvoid shift and go to state 47 - nox shift and go to state 48 - opar shift and go to state 52 - num shift and go to state 53 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - expr shift and go to state 122 - arith shift and go to state 41 - comp shift and go to state 43 - op shift and go to state 44 - term shift and go to state 45 - base_call shift and go to state 46 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 99 - - (32) comp -> comp less op . - (36) op -> op . plus term - (37) op -> op . minus term - - less reduce using rule 32 (comp -> comp less op .) - lesseq reduce using rule 32 (comp -> comp less op .) - equal reduce using rule 32 (comp -> comp less op .) - semi reduce using rule 32 (comp -> comp less op .) - of reduce using rule 32 (comp -> comp less op .) - then reduce using rule 32 (comp -> comp less op .) - loop reduce using rule 32 (comp -> comp less op .) - cpar reduce using rule 32 (comp -> comp less op .) - comma reduce using rule 32 (comp -> comp less op .) - in reduce using rule 32 (comp -> comp less op .) - else reduce using rule 32 (comp -> comp less op .) - pool reduce using rule 32 (comp -> comp less op .) - ccur reduce using rule 32 (comp -> comp less op .) - fi reduce using rule 32 (comp -> comp less op .) - plus shift and go to state 76 - minus shift and go to state 77 - - -state 100 - - (33) comp -> comp lesseq op . - (36) op -> op . plus term - (37) op -> op . minus term - - less reduce using rule 33 (comp -> comp lesseq op .) - lesseq reduce using rule 33 (comp -> comp lesseq op .) - equal reduce using rule 33 (comp -> comp lesseq op .) - semi reduce using rule 33 (comp -> comp lesseq op .) - of reduce using rule 33 (comp -> comp lesseq op .) - then reduce using rule 33 (comp -> comp lesseq op .) - loop reduce using rule 33 (comp -> comp lesseq op .) - cpar reduce using rule 33 (comp -> comp lesseq op .) - comma reduce using rule 33 (comp -> comp lesseq op .) - in reduce using rule 33 (comp -> comp lesseq op .) - else reduce using rule 33 (comp -> comp lesseq op .) - pool reduce using rule 33 (comp -> comp lesseq op .) - ccur reduce using rule 33 (comp -> comp lesseq op .) - fi reduce using rule 33 (comp -> comp lesseq op .) - plus shift and go to state 76 - minus shift and go to state 77 - - -state 101 - - (34) comp -> comp equal op . - (36) op -> op . plus term - (37) op -> op . minus term - - less reduce using rule 34 (comp -> comp equal op .) - lesseq reduce using rule 34 (comp -> comp equal op .) - equal reduce using rule 34 (comp -> comp equal op .) - semi reduce using rule 34 (comp -> comp equal op .) - of reduce using rule 34 (comp -> comp equal op .) - then reduce using rule 34 (comp -> comp equal op .) - loop reduce using rule 34 (comp -> comp equal op .) - cpar reduce using rule 34 (comp -> comp equal op .) - comma reduce using rule 34 (comp -> comp equal op .) - in reduce using rule 34 (comp -> comp equal op .) - else reduce using rule 34 (comp -> comp equal op .) - pool reduce using rule 34 (comp -> comp equal op .) - ccur reduce using rule 34 (comp -> comp equal op .) - fi reduce using rule 34 (comp -> comp equal op .) - plus shift and go to state 76 - minus shift and go to state 77 - - -state 102 - - (36) op -> op plus term . - (39) term -> term . star base_call - (40) term -> term . div base_call - - plus reduce using rule 36 (op -> op plus term .) - minus reduce using rule 36 (op -> op plus term .) - less reduce using rule 36 (op -> op plus term .) - lesseq reduce using rule 36 (op -> op plus term .) - equal reduce using rule 36 (op -> op plus term .) - semi reduce using rule 36 (op -> op plus term .) - of reduce using rule 36 (op -> op plus term .) - then reduce using rule 36 (op -> op plus term .) - loop reduce using rule 36 (op -> op plus term .) - cpar reduce using rule 36 (op -> op plus term .) - comma reduce using rule 36 (op -> op plus term .) - in reduce using rule 36 (op -> op plus term .) - else reduce using rule 36 (op -> op plus term .) - pool reduce using rule 36 (op -> op plus term .) - ccur reduce using rule 36 (op -> op plus term .) - fi reduce using rule 36 (op -> op plus term .) - star shift and go to state 78 - div shift and go to state 79 - - -state 103 - - (37) op -> op minus term . - (39) term -> term . star base_call - (40) term -> term . div base_call - - plus reduce using rule 37 (op -> op minus term .) - minus reduce using rule 37 (op -> op minus term .) - less reduce using rule 37 (op -> op minus term .) - lesseq reduce using rule 37 (op -> op minus term .) - equal reduce using rule 37 (op -> op minus term .) - semi reduce using rule 37 (op -> op minus term .) - of reduce using rule 37 (op -> op minus term .) - then reduce using rule 37 (op -> op minus term .) - loop reduce using rule 37 (op -> op minus term .) - cpar reduce using rule 37 (op -> op minus term .) - comma reduce using rule 37 (op -> op minus term .) - in reduce using rule 37 (op -> op minus term .) - else reduce using rule 37 (op -> op minus term .) - pool reduce using rule 37 (op -> op minus term .) - ccur reduce using rule 37 (op -> op minus term .) - fi reduce using rule 37 (op -> op minus term .) - star shift and go to state 78 - div shift and go to state 79 - - -state 104 - - (39) term -> term star base_call . - - star reduce using rule 39 (term -> term star base_call .) - div reduce using rule 39 (term -> term star base_call .) - plus reduce using rule 39 (term -> term star base_call .) - minus reduce using rule 39 (term -> term star base_call .) - less reduce using rule 39 (term -> term star base_call .) - lesseq reduce using rule 39 (term -> term star base_call .) - equal reduce using rule 39 (term -> term star base_call .) - semi reduce using rule 39 (term -> term star base_call .) - of reduce using rule 39 (term -> term star base_call .) - then reduce using rule 39 (term -> term star base_call .) - loop reduce using rule 39 (term -> term star base_call .) - cpar reduce using rule 39 (term -> term star base_call .) - comma reduce using rule 39 (term -> term star base_call .) - in reduce using rule 39 (term -> term star base_call .) - else reduce using rule 39 (term -> term star base_call .) - pool reduce using rule 39 (term -> term star base_call .) - ccur reduce using rule 39 (term -> term star base_call .) - fi reduce using rule 39 (term -> term star base_call .) - - -state 105 - - (40) term -> term div base_call . - - star reduce using rule 40 (term -> term div base_call .) - div reduce using rule 40 (term -> term div base_call .) - plus reduce using rule 40 (term -> term div base_call .) - minus reduce using rule 40 (term -> term div base_call .) - less reduce using rule 40 (term -> term div base_call .) - lesseq reduce using rule 40 (term -> term div base_call .) - equal reduce using rule 40 (term -> term div base_call .) - semi reduce using rule 40 (term -> term div base_call .) - of reduce using rule 40 (term -> term div base_call .) - then reduce using rule 40 (term -> term div base_call .) - loop reduce using rule 40 (term -> term div base_call .) - cpar reduce using rule 40 (term -> term div base_call .) - comma reduce using rule 40 (term -> term div base_call .) - in reduce using rule 40 (term -> term div base_call .) - else reduce using rule 40 (term -> term div base_call .) - pool reduce using rule 40 (term -> term div base_call .) - ccur reduce using rule 40 (term -> term div base_call .) - fi reduce using rule 40 (term -> term div base_call .) - - -state 106 - - (44) base_call -> factor arroba id . dot func_call - - dot shift and go to state 123 - - -state 107 - - (48) factor -> factor dot func_call . - - arroba reduce using rule 48 (factor -> factor dot func_call .) - dot reduce using rule 48 (factor -> factor dot func_call .) - star reduce using rule 48 (factor -> factor dot func_call .) - div reduce using rule 48 (factor -> factor dot func_call .) - plus reduce using rule 48 (factor -> factor dot func_call .) - minus reduce using rule 48 (factor -> factor dot func_call .) - less reduce using rule 48 (factor -> factor dot func_call .) - lesseq reduce using rule 48 (factor -> factor dot func_call .) - equal reduce using rule 48 (factor -> factor dot func_call .) - semi reduce using rule 48 (factor -> factor dot func_call .) - of reduce using rule 48 (factor -> factor dot func_call .) - then reduce using rule 48 (factor -> factor dot func_call .) - loop reduce using rule 48 (factor -> factor dot func_call .) - cpar reduce using rule 48 (factor -> factor dot func_call .) - comma reduce using rule 48 (factor -> factor dot func_call .) - in reduce using rule 48 (factor -> factor dot func_call .) - else reduce using rule 48 (factor -> factor dot func_call .) - pool reduce using rule 48 (factor -> factor dot func_call .) - ccur reduce using rule 48 (factor -> factor dot func_call .) - fi reduce using rule 48 (factor -> factor dot func_call .) - - -state 108 - - (59) func_call -> id . opar arg_list cpar - - opar shift and go to state 64 - - -state 109 - - (47) factor -> opar expr cpar . - - arroba reduce using rule 47 (factor -> opar expr cpar .) - dot reduce using rule 47 (factor -> opar expr cpar .) - star reduce using rule 47 (factor -> opar expr cpar .) - div reduce using rule 47 (factor -> opar expr cpar .) - plus reduce using rule 47 (factor -> opar expr cpar .) - minus reduce using rule 47 (factor -> opar expr cpar .) - less reduce using rule 47 (factor -> opar expr cpar .) - lesseq reduce using rule 47 (factor -> opar expr cpar .) - equal reduce using rule 47 (factor -> opar expr cpar .) - semi reduce using rule 47 (factor -> opar expr cpar .) - of reduce using rule 47 (factor -> opar expr cpar .) - then reduce using rule 47 (factor -> opar expr cpar .) - loop reduce using rule 47 (factor -> opar expr cpar .) - cpar reduce using rule 47 (factor -> opar expr cpar .) - comma reduce using rule 47 (factor -> opar expr cpar .) - in reduce using rule 47 (factor -> opar expr cpar .) - else reduce using rule 47 (factor -> opar expr cpar .) - pool reduce using rule 47 (factor -> opar expr cpar .) - ccur reduce using rule 47 (factor -> opar expr cpar .) - fi reduce using rule 47 (factor -> opar expr cpar .) - - -state 110 - - (53) atom -> ocur block ccur . - - arroba reduce using rule 53 (atom -> ocur block ccur .) - dot reduce using rule 53 (atom -> ocur block ccur .) - star reduce using rule 53 (atom -> ocur block ccur .) - div reduce using rule 53 (atom -> ocur block ccur .) - plus reduce using rule 53 (atom -> ocur block ccur .) - minus reduce using rule 53 (atom -> ocur block ccur .) - less reduce using rule 53 (atom -> ocur block ccur .) - lesseq reduce using rule 53 (atom -> ocur block ccur .) - equal reduce using rule 53 (atom -> ocur block ccur .) - semi reduce using rule 53 (atom -> ocur block ccur .) - of reduce using rule 53 (atom -> ocur block ccur .) - then reduce using rule 53 (atom -> ocur block ccur .) - loop reduce using rule 53 (atom -> ocur block ccur .) - cpar reduce using rule 53 (atom -> ocur block ccur .) - comma reduce using rule 53 (atom -> ocur block ccur .) - in reduce using rule 53 (atom -> ocur block ccur .) - else reduce using rule 53 (atom -> ocur block ccur .) - pool reduce using rule 53 (atom -> ocur block ccur .) - ccur reduce using rule 53 (atom -> ocur block ccur .) - fi reduce using rule 53 (atom -> ocur block ccur .) - - -state 111 - - (57) block -> expr semi . - (58) block -> expr semi . block - (57) block -> . expr semi - (58) block -> . expr semi block - (17) expr -> . let let_list in expr - (18) expr -> . case expr of cases_list esac - (19) expr -> . if expr then expr else expr fi - (20) expr -> . while expr loop expr pool - (21) expr -> . arith - (29) arith -> . id larrow expr - (30) arith -> . not comp - (31) arith -> . comp - (32) comp -> . comp less op - (33) comp -> . comp lesseq op - (34) comp -> . comp equal op - (35) comp -> . op - (36) op -> . op plus term - (37) op -> . op minus term - (38) op -> . term - (39) term -> . term star base_call - (40) term -> . term div base_call - (41) term -> . isvoid base_call - (42) term -> . nox base_call - (43) term -> . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - ccur reduce using rule 57 (block -> expr semi .) - let shift and go to state 37 - case shift and go to state 38 - if shift and go to state 39 - while shift and go to state 40 - id shift and go to state 35 - not shift and go to state 42 - isvoid shift and go to state 47 - nox shift and go to state 48 - opar shift and go to state 52 - num shift and go to state 53 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - expr shift and go to state 87 - block shift and go to state 124 - arith shift and go to state 41 - comp shift and go to state 43 - op shift and go to state 44 - term shift and go to state 45 - base_call shift and go to state 46 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 112 - - (12) def_func -> id opar param_list cpar colon id ocur . expr ccur - (17) expr -> . let let_list in expr - (18) expr -> . case expr of cases_list esac - (19) expr -> . if expr then expr else expr fi - (20) expr -> . while expr loop expr pool - (21) expr -> . arith - (29) arith -> . id larrow expr - (30) arith -> . not comp - (31) arith -> . comp - (32) comp -> . comp less op - (33) comp -> . comp lesseq op - (34) comp -> . comp equal op - (35) comp -> . op - (36) op -> . op plus term - (37) op -> . op minus term - (38) op -> . term - (39) term -> . term star base_call - (40) term -> . term div base_call - (41) term -> . isvoid base_call - (42) term -> . nox base_call - (43) term -> . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - let shift and go to state 37 - case shift and go to state 38 - if shift and go to state 39 - while shift and go to state 40 - id shift and go to state 35 - not shift and go to state 42 - isvoid shift and go to state 47 - nox shift and go to state 48 - opar shift and go to state 52 - num shift and go to state 53 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - expr shift and go to state 125 - arith shift and go to state 41 - comp shift and go to state 43 - op shift and go to state 44 - term shift and go to state 45 - base_call shift and go to state 46 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 113 - - (59) func_call -> id opar arg_list cpar . - - arroba reduce using rule 59 (func_call -> id opar arg_list cpar .) - dot reduce using rule 59 (func_call -> id opar arg_list cpar .) - star reduce using rule 59 (func_call -> id opar arg_list cpar .) - div reduce using rule 59 (func_call -> id opar arg_list cpar .) - plus reduce using rule 59 (func_call -> id opar arg_list cpar .) - minus reduce using rule 59 (func_call -> id opar arg_list cpar .) - less reduce using rule 59 (func_call -> id opar arg_list cpar .) - lesseq reduce using rule 59 (func_call -> id opar arg_list cpar .) - equal reduce using rule 59 (func_call -> id opar arg_list cpar .) - semi reduce using rule 59 (func_call -> id opar arg_list cpar .) - of reduce using rule 59 (func_call -> id opar arg_list cpar .) - then reduce using rule 59 (func_call -> id opar arg_list cpar .) - loop reduce using rule 59 (func_call -> id opar arg_list cpar .) - cpar reduce using rule 59 (func_call -> id opar arg_list cpar .) - comma reduce using rule 59 (func_call -> id opar arg_list cpar .) - in reduce using rule 59 (func_call -> id opar arg_list cpar .) - else reduce using rule 59 (func_call -> id opar arg_list cpar .) - pool reduce using rule 59 (func_call -> id opar arg_list cpar .) - ccur reduce using rule 59 (func_call -> id opar arg_list cpar .) - fi reduce using rule 59 (func_call -> id opar arg_list cpar .) - - -state 114 - - (61) arg_list -> expr comma . arg_list - (60) arg_list -> . expr - (61) arg_list -> . expr comma arg_list - (62) arg_list -> . epsilon - (17) expr -> . let let_list in expr - (18) expr -> . case expr of cases_list esac - (19) expr -> . if expr then expr else expr fi - (20) expr -> . while expr loop expr pool - (21) expr -> . arith - (2) epsilon -> . - (29) arith -> . id larrow expr - (30) arith -> . not comp - (31) arith -> . comp - (32) comp -> . comp less op - (33) comp -> . comp lesseq op - (34) comp -> . comp equal op - (35) comp -> . op - (36) op -> . op plus term - (37) op -> . op minus term - (38) op -> . term - (39) term -> . term star base_call - (40) term -> . term div base_call - (41) term -> . isvoid base_call - (42) term -> . nox base_call - (43) term -> . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - let shift and go to state 37 - case shift and go to state 38 - if shift and go to state 39 - while shift and go to state 40 - cpar reduce using rule 2 (epsilon -> .) - id shift and go to state 35 - not shift and go to state 42 - isvoid shift and go to state 47 - nox shift and go to state 48 - opar shift and go to state 52 - num shift and go to state 53 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - expr shift and go to state 91 - arg_list shift and go to state 126 - epsilon shift and go to state 92 - arith shift and go to state 41 - comp shift and go to state 43 - op shift and go to state 44 - term shift and go to state 45 - base_call shift and go to state 46 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 115 - - (17) expr -> let let_list in expr . - - semi reduce using rule 17 (expr -> let let_list in expr .) - of reduce using rule 17 (expr -> let let_list in expr .) - then reduce using rule 17 (expr -> let let_list in expr .) - loop reduce using rule 17 (expr -> let let_list in expr .) - cpar reduce using rule 17 (expr -> let let_list in expr .) - comma reduce using rule 17 (expr -> let let_list in expr .) - in reduce using rule 17 (expr -> let let_list in expr .) - else reduce using rule 17 (expr -> let let_list in expr .) - pool reduce using rule 17 (expr -> let let_list in expr .) - ccur reduce using rule 17 (expr -> let let_list in expr .) - fi reduce using rule 17 (expr -> let let_list in expr .) - - -state 116 - - (23) let_list -> let_assign comma let_list . - - in reduce using rule 23 (let_list -> let_assign comma let_list .) - - -state 117 - - (24) let_assign -> param larrow expr . - - comma reduce using rule 24 (let_assign -> param larrow expr .) - in reduce using rule 24 (let_assign -> param larrow expr .) - - -state 118 - - (18) expr -> case expr of cases_list . esac - - esac shift and go to state 127 - - -state 119 - - (26) cases_list -> casep . semi - (27) cases_list -> casep . semi cases_list - - semi shift and go to state 128 - - -state 120 - - (28) casep -> id . colon id rarrow expr - - colon shift and go to state 129 - - -state 121 - - (19) expr -> if expr then expr . else expr fi - - else shift and go to state 130 - - -state 122 - - (20) expr -> while expr loop expr . pool - - pool shift and go to state 131 - - -state 123 - - (44) base_call -> factor arroba id dot . func_call - (59) func_call -> . id opar arg_list cpar - - id shift and go to state 108 - - func_call shift and go to state 132 - -state 124 - - (58) block -> expr semi block . - - ccur reduce using rule 58 (block -> expr semi block .) - - -state 125 - - (12) def_func -> id opar param_list cpar colon id ocur expr . ccur - - ccur shift and go to state 133 - - -state 126 - - (61) arg_list -> expr comma arg_list . - - cpar reduce using rule 61 (arg_list -> expr comma arg_list .) - - -state 127 - - (18) expr -> case expr of cases_list esac . - - semi reduce using rule 18 (expr -> case expr of cases_list esac .) - of reduce using rule 18 (expr -> case expr of cases_list esac .) - then reduce using rule 18 (expr -> case expr of cases_list esac .) - loop reduce using rule 18 (expr -> case expr of cases_list esac .) - cpar reduce using rule 18 (expr -> case expr of cases_list esac .) - comma reduce using rule 18 (expr -> case expr of cases_list esac .) - in reduce using rule 18 (expr -> case expr of cases_list esac .) - else reduce using rule 18 (expr -> case expr of cases_list esac .) - pool reduce using rule 18 (expr -> case expr of cases_list esac .) - ccur reduce using rule 18 (expr -> case expr of cases_list esac .) - fi reduce using rule 18 (expr -> case expr of cases_list esac .) - - -state 128 - - (26) cases_list -> casep semi . - (27) cases_list -> casep semi . cases_list - (26) cases_list -> . casep semi - (27) cases_list -> . casep semi cases_list - (28) casep -> . id colon id rarrow expr - - esac reduce using rule 26 (cases_list -> casep semi .) - id shift and go to state 120 - - casep shift and go to state 119 - cases_list shift and go to state 134 - -state 129 - - (28) casep -> id colon . id rarrow expr - - id shift and go to state 135 - - -state 130 - - (19) expr -> if expr then expr else . expr fi - (17) expr -> . let let_list in expr - (18) expr -> . case expr of cases_list esac - (19) expr -> . if expr then expr else expr fi - (20) expr -> . while expr loop expr pool - (21) expr -> . arith - (29) arith -> . id larrow expr - (30) arith -> . not comp - (31) arith -> . comp - (32) comp -> . comp less op - (33) comp -> . comp lesseq op - (34) comp -> . comp equal op - (35) comp -> . op - (36) op -> . op plus term - (37) op -> . op minus term - (38) op -> . term - (39) term -> . term star base_call - (40) term -> . term div base_call - (41) term -> . isvoid base_call - (42) term -> . nox base_call - (43) term -> . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - let shift and go to state 37 - case shift and go to state 38 - if shift and go to state 39 - while shift and go to state 40 - id shift and go to state 35 - not shift and go to state 42 - isvoid shift and go to state 47 - nox shift and go to state 48 - opar shift and go to state 52 - num shift and go to state 53 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - expr shift and go to state 136 - arith shift and go to state 41 - comp shift and go to state 43 - op shift and go to state 44 - term shift and go to state 45 - base_call shift and go to state 46 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 131 - - (20) expr -> while expr loop expr pool . - - semi reduce using rule 20 (expr -> while expr loop expr pool .) - of reduce using rule 20 (expr -> while expr loop expr pool .) - then reduce using rule 20 (expr -> while expr loop expr pool .) - loop reduce using rule 20 (expr -> while expr loop expr pool .) - cpar reduce using rule 20 (expr -> while expr loop expr pool .) - comma reduce using rule 20 (expr -> while expr loop expr pool .) - in reduce using rule 20 (expr -> while expr loop expr pool .) - else reduce using rule 20 (expr -> while expr loop expr pool .) - pool reduce using rule 20 (expr -> while expr loop expr pool .) - ccur reduce using rule 20 (expr -> while expr loop expr pool .) - fi reduce using rule 20 (expr -> while expr loop expr pool .) - - -state 132 - - (44) base_call -> factor arroba id dot func_call . - - star reduce using rule 44 (base_call -> factor arroba id dot func_call .) - div reduce using rule 44 (base_call -> factor arroba id dot func_call .) - plus reduce using rule 44 (base_call -> factor arroba id dot func_call .) - minus reduce using rule 44 (base_call -> factor arroba id dot func_call .) - less reduce using rule 44 (base_call -> factor arroba id dot func_call .) - lesseq reduce using rule 44 (base_call -> factor arroba id dot func_call .) - equal reduce using rule 44 (base_call -> factor arroba id dot func_call .) - semi reduce using rule 44 (base_call -> factor arroba id dot func_call .) - of reduce using rule 44 (base_call -> factor arroba id dot func_call .) - then reduce using rule 44 (base_call -> factor arroba id dot func_call .) - loop reduce using rule 44 (base_call -> factor arroba id dot func_call .) - cpar reduce using rule 44 (base_call -> factor arroba id dot func_call .) - comma reduce using rule 44 (base_call -> factor arroba id dot func_call .) - in reduce using rule 44 (base_call -> factor arroba id dot func_call .) - else reduce using rule 44 (base_call -> factor arroba id dot func_call .) - pool reduce using rule 44 (base_call -> factor arroba id dot func_call .) - ccur reduce using rule 44 (base_call -> factor arroba id dot func_call .) - fi reduce using rule 44 (base_call -> factor arroba id dot func_call .) - - -state 133 - - (12) def_func -> id opar param_list cpar colon id ocur expr ccur . - - semi reduce using rule 12 (def_func -> id opar param_list cpar colon id ocur expr ccur .) - - -state 134 - - (27) cases_list -> casep semi cases_list . - - esac reduce using rule 27 (cases_list -> casep semi cases_list .) - - -state 135 - - (28) casep -> id colon id . rarrow expr - - rarrow shift and go to state 137 - - -state 136 - - (19) expr -> if expr then expr else expr . fi - - fi shift and go to state 138 - - -state 137 - - (28) casep -> id colon id rarrow . expr - (17) expr -> . let let_list in expr - (18) expr -> . case expr of cases_list esac - (19) expr -> . if expr then expr else expr fi - (20) expr -> . while expr loop expr pool - (21) expr -> . arith - (29) arith -> . id larrow expr - (30) arith -> . not comp - (31) arith -> . comp - (32) comp -> . comp less op - (33) comp -> . comp lesseq op - (34) comp -> . comp equal op - (35) comp -> . op - (36) op -> . op plus term - (37) op -> . op minus term - (38) op -> . term - (39) term -> . term star base_call - (40) term -> . term div base_call - (41) term -> . isvoid base_call - (42) term -> . nox base_call - (43) term -> . base_call - (44) base_call -> . factor arroba id dot func_call - (45) base_call -> . factor - (46) factor -> . atom - (47) factor -> . opar expr cpar - (48) factor -> . factor dot func_call - (49) factor -> . func_call - (50) atom -> . num - (51) atom -> . id - (52) atom -> . new id - (53) atom -> . ocur block ccur - (54) atom -> . true - (55) atom -> . false - (56) atom -> . string - (59) func_call -> . id opar arg_list cpar - - let shift and go to state 37 - case shift and go to state 38 - if shift and go to state 39 - while shift and go to state 40 - id shift and go to state 35 - not shift and go to state 42 - isvoid shift and go to state 47 - nox shift and go to state 48 - opar shift and go to state 52 - num shift and go to state 53 - new shift and go to state 54 - ocur shift and go to state 55 - true shift and go to state 56 - false shift and go to state 57 - string shift and go to state 58 - - expr shift and go to state 139 - arith shift and go to state 41 - comp shift and go to state 43 - op shift and go to state 44 - term shift and go to state 45 - base_call shift and go to state 46 - factor shift and go to state 49 - func_call shift and go to state 50 - atom shift and go to state 51 - -state 138 - - (19) expr -> if expr then expr else expr fi . - - semi reduce using rule 19 (expr -> if expr then expr else expr fi .) - of reduce using rule 19 (expr -> if expr then expr else expr fi .) - then reduce using rule 19 (expr -> if expr then expr else expr fi .) - loop reduce using rule 19 (expr -> if expr then expr else expr fi .) - cpar reduce using rule 19 (expr -> if expr then expr else expr fi .) - comma reduce using rule 19 (expr -> if expr then expr else expr fi .) - in reduce using rule 19 (expr -> if expr then expr else expr fi .) - else reduce using rule 19 (expr -> if expr then expr else expr fi .) - pool reduce using rule 19 (expr -> if expr then expr else expr fi .) - ccur reduce using rule 19 (expr -> if expr then expr else expr fi .) - fi reduce using rule 19 (expr -> if expr then expr else expr fi .) - - -state 139 - - (28) casep -> id colon id rarrow expr . - - semi reduce using rule 28 (casep -> id colon id rarrow expr .) - diff --git a/src/parser.py b/src/parser.py new file mode 100644 index 00000000..f3329fcb --- /dev/null +++ b/src/parser.py @@ -0,0 +1,31 @@ +import ply.yacc as yacc +from cool_grammar import * +from lexer import CoolLexer + +class CoolParser: + def __init__(self, lexer=None): + if lexer is None: + self.lexer = CoolLexer() + else: + self.lexer = lexer + self.parser = yacc.yacc(start='program', outputdir='output_parser') + + def parse(self, program, debug=False): + return self.parser.parse(program, self.lexer.lexer, debug=debug) + + +if __name__ == "__main__": + s = ''' + class A { + ackermann ( m : AUTO_TYPE , n : AUTO_TYPE ) : AUTO_TYPE { + if ( m = 0 ) then n + 1 else + if ( n = 0 ) then ackermann ( m - 1 , 1 ) else + ackermann ( m - 1 , ackermann ( m , n - 1 ) ) + fi + fi + } ; + } ; + ''' + parser = CoolParser() + result = parser.parse(s) + print(result) \ No newline at end of file diff --git a/src/tools/ast.py b/src/tools/ast.py index 64cfb538..4fbfb2da 100644 --- a/src/tools/ast.py +++ b/src/tools/ast.py @@ -1,174 +1,174 @@ -class Node: - pass - -class ProgramNode(Node): - def __init__(self, declarations): - self.declarations = declarations - -class DeclarationNode(Node): - pass - -class ExpressionNode(Node): - pass - -class ClassDeclarationNode(DeclarationNode): - def __init__(self, idx, features, parent=None): - self.id = idx - self.parent = parent - self.features = features - -class FuncDeclarationNode(DeclarationNode): - def __init__(self, idx, params, return_type, body): - self.id = idx - self.params = params - self.type = return_type - self.body = body - -class AttrDeclarationNode(DeclarationNode): - def __init__(self, idx, typex, expr=None): - self.id = idx - self.type = typex - self.expr = expr - -class VarDeclarationNode(ExpressionNode): - def __init__(self, idx, typex, expr=None): - self.id = idx - self.type = typex - self.expr = expr - -class AssignNode(ExpressionNode): - def __init__(self, idx, expr): - self.id = idx - self.expr = expr - -class CallNode(ExpressionNode): - def __init__(self, obj, idx, args): - self.obj = obj - self.id = idx - self.args = args - -class BlockNode(ExpressionNode): - def __init__(self, expr_list): - self.expr_list = expr_list - -class BaseCallNode(ExpressionNode): - def __init__(self, obj, typex, idx, args): - self.obj = obj - self.id = idx - self.args = args - self.type = typex - - -class StaticCallNode(ExpressionNode): - def __init__(self, idx, args): - self.id = idx - self.args = args - - -class AtomicNode(ExpressionNode): - def __init__(self, lex): - self.lex = lex - -class BinaryNode(ExpressionNode): - def __init__(self, left, right): - self.left = left - self.right = right - -class BinaryLogicalNode(BinaryNode): - def __init__(self, left, right): - super().__init__(left, right) - -class BinaryArithNode(BinaryNode): - def __init__(self, left, right): - super().__init__(left, right) - -class UnaryNode(ExpressionNode): - def __init__(self, expr): - self.expr = expr - -class UnaryLogicalNode(UnaryNode): - def __init__(self, operand): - super().__init__(operand) - -class UnaryArithNode(UnaryNode): - def __init__(self, operand): - super().__init__(operand) - -class WhileNode(ExpressionNode): - def __init__(self, cond, expr): - self.cond = cond - self.expr = expr - -class ConditionalNode(ExpressionNode): - def __init__(self, cond, stm, else_stm): - self.cond = cond - self.stm = stm - self.else_stm = else_stm - -class CaseNode(ExpressionNode): - def __init__(self, expr, case_list): - self.expr = expr - self.case_list = case_list - - def __hash__(self): - return id(self) - -class OptionNode(ExpressionNode): - def __init__(self, idx, typex, expr): - self.id = idx - self.typex = typex - self.expr = expr - - -class LetNode(ExpressionNode): - def __init__(self, init_list, expr): - self.init_list = init_list - self.expr = expr - - def __hash__(self): - return id(self) - -class ConstantNumNode(AtomicNode): - pass - -class ConstantBoolNode(AtomicNode): - pass - -class ConstantStrNode(AtomicNode): - pass - -class VariableNode(AtomicNode): - pass - -class InstantiateNode(AtomicNode): - pass - -class BinaryNotNode(UnaryArithNode): - pass - -class NotNode(UnaryLogicalNode): - pass - -class IsVoidNode(UnaryArithNode): - pass - -class PlusNode(BinaryArithNode): - pass - -class MinusNode(BinaryArithNode): - pass - -class StarNode(BinaryArithNode): - pass - -class DivNode(BinaryArithNode): - pass - -class LessNode(BinaryLogicalNode): - pass - -class LessEqNode(BinaryLogicalNode): - pass - -class EqualNode(BinaryLogicalNode): +class Node: + pass + +class ProgramNode(Node): + def __init__(self, declarations): + self.declarations = declarations + +class DeclarationNode(Node): + pass + +class ExpressionNode(Node): + pass + +class ClassDeclarationNode(DeclarationNode): + def __init__(self, idx, features, parent=None): + self.id = idx + self.parent = parent + self.features = features + +class FuncDeclarationNode(DeclarationNode): + def __init__(self, idx, params, return_type, body): + self.id = idx + self.params = params + self.type = return_type + self.body = body + +class AttrDeclarationNode(DeclarationNode): + def __init__(self, idx, typex, expr=None): + self.id = idx + self.type = typex + self.expr = expr + +class VarDeclarationNode(ExpressionNode): + def __init__(self, idx, typex, expr=None): + self.id = idx + self.type = typex + self.expr = expr + +class AssignNode(ExpressionNode): + def __init__(self, idx, expr): + self.id = idx + self.expr = expr + +class CallNode(ExpressionNode): + def __init__(self, obj, idx, args): + self.obj = obj + self.id = idx + self.args = args + +class BlockNode(ExpressionNode): + def __init__(self, expr_list): + self.expr_list = expr_list + +class BaseCallNode(ExpressionNode): + def __init__(self, obj, typex, idx, args): + self.obj = obj + self.id = idx + self.args = args + self.type = typex + + +class StaticCallNode(ExpressionNode): + def __init__(self, idx, args): + self.id = idx + self.args = args + + +class AtomicNode(ExpressionNode): + def __init__(self, lex): + self.lex = lex + +class BinaryNode(ExpressionNode): + def __init__(self, left, right): + self.left = left + self.right = right + +class BinaryLogicalNode(BinaryNode): + def __init__(self, left, right): + super().__init__(left, right) + +class BinaryArithNode(BinaryNode): + def __init__(self, left, right): + super().__init__(left, right) + +class UnaryNode(ExpressionNode): + def __init__(self, expr): + self.expr = expr + +class UnaryLogicalNode(UnaryNode): + def __init__(self, operand): + super().__init__(operand) + +class UnaryArithNode(UnaryNode): + def __init__(self, operand): + super().__init__(operand) + +class WhileNode(ExpressionNode): + def __init__(self, cond, expr): + self.cond = cond + self.expr = expr + +class ConditionalNode(ExpressionNode): + def __init__(self, cond, stm, else_stm): + self.cond = cond + self.stm = stm + self.else_stm = else_stm + +class CaseNode(ExpressionNode): + def __init__(self, expr, case_list): + self.expr = expr + self.case_list = case_list + + def __hash__(self): + return id(self) + +class OptionNode(ExpressionNode): + def __init__(self, idx, typex, expr): + self.id = idx + self.typex = typex + self.expr = expr + + +class LetNode(ExpressionNode): + def __init__(self, init_list, expr): + self.init_list = init_list + self.expr = expr + + def __hash__(self): + return id(self) + +class ConstantNumNode(AtomicNode): + pass + +class ConstantBoolNode(AtomicNode): + pass + +class ConstantStrNode(AtomicNode): + pass + +class VariableNode(AtomicNode): + pass + +class InstantiateNode(AtomicNode): + pass + +class BinaryNotNode(UnaryArithNode): + pass + +class NotNode(UnaryLogicalNode): + pass + +class IsVoidNode(UnaryArithNode): + pass + +class PlusNode(BinaryArithNode): + pass + +class MinusNode(BinaryArithNode): + pass + +class StarNode(BinaryArithNode): + pass + +class DivNode(BinaryArithNode): + pass + +class LessNode(BinaryLogicalNode): + pass + +class LessEqNode(BinaryLogicalNode): + pass + +class EqualNode(BinaryLogicalNode): pass \ No newline at end of file diff --git a/src/tools/errors.py b/src/tools/errors.py index 1f12d0ed..420f6c37 100644 --- a/src/tools/errors.py +++ b/src/tools/errors.py @@ -1,83 +1,97 @@ - - -class CoolError(Exception): - @property - def error_type(self): - return 'CoolError' - - @property - def text(self): - return self.args[0] - -class CompilerError(CoolError): - 'Se reporta al presentar alguna anomalia con la entrada del compilador' - - UNKNOWN_FILE = 'The file "%s" does not exist' - - @property - def error_type(self): - return 'CompilerError' - -class LexicographicError(CoolError): - 'Errores detectados por el lexer' - - UNKNOWN_TOKEN = 'Invalid token "%s"' - - @property - def error_type(self): - return 'CompilerError' - -class SyntaticError(CoolError): - 'Errores detectados en el parser' - - @property - def error_type(self): - return 'CompilerError' - -class NameError(CoolError): - 'Se reporta al referenciar a un identificador en un ambito en el que no es visible' - - USED_BEFORE_ASSIGNMENT = 'Variable "%s" used before being assigned' - - @property - def error_type(self): - return 'CompilerError' - - -class TypeError(CoolError): - 'Se reporta al detectar un problema de tipos' - - INVALID_OPERATION = 'Operation is not defined between "%s" and "%s".' - INCOMPATIBLE_TYPES = 'Cannot convert "%s" into "%s".' - #? INCORRECT_TYPE = 'Incorrect type "%s" waiting "%s"' - BOPERATION_NOT_DEFINED = '%s operations are not defined between "%s" and "%s"' - UOPERATION_NOT_DEFINED = '%s operations are not defined for "%s"' - - @property - def error_type(self): - return 'CompilerError' - - -class AttributeError(CoolError): - 'Se reporta cuando un atributo o método se referencia pero no está definido' - - VARIABLE_NOT_DEFINED = 'Variable "%s" is not defined in "%s".' - WRONG_SIGNATURE = 'Method "%s" already defined in "%s" with a different signature.' - - @property - def error_type(self): - return 'CompilerError' - -class SemanticError(CoolError): - 'Otros errores semanticos' - - SELF_IS_READONLY = 'Variable "self" is read-only.' - LOCAL_ALREADY_DEFINED = 'Variable "%s" is already defined in method "%s".' - CIRCULAR_DEPENDENCY = 'Circular dependency between %s and %s' - MISSING_PARAMETER = 'Missing argument "%s" in function call "%s"' - TOO_MANY_ARGUMENTS = 'Too many arguments for function call "%s"' - - @property - def error_type(self): - return 'CompilerError' +class CoolError(Exception): + def __init__(self, text, line, column): + super().__init__(text) + self.line = line + self.column = column + + @property + def error_type(self): + return 'CoolError' + + @property + def text(self): + return self.args[0] + + def __str__(self): + return f'({self.line}, {self.column}) - {self.error_type}: {self.text}' + + def __repr__(self): + return str(self) + +class CompilerError(CoolError): + 'Se reporta al presentar alguna anomalia con la entrada del compilador' + + UNKNOWN_FILE = 'The file "%s" does not exist' + + @property + def error_type(self): + return 'CompilerError' + +class LexicographicError(CoolError): + 'Errores detectados por el lexer' + + UNKNOWN_TOKEN = 'ERROR "%s"' + UNDETERMINATED_STRING = 'Undeterminated string constant' + EOF_COMMENT = 'EOF in comment' + EOF_STRING = 'EOF in string constant' + + @property + def error_type(self): + return 'LexicographicError' + +class SyntaticError(CoolError): + 'Errores detectados en el parser' + + ERROR = 'ERROR at or near "%s"' + + @property + def error_type(self): + return 'SyntaticError' + +class NameError(CoolError): + 'Se reporta al referenciar a un identificador en un ambito en el que no es visible' + + USED_BEFORE_ASSIGNMENT = 'Variable "%s" used before being assigned' + + @property + def error_type(self): + return 'NameError' + + +class TypeError(CoolError): + 'Se reporta al detectar un problema de tipos' + + INVALID_OPERATION = 'Operation is not defined between "%s" and "%s".' + INCOMPATIBLE_TYPES = 'Cannot convert "%s" into "%s".' + #? INCORRECT_TYPE = 'Incorrect type "%s" waiting "%s"' + BOPERATION_NOT_DEFINED = '%s operations are not defined between "%s" and "%s"' + UOPERATION_NOT_DEFINED = '%s operations are not defined for "%s"' + + @property + def error_type(self): + return 'TypeError' + + +class AttributeError(CoolError): + 'Se reporta cuando un atributo o método se referencia pero no está definido' + + VARIABLE_NOT_DEFINED = 'Variable "%s" is not defined in "%s".' + WRONG_SIGNATURE = 'Method "%s" already defined in "%s" with a different signature.' + + @property + def error_type(self): + return 'AttributeError' + +class SemanticError(CoolError): + 'Otros errores semanticos' + + SELF_IS_READONLY = 'Variable "self" is read-only.' + LOCAL_ALREADY_DEFINED = 'Variable "%s" is already defined in method "%s".' + CIRCULAR_DEPENDENCY = 'Circular dependency between %s and %s' + MISSING_PARAMETER = 'Missing argument "%s" in function call "%s"' + TOO_MANY_ARGUMENTS = 'Too many arguments for function call "%s"' + + @property + def error_type(self): + return 'SemanticError' \ No newline at end of file diff --git a/src/tools/tokens.py b/src/tools/tokens.py index 99e79f39..73169a87 100644 --- a/src/tools/tokens.py +++ b/src/tools/tokens.py @@ -1,61 +1,61 @@ -reserved = { - 'class': 'class', - 'else': 'else', - 'false': 'false', - 'fi': 'fi', - 'if': 'if', - 'in': 'in', - 'inherits': 'inherits', - 'isvoid': 'isvoid', - 'let': 'let', - 'loop': 'loop', - 'pool': 'pool', - 'then': 'then', - 'while': 'while', - 'case': 'case', - 'esac': 'esac', - 'new': 'new', - 'of': 'of', - 'not': 'not', - 'true': 'true', - 'def': 'def', - 'print': 'print' -} - -tokens = [ - 'semi', # '; ' - 'colon', # ': ' - 'comma', # ', ' - 'dot', # '. ' - 'opar', # '( ' - 'cpar', # ') ' - 'ocur', # '{' - 'ccur', # '} ' - 'larrow', # '<-' - 'arroba', # '@' - 'rarrow', # '=> ' - 'nox', # '~' - 'equal', # '=' - 'plus', # '+' - 'minus', # '-' - 'star', # '\*' - 'div', # '/ ' - 'less', # '<' - 'lesseq', # '<=' - 'id', - 'num', - 'string' -] + list(reserved.values()) - -class Token: - def __init__(self, lex, type_, lineno, pos): - self.lex = lex - self.type = type_ - self.lineno = lineno - self.pos = pos - - def __str__(self): - return f'{self.type}: {self.lex} ({self.lineno}, {self.pos})' - - def __repr__(self): +reserved = { + 'class': 'class', + 'else': 'else', + 'false': 'false', + 'fi': 'fi', + 'if': 'if', + 'in': 'in', + 'inherits': 'inherits', + 'isvoid': 'isvoid', + 'let': 'let', + 'loop': 'loop', + 'pool': 'pool', + 'then': 'then', + 'while': 'while', + 'case': 'case', + 'esac': 'esac', + 'new': 'new', + 'of': 'of', + 'not': 'not', + 'true': 'true', + 'def': 'def', + 'print': 'print' +} + +tokens = [ + 'semi', # '; ' + 'colon', # ': ' + 'comma', # ', ' + 'dot', # '. ' + 'opar', # '( ' + 'cpar', # ') ' + 'ocur', # '{' + 'ccur', # '} ' + 'larrow', # '<-' + 'arroba', # '@' + 'rarrow', # '=> ' + 'nox', # '~' + 'equal', # '=' + 'plus', # '+' + 'minus', # '-' + 'star', # '\*' + 'div', # '/ ' + 'less', # '<' + 'lesseq', # '<=' + 'id', + 'num', + 'string' +] + list(reserved.values()) + +class Token: + def __init__(self, lex, type_, lineno, pos): + self.lex = lex + self.type = type_ + self.lineno = lineno + self.pos = pos + + def __str__(self): + return f'{self.type}: {self.lex} ({self.lineno}, {self.pos})' + + def __repr__(self): return str(self) \ No newline at end of file diff --git a/src/tokens.py b/src/utils/tokens.py similarity index 95% rename from src/tokens.py rename to src/utils/tokens.py index a7fd88ae..3e5bac26 100644 --- a/src/tokens.py +++ b/src/utils/tokens.py @@ -1,62 +1,62 @@ -reserved = { - 'class': 'class', - 'else': 'else', - 'false': 'false', - 'fi': 'fi', - 'if': 'if', - 'in': 'in', - 'inherits': 'inherits', - 'isvoid': 'isvoid', - 'let': 'let', - 'loop': 'loop', - 'pool': 'pool', - 'then': 'then', - 'while': 'while', - 'case': 'case', - 'esac': 'esac', - 'new': 'new', - 'of': 'of', - 'not': 'not', - 'true': 'true', - 'print': 'print', - 'inherits' : 'inherits' -} - -tokens = [ - 'semi', # '; ' - 'colon', # ': ' - 'comma', # ', ' - 'dot', # '. ' - 'opar', # '( ' - 'cpar', # ') ' - 'ocur', # '{' - 'ccur', # '} ' - 'larrow', # '<-' - 'arroba', # '@' - 'rarrow', # '=> ' - 'nox', # '~' - 'equal', # '=' - 'plus', # '+' - 'minus', # '-' - 'star', # '\*' - 'div', # '/ ' - 'less', # '<' - 'lesseq', # '<=' - 'id', - 'of', - 'num', - 'string' -] + list(reserved.values()) - -class Token: - def __init__(self, lex, type_, lineno, pos): - self.lex = lex - self.type = type_ - self.lineno = lineno - self.pos = pos - - def __str__(self): - return f'{self.type}: {self.lex} ({self.lineno}, {self.pos})' - - def __repr__(self): +reserved = { + 'class': 'class', + 'else': 'else', + 'false': 'false', + 'fi': 'fi', + 'if': 'if', + 'in': 'in', + 'inherits': 'inherits', + 'isvoid': 'isvoid', + 'let': 'let', + 'loop': 'loop', + 'pool': 'pool', + 'then': 'then', + 'while': 'while', + 'case': 'case', + 'esac': 'esac', + 'new': 'new', + 'of': 'of', + 'not': 'not', + 'true': 'true', + 'print': 'print', + 'inherits' : 'inherits' +} + +tokens = [ + 'semi', # '; ' + 'colon', # ': ' + 'comma', # ', ' + 'dot', # '. ' + 'opar', # '( ' + 'cpar', # ') ' + 'ocur', # '{' + 'ccur', # '} ' + 'larrow', # '<-' + 'arroba', # '@' + 'rarrow', # '=> ' + 'nox', # '~' + 'equal', # '=' + 'plus', # '+' + 'minus', # '-' + 'star', # '\*' + 'div', # '/ ' + 'less', # '<' + 'lesseq', # '<=' + 'id', + 'of', + 'num', + 'string' +] + list(reserved.values()) + +class Token: + def __init__(self, lex, type_, lineno, pos): + self.lex = lex + self.type = type_ + self.lineno = lineno + self.pos = pos + + def __str__(self): + return f'{self.type}: {self.lex} ({self.lineno}, {self.pos})' + + def __repr__(self): return str(self) \ No newline at end of file diff --git a/tests/codegen/arith.cl b/tests/codegen/arith.cl index af5951cf..0d9f5dd3 100755 --- a/tests/codegen/arith.cl +++ b/tests/codegen/arith.cl @@ -1,430 +1,430 @@ -(* - * A contribution from Anne Sheets (sheets@cory) - * - * Tests the arithmetic operations and various other things - *) - -class A { - - var : Int <- 0; - - value() : Int { var }; - - set_var(num : Int) : A{ - { - var <- num; - self; - } - }; - - method1(num : Int) : A { -- same - self - }; - - method2(num1 : Int, num2 : Int) : A { -- plus - (let x : Int in - { - x <- num1 + num2; - (new B).set_var(x); - } - ) - }; - - method3(num : Int) : A { -- negate - (let x : Int in - { - x <- ~num; - (new C).set_var(x); - } - ) - }; - - method4(num1 : Int, num2 : Int) : A { -- diff - if num2 < num1 then - (let x : Int in - { - x <- num1 - num2; - (new D).set_var(x); - } - ) - else - (let x : Int in - { - x <- num2 - num1; - (new D).set_var(x); - } - ) - fi - }; - - method5(num : Int) : A { -- factorial - (let x : Int <- 1 in - { - (let y : Int <- 1 in - while y <= num loop - { - x <- x * y; - y <- y + 1; - } - pool - ); - (new E).set_var(x); - } - ) - }; - -}; - -class B inherits A { -- B is a number squared - - method5(num : Int) : A { -- square - (let x : Int in - { - x <- num * num; - (new E).set_var(x); - } - ) - }; - -}; - -class C inherits B { - - method6(num : Int) : A { -- negate - (let x : Int in - { - x <- ~num; - (new A).set_var(x); - } - ) - }; - - method5(num : Int) : A { -- cube - (let x : Int in - { - x <- num * num * num; - (new E).set_var(x); - } - ) - }; - -}; - -class D inherits B { - - method7(num : Int) : Bool { -- divisible by 3 - (let x : Int <- num in - if x < 0 then method7(~x) else - if 0 = x then true else - if 1 = x then false else - if 2 = x then false else - method7(x - 3) - fi fi fi fi - ) - }; - -}; - -class E inherits D { - - method6(num : Int) : A { -- division - (let x : Int in - { - x <- num / 8; - (new A).set_var(x); - } - ) - }; - -}; - -(* The following code is from atoi.cl in ~cs164/examples *) - -(* - The class A2I provides integer-to-string and string-to-integer -conversion routines. To use these routines, either inherit them -in the class where needed, have a dummy variable bound to -something of type A2I, or simpl write (new A2I).method(argument). -*) - - -(* - c2i Converts a 1-character string to an integer. Aborts - if the string is not "0" through "9" -*) -class A2I { - - c2i(char : String) : Int { - if char = "0" then 0 else - if char = "1" then 1 else - if char = "2" then 2 else - if char = "3" then 3 else - if char = "4" then 4 else - if char = "5" then 5 else - if char = "6" then 6 else - if char = "7" then 7 else - if char = "8" then 8 else - if char = "9" then 9 else - { abort(); 0; } (* the 0 is needed to satisfy the - typchecker *) - fi fi fi fi fi fi fi fi fi fi - }; - -(* - i2c is the inverse of c2i. -*) - i2c(i : Int) : String { - if i = 0 then "0" else - if i = 1 then "1" else - if i = 2 then "2" else - if i = 3 then "3" else - if i = 4 then "4" else - if i = 5 then "5" else - if i = 6 then "6" else - if i = 7 then "7" else - if i = 8 then "8" else - if i = 9 then "9" else - { abort(); ""; } -- the "" is needed to satisfy the typchecker - fi fi fi fi fi fi fi fi fi fi - }; - -(* - a2i converts an ASCII string into an integer. The empty string -is converted to 0. Signed and unsigned strings are handled. The -method aborts if the string does not represent an integer. Very -long strings of digits produce strange answers because of arithmetic -overflow. - -*) - a2i(s : String) : Int { - if s.length() = 0 then 0 else - if s.substr(0,1) = "-" then ~a2i_aux(s.substr(1,s.length()-1)) else - if s.substr(0,1) = "+" then a2i_aux(s.substr(1,s.length()-1)) else - a2i_aux(s) - fi fi fi - }; - -(* a2i_aux converts the usigned portion of the string. As a - programming example, this method is written iteratively. *) - - - a2i_aux(s : String) : Int { - (let int : Int <- 0 in - { - (let j : Int <- s.length() in - (let i : Int <- 0 in - while i < j loop - { - int <- int * 10 + c2i(s.substr(i,1)); - i <- i + 1; - } - pool - ) - ); - int; - } - ) - }; - -(* i2a converts an integer to a string. Positive and negative - numbers are handled correctly. *) - - i2a(i : Int) : String { - if i = 0 then "0" else - if 0 < i then i2a_aux(i) else - "-".concat(i2a_aux(i * ~1)) - fi fi - }; - -(* i2a_aux is an example using recursion. *) - - i2a_aux(i : Int) : String { - if i = 0 then "" else - (let next : Int <- i / 10 in - i2a_aux(next).concat(i2c(i - next * 10)) - ) - fi - }; - -}; - -class Main inherits IO { - - char : String; - avar : A; - a_var : A; - flag : Bool <- true; - - - menu() : String { - { - out_string("\n\tTo add a number to "); - print(avar); - out_string("...enter a:\n"); - out_string("\tTo negate "); - print(avar); - out_string("...enter b:\n"); - out_string("\tTo find the difference between "); - print(avar); - out_string("and another number...enter c:\n"); - out_string("\tTo find the factorial of "); - print(avar); - out_string("...enter d:\n"); - out_string("\tTo square "); - print(avar); - out_string("...enter e:\n"); - out_string("\tTo cube "); - print(avar); - out_string("...enter f:\n"); - out_string("\tTo find out if "); - print(avar); - out_string("is a multiple of 3...enter g:\n"); - out_string("\tTo divide "); - print(avar); - out_string("by 8...enter h:\n"); - out_string("\tTo get a new number...enter j:\n"); - out_string("\tTo quit...enter q:\n\n"); - in_string(); - } - }; - - prompt() : String { - { - out_string("\n"); - out_string("Please enter a number... "); - in_string(); - } - }; - - get_int() : Int { - { - (let z : A2I <- new A2I in - (let s : String <- prompt() in - z.a2i(s) - ) - ); - } - }; - - is_even(num : Int) : Bool { - (let x : Int <- num in - if x < 0 then is_even(~x) else - if 0 = x then true else - if 1 = x then false else - is_even(x - 2) - fi fi fi - ) - }; - - class_type(var : A) : IO { - case var of - a : A => out_string("Class type is now A\n"); - b : B => out_string("Class type is now B\n"); - c : C => out_string("Class type is now C\n"); - d : D => out_string("Class type is now D\n"); - e : E => out_string("Class type is now E\n"); - o : Object => out_string("Oooops\n"); - esac - }; - - print(var : A) : IO { - (let z : A2I <- new A2I in - { - out_string(z.i2a(var.value())); - out_string(" "); - } - ) - }; - - main() : Object { - { - avar <- (new A); - while flag loop - { - -- avar <- (new A).set_var(get_int()); - out_string("number "); - print(avar); - if is_even(avar.value()) then - out_string("is even!\n") - else - out_string("is odd!\n") - fi; - -- print(avar); -- prints out answer - class_type(avar); - char <- menu(); - if char = "a" then -- add - { - a_var <- (new A).set_var(get_int()); - avar <- (new B).method2(avar.value(), a_var.value()); - } else - if char = "b" then -- negate - case avar of - c : C => avar <- c.method6(c.value()); - a : A => avar <- a.method3(a.value()); - o : Object => { - out_string("Oooops\n"); - abort(); 0; - }; - esac else - if char = "c" then -- diff - { - a_var <- (new A).set_var(get_int()); - avar <- (new D).method4(avar.value(), a_var.value()); - } else - if char = "d" then avar <- (new C)@A.method5(avar.value()) else - -- factorial - if char = "e" then avar <- (new C)@B.method5(avar.value()) else - -- square - if char = "f" then avar <- (new C)@C.method5(avar.value()) else - -- cube - if char = "g" then -- multiple of 3? - if ((new D).method7(avar.value())) - then -- avar <- (new A).method1(avar.value()) - { - out_string("number "); - print(avar); - out_string("is divisible by 3.\n"); - } - else -- avar <- (new A).set_var(0) - { - out_string("number "); - print(avar); - out_string("is not divisible by 3.\n"); - } - fi else - if char = "h" then - (let x : A in - { - x <- (new E).method6(avar.value()); - (let r : Int <- (avar.value() - (x.value() * 8)) in - { - out_string("number "); - print(avar); - out_string("is equal to "); - print(x); - out_string("times 8 with a remainder of "); - (let a : A2I <- new A2I in - { - out_string(a.i2a(r)); - out_string("\n"); - } - ); -- end let a: - } - ); -- end let r: - avar <- x; - } - ) -- end let x: - else - if char = "j" then avar <- (new A) - else - if char = "q" then flag <- false - else - avar <- (new A).method1(avar.value()) -- divide/8 - fi fi fi fi fi fi fi fi fi fi; - } - pool; - } - }; - -}; - +(* + * A contribution from Anne Sheets (sheets@cory) + * + * Tests the arithmetic operations and various other things + *) + +class A { + + var : Int <- 0; + + value() : Int { var }; + + set_var(num : Int) : A{ + { + var <- num; + self; + } + }; + + method1(num : Int) : A { -- same + self + }; + + method2(num1 : Int, num2 : Int) : A { -- plus + (let x : Int in + { + x <- num1 + num2; + (new B).set_var(x); + } + ) + }; + + method3(num : Int) : A { -- negate + (let x : Int in + { + x <- ~num; + (new C).set_var(x); + } + ) + }; + + method4(num1 : Int, num2 : Int) : A { -- diff + if num2 < num1 then + (let x : Int in + { + x <- num1 - num2; + (new D).set_var(x); + } + ) + else + (let x : Int in + { + x <- num2 - num1; + (new D).set_var(x); + } + ) + fi + }; + + method5(num : Int) : A { -- factorial + (let x : Int <- 1 in + { + (let y : Int <- 1 in + while y <= num loop + { + x <- x * y; + y <- y + 1; + } + pool + ); + (new E).set_var(x); + } + ) + }; + +}; + +class B inherits A { -- B is a number squared + + method5(num : Int) : A { -- square + (let x : Int in + { + x <- num * num; + (new E).set_var(x); + } + ) + }; + +}; + +class C inherits B { + + method6(num : Int) : A { -- negate + (let x : Int in + { + x <- ~num; + (new A).set_var(x); + } + ) + }; + + method5(num : Int) : A { -- cube + (let x : Int in + { + x <- num * num * num; + (new E).set_var(x); + } + ) + }; + +}; + +class D inherits B { + + method7(num : Int) : Bool { -- divisible by 3 + (let x : Int <- num in + if x < 0 then method7(~x) else + if 0 = x then true else + if 1 = x then false else + if 2 = x then false else + method7(x - 3) + fi fi fi fi + ) + }; + +}; + +class E inherits D { + + method6(num : Int) : A { -- division + (let x : Int in + { + x <- num / 8; + (new A).set_var(x); + } + ) + }; + +}; + +(* The following code is from atoi.cl in ~cs164/examples *) + +(* + The class A2I provides integer-to-string and string-to-integer +conversion routines. To use these routines, either inherit them +in the class where needed, have a dummy variable bound to +something of type A2I, or simpl write (new A2I).method(argument). +*) + + +(* + c2i Converts a 1-character string to an integer. Aborts + if the string is not "0" through "9" +*) +class A2I { + + c2i(char : String) : Int { + if char = "0" then 0 else + if char = "1" then 1 else + if char = "2" then 2 else + if char = "3" then 3 else + if char = "4" then 4 else + if char = "5" then 5 else + if char = "6" then 6 else + if char = "7" then 7 else + if char = "8" then 8 else + if char = "9" then 9 else + { abort(); 0; } (* the 0 is needed to satisfy the + typchecker *) + fi fi fi fi fi fi fi fi fi fi + }; + +(* + i2c is the inverse of c2i. +*) + i2c(i : Int) : String { + if i = 0 then "0" else + if i = 1 then "1" else + if i = 2 then "2" else + if i = 3 then "3" else + if i = 4 then "4" else + if i = 5 then "5" else + if i = 6 then "6" else + if i = 7 then "7" else + if i = 8 then "8" else + if i = 9 then "9" else + { abort(); ""; } -- the "" is needed to satisfy the typchecker + fi fi fi fi fi fi fi fi fi fi + }; + +(* + a2i converts an ASCII string into an integer. The empty string +is converted to 0. Signed and unsigned strings are handled. The +method aborts if the string does not represent an integer. Very +long strings of digits produce strange answers because of arithmetic +overflow. + +*) + a2i(s : String) : Int { + if s.length() = 0 then 0 else + if s.substr(0,1) = "-" then ~a2i_aux(s.substr(1,s.length()-1)) else + if s.substr(0,1) = "+" then a2i_aux(s.substr(1,s.length()-1)) else + a2i_aux(s) + fi fi fi + }; + +(* a2i_aux converts the usigned portion of the string. As a + programming example, this method is written iteratively. *) + + + a2i_aux(s : String) : Int { + (let int : Int <- 0 in + { + (let j : Int <- s.length() in + (let i : Int <- 0 in + while i < j loop + { + int <- int * 10 + c2i(s.substr(i,1)); + i <- i + 1; + } + pool + ) + ); + int; + } + ) + }; + +(* i2a converts an integer to a string. Positive and negative + numbers are handled correctly. *) + + i2a(i : Int) : String { + if i = 0 then "0" else + if 0 < i then i2a_aux(i) else + "-".concat(i2a_aux(i * ~1)) + fi fi + }; + +(* i2a_aux is an example using recursion. *) + + i2a_aux(i : Int) : String { + if i = 0 then "" else + (let next : Int <- i / 10 in + i2a_aux(next).concat(i2c(i - next * 10)) + ) + fi + }; + +}; + +class Main inherits IO { + + char : String; + avar : A; + a_var : A; + flag : Bool <- true; + + + menu() : String { + { + out_string("\n\tTo add a number to "); + print(avar); + out_string("...enter a:\n"); + out_string("\tTo negate "); + print(avar); + out_string("...enter b:\n"); + out_string("\tTo find the difference between "); + print(avar); + out_string("and another number...enter c:\n"); + out_string("\tTo find the factorial of "); + print(avar); + out_string("...enter d:\n"); + out_string("\tTo square "); + print(avar); + out_string("...enter e:\n"); + out_string("\tTo cube "); + print(avar); + out_string("...enter f:\n"); + out_string("\tTo find out if "); + print(avar); + out_string("is a multiple of 3...enter g:\n"); + out_string("\tTo divide "); + print(avar); + out_string("by 8...enter h:\n"); + out_string("\tTo get a new number...enter j:\n"); + out_string("\tTo quit...enter q:\n\n"); + in_string(); + } + }; + + prompt() : String { + { + out_string("\n"); + out_string("Please enter a number... "); + in_string(); + } + }; + + get_int() : Int { + { + (let z : A2I <- new A2I in + (let s : String <- prompt() in + z.a2i(s) + ) + ); + } + }; + + is_even(num : Int) : Bool { + (let x : Int <- num in + if x < 0 then is_even(~x) else + if 0 = x then true else + if 1 = x then false else + is_even(x - 2) + fi fi fi + ) + }; + + class_type(var : A) : IO { + case var of + a : A => out_string("Class type is now A\n"); + b : B => out_string("Class type is now B\n"); + c : C => out_string("Class type is now C\n"); + d : D => out_string("Class type is now D\n"); + e : E => out_string("Class type is now E\n"); + o : Object => out_string("Oooops\n"); + esac + }; + + print(var : A) : IO { + (let z : A2I <- new A2I in + { + out_string(z.i2a(var.value())); + out_string(" "); + } + ) + }; + + main() : Object { + { + avar <- (new A); + while flag loop + { + -- avar <- (new A).set_var(get_int()); + out_string("number "); + print(avar); + if is_even(avar.value()) then + out_string("is even!\n") + else + out_string("is odd!\n") + fi; + -- print(avar); -- prints out answer + class_type(avar); + char <- menu(); + if char = "a" then -- add + { + a_var <- (new A).set_var(get_int()); + avar <- (new B).method2(avar.value(), a_var.value()); + } else + if char = "b" then -- negate + case avar of + c : C => avar <- c.method6(c.value()); + a : A => avar <- a.method3(a.value()); + o : Object => { + out_string("Oooops\n"); + abort(); 0; + }; + esac else + if char = "c" then -- diff + { + a_var <- (new A).set_var(get_int()); + avar <- (new D).method4(avar.value(), a_var.value()); + } else + if char = "d" then avar <- (new C)@A.method5(avar.value()) else + -- factorial + if char = "e" then avar <- (new C)@B.method5(avar.value()) else + -- square + if char = "f" then avar <- (new C)@C.method5(avar.value()) else + -- cube + if char = "g" then -- multiple of 3? + if ((new D).method7(avar.value())) + then -- avar <- (new A).method1(avar.value()) + { + out_string("number "); + print(avar); + out_string("is divisible by 3.\n"); + } + else -- avar <- (new A).set_var(0) + { + out_string("number "); + print(avar); + out_string("is not divisible by 3.\n"); + } + fi else + if char = "h" then + (let x : A in + { + x <- (new E).method6(avar.value()); + (let r : Int <- (avar.value() - (x.value() * 8)) in + { + out_string("number "); + print(avar); + out_string("is equal to "); + print(x); + out_string("times 8 with a remainder of "); + (let a : A2I <- new A2I in + { + out_string(a.i2a(r)); + out_string("\n"); + } + ); -- end let a: + } + ); -- end let r: + avar <- x; + } + ) -- end let x: + else + if char = "j" then avar <- (new A) + else + if char = "q" then flag <- false + else + avar <- (new A).method1(avar.value()) -- divide/8 + fi fi fi fi fi fi fi fi fi fi; + } + pool; + } + }; + +}; + diff --git a/tests/codegen/book_list.cl b/tests/codegen/book_list.cl index 025ea169..d39f86bb 100755 --- a/tests/codegen/book_list.cl +++ b/tests/codegen/book_list.cl @@ -1,132 +1,132 @@ --- example of static and dynamic type differing for a dispatch - -Class Book inherits IO { - title : String; - author : String; - - initBook(title_p : String, author_p : String) : Book { - { - title <- title_p; - author <- author_p; - self; - } - }; - - print() : Book { - { - out_string("title: ").out_string(title).out_string("\n"); - out_string("author: ").out_string(author).out_string("\n"); - self; - } - }; -}; - -Class Article inherits Book { - per_title : String; - - initArticle(title_p : String, author_p : String, - per_title_p : String) : Article { - { - initBook(title_p, author_p); - per_title <- per_title_p; - self; - } - }; - - print() : Book { - { - self@Book.print(); - out_string("periodical: ").out_string(per_title).out_string("\n"); - self; - } - }; -}; - -Class BookList inherits IO { - (* Since abort "returns" type Object, we have to add - an expression of type Bool here to satisfy the typechecker. - This code is unreachable, since abort() halts the program. - *) - isNil() : Bool { { abort(); true; } }; - - cons(hd : Book) : Cons { - (let new_cell : Cons <- new Cons in - new_cell.init(hd,self) - ) - }; - - (* Since abort "returns" type Object, we have to add - an expression of type Book here to satisfy the typechecker. - This code is unreachable, since abort() halts the program. - *) - car() : Book { { abort(); new Book; } }; - - (* Since abort "returns" type Object, we have to add - an expression of type BookList here to satisfy the typechecker. - This code is unreachable, since abort() halts the program. - *) - cdr() : BookList { { abort(); new BookList; } }; - - print_list() : Object { abort() }; -}; - -Class Cons inherits BookList { - xcar : Book; -- We keep the car and cdr in attributes. - xcdr : BookList; -- Because methods and features must have different names, - -- we use xcar and xcdr for the attributes and reserve - -- car and cdr for the features. - - isNil() : Bool { false }; - - init(hd : Book, tl : BookList) : Cons { - { - xcar <- hd; - xcdr <- tl; - self; - } - }; - - car() : Book { xcar }; - - cdr() : BookList { xcdr }; - - print_list() : Object { - { - case xcar.print() of - dummy : Book => out_string("- dynamic type was Book -\n"); - dummy : Article => out_string("- dynamic type was Article -\n"); - esac; - xcdr.print_list(); - } - }; -}; - -Class Nil inherits BookList { - isNil() : Bool { true }; - - print_list() : Object { true }; -}; - - -Class Main { - - books : BookList; - - main() : Object { - (let a_book : Book <- - (new Book).initBook("Compilers, Principles, Techniques, and Tools", - "Aho, Sethi, and Ullman") - in - (let an_article : Article <- - (new Article).initArticle("The Top 100 CD_ROMs", - "Ulanoff", - "PC Magazine") - in - { - books <- (new Nil).cons(a_book).cons(an_article); - books.print_list(); - } - ) -- end let an_article - ) -- end let a_book - }; -}; +-- example of static and dynamic type differing for a dispatch + +Class Book inherits IO { + title : String; + author : String; + + initBook(title_p : String, author_p : String) : Book { + { + title <- title_p; + author <- author_p; + self; + } + }; + + print() : Book { + { + out_string("title: ").out_string(title).out_string("\n"); + out_string("author: ").out_string(author).out_string("\n"); + self; + } + }; +}; + +Class Article inherits Book { + per_title : String; + + initArticle(title_p : String, author_p : String, + per_title_p : String) : Article { + { + initBook(title_p, author_p); + per_title <- per_title_p; + self; + } + }; + + print() : Book { + { + self@Book.print(); + out_string("periodical: ").out_string(per_title).out_string("\n"); + self; + } + }; +}; + +Class BookList inherits IO { + (* Since abort "returns" type Object, we have to add + an expression of type Bool here to satisfy the typechecker. + This code is unreachable, since abort() halts the program. + *) + isNil() : Bool { { abort(); true; } }; + + cons(hd : Book) : Cons { + (let new_cell : Cons <- new Cons in + new_cell.init(hd,self) + ) + }; + + (* Since abort "returns" type Object, we have to add + an expression of type Book here to satisfy the typechecker. + This code is unreachable, since abort() halts the program. + *) + car() : Book { { abort(); new Book; } }; + + (* Since abort "returns" type Object, we have to add + an expression of type BookList here to satisfy the typechecker. + This code is unreachable, since abort() halts the program. + *) + cdr() : BookList { { abort(); new BookList; } }; + + print_list() : Object { abort() }; +}; + +Class Cons inherits BookList { + xcar : Book; -- We keep the car and cdr in attributes. + xcdr : BookList; -- Because methods and features must have different names, + -- we use xcar and xcdr for the attributes and reserve + -- car and cdr for the features. + + isNil() : Bool { false }; + + init(hd : Book, tl : BookList) : Cons { + { + xcar <- hd; + xcdr <- tl; + self; + } + }; + + car() : Book { xcar }; + + cdr() : BookList { xcdr }; + + print_list() : Object { + { + case xcar.print() of + dummy : Book => out_string("- dynamic type was Book -\n"); + dummy : Article => out_string("- dynamic type was Article -\n"); + esac; + xcdr.print_list(); + } + }; +}; + +Class Nil inherits BookList { + isNil() : Bool { true }; + + print_list() : Object { true }; +}; + + +Class Main { + + books : BookList; + + main() : Object { + (let a_book : Book <- + (new Book).initBook("Compilers, Principles, Techniques, and Tools", + "Aho, Sethi, and Ullman") + in + (let an_article : Article <- + (new Article).initArticle("The Top 100 CD_ROMs", + "Ulanoff", + "PC Magazine") + in + { + books <- (new Nil).cons(a_book).cons(an_article); + books.print_list(); + } + ) -- end let an_article + ) -- end let a_book + }; +}; diff --git a/tests/codegen/cells.cl b/tests/codegen/cells.cl index 9fd6741b..bcd89149 100755 --- a/tests/codegen/cells.cl +++ b/tests/codegen/cells.cl @@ -1,97 +1,97 @@ -(* models one-dimensional cellular automaton on a circle of finite radius - arrays are faked as Strings, - X's respresent live cells, dots represent dead cells, - no error checking is done *) -class CellularAutomaton inherits IO { - population_map : String; - - init(map : String) : CellularAutomaton { - { - population_map <- map; - self; - } - }; - - print() : CellularAutomaton { - { - out_string(population_map.concat("\n")); - self; - } - }; - - num_cells() : Int { - population_map.length() - }; - - cell(position : Int) : String { - population_map.substr(position, 1) - }; - - cell_left_neighbor(position : Int) : String { - if position = 0 then - cell(num_cells() - 1) - else - cell(position - 1) - fi - }; - - cell_right_neighbor(position : Int) : String { - if position = num_cells() - 1 then - cell(0) - else - cell(position + 1) - fi - }; - - (* a cell will live if exactly 1 of itself and it's immediate - neighbors are alive *) - cell_at_next_evolution(position : Int) : String { - if (if cell(position) = "X" then 1 else 0 fi - + if cell_left_neighbor(position) = "X" then 1 else 0 fi - + if cell_right_neighbor(position) = "X" then 1 else 0 fi - = 1) - then - "X" - else - "." - fi - }; - - evolve() : CellularAutomaton { - (let position : Int in - (let num : Int <- num_cells() in - (let temp : String in - { - while position < num loop - { - temp <- temp.concat(cell_at_next_evolution(position)); - position <- position + 1; - } - pool; - population_map <- temp; - self; - } - ) ) ) - }; -}; - -class Main { - cells : CellularAutomaton; - - main() : Main { - { - cells <- (new CellularAutomaton).init(" X "); - cells.print(); - (let countdown : Int <- 20 in - while 0 < countdown loop - { - cells.evolve(); - cells.print(); - countdown <- countdown - 1; - } - pool - ); - self; - } - }; -}; +(* models one-dimensional cellular automaton on a circle of finite radius + arrays are faked as Strings, + X's respresent live cells, dots represent dead cells, + no error checking is done *) +class CellularAutomaton inherits IO { + population_map : String; + + init(map : String) : CellularAutomaton { + { + population_map <- map; + self; + } + }; + + print() : CellularAutomaton { + { + out_string(population_map.concat("\n")); + self; + } + }; + + num_cells() : Int { + population_map.length() + }; + + cell(position : Int) : String { + population_map.substr(position, 1) + }; + + cell_left_neighbor(position : Int) : String { + if position = 0 then + cell(num_cells() - 1) + else + cell(position - 1) + fi + }; + + cell_right_neighbor(position : Int) : String { + if position = num_cells() - 1 then + cell(0) + else + cell(position + 1) + fi + }; + + (* a cell will live if exactly 1 of itself and it's immediate + neighbors are alive *) + cell_at_next_evolution(position : Int) : String { + if (if cell(position) = "X" then 1 else 0 fi + + if cell_left_neighbor(position) = "X" then 1 else 0 fi + + if cell_right_neighbor(position) = "X" then 1 else 0 fi + = 1) + then + "X" + else + "." + fi + }; + + evolve() : CellularAutomaton { + (let position : Int in + (let num : Int <- num_cells() in + (let temp : String in + { + while position < num loop + { + temp <- temp.concat(cell_at_next_evolution(position)); + position <- position + 1; + } + pool; + population_map <- temp; + self; + } + ) ) ) + }; +}; + +class Main { + cells : CellularAutomaton; + + main() : Main { + { + cells <- (new CellularAutomaton).init(" X "); + cells.print(); + (let countdown : Int <- 20 in + while 0 < countdown loop + { + cells.evolve(); + cells.print(); + countdown <- countdown - 1; + } + pool + ); + self; + } + }; +}; diff --git a/tests/codegen/complex.cl b/tests/codegen/complex.cl index 0b7aa44e..9edb6151 100755 --- a/tests/codegen/complex.cl +++ b/tests/codegen/complex.cl @@ -1,52 +1,52 @@ -class Main inherits IO { - main() : IO { - (let c : Complex <- (new Complex).init(1, 1) in - if c.reflect_X().reflect_Y() = c.reflect_0() - then out_string("=)\n") - else out_string("=(\n") - fi - ) - }; -}; - -class Complex inherits IO { - x : Int; - y : Int; - - init(a : Int, b : Int) : Complex { - { - x = a; - y = b; - self; - } - }; - - print() : Object { - if y = 0 - then out_int(x) - else out_int(x).out_string("+").out_int(y).out_string("I") - fi - }; - - reflect_0() : Complex { - { - x = ~x; - y = ~y; - self; - } - }; - - reflect_X() : Complex { - { - y = ~y; - self; - } - }; - - reflect_Y() : Complex { - { - x = ~x; - self; - } - }; -}; +class Main inherits IO { + main() : IO { + (let c : Complex <- (new Complex).init(1, 1) in + if c.reflect_X().reflect_Y() = c.reflect_0() + then out_string("=)\n") + else out_string("=(\n") + fi + ) + }; +}; + +class Complex inherits IO { + x : Int; + y : Int; + + init(a : Int, b : Int) : Complex { + { + x = a; + y = b; + self; + } + }; + + print() : Object { + if y = 0 + then out_int(x) + else out_int(x).out_string("+").out_int(y).out_string("I") + fi + }; + + reflect_0() : Complex { + { + x = ~x; + y = ~y; + self; + } + }; + + reflect_X() : Complex { + { + y = ~y; + self; + } + }; + + reflect_Y() : Complex { + { + x = ~x; + self; + } + }; +}; diff --git a/tests/codegen/fib.cl b/tests/codegen/fib.cl index 08ceaede..ced8cee4 100644 --- a/tests/codegen/fib.cl +++ b/tests/codegen/fib.cl @@ -1,29 +1,29 @@ -class Main inherits IO { - -- the class has features. Only methods in this case. - main(): Object { - { - out_string("Enter n to find nth fibonacci number!\n"); - out_int(fib(in_int())); - out_string("\n"); - } - }; - - fib(i : Int) : Int { -- list of formals. And the return type of the method. - let a : Int <- 1, - b : Int <- 0, - c : Int <- 0 - in - { - while (not (i = 0)) loop -- expressions are nested. - { - c <- a + b; - i <- i - 1; - b <- a; - a <- c; - } - pool; - c; - } - }; - -}; +class Main inherits IO { + -- the class has features. Only methods in this case. + main(): Object { + { + out_string("Enter n to find nth fibonacci number!\n"); + out_int(fib(in_int())); + out_string("\n"); + } + }; + + fib(i : Int) : Int { -- list of formals. And the return type of the method. + let a : Int <- 1, + b : Int <- 0, + c : Int <- 0 + in + { + while (not (i = 0)) loop -- expressions are nested. + { + c <- a + b; + i <- i - 1; + b <- a; + a <- c; + } + pool; + c; + } + }; + +}; diff --git a/tests/codegen/graph.cl b/tests/codegen/graph.cl index 8e511358..59e29bbf 100755 --- a/tests/codegen/graph.cl +++ b/tests/codegen/graph.cl @@ -1,381 +1,381 @@ -(* - * Cool program reading descriptions of weighted directed graphs - * from stdin. It builds up a graph objects with a list of vertices - * and a list of edges. Every vertice has a list of outgoing edges. - * - * INPUT FORMAT - * Every line has the form vertice successor* - * Where vertice is an int, and successor is vertice,weight - * - * An empty line or EOF terminates the input. - * - * The list of vertices and the edge list is printed out by the Main - * class. - * - * TEST - * Once compiled, the file g1.graph can be fed to the program. - * The output should look like this: - -nautilus.CS.Berkeley.EDU 53# spim -file graph.s (new Bar); - n : Foo => (new Razz); - n : Bar => n; - esac; - - b : Int <- a.doh() + g.doh() + doh() + printh(); - - doh() : Int { (let i : Int <- h in { h <- h + 2; i; } ) }; - -}; - -class Bar inherits Razz { - - c : Int <- doh(); - - d : Object <- printh(); -}; - - -class Razz inherits Foo { - - e : Bar <- case self of - n : Razz => (new Bar); - n : Bar => n; - esac; - - f : Int <- a@Bazz.doh() + g.doh() + e.doh() + doh() + printh(); - -}; - -class Bazz inherits IO { - - h : Int <- 1; - - g : Foo <- case self of - n : Bazz => (new Foo); - n : Razz => (new Bar); - n : Foo => (new Razz); - n : Bar => n; - esac; - - i : Object <- printh(); - - printh() : Int { { out_int(h); 0; } }; - - doh() : Int { (let i: Int <- h in { h <- h + 1; i; } ) }; -}; - -(* scary . . . *) -class Main { - a : Bazz <- new Bazz; - b : Foo <- new Foo; - c : Razz <- new Razz; - d : Bar <- new Bar; - - main(): String { "do nothing" }; - -}; - - - - - +(* hairy . . .*) + +class Foo inherits Bazz { + a : Razz <- case self of + n : Razz => (new Bar); + n : Foo => (new Razz); + n : Bar => n; + esac; + + b : Int <- a.doh() + g.doh() + doh() + printh(); + + doh() : Int { (let i : Int <- h in { h <- h + 2; i; } ) }; + +}; + +class Bar inherits Razz { + + c : Int <- doh(); + + d : Object <- printh(); +}; + + +class Razz inherits Foo { + + e : Bar <- case self of + n : Razz => (new Bar); + n : Bar => n; + esac; + + f : Int <- a@Bazz.doh() + g.doh() + e.doh() + doh() + printh(); + +}; + +class Bazz inherits IO { + + h : Int <- 1; + + g : Foo <- case self of + n : Bazz => (new Foo); + n : Razz => (new Bar); + n : Foo => (new Razz); + n : Bar => n; + esac; + + i : Object <- printh(); + + printh() : Int { { out_int(h); 0; } }; + + doh() : Int { (let i: Int <- h in { h <- h + 1; i; } ) }; +}; + +(* scary . . . *) +class Main { + a : Bazz <- new Bazz; + b : Foo <- new Foo; + c : Razz <- new Razz; + d : Bar <- new Bar; + + main(): String { "do nothing" }; + +}; + + + + + diff --git a/tests/codegen/hello_world.cl b/tests/codegen/hello_world.cl index 0c818f90..b0a180a2 100755 --- a/tests/codegen/hello_world.cl +++ b/tests/codegen/hello_world.cl @@ -1,5 +1,5 @@ -class Main inherits IO { - main(): IO { - out_string("Hello, World.\n") - }; -}; +class Main inherits IO { + main(): IO { + out_string("Hello, World.\n") + }; +}; diff --git a/tests/codegen/helloworld.cl b/tests/codegen/helloworld.cl index 61d42108..41bc1d44 100644 --- a/tests/codegen/helloworld.cl +++ b/tests/codegen/helloworld.cl @@ -1,6 +1,6 @@ -class Main { - main():IO { - new IO.out_string("Hello world!\n") - }; -}; - +class Main { + main():IO { + new IO.out_string("Hello world!\n") + }; +}; + diff --git a/tests/codegen/io.cl b/tests/codegen/io.cl index 7f0de869..42ee6854 100755 --- a/tests/codegen/io.cl +++ b/tests/codegen/io.cl @@ -1,103 +1,103 @@ -(* - * The IO class is predefined and has 4 methods: - * - * out_string(s : String) : SELF_TYPE - * out_int(i : Int) : SELF_TYPE - * in_string() : String - * in_int() : Int - * - * The out operations print their argument to the terminal. The - * in_string method reads an entire line from the terminal and returns a - * string not containing the new line. The in_int method also reads - * an entire line from the terminal and returns the integer - * corresponding to the first non blank word on the line. If that - * word is not an integer, it returns 0. - * - * - * Because our language is object oriented, we need an object of type - * IO in order to call any of these methods. - * - * There are basically two ways of getting access to IO in a class C. - * - * 1) Define C to Inherit from IO. This way the IO methods become - * methods of C, and they can be called using the abbreviated - * dispatch, i.e. - * - * class C inherits IO is - * ... - * out_string("Hello world\n") - * ... - * end; - * - * 2) If your class C does not directly or indirectly inherit from - * IO, the best way to access IO is through an initialized - * attribute of type IO. - * - * class C inherits Foo is - * io : IO <- new IO; - * ... - * io.out_string("Hello world\n"); - * ... - * end; - * - * Approach 1) is most often used, in particular when you need IO - * functions in the Main class. - * - *) - - -class A { - - -- Let's assume that we don't want A to not inherit from IO. - - io : IO <- new IO; - - out_a() : Object { io.out_string("A: Hello world\n") }; - -}; - - -class B inherits A { - - -- B does not have to an extra attribute, since it inherits io from A. - - out_b() : Object { io.out_string("B: Hello world\n") }; - -}; - - -class C inherits IO { - - -- Now the IO methods are part of C. - - out_c() : Object { out_string("C: Hello world\n") }; - - -- Note that out_string(...) is just a shorthand for self.out_string(...) - -}; - - -class D inherits C { - - -- Inherits IO methods from C. - - out_d() : Object { out_string("D: Hello world\n") }; - -}; - - -class Main inherits IO { - - -- Same case as class C. - - main() : Object { - { - (new A).out_a(); - (new B).out_b(); - (new C).out_c(); - (new D).out_d(); - out_string("Done.\n"); - } - }; - -}; +(* + * The IO class is predefined and has 4 methods: + * + * out_string(s : String) : SELF_TYPE + * out_int(i : Int) : SELF_TYPE + * in_string() : String + * in_int() : Int + * + * The out operations print their argument to the terminal. The + * in_string method reads an entire line from the terminal and returns a + * string not containing the new line. The in_int method also reads + * an entire line from the terminal and returns the integer + * corresponding to the first non blank word on the line. If that + * word is not an integer, it returns 0. + * + * + * Because our language is object oriented, we need an object of type + * IO in order to call any of these methods. + * + * There are basically two ways of getting access to IO in a class C. + * + * 1) Define C to Inherit from IO. This way the IO methods become + * methods of C, and they can be called using the abbreviated + * dispatch, i.e. + * + * class C inherits IO is + * ... + * out_string("Hello world\n") + * ... + * end; + * + * 2) If your class C does not directly or indirectly inherit from + * IO, the best way to access IO is through an initialized + * attribute of type IO. + * + * class C inherits Foo is + * io : IO <- new IO; + * ... + * io.out_string("Hello world\n"); + * ... + * end; + * + * Approach 1) is most often used, in particular when you need IO + * functions in the Main class. + * + *) + + +class A { + + -- Let's assume that we don't want A to not inherit from IO. + + io : IO <- new IO; + + out_a() : Object { io.out_string("A: Hello world\n") }; + +}; + + +class B inherits A { + + -- B does not have to an extra attribute, since it inherits io from A. + + out_b() : Object { io.out_string("B: Hello world\n") }; + +}; + + +class C inherits IO { + + -- Now the IO methods are part of C. + + out_c() : Object { out_string("C: Hello world\n") }; + + -- Note that out_string(...) is just a shorthand for self.out_string(...) + +}; + + +class D inherits C { + + -- Inherits IO methods from C. + + out_d() : Object { out_string("D: Hello world\n") }; + +}; + + +class Main inherits IO { + + -- Same case as class C. + + main() : Object { + { + (new A).out_a(); + (new B).out_b(); + (new C).out_c(); + (new D).out_d(); + out_string("Done.\n"); + } + }; + +}; diff --git a/tests/codegen/life.cl b/tests/codegen/life.cl index b83d9795..7d7a41fd 100755 --- a/tests/codegen/life.cl +++ b/tests/codegen/life.cl @@ -1,436 +1,436 @@ -(* The Game of Life - Tendo Kayiira, Summer '95 - With code taken from /private/cool/class/examples/cells.cl - - This introduction was taken off the internet. It gives a brief - description of the Game Of Life. It also gives the rules by which - this particular game follows. - - Introduction - - John Conway's Game of Life is a mathematical amusement, but it - is also much more: an insight into how a system of simple - cellualar automata can create complex, odd, and often aesthetically - pleasing patterns. It is played on a cartesian grid of cells - which are either 'on' or 'off' The game gets it's name from the - similarity between the behaviour of these cells and the behaviour - of living organisms. - - The Rules - - The playfield is a cartesian grid of arbitrary size. Each cell in - this grid can be in an 'on' state or an 'off' state. On each 'turn' - (called a generation,) the state of each cell changes simultaneously - depending on it's state and the state of all cells adjacent to it. - - For 'on' cells, - If the cell has 0 or 1 neighbours which are 'on', the cell turns - 'off'. ('dies of loneliness') - If the cell has 2 or 3 neighbours which are 'on', the cell stays - 'on'. (nothing happens to that cell) - If the cell has 4, 5, 6, 7, 8, or 9 neighbours which are 'on', - the cell turns 'off'. ('dies of overcrowding') - - For 'off' cells, - If the cell has 0, 1, 2, 4, 5, 6, 7, 8, or 9 neighbours which - are 'on', the cell stays 'off'. (nothing happens to that cell) - If the cell has 3 neighbours which are 'on', the cell turns - 'on'. (3 neighbouring 'alive' cells 'give birth' to a fourth.) - - Repeat for as many generations as desired. - - *) - - -class Board inherits IO { - - rows : Int; - columns : Int; - board_size : Int; - - size_of_board(initial : String) : Int { - initial.length() - }; - - board_init(start : String) : Board { - (let size :Int <- size_of_board(start) in - { - if size = 15 then - { - rows <- 3; - columns <- 5; - board_size <- size; - } - else if size = 16 then - { - rows <- 4; - columns <- 4; - board_size <- size; - } - else if size = 20 then - { - rows <- 4; - columns <- 5; - board_size <- size; - } - else if size = 21 then - { - rows <- 3; - columns <- 7; - board_size <- size; - } - else if size = 25 then - { - rows <- 5; - columns <- 5; - board_size <- size; - } - else if size = 28 then - { - rows <- 7; - columns <- 4; - board_size <- size; - } - else -- If none of the above fit, then just give - { -- the configuration of the most common board - rows <- 5; - columns <- 5; - board_size <- size; - } - fi fi fi fi fi fi; - self; - } - ) - }; - -}; - - - -class CellularAutomaton inherits Board { - population_map : String; - - init(map : String) : CellularAutomaton { - { - population_map <- map; - board_init(map); - self; - } - }; - - - - - print() : CellularAutomaton { - - (let i : Int <- 0 in - (let num : Int <- board_size in - { - out_string("\n"); - while i < num loop - { - out_string(population_map.substr(i,columns)); - out_string("\n"); - i <- i + columns; - } - pool; - out_string("\n"); - self; - } - ) ) - }; - - num_cells() : Int { - population_map.length() - }; - - cell(position : Int) : String { - if board_size - 1 < position then - " " - else - population_map.substr(position, 1) - fi - }; - - north(position : Int): String { - if (position - columns) < 0 then - " " - else - cell(position - columns) - fi - }; - - south(position : Int): String { - if board_size < (position + columns) then - " " - else - cell(position + columns) - fi - }; - - east(position : Int): String { - if (((position + 1) /columns ) * columns) = (position + 1) then - " " - else - cell(position + 1) - fi - }; - - west(position : Int): String { - if position = 0 then - " " - else - if ((position / columns) * columns) = position then - " " - else - cell(position - 1) - fi fi - }; - - northwest(position : Int): String { - if (position - columns) < 0 then - " " - else if ((position / columns) * columns) = position then - " " - else - north(position - 1) - fi fi - }; - - northeast(position : Int): String { - if (position - columns) < 0 then - " " - else if (((position + 1) /columns ) * columns) = (position + 1) then - " " - else - north(position + 1) - fi fi - }; - - southeast(position : Int): String { - if board_size < (position + columns) then - " " - else if (((position + 1) /columns ) * columns) = (position + 1) then - " " - else - south(position + 1) - fi fi - }; - - southwest(position : Int): String { - if board_size < (position + columns) then - " " - else if ((position / columns) * columns) = position then - " " - else - south(position - 1) - fi fi - }; - - neighbors(position: Int): Int { - { - if north(position) = "X" then 1 else 0 fi - + if south(position) = "X" then 1 else 0 fi - + if east(position) = "X" then 1 else 0 fi - + if west(position) = "X" then 1 else 0 fi - + if northeast(position) = "X" then 1 else 0 fi - + if northwest(position) = "X" then 1 else 0 fi - + if southeast(position) = "X" then 1 else 0 fi - + if southwest(position) = "X" then 1 else 0 fi; - } - }; - - -(* A cell will live if 2 or 3 of it's neighbors are alive. It dies - otherwise. A cell is born if only 3 of it's neighbors are alive. *) - - cell_at_next_evolution(position : Int) : String { - - if neighbors(position) = 3 then - "X" - else - if neighbors(position) = 2 then - if cell(position) = "X" then - "X" - else - "-" - fi - else - "-" - fi fi - }; - - - evolve() : CellularAutomaton { - (let position : Int <- 0 in - (let num : Int <- num_cells() in - (let temp : String in - { - while position < num loop - { - temp <- temp.concat(cell_at_next_evolution(position)); - position <- position + 1; - } - pool; - population_map <- temp; - self; - } - ) ) ) - }; - -(* This is where the background pattern is detremined by the user. More - patterns can be added as long as whoever adds keeps the board either - 3x5, 4x5, 5x5, 3x7, 7x4, 4x4 with the row first then column. *) - option(): String { - { - (let num : Int in - { - out_string("\nPlease chose a number:\n"); - out_string("\t1: A cross\n"); - out_string("\t2: A slash from the upper left to lower right\n"); - out_string("\t3: A slash from the upper right to lower left\n"); - out_string("\t4: An X\n"); - out_string("\t5: A greater than sign \n"); - out_string("\t6: A less than sign\n"); - out_string("\t7: Two greater than signs\n"); - out_string("\t8: Two less than signs\n"); - out_string("\t9: A 'V'\n"); - out_string("\t10: An inverse 'V'\n"); - out_string("\t11: Numbers 9 and 10 combined\n"); - out_string("\t12: A full grid\n"); - out_string("\t13: A 'T'\n"); - out_string("\t14: A plus '+'\n"); - out_string("\t15: A 'W'\n"); - out_string("\t16: An 'M'\n"); - out_string("\t17: An 'E'\n"); - out_string("\t18: A '3'\n"); - out_string("\t19: An 'O'\n"); - out_string("\t20: An '8'\n"); - out_string("\t21: An 'S'\n"); - out_string("Your choice => "); - num <- in_int(); - out_string("\n"); - if num = 1 then - " XX XXXX XXXX XX " - else if num = 2 then - " X X X X X " - else if num = 3 then - "X X X X X" - else if num = 4 then - "X X X X X X X X X" - else if num = 5 then - "X X X X X " - else if num = 6 then - " X X X X X" - else if num = 7 then - "X X X XX X " - else if num = 8 then - " X XX X X X " - else if num = 9 then - "X X X X X " - else if num = 10 then - " X X X X X" - else if num = 11 then - "X X X X X X X X" - else if num = 12 then - "XXXXXXXXXXXXXXXXXXXXXXXXX" - else if num = 13 then - "XXXXX X X X X " - else if num = 14 then - " X X XXXXX X X " - else if num = 15 then - "X X X X X X X " - else if num = 16 then - " X X X X X X X" - else if num = 17 then - "XXXXX X XXXXX X XXXX" - else if num = 18 then - "XXX X X X X XXXX " - else if num = 19 then - " XX X XX X XX " - else if num = 20 then - " XX X XX X XX X XX X XX " - else if num = 21 then - " XXXX X XX X XXXX " - else - " " - fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi; - } - ); - } - }; - - - - - prompt() : Bool { - { - (let ans : String in - { - out_string("Would you like to continue with the next generation? \n"); - out_string("Please use lowercase y or n for your answer [y]: "); - ans <- in_string(); - out_string("\n"); - if ans = "n" then - false - else - true - fi; - } - ); - } - }; - - - prompt2() : Bool { - (let ans : String in - { - out_string("\n\n"); - out_string("Would you like to choose a background pattern? \n"); - out_string("Please use lowercase y or n for your answer [n]: "); - ans <- in_string(); - if ans = "y" then - true - else - false - fi; - } - ) - }; - - -}; - -class Main inherits CellularAutomaton { - cells : CellularAutomaton; - - main() : Main { - { - (let continue : Bool in - (let choice : String in - { - out_string("Welcome to the Game of Life.\n"); - out_string("There are many initial states to choose from. \n"); - while prompt2() loop - { - continue <- true; - choice <- option(); - cells <- (new CellularAutomaton).init(choice); - cells.print(); - while continue loop - if prompt() then - { - cells.evolve(); - cells.print(); - } - else - continue <- false - fi - pool; - } - pool; - self; - } ) ); } - }; -}; - +(* The Game of Life + Tendo Kayiira, Summer '95 + With code taken from /private/cool/class/examples/cells.cl + + This introduction was taken off the internet. It gives a brief + description of the Game Of Life. It also gives the rules by which + this particular game follows. + + Introduction + + John Conway's Game of Life is a mathematical amusement, but it + is also much more: an insight into how a system of simple + cellualar automata can create complex, odd, and often aesthetically + pleasing patterns. It is played on a cartesian grid of cells + which are either 'on' or 'off' The game gets it's name from the + similarity between the behaviour of these cells and the behaviour + of living organisms. + + The Rules + + The playfield is a cartesian grid of arbitrary size. Each cell in + this grid can be in an 'on' state or an 'off' state. On each 'turn' + (called a generation,) the state of each cell changes simultaneously + depending on it's state and the state of all cells adjacent to it. + + For 'on' cells, + If the cell has 0 or 1 neighbours which are 'on', the cell turns + 'off'. ('dies of loneliness') + If the cell has 2 or 3 neighbours which are 'on', the cell stays + 'on'. (nothing happens to that cell) + If the cell has 4, 5, 6, 7, 8, or 9 neighbours which are 'on', + the cell turns 'off'. ('dies of overcrowding') + + For 'off' cells, + If the cell has 0, 1, 2, 4, 5, 6, 7, 8, or 9 neighbours which + are 'on', the cell stays 'off'. (nothing happens to that cell) + If the cell has 3 neighbours which are 'on', the cell turns + 'on'. (3 neighbouring 'alive' cells 'give birth' to a fourth.) + + Repeat for as many generations as desired. + + *) + + +class Board inherits IO { + + rows : Int; + columns : Int; + board_size : Int; + + size_of_board(initial : String) : Int { + initial.length() + }; + + board_init(start : String) : Board { + (let size :Int <- size_of_board(start) in + { + if size = 15 then + { + rows <- 3; + columns <- 5; + board_size <- size; + } + else if size = 16 then + { + rows <- 4; + columns <- 4; + board_size <- size; + } + else if size = 20 then + { + rows <- 4; + columns <- 5; + board_size <- size; + } + else if size = 21 then + { + rows <- 3; + columns <- 7; + board_size <- size; + } + else if size = 25 then + { + rows <- 5; + columns <- 5; + board_size <- size; + } + else if size = 28 then + { + rows <- 7; + columns <- 4; + board_size <- size; + } + else -- If none of the above fit, then just give + { -- the configuration of the most common board + rows <- 5; + columns <- 5; + board_size <- size; + } + fi fi fi fi fi fi; + self; + } + ) + }; + +}; + + + +class CellularAutomaton inherits Board { + population_map : String; + + init(map : String) : CellularAutomaton { + { + population_map <- map; + board_init(map); + self; + } + }; + + + + + print() : CellularAutomaton { + + (let i : Int <- 0 in + (let num : Int <- board_size in + { + out_string("\n"); + while i < num loop + { + out_string(population_map.substr(i,columns)); + out_string("\n"); + i <- i + columns; + } + pool; + out_string("\n"); + self; + } + ) ) + }; + + num_cells() : Int { + population_map.length() + }; + + cell(position : Int) : String { + if board_size - 1 < position then + " " + else + population_map.substr(position, 1) + fi + }; + + north(position : Int): String { + if (position - columns) < 0 then + " " + else + cell(position - columns) + fi + }; + + south(position : Int): String { + if board_size < (position + columns) then + " " + else + cell(position + columns) + fi + }; + + east(position : Int): String { + if (((position + 1) /columns ) * columns) = (position + 1) then + " " + else + cell(position + 1) + fi + }; + + west(position : Int): String { + if position = 0 then + " " + else + if ((position / columns) * columns) = position then + " " + else + cell(position - 1) + fi fi + }; + + northwest(position : Int): String { + if (position - columns) < 0 then + " " + else if ((position / columns) * columns) = position then + " " + else + north(position - 1) + fi fi + }; + + northeast(position : Int): String { + if (position - columns) < 0 then + " " + else if (((position + 1) /columns ) * columns) = (position + 1) then + " " + else + north(position + 1) + fi fi + }; + + southeast(position : Int): String { + if board_size < (position + columns) then + " " + else if (((position + 1) /columns ) * columns) = (position + 1) then + " " + else + south(position + 1) + fi fi + }; + + southwest(position : Int): String { + if board_size < (position + columns) then + " " + else if ((position / columns) * columns) = position then + " " + else + south(position - 1) + fi fi + }; + + neighbors(position: Int): Int { + { + if north(position) = "X" then 1 else 0 fi + + if south(position) = "X" then 1 else 0 fi + + if east(position) = "X" then 1 else 0 fi + + if west(position) = "X" then 1 else 0 fi + + if northeast(position) = "X" then 1 else 0 fi + + if northwest(position) = "X" then 1 else 0 fi + + if southeast(position) = "X" then 1 else 0 fi + + if southwest(position) = "X" then 1 else 0 fi; + } + }; + + +(* A cell will live if 2 or 3 of it's neighbors are alive. It dies + otherwise. A cell is born if only 3 of it's neighbors are alive. *) + + cell_at_next_evolution(position : Int) : String { + + if neighbors(position) = 3 then + "X" + else + if neighbors(position) = 2 then + if cell(position) = "X" then + "X" + else + "-" + fi + else + "-" + fi fi + }; + + + evolve() : CellularAutomaton { + (let position : Int <- 0 in + (let num : Int <- num_cells() in + (let temp : String in + { + while position < num loop + { + temp <- temp.concat(cell_at_next_evolution(position)); + position <- position + 1; + } + pool; + population_map <- temp; + self; + } + ) ) ) + }; + +(* This is where the background pattern is detremined by the user. More + patterns can be added as long as whoever adds keeps the board either + 3x5, 4x5, 5x5, 3x7, 7x4, 4x4 with the row first then column. *) + option(): String { + { + (let num : Int in + { + out_string("\nPlease chose a number:\n"); + out_string("\t1: A cross\n"); + out_string("\t2: A slash from the upper left to lower right\n"); + out_string("\t3: A slash from the upper right to lower left\n"); + out_string("\t4: An X\n"); + out_string("\t5: A greater than sign \n"); + out_string("\t6: A less than sign\n"); + out_string("\t7: Two greater than signs\n"); + out_string("\t8: Two less than signs\n"); + out_string("\t9: A 'V'\n"); + out_string("\t10: An inverse 'V'\n"); + out_string("\t11: Numbers 9 and 10 combined\n"); + out_string("\t12: A full grid\n"); + out_string("\t13: A 'T'\n"); + out_string("\t14: A plus '+'\n"); + out_string("\t15: A 'W'\n"); + out_string("\t16: An 'M'\n"); + out_string("\t17: An 'E'\n"); + out_string("\t18: A '3'\n"); + out_string("\t19: An 'O'\n"); + out_string("\t20: An '8'\n"); + out_string("\t21: An 'S'\n"); + out_string("Your choice => "); + num <- in_int(); + out_string("\n"); + if num = 1 then + " XX XXXX XXXX XX " + else if num = 2 then + " X X X X X " + else if num = 3 then + "X X X X X" + else if num = 4 then + "X X X X X X X X X" + else if num = 5 then + "X X X X X " + else if num = 6 then + " X X X X X" + else if num = 7 then + "X X X XX X " + else if num = 8 then + " X XX X X X " + else if num = 9 then + "X X X X X " + else if num = 10 then + " X X X X X" + else if num = 11 then + "X X X X X X X X" + else if num = 12 then + "XXXXXXXXXXXXXXXXXXXXXXXXX" + else if num = 13 then + "XXXXX X X X X " + else if num = 14 then + " X X XXXXX X X " + else if num = 15 then + "X X X X X X X " + else if num = 16 then + " X X X X X X X" + else if num = 17 then + "XXXXX X XXXXX X XXXX" + else if num = 18 then + "XXX X X X X XXXX " + else if num = 19 then + " XX X XX X XX " + else if num = 20 then + " XX X XX X XX X XX X XX " + else if num = 21 then + " XXXX X XX X XXXX " + else + " " + fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi; + } + ); + } + }; + + + + + prompt() : Bool { + { + (let ans : String in + { + out_string("Would you like to continue with the next generation? \n"); + out_string("Please use lowercase y or n for your answer [y]: "); + ans <- in_string(); + out_string("\n"); + if ans = "n" then + false + else + true + fi; + } + ); + } + }; + + + prompt2() : Bool { + (let ans : String in + { + out_string("\n\n"); + out_string("Would you like to choose a background pattern? \n"); + out_string("Please use lowercase y or n for your answer [n]: "); + ans <- in_string(); + if ans = "y" then + true + else + false + fi; + } + ) + }; + + +}; + +class Main inherits CellularAutomaton { + cells : CellularAutomaton; + + main() : Main { + { + (let continue : Bool in + (let choice : String in + { + out_string("Welcome to the Game of Life.\n"); + out_string("There are many initial states to choose from. \n"); + while prompt2() loop + { + continue <- true; + choice <- option(); + cells <- (new CellularAutomaton).init(choice); + cells.print(); + while continue loop + if prompt() then + { + cells.evolve(); + cells.print(); + } + else + continue <- false + fi + pool; + } + pool; + self; + } ) ); } + }; +}; + diff --git a/tests/codegen/new_complex.cl b/tests/codegen/new_complex.cl index a4fe714c..ad7035b5 100755 --- a/tests/codegen/new_complex.cl +++ b/tests/codegen/new_complex.cl @@ -1,79 +1,79 @@ -class Main inherits IO { - main() : IO { - (let c : Complex <- (new Complex).init(1, 1) in - { - -- trivially equal (see CoolAid) - if c.reflect_X() = c.reflect_0() - then out_string("=)\n") - else out_string("=(\n") - fi; - -- equal - if c.reflect_X().reflect_Y().equal(c.reflect_0()) - then out_string("=)\n") - else out_string("=(\n") - fi; - } - ) - }; -}; - -class Complex inherits IO { - x : Int; - y : Int; - - init(a : Int, b : Int) : Complex { - { - x = a; - y = b; - self; - } - }; - - print() : Object { - if y = 0 - then out_int(x) - else out_int(x).out_string("+").out_int(y).out_string("I") - fi - }; - - reflect_0() : Complex { - { - x = ~x; - y = ~y; - self; - } - }; - - reflect_X() : Complex { - { - y = ~y; - self; - } - }; - - reflect_Y() : Complex { - { - x = ~x; - self; - } - }; - - equal(d : Complex) : Bool { - if x = d.x_value() - then - if y = d.y_value() - then true - else false - fi - else false - fi - }; - - x_value() : Int { - x - }; - - y_value() : Int { - y - }; -}; +class Main inherits IO { + main() : IO { + (let c : Complex <- (new Complex).init(1, 1) in + { + -- trivially equal (see CoolAid) + if c.reflect_X() = c.reflect_0() + then out_string("=)\n") + else out_string("=(\n") + fi; + -- equal + if c.reflect_X().reflect_Y().equal(c.reflect_0()) + then out_string("=)\n") + else out_string("=(\n") + fi; + } + ) + }; +}; + +class Complex inherits IO { + x : Int; + y : Int; + + init(a : Int, b : Int) : Complex { + { + x = a; + y = b; + self; + } + }; + + print() : Object { + if y = 0 + then out_int(x) + else out_int(x).out_string("+").out_int(y).out_string("I") + fi + }; + + reflect_0() : Complex { + { + x = ~x; + y = ~y; + self; + } + }; + + reflect_X() : Complex { + { + y = ~y; + self; + } + }; + + reflect_Y() : Complex { + { + x = ~x; + self; + } + }; + + equal(d : Complex) : Bool { + if x = d.x_value() + then + if y = d.y_value() + then true + else false + fi + else false + fi + }; + + x_value() : Int { + x + }; + + y_value() : Int { + y + }; +}; diff --git a/tests/codegen/palindrome.cl b/tests/codegen/palindrome.cl index 7f24789f..6acbeb73 100755 --- a/tests/codegen/palindrome.cl +++ b/tests/codegen/palindrome.cl @@ -1,25 +1,25 @@ -class Main inherits IO { - pal(s : String) : Bool { - if s.length() = 0 - then true - else if s.length() = 1 - then true - else if s.substr(0, 1) = s.substr(s.length() - 1, 1) - then pal(s.substr(1, s.length() -2)) - else false - fi fi fi - }; - - i : Int; - - main() : IO { - { - i <- ~1; - out_string("enter a string\n"); - if pal(in_string()) - then out_string("that was a palindrome\n") - else out_string("that was not a palindrome\n") - fi; - } - }; -}; +class Main inherits IO { + pal(s : String) : Bool { + if s.length() = 0 + then true + else if s.length() = 1 + then true + else if s.substr(0, 1) = s.substr(s.length() - 1, 1) + then pal(s.substr(1, s.length() -2)) + else false + fi fi fi + }; + + i : Int; + + main() : IO { + { + i <- ~1; + out_string("enter a string\n"); + if pal(in_string()) + then out_string("that was a palindrome\n") + else out_string("that was not a palindrome\n") + fi; + } + }; +}; diff --git a/tests/codegen_test.py b/tests/codegen_test.py index 6d864cb0..e2fa3423 100644 --- a/tests/codegen_test.py +++ b/tests/codegen_test.py @@ -1,15 +1,15 @@ -import pytest -import os -from utils import compare_errors - -tests_dir = __file__.rpartition('/')[0] + '/codegen/' -tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] - -# @pytest.mark.lexer -# @pytest.mark.parser -# @pytest.mark.semantic -@pytest.mark.ok -@pytest.mark.run(order=4) -@pytest.mark.parametrize("cool_file", tests) -def test_codegen(compiler_path, cool_file): +import pytest +import os +from utils import compare_errors + +tests_dir = __file__.rpartition('/')[0] + '/codegen/' +tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] + +# @pytest.mark.lexer +# @pytest.mark.parser +# @pytest.mark.semantic +@pytest.mark.ok +@pytest.mark.run(order=4) +@pytest.mark.parametrize("cool_file", tests) +def test_codegen(compiler_path, cool_file): compare_errors(compiler_path, tests_dir + cool_file, None) \ No newline at end of file diff --git a/tests/conftest.py b/tests/conftest.py index 1f44eeb7..561d8baf 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,6 +1,6 @@ -import pytest -import os - -@pytest.fixture -def compiler_path(): +import pytest +import os + +@pytest.fixture +def compiler_path(): return os.path.abspath('./coolc.sh') \ No newline at end of file diff --git a/tests/lexer/test1.cl b/tests/lexer/test1.cl index 43ea44f6..b2eff37f 100644 --- a/tests/lexer/test1.cl +++ b/tests/lexer/test1.cl @@ -1,9 +1,9 @@ -class Main { - str <- "The big brown fox - jumped over the fence"; - main() : Object { - { - out_string("Yay! This is the newest shites ); - } - }; -}; +class Main { + str <- "The big brown fox + jumped over the fence"; + main() : Object { + { + out_string("Yay! This is the newest shites ); + } + }; +}; diff --git a/tests/lexer/test1_error.txt b/tests/lexer/test1_error.txt index 5145209d..de8ce8e2 100644 --- a/tests/lexer/test1_error.txt +++ b/tests/lexer/test1_error.txt @@ -1,3 +1,3 @@ -(3, 4) - LexicographicError: Unterminated string constant -(4, 2) - LexicographicError: Unterminated string constant +(3, 4) - LexicographicError: Unterminated string constant +(4, 2) - LexicographicError: Unterminated string constant (7, 4) - LexicographicError: Unterminated string constant \ No newline at end of file diff --git a/tests/lexer/test3.cl b/tests/lexer/test3.cl index 1fb6cedb..42b66496 100644 --- a/tests/lexer/test3.cl +++ b/tests/lexer/test3.cl @@ -1,46 +1,46 @@ -class Error() { - - (* There was once a comment, - that was quite long. - But, the reader soon discovered that - the comment was indeed longer than - previously assumed. Now, the reader - was in a real dilemma; is the comment - ever gonna end? If I stop reading, will - it end? - He started imagining all sorts of things. - He thought about heisenberg's cat and how - how that relates to the end of the sentence. - He thought to himself "I'm gonna stop reading". - "If I keep reading this comment, I'm gonna know - the fate of this sentence; That will be disastorous." - He knew that such a comment was gonna extend to - another file. It was too awesome to be contained in - a single file. And he would have kept reading too... - if only... - cool wasn't a super-duper-fab-awesomest language; - but cool is that language; - "This comment shall go not cross this file" said cool. - Alas! The reader could read no more. - There was once a comment, - that was quite long. - But, the reader soon discovered that - the comment was indeed longer than - previously assumed. Now, the reader - was in a real dilemma; is the comment - ever gonna end? If I stop reading, will - it end? - He started imagining all sorts of things. - He thought about heisenberg's cat and how - how that relates to the end of the sentence. - He thought to himself "I'm gonna stop reading". - "If I keep reading this comment, I'm gonna know - the fate of this sentence; That will be disastorous." - He knew that such a comment was gonna extend to - another file. It was too awesome to be contained in - a single file. And he would have kept reading too... - if only... - cool wasn't a super-duper-fab-awesomest language; - but cool is that language; - "This comment shall go not cross this file" said cool. +class Error() { + + (* There was once a comment, + that was quite long. + But, the reader soon discovered that + the comment was indeed longer than + previously assumed. Now, the reader + was in a real dilemma; is the comment + ever gonna end? If I stop reading, will + it end? + He started imagining all sorts of things. + He thought about heisenberg's cat and how + how that relates to the end of the sentence. + He thought to himself "I'm gonna stop reading". + "If I keep reading this comment, I'm gonna know + the fate of this sentence; That will be disastorous." + He knew that such a comment was gonna extend to + another file. It was too awesome to be contained in + a single file. And he would have kept reading too... + if only... + cool wasn't a super-duper-fab-awesomest language; + but cool is that language; + "This comment shall go not cross this file" said cool. + Alas! The reader could read no more. + There was once a comment, + that was quite long. + But, the reader soon discovered that + the comment was indeed longer than + previously assumed. Now, the reader + was in a real dilemma; is the comment + ever gonna end? If I stop reading, will + it end? + He started imagining all sorts of things. + He thought about heisenberg's cat and how + how that relates to the end of the sentence. + He thought to himself "I'm gonna stop reading". + "If I keep reading this comment, I'm gonna know + the fate of this sentence; That will be disastorous." + He knew that such a comment was gonna extend to + another file. It was too awesome to be contained in + a single file. And he would have kept reading too... + if only... + cool wasn't a super-duper-fab-awesomest language; + but cool is that language; + "This comment shall go not cross this file" said cool. Alas! The reader could read no more. \ No newline at end of file diff --git a/tests/lexer/test3_error.txt b/tests/lexer/test3_error.txt index dc48da75..f05f5d6d 100644 --- a/tests/lexer/test3_error.txt +++ b/tests/lexer/test3_error.txt @@ -1 +1 @@ -(46, 40) - LexicographicError: EOF in comment +(46, 40) - LexicographicError: EOF in comment diff --git a/tests/lexer/test5.cl b/tests/lexer/test5.cl index 879e27a6..abd493bd 100644 --- a/tests/lexer/test5.cl +++ b/tests/lexer/test5.cl @@ -1,4 +1,4 @@ -"lkjdsafkljdsalfj\u0000dsafdsaf\u0000djafslkjdsalf\nsdajf\" lkjfdsasdkjfl"123 -adsfasklj# -LKldsajf +"lkjdsafkljdsalfj\u0000dsafdsaf\u0000djafslkjdsalf\nsdajf\" lkjfdsasdkjfl"123 +adsfasklj# +LKldsajf "lkdsajf" \ No newline at end of file diff --git a/tests/lexer/test5_error.txt b/tests/lexer/test5_error.txt index 99af5fbd..a142c2ed 100644 --- a/tests/lexer/test5_error.txt +++ b/tests/lexer/test5_error.txt @@ -1 +1 @@ -(2, 10) - LexicographicError: ERROR "#" +(2, 10) - LexicographicError: ERROR "#" diff --git a/tests/lexer/test6.cl b/tests/lexer/test6.cl index d420df7c..f9b948fe 100644 --- a/tests/lexer/test6.cl +++ b/tests/lexer/test6.cl @@ -1,6 +1,6 @@ -"kjas\"lnnsdj\nfljrdsaf" -$ -$ -% -% +"kjas\"lnnsdj\nfljrdsaf" +$ +$ +% +% "alkjfldajf""dasfadsf \ No newline at end of file diff --git a/tests/lexer/test6_error.txt b/tests/lexer/test6_error.txt index 4ca5899e..c1fa28ba 100644 --- a/tests/lexer/test6_error.txt +++ b/tests/lexer/test6_error.txt @@ -1,5 +1,5 @@ -(2, 1) - LexicographicError: ERROR "$" -(3, 1) - LexicographicError: ERROR "$" -(4, 1) - LexicographicError: ERROR "%" -(5, 1) - LexicographicError: ERROR "%" -(6, 22) - LexicographicError: EOF in string constant +(2, 1) - LexicographicError: ERROR "$" +(3, 1) - LexicographicError: ERROR "$" +(4, 1) - LexicographicError: ERROR "%" +(5, 1) - LexicographicError: ERROR "%" +(6, 22) - LexicographicError: EOF in string constant diff --git a/tests/lexer_test.py b/tests/lexer_test.py index e54fa56f..24b12383 100644 --- a/tests/lexer_test.py +++ b/tests/lexer_test.py @@ -1,13 +1,13 @@ -import pytest -import os -from utils import compare_errors - -tests_dir = __file__.rpartition('/')[0] + '/lexer/' -tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] - -@pytest.mark.lexer -@pytest.mark.error -@pytest.mark.run(order=1) -@pytest.mark.parametrize("cool_file", tests) -def test_lexer_errors(compiler_path, cool_file): +import pytest +import os +from utils import compare_errors + +tests_dir = __file__.rpartition('/')[0] + '/lexer/' +tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] + +@pytest.mark.lexer +@pytest.mark.error +@pytest.mark.run(order=1) +@pytest.mark.parametrize("cool_file", tests) +def test_lexer_errors(compiler_path, cool_file): compare_errors(compiler_path, tests_dir + cool_file, cool_file[:-3] + '_error.txt') \ No newline at end of file diff --git a/tests/parser/err2.cl b/tests/parser/err2.cl index 40149b89..d9748a8f 100644 --- a/tests/parser/err2.cl +++ b/tests/parser/err2.cl @@ -1,14 +1,14 @@ -class Main { - main(): Object { - (new alpha).print() - }; - -}; - -(* Class names must begin with uppercase letters *) -class alpha inherits IO { - print() : Object { - out_string("reached!!\n"); - }; -}; - +class Main { + main(): Object { + (new alpha).print() + }; + +}; + +(* Class names must begin with uppercase letters *) +class alpha inherits IO { + print() : Object { + out_string("reached!!\n"); + }; +}; + diff --git a/tests/parser/err2_error.txt b/tests/parser/err2_error.txt index 92e47e37..8b377a59 100644 --- a/tests/parser/err2_error.txt +++ b/tests/parser/err2_error.txt @@ -1,2 +1,2 @@ -(3, 10) - SyntacticError: ERROR at or near "alpha" +(3, 10) - SyntacticError: ERROR at or near "alpha" (9, 7) - SyntacticError: ERROR at or near "alpha" \ No newline at end of file diff --git a/tests/parser/isprime.cl b/tests/parser/isprime.cl index 5adaeda9..d6aa96cb 100644 --- a/tests/parser/isprime.cl +++ b/tests/parser/isprime.cl @@ -1,40 +1,40 @@ -class Main inherits IO { - main() : Object { - { - out_string("Enter a number to check if number is prime\n"); - let i : Int <- in_int() in { - if(i <= 1) then { - out_string("Invalid Input\n"); - abort(); - } else { - if (isPrime(i) = 1) then - out_string("Number is prime\n") - else - out_string("Number is composite\n") - fi; - } - fi; - }; - } - }; - - mod(i : Int, ) : Int { -- Formal list must be comma separated. A comma does not terminate a list of formals. - i - (i/k)*k - }; - - isPrime(i : Int) : Int { - { - let x : Int <- 2, - c : Int <- 1 in - { - while (not (x = i)) loop - if (mod(i, x) = 0) then { - c <- 0; - x <- i; - } else x <- x + 1 fi - pool; - c; - }; - } - }; -}; +class Main inherits IO { + main() : Object { + { + out_string("Enter a number to check if number is prime\n"); + let i : Int <- in_int() in { + if(i <= 1) then { + out_string("Invalid Input\n"); + abort(); + } else { + if (isPrime(i) = 1) then + out_string("Number is prime\n") + else + out_string("Number is composite\n") + fi; + } + fi; + }; + } + }; + + mod(i : Int, ) : Int { -- Formal list must be comma separated. A comma does not terminate a list of formals. + i - (i/k)*k + }; + + isPrime(i : Int) : Int { + { + let x : Int <- 2, + c : Int <- 1 in + { + while (not (x = i)) loop + if (mod(i, x) = 0) then { + c <- 0; + x <- i; + } else x <- x + 1 fi + pool; + c; + }; + } + }; +}; diff --git a/tests/parser/isprime_error.txt b/tests/parser/isprime_error.txt index ea89e135..0f78b7d4 100644 --- a/tests/parser/isprime_error.txt +++ b/tests/parser/isprime_error.txt @@ -1 +1 @@ -(21, 15) - SyntacticError: Error at or near ')' +(21, 15) - SyntacticError: Error at or near ')' diff --git a/tests/parser/prod.cl b/tests/parser/prod.cl index effe5a7c..b5ec3738 100644 --- a/tests/parser/prod.cl +++ b/tests/parser/prod.cl @@ -1,21 +1,21 @@ -class Main inherits IO { - main() : Object { - { - out_string("Enter number of numbers to multiply\n"); - out_int(prod(in_int())); - out_string("\n"); - } - }; - - prod(i : Int) : Int { - let y : Int <- 1 in { - while (not (i = 0) ) loop { - out_string("Enter Number: "); - y <- y * in_int(Main : Int); -- the parser correctly catches the error here - i <- i - 1; - } - pool; - y; - } - }; -}; +class Main inherits IO { + main() : Object { + { + out_string("Enter number of numbers to multiply\n"); + out_int(prod(in_int())); + out_string("\n"); + } + }; + + prod(i : Int) : Int { + let y : Int <- 1 in { + while (not (i = 0) ) loop { + out_string("Enter Number: "); + y <- y * in_int(Main : Int); -- the parser correctly catches the error here + i <- i - 1; + } + pool; + y; + } + }; +}; diff --git a/tests/parser/test2.cl b/tests/parser/test2.cl index 8fdb792e..d79790f2 100644 --- a/tests/parser/test2.cl +++ b/tests/parser/test2.cl @@ -1,20 +1,20 @@ -class Main inherits IO { - str <- "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; - main() : Object { - { - out_string("Enter number of numbers to multiply\n"); - out_int(prod(in_int())); - out_string("\n"); - } - }; - prod(i : Int) : Int { - let y : Int <- 1 in { - while (not (i = 0) ) loop { - out_string("Enter Number: "); - y <- y * in_int(); - i <- i - 1; - } - y; - } - }; -} +class Main inherits IO { + str <- "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; + main() : Object { + { + out_string("Enter number of numbers to multiply\n"); + out_int(prod(in_int())); + out_string("\n"); + } + }; + prod(i : Int) : Int { + let y : Int <- 1 in { + while (not (i = 0) ) loop { + out_string("Enter Number: "); + y <- y * in_int(); + i <- i - 1; + } + y; + } + }; +} diff --git a/tests/parser/test2_error.txt b/tests/parser/test2_error.txt index 2bfe70f3..fd3cd17c 100644 --- a/tests/parser/test2_error.txt +++ b/tests/parser/test2_error.txt @@ -1,4 +1,4 @@ -(2, 6) - SyntacticError: ERROR at or near "<-" -(17, 4) - SyntacticError: ERROR at or near "y" -(21, 1) - SyntacticError: ERROR at or near EOF - +(2, 6) - SyntacticError: ERROR at or near "<-" +(17, 4) - SyntacticError: ERROR at or near "y" +(21, 1) - SyntacticError: ERROR at or near EOF + diff --git a/tests/parser/test4.cl b/tests/parser/test4.cl index aad6c503..8e51b3e5 100644 --- a/tests/parser/test4.cl +++ b/tests/parser/test4.cl @@ -1,5 +1,5 @@ -classs Doom { - i : Int <- 0; - main() : Object { - if i = 0 then out_string("This is da real *h*t") - +classs Doom { + i : Int <- 0; + main() : Object { + if i = 0 then out_string("This is da real *h*t") + diff --git a/tests/parser_test.py b/tests/parser_test.py index 5ebb42dd..cf413159 100644 --- a/tests/parser_test.py +++ b/tests/parser_test.py @@ -1,13 +1,13 @@ -import pytest -import os -from utils import compare_errors - -tests_dir = __file__.rpartition('/')[0] + '/parser/' -tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] - -@pytest.mark.parser -@pytest.mark.error -@pytest.mark.run(order=2) -@pytest.mark.parametrize("cool_file", tests) -def test_parser_errors(compiler_path, cool_file): +import pytest +import os +from utils import compare_errors + +tests_dir = __file__.rpartition('/')[0] + '/parser/' +tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] + +@pytest.mark.parser +@pytest.mark.error +@pytest.mark.run(order=2) +@pytest.mark.parametrize("cool_file", tests) +def test_parser_errors(compiler_path, cool_file): compare_errors(compiler_path, tests_dir + cool_file, cool_file[:-3] + '_error.txt') \ No newline at end of file diff --git a/tests/semantic/hello_world.cl b/tests/semantic/hello_world.cl index 0c818f90..b0a180a2 100755 --- a/tests/semantic/hello_world.cl +++ b/tests/semantic/hello_world.cl @@ -1,5 +1,5 @@ -class Main inherits IO { - main(): IO { - out_string("Hello, World.\n") - }; -}; +class Main inherits IO { + main(): IO { + out_string("Hello, World.\n") + }; +}; diff --git a/tests/semantic_test.py b/tests/semantic_test.py index 2d945a06..9c8f1009 100644 --- a/tests/semantic_test.py +++ b/tests/semantic_test.py @@ -1,13 +1,13 @@ -import pytest -import os -from utils import compare_errors - -tests_dir = __file__.rpartition('/')[0] + '/semantic/' -tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] - -@pytest.mark.semantic -@pytest.mark.error -@pytest.mark.run(order=3) -@pytest.mark.parametrize("cool_file", []) -def test_semantic_errors(compiler_path, cool_file): +import pytest +import os +from utils import compare_errors + +tests_dir = __file__.rpartition('/')[0] + '/semantic/' +tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] + +@pytest.mark.semantic +@pytest.mark.error +@pytest.mark.run(order=3) +@pytest.mark.parametrize("cool_file", []) +def test_semantic_errors(compiler_path, cool_file): compare_errors(compiler_path, tests_dir + cool_file, cool_file[:-3] + '_error.txt') \ No newline at end of file diff --git a/tests/utils/utils.py b/tests/utils/utils.py index 75c89682..cd99d4a8 100644 --- a/tests/utils/utils.py +++ b/tests/utils/utils.py @@ -1,47 +1,47 @@ -import subprocess -import re - -COMPILER_TIMEOUT = 'El compilador tarda mucho en responder.' -TEST_MUST_FAIL = 'El test %s debe fallar al compilar' -TEST_MUST_COMPILE = 'El test %s debe compilar' -BAD_ERROR_FORMAT = '''El error no esta en formato: (,) - : - o no se encuentra en la 3ra linea''' -UNEXPECTED_ERROR = 'Se esperaba un %s en (%d, %d). Su error fue un %s en (%d, %d)' - -def parse_error(error: str): - merror = re.fullmatch(r'^\s*\(\s*(\d+)\s*,\s*(\d+)\s*\)\s*-\s*(\w+)\s*:(.*)$', error) - assert merror, BAD_ERROR_FORMAT - - return (t(x) for t, x in zip([int, int, str, str], merror.groups())) - - -def first_error(compiler_output: list, errors: list): - line, column, error_type, _ = parse_error(errors[0]) - - oline, ocolumn, oerror_type, _ = parse_error(compiler_output[0]) - - assert line == oline and column == ocolumn and error_type == oerror_type,\ - UNEXPECTED_ERROR % (error_type, line, column, oerror_type, oline, ocolumn) - - -def compare_errors(compiler_path: str, cool_file_path: str, error_file_path: str, cmp=first_error, timeout=100): - try: - sp = subprocess.run(['bash', compiler_path, cool_file_path], capture_output=True, timeout=timeout) - return_code, output = sp.returncode, sp.stdout.decode() - except TimeoutError: - assert False, COMPILER_TIMEOUT - - compiler_output = output.split('\n') - - if error_file_path: - assert return_code == 1, TEST_MUST_FAIL % cool_file_path - - fd = open(error_file_path, 'r') - errors = fd.read().split('\n') - fd.close() - - # checking the errors of compiler - cmp(compiler_output[2:], errors) - else: - print(return_code, output) +import subprocess +import re + +COMPILER_TIMEOUT = 'El compilador tarda mucho en responder.' +TEST_MUST_FAIL = 'El test %s debe fallar al compilar' +TEST_MUST_COMPILE = 'El test %s debe compilar' +BAD_ERROR_FORMAT = '''El error no esta en formato: (,) - : + o no se encuentra en la 3ra linea''' +UNEXPECTED_ERROR = 'Se esperaba un %s en (%d, %d). Su error fue un %s en (%d, %d)' + +def parse_error(error: str): + merror = re.fullmatch(r'^\s*\(\s*(\d+)\s*,\s*(\d+)\s*\)\s*-\s*(\w+)\s*:(.*)$', error) + assert merror, BAD_ERROR_FORMAT + + return (t(x) for t, x in zip([int, int, str, str], merror.groups())) + + +def first_error(compiler_output: list, errors: list): + line, column, error_type, _ = parse_error(errors[0]) + + oline, ocolumn, oerror_type, _ = parse_error(compiler_output[0]) + + assert line == oline and column == ocolumn and error_type == oerror_type,\ + UNEXPECTED_ERROR % (error_type, line, column, oerror_type, oline, ocolumn) + + +def compare_errors(compiler_path: str, cool_file_path: str, error_file_path: str, cmp=first_error, timeout=100): + try: + sp = subprocess.run(['bash', compiler_path, cool_file_path], capture_output=True, timeout=timeout) + return_code, output = sp.returncode, sp.stdout.decode() + except TimeoutError: + assert False, COMPILER_TIMEOUT + + compiler_output = output.split('\n') + + if error_file_path: + assert return_code == 1, TEST_MUST_FAIL % cool_file_path + + fd = open(error_file_path, 'r') + errors = fd.read().split('\n') + fd.close() + + # checking the errors of compiler + cmp(compiler_output[2:], errors) + else: + print(return_code, output) assert return_code == 0, TEST_MUST_COMPILE % cool_file_path \ No newline at end of file From 44b935c90acac9070aa13a7971bf83bb3b2981c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Loraine=20Monteagudo=20Garc=C3=ADa?= Date: Fri, 31 Jan 2020 14:17:36 -0700 Subject: [PATCH 04/60] Creating parser branch --- src/__init__.py | 1 - src/cool_grammar.py | 4 +++- src/lexer.py | 13 ++++--------- src/main.py | 14 +++++++------- src/output_parser/debug.txt | 0 src/output_parser/parsetab.py | 2 +- src/parser.py | 26 ++++++++++++++++---------- src/tools/errors.py | 5 +++++ src/tools/tokens.py | 4 +--- src/utils/__init__.py | 1 + src/utils/utils.py | 3 +++ 11 files changed, 41 insertions(+), 32 deletions(-) create mode 100644 src/output_parser/debug.txt create mode 100644 src/utils/__init__.py create mode 100644 src/utils/utils.py diff --git a/src/__init__.py b/src/__init__.py index c6cf9b78..e69de29b 100644 --- a/src/__init__.py +++ b/src/__init__.py @@ -1 +0,0 @@ -from src.errors import * \ No newline at end of file diff --git a/src/cool_grammar.py b/src/cool_grammar.py index 8142c54d..4a56f272 100644 --- a/src/cool_grammar.py +++ b/src/cool_grammar.py @@ -1,5 +1,6 @@ from tools.tokens import tokens from tools.ast import * +from utils.utils import find_column #? TODO: If siempre tiene else @@ -247,4 +248,5 @@ def p_arg_list_empty(p): # Error rule for syntax errors def p_error(p): - print("Syntax error in input!") + if p: + print(f"Syntax error in input! {p}") diff --git a/src/lexer.py b/src/lexer.py index 2336e8cf..92109286 100644 --- a/src/lexer.py +++ b/src/lexer.py @@ -2,6 +2,7 @@ from tools.tokens import tokens, reserved, Token from pprint import pprint from tools.errors import LexicographicError +from utils.utils import find_column class CoolLexer: def __init__(self, **kwargs): @@ -16,8 +17,6 @@ def __init__(self, **kwargs): # A string containing ignored characters t_ignore = ' \t\f\r\t\v' - t_def = r'def' - t_print = r'print' t_semi = r';' t_colon = r':' t_comma = r',' @@ -72,22 +71,18 @@ def t_newline(self, t): def t_error(self, t): error_text = LexicographicError.UNKNOWN_TOKEN % t.value line = t.lineno - column = self.find_column(t) + column = find_column(self.lexer, t) self.errors.append(LexicographicError(error_text, line, column)) t.lexer.skip(len(t.value)) - def find_column(self, token): - line_start = self.lexer.lexdata.rfind('\n', 0, token.lexpos) + 1 - return (token.lexpos - line_start) + 1 - - def tokenize_text(self, text): self.lexer.input(text) tokens = [] for tok in self.lexer: - tokens.append(Token(tok.type, tok.value, tok.lineno, self.find_column(tok))) + col = find_column(self.lexer, tok) + tokens.append(Token(tok.type, tok.value, tok.lineno, col)) return tokens diff --git a/src/main.py b/src/main.py index abd55821..c063686f 100644 --- a/src/main.py +++ b/src/main.py @@ -3,15 +3,15 @@ from lexer import CoolLexer from parser import CoolParser -arg_parser = argparse.ArgumentParser() -arg_parser.add_argument('input') -arg_parser.add_argument('output') -args = arg_parser.parse_args() +# arg_parser = argparse.ArgumentParser() +# arg_parser.add_argument('input') +# arg_parser.add_argument('output') +# args = arg_parser.parse_args() -input_ = args.input -output_ = args.output +# input_ = args.input +# output_ = args.output -# input_ = './tests/lexer/test3.cl' +input_ = './tests/parser/err2.cl' try: with open(input_) as f: diff --git a/src/output_parser/debug.txt b/src/output_parser/debug.txt new file mode 100644 index 00000000..e69de29b diff --git a/src/output_parser/parsetab.py b/src/output_parser/parsetab.py index ca78b2f9..a694495c 100644 --- a/src/output_parser/parsetab.py +++ b/src/output_parser/parsetab.py @@ -6,7 +6,7 @@ _lr_method = 'LALR' -_lr_signature = 'programarroba case ccur class colon comma cpar def div dot else equal esac false fi id if in inherits isvoid larrow less lesseq let loop minus new not nox num ocur of opar plus pool print rarrow semi star string then true whileprogram : class_listepsilon :class_list : def_class class_list \n | def_classdef_class : class id ocur feature_list ccur semi \n | class id inherits id ocur feature_list ccur semifeature_list : epsilon\n | def_attr semi feature_list\n | def_func semi feature_listdef_attr : id colon id\n | id colon id larrow exprdef_func : id opar param_list cpar colon id ocur expr ccurparam_list : param\n | param comma param_listparam_list : epsilonparam : id colon idexpr : let let_list in exprexpr : case expr of cases_list esacexpr : if expr then expr else expr fiexpr : while expr loop expr poolexpr : arithlet_list : let_assign\n | let_assign comma let_listlet_assign : param larrow expr\n | paramcases_list : casep semi\n | casep semi cases_listcasep : id colon id rarrow exprarith : id larrow expr\n | not comp\n | comp\n comp : comp less op\n | comp lesseq op\n | comp equal op\n | opop : op plus term\n | op minus term\n | termterm : term star base_call\n | term div base_call\n | isvoid base_call\n | nox base_call\n | base_callbase_call : factor arroba id dot func_call\n | factorfactor : atom\n | opar expr cparfactor : factor dot func_call\n | func_callatom : numatom : idatom : new idatom : ocur block ccuratom : true\n | falseatom : stringblock : expr semi\n | expr semi blockfunc_call : id opar arg_list cpararg_list : expr \n | expr comma arg_listarg_list : epsilon' +_lr_signature = 'programarroba case ccur class colon comma cpar div dot else equal esac false fi id if in inherits isvoid larrow less lesseq let loop minus new not nox num ocur of opar plus pool rarrow semi star string then true whileprogram : class_listepsilon :class_list : def_class class_list \n | def_classdef_class : class id ocur feature_list ccur semi \n | class id inherits id ocur feature_list ccur semifeature_list : epsilon\n | def_attr semi feature_list\n | def_func semi feature_listdef_attr : id colon id\n | id colon id larrow exprdef_func : id opar param_list cpar colon id ocur expr ccurparam_list : param\n | param comma param_listparam_list : epsilonparam : id colon idexpr : let let_list in exprexpr : case expr of cases_list esacexpr : if expr then expr else expr fiexpr : while expr loop expr poolexpr : arithlet_list : let_assign\n | let_assign comma let_listlet_assign : param larrow expr\n | paramcases_list : casep semi\n | casep semi cases_listcasep : id colon id rarrow exprarith : id larrow expr\n | not comp\n | comp\n comp : comp less op\n | comp lesseq op\n | comp equal op\n | opop : op plus term\n | op minus term\n | termterm : term star base_call\n | term div base_call\n | isvoid base_call\n | nox base_call\n | base_callbase_call : factor arroba id dot func_call\n | factorfactor : atom\n | opar expr cparfactor : factor dot func_call\n | func_callatom : numatom : idatom : new idatom : ocur block ccuratom : true\n | falseatom : stringblock : expr semi\n | expr semi blockfunc_call : id opar arg_list cpararg_list : expr \n | expr comma arg_listarg_list : epsilon' _lr_action_items = {'class':([0,3,26,62,],[4,4,-5,-6,]),'$end':([1,2,3,5,26,62,],[0,-1,-4,-3,-5,-6,]),'id':([4,7,8,15,16,18,19,20,30,31,33,37,38,39,40,42,47,48,52,54,55,60,63,64,73,74,75,76,77,78,79,82,83,93,94,95,96,97,98,111,112,114,123,128,129,130,137,],[6,9,14,21,22,9,9,9,35,59,22,22,35,35,35,72,72,72,35,85,35,88,35,35,72,72,72,72,72,72,72,106,108,35,22,35,120,35,35,35,35,35,108,120,135,35,35,]),'ocur':([6,14,30,38,39,40,42,47,48,52,55,63,64,73,74,75,76,77,78,79,88,93,95,97,98,111,112,114,130,137,],[7,20,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,112,55,55,55,55,55,55,55,55,55,]),'inherits':([6,],[8,]),'ccur':([7,10,11,18,19,20,27,28,29,35,41,43,44,45,46,49,50,51,53,56,57,58,71,72,80,81,85,86,89,99,100,101,102,103,104,105,107,109,110,111,113,115,124,125,127,131,132,138,],[-2,17,-7,-2,-2,-2,-8,-9,34,-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,-30,-51,-41,-42,-52,110,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-57,-59,-17,-58,133,-18,-20,-44,-19,]),'colon':([9,22,32,120,],[15,31,60,129,]),'opar':([9,30,35,38,39,40,42,47,48,52,55,63,64,72,73,74,75,76,77,78,79,93,95,97,98,108,111,112,114,130,137,],[16,52,64,52,52,52,52,52,52,52,52,52,52,64,52,52,52,52,52,52,52,52,52,52,52,64,52,52,52,52,52,]),'semi':([12,13,17,21,34,35,36,41,43,44,45,46,49,50,51,53,56,57,58,71,72,80,81,85,87,89,99,100,101,102,103,104,105,107,109,110,113,115,119,127,131,132,133,138,139,],[18,19,26,-10,62,-51,-11,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,-30,-51,-41,-42,-52,111,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,128,-18,-20,-44,-12,-19,-28,]),'cpar':([16,23,24,25,33,35,41,43,44,45,46,49,50,51,53,56,57,58,59,61,64,71,72,80,81,84,85,89,90,91,92,99,100,101,102,103,104,105,107,109,110,113,114,115,126,127,131,132,138,],[-2,32,-13,-15,-2,-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,-16,-14,-2,-30,-51,-41,-42,109,-52,-29,113,-60,-62,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-2,-17,-61,-18,-20,-44,-19,]),'larrow':([21,35,59,67,],[30,63,-16,95,]),'comma':([24,35,41,43,44,45,46,49,50,51,53,56,57,58,59,66,67,71,72,80,81,85,89,91,99,100,101,102,103,104,105,107,109,110,113,115,117,127,131,132,138,],[33,-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,-16,94,-25,-30,-51,-41,-42,-52,-29,114,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,-24,-18,-20,-44,-19,]),'let':([30,38,39,40,52,55,63,64,93,95,97,98,111,112,114,130,137,],[37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,]),'case':([30,38,39,40,52,55,63,64,93,95,97,98,111,112,114,130,137,],[38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,]),'if':([30,38,39,40,52,55,63,64,93,95,97,98,111,112,114,130,137,],[39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,]),'while':([30,38,39,40,52,55,63,64,93,95,97,98,111,112,114,130,137,],[40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,]),'not':([30,38,39,40,52,55,63,64,93,95,97,98,111,112,114,130,137,],[42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,]),'isvoid':([30,38,39,40,42,52,55,63,64,73,74,75,76,77,93,95,97,98,111,112,114,130,137,],[47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,]),'nox':([30,38,39,40,42,52,55,63,64,73,74,75,76,77,93,95,97,98,111,112,114,130,137,],[48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,]),'num':([30,38,39,40,42,47,48,52,55,63,64,73,74,75,76,77,78,79,93,95,97,98,111,112,114,130,137,],[53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,]),'new':([30,38,39,40,42,47,48,52,55,63,64,73,74,75,76,77,78,79,93,95,97,98,111,112,114,130,137,],[54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,]),'true':([30,38,39,40,42,47,48,52,55,63,64,73,74,75,76,77,78,79,93,95,97,98,111,112,114,130,137,],[56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,]),'false':([30,38,39,40,42,47,48,52,55,63,64,73,74,75,76,77,78,79,93,95,97,98,111,112,114,130,137,],[57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,]),'string':([30,38,39,40,42,47,48,52,55,63,64,73,74,75,76,77,78,79,93,95,97,98,111,112,114,130,137,],[58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,]),'arroba':([35,49,50,51,53,56,57,58,72,85,107,109,110,113,],[-51,82,-49,-46,-50,-54,-55,-56,-51,-52,-48,-47,-53,-59,]),'dot':([35,49,50,51,53,56,57,58,72,85,106,107,109,110,113,],[-51,83,-49,-46,-50,-54,-55,-56,-51,-52,123,-48,-47,-53,-59,]),'star':([35,45,46,49,50,51,53,56,57,58,72,80,81,85,102,103,104,105,107,109,110,113,132,],[-51,78,-43,-45,-49,-46,-50,-54,-55,-56,-51,-41,-42,-52,78,78,-39,-40,-48,-47,-53,-59,-44,]),'div':([35,45,46,49,50,51,53,56,57,58,72,80,81,85,102,103,104,105,107,109,110,113,132,],[-51,79,-43,-45,-49,-46,-50,-54,-55,-56,-51,-41,-42,-52,79,79,-39,-40,-48,-47,-53,-59,-44,]),'plus':([35,44,45,46,49,50,51,53,56,57,58,72,80,81,85,99,100,101,102,103,104,105,107,109,110,113,132,],[-51,76,-38,-43,-45,-49,-46,-50,-54,-55,-56,-51,-41,-42,-52,76,76,76,-36,-37,-39,-40,-48,-47,-53,-59,-44,]),'minus':([35,44,45,46,49,50,51,53,56,57,58,72,80,81,85,99,100,101,102,103,104,105,107,109,110,113,132,],[-51,77,-38,-43,-45,-49,-46,-50,-54,-55,-56,-51,-41,-42,-52,77,77,77,-36,-37,-39,-40,-48,-47,-53,-59,-44,]),'less':([35,43,44,45,46,49,50,51,53,56,57,58,71,72,80,81,85,99,100,101,102,103,104,105,107,109,110,113,132,],[-51,73,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,73,-51,-41,-42,-52,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-44,]),'lesseq':([35,43,44,45,46,49,50,51,53,56,57,58,71,72,80,81,85,99,100,101,102,103,104,105,107,109,110,113,132,],[-51,74,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,74,-51,-41,-42,-52,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-44,]),'equal':([35,43,44,45,46,49,50,51,53,56,57,58,71,72,80,81,85,99,100,101,102,103,104,105,107,109,110,113,132,],[-51,75,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,75,-51,-41,-42,-52,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-44,]),'of':([35,41,43,44,45,46,49,50,51,53,56,57,58,68,71,72,80,81,85,89,99,100,101,102,103,104,105,107,109,110,113,115,127,131,132,138,],[-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,96,-30,-51,-41,-42,-52,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,-18,-20,-44,-19,]),'then':([35,41,43,44,45,46,49,50,51,53,56,57,58,69,71,72,80,81,85,89,99,100,101,102,103,104,105,107,109,110,113,115,127,131,132,138,],[-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,97,-30,-51,-41,-42,-52,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,-18,-20,-44,-19,]),'loop':([35,41,43,44,45,46,49,50,51,53,56,57,58,70,71,72,80,81,85,89,99,100,101,102,103,104,105,107,109,110,113,115,127,131,132,138,],[-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,98,-30,-51,-41,-42,-52,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,-18,-20,-44,-19,]),'in':([35,41,43,44,45,46,49,50,51,53,56,57,58,59,65,66,67,71,72,80,81,85,89,99,100,101,102,103,104,105,107,109,110,113,115,116,117,127,131,132,138,],[-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,-16,93,-22,-25,-30,-51,-41,-42,-52,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,-23,-24,-18,-20,-44,-19,]),'else':([35,41,43,44,45,46,49,50,51,53,56,57,58,71,72,80,81,85,89,99,100,101,102,103,104,105,107,109,110,113,115,121,127,131,132,138,],[-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,-30,-51,-41,-42,-52,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,130,-18,-20,-44,-19,]),'pool':([35,41,43,44,45,46,49,50,51,53,56,57,58,71,72,80,81,85,89,99,100,101,102,103,104,105,107,109,110,113,115,122,127,131,132,138,],[-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,-30,-51,-41,-42,-52,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,131,-18,-20,-44,-19,]),'fi':([35,41,43,44,45,46,49,50,51,53,56,57,58,71,72,80,81,85,89,99,100,101,102,103,104,105,107,109,110,113,115,127,131,132,136,138,],[-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,-30,-51,-41,-42,-52,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,-18,-20,-44,138,-19,]),'esac':([118,128,134,],[127,-26,-27,]),'rarrow':([135,],[137,]),} diff --git a/src/parser.py b/src/parser.py index f3329fcb..7c9177e3 100644 --- a/src/parser.py +++ b/src/parser.py @@ -1,6 +1,7 @@ import ply.yacc as yacc from cool_grammar import * from lexer import CoolLexer +from utils.utils import find_column class CoolParser: def __init__(self, lexer=None): @@ -8,23 +9,28 @@ def __init__(self, lexer=None): self.lexer = CoolLexer() else: self.lexer = lexer - self.parser = yacc.yacc(start='program', outputdir='output_parser') + self.parser = yacc.yacc(start='program', outputdir='src/output_parser', debugfile='src/output_parser/debug.txt' ) def parse(self, program, debug=False): + tokens = self.lexer.tokenize_text(program) return self.parser.parse(program, self.lexer.lexer, debug=debug) if __name__ == "__main__": s = ''' - class A { - ackermann ( m : AUTO_TYPE , n : AUTO_TYPE ) : AUTO_TYPE { - if ( m = 0 ) then n + 1 else - if ( n = 0 ) then ackermann ( m - 1 , 1 ) else - ackermann ( m - 1 , ackermann ( m , n - 1 ) ) - fi - fi - } ; - } ; + class Main { + main(): Object { + (new alpha).print() + }; + + }; + + (* Class names must begin with uppercase letters *) + class alpha inherits IO { + print() : Object { + out_string("reached!!\n"); + }; + }; ''' parser = CoolParser() result = parser.parse(s) diff --git a/src/tools/errors.py b/src/tools/errors.py index 420f6c37..111d995f 100644 --- a/src/tools/errors.py +++ b/src/tools/errors.py @@ -18,6 +18,7 @@ def __str__(self): def __repr__(self): return str(self) + class CompilerError(CoolError): 'Se reporta al presentar alguna anomalia con la entrada del compilador' @@ -27,6 +28,7 @@ class CompilerError(CoolError): def error_type(self): return 'CompilerError' + class LexicographicError(CoolError): 'Errores detectados por el lexer' @@ -39,6 +41,7 @@ class LexicographicError(CoolError): def error_type(self): return 'LexicographicError' + class SyntaticError(CoolError): 'Errores detectados en el parser' @@ -48,6 +51,7 @@ class SyntaticError(CoolError): def error_type(self): return 'SyntaticError' + class NameError(CoolError): 'Se reporta al referenciar a un identificador en un ambito en el que no es visible' @@ -82,6 +86,7 @@ class AttributeError(CoolError): def error_type(self): return 'AttributeError' + class SemanticError(CoolError): 'Otros errores semanticos' diff --git a/src/tools/tokens.py b/src/tools/tokens.py index 73169a87..6beff63c 100644 --- a/src/tools/tokens.py +++ b/src/tools/tokens.py @@ -17,9 +17,7 @@ 'new': 'new', 'of': 'of', 'not': 'not', - 'true': 'true', - 'def': 'def', - 'print': 'print' + 'true': 'true' } tokens = [ diff --git a/src/utils/__init__.py b/src/utils/__init__.py new file mode 100644 index 00000000..dd4cc93d --- /dev/null +++ b/src/utils/__init__.py @@ -0,0 +1 @@ +import utils diff --git a/src/utils/utils.py b/src/utils/utils.py new file mode 100644 index 00000000..c1e3c71d --- /dev/null +++ b/src/utils/utils.py @@ -0,0 +1,3 @@ +def find_column(lexer, token): + line_start = lexer.lexdata.rfind('\n', 0, token.lexpos) + 1 + return (token.lexpos - line_start) + 1 From 463557822380b756faa827ffa71d13e0db117232 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Loraine=20Monteagudo=20Garc=C3=ADa?= Date: Fri, 31 Jan 2020 14:57:11 -0700 Subject: [PATCH 05/60] Adding type identifier in the lexer and the parser --- src/cool_grammar.py | 20 +++++++-------- src/lexer.py | 8 +++++- src/parser.py | 2 +- src/tools/tokens.py | 1 + src/utils/tokens.py | 62 --------------------------------------------- 5 files changed, 19 insertions(+), 74 deletions(-) delete mode 100644 src/utils/tokens.py diff --git a/src/cool_grammar.py b/src/cool_grammar.py index 4a56f272..eec0c035 100644 --- a/src/cool_grammar.py +++ b/src/cool_grammar.py @@ -1,6 +1,6 @@ from tools.tokens import tokens from tools.ast import * -from utils.utils import find_column +from errors import SyntaticError #? TODO: If siempre tiene else @@ -21,8 +21,8 @@ def p_class_list(p): p[0] = [p[1]] + p[2] def p_def_class(p): - '''def_class : class id ocur feature_list ccur semi - | class id inherits id ocur feature_list ccur semi''' + '''def_class : class type ocur feature_list ccur semi + | class type inherits type ocur feature_list ccur semi''' if len(p) == 7: p[0] = ClassDeclarationNode(p[2], p[4]) else: @@ -40,15 +40,15 @@ def p_feature_list(p): def p_def_attr(p): - '''def_attr : id colon id - | id colon id larrow expr''' + '''def_attr : id colon type + | id colon type larrow expr''' if len(p) == 4: p[0] = AttrDeclarationNode(p[1], p[3]) else: p[0] = AttrDeclarationNode(p[1], p[3], p[5]) def p_def_func(p): - 'def_func : id opar param_list cpar colon id ocur expr ccur' + 'def_func : id opar param_list cpar colon type ocur expr ccur' p[0] = FuncDeclarationNode(p[1], p[3], p[6], p[8]) def p_param_list(p): @@ -64,7 +64,7 @@ def p_param_list_empty(p): p[0] = [] def p_param(p): - 'param : id colon id' + 'param : id colon type' p[0] = (p[1], p[3]) def p_expr_let(p): @@ -114,7 +114,7 @@ def p_cases_list(p): p[0] = [p[1]] + p[3] def p_case(p): - 'casep : id colon id rarrow expr' + 'casep : id colon type rarrow expr' p[0] = OptionNode(p[1], p[3], p[5]) @@ -174,7 +174,7 @@ def p_term(p): p[0] = DivNode(p[1], p[3]) def p_base_call(p): - '''base_call : factor arroba id dot func_call + '''base_call : factor arroba type dot func_call | factor''' if len(p) == 2: p[0] = p[1] @@ -206,7 +206,7 @@ def p_atom_id(p): p[0] = VariableNode(p[1]) def p_atom_new(p): - 'atom : new id' + 'atom : new type' p[0] = InstantiateNode(p[2]) def p_atom_block(p): diff --git a/src/lexer.py b/src/lexer.py index 92109286..2dd09b5d 100644 --- a/src/lexer.py +++ b/src/lexer.py @@ -39,12 +39,18 @@ def __init__(self, **kwargs): t_lesseq = r'<=' t_inherits = r'inherits' + def t_type(self, t): + r'[A-Z][a-zA-Z_0-9]*' + t.type = self.reserved.get(t.value.lower(), 'type') + return t + # Check for reserved words: def t_id(self, t): - r'[a-zA-Z_][a-zA-Z_0-9]*' + r'[a-z][a-zA-Z_0-9]*' t.type = self.reserved.get(t.value.lower(), 'id') return t + # Get Numbers def t_num(self, t): r'\d+(\.\d+)? ' diff --git a/src/parser.py b/src/parser.py index 7c9177e3..9e288a92 100644 --- a/src/parser.py +++ b/src/parser.py @@ -9,7 +9,7 @@ def __init__(self, lexer=None): self.lexer = CoolLexer() else: self.lexer = lexer - self.parser = yacc.yacc(start='program', outputdir='src/output_parser', debugfile='src/output_parser/debug.txt' ) + self.parser = yacc.yacc(start='program', outputdir='src/output_parser') def parse(self, program, debug=False): tokens = self.lexer.tokenize_text(program) diff --git a/src/tools/tokens.py b/src/tools/tokens.py index 6beff63c..8832d4f8 100644 --- a/src/tools/tokens.py +++ b/src/tools/tokens.py @@ -41,6 +41,7 @@ 'less', # '<' 'lesseq', # '<=' 'id', + 'type', 'num', 'string' ] + list(reserved.values()) diff --git a/src/utils/tokens.py b/src/utils/tokens.py deleted file mode 100644 index 3e5bac26..00000000 --- a/src/utils/tokens.py +++ /dev/null @@ -1,62 +0,0 @@ -reserved = { - 'class': 'class', - 'else': 'else', - 'false': 'false', - 'fi': 'fi', - 'if': 'if', - 'in': 'in', - 'inherits': 'inherits', - 'isvoid': 'isvoid', - 'let': 'let', - 'loop': 'loop', - 'pool': 'pool', - 'then': 'then', - 'while': 'while', - 'case': 'case', - 'esac': 'esac', - 'new': 'new', - 'of': 'of', - 'not': 'not', - 'true': 'true', - 'print': 'print', - 'inherits' : 'inherits' -} - -tokens = [ - 'semi', # '; ' - 'colon', # ': ' - 'comma', # ', ' - 'dot', # '. ' - 'opar', # '( ' - 'cpar', # ') ' - 'ocur', # '{' - 'ccur', # '} ' - 'larrow', # '<-' - 'arroba', # '@' - 'rarrow', # '=> ' - 'nox', # '~' - 'equal', # '=' - 'plus', # '+' - 'minus', # '-' - 'star', # '\*' - 'div', # '/ ' - 'less', # '<' - 'lesseq', # '<=' - 'id', - 'of', - 'num', - 'string' -] + list(reserved.values()) - -class Token: - def __init__(self, lex, type_, lineno, pos): - self.lex = lex - self.type = type_ - self.lineno = lineno - self.pos = pos - - def __str__(self): - return f'{self.type}: {self.lex} ({self.lineno}, {self.pos})' - - def __repr__(self): - return str(self) \ No newline at end of file From 74129f8aaba21147f97ffe7d5338365b0c15e2e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Loraine=20Monteagudo=20Garc=C3=ADa?= Date: Sat, 1 Feb 2020 10:03:37 -0700 Subject: [PATCH 06/60] Tracking line and column in the parser errors --- src/cool_grammar.py | 41 +++++++++- src/lexer.py | 1 - src/output_parser/parsetab.py | 140 ++++++++++++++++++---------------- src/parser.py | 23 ++---- src/tools/ast.py | 3 + src/utils/utils.py | 4 +- tests/parser/err2.cl | 2 +- 7 files changed, 127 insertions(+), 87 deletions(-) diff --git a/src/cool_grammar.py b/src/cool_grammar.py index eec0c035..77ae2b8f 100644 --- a/src/cool_grammar.py +++ b/src/cool_grammar.py @@ -1,12 +1,14 @@ from tools.tokens import tokens from tools.ast import * -from errors import SyntaticError +from tools.errors import SyntaticError +from utils.utils import find_column #? TODO: If siempre tiene else def p_program(p): 'program : class_list' p[0] = p[1] + return p[0] def p_epsilon(p): 'epsilon :' @@ -20,6 +22,14 @@ def p_class_list(p): else: p[0] = [p[1]] + p[2] +def p_empty_parenthesis(p): + '''class_list : opar cpar + | ocur ccur + feature_list : opar cpar + | ocur ccur + ''' + p[0] = [] + def p_def_class(p): '''def_class : class type ocur feature_list ccur semi | class type inherits type ocur feature_list ccur semi''' @@ -29,6 +39,16 @@ def p_def_class(p): p[0] = ClassDeclarationNode(p[2], p[6], p[4]) +def p_def_class_error(p): + '''def_class : class error ocur feature_list ccur semi + | class error inherits type ocur feature_list ccur semi + | class error inherits error ocur feature_list ccur semi + | class type inherits error ocur feature_list ccur semi''' + print('Here') + if p[3].type == 'error': + print_error(p[3]) + + def p_feature_list(p): '''feature_list : epsilon | def_attr semi feature_list @@ -205,10 +225,20 @@ def p_atom_id(p): 'atom : id' p[0] = VariableNode(p[1]) +def p_atom_type(p): + 'atom : type' + p[0] = TypeNode(p[1]) + def p_atom_new(p): 'atom : new type' p[0] = InstantiateNode(p[2]) +def p_atom_new_error(p): + 'atom : new error' + pass + # print_error(p[2]) + + def p_atom_block(p): 'atom : ocur block ccur' p[0] = BlockNode(p[2]) @@ -249,4 +279,11 @@ def p_arg_list_empty(p): # Error rule for syntax errors def p_error(p): if p: - print(f"Syntax error in input! {p}") + print_error(p) + + +def print_error(tok): + error_text = SyntaticError.ERROR % tok.value + column = find_column(tok.lexer, tok) + print(SyntaticError(error_text, tok.lineno, column)) + diff --git a/src/lexer.py b/src/lexer.py index 2dd09b5d..96a209b5 100644 --- a/src/lexer.py +++ b/src/lexer.py @@ -82,7 +82,6 @@ def t_error(self, t): self.errors.append(LexicographicError(error_text, line, column)) t.lexer.skip(len(t.value)) - def tokenize_text(self, text): self.lexer.input(text) tokens = [] diff --git a/src/output_parser/parsetab.py b/src/output_parser/parsetab.py index a694495c..5d1cd3c1 100644 --- a/src/output_parser/parsetab.py +++ b/src/output_parser/parsetab.py @@ -6,9 +6,9 @@ _lr_method = 'LALR' -_lr_signature = 'programarroba case ccur class colon comma cpar div dot else equal esac false fi id if in inherits isvoid larrow less lesseq let loop minus new not nox num ocur of opar plus pool rarrow semi star string then true whileprogram : class_listepsilon :class_list : def_class class_list \n | def_classdef_class : class id ocur feature_list ccur semi \n | class id inherits id ocur feature_list ccur semifeature_list : epsilon\n | def_attr semi feature_list\n | def_func semi feature_listdef_attr : id colon id\n | id colon id larrow exprdef_func : id opar param_list cpar colon id ocur expr ccurparam_list : param\n | param comma param_listparam_list : epsilonparam : id colon idexpr : let let_list in exprexpr : case expr of cases_list esacexpr : if expr then expr else expr fiexpr : while expr loop expr poolexpr : arithlet_list : let_assign\n | let_assign comma let_listlet_assign : param larrow expr\n | paramcases_list : casep semi\n | casep semi cases_listcasep : id colon id rarrow exprarith : id larrow expr\n | not comp\n | comp\n comp : comp less op\n | comp lesseq op\n | comp equal op\n | opop : op plus term\n | op minus term\n | termterm : term star base_call\n | term div base_call\n | isvoid base_call\n | nox base_call\n | base_callbase_call : factor arroba id dot func_call\n | factorfactor : atom\n | opar expr cparfactor : factor dot func_call\n | func_callatom : numatom : idatom : new idatom : ocur block ccuratom : true\n | falseatom : stringblock : expr semi\n | expr semi blockfunc_call : id opar arg_list cpararg_list : expr \n | expr comma arg_listarg_list : epsilon' +_lr_signature = 'programarroba case ccur class colon comma cpar div dot else equal esac false fi id if in inherits isvoid larrow less lesseq let loop minus new not nox num ocur of opar plus pool rarrow semi star string then true type whileprogram : class_listepsilon :class_list : def_class class_list \n | def_classclass_list : opar cpar\n | ocur ccur\n feature_list : opar cpar\n | ocur ccur\n def_class : class type ocur feature_list ccur semi \n | class type inherits type ocur feature_list ccur semidef_class : class error ocur feature_list ccur semi \n | class error inherits type ocur feature_list ccur semi\n | class error inherits error ocur feature_list ccur semi\n | class type inherits error ocur feature_list ccur semifeature_list : epsilon\n | def_attr semi feature_list\n | def_func semi feature_listdef_attr : id colon type\n | id colon type larrow exprdef_func : id opar param_list cpar colon type ocur expr ccurparam_list : param\n | param comma param_listparam_list : epsilonparam : id colon typeexpr : let let_list in exprexpr : case expr of cases_list esacexpr : if expr then expr else expr fiexpr : while expr loop expr poolexpr : arithlet_list : let_assign\n | let_assign comma let_listlet_assign : param larrow expr\n | paramcases_list : casep semi\n | casep semi cases_listcasep : id colon type rarrow exprarith : id larrow expr\n | not comp\n | comp\n comp : comp less op\n | comp lesseq op\n | comp equal op\n | opop : op plus term\n | op minus term\n | termterm : term star base_call\n | term div base_call\n | isvoid base_call\n | nox base_call\n | base_callbase_call : factor arroba type dot func_call\n | factorfactor : atom\n | opar expr cparfactor : factor dot func_call\n | func_callatom : numatom : idatom : typeatom : new typeatom : new erroratom : ocur block ccuratom : true\n | falseatom : stringblock : expr semi\n | expr semi blockfunc_call : id opar arg_list cpararg_list : expr \n | expr comma arg_listarg_list : epsilon' -_lr_action_items = {'class':([0,3,26,62,],[4,4,-5,-6,]),'$end':([1,2,3,5,26,62,],[0,-1,-4,-3,-5,-6,]),'id':([4,7,8,15,16,18,19,20,30,31,33,37,38,39,40,42,47,48,52,54,55,60,63,64,73,74,75,76,77,78,79,82,83,93,94,95,96,97,98,111,112,114,123,128,129,130,137,],[6,9,14,21,22,9,9,9,35,59,22,22,35,35,35,72,72,72,35,85,35,88,35,35,72,72,72,72,72,72,72,106,108,35,22,35,120,35,35,35,35,35,108,120,135,35,35,]),'ocur':([6,14,30,38,39,40,42,47,48,52,55,63,64,73,74,75,76,77,78,79,88,93,95,97,98,111,112,114,130,137,],[7,20,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,112,55,55,55,55,55,55,55,55,55,]),'inherits':([6,],[8,]),'ccur':([7,10,11,18,19,20,27,28,29,35,41,43,44,45,46,49,50,51,53,56,57,58,71,72,80,81,85,86,89,99,100,101,102,103,104,105,107,109,110,111,113,115,124,125,127,131,132,138,],[-2,17,-7,-2,-2,-2,-8,-9,34,-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,-30,-51,-41,-42,-52,110,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-57,-59,-17,-58,133,-18,-20,-44,-19,]),'colon':([9,22,32,120,],[15,31,60,129,]),'opar':([9,30,35,38,39,40,42,47,48,52,55,63,64,72,73,74,75,76,77,78,79,93,95,97,98,108,111,112,114,130,137,],[16,52,64,52,52,52,52,52,52,52,52,52,52,64,52,52,52,52,52,52,52,52,52,52,52,64,52,52,52,52,52,]),'semi':([12,13,17,21,34,35,36,41,43,44,45,46,49,50,51,53,56,57,58,71,72,80,81,85,87,89,99,100,101,102,103,104,105,107,109,110,113,115,119,127,131,132,133,138,139,],[18,19,26,-10,62,-51,-11,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,-30,-51,-41,-42,-52,111,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,128,-18,-20,-44,-12,-19,-28,]),'cpar':([16,23,24,25,33,35,41,43,44,45,46,49,50,51,53,56,57,58,59,61,64,71,72,80,81,84,85,89,90,91,92,99,100,101,102,103,104,105,107,109,110,113,114,115,126,127,131,132,138,],[-2,32,-13,-15,-2,-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,-16,-14,-2,-30,-51,-41,-42,109,-52,-29,113,-60,-62,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-2,-17,-61,-18,-20,-44,-19,]),'larrow':([21,35,59,67,],[30,63,-16,95,]),'comma':([24,35,41,43,44,45,46,49,50,51,53,56,57,58,59,66,67,71,72,80,81,85,89,91,99,100,101,102,103,104,105,107,109,110,113,115,117,127,131,132,138,],[33,-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,-16,94,-25,-30,-51,-41,-42,-52,-29,114,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,-24,-18,-20,-44,-19,]),'let':([30,38,39,40,52,55,63,64,93,95,97,98,111,112,114,130,137,],[37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,]),'case':([30,38,39,40,52,55,63,64,93,95,97,98,111,112,114,130,137,],[38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,]),'if':([30,38,39,40,52,55,63,64,93,95,97,98,111,112,114,130,137,],[39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,]),'while':([30,38,39,40,52,55,63,64,93,95,97,98,111,112,114,130,137,],[40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,]),'not':([30,38,39,40,52,55,63,64,93,95,97,98,111,112,114,130,137,],[42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,]),'isvoid':([30,38,39,40,42,52,55,63,64,73,74,75,76,77,93,95,97,98,111,112,114,130,137,],[47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,]),'nox':([30,38,39,40,42,52,55,63,64,73,74,75,76,77,93,95,97,98,111,112,114,130,137,],[48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,]),'num':([30,38,39,40,42,47,48,52,55,63,64,73,74,75,76,77,78,79,93,95,97,98,111,112,114,130,137,],[53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,]),'new':([30,38,39,40,42,47,48,52,55,63,64,73,74,75,76,77,78,79,93,95,97,98,111,112,114,130,137,],[54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,]),'true':([30,38,39,40,42,47,48,52,55,63,64,73,74,75,76,77,78,79,93,95,97,98,111,112,114,130,137,],[56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,]),'false':([30,38,39,40,42,47,48,52,55,63,64,73,74,75,76,77,78,79,93,95,97,98,111,112,114,130,137,],[57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,]),'string':([30,38,39,40,42,47,48,52,55,63,64,73,74,75,76,77,78,79,93,95,97,98,111,112,114,130,137,],[58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,]),'arroba':([35,49,50,51,53,56,57,58,72,85,107,109,110,113,],[-51,82,-49,-46,-50,-54,-55,-56,-51,-52,-48,-47,-53,-59,]),'dot':([35,49,50,51,53,56,57,58,72,85,106,107,109,110,113,],[-51,83,-49,-46,-50,-54,-55,-56,-51,-52,123,-48,-47,-53,-59,]),'star':([35,45,46,49,50,51,53,56,57,58,72,80,81,85,102,103,104,105,107,109,110,113,132,],[-51,78,-43,-45,-49,-46,-50,-54,-55,-56,-51,-41,-42,-52,78,78,-39,-40,-48,-47,-53,-59,-44,]),'div':([35,45,46,49,50,51,53,56,57,58,72,80,81,85,102,103,104,105,107,109,110,113,132,],[-51,79,-43,-45,-49,-46,-50,-54,-55,-56,-51,-41,-42,-52,79,79,-39,-40,-48,-47,-53,-59,-44,]),'plus':([35,44,45,46,49,50,51,53,56,57,58,72,80,81,85,99,100,101,102,103,104,105,107,109,110,113,132,],[-51,76,-38,-43,-45,-49,-46,-50,-54,-55,-56,-51,-41,-42,-52,76,76,76,-36,-37,-39,-40,-48,-47,-53,-59,-44,]),'minus':([35,44,45,46,49,50,51,53,56,57,58,72,80,81,85,99,100,101,102,103,104,105,107,109,110,113,132,],[-51,77,-38,-43,-45,-49,-46,-50,-54,-55,-56,-51,-41,-42,-52,77,77,77,-36,-37,-39,-40,-48,-47,-53,-59,-44,]),'less':([35,43,44,45,46,49,50,51,53,56,57,58,71,72,80,81,85,99,100,101,102,103,104,105,107,109,110,113,132,],[-51,73,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,73,-51,-41,-42,-52,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-44,]),'lesseq':([35,43,44,45,46,49,50,51,53,56,57,58,71,72,80,81,85,99,100,101,102,103,104,105,107,109,110,113,132,],[-51,74,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,74,-51,-41,-42,-52,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-44,]),'equal':([35,43,44,45,46,49,50,51,53,56,57,58,71,72,80,81,85,99,100,101,102,103,104,105,107,109,110,113,132,],[-51,75,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,75,-51,-41,-42,-52,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-44,]),'of':([35,41,43,44,45,46,49,50,51,53,56,57,58,68,71,72,80,81,85,89,99,100,101,102,103,104,105,107,109,110,113,115,127,131,132,138,],[-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,96,-30,-51,-41,-42,-52,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,-18,-20,-44,-19,]),'then':([35,41,43,44,45,46,49,50,51,53,56,57,58,69,71,72,80,81,85,89,99,100,101,102,103,104,105,107,109,110,113,115,127,131,132,138,],[-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,97,-30,-51,-41,-42,-52,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,-18,-20,-44,-19,]),'loop':([35,41,43,44,45,46,49,50,51,53,56,57,58,70,71,72,80,81,85,89,99,100,101,102,103,104,105,107,109,110,113,115,127,131,132,138,],[-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,98,-30,-51,-41,-42,-52,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,-18,-20,-44,-19,]),'in':([35,41,43,44,45,46,49,50,51,53,56,57,58,59,65,66,67,71,72,80,81,85,89,99,100,101,102,103,104,105,107,109,110,113,115,116,117,127,131,132,138,],[-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,-16,93,-22,-25,-30,-51,-41,-42,-52,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,-23,-24,-18,-20,-44,-19,]),'else':([35,41,43,44,45,46,49,50,51,53,56,57,58,71,72,80,81,85,89,99,100,101,102,103,104,105,107,109,110,113,115,121,127,131,132,138,],[-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,-30,-51,-41,-42,-52,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,130,-18,-20,-44,-19,]),'pool':([35,41,43,44,45,46,49,50,51,53,56,57,58,71,72,80,81,85,89,99,100,101,102,103,104,105,107,109,110,113,115,122,127,131,132,138,],[-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,-30,-51,-41,-42,-52,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,131,-18,-20,-44,-19,]),'fi':([35,41,43,44,45,46,49,50,51,53,56,57,58,71,72,80,81,85,89,99,100,101,102,103,104,105,107,109,110,113,115,127,131,132,136,138,],[-51,-21,-31,-35,-38,-43,-45,-49,-46,-50,-54,-55,-56,-30,-51,-41,-42,-52,-29,-32,-33,-34,-36,-37,-39,-40,-48,-47,-53,-59,-17,-18,-20,-44,138,-19,]),'esac':([118,128,134,],[127,-26,-27,]),'rarrow':([135,],[137,]),} +_lr_action_items = {'opar':([0,3,12,14,22,31,32,35,36,38,39,40,50,53,61,65,66,67,69,74,75,79,82,89,90,91,92,93,94,102,103,104,105,106,107,108,109,124,126,128,129,139,142,143,145,161,168,],[4,4,18,18,34,18,18,18,18,18,18,-9,-11,79,94,79,79,79,79,79,79,79,79,-10,-14,-13,-12,79,79,94,79,79,79,79,79,79,79,79,79,79,79,94,79,79,79,79,79,]),'ocur':([0,3,10,11,12,14,23,24,26,27,31,32,35,36,38,39,40,50,53,65,66,67,69,74,75,79,82,89,90,91,92,93,94,103,104,105,106,107,108,109,119,124,126,128,129,142,143,145,161,168,],[5,5,12,14,16,16,35,36,38,39,16,16,16,16,16,16,-9,-11,82,82,82,82,82,82,82,82,82,-10,-14,-13,-12,82,82,82,82,82,82,82,82,82,143,82,82,82,82,82,82,82,82,82,]),'class':([0,3,40,50,89,90,91,92,],[6,6,-9,-11,-10,-14,-13,-12,]),'$end':([1,2,3,7,8,9,40,50,89,90,91,92,],[0,-1,-4,-3,-5,-6,-9,-11,-10,-14,-13,-12,]),'cpar':([4,18,34,45,46,47,56,61,62,68,70,71,72,73,76,77,78,80,83,84,85,86,88,94,101,102,110,111,114,115,116,120,121,122,123,130,131,132,133,134,135,136,138,140,141,144,145,146,157,158,162,163,169,],[8,30,-2,55,-21,-23,-2,-59,-60,-29,-39,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,-24,-22,-2,-38,-59,-49,-50,140,-61,-62,-37,144,-70,-72,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-69,-2,-25,-71,-26,-28,-52,-27,]),'ccur':([5,12,14,16,17,19,25,28,30,31,32,35,36,38,39,41,42,48,49,51,52,61,62,68,70,71,72,73,76,77,78,80,83,84,85,101,102,110,111,115,116,117,120,130,131,132,133,134,135,136,138,140,141,142,144,146,155,156,158,162,163,169,],[9,-2,-2,28,29,-15,37,-8,-7,-2,-2,-2,-2,-2,-2,-16,-17,57,58,59,60,-59,-60,-29,-39,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,-38,-59,-49,-50,-61,-62,141,-37,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-67,-69,-25,-68,164,-26,-28,-52,-27,]),'type':([6,13,15,33,53,54,65,66,67,69,74,75,79,81,82,87,93,94,103,104,105,106,107,108,109,112,124,126,128,129,142,143,145,160,161,168,],[10,23,27,43,62,86,62,62,62,62,62,62,62,115,62,119,62,62,62,62,62,62,62,62,62,137,62,62,62,62,62,62,62,166,62,62,]),'error':([6,13,15,81,],[11,24,26,116,]),'inherits':([10,11,],[13,15,]),'id':([12,14,31,32,34,35,36,38,39,53,56,64,65,66,67,69,74,75,79,82,93,94,103,104,105,106,107,108,109,113,124,125,126,127,128,129,142,143,145,154,159,161,168,],[22,22,22,22,44,22,22,22,22,61,44,44,61,61,61,102,102,102,61,61,61,61,102,102,102,102,102,102,102,139,61,44,61,151,61,61,61,61,61,139,151,61,61,]),'semi':([20,21,29,37,43,57,58,59,60,61,62,63,68,70,71,72,73,76,77,78,80,83,84,85,101,102,110,111,115,116,118,120,130,131,132,133,134,135,136,138,140,141,144,146,150,158,162,163,164,169,170,],[31,32,40,50,-18,89,90,91,92,-59,-60,-19,-29,-39,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,-38,-59,-49,-50,-61,-62,142,-37,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-69,-25,159,-26,-28,-52,-20,-27,-36,]),'colon':([22,44,55,151,],[33,54,87,160,]),'larrow':([43,61,86,97,],[53,93,-24,126,]),'comma':([46,61,62,68,70,71,72,73,76,77,78,80,83,84,85,86,96,97,101,102,110,111,115,116,120,122,130,131,132,133,134,135,136,138,140,141,144,146,148,158,162,163,169,],[56,-59,-60,-29,-39,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,-24,125,-33,-38,-59,-49,-50,-61,-62,-37,145,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-69,-25,-32,-26,-28,-52,-27,]),'let':([53,65,66,67,79,82,93,94,124,126,128,129,142,143,145,161,168,],[64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,]),'case':([53,65,66,67,79,82,93,94,124,126,128,129,142,143,145,161,168,],[65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,]),'if':([53,65,66,67,79,82,93,94,124,126,128,129,142,143,145,161,168,],[66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,]),'while':([53,65,66,67,79,82,93,94,124,126,128,129,142,143,145,161,168,],[67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,]),'not':([53,65,66,67,79,82,93,94,124,126,128,129,142,143,145,161,168,],[69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,]),'isvoid':([53,65,66,67,69,79,82,93,94,103,104,105,106,107,124,126,128,129,142,143,145,161,168,],[74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,]),'nox':([53,65,66,67,69,79,82,93,94,103,104,105,106,107,124,126,128,129,142,143,145,161,168,],[75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,]),'num':([53,65,66,67,69,74,75,79,82,93,94,103,104,105,106,107,108,109,124,126,128,129,142,143,145,161,168,],[80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,]),'new':([53,65,66,67,69,74,75,79,82,93,94,103,104,105,106,107,108,109,124,126,128,129,142,143,145,161,168,],[81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,]),'true':([53,65,66,67,69,74,75,79,82,93,94,103,104,105,106,107,108,109,124,126,128,129,142,143,145,161,168,],[83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,]),'false':([53,65,66,67,69,74,75,79,82,93,94,103,104,105,106,107,108,109,124,126,128,129,142,143,145,161,168,],[84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,]),'string':([53,65,66,67,69,74,75,79,82,93,94,103,104,105,106,107,108,109,124,126,128,129,142,143,145,161,168,],[85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,]),'arroba':([61,62,76,77,78,80,83,84,85,102,115,116,138,140,141,144,],[-59,-60,112,-57,-54,-58,-64,-65,-66,-59,-61,-62,-56,-55,-63,-69,]),'dot':([61,62,76,77,78,80,83,84,85,102,115,116,137,138,140,141,144,],[-59,-60,113,-57,-54,-58,-64,-65,-66,-59,-61,-62,154,-56,-55,-63,-69,]),'star':([61,62,72,73,76,77,78,80,83,84,85,102,110,111,115,116,133,134,135,136,138,140,141,144,163,],[-59,-60,108,-51,-53,-57,-54,-58,-64,-65,-66,-59,-49,-50,-61,-62,108,108,-47,-48,-56,-55,-63,-69,-52,]),'div':([61,62,72,73,76,77,78,80,83,84,85,102,110,111,115,116,133,134,135,136,138,140,141,144,163,],[-59,-60,109,-51,-53,-57,-54,-58,-64,-65,-66,-59,-49,-50,-61,-62,109,109,-47,-48,-56,-55,-63,-69,-52,]),'plus':([61,62,71,72,73,76,77,78,80,83,84,85,102,110,111,115,116,130,131,132,133,134,135,136,138,140,141,144,163,],[-59,-60,106,-46,-51,-53,-57,-54,-58,-64,-65,-66,-59,-49,-50,-61,-62,106,106,106,-44,-45,-47,-48,-56,-55,-63,-69,-52,]),'minus':([61,62,71,72,73,76,77,78,80,83,84,85,102,110,111,115,116,130,131,132,133,134,135,136,138,140,141,144,163,],[-59,-60,107,-46,-51,-53,-57,-54,-58,-64,-65,-66,-59,-49,-50,-61,-62,107,107,107,-44,-45,-47,-48,-56,-55,-63,-69,-52,]),'less':([61,62,70,71,72,73,76,77,78,80,83,84,85,101,102,110,111,115,116,130,131,132,133,134,135,136,138,140,141,144,163,],[-59,-60,103,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,103,-59,-49,-50,-61,-62,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-69,-52,]),'lesseq':([61,62,70,71,72,73,76,77,78,80,83,84,85,101,102,110,111,115,116,130,131,132,133,134,135,136,138,140,141,144,163,],[-59,-60,104,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,104,-59,-49,-50,-61,-62,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-69,-52,]),'equal':([61,62,70,71,72,73,76,77,78,80,83,84,85,101,102,110,111,115,116,130,131,132,133,134,135,136,138,140,141,144,163,],[-59,-60,105,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,105,-59,-49,-50,-61,-62,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-69,-52,]),'of':([61,62,68,70,71,72,73,76,77,78,80,83,84,85,98,101,102,110,111,115,116,120,130,131,132,133,134,135,136,138,140,141,144,146,158,162,163,169,],[-59,-60,-29,-39,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,127,-38,-59,-49,-50,-61,-62,-37,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-69,-25,-26,-28,-52,-27,]),'then':([61,62,68,70,71,72,73,76,77,78,80,83,84,85,99,101,102,110,111,115,116,120,130,131,132,133,134,135,136,138,140,141,144,146,158,162,163,169,],[-59,-60,-29,-39,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,128,-38,-59,-49,-50,-61,-62,-37,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-69,-25,-26,-28,-52,-27,]),'loop':([61,62,68,70,71,72,73,76,77,78,80,83,84,85,100,101,102,110,111,115,116,120,130,131,132,133,134,135,136,138,140,141,144,146,158,162,163,169,],[-59,-60,-29,-39,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,129,-38,-59,-49,-50,-61,-62,-37,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-69,-25,-26,-28,-52,-27,]),'in':([61,62,68,70,71,72,73,76,77,78,80,83,84,85,86,95,96,97,101,102,110,111,115,116,120,130,131,132,133,134,135,136,138,140,141,144,146,147,148,158,162,163,169,],[-59,-60,-29,-39,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,-24,124,-30,-33,-38,-59,-49,-50,-61,-62,-37,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-69,-25,-31,-32,-26,-28,-52,-27,]),'else':([61,62,68,70,71,72,73,76,77,78,80,83,84,85,101,102,110,111,115,116,120,130,131,132,133,134,135,136,138,140,141,144,146,152,158,162,163,169,],[-59,-60,-29,-39,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,-38,-59,-49,-50,-61,-62,-37,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-69,-25,161,-26,-28,-52,-27,]),'pool':([61,62,68,70,71,72,73,76,77,78,80,83,84,85,101,102,110,111,115,116,120,130,131,132,133,134,135,136,138,140,141,144,146,153,158,162,163,169,],[-59,-60,-29,-39,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,-38,-59,-49,-50,-61,-62,-37,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-69,-25,162,-26,-28,-52,-27,]),'fi':([61,62,68,70,71,72,73,76,77,78,80,83,84,85,101,102,110,111,115,116,120,130,131,132,133,134,135,136,138,140,141,144,146,158,162,163,167,169,],[-59,-60,-29,-39,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,-38,-59,-49,-50,-61,-62,-37,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-69,-25,-26,-28,-52,169,-27,]),'esac':([149,159,165,],[158,-34,-35,]),'rarrow':([166,],[168,]),} _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 = {'program':([0,],[1,]),'class_list':([0,3,],[2,5,]),'def_class':([0,3,],[3,3,]),'feature_list':([7,18,19,20,],[10,27,28,29,]),'epsilon':([7,16,18,19,20,33,64,114,],[11,25,11,11,11,25,92,92,]),'def_attr':([7,18,19,20,],[12,12,12,12,]),'def_func':([7,18,19,20,],[13,13,13,13,]),'param_list':([16,33,],[23,61,]),'param':([16,33,37,94,],[24,24,67,67,]),'expr':([30,38,39,40,52,55,63,64,93,95,97,98,111,112,114,130,137,],[36,68,69,70,84,87,89,91,115,117,121,122,87,125,91,136,139,]),'arith':([30,38,39,40,52,55,63,64,93,95,97,98,111,112,114,130,137,],[41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,]),'comp':([30,38,39,40,42,52,55,63,64,93,95,97,98,111,112,114,130,137,],[43,43,43,43,71,43,43,43,43,43,43,43,43,43,43,43,43,43,]),'op':([30,38,39,40,42,52,55,63,64,73,74,75,93,95,97,98,111,112,114,130,137,],[44,44,44,44,44,44,44,44,44,99,100,101,44,44,44,44,44,44,44,44,44,]),'term':([30,38,39,40,42,52,55,63,64,73,74,75,76,77,93,95,97,98,111,112,114,130,137,],[45,45,45,45,45,45,45,45,45,45,45,45,102,103,45,45,45,45,45,45,45,45,45,]),'base_call':([30,38,39,40,42,47,48,52,55,63,64,73,74,75,76,77,78,79,93,95,97,98,111,112,114,130,137,],[46,46,46,46,46,80,81,46,46,46,46,46,46,46,46,46,104,105,46,46,46,46,46,46,46,46,46,]),'factor':([30,38,39,40,42,47,48,52,55,63,64,73,74,75,76,77,78,79,93,95,97,98,111,112,114,130,137,],[49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,]),'func_call':([30,38,39,40,42,47,48,52,55,63,64,73,74,75,76,77,78,79,83,93,95,97,98,111,112,114,123,130,137,],[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,107,50,50,50,50,50,50,50,132,50,50,]),'atom':([30,38,39,40,42,47,48,52,55,63,64,73,74,75,76,77,78,79,93,95,97,98,111,112,114,130,137,],[51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,]),'let_list':([37,94,],[65,116,]),'let_assign':([37,94,],[66,66,]),'block':([55,111,],[86,124,]),'arg_list':([64,114,],[90,126,]),'cases_list':([96,128,],[118,134,]),'casep':([96,128,],[119,119,]),} +_lr_goto_items = {'program':([0,],[1,]),'class_list':([0,3,],[2,7,]),'def_class':([0,3,],[3,3,]),'feature_list':([12,14,31,32,35,36,38,39,],[17,25,41,42,48,49,51,52,]),'epsilon':([12,14,31,32,34,35,36,38,39,56,94,145,],[19,19,19,19,47,19,19,19,19,47,123,123,]),'def_attr':([12,14,31,32,35,36,38,39,],[20,20,20,20,20,20,20,20,]),'def_func':([12,14,31,32,35,36,38,39,],[21,21,21,21,21,21,21,21,]),'param_list':([34,56,],[45,88,]),'param':([34,56,64,125,],[46,46,97,97,]),'expr':([53,65,66,67,79,82,93,94,124,126,128,129,142,143,145,161,168,],[63,98,99,100,114,118,120,122,146,148,152,153,118,156,122,167,170,]),'arith':([53,65,66,67,79,82,93,94,124,126,128,129,142,143,145,161,168,],[68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,]),'comp':([53,65,66,67,69,79,82,93,94,124,126,128,129,142,143,145,161,168,],[70,70,70,70,101,70,70,70,70,70,70,70,70,70,70,70,70,70,]),'op':([53,65,66,67,69,79,82,93,94,103,104,105,124,126,128,129,142,143,145,161,168,],[71,71,71,71,71,71,71,71,71,130,131,132,71,71,71,71,71,71,71,71,71,]),'term':([53,65,66,67,69,79,82,93,94,103,104,105,106,107,124,126,128,129,142,143,145,161,168,],[72,72,72,72,72,72,72,72,72,72,72,72,133,134,72,72,72,72,72,72,72,72,72,]),'base_call':([53,65,66,67,69,74,75,79,82,93,94,103,104,105,106,107,108,109,124,126,128,129,142,143,145,161,168,],[73,73,73,73,73,110,111,73,73,73,73,73,73,73,73,73,135,136,73,73,73,73,73,73,73,73,73,]),'factor':([53,65,66,67,69,74,75,79,82,93,94,103,104,105,106,107,108,109,124,126,128,129,142,143,145,161,168,],[76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,]),'func_call':([53,65,66,67,69,74,75,79,82,93,94,103,104,105,106,107,108,109,113,124,126,128,129,142,143,145,154,161,168,],[77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,138,77,77,77,77,77,77,77,163,77,77,]),'atom':([53,65,66,67,69,74,75,79,82,93,94,103,104,105,106,107,108,109,124,126,128,129,142,143,145,161,168,],[78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,]),'let_list':([64,125,],[95,147,]),'let_assign':([64,125,],[96,96,]),'block':([82,142,],[117,155,]),'arg_list':([94,145,],[121,157,]),'cases_list':([127,159,],[149,165,]),'casep':([127,159,],[150,150,]),} _lr_goto = {} for _k, _v in _lr_goto_items.items(): @@ -27,66 +27,76 @@ del _lr_goto_items _lr_productions = [ ("S' -> program","S'",1,None,None,None), - ('program -> class_list','program',1,'p_program','cool_grammar.py',7), - ('epsilon -> ','epsilon',0,'p_epsilon','cool_grammar.py',11), - ('class_list -> def_class class_list','class_list',2,'p_class_list','cool_grammar.py',15), - ('class_list -> def_class','class_list',1,'p_class_list','cool_grammar.py',16), - ('def_class -> class id ocur feature_list ccur semi','def_class',6,'p_def_class','cool_grammar.py',23), - ('def_class -> class id inherits id ocur feature_list ccur semi','def_class',8,'p_def_class','cool_grammar.py',24), - ('feature_list -> epsilon','feature_list',1,'p_feature_list','cool_grammar.py',32), - ('feature_list -> def_attr semi feature_list','feature_list',3,'p_feature_list','cool_grammar.py',33), - ('feature_list -> def_func semi feature_list','feature_list',3,'p_feature_list','cool_grammar.py',34), - ('def_attr -> id colon id','def_attr',3,'p_def_attr','cool_grammar.py',42), - ('def_attr -> id colon id larrow expr','def_attr',5,'p_def_attr','cool_grammar.py',43), - ('def_func -> id opar param_list cpar colon id ocur expr ccur','def_func',9,'p_def_func','cool_grammar.py',50), - ('param_list -> param','param_list',1,'p_param_list','cool_grammar.py',54), - ('param_list -> param comma param_list','param_list',3,'p_param_list','cool_grammar.py',55), - ('param_list -> epsilon','param_list',1,'p_param_list_empty','cool_grammar.py',62), - ('param -> id colon id','param',3,'p_param','cool_grammar.py',66), - ('expr -> let let_list in expr','expr',4,'p_expr_let','cool_grammar.py',70), - ('expr -> case expr of cases_list esac','expr',5,'p_expr_case','cool_grammar.py',74), - ('expr -> if expr then expr else expr fi','expr',7,'p_expr_if','cool_grammar.py',78), - ('expr -> while expr loop expr pool','expr',5,'p_expr_while','cool_grammar.py',82), - ('expr -> arith','expr',1,'p_expr_arith','cool_grammar.py',86), - ('let_list -> let_assign','let_list',1,'p_let_list','cool_grammar.py',91), - ('let_list -> let_assign comma let_list','let_list',3,'p_let_list','cool_grammar.py',92), - ('let_assign -> param larrow expr','let_assign',3,'p_let_assign','cool_grammar.py',99), - ('let_assign -> param','let_assign',1,'p_let_assign','cool_grammar.py',100), - ('cases_list -> casep semi','cases_list',2,'p_cases_list','cool_grammar.py',108), - ('cases_list -> casep semi cases_list','cases_list',3,'p_cases_list','cool_grammar.py',109), - ('casep -> id colon id rarrow expr','casep',5,'p_case','cool_grammar.py',116), - ('arith -> id larrow expr','arith',3,'p_arith','cool_grammar.py',121), - ('arith -> not comp','arith',2,'p_arith','cool_grammar.py',122), - ('arith -> comp','arith',1,'p_arith','cool_grammar.py',123), - ('comp -> comp less op','comp',3,'p_comp','cool_grammar.py',133), - ('comp -> comp lesseq op','comp',3,'p_comp','cool_grammar.py',134), - ('comp -> comp equal op','comp',3,'p_comp','cool_grammar.py',135), - ('comp -> op','comp',1,'p_comp','cool_grammar.py',136), - ('op -> op plus term','op',3,'p_op','cool_grammar.py',148), - ('op -> op minus term','op',3,'p_op','cool_grammar.py',149), - ('op -> term','op',1,'p_op','cool_grammar.py',150), - ('term -> term star base_call','term',3,'p_term','cool_grammar.py',159), - ('term -> term div base_call','term',3,'p_term','cool_grammar.py',160), - ('term -> isvoid base_call','term',2,'p_term','cool_grammar.py',161), - ('term -> nox base_call','term',2,'p_term','cool_grammar.py',162), - ('term -> base_call','term',1,'p_term','cool_grammar.py',163), - ('base_call -> factor arroba id dot func_call','base_call',5,'p_base_call','cool_grammar.py',176), - ('base_call -> factor','base_call',1,'p_base_call','cool_grammar.py',177), - ('factor -> atom','factor',1,'p_factor1','cool_grammar.py',184), - ('factor -> opar expr cpar','factor',3,'p_factor1','cool_grammar.py',185), - ('factor -> factor dot func_call','factor',3,'p_factor2','cool_grammar.py',192), - ('factor -> func_call','factor',1,'p_factor2','cool_grammar.py',193), - ('atom -> num','atom',1,'p_atom_num','cool_grammar.py',200), - ('atom -> id','atom',1,'p_atom_id','cool_grammar.py',204), - ('atom -> new id','atom',2,'p_atom_new','cool_grammar.py',208), - ('atom -> ocur block ccur','atom',3,'p_atom_block','cool_grammar.py',212), - ('atom -> true','atom',1,'p_atom_boolean','cool_grammar.py',216), - ('atom -> false','atom',1,'p_atom_boolean','cool_grammar.py',217), - ('atom -> string','atom',1,'p_atom_string','cool_grammar.py',221), - ('block -> expr semi','block',2,'p_block','cool_grammar.py',225), - ('block -> expr semi block','block',3,'p_block','cool_grammar.py',226), - ('func_call -> id opar arg_list cpar','func_call',4,'p_func_call','cool_grammar.py',233), - ('arg_list -> expr','arg_list',1,'p_arg_list','cool_grammar.py',237), - ('arg_list -> expr comma arg_list','arg_list',3,'p_arg_list','cool_grammar.py',238), - ('arg_list -> epsilon','arg_list',1,'p_arg_list_empty','cool_grammar.py',245), + ('program -> class_list','program',1,'p_program','cool_grammar.py',9), + ('epsilon -> ','epsilon',0,'p_epsilon','cool_grammar.py',14), + ('class_list -> def_class class_list','class_list',2,'p_class_list','cool_grammar.py',18), + ('class_list -> def_class','class_list',1,'p_class_list','cool_grammar.py',19), + ('class_list -> opar cpar','class_list',2,'p_empty_parenthesis','cool_grammar.py',26), + ('class_list -> ocur ccur','class_list',2,'p_empty_parenthesis','cool_grammar.py',27), + ('feature_list -> opar cpar','feature_list',2,'p_empty_parenthesis','cool_grammar.py',28), + ('feature_list -> ocur ccur','feature_list',2,'p_empty_parenthesis','cool_grammar.py',29), + ('def_class -> class type ocur feature_list ccur semi','def_class',6,'p_def_class','cool_grammar.py',34), + ('def_class -> class type inherits type ocur feature_list ccur semi','def_class',8,'p_def_class','cool_grammar.py',35), + ('def_class -> class error ocur feature_list ccur semi','def_class',6,'p_def_class_error','cool_grammar.py',43), + ('def_class -> class error inherits type ocur feature_list ccur semi','def_class',8,'p_def_class_error','cool_grammar.py',44), + ('def_class -> class error inherits error ocur feature_list ccur semi','def_class',8,'p_def_class_error','cool_grammar.py',45), + ('def_class -> class type inherits error ocur feature_list ccur semi','def_class',8,'p_def_class_error','cool_grammar.py',46), + ('feature_list -> epsilon','feature_list',1,'p_feature_list','cool_grammar.py',53), + ('feature_list -> def_attr semi feature_list','feature_list',3,'p_feature_list','cool_grammar.py',54), + ('feature_list -> def_func semi feature_list','feature_list',3,'p_feature_list','cool_grammar.py',55), + ('def_attr -> id colon type','def_attr',3,'p_def_attr','cool_grammar.py',63), + ('def_attr -> id colon type larrow expr','def_attr',5,'p_def_attr','cool_grammar.py',64), + ('def_func -> id opar param_list cpar colon type ocur expr ccur','def_func',9,'p_def_func','cool_grammar.py',71), + ('param_list -> param','param_list',1,'p_param_list','cool_grammar.py',75), + ('param_list -> param comma param_list','param_list',3,'p_param_list','cool_grammar.py',76), + ('param_list -> epsilon','param_list',1,'p_param_list_empty','cool_grammar.py',83), + ('param -> id colon type','param',3,'p_param','cool_grammar.py',87), + ('expr -> let let_list in expr','expr',4,'p_expr_let','cool_grammar.py',91), + ('expr -> case expr of cases_list esac','expr',5,'p_expr_case','cool_grammar.py',95), + ('expr -> if expr then expr else expr fi','expr',7,'p_expr_if','cool_grammar.py',99), + ('expr -> while expr loop expr pool','expr',5,'p_expr_while','cool_grammar.py',103), + ('expr -> arith','expr',1,'p_expr_arith','cool_grammar.py',107), + ('let_list -> let_assign','let_list',1,'p_let_list','cool_grammar.py',112), + ('let_list -> let_assign comma let_list','let_list',3,'p_let_list','cool_grammar.py',113), + ('let_assign -> param larrow expr','let_assign',3,'p_let_assign','cool_grammar.py',120), + ('let_assign -> param','let_assign',1,'p_let_assign','cool_grammar.py',121), + ('cases_list -> casep semi','cases_list',2,'p_cases_list','cool_grammar.py',129), + ('cases_list -> casep semi cases_list','cases_list',3,'p_cases_list','cool_grammar.py',130), + ('casep -> id colon type rarrow expr','casep',5,'p_case','cool_grammar.py',137), + ('arith -> id larrow expr','arith',3,'p_arith','cool_grammar.py',142), + ('arith -> not comp','arith',2,'p_arith','cool_grammar.py',143), + ('arith -> comp','arith',1,'p_arith','cool_grammar.py',144), + ('comp -> comp less op','comp',3,'p_comp','cool_grammar.py',154), + ('comp -> comp lesseq op','comp',3,'p_comp','cool_grammar.py',155), + ('comp -> comp equal op','comp',3,'p_comp','cool_grammar.py',156), + ('comp -> op','comp',1,'p_comp','cool_grammar.py',157), + ('op -> op plus term','op',3,'p_op','cool_grammar.py',169), + ('op -> op minus term','op',3,'p_op','cool_grammar.py',170), + ('op -> term','op',1,'p_op','cool_grammar.py',171), + ('term -> term star base_call','term',3,'p_term','cool_grammar.py',180), + ('term -> term div base_call','term',3,'p_term','cool_grammar.py',181), + ('term -> isvoid base_call','term',2,'p_term','cool_grammar.py',182), + ('term -> nox base_call','term',2,'p_term','cool_grammar.py',183), + ('term -> base_call','term',1,'p_term','cool_grammar.py',184), + ('base_call -> factor arroba type dot func_call','base_call',5,'p_base_call','cool_grammar.py',197), + ('base_call -> factor','base_call',1,'p_base_call','cool_grammar.py',198), + ('factor -> atom','factor',1,'p_factor1','cool_grammar.py',205), + ('factor -> opar expr cpar','factor',3,'p_factor1','cool_grammar.py',206), + ('factor -> factor dot func_call','factor',3,'p_factor2','cool_grammar.py',213), + ('factor -> func_call','factor',1,'p_factor2','cool_grammar.py',214), + ('atom -> num','atom',1,'p_atom_num','cool_grammar.py',221), + ('atom -> id','atom',1,'p_atom_id','cool_grammar.py',225), + ('atom -> type','atom',1,'p_atom_type','cool_grammar.py',229), + ('atom -> new type','atom',2,'p_atom_new','cool_grammar.py',233), + ('atom -> new error','atom',2,'p_atom_new_error','cool_grammar.py',237), + ('atom -> ocur block ccur','atom',3,'p_atom_block','cool_grammar.py',243), + ('atom -> true','atom',1,'p_atom_boolean','cool_grammar.py',247), + ('atom -> false','atom',1,'p_atom_boolean','cool_grammar.py',248), + ('atom -> string','atom',1,'p_atom_string','cool_grammar.py',252), + ('block -> expr semi','block',2,'p_block','cool_grammar.py',256), + ('block -> expr semi block','block',3,'p_block','cool_grammar.py',257), + ('func_call -> id opar arg_list cpar','func_call',4,'p_func_call','cool_grammar.py',264), + ('arg_list -> expr','arg_list',1,'p_arg_list','cool_grammar.py',268), + ('arg_list -> expr comma arg_list','arg_list',3,'p_arg_list','cool_grammar.py',269), + ('arg_list -> epsilon','arg_list',1,'p_arg_list_empty','cool_grammar.py',276), ] diff --git a/src/parser.py b/src/parser.py index 9e288a92..eac68c75 100644 --- a/src/parser.py +++ b/src/parser.py @@ -1,7 +1,7 @@ import ply.yacc as yacc from cool_grammar import * from lexer import CoolLexer -from utils.utils import find_column + class CoolParser: def __init__(self, lexer=None): @@ -12,25 +12,16 @@ def __init__(self, lexer=None): self.parser = yacc.yacc(start='program', outputdir='src/output_parser') def parse(self, program, debug=False): - tokens = self.lexer.tokenize_text(program) + # tokens = self.lexer.tokenize_text(program) return self.parser.parse(program, self.lexer.lexer, debug=debug) if __name__ == "__main__": - s = ''' - class Main { - main(): Object { - (new alpha).print() - }; - - }; - - (* Class names must begin with uppercase letters *) - class alpha inherits IO { - print() : Object { - out_string("reached!!\n"); - }; - }; + s = '''class Main inherits IO { + mod(i : Int, ) : Int { -- Formal list must be comma separated. A comma does not terminate a list of formals. + i - (i/k)*k + }; +}; ''' parser = CoolParser() result = parser.parse(s) diff --git a/src/tools/ast.py b/src/tools/ast.py index 4fbfb2da..3b2c5ad4 100644 --- a/src/tools/ast.py +++ b/src/tools/ast.py @@ -140,6 +140,9 @@ class ConstantStrNode(AtomicNode): class VariableNode(AtomicNode): pass +class TypeNode(AtomicNode): + pass + class InstantiateNode(AtomicNode): pass diff --git a/src/utils/utils.py b/src/utils/utils.py index c1e3c71d..c996546e 100644 --- a/src/utils/utils.py +++ b/src/utils/utils.py @@ -1,3 +1,3 @@ def find_column(lexer, token): - line_start = lexer.lexdata.rfind('\n', 0, token.lexpos) + 1 - return (token.lexpos - line_start) + 1 + line_start = lexer.lexdata.rfind('\n', 0, token.lexpos) + return (token.lexpos - line_start) diff --git a/tests/parser/err2.cl b/tests/parser/err2.cl index d9748a8f..72304e38 100644 --- a/tests/parser/err2.cl +++ b/tests/parser/err2.cl @@ -5,7 +5,7 @@ class Main { }; -(* Class names must begin with uppercase letters *) +-- (* Class names must begin with uppercase letters *) class alpha inherits IO { print() : Object { out_string("reached!!\n"); From 62f5ff21d46b5853c536ca45ad6043c191fc67cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Loraine=20Monteagudo=20Garc=C3=ADa?= Date: Sun, 16 Feb 2020 11:56:35 -0700 Subject: [PATCH 07/60] Fixing formals and arguments list empty --- src/cool_grammar.py | 27 ++++++-- src/output_parser/parsetab.py | 116 ++++++++++++++++++---------------- 2 files changed, 81 insertions(+), 62 deletions(-) diff --git a/src/cool_grammar.py b/src/cool_grammar.py index 77ae2b8f..bbe5efbb 100644 --- a/src/cool_grammar.py +++ b/src/cool_grammar.py @@ -68,9 +68,17 @@ def p_def_attr(p): p[0] = AttrDeclarationNode(p[1], p[3], p[5]) def p_def_func(p): - 'def_func : id opar param_list cpar colon type ocur expr ccur' + 'def_func : id opar formals cpar colon type ocur expr ccur' p[0] = FuncDeclarationNode(p[1], p[3], p[6], p[8]) + +def p_formals(p): + '''formals : param_list + | param_list_empty + ''' + p[0] = p[1] + + def p_param_list(p): '''param_list : param | param comma param_list''' @@ -80,7 +88,7 @@ def p_param_list(p): p[0] = [p[1]] + p[3] def p_param_list_empty(p): - 'param_list : epsilon' + 'param_list_empty : epsilon' p[0] = [] def p_param(p): @@ -236,8 +244,6 @@ def p_atom_new(p): def p_atom_new_error(p): 'atom : new error' pass - # print_error(p[2]) - def p_atom_block(p): 'atom : ocur block ccur' @@ -261,9 +267,17 @@ def p_block(p): p[0] = [p[1]] + p[3] def p_func_call(p): - 'func_call : id opar arg_list cpar' + 'func_call : id opar args cpar' p[0] = (p[1], p[3]) + +def p_args(p): + '''args : arg_list + | arg_list_empty + ''' + p[0] = p[1] + + def p_arg_list(p): '''arg_list : expr | expr comma arg_list''' @@ -272,8 +286,9 @@ def p_arg_list(p): else: p[0] = [p[1]] + p[3] + def p_arg_list_empty(p): - 'arg_list : epsilon' + 'arg_list_empty : epsilon' p[0] = [] # Error rule for syntax errors diff --git a/src/output_parser/parsetab.py b/src/output_parser/parsetab.py index 5d1cd3c1..bddb8de3 100644 --- a/src/output_parser/parsetab.py +++ b/src/output_parser/parsetab.py @@ -6,9 +6,9 @@ _lr_method = 'LALR' -_lr_signature = 'programarroba case ccur class colon comma cpar div dot else equal esac false fi id if in inherits isvoid larrow less lesseq let loop minus new not nox num ocur of opar plus pool rarrow semi star string then true type whileprogram : class_listepsilon :class_list : def_class class_list \n | def_classclass_list : opar cpar\n | ocur ccur\n feature_list : opar cpar\n | ocur ccur\n def_class : class type ocur feature_list ccur semi \n | class type inherits type ocur feature_list ccur semidef_class : class error ocur feature_list ccur semi \n | class error inherits type ocur feature_list ccur semi\n | class error inherits error ocur feature_list ccur semi\n | class type inherits error ocur feature_list ccur semifeature_list : epsilon\n | def_attr semi feature_list\n | def_func semi feature_listdef_attr : id colon type\n | id colon type larrow exprdef_func : id opar param_list cpar colon type ocur expr ccurparam_list : param\n | param comma param_listparam_list : epsilonparam : id colon typeexpr : let let_list in exprexpr : case expr of cases_list esacexpr : if expr then expr else expr fiexpr : while expr loop expr poolexpr : arithlet_list : let_assign\n | let_assign comma let_listlet_assign : param larrow expr\n | paramcases_list : casep semi\n | casep semi cases_listcasep : id colon type rarrow exprarith : id larrow expr\n | not comp\n | comp\n comp : comp less op\n | comp lesseq op\n | comp equal op\n | opop : op plus term\n | op minus term\n | termterm : term star base_call\n | term div base_call\n | isvoid base_call\n | nox base_call\n | base_callbase_call : factor arroba type dot func_call\n | factorfactor : atom\n | opar expr cparfactor : factor dot func_call\n | func_callatom : numatom : idatom : typeatom : new typeatom : new erroratom : ocur block ccuratom : true\n | falseatom : stringblock : expr semi\n | expr semi blockfunc_call : id opar arg_list cpararg_list : expr \n | expr comma arg_listarg_list : epsilon' +_lr_signature = 'programarroba case ccur class colon comma cpar div dot else equal esac false fi id if in inherits isvoid larrow less lesseq let loop minus new not nox num ocur of opar plus pool rarrow semi star string then true type whileprogram : class_listepsilon :class_list : def_class class_list \n | def_classclass_list : opar cpar\n | ocur ccur\n feature_list : opar cpar\n | ocur ccur\n def_class : class type ocur feature_list ccur semi \n | class type inherits type ocur feature_list ccur semidef_class : class error ocur feature_list ccur semi \n | class error inherits type ocur feature_list ccur semi\n | class error inherits error ocur feature_list ccur semi\n | class type inherits error ocur feature_list ccur semifeature_list : epsilon\n | def_attr semi feature_list\n | def_func semi feature_listdef_attr : id colon type\n | id colon type larrow exprdef_func : id opar formals cpar colon type ocur expr ccurformals : param_list\n | param_list_empty\n param_list : param\n | param comma param_listparam_list_empty : epsilonparam : id colon typeexpr : let let_list in exprexpr : case expr of cases_list esacexpr : if expr then expr else expr fiexpr : while expr loop expr poolexpr : arithlet_list : let_assign\n | let_assign comma let_listlet_assign : param larrow expr\n | paramcases_list : casep semi\n | casep semi cases_listcasep : id colon type rarrow exprarith : id larrow expr\n | not comp\n | comp\n comp : comp less op\n | comp lesseq op\n | comp equal op\n | opop : op plus term\n | op minus term\n | termterm : term star base_call\n | term div base_call\n | isvoid base_call\n | nox base_call\n | base_callbase_call : factor arroba type dot func_call\n | factorfactor : atom\n | opar expr cparfactor : factor dot func_call\n | func_callatom : numatom : idatom : typeatom : new typeatom : new erroratom : ocur block ccuratom : true\n | falseatom : stringblock : expr semi\n | expr semi blockfunc_call : id opar args cparargs : arg_list\n | arg_list_empty\n arg_list : expr \n | expr comma arg_listarg_list_empty : epsilon' -_lr_action_items = {'opar':([0,3,12,14,22,31,32,35,36,38,39,40,50,53,61,65,66,67,69,74,75,79,82,89,90,91,92,93,94,102,103,104,105,106,107,108,109,124,126,128,129,139,142,143,145,161,168,],[4,4,18,18,34,18,18,18,18,18,18,-9,-11,79,94,79,79,79,79,79,79,79,79,-10,-14,-13,-12,79,79,94,79,79,79,79,79,79,79,79,79,79,79,94,79,79,79,79,79,]),'ocur':([0,3,10,11,12,14,23,24,26,27,31,32,35,36,38,39,40,50,53,65,66,67,69,74,75,79,82,89,90,91,92,93,94,103,104,105,106,107,108,109,119,124,126,128,129,142,143,145,161,168,],[5,5,12,14,16,16,35,36,38,39,16,16,16,16,16,16,-9,-11,82,82,82,82,82,82,82,82,82,-10,-14,-13,-12,82,82,82,82,82,82,82,82,82,143,82,82,82,82,82,82,82,82,82,]),'class':([0,3,40,50,89,90,91,92,],[6,6,-9,-11,-10,-14,-13,-12,]),'$end':([1,2,3,7,8,9,40,50,89,90,91,92,],[0,-1,-4,-3,-5,-6,-9,-11,-10,-14,-13,-12,]),'cpar':([4,18,34,45,46,47,56,61,62,68,70,71,72,73,76,77,78,80,83,84,85,86,88,94,101,102,110,111,114,115,116,120,121,122,123,130,131,132,133,134,135,136,138,140,141,144,145,146,157,158,162,163,169,],[8,30,-2,55,-21,-23,-2,-59,-60,-29,-39,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,-24,-22,-2,-38,-59,-49,-50,140,-61,-62,-37,144,-70,-72,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-69,-2,-25,-71,-26,-28,-52,-27,]),'ccur':([5,12,14,16,17,19,25,28,30,31,32,35,36,38,39,41,42,48,49,51,52,61,62,68,70,71,72,73,76,77,78,80,83,84,85,101,102,110,111,115,116,117,120,130,131,132,133,134,135,136,138,140,141,142,144,146,155,156,158,162,163,169,],[9,-2,-2,28,29,-15,37,-8,-7,-2,-2,-2,-2,-2,-2,-16,-17,57,58,59,60,-59,-60,-29,-39,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,-38,-59,-49,-50,-61,-62,141,-37,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-67,-69,-25,-68,164,-26,-28,-52,-27,]),'type':([6,13,15,33,53,54,65,66,67,69,74,75,79,81,82,87,93,94,103,104,105,106,107,108,109,112,124,126,128,129,142,143,145,160,161,168,],[10,23,27,43,62,86,62,62,62,62,62,62,62,115,62,119,62,62,62,62,62,62,62,62,62,137,62,62,62,62,62,62,62,166,62,62,]),'error':([6,13,15,81,],[11,24,26,116,]),'inherits':([10,11,],[13,15,]),'id':([12,14,31,32,34,35,36,38,39,53,56,64,65,66,67,69,74,75,79,82,93,94,103,104,105,106,107,108,109,113,124,125,126,127,128,129,142,143,145,154,159,161,168,],[22,22,22,22,44,22,22,22,22,61,44,44,61,61,61,102,102,102,61,61,61,61,102,102,102,102,102,102,102,139,61,44,61,151,61,61,61,61,61,139,151,61,61,]),'semi':([20,21,29,37,43,57,58,59,60,61,62,63,68,70,71,72,73,76,77,78,80,83,84,85,101,102,110,111,115,116,118,120,130,131,132,133,134,135,136,138,140,141,144,146,150,158,162,163,164,169,170,],[31,32,40,50,-18,89,90,91,92,-59,-60,-19,-29,-39,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,-38,-59,-49,-50,-61,-62,142,-37,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-69,-25,159,-26,-28,-52,-20,-27,-36,]),'colon':([22,44,55,151,],[33,54,87,160,]),'larrow':([43,61,86,97,],[53,93,-24,126,]),'comma':([46,61,62,68,70,71,72,73,76,77,78,80,83,84,85,86,96,97,101,102,110,111,115,116,120,122,130,131,132,133,134,135,136,138,140,141,144,146,148,158,162,163,169,],[56,-59,-60,-29,-39,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,-24,125,-33,-38,-59,-49,-50,-61,-62,-37,145,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-69,-25,-32,-26,-28,-52,-27,]),'let':([53,65,66,67,79,82,93,94,124,126,128,129,142,143,145,161,168,],[64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,]),'case':([53,65,66,67,79,82,93,94,124,126,128,129,142,143,145,161,168,],[65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,]),'if':([53,65,66,67,79,82,93,94,124,126,128,129,142,143,145,161,168,],[66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,]),'while':([53,65,66,67,79,82,93,94,124,126,128,129,142,143,145,161,168,],[67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,]),'not':([53,65,66,67,79,82,93,94,124,126,128,129,142,143,145,161,168,],[69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,]),'isvoid':([53,65,66,67,69,79,82,93,94,103,104,105,106,107,124,126,128,129,142,143,145,161,168,],[74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,]),'nox':([53,65,66,67,69,79,82,93,94,103,104,105,106,107,124,126,128,129,142,143,145,161,168,],[75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,]),'num':([53,65,66,67,69,74,75,79,82,93,94,103,104,105,106,107,108,109,124,126,128,129,142,143,145,161,168,],[80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,]),'new':([53,65,66,67,69,74,75,79,82,93,94,103,104,105,106,107,108,109,124,126,128,129,142,143,145,161,168,],[81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,]),'true':([53,65,66,67,69,74,75,79,82,93,94,103,104,105,106,107,108,109,124,126,128,129,142,143,145,161,168,],[83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,]),'false':([53,65,66,67,69,74,75,79,82,93,94,103,104,105,106,107,108,109,124,126,128,129,142,143,145,161,168,],[84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,]),'string':([53,65,66,67,69,74,75,79,82,93,94,103,104,105,106,107,108,109,124,126,128,129,142,143,145,161,168,],[85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,]),'arroba':([61,62,76,77,78,80,83,84,85,102,115,116,138,140,141,144,],[-59,-60,112,-57,-54,-58,-64,-65,-66,-59,-61,-62,-56,-55,-63,-69,]),'dot':([61,62,76,77,78,80,83,84,85,102,115,116,137,138,140,141,144,],[-59,-60,113,-57,-54,-58,-64,-65,-66,-59,-61,-62,154,-56,-55,-63,-69,]),'star':([61,62,72,73,76,77,78,80,83,84,85,102,110,111,115,116,133,134,135,136,138,140,141,144,163,],[-59,-60,108,-51,-53,-57,-54,-58,-64,-65,-66,-59,-49,-50,-61,-62,108,108,-47,-48,-56,-55,-63,-69,-52,]),'div':([61,62,72,73,76,77,78,80,83,84,85,102,110,111,115,116,133,134,135,136,138,140,141,144,163,],[-59,-60,109,-51,-53,-57,-54,-58,-64,-65,-66,-59,-49,-50,-61,-62,109,109,-47,-48,-56,-55,-63,-69,-52,]),'plus':([61,62,71,72,73,76,77,78,80,83,84,85,102,110,111,115,116,130,131,132,133,134,135,136,138,140,141,144,163,],[-59,-60,106,-46,-51,-53,-57,-54,-58,-64,-65,-66,-59,-49,-50,-61,-62,106,106,106,-44,-45,-47,-48,-56,-55,-63,-69,-52,]),'minus':([61,62,71,72,73,76,77,78,80,83,84,85,102,110,111,115,116,130,131,132,133,134,135,136,138,140,141,144,163,],[-59,-60,107,-46,-51,-53,-57,-54,-58,-64,-65,-66,-59,-49,-50,-61,-62,107,107,107,-44,-45,-47,-48,-56,-55,-63,-69,-52,]),'less':([61,62,70,71,72,73,76,77,78,80,83,84,85,101,102,110,111,115,116,130,131,132,133,134,135,136,138,140,141,144,163,],[-59,-60,103,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,103,-59,-49,-50,-61,-62,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-69,-52,]),'lesseq':([61,62,70,71,72,73,76,77,78,80,83,84,85,101,102,110,111,115,116,130,131,132,133,134,135,136,138,140,141,144,163,],[-59,-60,104,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,104,-59,-49,-50,-61,-62,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-69,-52,]),'equal':([61,62,70,71,72,73,76,77,78,80,83,84,85,101,102,110,111,115,116,130,131,132,133,134,135,136,138,140,141,144,163,],[-59,-60,105,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,105,-59,-49,-50,-61,-62,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-69,-52,]),'of':([61,62,68,70,71,72,73,76,77,78,80,83,84,85,98,101,102,110,111,115,116,120,130,131,132,133,134,135,136,138,140,141,144,146,158,162,163,169,],[-59,-60,-29,-39,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,127,-38,-59,-49,-50,-61,-62,-37,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-69,-25,-26,-28,-52,-27,]),'then':([61,62,68,70,71,72,73,76,77,78,80,83,84,85,99,101,102,110,111,115,116,120,130,131,132,133,134,135,136,138,140,141,144,146,158,162,163,169,],[-59,-60,-29,-39,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,128,-38,-59,-49,-50,-61,-62,-37,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-69,-25,-26,-28,-52,-27,]),'loop':([61,62,68,70,71,72,73,76,77,78,80,83,84,85,100,101,102,110,111,115,116,120,130,131,132,133,134,135,136,138,140,141,144,146,158,162,163,169,],[-59,-60,-29,-39,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,129,-38,-59,-49,-50,-61,-62,-37,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-69,-25,-26,-28,-52,-27,]),'in':([61,62,68,70,71,72,73,76,77,78,80,83,84,85,86,95,96,97,101,102,110,111,115,116,120,130,131,132,133,134,135,136,138,140,141,144,146,147,148,158,162,163,169,],[-59,-60,-29,-39,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,-24,124,-30,-33,-38,-59,-49,-50,-61,-62,-37,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-69,-25,-31,-32,-26,-28,-52,-27,]),'else':([61,62,68,70,71,72,73,76,77,78,80,83,84,85,101,102,110,111,115,116,120,130,131,132,133,134,135,136,138,140,141,144,146,152,158,162,163,169,],[-59,-60,-29,-39,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,-38,-59,-49,-50,-61,-62,-37,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-69,-25,161,-26,-28,-52,-27,]),'pool':([61,62,68,70,71,72,73,76,77,78,80,83,84,85,101,102,110,111,115,116,120,130,131,132,133,134,135,136,138,140,141,144,146,153,158,162,163,169,],[-59,-60,-29,-39,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,-38,-59,-49,-50,-61,-62,-37,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-69,-25,162,-26,-28,-52,-27,]),'fi':([61,62,68,70,71,72,73,76,77,78,80,83,84,85,101,102,110,111,115,116,120,130,131,132,133,134,135,136,138,140,141,144,146,158,162,163,167,169,],[-59,-60,-29,-39,-43,-46,-51,-53,-57,-54,-58,-64,-65,-66,-38,-59,-49,-50,-61,-62,-37,-40,-41,-42,-44,-45,-47,-48,-56,-55,-63,-69,-25,-26,-28,-52,169,-27,]),'esac':([149,159,165,],[158,-34,-35,]),'rarrow':([166,],[168,]),} +_lr_action_items = {'opar':([0,3,12,14,22,31,32,35,36,38,39,40,52,55,63,67,68,69,71,76,77,81,84,91,92,93,94,95,96,104,105,106,107,108,109,110,111,128,130,132,133,143,146,147,149,165,172,],[4,4,18,18,34,18,18,18,18,18,18,-9,-11,81,96,81,81,81,81,81,81,81,81,-10,-14,-13,-12,81,81,96,81,81,81,81,81,81,81,81,81,81,81,96,81,81,81,81,81,]),'ocur':([0,3,10,11,12,14,23,24,26,27,31,32,35,36,38,39,40,52,55,67,68,69,71,76,77,81,84,91,92,93,94,95,96,105,106,107,108,109,110,111,121,128,130,132,133,146,147,149,165,172,],[5,5,12,14,16,16,35,36,38,39,16,16,16,16,16,16,-9,-11,84,84,84,84,84,84,84,84,84,-10,-14,-13,-12,84,84,84,84,84,84,84,84,84,147,84,84,84,84,84,84,84,84,84,]),'class':([0,3,40,52,91,92,93,94,],[6,6,-9,-11,-10,-14,-13,-12,]),'$end':([1,2,3,7,8,9,40,52,91,92,93,94,],[0,-1,-4,-3,-5,-6,-9,-11,-10,-14,-13,-12,]),'cpar':([4,18,34,45,46,47,48,49,63,64,70,72,73,74,75,78,79,80,82,85,86,87,88,90,96,103,104,112,113,116,117,118,122,123,124,125,126,127,134,135,136,137,138,139,140,142,144,145,148,150,161,162,166,167,173,],[8,30,-2,57,-21,-22,-23,-25,-61,-62,-31,-41,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,-26,-24,-2,-40,-61,-51,-52,144,-63,-64,-39,148,-72,-73,-74,-76,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-71,-27,-75,-28,-30,-54,-29,]),'ccur':([5,12,14,16,17,19,25,28,30,31,32,35,36,38,39,41,42,50,51,53,54,63,64,70,72,73,74,75,78,79,80,82,85,86,87,103,104,112,113,117,118,119,122,134,135,136,137,138,139,140,142,144,145,146,148,150,159,160,162,166,167,173,],[9,-2,-2,28,29,-15,37,-8,-7,-2,-2,-2,-2,-2,-2,-16,-17,59,60,61,62,-61,-62,-31,-41,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,-40,-61,-51,-52,-63,-64,145,-39,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-69,-71,-27,-70,168,-28,-30,-54,-29,]),'type':([6,13,15,33,55,56,67,68,69,71,76,77,81,83,84,89,95,96,105,106,107,108,109,110,111,114,128,130,132,133,146,147,149,164,165,172,],[10,23,27,43,64,88,64,64,64,64,64,64,64,117,64,121,64,64,64,64,64,64,64,64,64,141,64,64,64,64,64,64,64,170,64,64,]),'error':([6,13,15,83,],[11,24,26,118,]),'inherits':([10,11,],[13,15,]),'id':([12,14,31,32,34,35,36,38,39,55,58,66,67,68,69,71,76,77,81,84,95,96,105,106,107,108,109,110,111,115,128,129,130,131,132,133,146,147,149,158,163,165,172,],[22,22,22,22,44,22,22,22,22,63,44,44,63,63,63,104,104,104,63,63,63,63,104,104,104,104,104,104,104,143,63,44,63,155,63,63,63,63,63,143,155,63,63,]),'semi':([20,21,29,37,43,59,60,61,62,63,64,65,70,72,73,74,75,78,79,80,82,85,86,87,103,104,112,113,117,118,120,122,134,135,136,137,138,139,140,142,144,145,148,150,154,162,166,167,168,173,174,],[31,32,40,52,-18,91,92,93,94,-61,-62,-19,-31,-41,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,-40,-61,-51,-52,-63,-64,146,-39,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-71,-27,163,-28,-30,-54,-20,-29,-38,]),'colon':([22,44,57,155,],[33,56,89,164,]),'larrow':([43,63,88,99,],[55,95,-26,130,]),'comma':([48,63,64,70,72,73,74,75,78,79,80,82,85,86,87,88,98,99,103,104,112,113,117,118,122,126,134,135,136,137,138,139,140,142,144,145,148,150,152,162,166,167,173,],[58,-61,-62,-31,-41,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,-26,129,-35,-40,-61,-51,-52,-63,-64,-39,149,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-71,-27,-34,-28,-30,-54,-29,]),'let':([55,67,68,69,81,84,95,96,128,130,132,133,146,147,149,165,172,],[66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,]),'case':([55,67,68,69,81,84,95,96,128,130,132,133,146,147,149,165,172,],[67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,]),'if':([55,67,68,69,81,84,95,96,128,130,132,133,146,147,149,165,172,],[68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,]),'while':([55,67,68,69,81,84,95,96,128,130,132,133,146,147,149,165,172,],[69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,]),'not':([55,67,68,69,81,84,95,96,128,130,132,133,146,147,149,165,172,],[71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,]),'isvoid':([55,67,68,69,71,81,84,95,96,105,106,107,108,109,128,130,132,133,146,147,149,165,172,],[76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,]),'nox':([55,67,68,69,71,81,84,95,96,105,106,107,108,109,128,130,132,133,146,147,149,165,172,],[77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,]),'num':([55,67,68,69,71,76,77,81,84,95,96,105,106,107,108,109,110,111,128,130,132,133,146,147,149,165,172,],[82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,]),'new':([55,67,68,69,71,76,77,81,84,95,96,105,106,107,108,109,110,111,128,130,132,133,146,147,149,165,172,],[83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,]),'true':([55,67,68,69,71,76,77,81,84,95,96,105,106,107,108,109,110,111,128,130,132,133,146,147,149,165,172,],[85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,]),'false':([55,67,68,69,71,76,77,81,84,95,96,105,106,107,108,109,110,111,128,130,132,133,146,147,149,165,172,],[86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,]),'string':([55,67,68,69,71,76,77,81,84,95,96,105,106,107,108,109,110,111,128,130,132,133,146,147,149,165,172,],[87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,]),'arroba':([63,64,78,79,80,82,85,86,87,104,117,118,142,144,145,148,],[-61,-62,114,-59,-56,-60,-66,-67,-68,-61,-63,-64,-58,-57,-65,-71,]),'dot':([63,64,78,79,80,82,85,86,87,104,117,118,141,142,144,145,148,],[-61,-62,115,-59,-56,-60,-66,-67,-68,-61,-63,-64,158,-58,-57,-65,-71,]),'star':([63,64,74,75,78,79,80,82,85,86,87,104,112,113,117,118,137,138,139,140,142,144,145,148,167,],[-61,-62,110,-53,-55,-59,-56,-60,-66,-67,-68,-61,-51,-52,-63,-64,110,110,-49,-50,-58,-57,-65,-71,-54,]),'div':([63,64,74,75,78,79,80,82,85,86,87,104,112,113,117,118,137,138,139,140,142,144,145,148,167,],[-61,-62,111,-53,-55,-59,-56,-60,-66,-67,-68,-61,-51,-52,-63,-64,111,111,-49,-50,-58,-57,-65,-71,-54,]),'plus':([63,64,73,74,75,78,79,80,82,85,86,87,104,112,113,117,118,134,135,136,137,138,139,140,142,144,145,148,167,],[-61,-62,108,-48,-53,-55,-59,-56,-60,-66,-67,-68,-61,-51,-52,-63,-64,108,108,108,-46,-47,-49,-50,-58,-57,-65,-71,-54,]),'minus':([63,64,73,74,75,78,79,80,82,85,86,87,104,112,113,117,118,134,135,136,137,138,139,140,142,144,145,148,167,],[-61,-62,109,-48,-53,-55,-59,-56,-60,-66,-67,-68,-61,-51,-52,-63,-64,109,109,109,-46,-47,-49,-50,-58,-57,-65,-71,-54,]),'less':([63,64,72,73,74,75,78,79,80,82,85,86,87,103,104,112,113,117,118,134,135,136,137,138,139,140,142,144,145,148,167,],[-61,-62,105,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,105,-61,-51,-52,-63,-64,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-71,-54,]),'lesseq':([63,64,72,73,74,75,78,79,80,82,85,86,87,103,104,112,113,117,118,134,135,136,137,138,139,140,142,144,145,148,167,],[-61,-62,106,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,106,-61,-51,-52,-63,-64,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-71,-54,]),'equal':([63,64,72,73,74,75,78,79,80,82,85,86,87,103,104,112,113,117,118,134,135,136,137,138,139,140,142,144,145,148,167,],[-61,-62,107,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,107,-61,-51,-52,-63,-64,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-71,-54,]),'of':([63,64,70,72,73,74,75,78,79,80,82,85,86,87,100,103,104,112,113,117,118,122,134,135,136,137,138,139,140,142,144,145,148,150,162,166,167,173,],[-61,-62,-31,-41,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,131,-40,-61,-51,-52,-63,-64,-39,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-71,-27,-28,-30,-54,-29,]),'then':([63,64,70,72,73,74,75,78,79,80,82,85,86,87,101,103,104,112,113,117,118,122,134,135,136,137,138,139,140,142,144,145,148,150,162,166,167,173,],[-61,-62,-31,-41,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,132,-40,-61,-51,-52,-63,-64,-39,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-71,-27,-28,-30,-54,-29,]),'loop':([63,64,70,72,73,74,75,78,79,80,82,85,86,87,102,103,104,112,113,117,118,122,134,135,136,137,138,139,140,142,144,145,148,150,162,166,167,173,],[-61,-62,-31,-41,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,133,-40,-61,-51,-52,-63,-64,-39,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-71,-27,-28,-30,-54,-29,]),'in':([63,64,70,72,73,74,75,78,79,80,82,85,86,87,88,97,98,99,103,104,112,113,117,118,122,134,135,136,137,138,139,140,142,144,145,148,150,151,152,162,166,167,173,],[-61,-62,-31,-41,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,-26,128,-32,-35,-40,-61,-51,-52,-63,-64,-39,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-71,-27,-33,-34,-28,-30,-54,-29,]),'else':([63,64,70,72,73,74,75,78,79,80,82,85,86,87,103,104,112,113,117,118,122,134,135,136,137,138,139,140,142,144,145,148,150,156,162,166,167,173,],[-61,-62,-31,-41,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,-40,-61,-51,-52,-63,-64,-39,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-71,-27,165,-28,-30,-54,-29,]),'pool':([63,64,70,72,73,74,75,78,79,80,82,85,86,87,103,104,112,113,117,118,122,134,135,136,137,138,139,140,142,144,145,148,150,157,162,166,167,173,],[-61,-62,-31,-41,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,-40,-61,-51,-52,-63,-64,-39,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-71,-27,166,-28,-30,-54,-29,]),'fi':([63,64,70,72,73,74,75,78,79,80,82,85,86,87,103,104,112,113,117,118,122,134,135,136,137,138,139,140,142,144,145,148,150,162,166,167,171,173,],[-61,-62,-31,-41,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,-40,-61,-51,-52,-63,-64,-39,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-71,-27,-28,-30,-54,173,-29,]),'esac':([153,163,169,],[162,-36,-37,]),'rarrow':([170,],[172,]),} _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 = {'program':([0,],[1,]),'class_list':([0,3,],[2,7,]),'def_class':([0,3,],[3,3,]),'feature_list':([12,14,31,32,35,36,38,39,],[17,25,41,42,48,49,51,52,]),'epsilon':([12,14,31,32,34,35,36,38,39,56,94,145,],[19,19,19,19,47,19,19,19,19,47,123,123,]),'def_attr':([12,14,31,32,35,36,38,39,],[20,20,20,20,20,20,20,20,]),'def_func':([12,14,31,32,35,36,38,39,],[21,21,21,21,21,21,21,21,]),'param_list':([34,56,],[45,88,]),'param':([34,56,64,125,],[46,46,97,97,]),'expr':([53,65,66,67,79,82,93,94,124,126,128,129,142,143,145,161,168,],[63,98,99,100,114,118,120,122,146,148,152,153,118,156,122,167,170,]),'arith':([53,65,66,67,79,82,93,94,124,126,128,129,142,143,145,161,168,],[68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,]),'comp':([53,65,66,67,69,79,82,93,94,124,126,128,129,142,143,145,161,168,],[70,70,70,70,101,70,70,70,70,70,70,70,70,70,70,70,70,70,]),'op':([53,65,66,67,69,79,82,93,94,103,104,105,124,126,128,129,142,143,145,161,168,],[71,71,71,71,71,71,71,71,71,130,131,132,71,71,71,71,71,71,71,71,71,]),'term':([53,65,66,67,69,79,82,93,94,103,104,105,106,107,124,126,128,129,142,143,145,161,168,],[72,72,72,72,72,72,72,72,72,72,72,72,133,134,72,72,72,72,72,72,72,72,72,]),'base_call':([53,65,66,67,69,74,75,79,82,93,94,103,104,105,106,107,108,109,124,126,128,129,142,143,145,161,168,],[73,73,73,73,73,110,111,73,73,73,73,73,73,73,73,73,135,136,73,73,73,73,73,73,73,73,73,]),'factor':([53,65,66,67,69,74,75,79,82,93,94,103,104,105,106,107,108,109,124,126,128,129,142,143,145,161,168,],[76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,]),'func_call':([53,65,66,67,69,74,75,79,82,93,94,103,104,105,106,107,108,109,113,124,126,128,129,142,143,145,154,161,168,],[77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,138,77,77,77,77,77,77,77,163,77,77,]),'atom':([53,65,66,67,69,74,75,79,82,93,94,103,104,105,106,107,108,109,124,126,128,129,142,143,145,161,168,],[78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,]),'let_list':([64,125,],[95,147,]),'let_assign':([64,125,],[96,96,]),'block':([82,142,],[117,155,]),'arg_list':([94,145,],[121,157,]),'cases_list':([127,159,],[149,165,]),'casep':([127,159,],[150,150,]),} +_lr_goto_items = {'program':([0,],[1,]),'class_list':([0,3,],[2,7,]),'def_class':([0,3,],[3,3,]),'feature_list':([12,14,31,32,35,36,38,39,],[17,25,41,42,50,51,53,54,]),'epsilon':([12,14,31,32,34,35,36,38,39,96,],[19,19,19,19,49,19,19,19,19,127,]),'def_attr':([12,14,31,32,35,36,38,39,],[20,20,20,20,20,20,20,20,]),'def_func':([12,14,31,32,35,36,38,39,],[21,21,21,21,21,21,21,21,]),'formals':([34,],[45,]),'param_list':([34,58,],[46,90,]),'param_list_empty':([34,],[47,]),'param':([34,58,66,129,],[48,48,99,99,]),'expr':([55,67,68,69,81,84,95,96,128,130,132,133,146,147,149,165,172,],[65,100,101,102,116,120,122,126,150,152,156,157,120,160,126,171,174,]),'arith':([55,67,68,69,81,84,95,96,128,130,132,133,146,147,149,165,172,],[70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,]),'comp':([55,67,68,69,71,81,84,95,96,128,130,132,133,146,147,149,165,172,],[72,72,72,72,103,72,72,72,72,72,72,72,72,72,72,72,72,72,]),'op':([55,67,68,69,71,81,84,95,96,105,106,107,128,130,132,133,146,147,149,165,172,],[73,73,73,73,73,73,73,73,73,134,135,136,73,73,73,73,73,73,73,73,73,]),'term':([55,67,68,69,71,81,84,95,96,105,106,107,108,109,128,130,132,133,146,147,149,165,172,],[74,74,74,74,74,74,74,74,74,74,74,74,137,138,74,74,74,74,74,74,74,74,74,]),'base_call':([55,67,68,69,71,76,77,81,84,95,96,105,106,107,108,109,110,111,128,130,132,133,146,147,149,165,172,],[75,75,75,75,75,112,113,75,75,75,75,75,75,75,75,75,139,140,75,75,75,75,75,75,75,75,75,]),'factor':([55,67,68,69,71,76,77,81,84,95,96,105,106,107,108,109,110,111,128,130,132,133,146,147,149,165,172,],[78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,]),'func_call':([55,67,68,69,71,76,77,81,84,95,96,105,106,107,108,109,110,111,115,128,130,132,133,146,147,149,158,165,172,],[79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,142,79,79,79,79,79,79,79,167,79,79,]),'atom':([55,67,68,69,71,76,77,81,84,95,96,105,106,107,108,109,110,111,128,130,132,133,146,147,149,165,172,],[80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,]),'let_list':([66,129,],[97,151,]),'let_assign':([66,129,],[98,98,]),'block':([84,146,],[119,159,]),'args':([96,],[123,]),'arg_list':([96,149,],[124,161,]),'arg_list_empty':([96,],[125,]),'cases_list':([131,163,],[153,169,]),'casep':([131,163,],[154,154,]),} _lr_goto = {} for _k, _v in _lr_goto_items.items(): @@ -46,57 +46,61 @@ ('feature_list -> def_func semi feature_list','feature_list',3,'p_feature_list','cool_grammar.py',55), ('def_attr -> id colon type','def_attr',3,'p_def_attr','cool_grammar.py',63), ('def_attr -> id colon type larrow expr','def_attr',5,'p_def_attr','cool_grammar.py',64), - ('def_func -> id opar param_list cpar colon type ocur expr ccur','def_func',9,'p_def_func','cool_grammar.py',71), - ('param_list -> param','param_list',1,'p_param_list','cool_grammar.py',75), - ('param_list -> param comma param_list','param_list',3,'p_param_list','cool_grammar.py',76), - ('param_list -> epsilon','param_list',1,'p_param_list_empty','cool_grammar.py',83), - ('param -> id colon type','param',3,'p_param','cool_grammar.py',87), - ('expr -> let let_list in expr','expr',4,'p_expr_let','cool_grammar.py',91), - ('expr -> case expr of cases_list esac','expr',5,'p_expr_case','cool_grammar.py',95), - ('expr -> if expr then expr else expr fi','expr',7,'p_expr_if','cool_grammar.py',99), - ('expr -> while expr loop expr pool','expr',5,'p_expr_while','cool_grammar.py',103), - ('expr -> arith','expr',1,'p_expr_arith','cool_grammar.py',107), - ('let_list -> let_assign','let_list',1,'p_let_list','cool_grammar.py',112), - ('let_list -> let_assign comma let_list','let_list',3,'p_let_list','cool_grammar.py',113), - ('let_assign -> param larrow expr','let_assign',3,'p_let_assign','cool_grammar.py',120), - ('let_assign -> param','let_assign',1,'p_let_assign','cool_grammar.py',121), - ('cases_list -> casep semi','cases_list',2,'p_cases_list','cool_grammar.py',129), - ('cases_list -> casep semi cases_list','cases_list',3,'p_cases_list','cool_grammar.py',130), - ('casep -> id colon type rarrow expr','casep',5,'p_case','cool_grammar.py',137), - ('arith -> id larrow expr','arith',3,'p_arith','cool_grammar.py',142), - ('arith -> not comp','arith',2,'p_arith','cool_grammar.py',143), - ('arith -> comp','arith',1,'p_arith','cool_grammar.py',144), - ('comp -> comp less op','comp',3,'p_comp','cool_grammar.py',154), - ('comp -> comp lesseq op','comp',3,'p_comp','cool_grammar.py',155), - ('comp -> comp equal op','comp',3,'p_comp','cool_grammar.py',156), - ('comp -> op','comp',1,'p_comp','cool_grammar.py',157), - ('op -> op plus term','op',3,'p_op','cool_grammar.py',169), - ('op -> op minus term','op',3,'p_op','cool_grammar.py',170), - ('op -> term','op',1,'p_op','cool_grammar.py',171), - ('term -> term star base_call','term',3,'p_term','cool_grammar.py',180), - ('term -> term div base_call','term',3,'p_term','cool_grammar.py',181), - ('term -> isvoid base_call','term',2,'p_term','cool_grammar.py',182), - ('term -> nox base_call','term',2,'p_term','cool_grammar.py',183), - ('term -> base_call','term',1,'p_term','cool_grammar.py',184), - ('base_call -> factor arroba type dot func_call','base_call',5,'p_base_call','cool_grammar.py',197), - ('base_call -> factor','base_call',1,'p_base_call','cool_grammar.py',198), - ('factor -> atom','factor',1,'p_factor1','cool_grammar.py',205), - ('factor -> opar expr cpar','factor',3,'p_factor1','cool_grammar.py',206), - ('factor -> factor dot func_call','factor',3,'p_factor2','cool_grammar.py',213), - ('factor -> func_call','factor',1,'p_factor2','cool_grammar.py',214), - ('atom -> num','atom',1,'p_atom_num','cool_grammar.py',221), - ('atom -> id','atom',1,'p_atom_id','cool_grammar.py',225), - ('atom -> type','atom',1,'p_atom_type','cool_grammar.py',229), - ('atom -> new type','atom',2,'p_atom_new','cool_grammar.py',233), - ('atom -> new error','atom',2,'p_atom_new_error','cool_grammar.py',237), - ('atom -> ocur block ccur','atom',3,'p_atom_block','cool_grammar.py',243), - ('atom -> true','atom',1,'p_atom_boolean','cool_grammar.py',247), - ('atom -> false','atom',1,'p_atom_boolean','cool_grammar.py',248), - ('atom -> string','atom',1,'p_atom_string','cool_grammar.py',252), - ('block -> expr semi','block',2,'p_block','cool_grammar.py',256), - ('block -> expr semi block','block',3,'p_block','cool_grammar.py',257), - ('func_call -> id opar arg_list cpar','func_call',4,'p_func_call','cool_grammar.py',264), - ('arg_list -> expr','arg_list',1,'p_arg_list','cool_grammar.py',268), - ('arg_list -> expr comma arg_list','arg_list',3,'p_arg_list','cool_grammar.py',269), - ('arg_list -> epsilon','arg_list',1,'p_arg_list_empty','cool_grammar.py',276), + ('def_func -> id opar formals cpar colon type ocur expr ccur','def_func',9,'p_def_func','cool_grammar.py',71), + ('formals -> param_list','formals',1,'p_formals','cool_grammar.py',76), + ('formals -> param_list_empty','formals',1,'p_formals','cool_grammar.py',77), + ('param_list -> param','param_list',1,'p_param_list','cool_grammar.py',83), + ('param_list -> param comma param_list','param_list',3,'p_param_list','cool_grammar.py',84), + ('param_list_empty -> epsilon','param_list_empty',1,'p_param_list_empty','cool_grammar.py',91), + ('param -> id colon type','param',3,'p_param','cool_grammar.py',95), + ('expr -> let let_list in expr','expr',4,'p_expr_let','cool_grammar.py',99), + ('expr -> case expr of cases_list esac','expr',5,'p_expr_case','cool_grammar.py',103), + ('expr -> if expr then expr else expr fi','expr',7,'p_expr_if','cool_grammar.py',107), + ('expr -> while expr loop expr pool','expr',5,'p_expr_while','cool_grammar.py',111), + ('expr -> arith','expr',1,'p_expr_arith','cool_grammar.py',115), + ('let_list -> let_assign','let_list',1,'p_let_list','cool_grammar.py',120), + ('let_list -> let_assign comma let_list','let_list',3,'p_let_list','cool_grammar.py',121), + ('let_assign -> param larrow expr','let_assign',3,'p_let_assign','cool_grammar.py',128), + ('let_assign -> param','let_assign',1,'p_let_assign','cool_grammar.py',129), + ('cases_list -> casep semi','cases_list',2,'p_cases_list','cool_grammar.py',137), + ('cases_list -> casep semi cases_list','cases_list',3,'p_cases_list','cool_grammar.py',138), + ('casep -> id colon type rarrow expr','casep',5,'p_case','cool_grammar.py',145), + ('arith -> id larrow expr','arith',3,'p_arith','cool_grammar.py',150), + ('arith -> not comp','arith',2,'p_arith','cool_grammar.py',151), + ('arith -> comp','arith',1,'p_arith','cool_grammar.py',152), + ('comp -> comp less op','comp',3,'p_comp','cool_grammar.py',162), + ('comp -> comp lesseq op','comp',3,'p_comp','cool_grammar.py',163), + ('comp -> comp equal op','comp',3,'p_comp','cool_grammar.py',164), + ('comp -> op','comp',1,'p_comp','cool_grammar.py',165), + ('op -> op plus term','op',3,'p_op','cool_grammar.py',177), + ('op -> op minus term','op',3,'p_op','cool_grammar.py',178), + ('op -> term','op',1,'p_op','cool_grammar.py',179), + ('term -> term star base_call','term',3,'p_term','cool_grammar.py',188), + ('term -> term div base_call','term',3,'p_term','cool_grammar.py',189), + ('term -> isvoid base_call','term',2,'p_term','cool_grammar.py',190), + ('term -> nox base_call','term',2,'p_term','cool_grammar.py',191), + ('term -> base_call','term',1,'p_term','cool_grammar.py',192), + ('base_call -> factor arroba type dot func_call','base_call',5,'p_base_call','cool_grammar.py',205), + ('base_call -> factor','base_call',1,'p_base_call','cool_grammar.py',206), + ('factor -> atom','factor',1,'p_factor1','cool_grammar.py',213), + ('factor -> opar expr cpar','factor',3,'p_factor1','cool_grammar.py',214), + ('factor -> factor dot func_call','factor',3,'p_factor2','cool_grammar.py',221), + ('factor -> func_call','factor',1,'p_factor2','cool_grammar.py',222), + ('atom -> num','atom',1,'p_atom_num','cool_grammar.py',229), + ('atom -> id','atom',1,'p_atom_id','cool_grammar.py',233), + ('atom -> type','atom',1,'p_atom_type','cool_grammar.py',237), + ('atom -> new type','atom',2,'p_atom_new','cool_grammar.py',241), + ('atom -> new error','atom',2,'p_atom_new_error','cool_grammar.py',245), + ('atom -> ocur block ccur','atom',3,'p_atom_block','cool_grammar.py',249), + ('atom -> true','atom',1,'p_atom_boolean','cool_grammar.py',253), + ('atom -> false','atom',1,'p_atom_boolean','cool_grammar.py',254), + ('atom -> string','atom',1,'p_atom_string','cool_grammar.py',258), + ('block -> expr semi','block',2,'p_block','cool_grammar.py',262), + ('block -> expr semi block','block',3,'p_block','cool_grammar.py',263), + ('func_call -> id opar args cpar','func_call',4,'p_func_call','cool_grammar.py',270), + ('args -> arg_list','args',1,'p_args','cool_grammar.py',275), + ('args -> arg_list_empty','args',1,'p_args','cool_grammar.py',276), + ('arg_list -> expr','arg_list',1,'p_arg_list','cool_grammar.py',282), + ('arg_list -> expr comma arg_list','arg_list',3,'p_arg_list','cool_grammar.py',283), + ('arg_list_empty -> epsilon','arg_list_empty',1,'p_arg_list_empty','cool_grammar.py',291), ] From e7f6cd880162da3af6fe02aefeeb1ba2991bffd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Loraine=20Monteagudo=20Garc=C3=ADa?= Date: Sun, 16 Feb 2020 19:10:07 -0700 Subject: [PATCH 08/60] Adding error productions. All test working ok :) --- src/base_parser.py | 20 ++ src/cool_grammar.py | 304 -------------------------- src/lexer.py | 36 ++-- src/output_parser/parsetab.py | 180 +++++++++------- src/parser.py | 388 ++++++++++++++++++++++++++++++++-- src/tools/ast.py | 3 + tests/parser/err2_error.txt | 2 +- tests/parser/prod_error.txt | 2 +- tests/parser/test2.cl | 3 +- tests/parser/test2_error.txt | 1 + tests/parser/test4_error.txt | 2 +- 11 files changed, 523 insertions(+), 418 deletions(-) create mode 100644 src/base_parser.py delete mode 100644 src/cool_grammar.py diff --git a/src/base_parser.py b/src/base_parser.py new file mode 100644 index 00000000..01698333 --- /dev/null +++ b/src/base_parser.py @@ -0,0 +1,20 @@ +from tools.tokens import tokens +import os +import ply.yacc as yacc + +from lexer import CoolLexer +from tools.tokens import tokens + +class Parser: + def __init__(self, lexer=None): + self.lexer = lexer if lexer else CoolLexer() + self.outputdir = 'src/output_parser' + self.tokens = tokens + yacc.yacc(start='program', + module=self, + outputdir=self.outputdir) + + + def parse(self, program, debug=False): + # tokens = self.lexer.tokenize_text(program) + return yacc.parse(program, self.lexer.lexer, debug=debug) \ No newline at end of file diff --git a/src/cool_grammar.py b/src/cool_grammar.py deleted file mode 100644 index bbe5efbb..00000000 --- a/src/cool_grammar.py +++ /dev/null @@ -1,304 +0,0 @@ -from tools.tokens import tokens -from tools.ast import * -from tools.errors import SyntaticError -from utils.utils import find_column - -#? TODO: If siempre tiene else - -def p_program(p): - 'program : class_list' - p[0] = p[1] - return p[0] - -def p_epsilon(p): - 'epsilon :' - pass - -def p_class_list(p): - '''class_list : def_class class_list - | def_class''' - if len(p) == 2: - p[0] = [p[1]] - else: - p[0] = [p[1]] + p[2] - -def p_empty_parenthesis(p): - '''class_list : opar cpar - | ocur ccur - feature_list : opar cpar - | ocur ccur - ''' - p[0] = [] - -def p_def_class(p): - '''def_class : class type ocur feature_list ccur semi - | class type inherits type ocur feature_list ccur semi''' - if len(p) == 7: - p[0] = ClassDeclarationNode(p[2], p[4]) - else: - p[0] = ClassDeclarationNode(p[2], p[6], p[4]) - - -def p_def_class_error(p): - '''def_class : class error ocur feature_list ccur semi - | class error inherits type ocur feature_list ccur semi - | class error inherits error ocur feature_list ccur semi - | class type inherits error ocur feature_list ccur semi''' - print('Here') - if p[3].type == 'error': - print_error(p[3]) - - -def p_feature_list(p): - '''feature_list : epsilon - | def_attr semi feature_list - | def_func semi feature_list''' - if len(p) == 2: - p[0] = [] - else: - p[0] = [p[1]] + p[3] - - -def p_def_attr(p): - '''def_attr : id colon type - | id colon type larrow expr''' - if len(p) == 4: - p[0] = AttrDeclarationNode(p[1], p[3]) - else: - p[0] = AttrDeclarationNode(p[1], p[3], p[5]) - -def p_def_func(p): - 'def_func : id opar formals cpar colon type ocur expr ccur' - p[0] = FuncDeclarationNode(p[1], p[3], p[6], p[8]) - - -def p_formals(p): - '''formals : param_list - | param_list_empty - ''' - p[0] = p[1] - - -def p_param_list(p): - '''param_list : param - | param comma param_list''' - if len(p) == 2: - p[0] = [p[1]] - else: - p[0] = [p[1]] + p[3] - -def p_param_list_empty(p): - 'param_list_empty : epsilon' - p[0] = [] - -def p_param(p): - 'param : id colon type' - p[0] = (p[1], p[3]) - -def p_expr_let(p): - 'expr : let let_list in expr' - p[0] = LetNode(p[2], p[4]) - -def p_expr_case(p): - 'expr : case expr of cases_list esac' - p[0] = CaseNode(p[2], p[4]) - -def p_expr_if(p): - 'expr : if expr then expr else expr fi' - p[0] = ConditionalNode(p[2], p[4], p[6]) - -def p_expr_while(p): - 'expr : while expr loop expr pool' - p[0] = WhileNode(p[2], p[4]) - -def p_expr_arith(p): - 'expr : arith' - p[0] = p[1] - - -def p_let_list(p): - '''let_list : let_assign - | let_assign comma let_list''' - if len(p) == 2: - p[0] = [p[1]] - else: - p[0] = [p[1]] + p[3] - -def p_let_assign(p): - '''let_assign : param larrow expr - | param''' - if len(p) == 2: - p[0] = VariableNode(p[1][0], p[1][1]) - else: - p[0] = VarDeclarationNode(p[1][0], p[1][1], p[3]) - - -def p_cases_list(p): - '''cases_list : casep semi - | casep semi cases_list''' - if len(p) == 3: - p[0] = [p[1]] - else: - p[0] = [p[1]] + p[3] - -def p_case(p): - 'casep : id colon type rarrow expr' - p[0] = OptionNode(p[1], p[3], p[5]) - - -def p_arith(p): - '''arith : id larrow expr - | not comp - | comp - ''' - if len(p) == 4: - p[0] = AssignNode(p[1], p[3]) - elif len(p) == 3: - p[0] = NotNode(p[2]) - else: - p[0] = p[1] - -def p_comp(p): - '''comp : comp less op - | comp lesseq op - | comp equal op - | op''' - if len(p) == 2: - p[0] = p[1] - elif p[2] == '<': - p[0] = LessNode(p[1], p[3]) - elif p[2] == '<=': - p[0] = LessEqNode(p[1], p[3]) - elif p[2] == '=': - p[0] = EqualNode(p[1], p[3]) - - -def p_op(p): - '''op : op plus term - | op minus term - | term''' - if len(p) == 2: - p[0] = p[1] - elif p[2] == '+': - p[0] = PlusNode(p[1], p[3]) - elif p[2] == '-': - p[0] = MinusNode(p[1], p[3]) - -def p_term(p): - '''term : term star base_call - | term div base_call - | isvoid base_call - | nox base_call - | base_call''' - if len(p) == 2: - p[0] = p[1] - elif p[1] == 'isvoid': - p[0] = IsVoidNode(p[2]) - elif p[1] == '~': - p[0] = BinaryNotNode(p[2]) - elif p[2] == '*': - p[0] = StarNode(p[1], p[3]) - elif p[2] == '/': - p[0] = DivNode(p[1], p[3]) - -def p_base_call(p): - '''base_call : factor arroba type dot func_call - | factor''' - if len(p) == 2: - p[0] = p[1] - else: - p[0] = BaseCallNode(p[1], p[3], *p[5]) - -def p_factor1(p): - '''factor : atom - | opar expr cpar''' - if len(p) == 2: - p[0] = p[1] - else: - p[0] = p[2] - -def p_factor2(p): - '''factor : factor dot func_call - | func_call''' - if len(p) == 2: - p[0] = StaticCallNode(*p[1]) - else: - p[0] = CallNode(p[1], *p[3]) - -def p_atom_num(p): - 'atom : num' - p[0] = ConstantNumNode(p[1]) - -def p_atom_id(p): - 'atom : id' - p[0] = VariableNode(p[1]) - -def p_atom_type(p): - 'atom : type' - p[0] = TypeNode(p[1]) - -def p_atom_new(p): - 'atom : new type' - p[0] = InstantiateNode(p[2]) - -def p_atom_new_error(p): - 'atom : new error' - pass - -def p_atom_block(p): - 'atom : ocur block ccur' - p[0] = BlockNode(p[2]) - -def p_atom_boolean(p): - '''atom : true - | false''' - p[0] = ConstantBoolNode(p[1]) - -def p_atom_string(p): - 'atom : string' - p[0] = ConstantStrNode(p[1]) - -def p_block(p): - '''block : expr semi - | expr semi block''' - if len(p) == 3: - p[0] = [p[1]] - else: - p[0] = [p[1]] + p[3] - -def p_func_call(p): - 'func_call : id opar args cpar' - p[0] = (p[1], p[3]) - - -def p_args(p): - '''args : arg_list - | arg_list_empty - ''' - p[0] = p[1] - - -def p_arg_list(p): - '''arg_list : expr - | expr comma arg_list''' - if len(p) == 2: - p[0] = [p[1]] - else: - p[0] = [p[1]] + p[3] - - -def p_arg_list_empty(p): - 'arg_list_empty : epsilon' - p[0] = [] - - # Error rule for syntax errors -def p_error(p): - if p: - print_error(p) - - -def print_error(tok): - error_text = SyntaticError.ERROR % tok.value - column = find_column(tok.lexer, tok) - print(SyntaticError(error_text, tok.lineno, column)) - diff --git a/src/lexer.py b/src/lexer.py index 96a209b5..2f3ffddb 100644 --- a/src/lexer.py +++ b/src/lexer.py @@ -59,7 +59,7 @@ def t_num(self, t): # TODO: Los strings no pueden contener \n, \0, strings anidados, eof en strings def t_string(self, t): - r'".*"' + r'"[^"]*"' t.value = t.value[1:-1] return t @@ -95,20 +95,26 @@ def tokenize_text(self, text): lexer = CoolLexer() data = ''' - CLASS Cons inherits List { - xcar : Int; - xcdr : List; - isNil() : Bool { false }; - init(hd : Int, tl : List) : Cons { - { - xcar <- hd; - xcdr <- 2; - "" testing "" - ** testing ** - self; - p . translate ( 1 , 1 ) ; - } - } +class Main inherits IO { + str <- "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; + main() : Object { + { + out_string("Enter number of numbers to multiply\n"); + out_int(prod(in_int())); + out_string("\n"); + } + }; + prod(i : Int) : Int { + let y : Int <- 1 in { + while (not (i = 0) ) loop { + out_string("Enter Number: "); + y <- y * in_int(); + i <- i - 1; + } + y; + } + }; +} ''' res = lexer.tokenize_text(data) diff --git a/src/output_parser/parsetab.py b/src/output_parser/parsetab.py index bddb8de3..00c3cbea 100644 --- a/src/output_parser/parsetab.py +++ b/src/output_parser/parsetab.py @@ -6,9 +6,9 @@ _lr_method = 'LALR' -_lr_signature = 'programarroba case ccur class colon comma cpar div dot else equal esac false fi id if in inherits isvoid larrow less lesseq let loop minus new not nox num ocur of opar plus pool rarrow semi star string then true type whileprogram : class_listepsilon :class_list : def_class class_list \n | def_classclass_list : opar cpar\n | ocur ccur\n feature_list : opar cpar\n | ocur ccur\n def_class : class type ocur feature_list ccur semi \n | class type inherits type ocur feature_list ccur semidef_class : class error ocur feature_list ccur semi \n | class error inherits type ocur feature_list ccur semi\n | class error inherits error ocur feature_list ccur semi\n | class type inherits error ocur feature_list ccur semifeature_list : epsilon\n | def_attr semi feature_list\n | def_func semi feature_listdef_attr : id colon type\n | id colon type larrow exprdef_func : id opar formals cpar colon type ocur expr ccurformals : param_list\n | param_list_empty\n param_list : param\n | param comma param_listparam_list_empty : epsilonparam : id colon typeexpr : let let_list in exprexpr : case expr of cases_list esacexpr : if expr then expr else expr fiexpr : while expr loop expr poolexpr : arithlet_list : let_assign\n | let_assign comma let_listlet_assign : param larrow expr\n | paramcases_list : casep semi\n | casep semi cases_listcasep : id colon type rarrow exprarith : id larrow expr\n | not comp\n | comp\n comp : comp less op\n | comp lesseq op\n | comp equal op\n | opop : op plus term\n | op minus term\n | termterm : term star base_call\n | term div base_call\n | isvoid base_call\n | nox base_call\n | base_callbase_call : factor arroba type dot func_call\n | factorfactor : atom\n | opar expr cparfactor : factor dot func_call\n | func_callatom : numatom : idatom : typeatom : new typeatom : new erroratom : ocur block ccuratom : true\n | falseatom : stringblock : expr semi\n | expr semi blockfunc_call : id opar args cparargs : arg_list\n | arg_list_empty\n arg_list : expr \n | expr comma arg_listarg_list_empty : epsilon' +_lr_signature = 'programarroba case ccur class colon comma cpar div dot else equal esac false fi id if in inherits isvoid larrow less lesseq let loop minus new not nox num ocur of opar plus pool rarrow semi star string then true type whileprogram : class_listepsilon :class_list : def_class class_list \n | def_classclass_list : error class_listdef_class : class type ocur feature_list ccur semi \n | class type inherits type ocur feature_list ccur semidef_class : class error ocur feature_list ccur semi \n | class error inherits type ocur feature_list ccur semi\n | class error inherits error ocur feature_list ccur semi\n | class type inherits error ocur feature_list ccur semifeature_list : epsilon\n | def_attr semi feature_list\n | def_func semi feature_listfeature_list : error feature_listdef_attr : id colon type\n | id colon type larrow exprdef_attr : error colon type\n | id colon error\n | error colon type larrow expr\n | id colon error larrow expr\n | id colon type larrow errordef_func : id opar formals cpar colon type ocur expr ccurdef_func : error opar formals cpar colon type ocur expr ccur\n | id opar error cpar colon type ocur expr ccur\n | id opar formals cpar colon error ocur expr ccur\n | id opar formals cpar colon type ocur error ccurformals : param_list\n | param_list_empty\n param_list : param\n | param comma param_listparam_list : error param_listparam_list_empty : epsilonparam : id colon typeexpr : let let_list in exprexpr : let error in expr\n | let let_list in errorexpr : case expr of cases_list esacexpr : case error of cases_list esac\n | case expr of error esacexpr : if expr then expr else expr fiexpr : if error then expr else expr fi\n | if expr then error else expr fi\n | if expr then expr else error fiexpr : while expr loop expr poolexpr : while error loop expr pool\n | while expr loop error pool\n | while expr loop expr errorexpr : arithlet_list : let_assign\n | let_assign comma let_listlet_list : error let_listlet_assign : param larrow expr\n | paramcases_list : casep semi\n | casep semi cases_listcases_list : error cases_listcasep : id colon type rarrow exprarith : id larrow expr\n | not comp\n | comp\n comp : comp less op\n | comp lesseq op\n | comp equal op\n | opop : op plus term\n | op minus term\n | termterm : term star base_call\n | term div base_call\n | isvoid base_call\n | nox base_call\n | base_callbase_call : factor arroba type dot func_call\n | factorfactor : atom\n | opar expr cparfactor : factor dot func_call\n | func_callatom : numatom : idatom : new typeatom : new erroratom : ocur block ccuratom : true\n | falseatom : stringblock : expr semi\n | expr semi blockblock : error block\n | errorfunc_call : id opar args cparargs : arg_list\n | arg_list_empty\n arg_list : expr \n | expr comma arg_listarg_list : error arg_listarg_list_empty : epsilon' -_lr_action_items = {'opar':([0,3,12,14,22,31,32,35,36,38,39,40,52,55,63,67,68,69,71,76,77,81,84,91,92,93,94,95,96,104,105,106,107,108,109,110,111,128,130,132,133,143,146,147,149,165,172,],[4,4,18,18,34,18,18,18,18,18,18,-9,-11,81,96,81,81,81,81,81,81,81,81,-10,-14,-13,-12,81,81,96,81,81,81,81,81,81,81,81,81,81,81,96,81,81,81,81,81,]),'ocur':([0,3,10,11,12,14,23,24,26,27,31,32,35,36,38,39,40,52,55,67,68,69,71,76,77,81,84,91,92,93,94,95,96,105,106,107,108,109,110,111,121,128,130,132,133,146,147,149,165,172,],[5,5,12,14,16,16,35,36,38,39,16,16,16,16,16,16,-9,-11,84,84,84,84,84,84,84,84,84,-10,-14,-13,-12,84,84,84,84,84,84,84,84,84,147,84,84,84,84,84,84,84,84,84,]),'class':([0,3,40,52,91,92,93,94,],[6,6,-9,-11,-10,-14,-13,-12,]),'$end':([1,2,3,7,8,9,40,52,91,92,93,94,],[0,-1,-4,-3,-5,-6,-9,-11,-10,-14,-13,-12,]),'cpar':([4,18,34,45,46,47,48,49,63,64,70,72,73,74,75,78,79,80,82,85,86,87,88,90,96,103,104,112,113,116,117,118,122,123,124,125,126,127,134,135,136,137,138,139,140,142,144,145,148,150,161,162,166,167,173,],[8,30,-2,57,-21,-22,-23,-25,-61,-62,-31,-41,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,-26,-24,-2,-40,-61,-51,-52,144,-63,-64,-39,148,-72,-73,-74,-76,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-71,-27,-75,-28,-30,-54,-29,]),'ccur':([5,12,14,16,17,19,25,28,30,31,32,35,36,38,39,41,42,50,51,53,54,63,64,70,72,73,74,75,78,79,80,82,85,86,87,103,104,112,113,117,118,119,122,134,135,136,137,138,139,140,142,144,145,146,148,150,159,160,162,166,167,173,],[9,-2,-2,28,29,-15,37,-8,-7,-2,-2,-2,-2,-2,-2,-16,-17,59,60,61,62,-61,-62,-31,-41,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,-40,-61,-51,-52,-63,-64,145,-39,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-69,-71,-27,-70,168,-28,-30,-54,-29,]),'type':([6,13,15,33,55,56,67,68,69,71,76,77,81,83,84,89,95,96,105,106,107,108,109,110,111,114,128,130,132,133,146,147,149,164,165,172,],[10,23,27,43,64,88,64,64,64,64,64,64,64,117,64,121,64,64,64,64,64,64,64,64,64,141,64,64,64,64,64,64,64,170,64,64,]),'error':([6,13,15,83,],[11,24,26,118,]),'inherits':([10,11,],[13,15,]),'id':([12,14,31,32,34,35,36,38,39,55,58,66,67,68,69,71,76,77,81,84,95,96,105,106,107,108,109,110,111,115,128,129,130,131,132,133,146,147,149,158,163,165,172,],[22,22,22,22,44,22,22,22,22,63,44,44,63,63,63,104,104,104,63,63,63,63,104,104,104,104,104,104,104,143,63,44,63,155,63,63,63,63,63,143,155,63,63,]),'semi':([20,21,29,37,43,59,60,61,62,63,64,65,70,72,73,74,75,78,79,80,82,85,86,87,103,104,112,113,117,118,120,122,134,135,136,137,138,139,140,142,144,145,148,150,154,162,166,167,168,173,174,],[31,32,40,52,-18,91,92,93,94,-61,-62,-19,-31,-41,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,-40,-61,-51,-52,-63,-64,146,-39,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-71,-27,163,-28,-30,-54,-20,-29,-38,]),'colon':([22,44,57,155,],[33,56,89,164,]),'larrow':([43,63,88,99,],[55,95,-26,130,]),'comma':([48,63,64,70,72,73,74,75,78,79,80,82,85,86,87,88,98,99,103,104,112,113,117,118,122,126,134,135,136,137,138,139,140,142,144,145,148,150,152,162,166,167,173,],[58,-61,-62,-31,-41,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,-26,129,-35,-40,-61,-51,-52,-63,-64,-39,149,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-71,-27,-34,-28,-30,-54,-29,]),'let':([55,67,68,69,81,84,95,96,128,130,132,133,146,147,149,165,172,],[66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,]),'case':([55,67,68,69,81,84,95,96,128,130,132,133,146,147,149,165,172,],[67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,]),'if':([55,67,68,69,81,84,95,96,128,130,132,133,146,147,149,165,172,],[68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,]),'while':([55,67,68,69,81,84,95,96,128,130,132,133,146,147,149,165,172,],[69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,]),'not':([55,67,68,69,81,84,95,96,128,130,132,133,146,147,149,165,172,],[71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,]),'isvoid':([55,67,68,69,71,81,84,95,96,105,106,107,108,109,128,130,132,133,146,147,149,165,172,],[76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,]),'nox':([55,67,68,69,71,81,84,95,96,105,106,107,108,109,128,130,132,133,146,147,149,165,172,],[77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,]),'num':([55,67,68,69,71,76,77,81,84,95,96,105,106,107,108,109,110,111,128,130,132,133,146,147,149,165,172,],[82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,]),'new':([55,67,68,69,71,76,77,81,84,95,96,105,106,107,108,109,110,111,128,130,132,133,146,147,149,165,172,],[83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,]),'true':([55,67,68,69,71,76,77,81,84,95,96,105,106,107,108,109,110,111,128,130,132,133,146,147,149,165,172,],[85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,]),'false':([55,67,68,69,71,76,77,81,84,95,96,105,106,107,108,109,110,111,128,130,132,133,146,147,149,165,172,],[86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,]),'string':([55,67,68,69,71,76,77,81,84,95,96,105,106,107,108,109,110,111,128,130,132,133,146,147,149,165,172,],[87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,]),'arroba':([63,64,78,79,80,82,85,86,87,104,117,118,142,144,145,148,],[-61,-62,114,-59,-56,-60,-66,-67,-68,-61,-63,-64,-58,-57,-65,-71,]),'dot':([63,64,78,79,80,82,85,86,87,104,117,118,141,142,144,145,148,],[-61,-62,115,-59,-56,-60,-66,-67,-68,-61,-63,-64,158,-58,-57,-65,-71,]),'star':([63,64,74,75,78,79,80,82,85,86,87,104,112,113,117,118,137,138,139,140,142,144,145,148,167,],[-61,-62,110,-53,-55,-59,-56,-60,-66,-67,-68,-61,-51,-52,-63,-64,110,110,-49,-50,-58,-57,-65,-71,-54,]),'div':([63,64,74,75,78,79,80,82,85,86,87,104,112,113,117,118,137,138,139,140,142,144,145,148,167,],[-61,-62,111,-53,-55,-59,-56,-60,-66,-67,-68,-61,-51,-52,-63,-64,111,111,-49,-50,-58,-57,-65,-71,-54,]),'plus':([63,64,73,74,75,78,79,80,82,85,86,87,104,112,113,117,118,134,135,136,137,138,139,140,142,144,145,148,167,],[-61,-62,108,-48,-53,-55,-59,-56,-60,-66,-67,-68,-61,-51,-52,-63,-64,108,108,108,-46,-47,-49,-50,-58,-57,-65,-71,-54,]),'minus':([63,64,73,74,75,78,79,80,82,85,86,87,104,112,113,117,118,134,135,136,137,138,139,140,142,144,145,148,167,],[-61,-62,109,-48,-53,-55,-59,-56,-60,-66,-67,-68,-61,-51,-52,-63,-64,109,109,109,-46,-47,-49,-50,-58,-57,-65,-71,-54,]),'less':([63,64,72,73,74,75,78,79,80,82,85,86,87,103,104,112,113,117,118,134,135,136,137,138,139,140,142,144,145,148,167,],[-61,-62,105,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,105,-61,-51,-52,-63,-64,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-71,-54,]),'lesseq':([63,64,72,73,74,75,78,79,80,82,85,86,87,103,104,112,113,117,118,134,135,136,137,138,139,140,142,144,145,148,167,],[-61,-62,106,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,106,-61,-51,-52,-63,-64,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-71,-54,]),'equal':([63,64,72,73,74,75,78,79,80,82,85,86,87,103,104,112,113,117,118,134,135,136,137,138,139,140,142,144,145,148,167,],[-61,-62,107,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,107,-61,-51,-52,-63,-64,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-71,-54,]),'of':([63,64,70,72,73,74,75,78,79,80,82,85,86,87,100,103,104,112,113,117,118,122,134,135,136,137,138,139,140,142,144,145,148,150,162,166,167,173,],[-61,-62,-31,-41,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,131,-40,-61,-51,-52,-63,-64,-39,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-71,-27,-28,-30,-54,-29,]),'then':([63,64,70,72,73,74,75,78,79,80,82,85,86,87,101,103,104,112,113,117,118,122,134,135,136,137,138,139,140,142,144,145,148,150,162,166,167,173,],[-61,-62,-31,-41,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,132,-40,-61,-51,-52,-63,-64,-39,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-71,-27,-28,-30,-54,-29,]),'loop':([63,64,70,72,73,74,75,78,79,80,82,85,86,87,102,103,104,112,113,117,118,122,134,135,136,137,138,139,140,142,144,145,148,150,162,166,167,173,],[-61,-62,-31,-41,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,133,-40,-61,-51,-52,-63,-64,-39,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-71,-27,-28,-30,-54,-29,]),'in':([63,64,70,72,73,74,75,78,79,80,82,85,86,87,88,97,98,99,103,104,112,113,117,118,122,134,135,136,137,138,139,140,142,144,145,148,150,151,152,162,166,167,173,],[-61,-62,-31,-41,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,-26,128,-32,-35,-40,-61,-51,-52,-63,-64,-39,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-71,-27,-33,-34,-28,-30,-54,-29,]),'else':([63,64,70,72,73,74,75,78,79,80,82,85,86,87,103,104,112,113,117,118,122,134,135,136,137,138,139,140,142,144,145,148,150,156,162,166,167,173,],[-61,-62,-31,-41,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,-40,-61,-51,-52,-63,-64,-39,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-71,-27,165,-28,-30,-54,-29,]),'pool':([63,64,70,72,73,74,75,78,79,80,82,85,86,87,103,104,112,113,117,118,122,134,135,136,137,138,139,140,142,144,145,148,150,157,162,166,167,173,],[-61,-62,-31,-41,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,-40,-61,-51,-52,-63,-64,-39,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-71,-27,166,-28,-30,-54,-29,]),'fi':([63,64,70,72,73,74,75,78,79,80,82,85,86,87,103,104,112,113,117,118,122,134,135,136,137,138,139,140,142,144,145,148,150,162,166,167,171,173,],[-61,-62,-31,-41,-45,-48,-53,-55,-59,-56,-60,-66,-67,-68,-40,-61,-51,-52,-63,-64,-39,-42,-43,-44,-46,-47,-49,-50,-58,-57,-65,-71,-27,-28,-30,-54,173,-29,]),'esac':([153,163,169,],[162,-36,-37,]),'rarrow':([170,],[172,]),} +_lr_action_items = {'error':([0,3,4,5,10,11,12,13,18,26,27,30,31,32,33,34,36,37,38,42,52,55,61,63,72,73,74,75,76,77,79,80,81,82,85,86,87,89,90,91,92,93,94,101,103,104,105,106,108,118,119,120,128,129,133,134,137,142,143,146,148,149,150,152,154,159,161,162,163,164,165,166,167,169,171,172,173,176,179,180,181,185,188,193,196,197,206,207,209,211,212,215,216,217,218,220,233,234,235,236,],[4,4,4,9,18,21,18,23,18,18,18,42,50,52,18,18,18,18,-6,42,42,-8,42,99,108,112,114,116,-49,-81,-61,-65,-68,-73,-75,-79,-76,-80,134,137,-85,-86,-87,140,-7,-11,-10,-9,143,159,-60,-81,-71,-72,-82,-83,137,180,143,143,185,188,191,194,-59,159,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,137,203,-35,-37,-36,188,188,216,-92,159,-38,-40,188,-39,229,-45,-48,-47,-46,-74,-41,-44,-43,-42,]),'class':([0,3,4,38,55,103,104,105,106,],[5,5,5,-6,-8,-7,-11,-10,-9,]),'$end':([1,2,3,6,7,38,55,103,104,105,106,],[0,-1,-4,-3,-5,-6,-8,-7,-11,-10,-9,]),'type':([5,11,13,29,31,62,90,95,101,102,130,210,],[8,20,24,41,49,97,133,138,139,141,168,227,]),'ocur':([8,9,20,21,23,24,58,63,64,73,74,75,78,83,84,88,91,117,118,121,122,123,124,125,126,127,137,138,139,140,141,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[10,12,33,34,36,37,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,175,176,177,178,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,]),'inherits':([8,9,],[11,13,]),'ccur':([10,12,14,15,18,22,26,27,28,33,34,36,37,39,40,53,54,56,57,76,77,79,80,81,82,85,86,87,89,92,93,94,119,120,128,129,133,134,135,137,154,161,162,163,164,165,166,167,169,171,172,173,174,179,180,181,196,200,201,202,203,204,205,206,207,211,215,216,217,218,220,233,234,235,236,],[-2,-2,25,-12,-2,35,-2,-2,-15,-2,-2,-2,-2,-13,-14,67,68,69,70,-49,-81,-61,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,-60,-81,-71,-72,-82,-83,172,-91,-59,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-88,-90,-35,-37,-36,-92,-89,221,222,223,224,225,-38,-40,-39,-45,-48,-47,-46,-74,-41,-44,-43,-42,]),'id':([10,12,18,26,27,30,32,33,34,36,37,42,52,58,61,63,64,72,73,74,75,78,83,84,88,91,108,117,118,121,122,123,124,125,126,127,131,137,142,143,144,146,147,148,149,150,151,152,153,159,173,175,176,177,178,185,188,197,199,209,212,213,214,232,],[19,19,19,19,19,48,48,19,19,19,19,48,48,77,48,77,77,48,77,77,77,120,120,120,77,77,48,77,77,120,120,120,120,120,120,120,170,77,77,48,77,48,77,187,187,77,77,77,77,77,77,77,77,77,77,187,187,77,170,187,77,77,77,77,]),'semi':([16,17,25,35,41,49,50,67,68,69,70,71,76,77,79,80,81,82,85,86,87,89,92,93,94,98,99,100,119,120,128,129,133,134,136,154,161,162,163,164,165,166,167,169,171,172,179,180,181,186,196,206,207,211,215,216,217,218,220,221,222,223,224,225,233,234,235,236,237,],[26,27,38,55,-18,-16,-19,103,104,105,106,-20,-49,-81,-61,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,-17,-22,-21,-60,-81,-71,-72,-82,-83,173,-59,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-35,-37,-36,209,-92,-38,-40,-39,-45,-48,-47,-46,-74,-24,-23,-27,-26,-25,-41,-44,-43,-42,-58,]),'colon':([18,19,48,60,65,66,187,],[29,31,62,95,101,102,210,]),'opar':([18,19,58,63,64,73,74,75,77,78,83,84,88,91,117,118,120,121,122,123,124,125,126,127,137,142,144,147,150,151,152,153,159,170,173,175,176,177,178,197,212,213,214,232,],[30,32,88,88,88,88,88,88,118,88,88,88,88,88,88,88,118,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,118,88,88,88,88,88,88,88,88,88,88,]),'cpar':([30,32,43,44,45,46,47,51,52,59,76,77,79,80,81,82,85,86,87,89,92,93,94,96,97,118,119,120,128,129,132,133,134,154,155,156,157,158,160,161,162,163,164,165,166,167,169,171,172,179,180,181,196,198,206,207,211,215,216,217,218,219,220,233,234,235,236,],[-2,-2,60,-28,-29,-30,-33,65,66,-32,-49,-81,-61,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,-31,-34,-2,-60,-81,-71,-72,171,-82,-83,-59,196,-93,-94,-95,-98,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-35,-37,-36,-92,-97,-38,-40,-39,-45,-48,-47,-46,-96,-74,-41,-44,-43,-42,]),'larrow':([41,49,50,77,97,110,],[58,63,64,117,-34,147,]),'comma':([46,76,77,79,80,81,82,85,86,87,89,92,93,94,97,109,110,119,120,128,129,133,134,154,158,161,162,163,164,165,166,167,169,171,172,179,180,181,183,196,206,207,211,215,216,217,218,220,233,234,235,236,],[61,-49,-81,-61,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,-34,146,-54,-60,-81,-71,-72,-82,-83,-59,197,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-35,-37,-36,-53,-92,-38,-40,-39,-45,-48,-47,-46,-74,-41,-44,-43,-42,]),'let':([58,63,64,73,74,75,88,91,117,118,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,]),'case':([58,63,64,73,74,75,88,91,117,118,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,]),'if':([58,63,64,73,74,75,88,91,117,118,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,]),'while':([58,63,64,73,74,75,88,91,117,118,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,]),'not':([58,63,64,73,74,75,88,91,117,118,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,]),'isvoid':([58,63,64,73,74,75,78,88,91,117,118,121,122,123,124,125,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,]),'nox':([58,63,64,73,74,75,78,88,91,117,118,121,122,123,124,125,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,]),'num':([58,63,64,73,74,75,78,83,84,88,91,117,118,121,122,123,124,125,126,127,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,]),'new':([58,63,64,73,74,75,78,83,84,88,91,117,118,121,122,123,124,125,126,127,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,]),'true':([58,63,64,73,74,75,78,83,84,88,91,117,118,121,122,123,124,125,126,127,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,]),'false':([58,63,64,73,74,75,78,83,84,88,91,117,118,121,122,123,124,125,126,127,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,]),'string':([58,63,64,73,74,75,78,83,84,88,91,117,118,121,122,123,124,125,126,127,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,]),'of':([76,77,79,80,81,82,85,86,87,89,92,93,94,111,112,119,120,128,129,133,134,154,161,162,163,164,165,166,167,169,171,172,179,180,181,196,206,207,211,215,216,217,218,220,233,234,235,236,],[-49,-81,-61,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,148,149,-60,-81,-71,-72,-82,-83,-59,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-35,-37,-36,-92,-38,-40,-39,-45,-48,-47,-46,-74,-41,-44,-43,-42,]),'then':([76,77,79,80,81,82,85,86,87,89,92,93,94,113,114,119,120,128,129,133,134,154,161,162,163,164,165,166,167,169,171,172,179,180,181,196,206,207,211,215,216,217,218,220,233,234,235,236,],[-49,-81,-61,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,150,151,-60,-81,-71,-72,-82,-83,-59,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-35,-37,-36,-92,-38,-40,-39,-45,-48,-47,-46,-74,-41,-44,-43,-42,]),'loop':([76,77,79,80,81,82,85,86,87,89,92,93,94,115,116,119,120,128,129,133,134,154,161,162,163,164,165,166,167,169,171,172,179,180,181,196,206,207,211,215,216,217,218,220,233,234,235,236,],[-49,-81,-61,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,152,153,-60,-81,-71,-72,-82,-83,-59,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-35,-37,-36,-92,-38,-40,-39,-45,-48,-47,-46,-74,-41,-44,-43,-42,]),'in':([76,77,79,80,81,82,85,86,87,89,92,93,94,97,107,108,109,110,119,120,128,129,133,134,145,154,161,162,163,164,165,166,167,169,171,172,179,180,181,182,183,196,206,207,211,215,216,217,218,220,233,234,235,236,],[-49,-81,-61,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,-34,142,144,-50,-54,-60,-81,-71,-72,-82,-83,-52,-59,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-35,-37,-36,-51,-53,-92,-38,-40,-39,-45,-48,-47,-46,-74,-41,-44,-43,-42,]),'else':([76,77,79,80,81,82,85,86,87,89,92,93,94,119,120,128,129,133,134,154,161,162,163,164,165,166,167,169,171,172,179,180,181,190,191,192,196,206,207,211,215,216,217,218,220,233,234,235,236,],[-49,-81,-61,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,-60,-81,-71,-72,-82,-83,-59,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-35,-37,-36,212,213,214,-92,-38,-40,-39,-45,-48,-47,-46,-74,-41,-44,-43,-42,]),'pool':([76,77,79,80,81,82,85,86,87,89,92,93,94,119,120,128,129,133,134,154,161,162,163,164,165,166,167,169,171,172,179,180,181,193,194,195,196,206,207,211,215,216,217,218,220,233,234,235,236,],[-49,-81,-61,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,-60,-81,-71,-72,-82,-83,-59,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-35,-37,-36,215,217,218,-92,-38,-40,-39,-45,-48,-47,-46,-74,-41,-44,-43,-42,]),'fi':([76,77,79,80,81,82,85,86,87,89,92,93,94,119,120,128,129,133,134,154,161,162,163,164,165,166,167,169,171,172,179,180,181,196,206,207,211,215,216,217,218,220,228,229,230,231,233,234,235,236,],[-49,-81,-61,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,-60,-81,-71,-72,-82,-83,-59,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-35,-37,-36,-92,-38,-40,-39,-45,-48,-47,-46,-74,233,234,235,236,-41,-44,-43,-42,]),'arroba':([77,85,86,87,89,92,93,94,120,133,134,169,171,172,196,],[-81,130,-79,-76,-80,-85,-86,-87,-81,-82,-83,-78,-77,-84,-92,]),'dot':([77,85,86,87,89,92,93,94,120,133,134,168,169,171,172,196,],[-81,131,-79,-76,-80,-85,-86,-87,-81,-82,-83,199,-78,-77,-84,-92,]),'star':([77,81,82,85,86,87,89,92,93,94,120,128,129,133,134,164,165,166,167,169,171,172,196,220,],[-81,126,-73,-75,-79,-76,-80,-85,-86,-87,-81,-71,-72,-82,-83,126,126,-69,-70,-78,-77,-84,-92,-74,]),'div':([77,81,82,85,86,87,89,92,93,94,120,128,129,133,134,164,165,166,167,169,171,172,196,220,],[-81,127,-73,-75,-79,-76,-80,-85,-86,-87,-81,-71,-72,-82,-83,127,127,-69,-70,-78,-77,-84,-92,-74,]),'plus':([77,80,81,82,85,86,87,89,92,93,94,120,128,129,133,134,161,162,163,164,165,166,167,169,171,172,196,220,],[-81,124,-68,-73,-75,-79,-76,-80,-85,-86,-87,-81,-71,-72,-82,-83,124,124,124,-66,-67,-69,-70,-78,-77,-84,-92,-74,]),'minus':([77,80,81,82,85,86,87,89,92,93,94,120,128,129,133,134,161,162,163,164,165,166,167,169,171,172,196,220,],[-81,125,-68,-73,-75,-79,-76,-80,-85,-86,-87,-81,-71,-72,-82,-83,125,125,125,-66,-67,-69,-70,-78,-77,-84,-92,-74,]),'less':([77,79,80,81,82,85,86,87,89,92,93,94,119,120,128,129,133,134,161,162,163,164,165,166,167,169,171,172,196,220,],[-81,121,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,121,-81,-71,-72,-82,-83,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-92,-74,]),'lesseq':([77,79,80,81,82,85,86,87,89,92,93,94,119,120,128,129,133,134,161,162,163,164,165,166,167,169,171,172,196,220,],[-81,122,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,122,-81,-71,-72,-82,-83,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-92,-74,]),'equal':([77,79,80,81,82,85,86,87,89,92,93,94,119,120,128,129,133,134,161,162,163,164,165,166,167,169,171,172,196,220,],[-81,123,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,123,-81,-71,-72,-82,-83,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-92,-74,]),'esac':([184,185,189,208,209,226,],[206,207,211,-57,-55,-56,]),'rarrow':([227,],[232,]),} _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 = {'program':([0,],[1,]),'class_list':([0,3,],[2,7,]),'def_class':([0,3,],[3,3,]),'feature_list':([12,14,31,32,35,36,38,39,],[17,25,41,42,50,51,53,54,]),'epsilon':([12,14,31,32,34,35,36,38,39,96,],[19,19,19,19,49,19,19,19,19,127,]),'def_attr':([12,14,31,32,35,36,38,39,],[20,20,20,20,20,20,20,20,]),'def_func':([12,14,31,32,35,36,38,39,],[21,21,21,21,21,21,21,21,]),'formals':([34,],[45,]),'param_list':([34,58,],[46,90,]),'param_list_empty':([34,],[47,]),'param':([34,58,66,129,],[48,48,99,99,]),'expr':([55,67,68,69,81,84,95,96,128,130,132,133,146,147,149,165,172,],[65,100,101,102,116,120,122,126,150,152,156,157,120,160,126,171,174,]),'arith':([55,67,68,69,81,84,95,96,128,130,132,133,146,147,149,165,172,],[70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,]),'comp':([55,67,68,69,71,81,84,95,96,128,130,132,133,146,147,149,165,172,],[72,72,72,72,103,72,72,72,72,72,72,72,72,72,72,72,72,72,]),'op':([55,67,68,69,71,81,84,95,96,105,106,107,128,130,132,133,146,147,149,165,172,],[73,73,73,73,73,73,73,73,73,134,135,136,73,73,73,73,73,73,73,73,73,]),'term':([55,67,68,69,71,81,84,95,96,105,106,107,108,109,128,130,132,133,146,147,149,165,172,],[74,74,74,74,74,74,74,74,74,74,74,74,137,138,74,74,74,74,74,74,74,74,74,]),'base_call':([55,67,68,69,71,76,77,81,84,95,96,105,106,107,108,109,110,111,128,130,132,133,146,147,149,165,172,],[75,75,75,75,75,112,113,75,75,75,75,75,75,75,75,75,139,140,75,75,75,75,75,75,75,75,75,]),'factor':([55,67,68,69,71,76,77,81,84,95,96,105,106,107,108,109,110,111,128,130,132,133,146,147,149,165,172,],[78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,]),'func_call':([55,67,68,69,71,76,77,81,84,95,96,105,106,107,108,109,110,111,115,128,130,132,133,146,147,149,158,165,172,],[79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,142,79,79,79,79,79,79,79,167,79,79,]),'atom':([55,67,68,69,71,76,77,81,84,95,96,105,106,107,108,109,110,111,128,130,132,133,146,147,149,165,172,],[80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,]),'let_list':([66,129,],[97,151,]),'let_assign':([66,129,],[98,98,]),'block':([84,146,],[119,159,]),'args':([96,],[123,]),'arg_list':([96,149,],[124,161,]),'arg_list_empty':([96,],[125,]),'cases_list':([131,163,],[153,169,]),'casep':([131,163,],[154,154,]),} +_lr_goto_items = {'program':([0,],[1,]),'class_list':([0,3,4,],[2,6,7,]),'def_class':([0,3,4,],[3,3,3,]),'feature_list':([10,12,18,26,27,33,34,36,37,],[14,22,28,39,40,53,54,56,57,]),'epsilon':([10,12,18,26,27,30,32,33,34,36,37,118,],[15,15,15,15,15,47,47,15,15,15,15,160,]),'def_attr':([10,12,18,26,27,33,34,36,37,],[16,16,16,16,16,16,16,16,16,]),'def_func':([10,12,18,26,27,33,34,36,37,],[17,17,17,17,17,17,17,17,17,]),'formals':([30,32,],[43,51,]),'param_list':([30,32,42,52,61,],[44,44,59,59,96,]),'param_list_empty':([30,32,],[45,45,]),'param':([30,32,42,52,61,72,108,143,146,],[46,46,46,46,46,110,110,110,110,]),'expr':([58,63,64,73,74,75,88,91,117,118,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[71,98,100,111,113,115,132,136,154,158,136,179,181,183,190,192,193,195,158,136,201,202,204,205,158,228,230,231,237,]),'arith':([58,63,64,73,74,75,88,91,117,118,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,]),'comp':([58,63,64,73,74,75,78,88,91,117,118,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[79,79,79,79,79,79,119,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,]),'op':([58,63,64,73,74,75,78,88,91,117,118,121,122,123,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[80,80,80,80,80,80,80,80,80,80,80,161,162,163,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,]),'term':([58,63,64,73,74,75,78,88,91,117,118,121,122,123,124,125,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[81,81,81,81,81,81,81,81,81,81,81,81,81,81,164,165,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,]),'base_call':([58,63,64,73,74,75,78,83,84,88,91,117,118,121,122,123,124,125,126,127,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[82,82,82,82,82,82,82,128,129,82,82,82,82,82,82,82,82,82,166,167,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,]),'factor':([58,63,64,73,74,75,78,83,84,88,91,117,118,121,122,123,124,125,126,127,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,]),'func_call':([58,63,64,73,74,75,78,83,84,88,91,117,118,121,122,123,124,125,126,127,131,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,199,212,213,214,232,],[86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,169,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,220,86,86,86,86,]),'atom':([58,63,64,73,74,75,78,83,84,88,91,117,118,121,122,123,124,125,126,127,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,]),'let_list':([72,108,143,146,],[107,145,145,182,]),'let_assign':([72,108,143,146,],[109,109,109,109,]),'block':([91,137,173,],[135,174,200,]),'args':([118,],[155,]),'arg_list':([118,159,197,],[156,198,219,]),'arg_list_empty':([118,],[157,]),'cases_list':([148,149,185,188,209,],[184,189,208,208,226,]),'casep':([148,149,185,188,209,],[186,186,186,186,186,]),} _lr_goto = {} for _k, _v in _lr_goto_items.items(): @@ -27,80 +27,102 @@ del _lr_goto_items _lr_productions = [ ("S' -> program","S'",1,None,None,None), - ('program -> class_list','program',1,'p_program','cool_grammar.py',9), - ('epsilon -> ','epsilon',0,'p_epsilon','cool_grammar.py',14), - ('class_list -> def_class class_list','class_list',2,'p_class_list','cool_grammar.py',18), - ('class_list -> def_class','class_list',1,'p_class_list','cool_grammar.py',19), - ('class_list -> opar cpar','class_list',2,'p_empty_parenthesis','cool_grammar.py',26), - ('class_list -> ocur ccur','class_list',2,'p_empty_parenthesis','cool_grammar.py',27), - ('feature_list -> opar cpar','feature_list',2,'p_empty_parenthesis','cool_grammar.py',28), - ('feature_list -> ocur ccur','feature_list',2,'p_empty_parenthesis','cool_grammar.py',29), - ('def_class -> class type ocur feature_list ccur semi','def_class',6,'p_def_class','cool_grammar.py',34), - ('def_class -> class type inherits type ocur feature_list ccur semi','def_class',8,'p_def_class','cool_grammar.py',35), - ('def_class -> class error ocur feature_list ccur semi','def_class',6,'p_def_class_error','cool_grammar.py',43), - ('def_class -> class error inherits type ocur feature_list ccur semi','def_class',8,'p_def_class_error','cool_grammar.py',44), - ('def_class -> class error inherits error ocur feature_list ccur semi','def_class',8,'p_def_class_error','cool_grammar.py',45), - ('def_class -> class type inherits error ocur feature_list ccur semi','def_class',8,'p_def_class_error','cool_grammar.py',46), - ('feature_list -> epsilon','feature_list',1,'p_feature_list','cool_grammar.py',53), - ('feature_list -> def_attr semi feature_list','feature_list',3,'p_feature_list','cool_grammar.py',54), - ('feature_list -> def_func semi feature_list','feature_list',3,'p_feature_list','cool_grammar.py',55), - ('def_attr -> id colon type','def_attr',3,'p_def_attr','cool_grammar.py',63), - ('def_attr -> id colon type larrow expr','def_attr',5,'p_def_attr','cool_grammar.py',64), - ('def_func -> id opar formals cpar colon type ocur expr ccur','def_func',9,'p_def_func','cool_grammar.py',71), - ('formals -> param_list','formals',1,'p_formals','cool_grammar.py',76), - ('formals -> param_list_empty','formals',1,'p_formals','cool_grammar.py',77), - ('param_list -> param','param_list',1,'p_param_list','cool_grammar.py',83), - ('param_list -> param comma param_list','param_list',3,'p_param_list','cool_grammar.py',84), - ('param_list_empty -> epsilon','param_list_empty',1,'p_param_list_empty','cool_grammar.py',91), - ('param -> id colon type','param',3,'p_param','cool_grammar.py',95), - ('expr -> let let_list in expr','expr',4,'p_expr_let','cool_grammar.py',99), - ('expr -> case expr of cases_list esac','expr',5,'p_expr_case','cool_grammar.py',103), - ('expr -> if expr then expr else expr fi','expr',7,'p_expr_if','cool_grammar.py',107), - ('expr -> while expr loop expr pool','expr',5,'p_expr_while','cool_grammar.py',111), - ('expr -> arith','expr',1,'p_expr_arith','cool_grammar.py',115), - ('let_list -> let_assign','let_list',1,'p_let_list','cool_grammar.py',120), - ('let_list -> let_assign comma let_list','let_list',3,'p_let_list','cool_grammar.py',121), - ('let_assign -> param larrow expr','let_assign',3,'p_let_assign','cool_grammar.py',128), - ('let_assign -> param','let_assign',1,'p_let_assign','cool_grammar.py',129), - ('cases_list -> casep semi','cases_list',2,'p_cases_list','cool_grammar.py',137), - ('cases_list -> casep semi cases_list','cases_list',3,'p_cases_list','cool_grammar.py',138), - ('casep -> id colon type rarrow expr','casep',5,'p_case','cool_grammar.py',145), - ('arith -> id larrow expr','arith',3,'p_arith','cool_grammar.py',150), - ('arith -> not comp','arith',2,'p_arith','cool_grammar.py',151), - ('arith -> comp','arith',1,'p_arith','cool_grammar.py',152), - ('comp -> comp less op','comp',3,'p_comp','cool_grammar.py',162), - ('comp -> comp lesseq op','comp',3,'p_comp','cool_grammar.py',163), - ('comp -> comp equal op','comp',3,'p_comp','cool_grammar.py',164), - ('comp -> op','comp',1,'p_comp','cool_grammar.py',165), - ('op -> op plus term','op',3,'p_op','cool_grammar.py',177), - ('op -> op minus term','op',3,'p_op','cool_grammar.py',178), - ('op -> term','op',1,'p_op','cool_grammar.py',179), - ('term -> term star base_call','term',3,'p_term','cool_grammar.py',188), - ('term -> term div base_call','term',3,'p_term','cool_grammar.py',189), - ('term -> isvoid base_call','term',2,'p_term','cool_grammar.py',190), - ('term -> nox base_call','term',2,'p_term','cool_grammar.py',191), - ('term -> base_call','term',1,'p_term','cool_grammar.py',192), - ('base_call -> factor arroba type dot func_call','base_call',5,'p_base_call','cool_grammar.py',205), - ('base_call -> factor','base_call',1,'p_base_call','cool_grammar.py',206), - ('factor -> atom','factor',1,'p_factor1','cool_grammar.py',213), - ('factor -> opar expr cpar','factor',3,'p_factor1','cool_grammar.py',214), - ('factor -> factor dot func_call','factor',3,'p_factor2','cool_grammar.py',221), - ('factor -> func_call','factor',1,'p_factor2','cool_grammar.py',222), - ('atom -> num','atom',1,'p_atom_num','cool_grammar.py',229), - ('atom -> id','atom',1,'p_atom_id','cool_grammar.py',233), - ('atom -> type','atom',1,'p_atom_type','cool_grammar.py',237), - ('atom -> new type','atom',2,'p_atom_new','cool_grammar.py',241), - ('atom -> new error','atom',2,'p_atom_new_error','cool_grammar.py',245), - ('atom -> ocur block ccur','atom',3,'p_atom_block','cool_grammar.py',249), - ('atom -> true','atom',1,'p_atom_boolean','cool_grammar.py',253), - ('atom -> false','atom',1,'p_atom_boolean','cool_grammar.py',254), - ('atom -> string','atom',1,'p_atom_string','cool_grammar.py',258), - ('block -> expr semi','block',2,'p_block','cool_grammar.py',262), - ('block -> expr semi block','block',3,'p_block','cool_grammar.py',263), - ('func_call -> id opar args cpar','func_call',4,'p_func_call','cool_grammar.py',270), - ('args -> arg_list','args',1,'p_args','cool_grammar.py',275), - ('args -> arg_list_empty','args',1,'p_args','cool_grammar.py',276), - ('arg_list -> expr','arg_list',1,'p_arg_list','cool_grammar.py',282), - ('arg_list -> expr comma arg_list','arg_list',3,'p_arg_list','cool_grammar.py',283), - ('arg_list_empty -> epsilon','arg_list_empty',1,'p_arg_list_empty','cool_grammar.py',291), + ('program -> class_list','program',1,'p_program','parser.py',8), + ('epsilon -> ','epsilon',0,'p_epsilon','parser.py',12), + ('class_list -> def_class class_list','class_list',2,'p_class_list','parser.py',17), + ('class_list -> def_class','class_list',1,'p_class_list','parser.py',18), + ('class_list -> error class_list','class_list',2,'p_class_list_error','parser.py',23), + ('def_class -> class type ocur feature_list ccur semi','def_class',6,'p_def_class','parser.py',29), + ('def_class -> class type inherits type ocur feature_list ccur semi','def_class',8,'p_def_class','parser.py',30), + ('def_class -> class error ocur feature_list ccur semi','def_class',6,'p_def_class_error','parser.py',38), + ('def_class -> class error inherits type ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',39), + ('def_class -> class error inherits error ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',40), + ('def_class -> class type inherits error ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',41), + ('feature_list -> epsilon','feature_list',1,'p_feature_list','parser.py',46), + ('feature_list -> def_attr semi feature_list','feature_list',3,'p_feature_list','parser.py',47), + ('feature_list -> def_func semi feature_list','feature_list',3,'p_feature_list','parser.py',48), + ('feature_list -> error feature_list','feature_list',2,'p_feature_list_error','parser.py',53), + ('def_attr -> id colon type','def_attr',3,'p_def_attr','parser.py',58), + ('def_attr -> id colon type larrow expr','def_attr',5,'p_def_attr','parser.py',59), + ('def_attr -> error colon type','def_attr',3,'p_def_attr_error','parser.py',66), + ('def_attr -> id colon error','def_attr',3,'p_def_attr_error','parser.py',67), + ('def_attr -> error colon type larrow expr','def_attr',5,'p_def_attr_error','parser.py',68), + ('def_attr -> id colon error larrow expr','def_attr',5,'p_def_attr_error','parser.py',69), + ('def_attr -> id colon type larrow error','def_attr',5,'p_def_attr_error','parser.py',70), + ('def_func -> id opar formals cpar colon type ocur expr ccur','def_func',9,'p_def_func','parser.py',75), + ('def_func -> error opar formals cpar colon type ocur expr ccur','def_func',9,'p_def_func_error','parser.py',79), + ('def_func -> id opar error cpar colon type ocur expr ccur','def_func',9,'p_def_func_error','parser.py',80), + ('def_func -> id opar formals cpar colon error ocur expr ccur','def_func',9,'p_def_func_error','parser.py',81), + ('def_func -> id opar formals cpar colon type ocur error ccur','def_func',9,'p_def_func_error','parser.py',82), + ('formals -> param_list','formals',1,'p_formals','parser.py',87), + ('formals -> param_list_empty','formals',1,'p_formals','parser.py',88), + ('param_list -> param','param_list',1,'p_param_list','parser.py',94), + ('param_list -> param comma param_list','param_list',3,'p_param_list','parser.py',95), + ('param_list -> error param_list','param_list',2,'p_param_list_error','parser.py',99), + ('param_list_empty -> epsilon','param_list_empty',1,'p_param_list_empty','parser.py',104), + ('param -> id colon type','param',3,'p_param','parser.py',108), + ('expr -> let let_list in expr','expr',4,'p_expr_let','parser.py',113), + ('expr -> let error in expr','expr',4,'p_expr_let_error','parser.py',117), + ('expr -> let let_list in error','expr',4,'p_expr_let_error','parser.py',118), + ('expr -> case expr of cases_list esac','expr',5,'p_expr_case','parser.py',123), + ('expr -> case error of cases_list esac','expr',5,'p_expr_case_error','parser.py',127), + ('expr -> case expr of error esac','expr',5,'p_expr_case_error','parser.py',128), + ('expr -> if expr then expr else expr fi','expr',7,'p_expr_if','parser.py',133), + ('expr -> if error then expr else expr fi','expr',7,'p_expr_if_error','parser.py',137), + ('expr -> if expr then error else expr fi','expr',7,'p_expr_if_error','parser.py',138), + ('expr -> if expr then expr else error fi','expr',7,'p_expr_if_error','parser.py',139), + ('expr -> while expr loop expr pool','expr',5,'p_expr_while','parser.py',144), + ('expr -> while error loop expr pool','expr',5,'p_expr_while_error','parser.py',149), + ('expr -> while expr loop error pool','expr',5,'p_expr_while_error','parser.py',150), + ('expr -> while expr loop expr error','expr',5,'p_expr_while_error','parser.py',151), + ('expr -> arith','expr',1,'p_expr_arith','parser.py',156), + ('let_list -> let_assign','let_list',1,'p_let_list','parser.py',161), + ('let_list -> let_assign comma let_list','let_list',3,'p_let_list','parser.py',162), + ('let_list -> error let_list','let_list',2,'p_let_list_error','parser.py',166), + ('let_assign -> param larrow expr','let_assign',3,'p_let_assign','parser.py',170), + ('let_assign -> param','let_assign',1,'p_let_assign','parser.py',171), + ('cases_list -> casep semi','cases_list',2,'p_cases_list','parser.py',179), + ('cases_list -> casep semi cases_list','cases_list',3,'p_cases_list','parser.py',180), + ('cases_list -> error cases_list','cases_list',2,'p_cases_list_error','parser.py',184), + ('casep -> id colon type rarrow expr','casep',5,'p_case','parser.py',188), + ('arith -> id larrow expr','arith',3,'p_arith','parser.py',193), + ('arith -> not comp','arith',2,'p_arith','parser.py',194), + ('arith -> comp','arith',1,'p_arith','parser.py',195), + ('comp -> comp less op','comp',3,'p_comp','parser.py',205), + ('comp -> comp lesseq op','comp',3,'p_comp','parser.py',206), + ('comp -> comp equal op','comp',3,'p_comp','parser.py',207), + ('comp -> op','comp',1,'p_comp','parser.py',208), + ('op -> op plus term','op',3,'p_op','parser.py',220), + ('op -> op minus term','op',3,'p_op','parser.py',221), + ('op -> term','op',1,'p_op','parser.py',222), + ('term -> term star base_call','term',3,'p_term','parser.py',231), + ('term -> term div base_call','term',3,'p_term','parser.py',232), + ('term -> isvoid base_call','term',2,'p_term','parser.py',233), + ('term -> nox base_call','term',2,'p_term','parser.py',234), + ('term -> base_call','term',1,'p_term','parser.py',235), + ('base_call -> factor arroba type dot func_call','base_call',5,'p_base_call','parser.py',248), + ('base_call -> factor','base_call',1,'p_base_call','parser.py',249), + ('factor -> atom','factor',1,'p_factor1','parser.py',257), + ('factor -> opar expr cpar','factor',3,'p_factor1','parser.py',258), + ('factor -> factor dot func_call','factor',3,'p_factor2','parser.py',262), + ('factor -> func_call','factor',1,'p_factor2','parser.py',263), + ('atom -> num','atom',1,'p_atom_num','parser.py',271), + ('atom -> id','atom',1,'p_atom_id','parser.py',275), + ('atom -> new type','atom',2,'p_atom_new','parser.py',279), + ('atom -> new error','atom',2,'p_atom_new_error','parser.py',283), + ('atom -> ocur block ccur','atom',3,'p_atom_block','parser.py',287), + ('atom -> true','atom',1,'p_atom_boolean','parser.py',291), + ('atom -> false','atom',1,'p_atom_boolean','parser.py',292), + ('atom -> string','atom',1,'p_atom_string','parser.py',296), + ('block -> expr semi','block',2,'p_block','parser.py',301), + ('block -> expr semi block','block',3,'p_block','parser.py',302), + ('block -> error block','block',2,'p_block_error','parser.py',306), + ('block -> error','block',1,'p_block_error','parser.py',307), + ('func_call -> id opar args cpar','func_call',4,'p_func_call','parser.py',312), + ('args -> arg_list','args',1,'p_args','parser.py',317), + ('args -> arg_list_empty','args',1,'p_args','parser.py',318), + ('arg_list -> expr','arg_list',1,'p_arg_list','parser.py',324), + ('arg_list -> expr comma arg_list','arg_list',3,'p_arg_list','parser.py',325), + ('arg_list -> error arg_list','arg_list',2,'p_arg_list_error','parser.py',332), + ('arg_list_empty -> epsilon','arg_list_empty',1,'p_arg_list_empty','parser.py',336), ] diff --git a/src/parser.py b/src/parser.py index eac68c75..44245fd6 100644 --- a/src/parser.py +++ b/src/parser.py @@ -1,28 +1,384 @@ -import ply.yacc as yacc -from cool_grammar import * -from lexer import CoolLexer +from tools.ast import * +from tools.errors import SyntaticError +from utils.utils import find_column +from base_parser import Parser +class CoolParser(Parser): + def p_program(self, p): + 'program : class_list' + p[0] = p[1] -class CoolParser: - def __init__(self, lexer=None): - if lexer is None: - self.lexer = CoolLexer() + def p_epsilon(self, p): + 'epsilon :' + pass + + + def p_class_list(self, p): + '''class_list : def_class class_list + | def_class''' + p[0] = [p[1]] if len(p) == 2 else [p[1]] + p[2] + + + def p_class_list_error(self, p): + '''class_list : error class_list''' + p[0] = [p[1]] if len(p) == 2 else [p[1]] + p[2] + + + + def p_def_class(self, p): + '''def_class : class type ocur feature_list ccur semi + | class type inherits type ocur feature_list ccur semi''' + if len(p) == 7: + p[0] = ClassDeclarationNode(p[2], p[4]) else: - self.lexer = lexer - self.parser = yacc.yacc(start='program', outputdir='src/output_parser') + p[0] = ClassDeclarationNode(p[2], p[6], p[4]) + + + def p_def_class_error(self, p): + '''def_class : class error ocur feature_list ccur semi + | class error inherits type ocur feature_list ccur semi + | class error inherits error ocur feature_list ccur semi + | class type inherits error ocur feature_list ccur semi''' + p[0] = ErrorNode() + + + def p_feature_list(self, p): + '''feature_list : epsilon + | def_attr semi feature_list + | def_func semi feature_list''' + p[0] = [] if len(p) == 2 else [p[1]] + p[3] + + + def p_feature_list_error(self, p): + 'feature_list : error feature_list' + p[0] = [p[1]] + p[2] + + + def p_def_attr(self, p): + '''def_attr : id colon type + | id colon type larrow expr''' + if len(p) == 4: + p[0] = AttrDeclarationNode(p[1], p[3]) + else: + p[0] = AttrDeclarationNode(p[1], p[3], p[5]) + + def p_def_attr_error(self, p): + '''def_attr : error colon type + | id colon error + | error colon type larrow expr + | id colon error larrow expr + | id colon type larrow error''' + p[0] = ErrorNode() + + + def p_def_func(self, p): + 'def_func : id opar formals cpar colon type ocur expr ccur' + p[0] = FuncDeclarationNode(p[1], p[3], p[6], p[8]) + + def p_def_func_error(self, p): + '''def_func : error opar formals cpar colon type ocur expr ccur + | id opar error cpar colon type ocur expr ccur + | id opar formals cpar colon error ocur expr ccur + | id opar formals cpar colon type ocur error ccur''' + p[0] = ErrorNode() + + + def p_formals(self, p): + '''formals : param_list + | param_list_empty + ''' + p[0] = p[1] + + + def p_param_list(self, p): + '''param_list : param + | param comma param_list''' + p[0] = [p[1]] if len(p) == 2 else [p[1]] + p[3] + + def p_param_list_error(self, p): + '''param_list : error param_list''' + p[0] = [ErrorNode()] if len(p) == 2 else [ErrorNode()] + p[2] + + + def p_param_list_empty(self, p): + 'param_list_empty : epsilon' + p[0] = [] + + def p_param(self, p): + 'param : id colon type' + p[0] = (p[1], p[3]) + + + def p_expr_let(self, p): + 'expr : let let_list in expr' + p[0] = LetNode(p[2], p[4]) + + def p_expr_let_error(self, p): + '''expr : let error in expr + | let let_list in error''' + p[0] = ErrorNode() + + + def p_expr_case(self, p): + 'expr : case expr of cases_list esac' + p[0] = CaseNode(p[2], p[4]) + + def p_expr_case_error(self, p): + '''expr : case error of cases_list esac + | case expr of error esac''' + p[0] = ErrorNode() + + + def p_expr_if(self, p): + 'expr : if expr then expr else expr fi' + p[0] = ConditionalNode(p[2], p[4], p[6]) + + def p_expr_if_error(self, p): + '''expr : if error then expr else expr fi + | if expr then error else expr fi + | if expr then expr else error fi''' + p[0] = ErrorNode() + + + def p_expr_while(self, p): + 'expr : while expr loop expr pool' + p[0] = WhileNode(p[2], p[4]) + + + def p_expr_while_error(self, p): + '''expr : while error loop expr pool + | while expr loop error pool + | while expr loop expr error''' + p[0] = ErrorNode() + + + def p_expr_arith(self, p): + 'expr : arith' + p[0] = p[1] + + + def p_let_list(self, p): + '''let_list : let_assign + | let_assign comma let_list''' + p[0] = [p[1]] if len(p) == 2 else [p[1]] + p[3] + + def p_let_list_error(self, p): + 'let_list : error let_list' + p[0] = ErrorNode() + + def p_let_assign(self, p): + '''let_assign : param larrow expr + | param''' + if len(p) == 2: + p[0] = VariableNode(p[1][0], p[1][1]) + else: + p[0] = VarDeclarationNode(p[1][0], p[1][1], p[3]) + + + def p_cases_list(self, p): + '''cases_list : casep semi + | casep semi cases_list''' + p[0] = [p[1]] if len(p) == 3 else [p[1]] + p[3] + + def p_cases_list_error(self, p): + '''cases_list : error cases_list''' + p[0] = ErrorNode() + + def p_case(self, p): + 'casep : id colon type rarrow expr' + p[0] = OptionNode(p[1], p[3], p[5]) + + + def p_arith(self, p): + '''arith : id larrow expr + | not comp + | comp + ''' + if len(p) == 4: + p[0] = AssignNode(p[1], p[3]) + elif len(p) == 3: + p[0] = NotNode(p[2]) + else: + p[0] = p[1] + + def p_comp(self, p): + '''comp : comp less op + | comp lesseq op + | comp equal op + | op''' + if len(p) == 2: + p[0] = p[1] + elif p[2] == '<': + p[0] = LessNode(p[1], p[3]) + elif p[2] == '<=': + p[0] = LessEqNode(p[1], p[3]) + elif p[2] == '=': + p[0] = EqualNode(p[1], p[3]) + + + def p_op(self, p): + '''op : op plus term + | op minus term + | term''' + if len(p) == 2: + p[0] = p[1] + elif p[2] == '+': + p[0] = PlusNode(p[1], p[3]) + elif p[2] == '-': + p[0] = MinusNode(p[1], p[3]) + + def p_term(self, p): + '''term : term star base_call + | term div base_call + | isvoid base_call + | nox base_call + | base_call''' + if len(p) == 2: + p[0] = p[1] + elif p[1] == 'isvoid': + p[0] = IsVoidNode(p[2]) + elif p[1] == '~': + p[0] = BinaryNotNode(p[2]) + elif p[2] == '*': + p[0] = StarNode(p[1], p[3]) + elif p[2] == '/': + p[0] = DivNode(p[1], p[3]) + + def p_base_call(self, p): + '''base_call : factor arroba type dot func_call + | factor''' + if len(p) == 2: + p[0] = p[1] + else: + p[0] = BaseCallNode(p[1], p[3], *p[5]) + + + def p_factor1(self, p): + '''factor : atom + | opar expr cpar''' + p[0] = p[1] if len(p) == 2 else p[2] + + def p_factor2(self, p): + '''factor : factor dot func_call + | func_call''' + if len(p) == 2: + p[0] = StaticCallNode(*p[1]) + else: + p[0] = CallNode(p[1], *p[3]) + + + def p_atom_num(self, p): + 'atom : num' + p[0] = ConstantNumNode(p[1]) + + def p_atom_id(self, p): + 'atom : id' + p[0] = VariableNode(p[1]) + + def p_atom_new(self, p): + 'atom : new type' + p[0] = InstantiateNode(p[2]) + + def p_atom_new_error(self, p): + 'atom : new error' + p[0] = ErrorNode() + + def p_atom_block(self, p): + 'atom : ocur block ccur' + p[0] = BlockNode(p[2]) + + def p_atom_boolean(self, p): + '''atom : true + | false''' + p[0] = ConstantBoolNode(p[1]) + + def p_atom_string(self, p): + 'atom : string' + p[0] = ConstantStrNode(p[1]) + + + def p_block(self, p): + '''block : expr semi + | expr semi block''' + p[0] = [p[1]] if len(p) == 3 else [p[1]] + p[3] + + def p_block_error(self, p): + '''block : error block + | error''' + p[0] = [ErrorNode()] + + + def p_func_call(self, p): + 'func_call : id opar args cpar' + p[0] = (p[1], p[3]) + + + def p_args(self, p): + '''args : arg_list + | arg_list_empty + ''' + p[0] = p[1] + + + def p_arg_list(self, p): + '''arg_list : expr + | expr comma arg_list''' + if len(p) == 2: + p[0] = [p[1]] + else: + p[0] = [p[1]] + p[3] + + def p_arg_list_error(self, p): + 'arg_list : error arg_list' + p[0] = ErrorNode() + + def p_arg_list_empty(self, p): + 'arg_list_empty : epsilon' + p[0] = [] + + # Error rule for syntax errors + def p_error(self, p): + if p: + self.print_error(p) + else: + error_text = SyntaticError.ERROR % 'EOF' + column = find_column(self.lexer.lexer, self.lexer.lexer) + line = self.lexer.lexer.lineno + print(SyntaticError(error_text, line, column - 1)) + + + def print_error(self, tok): + error_text = SyntaticError.ERROR % tok.value + column = find_column(tok.lexer, tok) + print(SyntaticError(error_text, tok.lineno, column)) + - def parse(self, program, debug=False): - # tokens = self.lexer.tokenize_text(program) - return self.parser.parse(program, self.lexer.lexer, debug=debug) if __name__ == "__main__": s = '''class Main inherits IO { - mod(i : Int, ) : Int { -- Formal list must be comma separated. A comma does not terminate a list of formals. - i - (i/k)*k + str <- "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; + main() : Object { + { + out_string("Enter number of numbers to multiply\n"); + out_int(prod(in_int())); + out_string("\n"); + } + }; + prod(i : Int) : Int { + let y : Int <- 1 in { + while (not (i = 0) ) loop { + out_string("Enter Number: "); + y <- y * in_int(); + i <- i - 1; + } + y; + } }; -}; - ''' +} + +''' + # Parser() parser = CoolParser() result = parser.parse(s) print(result) \ No newline at end of file diff --git a/src/tools/ast.py b/src/tools/ast.py index 3b2c5ad4..59e7460c 100644 --- a/src/tools/ast.py +++ b/src/tools/ast.py @@ -11,6 +11,9 @@ class DeclarationNode(Node): class ExpressionNode(Node): pass +class ErrorNode(Node): + pass + class ClassDeclarationNode(DeclarationNode): def __init__(self, idx, features, parent=None): self.id = idx diff --git a/tests/parser/err2_error.txt b/tests/parser/err2_error.txt index 8b377a59..c447e594 100644 --- a/tests/parser/err2_error.txt +++ b/tests/parser/err2_error.txt @@ -1,2 +1,2 @@ (3, 10) - SyntacticError: ERROR at or near "alpha" -(9, 7) - SyntacticError: ERROR at or near "alpha" \ No newline at end of file +(9, 7) - SyntacticError: ERROR at or near "alpha" \ No newline at end of file diff --git a/tests/parser/prod_error.txt b/tests/parser/prod_error.txt index ab4e7867..9716962c 100644 --- a/tests/parser/prod_error.txt +++ b/tests/parser/prod_error.txt @@ -1 +1 @@ -(14, 23) - SyntacticError: ERROR at or near "Main" \ No newline at end of file +(14, 23) - SyntacticError: ERROR at or near "Main" \ No newline at end of file diff --git a/tests/parser/test2.cl b/tests/parser/test2.cl index d79790f2..1108ffc0 100644 --- a/tests/parser/test2.cl +++ b/tests/parser/test2.cl @@ -17,4 +17,5 @@ class Main inherits IO { y; } }; -} +} + \ No newline at end of file diff --git a/tests/parser/test2_error.txt b/tests/parser/test2_error.txt index fd3cd17c..31a6f349 100644 --- a/tests/parser/test2_error.txt +++ b/tests/parser/test2_error.txt @@ -2,3 +2,4 @@ (17, 4) - SyntacticError: ERROR at or near "y" (21, 1) - SyntacticError: ERROR at or near EOF + \ No newline at end of file diff --git a/tests/parser/test4_error.txt b/tests/parser/test4_error.txt index af75ca92..d72721a6 100644 --- a/tests/parser/test4_error.txt +++ b/tests/parser/test4_error.txt @@ -1 +1 @@ -(1, 1) - SyntacticError: ERROR at or near "classs" \ No newline at end of file +(1, 1) - SyntacticError: ERROR at or near "classs" \ No newline at end of file From 39525f9c23a8e69f5ead449688238700fc9ab87b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Loraine=20Monteagudo=20Garc=C3=ADa?= Date: Thu, 20 Feb 2020 13:21:22 -0700 Subject: [PATCH 09/60] Changing the format of the errors --- .mypy_cache/3.7/@plugins_snapshot.json | 1 + src/__pycache__/base_parser.cpython-37.pyc | Bin 0 -> 1014 bytes src/__pycache__/cool_grammar.cpython-37.pyc | Bin 0 -> 384 bytes src/__pycache__/lexer.cpython-37.pyc | Bin 0 -> 3647 bytes src/__pycache__/parser.cpython-37.pyc | Bin 0 -> 14980 bytes src/base_parser.py | 6 +- src/lexer.py | 2 +- src/main.py | 19 +- src/output_parser/parselog.txt | 5457 +++++++++++++++++ src/output_parser/parser.out | 5456 ++++++++++++++++ src/parser.py | 49 +- src/tools/__pycache__/ast.cpython-37.pyc | Bin 0 -> 9588 bytes src/tools/__pycache__/errors.cpython-37.pyc | Bin 0 -> 4576 bytes src/tools/__pycache__/tokens.cpython-37.pyc | Bin 0 -> 1415 bytes src/tools/errors.py | 2 +- src/utils/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 237 bytes src/utils/__pycache__/logger.cpython-37.pyc | Bin 0 -> 425 bytes src/utils/__pycache__/utils.cpython-37.pyc | Bin 0 -> 392 bytes src/utils/logger.py | 11 + .gitignore => tests/.gitignore | 0 tests/utils/utils.py | 1 + 21 files changed, 10969 insertions(+), 35 deletions(-) create mode 100644 .mypy_cache/3.7/@plugins_snapshot.json create mode 100644 src/__pycache__/base_parser.cpython-37.pyc create mode 100644 src/__pycache__/cool_grammar.cpython-37.pyc create mode 100644 src/__pycache__/lexer.cpython-37.pyc create mode 100644 src/__pycache__/parser.cpython-37.pyc create mode 100644 src/output_parser/parselog.txt create mode 100644 src/output_parser/parser.out create mode 100644 src/tools/__pycache__/ast.cpython-37.pyc create mode 100644 src/tools/__pycache__/errors.cpython-37.pyc create mode 100644 src/tools/__pycache__/tokens.cpython-37.pyc create mode 100644 src/utils/__pycache__/__init__.cpython-37.pyc create mode 100644 src/utils/__pycache__/logger.cpython-37.pyc create mode 100644 src/utils/__pycache__/utils.cpython-37.pyc create mode 100644 src/utils/logger.py rename .gitignore => tests/.gitignore (100%) diff --git a/.mypy_cache/3.7/@plugins_snapshot.json b/.mypy_cache/3.7/@plugins_snapshot.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/.mypy_cache/3.7/@plugins_snapshot.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/__pycache__/base_parser.cpython-37.pyc b/src/__pycache__/base_parser.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..65e91b36654f5af916ecf8b3db131b69b0af5625 GIT binary patch literal 1014 zcmZuv&2H2%5VoD4&8||~0^+>a9J;CcBNYiDplacOR!9gAIbfx+sj@ih#r8_)k+X zlF>GH`jed6F_?kU=b-w>TC3Oci!>F!S+BdQhTxH;pn^apJ;6k9NsB-vJ_jvAK_Py> zjo*~UN;9sYJ-<*Vu#aKeBM>WUk`r z2p)}>+tyUMp1axH@tIH5_GU((o3go~5Ic+8$hy+FHg2?-E7|tD*P=FUqGzsd>ZL3a zAd#jYc_T$# z=1QwYzPopDba-;Gk8=O;@oCOaY&Dmv%sGGeDnD>~`2702&X097Q?ij$r|nS4A)aeh zR`vCdslTk1G{R|rnw`Dfz1*sSw;(=5VHrez~JZwH)r41%3<{&`-i?#67d z!~K&2sW3hdHqysD$Yw$ZsX8uB}&OCXlQ6MOHUVB zI`=qVoZZqQv%D6-Xi+@f(bVbD)#g*v8?9C#l&GAxqf(6gFM)Bn`Knq|f-sb0*9mVe mVJ5R=mQZVWD;KYZDaFim)olCcN|!Z=3xaK|FE=E8G9>?Q?rAIl literal 0 HcmV?d00001 diff --git a/src/__pycache__/lexer.cpython-37.pyc b/src/__pycache__/lexer.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..935989d476b0fd327ea34c64c89aa7e46b4c4997 GIT binary patch literal 3647 zcmbVPOLN@D5yk+!*aw#s^{`&Hq!Hsdi{uj9Bq#uwAFUi*c*CbV{I2CM7Ph%d9ufOT(nf=x5 zY}dfk`p5X2zs?%QKj~%qSWs@GCVWWXg@Wx=W=GpaA!rwos+XKkI1=K%$=9E zoZq1@vELa^_cgw6j2)}Ab@EikdD+fnE-_P-&9AA&VWpj>nTj>EV_(V*6(nn!pFUB+ za+W0-T4z>OEW98Iizp7r-t;k{+(ya&0wE2T3Bxr76Xth@YYEG3h=$t~P1hE-+Y&9e zE!u7eXuG28&WIVeCwf3X>&}Te_lP*+&Wm~Xs5t5#6UW@+;<$T4oN(U}@3<$$N%xdE z<(?L&-815hI1Bq{#k=A?)bEOO;ymj2#09}opA#3w0_yYPC*pn77sOA+2dKIDndqaw zC>-!IC_8tOB!s&%3mDMTL+&(C?xN(EA+)h&c!p+>Y>jkNTkF;;sNFIY+hTt*|44le zVZfw0F6}50MJSzSM(dxEz0#J%VqRLI+$ft6GIPwbk;`zkw4c84v$g!sMs@^4|FsD* zilk8fC``i5(bAQxzxZhR>W3sh{OH=RN8WNC6f*Qjo_GKA(N&%BPrv_LGP;vQX(%HZ z>m=twa(Y*xAE@vD9#@?zl-VeNzl%ZDC9}mVOIMagc@~T+M8kBmYhyX^ABTp6PDQ5=+SQMM=Mjm2Gddt%aPl+Y8?E{@V2vmtfFp1fURq_)-&equuc=b@gC7bkC#HIeq5YqW2N3=Fq z!^GDWo;|wWilV8#xQIU9htXq`BL`ui_Ye-+B^8bnP=Eq!D$GBaXP|p1z+z2W3lG0p zcr;jeO}q5T&@s<9{ zpg(j5D}xnhTv7kusOV_q%ZRpQWv>cp*g8nYUjHEg^xbMg749IUVXQNaFkiQJ*vHrr z9@~Rut;CncP9y7KMrnsCmT^KkCjL=w04JDXc<$J{2(e%V4?nOoLYW5;@h(+H!RFWb69vvwG@R7sPKoo+^^%h~(m zyW@Kg#@^TW?kl+Z9h$AERaE;sx+f4jXgsK53V=2OiO#!(62BxuMTq7L$2$YC)niZ!F8%e9ioDAW3@`Zg)&V_tAAl;_cw?tsFKAQ6X`yS^N8}p?MwJEj ziP>`-Ne;f&XN`q3zO>-)o6gQwhrgQ0ikSN_mJ_1}TyCKB*m*WNb--!57)(cxodr4@ zVn33eS9U$GKIEYHJnvcIhjmYO6!u(fJhc`lnRJmoa~UZYJOfY?*Gd%mF4BZZGz~~n zKchO>tCOIp->HVF(8t;Nf;3Vd`=n)c8|9j0gN#bTKvvSQ$X#T@WR;pD72}mqXncge zsh-noDD%9sjaoi)y8yg*@MH_{AbX$02P7O40}_iQu9CP$Vn6v-8YR(;VuB(yzXj1| z?QX+tfZPA+XSVHj3&n0X@oQJMi1Nr+vFG_0EyL&rp`YjcE41(_UjD^B{%yB|M8|I| z@`W$Kdc;+l7ZDd=Jmb029IK`;^B{?H8EC1CjQc{RDi4qxxeOILb15)^OI74pTCQc3 zVzP<@C6p*)%?r&#|1r#SscX}cNB&yub3asIf5`7^j(~|^n}c^K&++O1bW0aH>tfKTZm|BOufg_c}p1u)gV zf|pFDnS6rWK-UQ1=g)CtP4PJiIPjFyit|8)xW`W2kOf~Y)|9V#On^875idnHZ%Hqj~f{-+|(N- zA;Iv8AO$+|Jzk4wxbR80L(AQF_;r5o@j4cZ*0$5BM5mJ!(*vu&upDcd0dMpeRkFIL z?sm2@xt;(tU*MlXT~&xe z#K7j>JHqbggJc|T4x?<;TS1w%VQ?Q#9$D4crlQquT z2Sv?_<6G4`@O3(yq}E8cyBv>m)NR4>A+EF847Om|)41>E!z%IRReG#1`VJPyH27yX&bckRTd~M{E>QFDk$4G>I`{{t`j+3ZF=lPm1TS8 N+=Di=Pc_Ug`wuY3i@*Q? literal 0 HcmV?d00001 diff --git a/src/__pycache__/parser.cpython-37.pyc b/src/__pycache__/parser.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..30fe22d46bb9febf591e4aabb0204a59a77f9304 GIT binary patch literal 14980 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 literal 0 HcmV?d00001 diff --git a/src/base_parser.py b/src/base_parser.py index 01698333..4c00f153 100644 --- a/src/base_parser.py +++ b/src/base_parser.py @@ -2,6 +2,7 @@ import os import ply.yacc as yacc +from utils.logger import log from lexer import CoolLexer from tools.tokens import tokens @@ -12,7 +13,10 @@ def __init__(self, lexer=None): self.tokens = tokens yacc.yacc(start='program', module=self, - outputdir=self.outputdir) + outputdir=self.outputdir, + optimize=1, + debuglog=log, + errorlog=log) def parse(self, program, debug=False): diff --git a/src/lexer.py b/src/lexer.py index 2f3ffddb..30108b23 100644 --- a/src/lexer.py +++ b/src/lexer.py @@ -65,7 +65,7 @@ def t_string(self, t): # TODO: Comentarios anidados, eof en los comentarios def t_comment(self, t): - r'--.* | \*(.)*\*' + r'--.* | \(\*(.)*\*\)' pass # Define a rule so we can track line numbers diff --git a/src/main.py b/src/main.py index c063686f..d54f670b 100644 --- a/src/main.py +++ b/src/main.py @@ -3,15 +3,15 @@ from lexer import CoolLexer from parser import CoolParser -# arg_parser = argparse.ArgumentParser() -# arg_parser.add_argument('input') -# arg_parser.add_argument('output') -# args = arg_parser.parse_args() +arg_parser = argparse.ArgumentParser() +arg_parser.add_argument('input') +arg_parser.add_argument('output') +args = arg_parser.parse_args() -# input_ = args.input -# output_ = args.output +input_ = args.input +output_ = args.output -input_ = './tests/parser/err2.cl' +# input_ = './tests/parser/err2.cl' try: with open(input_) as f: @@ -21,9 +21,10 @@ # lexer.tokenize_text(data) parser = CoolParser(lexer) + if lexer.errors: + print(lexer.errors) ast = parser.parse(data) - print(lexer.errors) - print(ast) + # print(ast) except FileNotFoundError: print(f'No se pude encontrar el fichero {input_}') diff --git a/src/output_parser/parselog.txt b/src/output_parser/parselog.txt new file mode 100644 index 00000000..c6658148 --- /dev/null +++ b/src/output_parser/parselog.txt @@ -0,0 +1,5457 @@ + yacc.py:3317:Created by PLY version 3.11 (http://www.dabeaz.com/ply) + yacc.py:3377: + yacc.py:3378:Grammar + yacc.py:3379: + yacc.py:3381:Rule 0 S' -> program + yacc.py:3381:Rule 1 program -> class_list + yacc.py:3381:Rule 2 epsilon -> + yacc.py:3381:Rule 3 class_list -> def_class class_list + yacc.py:3381:Rule 4 class_list -> def_class + yacc.py:3381:Rule 5 class_list -> error class_list + yacc.py:3381:Rule 6 def_class -> class type ocur feature_list ccur semi + yacc.py:3381:Rule 7 def_class -> class type inherits type ocur feature_list ccur semi + yacc.py:3381:Rule 8 def_class -> class error ocur feature_list ccur semi + yacc.py:3381:Rule 9 def_class -> class error inherits type ocur feature_list ccur semi + yacc.py:3381:Rule 10 def_class -> class error inherits error ocur feature_list ccur semi + yacc.py:3381:Rule 11 def_class -> class type inherits error ocur feature_list ccur semi + yacc.py:3381:Rule 12 feature_list -> epsilon + yacc.py:3381:Rule 13 feature_list -> def_attr semi feature_list + yacc.py:3381:Rule 14 feature_list -> def_func semi feature_list + yacc.py:3381:Rule 15 feature_list -> error feature_list + yacc.py:3381:Rule 16 def_attr -> id colon type + yacc.py:3381:Rule 17 def_attr -> id colon type larrow expr + yacc.py:3381:Rule 18 def_attr -> error colon type + yacc.py:3381:Rule 19 def_attr -> id colon error + yacc.py:3381:Rule 20 def_attr -> error colon type larrow expr + yacc.py:3381:Rule 21 def_attr -> id colon error larrow expr + yacc.py:3381:Rule 22 def_attr -> id colon type larrow error + yacc.py:3381:Rule 23 def_func -> id opar formals cpar colon type ocur expr ccur + yacc.py:3381:Rule 24 def_func -> error opar formals cpar colon type ocur expr ccur + yacc.py:3381:Rule 25 def_func -> id opar error cpar colon type ocur expr ccur + yacc.py:3381:Rule 26 def_func -> id opar formals cpar colon error ocur expr ccur + yacc.py:3381:Rule 27 def_func -> id opar formals cpar colon type ocur error ccur + yacc.py:3381:Rule 28 formals -> param_list + yacc.py:3381:Rule 29 formals -> param_list_empty + yacc.py:3381:Rule 30 param_list -> param + yacc.py:3381:Rule 31 param_list -> param comma param_list + yacc.py:3381:Rule 32 param_list -> error param_list + yacc.py:3381:Rule 33 param_list_empty -> epsilon + yacc.py:3381:Rule 34 param -> id colon type + yacc.py:3381:Rule 35 expr -> let let_list in expr + yacc.py:3381:Rule 36 expr -> let error in expr + yacc.py:3381:Rule 37 expr -> let let_list in error + yacc.py:3381:Rule 38 expr -> case expr of cases_list esac + yacc.py:3381:Rule 39 expr -> case error of cases_list esac + yacc.py:3381:Rule 40 expr -> case expr of error esac + yacc.py:3381:Rule 41 expr -> if expr then expr else expr fi + yacc.py:3381:Rule 42 expr -> if error then expr else expr fi + yacc.py:3381:Rule 43 expr -> if expr then error else expr fi + yacc.py:3381:Rule 44 expr -> if expr then expr else error fi + yacc.py:3381:Rule 45 expr -> while expr loop expr pool + yacc.py:3381:Rule 46 expr -> while error loop expr pool + yacc.py:3381:Rule 47 expr -> while expr loop error pool + yacc.py:3381:Rule 48 expr -> while expr loop expr error + yacc.py:3381:Rule 49 expr -> arith + yacc.py:3381:Rule 50 let_list -> let_assign + yacc.py:3381:Rule 51 let_list -> let_assign comma let_list + yacc.py:3381:Rule 52 let_list -> error let_list + yacc.py:3381:Rule 53 let_assign -> param larrow expr + yacc.py:3381:Rule 54 let_assign -> param + yacc.py:3381:Rule 55 cases_list -> casep semi + yacc.py:3381:Rule 56 cases_list -> casep semi cases_list + yacc.py:3381:Rule 57 cases_list -> error cases_list + yacc.py:3381:Rule 58 casep -> id colon type rarrow expr + yacc.py:3381:Rule 59 arith -> id larrow expr + yacc.py:3381:Rule 60 arith -> not comp + yacc.py:3381:Rule 61 arith -> comp + yacc.py:3381:Rule 62 comp -> comp less op + yacc.py:3381:Rule 63 comp -> comp lesseq op + yacc.py:3381:Rule 64 comp -> comp equal op + yacc.py:3381:Rule 65 comp -> op + yacc.py:3381:Rule 66 op -> op plus term + yacc.py:3381:Rule 67 op -> op minus term + yacc.py:3381:Rule 68 op -> term + yacc.py:3381:Rule 69 term -> term star base_call + yacc.py:3381:Rule 70 term -> term div base_call + yacc.py:3381:Rule 71 term -> isvoid base_call + yacc.py:3381:Rule 72 term -> nox base_call + yacc.py:3381:Rule 73 term -> base_call + yacc.py:3381:Rule 74 base_call -> factor arroba type dot func_call + yacc.py:3381:Rule 75 base_call -> factor + yacc.py:3381:Rule 76 factor -> atom + yacc.py:3381:Rule 77 factor -> opar expr cpar + yacc.py:3381:Rule 78 factor -> factor dot func_call + yacc.py:3381:Rule 79 factor -> func_call + yacc.py:3381:Rule 80 atom -> num + yacc.py:3381:Rule 81 atom -> id + yacc.py:3381:Rule 82 atom -> new type + yacc.py:3381:Rule 83 atom -> new error + yacc.py:3381:Rule 84 atom -> ocur block ccur + yacc.py:3381:Rule 85 atom -> true + yacc.py:3381:Rule 86 atom -> false + yacc.py:3381:Rule 87 atom -> string + yacc.py:3381:Rule 88 block -> expr semi + yacc.py:3381:Rule 89 block -> expr semi block + yacc.py:3381:Rule 90 block -> error block + yacc.py:3381:Rule 91 block -> error + yacc.py:3381:Rule 92 func_call -> id opar args cpar + yacc.py:3381:Rule 93 args -> arg_list + yacc.py:3381:Rule 94 args -> arg_list_empty + yacc.py:3381:Rule 95 arg_list -> expr + yacc.py:3381:Rule 96 arg_list -> expr comma arg_list + yacc.py:3381:Rule 97 arg_list -> error arg_list + yacc.py:3381:Rule 98 arg_list_empty -> epsilon + yacc.py:3399: + yacc.py:3400:Terminals, with rules where they appear + yacc.py:3401: + yacc.py:3405:arroba : 74 + yacc.py:3405:case : 38 39 40 + yacc.py:3405:ccur : 6 7 8 9 10 11 23 24 25 26 27 84 + yacc.py:3405:class : 6 7 8 9 10 11 + yacc.py:3405:colon : 16 17 18 19 20 21 22 23 24 25 26 27 34 58 + yacc.py:3405:comma : 31 51 96 + yacc.py:3405:cpar : 23 24 25 26 27 77 92 + yacc.py:3405:div : 70 + yacc.py:3405:dot : 74 78 + yacc.py:3405:else : 41 42 43 44 + yacc.py:3405:equal : 64 + yacc.py:3405:error : 5 8 9 10 10 11 15 18 19 20 21 22 24 25 26 27 32 36 37 39 40 42 43 44 46 47 48 52 57 83 90 91 97 + yacc.py:3405:esac : 38 39 40 + yacc.py:3405:false : 86 + yacc.py:3405:fi : 41 42 43 44 + yacc.py:3405:id : 16 17 19 21 22 23 25 26 27 34 58 59 81 92 + yacc.py:3405:if : 41 42 43 44 + yacc.py:3405:in : 35 36 37 + yacc.py:3405:inherits : 7 9 10 11 + yacc.py:3405:isvoid : 71 + yacc.py:3405:larrow : 17 20 21 22 53 59 + yacc.py:3405:less : 62 + yacc.py:3405:lesseq : 63 + yacc.py:3405:let : 35 36 37 + yacc.py:3405:loop : 45 46 47 48 + yacc.py:3405:minus : 67 + yacc.py:3405:new : 82 83 + yacc.py:3405:not : 60 + yacc.py:3405:nox : 72 + yacc.py:3405:num : 80 + yacc.py:3405:ocur : 6 7 8 9 10 11 23 24 25 26 27 84 + yacc.py:3405:of : 38 39 40 + yacc.py:3405:opar : 23 24 25 26 27 77 92 + yacc.py:3405:plus : 66 + yacc.py:3405:pool : 45 46 47 + yacc.py:3405:rarrow : 58 + yacc.py:3405:semi : 6 7 8 9 10 11 13 14 55 56 88 89 + yacc.py:3405:star : 69 + yacc.py:3405:string : 87 + yacc.py:3405:then : 41 42 43 44 + yacc.py:3405:true : 85 + yacc.py:3405:type : 6 7 7 9 11 16 17 18 20 22 23 24 25 27 34 58 74 82 + yacc.py:3405:while : 45 46 47 48 + yacc.py:3407: + yacc.py:3408:Nonterminals, with rules where they appear + yacc.py:3409: + yacc.py:3413:arg_list : 93 96 97 + yacc.py:3413:arg_list_empty : 94 + yacc.py:3413:args : 92 + yacc.py:3413:arith : 49 + yacc.py:3413:atom : 76 + yacc.py:3413:base_call : 69 70 71 72 73 + yacc.py:3413:block : 84 89 90 + yacc.py:3413:casep : 55 56 + yacc.py:3413:cases_list : 38 39 56 57 + yacc.py:3413:class_list : 1 3 5 + yacc.py:3413:comp : 60 61 62 63 64 + yacc.py:3413:def_attr : 13 + yacc.py:3413:def_class : 3 4 + yacc.py:3413:def_func : 14 + yacc.py:3413:epsilon : 12 33 98 + yacc.py:3413:expr : 17 20 21 23 24 25 26 35 36 38 40 41 41 41 42 42 43 43 44 44 45 45 46 47 48 48 53 58 59 77 88 89 95 96 + yacc.py:3413:factor : 74 75 78 + yacc.py:3413:feature_list : 6 7 8 9 10 11 13 14 15 + yacc.py:3413:formals : 23 24 26 27 + yacc.py:3413:func_call : 74 78 79 + yacc.py:3413:let_assign : 50 51 + yacc.py:3413:let_list : 35 37 51 52 + yacc.py:3413:op : 62 63 64 65 66 67 + yacc.py:3413:param : 30 31 53 54 + yacc.py:3413:param_list : 28 31 32 + yacc.py:3413:param_list_empty : 29 + yacc.py:3413:program : 0 + yacc.py:3413:term : 66 67 68 69 70 + yacc.py:3414: + yacc.py:3436:Generating LALR tables + yacc.py:2543:Parsing method: LALR + yacc.py:2561: + yacc.py:2562:state 0 + yacc.py:2563: + yacc.py:2565: (0) S' -> . program + yacc.py:2565: (1) program -> . class_list + yacc.py:2565: (3) class_list -> . def_class class_list + yacc.py:2565: (4) class_list -> . def_class + yacc.py:2565: (5) class_list -> . error class_list + yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi + yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi + yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> . class error inherits type ocur feature_list ccur semi + yacc.py:2565: (10) def_class -> . class error inherits error ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> . class type inherits error ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: error shift and go to state 4 + yacc.py:2687: class shift and go to state 5 + yacc.py:2689: + yacc.py:2714: program shift and go to state 1 + yacc.py:2714: class_list shift and go to state 2 + yacc.py:2714: def_class shift and go to state 3 + yacc.py:2561: + yacc.py:2562:state 1 + yacc.py:2563: + yacc.py:2565: (0) S' -> program . + yacc.py:2566: + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 2 + yacc.py:2563: + yacc.py:2565: (1) program -> class_list . + yacc.py:2566: + yacc.py:2687: $end reduce using rule 1 (program -> class_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 3 + yacc.py:2563: + yacc.py:2565: (3) class_list -> def_class . class_list + yacc.py:2565: (4) class_list -> def_class . + yacc.py:2565: (3) class_list -> . def_class class_list + yacc.py:2565: (4) class_list -> . def_class + yacc.py:2565: (5) class_list -> . error class_list + yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi + yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi + yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> . class error inherits type ocur feature_list ccur semi + yacc.py:2565: (10) def_class -> . class error inherits error ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> . class type inherits error ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: $end reduce using rule 4 (class_list -> def_class .) + yacc.py:2687: error shift and go to state 4 + yacc.py:2687: class shift and go to state 5 + yacc.py:2689: + yacc.py:2714: def_class shift and go to state 3 + yacc.py:2714: class_list shift and go to state 6 + yacc.py:2561: + yacc.py:2562:state 4 + yacc.py:2563: + yacc.py:2565: (5) class_list -> error . class_list + yacc.py:2565: (3) class_list -> . def_class class_list + yacc.py:2565: (4) class_list -> . def_class + yacc.py:2565: (5) class_list -> . error class_list + yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi + yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi + yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> . class error inherits type ocur feature_list ccur semi + yacc.py:2565: (10) def_class -> . class error inherits error ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> . class type inherits error ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: error shift and go to state 4 + yacc.py:2687: class shift and go to state 5 + yacc.py:2689: + yacc.py:2714: class_list shift and go to state 7 + yacc.py:2714: def_class shift and go to state 3 + yacc.py:2561: + yacc.py:2562:state 5 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class . type ocur feature_list ccur semi + yacc.py:2565: (7) def_class -> class . type inherits type ocur feature_list ccur semi + yacc.py:2565: (8) def_class -> class . error ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> class . error inherits type ocur feature_list ccur semi + yacc.py:2565: (10) def_class -> class . error inherits error ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> class . type inherits error ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: type shift and go to state 8 + yacc.py:2687: error shift and go to state 9 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 6 + yacc.py:2563: + yacc.py:2565: (3) class_list -> def_class class_list . + yacc.py:2566: + yacc.py:2687: $end reduce using rule 3 (class_list -> def_class class_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 7 + yacc.py:2563: + yacc.py:2565: (5) class_list -> error class_list . + yacc.py:2566: + yacc.py:2687: $end reduce using rule 5 (class_list -> error class_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 8 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class type . ocur feature_list ccur semi + yacc.py:2565: (7) def_class -> class type . inherits type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> class type . inherits error ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 10 + yacc.py:2687: inherits shift and go to state 11 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 9 + yacc.py:2563: + yacc.py:2565: (8) def_class -> class error . ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> class error . inherits type ocur feature_list ccur semi + yacc.py:2565: (10) def_class -> class error . inherits error ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 12 + yacc.py:2687: inherits shift and go to state 13 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 10 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class type ocur . feature_list ccur semi + yacc.py:2565: (12) feature_list -> . epsilon + yacc.py:2565: (13) feature_list -> . def_attr semi feature_list + yacc.py:2565: (14) feature_list -> . def_func semi feature_list + yacc.py:2565: (15) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (16) def_attr -> . id colon type + yacc.py:2565: (17) def_attr -> . id colon type larrow expr + yacc.py:2565: (18) def_attr -> . error colon type + yacc.py:2565: (19) def_attr -> . id colon error + yacc.py:2565: (20) def_attr -> . error colon type larrow expr + yacc.py:2565: (21) def_attr -> . id colon error larrow expr + yacc.py:2565: (22) def_attr -> . id colon type larrow error + yacc.py:2565: (23) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (24) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (25) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 18 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 14 + yacc.py:2714: epsilon shift and go to state 15 + yacc.py:2714: def_attr shift and go to state 16 + yacc.py:2714: def_func shift and go to state 17 + yacc.py:2561: + yacc.py:2562:state 11 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits . type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> class type inherits . error ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: type shift and go to state 20 + yacc.py:2687: error shift and go to state 21 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 12 + yacc.py:2563: + yacc.py:2565: (8) def_class -> class error ocur . feature_list ccur semi + yacc.py:2565: (12) feature_list -> . epsilon + yacc.py:2565: (13) feature_list -> . def_attr semi feature_list + yacc.py:2565: (14) feature_list -> . def_func semi feature_list + yacc.py:2565: (15) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (16) def_attr -> . id colon type + yacc.py:2565: (17) def_attr -> . id colon type larrow expr + yacc.py:2565: (18) def_attr -> . error colon type + yacc.py:2565: (19) def_attr -> . id colon error + yacc.py:2565: (20) def_attr -> . error colon type larrow expr + yacc.py:2565: (21) def_attr -> . id colon error larrow expr + yacc.py:2565: (22) def_attr -> . id colon type larrow error + yacc.py:2565: (23) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (24) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (25) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 18 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 22 + yacc.py:2714: epsilon shift and go to state 15 + yacc.py:2714: def_attr shift and go to state 16 + yacc.py:2714: def_func shift and go to state 17 + yacc.py:2561: + yacc.py:2562:state 13 + yacc.py:2563: + yacc.py:2565: (9) def_class -> class error inherits . type ocur feature_list ccur semi + yacc.py:2565: (10) def_class -> class error inherits . error ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: type shift and go to state 24 + yacc.py:2687: error shift and go to state 23 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 14 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class type ocur feature_list . ccur semi + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 25 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 15 + yacc.py:2563: + yacc.py:2565: (12) feature_list -> epsilon . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 12 (feature_list -> epsilon .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 16 + yacc.py:2563: + yacc.py:2565: (13) feature_list -> def_attr . semi feature_list + yacc.py:2566: + yacc.py:2687: semi shift and go to state 26 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 17 + yacc.py:2563: + yacc.py:2565: (14) feature_list -> def_func . semi feature_list + yacc.py:2566: + yacc.py:2687: semi shift and go to state 27 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 18 + yacc.py:2563: + yacc.py:2565: (15) feature_list -> error . feature_list + yacc.py:2565: (18) def_attr -> error . colon type + yacc.py:2565: (20) def_attr -> error . colon type larrow expr + yacc.py:2565: (24) def_func -> error . opar formals cpar colon type ocur expr ccur + yacc.py:2565: (12) feature_list -> . epsilon + yacc.py:2565: (13) feature_list -> . def_attr semi feature_list + yacc.py:2565: (14) feature_list -> . def_func semi feature_list + yacc.py:2565: (15) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (16) def_attr -> . id colon type + yacc.py:2565: (17) def_attr -> . id colon type larrow expr + yacc.py:2565: (18) def_attr -> . error colon type + yacc.py:2565: (19) def_attr -> . id colon error + yacc.py:2565: (20) def_attr -> . error colon type larrow expr + yacc.py:2565: (21) def_attr -> . id colon error larrow expr + yacc.py:2565: (22) def_attr -> . id colon type larrow error + yacc.py:2565: (23) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (24) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (25) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: colon shift and go to state 29 + yacc.py:2687: opar shift and go to state 30 + yacc.py:2687: error shift and go to state 18 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 28 + yacc.py:2714: epsilon shift and go to state 15 + yacc.py:2714: def_attr shift and go to state 16 + yacc.py:2714: def_func shift and go to state 17 + yacc.py:2561: + yacc.py:2562:state 19 + yacc.py:2563: + yacc.py:2565: (16) def_attr -> id . colon type + yacc.py:2565: (17) def_attr -> id . colon type larrow expr + yacc.py:2565: (19) def_attr -> id . colon error + yacc.py:2565: (21) def_attr -> id . colon error larrow expr + yacc.py:2565: (22) def_attr -> id . colon type larrow error + yacc.py:2565: (23) def_func -> id . opar formals cpar colon type ocur expr ccur + yacc.py:2565: (25) def_func -> id . opar error cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> id . opar formals cpar colon error ocur expr ccur + yacc.py:2565: (27) def_func -> id . opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: colon shift and go to state 31 + yacc.py:2687: opar shift and go to state 32 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 20 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits type . ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 33 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 21 + yacc.py:2563: + yacc.py:2565: (11) def_class -> class type inherits error . ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 34 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 22 + yacc.py:2563: + yacc.py:2565: (8) def_class -> class error ocur feature_list . ccur semi + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 35 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 23 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits error . ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 36 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 24 + yacc.py:2563: + yacc.py:2565: (9) def_class -> class error inherits type . ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 37 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 25 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class type ocur feature_list ccur . semi + yacc.py:2566: + yacc.py:2687: semi shift and go to state 38 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 26 + yacc.py:2563: + yacc.py:2565: (13) feature_list -> def_attr semi . feature_list + yacc.py:2565: (12) feature_list -> . epsilon + yacc.py:2565: (13) feature_list -> . def_attr semi feature_list + yacc.py:2565: (14) feature_list -> . def_func semi feature_list + yacc.py:2565: (15) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (16) def_attr -> . id colon type + yacc.py:2565: (17) def_attr -> . id colon type larrow expr + yacc.py:2565: (18) def_attr -> . error colon type + yacc.py:2565: (19) def_attr -> . id colon error + yacc.py:2565: (20) def_attr -> . error colon type larrow expr + yacc.py:2565: (21) def_attr -> . id colon error larrow expr + yacc.py:2565: (22) def_attr -> . id colon type larrow error + yacc.py:2565: (23) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (24) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (25) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 18 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: def_attr shift and go to state 16 + yacc.py:2714: feature_list shift and go to state 39 + yacc.py:2714: epsilon shift and go to state 15 + yacc.py:2714: def_func shift and go to state 17 + yacc.py:2561: + yacc.py:2562:state 27 + yacc.py:2563: + yacc.py:2565: (14) feature_list -> def_func semi . feature_list + yacc.py:2565: (12) feature_list -> . epsilon + yacc.py:2565: (13) feature_list -> . def_attr semi feature_list + yacc.py:2565: (14) feature_list -> . def_func semi feature_list + yacc.py:2565: (15) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (16) def_attr -> . id colon type + yacc.py:2565: (17) def_attr -> . id colon type larrow expr + yacc.py:2565: (18) def_attr -> . error colon type + yacc.py:2565: (19) def_attr -> . id colon error + yacc.py:2565: (20) def_attr -> . error colon type larrow expr + yacc.py:2565: (21) def_attr -> . id colon error larrow expr + yacc.py:2565: (22) def_attr -> . id colon type larrow error + yacc.py:2565: (23) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (24) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (25) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 18 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: def_func shift and go to state 17 + yacc.py:2714: feature_list shift and go to state 40 + yacc.py:2714: epsilon shift and go to state 15 + yacc.py:2714: def_attr shift and go to state 16 + yacc.py:2561: + yacc.py:2562:state 28 + yacc.py:2563: + yacc.py:2565: (15) feature_list -> error feature_list . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 15 (feature_list -> error feature_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 29 + yacc.py:2563: + yacc.py:2565: (18) def_attr -> error colon . type + yacc.py:2565: (20) def_attr -> error colon . type larrow expr + yacc.py:2566: + yacc.py:2687: type shift and go to state 41 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 30 + yacc.py:2563: + yacc.py:2565: (24) def_func -> error opar . formals cpar colon type ocur expr ccur + yacc.py:2565: (28) formals -> . param_list + yacc.py:2565: (29) formals -> . param_list_empty + yacc.py:2565: (30) param_list -> . param + yacc.py:2565: (31) param_list -> . param comma param_list + yacc.py:2565: (32) param_list -> . error param_list + yacc.py:2565: (33) param_list_empty -> . epsilon + yacc.py:2565: (34) param -> . id colon type + yacc.py:2565: (2) epsilon -> . + yacc.py:2566: + yacc.py:2687: error shift and go to state 42 + yacc.py:2687: id shift and go to state 48 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2689: + yacc.py:2714: formals shift and go to state 43 + yacc.py:2714: param_list shift and go to state 44 + yacc.py:2714: param_list_empty shift and go to state 45 + yacc.py:2714: param shift and go to state 46 + yacc.py:2714: epsilon shift and go to state 47 + yacc.py:2561: + yacc.py:2562:state 31 + yacc.py:2563: + yacc.py:2565: (16) def_attr -> id colon . type + yacc.py:2565: (17) def_attr -> id colon . type larrow expr + yacc.py:2565: (19) def_attr -> id colon . error + yacc.py:2565: (21) def_attr -> id colon . error larrow expr + yacc.py:2565: (22) def_attr -> id colon . type larrow error + yacc.py:2566: + yacc.py:2687: type shift and go to state 49 + yacc.py:2687: error shift and go to state 50 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 32 + yacc.py:2563: + yacc.py:2565: (23) def_func -> id opar . formals cpar colon type ocur expr ccur + yacc.py:2565: (25) def_func -> id opar . error cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> id opar . formals cpar colon error ocur expr ccur + yacc.py:2565: (27) def_func -> id opar . formals cpar colon type ocur error ccur + yacc.py:2565: (28) formals -> . param_list + yacc.py:2565: (29) formals -> . param_list_empty + yacc.py:2565: (30) param_list -> . param + yacc.py:2565: (31) param_list -> . param comma param_list + yacc.py:2565: (32) param_list -> . error param_list + yacc.py:2565: (33) param_list_empty -> . epsilon + yacc.py:2565: (34) param -> . id colon type + yacc.py:2565: (2) epsilon -> . + yacc.py:2566: + yacc.py:2687: error shift and go to state 52 + yacc.py:2687: id shift and go to state 48 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2689: + yacc.py:2714: formals shift and go to state 51 + yacc.py:2714: param_list shift and go to state 44 + yacc.py:2714: param_list_empty shift and go to state 45 + yacc.py:2714: param shift and go to state 46 + yacc.py:2714: epsilon shift and go to state 47 + yacc.py:2561: + yacc.py:2562:state 33 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits type ocur . feature_list ccur semi + yacc.py:2565: (12) feature_list -> . epsilon + yacc.py:2565: (13) feature_list -> . def_attr semi feature_list + yacc.py:2565: (14) feature_list -> . def_func semi feature_list + yacc.py:2565: (15) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (16) def_attr -> . id colon type + yacc.py:2565: (17) def_attr -> . id colon type larrow expr + yacc.py:2565: (18) def_attr -> . error colon type + yacc.py:2565: (19) def_attr -> . id colon error + yacc.py:2565: (20) def_attr -> . error colon type larrow expr + yacc.py:2565: (21) def_attr -> . id colon error larrow expr + yacc.py:2565: (22) def_attr -> . id colon type larrow error + yacc.py:2565: (23) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (24) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (25) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 18 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 53 + yacc.py:2714: epsilon shift and go to state 15 + yacc.py:2714: def_attr shift and go to state 16 + yacc.py:2714: def_func shift and go to state 17 + yacc.py:2561: + yacc.py:2562:state 34 + yacc.py:2563: + yacc.py:2565: (11) def_class -> class type inherits error ocur . feature_list ccur semi + yacc.py:2565: (12) feature_list -> . epsilon + yacc.py:2565: (13) feature_list -> . def_attr semi feature_list + yacc.py:2565: (14) feature_list -> . def_func semi feature_list + yacc.py:2565: (15) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (16) def_attr -> . id colon type + yacc.py:2565: (17) def_attr -> . id colon type larrow expr + yacc.py:2565: (18) def_attr -> . error colon type + yacc.py:2565: (19) def_attr -> . id colon error + yacc.py:2565: (20) def_attr -> . error colon type larrow expr + yacc.py:2565: (21) def_attr -> . id colon error larrow expr + yacc.py:2565: (22) def_attr -> . id colon type larrow error + yacc.py:2565: (23) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (24) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (25) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 18 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 54 + yacc.py:2714: epsilon shift and go to state 15 + yacc.py:2714: def_attr shift and go to state 16 + yacc.py:2714: def_func shift and go to state 17 + yacc.py:2561: + yacc.py:2562:state 35 + yacc.py:2563: + yacc.py:2565: (8) def_class -> class error ocur feature_list ccur . semi + yacc.py:2566: + yacc.py:2687: semi shift and go to state 55 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 36 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits error ocur . feature_list ccur semi + yacc.py:2565: (12) feature_list -> . epsilon + yacc.py:2565: (13) feature_list -> . def_attr semi feature_list + yacc.py:2565: (14) feature_list -> . def_func semi feature_list + yacc.py:2565: (15) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (16) def_attr -> . id colon type + yacc.py:2565: (17) def_attr -> . id colon type larrow expr + yacc.py:2565: (18) def_attr -> . error colon type + yacc.py:2565: (19) def_attr -> . id colon error + yacc.py:2565: (20) def_attr -> . error colon type larrow expr + yacc.py:2565: (21) def_attr -> . id colon error larrow expr + yacc.py:2565: (22) def_attr -> . id colon type larrow error + yacc.py:2565: (23) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (24) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (25) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 18 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 56 + yacc.py:2714: epsilon shift and go to state 15 + yacc.py:2714: def_attr shift and go to state 16 + yacc.py:2714: def_func shift and go to state 17 + yacc.py:2561: + yacc.py:2562:state 37 + yacc.py:2563: + yacc.py:2565: (9) def_class -> class error inherits type ocur . feature_list ccur semi + yacc.py:2565: (12) feature_list -> . epsilon + yacc.py:2565: (13) feature_list -> . def_attr semi feature_list + yacc.py:2565: (14) feature_list -> . def_func semi feature_list + yacc.py:2565: (15) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (16) def_attr -> . id colon type + yacc.py:2565: (17) def_attr -> . id colon type larrow expr + yacc.py:2565: (18) def_attr -> . error colon type + yacc.py:2565: (19) def_attr -> . id colon error + yacc.py:2565: (20) def_attr -> . error colon type larrow expr + yacc.py:2565: (21) def_attr -> . id colon error larrow expr + yacc.py:2565: (22) def_attr -> . id colon type larrow error + yacc.py:2565: (23) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (24) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (25) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 18 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 57 + yacc.py:2714: epsilon shift and go to state 15 + yacc.py:2714: def_attr shift and go to state 16 + yacc.py:2714: def_func shift and go to state 17 + yacc.py:2561: + yacc.py:2562:state 38 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class type ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 39 + yacc.py:2563: + yacc.py:2565: (13) feature_list -> def_attr semi feature_list . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 13 (feature_list -> def_attr semi feature_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 40 + yacc.py:2563: + yacc.py:2565: (14) feature_list -> def_func semi feature_list . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 14 (feature_list -> def_func semi feature_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 41 + yacc.py:2563: + yacc.py:2565: (18) def_attr -> error colon type . + yacc.py:2565: (20) def_attr -> error colon type . larrow expr + yacc.py:2566: + yacc.py:2687: semi reduce using rule 18 (def_attr -> error colon type .) + yacc.py:2687: larrow shift and go to state 58 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 42 + yacc.py:2563: + yacc.py:2565: (32) param_list -> error . param_list + yacc.py:2565: (30) param_list -> . param + yacc.py:2565: (31) param_list -> . param comma param_list + yacc.py:2565: (32) param_list -> . error param_list + yacc.py:2565: (34) param -> . id colon type + yacc.py:2566: + yacc.py:2687: error shift and go to state 42 + yacc.py:2687: id shift and go to state 48 + yacc.py:2689: + yacc.py:2714: param_list shift and go to state 59 + yacc.py:2714: param shift and go to state 46 + yacc.py:2561: + yacc.py:2562:state 43 + yacc.py:2563: + yacc.py:2565: (24) def_func -> error opar formals . cpar colon type ocur expr ccur + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 60 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 44 + yacc.py:2563: + yacc.py:2565: (28) formals -> param_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 28 (formals -> param_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 45 + yacc.py:2563: + yacc.py:2565: (29) formals -> param_list_empty . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 29 (formals -> param_list_empty .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 46 + yacc.py:2563: + yacc.py:2565: (30) param_list -> param . + yacc.py:2565: (31) param_list -> param . comma param_list + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 30 (param_list -> param .) + yacc.py:2687: comma shift and go to state 61 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 47 + yacc.py:2563: + yacc.py:2565: (33) param_list_empty -> epsilon . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 33 (param_list_empty -> epsilon .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 48 + yacc.py:2563: + yacc.py:2565: (34) param -> id . colon type + yacc.py:2566: + yacc.py:2687: colon shift and go to state 62 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 49 + yacc.py:2563: + yacc.py:2565: (16) def_attr -> id colon type . + yacc.py:2565: (17) def_attr -> id colon type . larrow expr + yacc.py:2565: (22) def_attr -> id colon type . larrow error + yacc.py:2566: + yacc.py:2687: semi reduce using rule 16 (def_attr -> id colon type .) + yacc.py:2687: larrow shift and go to state 63 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 50 + yacc.py:2563: + yacc.py:2565: (19) def_attr -> id colon error . + yacc.py:2565: (21) def_attr -> id colon error . larrow expr + yacc.py:2566: + yacc.py:2687: semi reduce using rule 19 (def_attr -> id colon error .) + yacc.py:2687: larrow shift and go to state 64 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 51 + yacc.py:2563: + yacc.py:2565: (23) def_func -> id opar formals . cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> id opar formals . cpar colon error ocur expr ccur + yacc.py:2565: (27) def_func -> id opar formals . cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 65 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 52 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar error . cpar colon type ocur expr ccur + yacc.py:2565: (32) param_list -> error . param_list + yacc.py:2565: (30) param_list -> . param + yacc.py:2565: (31) param_list -> . param comma param_list + yacc.py:2565: (32) param_list -> . error param_list + yacc.py:2565: (34) param -> . id colon type + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 66 + yacc.py:2687: error shift and go to state 42 + yacc.py:2687: id shift and go to state 48 + yacc.py:2689: + yacc.py:2714: param_list shift and go to state 59 + yacc.py:2714: param shift and go to state 46 + yacc.py:2561: + yacc.py:2562:state 53 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list . ccur semi + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 67 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 54 + yacc.py:2563: + yacc.py:2565: (11) def_class -> class type inherits error ocur feature_list . ccur semi + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 68 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 55 + yacc.py:2563: + yacc.py:2565: (8) def_class -> class error ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 56 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits error ocur feature_list . ccur semi + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 69 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 57 + yacc.py:2563: + yacc.py:2565: (9) def_class -> class error inherits type ocur feature_list . ccur semi + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 70 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 58 + yacc.py:2563: + yacc.py:2565: (20) def_attr -> error colon type larrow . expr + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 71 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 59 + yacc.py:2563: + yacc.py:2565: (32) param_list -> error param_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 32 (param_list -> error param_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 60 + yacc.py:2563: + yacc.py:2565: (24) def_func -> error opar formals cpar . colon type ocur expr ccur + yacc.py:2566: + yacc.py:2687: colon shift and go to state 95 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 61 + yacc.py:2563: + yacc.py:2565: (31) param_list -> param comma . param_list + yacc.py:2565: (30) param_list -> . param + yacc.py:2565: (31) param_list -> . param comma param_list + yacc.py:2565: (32) param_list -> . error param_list + yacc.py:2565: (34) param -> . id colon type + yacc.py:2566: + yacc.py:2687: error shift and go to state 42 + yacc.py:2687: id shift and go to state 48 + yacc.py:2689: + yacc.py:2714: param shift and go to state 46 + yacc.py:2714: param_list shift and go to state 96 + yacc.py:2561: + yacc.py:2562:state 62 + yacc.py:2563: + yacc.py:2565: (34) param -> id colon . type + yacc.py:2566: + yacc.py:2687: type shift and go to state 97 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 63 + yacc.py:2563: + yacc.py:2565: (17) def_attr -> id colon type larrow . expr + yacc.py:2565: (22) def_attr -> id colon type larrow . error + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 99 + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 98 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 64 + yacc.py:2563: + yacc.py:2565: (21) def_attr -> id colon error larrow . expr + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 100 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 65 + yacc.py:2563: + yacc.py:2565: (23) def_func -> id opar formals cpar . colon type ocur expr ccur + yacc.py:2565: (26) def_func -> id opar formals cpar . colon error ocur expr ccur + yacc.py:2565: (27) def_func -> id opar formals cpar . colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: colon shift and go to state 101 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 66 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar error cpar . colon type ocur expr ccur + yacc.py:2566: + yacc.py:2687: colon shift and go to state 102 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 67 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list ccur . semi + yacc.py:2566: + yacc.py:2687: semi shift and go to state 103 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 68 + yacc.py:2563: + yacc.py:2565: (11) def_class -> class type inherits error ocur feature_list ccur . semi + yacc.py:2566: + yacc.py:2687: semi shift and go to state 104 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 69 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits error ocur feature_list ccur . semi + yacc.py:2566: + yacc.py:2687: semi shift and go to state 105 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 70 + yacc.py:2563: + yacc.py:2565: (9) def_class -> class error inherits type ocur feature_list ccur . semi + yacc.py:2566: + yacc.py:2687: semi shift and go to state 106 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 71 + yacc.py:2563: + yacc.py:2565: (20) def_attr -> error colon type larrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 20 (def_attr -> error colon type larrow expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 72 + yacc.py:2563: + yacc.py:2565: (35) expr -> let . let_list in expr + yacc.py:2565: (36) expr -> let . error in expr + yacc.py:2565: (37) expr -> let . let_list in error + yacc.py:2565: (50) let_list -> . let_assign + yacc.py:2565: (51) let_list -> . let_assign comma let_list + yacc.py:2565: (52) let_list -> . error let_list + yacc.py:2565: (53) let_assign -> . param larrow expr + yacc.py:2565: (54) let_assign -> . param + yacc.py:2565: (34) param -> . id colon type + yacc.py:2566: + yacc.py:2687: error shift and go to state 108 + yacc.py:2687: id shift and go to state 48 + yacc.py:2689: + yacc.py:2714: let_list shift and go to state 107 + yacc.py:2714: let_assign shift and go to state 109 + yacc.py:2714: param shift and go to state 110 + yacc.py:2561: + yacc.py:2562:state 73 + yacc.py:2563: + yacc.py:2565: (38) expr -> case . expr of cases_list esac + yacc.py:2565: (39) expr -> case . error of cases_list esac + yacc.py:2565: (40) expr -> case . expr of error esac + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 112 + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 74 + yacc.py:2563: + yacc.py:2565: (41) expr -> if . expr then expr else expr fi + yacc.py:2565: (42) expr -> if . error then expr else expr fi + yacc.py:2565: (43) expr -> if . expr then error else expr fi + yacc.py:2565: (44) expr -> if . expr then expr else error fi + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 114 + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 113 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 75 + yacc.py:2563: + yacc.py:2565: (45) expr -> while . expr loop expr pool + yacc.py:2565: (46) expr -> while . error loop expr pool + yacc.py:2565: (47) expr -> while . expr loop error pool + yacc.py:2565: (48) expr -> while . expr loop expr error + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 116 + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 115 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 76 + yacc.py:2563: + yacc.py:2565: (49) expr -> arith . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 49 (expr -> arith .) + yacc.py:2687: of reduce using rule 49 (expr -> arith .) + yacc.py:2687: then reduce using rule 49 (expr -> arith .) + yacc.py:2687: loop reduce using rule 49 (expr -> arith .) + yacc.py:2687: cpar reduce using rule 49 (expr -> arith .) + yacc.py:2687: comma reduce using rule 49 (expr -> arith .) + yacc.py:2687: in reduce using rule 49 (expr -> arith .) + yacc.py:2687: else reduce using rule 49 (expr -> arith .) + yacc.py:2687: pool reduce using rule 49 (expr -> arith .) + yacc.py:2687: error reduce using rule 49 (expr -> arith .) + yacc.py:2687: ccur reduce using rule 49 (expr -> arith .) + yacc.py:2687: fi reduce using rule 49 (expr -> arith .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 77 + yacc.py:2563: + yacc.py:2565: (59) arith -> id . larrow expr + yacc.py:2565: (81) atom -> id . + yacc.py:2565: (92) func_call -> id . opar args cpar + yacc.py:2566: + yacc.py:2687: larrow shift and go to state 117 + yacc.py:2687: arroba reduce using rule 81 (atom -> id .) + yacc.py:2687: dot reduce using rule 81 (atom -> id .) + yacc.py:2687: star reduce using rule 81 (atom -> id .) + yacc.py:2687: div reduce using rule 81 (atom -> id .) + yacc.py:2687: plus reduce using rule 81 (atom -> id .) + yacc.py:2687: minus reduce using rule 81 (atom -> id .) + yacc.py:2687: less reduce using rule 81 (atom -> id .) + yacc.py:2687: lesseq reduce using rule 81 (atom -> id .) + yacc.py:2687: equal reduce using rule 81 (atom -> id .) + yacc.py:2687: semi reduce using rule 81 (atom -> id .) + yacc.py:2687: of reduce using rule 81 (atom -> id .) + yacc.py:2687: then reduce using rule 81 (atom -> id .) + yacc.py:2687: loop reduce using rule 81 (atom -> id .) + yacc.py:2687: cpar reduce using rule 81 (atom -> id .) + yacc.py:2687: comma reduce using rule 81 (atom -> id .) + yacc.py:2687: in reduce using rule 81 (atom -> id .) + yacc.py:2687: else reduce using rule 81 (atom -> id .) + yacc.py:2687: pool reduce using rule 81 (atom -> id .) + yacc.py:2687: error reduce using rule 81 (atom -> id .) + yacc.py:2687: ccur reduce using rule 81 (atom -> id .) + yacc.py:2687: fi reduce using rule 81 (atom -> id .) + yacc.py:2687: opar shift and go to state 118 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 78 + yacc.py:2563: + yacc.py:2565: (60) arith -> not . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: id shift and go to state 120 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: comp shift and go to state 119 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 79 + yacc.py:2563: + yacc.py:2565: (61) arith -> comp . + yacc.py:2565: (62) comp -> comp . less op + yacc.py:2565: (63) comp -> comp . lesseq op + yacc.py:2565: (64) comp -> comp . equal op + yacc.py:2566: + yacc.py:2687: semi reduce using rule 61 (arith -> comp .) + yacc.py:2687: of reduce using rule 61 (arith -> comp .) + yacc.py:2687: then reduce using rule 61 (arith -> comp .) + yacc.py:2687: loop reduce using rule 61 (arith -> comp .) + yacc.py:2687: cpar reduce using rule 61 (arith -> comp .) + yacc.py:2687: comma reduce using rule 61 (arith -> comp .) + yacc.py:2687: in reduce using rule 61 (arith -> comp .) + yacc.py:2687: else reduce using rule 61 (arith -> comp .) + yacc.py:2687: pool reduce using rule 61 (arith -> comp .) + yacc.py:2687: error reduce using rule 61 (arith -> comp .) + yacc.py:2687: ccur reduce using rule 61 (arith -> comp .) + yacc.py:2687: fi reduce using rule 61 (arith -> comp .) + yacc.py:2687: less shift and go to state 121 + yacc.py:2687: lesseq shift and go to state 122 + yacc.py:2687: equal shift and go to state 123 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 80 + yacc.py:2563: + yacc.py:2565: (65) comp -> op . + yacc.py:2565: (66) op -> op . plus term + yacc.py:2565: (67) op -> op . minus term + yacc.py:2566: + yacc.py:2687: less reduce using rule 65 (comp -> op .) + yacc.py:2687: lesseq reduce using rule 65 (comp -> op .) + yacc.py:2687: equal reduce using rule 65 (comp -> op .) + yacc.py:2687: semi reduce using rule 65 (comp -> op .) + yacc.py:2687: of reduce using rule 65 (comp -> op .) + yacc.py:2687: then reduce using rule 65 (comp -> op .) + yacc.py:2687: loop reduce using rule 65 (comp -> op .) + yacc.py:2687: cpar reduce using rule 65 (comp -> op .) + yacc.py:2687: comma reduce using rule 65 (comp -> op .) + yacc.py:2687: in reduce using rule 65 (comp -> op .) + yacc.py:2687: else reduce using rule 65 (comp -> op .) + yacc.py:2687: pool reduce using rule 65 (comp -> op .) + yacc.py:2687: error reduce using rule 65 (comp -> op .) + yacc.py:2687: ccur reduce using rule 65 (comp -> op .) + yacc.py:2687: fi reduce using rule 65 (comp -> op .) + yacc.py:2687: plus shift and go to state 124 + yacc.py:2687: minus shift and go to state 125 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 81 + yacc.py:2563: + yacc.py:2565: (68) op -> term . + yacc.py:2565: (69) term -> term . star base_call + yacc.py:2565: (70) term -> term . div base_call + yacc.py:2566: + yacc.py:2687: plus reduce using rule 68 (op -> term .) + yacc.py:2687: minus reduce using rule 68 (op -> term .) + yacc.py:2687: less reduce using rule 68 (op -> term .) + yacc.py:2687: lesseq reduce using rule 68 (op -> term .) + yacc.py:2687: equal reduce using rule 68 (op -> term .) + yacc.py:2687: semi reduce using rule 68 (op -> term .) + yacc.py:2687: of reduce using rule 68 (op -> term .) + yacc.py:2687: then reduce using rule 68 (op -> term .) + yacc.py:2687: loop reduce using rule 68 (op -> term .) + yacc.py:2687: cpar reduce using rule 68 (op -> term .) + yacc.py:2687: comma reduce using rule 68 (op -> term .) + yacc.py:2687: in reduce using rule 68 (op -> term .) + yacc.py:2687: else reduce using rule 68 (op -> term .) + yacc.py:2687: pool reduce using rule 68 (op -> term .) + yacc.py:2687: error reduce using rule 68 (op -> term .) + yacc.py:2687: ccur reduce using rule 68 (op -> term .) + yacc.py:2687: fi reduce using rule 68 (op -> term .) + yacc.py:2687: star shift and go to state 126 + yacc.py:2687: div shift and go to state 127 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 82 + yacc.py:2563: + yacc.py:2565: (73) term -> base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 73 (term -> base_call .) + yacc.py:2687: div reduce using rule 73 (term -> base_call .) + yacc.py:2687: plus reduce using rule 73 (term -> base_call .) + yacc.py:2687: minus reduce using rule 73 (term -> base_call .) + yacc.py:2687: less reduce using rule 73 (term -> base_call .) + yacc.py:2687: lesseq reduce using rule 73 (term -> base_call .) + yacc.py:2687: equal reduce using rule 73 (term -> base_call .) + yacc.py:2687: semi reduce using rule 73 (term -> base_call .) + yacc.py:2687: of reduce using rule 73 (term -> base_call .) + yacc.py:2687: then reduce using rule 73 (term -> base_call .) + yacc.py:2687: loop reduce using rule 73 (term -> base_call .) + yacc.py:2687: cpar reduce using rule 73 (term -> base_call .) + yacc.py:2687: comma reduce using rule 73 (term -> base_call .) + yacc.py:2687: in reduce using rule 73 (term -> base_call .) + yacc.py:2687: else reduce using rule 73 (term -> base_call .) + yacc.py:2687: pool reduce using rule 73 (term -> base_call .) + yacc.py:2687: error reduce using rule 73 (term -> base_call .) + yacc.py:2687: ccur reduce using rule 73 (term -> base_call .) + yacc.py:2687: fi reduce using rule 73 (term -> base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 83 + yacc.py:2563: + yacc.py:2565: (71) term -> isvoid . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: id shift and go to state 120 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 128 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 84 + yacc.py:2563: + yacc.py:2565: (72) term -> nox . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: id shift and go to state 120 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 129 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 85 + yacc.py:2563: + yacc.py:2565: (74) base_call -> factor . arroba type dot func_call + yacc.py:2565: (75) base_call -> factor . + yacc.py:2565: (78) factor -> factor . dot func_call + yacc.py:2566: + yacc.py:2687: arroba shift and go to state 130 + yacc.py:2687: star reduce using rule 75 (base_call -> factor .) + yacc.py:2687: div reduce using rule 75 (base_call -> factor .) + yacc.py:2687: plus reduce using rule 75 (base_call -> factor .) + yacc.py:2687: minus reduce using rule 75 (base_call -> factor .) + yacc.py:2687: less reduce using rule 75 (base_call -> factor .) + yacc.py:2687: lesseq reduce using rule 75 (base_call -> factor .) + yacc.py:2687: equal reduce using rule 75 (base_call -> factor .) + yacc.py:2687: semi reduce using rule 75 (base_call -> factor .) + yacc.py:2687: of reduce using rule 75 (base_call -> factor .) + yacc.py:2687: then reduce using rule 75 (base_call -> factor .) + yacc.py:2687: loop reduce using rule 75 (base_call -> factor .) + yacc.py:2687: cpar reduce using rule 75 (base_call -> factor .) + yacc.py:2687: comma reduce using rule 75 (base_call -> factor .) + yacc.py:2687: in reduce using rule 75 (base_call -> factor .) + yacc.py:2687: else reduce using rule 75 (base_call -> factor .) + yacc.py:2687: pool reduce using rule 75 (base_call -> factor .) + yacc.py:2687: error reduce using rule 75 (base_call -> factor .) + yacc.py:2687: ccur reduce using rule 75 (base_call -> factor .) + yacc.py:2687: fi reduce using rule 75 (base_call -> factor .) + yacc.py:2687: dot shift and go to state 131 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 86 + yacc.py:2563: + yacc.py:2565: (79) factor -> func_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 79 (factor -> func_call .) + yacc.py:2687: dot reduce using rule 79 (factor -> func_call .) + yacc.py:2687: star reduce using rule 79 (factor -> func_call .) + yacc.py:2687: div reduce using rule 79 (factor -> func_call .) + yacc.py:2687: plus reduce using rule 79 (factor -> func_call .) + yacc.py:2687: minus reduce using rule 79 (factor -> func_call .) + yacc.py:2687: less reduce using rule 79 (factor -> func_call .) + yacc.py:2687: lesseq reduce using rule 79 (factor -> func_call .) + yacc.py:2687: equal reduce using rule 79 (factor -> func_call .) + yacc.py:2687: semi reduce using rule 79 (factor -> func_call .) + yacc.py:2687: of reduce using rule 79 (factor -> func_call .) + yacc.py:2687: then reduce using rule 79 (factor -> func_call .) + yacc.py:2687: loop reduce using rule 79 (factor -> func_call .) + yacc.py:2687: cpar reduce using rule 79 (factor -> func_call .) + yacc.py:2687: comma reduce using rule 79 (factor -> func_call .) + yacc.py:2687: in reduce using rule 79 (factor -> func_call .) + yacc.py:2687: else reduce using rule 79 (factor -> func_call .) + yacc.py:2687: pool reduce using rule 79 (factor -> func_call .) + yacc.py:2687: error reduce using rule 79 (factor -> func_call .) + yacc.py:2687: ccur reduce using rule 79 (factor -> func_call .) + yacc.py:2687: fi reduce using rule 79 (factor -> func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 87 + yacc.py:2563: + yacc.py:2565: (76) factor -> atom . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 76 (factor -> atom .) + yacc.py:2687: dot reduce using rule 76 (factor -> atom .) + yacc.py:2687: star reduce using rule 76 (factor -> atom .) + yacc.py:2687: div reduce using rule 76 (factor -> atom .) + yacc.py:2687: plus reduce using rule 76 (factor -> atom .) + yacc.py:2687: minus reduce using rule 76 (factor -> atom .) + yacc.py:2687: less reduce using rule 76 (factor -> atom .) + yacc.py:2687: lesseq reduce using rule 76 (factor -> atom .) + yacc.py:2687: equal reduce using rule 76 (factor -> atom .) + yacc.py:2687: semi reduce using rule 76 (factor -> atom .) + yacc.py:2687: of reduce using rule 76 (factor -> atom .) + yacc.py:2687: then reduce using rule 76 (factor -> atom .) + yacc.py:2687: loop reduce using rule 76 (factor -> atom .) + yacc.py:2687: cpar reduce using rule 76 (factor -> atom .) + yacc.py:2687: comma reduce using rule 76 (factor -> atom .) + yacc.py:2687: in reduce using rule 76 (factor -> atom .) + yacc.py:2687: else reduce using rule 76 (factor -> atom .) + yacc.py:2687: pool reduce using rule 76 (factor -> atom .) + yacc.py:2687: error reduce using rule 76 (factor -> atom .) + yacc.py:2687: ccur reduce using rule 76 (factor -> atom .) + yacc.py:2687: fi reduce using rule 76 (factor -> atom .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 88 + yacc.py:2563: + yacc.py:2565: (77) factor -> opar . expr cpar + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 132 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 89 + yacc.py:2563: + yacc.py:2565: (80) atom -> num . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 80 (atom -> num .) + yacc.py:2687: dot reduce using rule 80 (atom -> num .) + yacc.py:2687: star reduce using rule 80 (atom -> num .) + yacc.py:2687: div reduce using rule 80 (atom -> num .) + yacc.py:2687: plus reduce using rule 80 (atom -> num .) + yacc.py:2687: minus reduce using rule 80 (atom -> num .) + yacc.py:2687: less reduce using rule 80 (atom -> num .) + yacc.py:2687: lesseq reduce using rule 80 (atom -> num .) + yacc.py:2687: equal reduce using rule 80 (atom -> num .) + yacc.py:2687: semi reduce using rule 80 (atom -> num .) + yacc.py:2687: of reduce using rule 80 (atom -> num .) + yacc.py:2687: then reduce using rule 80 (atom -> num .) + yacc.py:2687: loop reduce using rule 80 (atom -> num .) + yacc.py:2687: cpar reduce using rule 80 (atom -> num .) + yacc.py:2687: comma reduce using rule 80 (atom -> num .) + yacc.py:2687: in reduce using rule 80 (atom -> num .) + yacc.py:2687: else reduce using rule 80 (atom -> num .) + yacc.py:2687: pool reduce using rule 80 (atom -> num .) + yacc.py:2687: error reduce using rule 80 (atom -> num .) + yacc.py:2687: ccur reduce using rule 80 (atom -> num .) + yacc.py:2687: fi reduce using rule 80 (atom -> num .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 90 + yacc.py:2563: + yacc.py:2565: (82) atom -> new . type + yacc.py:2565: (83) atom -> new . error + yacc.py:2566: + yacc.py:2687: type shift and go to state 133 + yacc.py:2687: error shift and go to state 134 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 91 + yacc.py:2563: + yacc.py:2565: (84) atom -> ocur . block ccur + yacc.py:2565: (88) block -> . expr semi + yacc.py:2565: (89) block -> . expr semi block + yacc.py:2565: (90) block -> . error block + yacc.py:2565: (91) block -> . error + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 137 + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: block shift and go to state 135 + yacc.py:2714: expr shift and go to state 136 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 92 + yacc.py:2563: + yacc.py:2565: (85) atom -> true . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 85 (atom -> true .) + yacc.py:2687: dot reduce using rule 85 (atom -> true .) + yacc.py:2687: star reduce using rule 85 (atom -> true .) + yacc.py:2687: div reduce using rule 85 (atom -> true .) + yacc.py:2687: plus reduce using rule 85 (atom -> true .) + yacc.py:2687: minus reduce using rule 85 (atom -> true .) + yacc.py:2687: less reduce using rule 85 (atom -> true .) + yacc.py:2687: lesseq reduce using rule 85 (atom -> true .) + yacc.py:2687: equal reduce using rule 85 (atom -> true .) + yacc.py:2687: semi reduce using rule 85 (atom -> true .) + yacc.py:2687: of reduce using rule 85 (atom -> true .) + yacc.py:2687: then reduce using rule 85 (atom -> true .) + yacc.py:2687: loop reduce using rule 85 (atom -> true .) + yacc.py:2687: cpar reduce using rule 85 (atom -> true .) + yacc.py:2687: comma reduce using rule 85 (atom -> true .) + yacc.py:2687: in reduce using rule 85 (atom -> true .) + yacc.py:2687: else reduce using rule 85 (atom -> true .) + yacc.py:2687: pool reduce using rule 85 (atom -> true .) + yacc.py:2687: error reduce using rule 85 (atom -> true .) + yacc.py:2687: ccur reduce using rule 85 (atom -> true .) + yacc.py:2687: fi reduce using rule 85 (atom -> true .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 93 + yacc.py:2563: + yacc.py:2565: (86) atom -> false . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 86 (atom -> false .) + yacc.py:2687: dot reduce using rule 86 (atom -> false .) + yacc.py:2687: star reduce using rule 86 (atom -> false .) + yacc.py:2687: div reduce using rule 86 (atom -> false .) + yacc.py:2687: plus reduce using rule 86 (atom -> false .) + yacc.py:2687: minus reduce using rule 86 (atom -> false .) + yacc.py:2687: less reduce using rule 86 (atom -> false .) + yacc.py:2687: lesseq reduce using rule 86 (atom -> false .) + yacc.py:2687: equal reduce using rule 86 (atom -> false .) + yacc.py:2687: semi reduce using rule 86 (atom -> false .) + yacc.py:2687: of reduce using rule 86 (atom -> false .) + yacc.py:2687: then reduce using rule 86 (atom -> false .) + yacc.py:2687: loop reduce using rule 86 (atom -> false .) + yacc.py:2687: cpar reduce using rule 86 (atom -> false .) + yacc.py:2687: comma reduce using rule 86 (atom -> false .) + yacc.py:2687: in reduce using rule 86 (atom -> false .) + yacc.py:2687: else reduce using rule 86 (atom -> false .) + yacc.py:2687: pool reduce using rule 86 (atom -> false .) + yacc.py:2687: error reduce using rule 86 (atom -> false .) + yacc.py:2687: ccur reduce using rule 86 (atom -> false .) + yacc.py:2687: fi reduce using rule 86 (atom -> false .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 94 + yacc.py:2563: + yacc.py:2565: (87) atom -> string . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 87 (atom -> string .) + yacc.py:2687: dot reduce using rule 87 (atom -> string .) + yacc.py:2687: star reduce using rule 87 (atom -> string .) + yacc.py:2687: div reduce using rule 87 (atom -> string .) + yacc.py:2687: plus reduce using rule 87 (atom -> string .) + yacc.py:2687: minus reduce using rule 87 (atom -> string .) + yacc.py:2687: less reduce using rule 87 (atom -> string .) + yacc.py:2687: lesseq reduce using rule 87 (atom -> string .) + yacc.py:2687: equal reduce using rule 87 (atom -> string .) + yacc.py:2687: semi reduce using rule 87 (atom -> string .) + yacc.py:2687: of reduce using rule 87 (atom -> string .) + yacc.py:2687: then reduce using rule 87 (atom -> string .) + yacc.py:2687: loop reduce using rule 87 (atom -> string .) + yacc.py:2687: cpar reduce using rule 87 (atom -> string .) + yacc.py:2687: comma reduce using rule 87 (atom -> string .) + yacc.py:2687: in reduce using rule 87 (atom -> string .) + yacc.py:2687: else reduce using rule 87 (atom -> string .) + yacc.py:2687: pool reduce using rule 87 (atom -> string .) + yacc.py:2687: error reduce using rule 87 (atom -> string .) + yacc.py:2687: ccur reduce using rule 87 (atom -> string .) + yacc.py:2687: fi reduce using rule 87 (atom -> string .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 95 + yacc.py:2563: + yacc.py:2565: (24) def_func -> error opar formals cpar colon . type ocur expr ccur + yacc.py:2566: + yacc.py:2687: type shift and go to state 138 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 96 + yacc.py:2563: + yacc.py:2565: (31) param_list -> param comma param_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 31 (param_list -> param comma param_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 97 + yacc.py:2563: + yacc.py:2565: (34) param -> id colon type . + yacc.py:2566: + yacc.py:2687: comma reduce using rule 34 (param -> id colon type .) + yacc.py:2687: cpar reduce using rule 34 (param -> id colon type .) + yacc.py:2687: larrow reduce using rule 34 (param -> id colon type .) + yacc.py:2687: in reduce using rule 34 (param -> id colon type .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 98 + yacc.py:2563: + yacc.py:2565: (17) def_attr -> id colon type larrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 17 (def_attr -> id colon type larrow expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 99 + yacc.py:2563: + yacc.py:2565: (22) def_attr -> id colon type larrow error . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 22 (def_attr -> id colon type larrow error .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 100 + yacc.py:2563: + yacc.py:2565: (21) def_attr -> id colon error larrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 21 (def_attr -> id colon error larrow expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 101 + yacc.py:2563: + yacc.py:2565: (23) def_func -> id opar formals cpar colon . type ocur expr ccur + yacc.py:2565: (26) def_func -> id opar formals cpar colon . error ocur expr ccur + yacc.py:2565: (27) def_func -> id opar formals cpar colon . type ocur error ccur + yacc.py:2566: + yacc.py:2687: type shift and go to state 139 + yacc.py:2687: error shift and go to state 140 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 102 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar error cpar colon . type ocur expr ccur + yacc.py:2566: + yacc.py:2687: type shift and go to state 141 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 103 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 104 + yacc.py:2563: + yacc.py:2565: (11) def_class -> class type inherits error ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 11 (def_class -> class type inherits error ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 11 (def_class -> class type inherits error ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 11 (def_class -> class type inherits error ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 105 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits error ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 10 (def_class -> class error inherits error ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 10 (def_class -> class error inherits error ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 10 (def_class -> class error inherits error ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 106 + yacc.py:2563: + yacc.py:2565: (9) def_class -> class error inherits type ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 9 (def_class -> class error inherits type ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 9 (def_class -> class error inherits type ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 9 (def_class -> class error inherits type ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 107 + yacc.py:2563: + yacc.py:2565: (35) expr -> let let_list . in expr + yacc.py:2565: (37) expr -> let let_list . in error + yacc.py:2566: + yacc.py:2687: in shift and go to state 142 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 108 + yacc.py:2563: + yacc.py:2565: (36) expr -> let error . in expr + yacc.py:2565: (52) let_list -> error . let_list + yacc.py:2565: (50) let_list -> . let_assign + yacc.py:2565: (51) let_list -> . let_assign comma let_list + yacc.py:2565: (52) let_list -> . error let_list + yacc.py:2565: (53) let_assign -> . param larrow expr + yacc.py:2565: (54) let_assign -> . param + yacc.py:2565: (34) param -> . id colon type + yacc.py:2566: + yacc.py:2687: in shift and go to state 144 + yacc.py:2687: error shift and go to state 143 + yacc.py:2687: id shift and go to state 48 + yacc.py:2689: + yacc.py:2714: let_list shift and go to state 145 + yacc.py:2714: let_assign shift and go to state 109 + yacc.py:2714: param shift and go to state 110 + yacc.py:2561: + yacc.py:2562:state 109 + yacc.py:2563: + yacc.py:2565: (50) let_list -> let_assign . + yacc.py:2565: (51) let_list -> let_assign . comma let_list + yacc.py:2566: + yacc.py:2687: in reduce using rule 50 (let_list -> let_assign .) + yacc.py:2687: comma shift and go to state 146 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 110 + yacc.py:2563: + yacc.py:2565: (53) let_assign -> param . larrow expr + yacc.py:2565: (54) let_assign -> param . + yacc.py:2566: + yacc.py:2687: larrow shift and go to state 147 + yacc.py:2687: comma reduce using rule 54 (let_assign -> param .) + yacc.py:2687: in reduce using rule 54 (let_assign -> param .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 111 + yacc.py:2563: + yacc.py:2565: (38) expr -> case expr . of cases_list esac + yacc.py:2565: (40) expr -> case expr . of error esac + yacc.py:2566: + yacc.py:2687: of shift and go to state 148 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 112 + yacc.py:2563: + yacc.py:2565: (39) expr -> case error . of cases_list esac + yacc.py:2566: + yacc.py:2687: of shift and go to state 149 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 113 + yacc.py:2563: + yacc.py:2565: (41) expr -> if expr . then expr else expr fi + yacc.py:2565: (43) expr -> if expr . then error else expr fi + yacc.py:2565: (44) expr -> if expr . then expr else error fi + yacc.py:2566: + yacc.py:2687: then shift and go to state 150 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 114 + yacc.py:2563: + yacc.py:2565: (42) expr -> if error . then expr else expr fi + yacc.py:2566: + yacc.py:2687: then shift and go to state 151 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 115 + yacc.py:2563: + yacc.py:2565: (45) expr -> while expr . loop expr pool + yacc.py:2565: (47) expr -> while expr . loop error pool + yacc.py:2565: (48) expr -> while expr . loop expr error + yacc.py:2566: + yacc.py:2687: loop shift and go to state 152 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 116 + yacc.py:2563: + yacc.py:2565: (46) expr -> while error . loop expr pool + yacc.py:2566: + yacc.py:2687: loop shift and go to state 153 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 117 + yacc.py:2563: + yacc.py:2565: (59) arith -> id larrow . expr + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 154 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 118 + yacc.py:2563: + yacc.py:2565: (92) func_call -> id opar . args cpar + yacc.py:2565: (93) args -> . arg_list + yacc.py:2565: (94) args -> . arg_list_empty + yacc.py:2565: (95) arg_list -> . expr + yacc.py:2565: (96) arg_list -> . expr comma arg_list + yacc.py:2565: (97) arg_list -> . error arg_list + yacc.py:2565: (98) arg_list_empty -> . epsilon + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 159 + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: args shift and go to state 155 + yacc.py:2714: arg_list shift and go to state 156 + yacc.py:2714: arg_list_empty shift and go to state 157 + yacc.py:2714: expr shift and go to state 158 + yacc.py:2714: epsilon shift and go to state 160 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 119 + yacc.py:2563: + yacc.py:2565: (60) arith -> not comp . + yacc.py:2565: (62) comp -> comp . less op + yacc.py:2565: (63) comp -> comp . lesseq op + yacc.py:2565: (64) comp -> comp . equal op + yacc.py:2566: + yacc.py:2687: semi reduce using rule 60 (arith -> not comp .) + yacc.py:2687: of reduce using rule 60 (arith -> not comp .) + yacc.py:2687: then reduce using rule 60 (arith -> not comp .) + yacc.py:2687: loop reduce using rule 60 (arith -> not comp .) + yacc.py:2687: cpar reduce using rule 60 (arith -> not comp .) + yacc.py:2687: comma reduce using rule 60 (arith -> not comp .) + yacc.py:2687: in reduce using rule 60 (arith -> not comp .) + yacc.py:2687: else reduce using rule 60 (arith -> not comp .) + yacc.py:2687: pool reduce using rule 60 (arith -> not comp .) + yacc.py:2687: error reduce using rule 60 (arith -> not comp .) + yacc.py:2687: ccur reduce using rule 60 (arith -> not comp .) + yacc.py:2687: fi reduce using rule 60 (arith -> not comp .) + yacc.py:2687: less shift and go to state 121 + yacc.py:2687: lesseq shift and go to state 122 + yacc.py:2687: equal shift and go to state 123 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 120 + yacc.py:2563: + yacc.py:2565: (81) atom -> id . + yacc.py:2565: (92) func_call -> id . opar args cpar + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 81 (atom -> id .) + yacc.py:2687: dot reduce using rule 81 (atom -> id .) + yacc.py:2687: star reduce using rule 81 (atom -> id .) + yacc.py:2687: div reduce using rule 81 (atom -> id .) + yacc.py:2687: plus reduce using rule 81 (atom -> id .) + yacc.py:2687: minus reduce using rule 81 (atom -> id .) + yacc.py:2687: less reduce using rule 81 (atom -> id .) + yacc.py:2687: lesseq reduce using rule 81 (atom -> id .) + yacc.py:2687: equal reduce using rule 81 (atom -> id .) + yacc.py:2687: semi reduce using rule 81 (atom -> id .) + yacc.py:2687: of reduce using rule 81 (atom -> id .) + yacc.py:2687: then reduce using rule 81 (atom -> id .) + yacc.py:2687: loop reduce using rule 81 (atom -> id .) + yacc.py:2687: cpar reduce using rule 81 (atom -> id .) + yacc.py:2687: comma reduce using rule 81 (atom -> id .) + yacc.py:2687: in reduce using rule 81 (atom -> id .) + yacc.py:2687: else reduce using rule 81 (atom -> id .) + yacc.py:2687: pool reduce using rule 81 (atom -> id .) + yacc.py:2687: error reduce using rule 81 (atom -> id .) + yacc.py:2687: ccur reduce using rule 81 (atom -> id .) + yacc.py:2687: fi reduce using rule 81 (atom -> id .) + yacc.py:2687: opar shift and go to state 118 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 121 + yacc.py:2563: + yacc.py:2565: (62) comp -> comp less . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: id shift and go to state 120 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: op shift and go to state 161 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 122 + yacc.py:2563: + yacc.py:2565: (63) comp -> comp lesseq . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: id shift and go to state 120 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: op shift and go to state 162 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 123 + yacc.py:2563: + yacc.py:2565: (64) comp -> comp equal . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: id shift and go to state 120 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: op shift and go to state 163 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 124 + yacc.py:2563: + yacc.py:2565: (66) op -> op plus . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: id shift and go to state 120 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: term shift and go to state 164 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 125 + yacc.py:2563: + yacc.py:2565: (67) op -> op minus . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: id shift and go to state 120 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: term shift and go to state 165 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 126 + yacc.py:2563: + yacc.py:2565: (69) term -> term star . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: id shift and go to state 120 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 166 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 127 + yacc.py:2563: + yacc.py:2565: (70) term -> term div . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: id shift and go to state 120 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 167 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 128 + yacc.py:2563: + yacc.py:2565: (71) term -> isvoid base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 71 (term -> isvoid base_call .) + yacc.py:2687: div reduce using rule 71 (term -> isvoid base_call .) + yacc.py:2687: plus reduce using rule 71 (term -> isvoid base_call .) + yacc.py:2687: minus reduce using rule 71 (term -> isvoid base_call .) + yacc.py:2687: less reduce using rule 71 (term -> isvoid base_call .) + yacc.py:2687: lesseq reduce using rule 71 (term -> isvoid base_call .) + yacc.py:2687: equal reduce using rule 71 (term -> isvoid base_call .) + yacc.py:2687: semi reduce using rule 71 (term -> isvoid base_call .) + yacc.py:2687: of reduce using rule 71 (term -> isvoid base_call .) + yacc.py:2687: then reduce using rule 71 (term -> isvoid base_call .) + yacc.py:2687: loop reduce using rule 71 (term -> isvoid base_call .) + yacc.py:2687: cpar reduce using rule 71 (term -> isvoid base_call .) + yacc.py:2687: comma reduce using rule 71 (term -> isvoid base_call .) + yacc.py:2687: in reduce using rule 71 (term -> isvoid base_call .) + yacc.py:2687: else reduce using rule 71 (term -> isvoid base_call .) + yacc.py:2687: pool reduce using rule 71 (term -> isvoid base_call .) + yacc.py:2687: error reduce using rule 71 (term -> isvoid base_call .) + yacc.py:2687: ccur reduce using rule 71 (term -> isvoid base_call .) + yacc.py:2687: fi reduce using rule 71 (term -> isvoid base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 129 + yacc.py:2563: + yacc.py:2565: (72) term -> nox base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 72 (term -> nox base_call .) + yacc.py:2687: div reduce using rule 72 (term -> nox base_call .) + yacc.py:2687: plus reduce using rule 72 (term -> nox base_call .) + yacc.py:2687: minus reduce using rule 72 (term -> nox base_call .) + yacc.py:2687: less reduce using rule 72 (term -> nox base_call .) + yacc.py:2687: lesseq reduce using rule 72 (term -> nox base_call .) + yacc.py:2687: equal reduce using rule 72 (term -> nox base_call .) + yacc.py:2687: semi reduce using rule 72 (term -> nox base_call .) + yacc.py:2687: of reduce using rule 72 (term -> nox base_call .) + yacc.py:2687: then reduce using rule 72 (term -> nox base_call .) + yacc.py:2687: loop reduce using rule 72 (term -> nox base_call .) + yacc.py:2687: cpar reduce using rule 72 (term -> nox base_call .) + yacc.py:2687: comma reduce using rule 72 (term -> nox base_call .) + yacc.py:2687: in reduce using rule 72 (term -> nox base_call .) + yacc.py:2687: else reduce using rule 72 (term -> nox base_call .) + yacc.py:2687: pool reduce using rule 72 (term -> nox base_call .) + yacc.py:2687: error reduce using rule 72 (term -> nox base_call .) + yacc.py:2687: ccur reduce using rule 72 (term -> nox base_call .) + yacc.py:2687: fi reduce using rule 72 (term -> nox base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 130 + yacc.py:2563: + yacc.py:2565: (74) base_call -> factor arroba . type dot func_call + yacc.py:2566: + yacc.py:2687: type shift and go to state 168 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 131 + yacc.py:2563: + yacc.py:2565: (78) factor -> factor dot . func_call + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 170 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 169 + yacc.py:2561: + yacc.py:2562:state 132 + yacc.py:2563: + yacc.py:2565: (77) factor -> opar expr . cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 171 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 133 + yacc.py:2563: + yacc.py:2565: (82) atom -> new type . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 82 (atom -> new type .) + yacc.py:2687: dot reduce using rule 82 (atom -> new type .) + yacc.py:2687: star reduce using rule 82 (atom -> new type .) + yacc.py:2687: div reduce using rule 82 (atom -> new type .) + yacc.py:2687: plus reduce using rule 82 (atom -> new type .) + yacc.py:2687: minus reduce using rule 82 (atom -> new type .) + yacc.py:2687: less reduce using rule 82 (atom -> new type .) + yacc.py:2687: lesseq reduce using rule 82 (atom -> new type .) + yacc.py:2687: equal reduce using rule 82 (atom -> new type .) + yacc.py:2687: semi reduce using rule 82 (atom -> new type .) + yacc.py:2687: of reduce using rule 82 (atom -> new type .) + yacc.py:2687: then reduce using rule 82 (atom -> new type .) + yacc.py:2687: loop reduce using rule 82 (atom -> new type .) + yacc.py:2687: cpar reduce using rule 82 (atom -> new type .) + yacc.py:2687: comma reduce using rule 82 (atom -> new type .) + yacc.py:2687: in reduce using rule 82 (atom -> new type .) + yacc.py:2687: else reduce using rule 82 (atom -> new type .) + yacc.py:2687: pool reduce using rule 82 (atom -> new type .) + yacc.py:2687: error reduce using rule 82 (atom -> new type .) + yacc.py:2687: ccur reduce using rule 82 (atom -> new type .) + yacc.py:2687: fi reduce using rule 82 (atom -> new type .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 134 + yacc.py:2563: + yacc.py:2565: (83) atom -> new error . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 83 (atom -> new error .) + yacc.py:2687: dot reduce using rule 83 (atom -> new error .) + yacc.py:2687: star reduce using rule 83 (atom -> new error .) + yacc.py:2687: div reduce using rule 83 (atom -> new error .) + yacc.py:2687: plus reduce using rule 83 (atom -> new error .) + yacc.py:2687: minus reduce using rule 83 (atom -> new error .) + yacc.py:2687: less reduce using rule 83 (atom -> new error .) + yacc.py:2687: lesseq reduce using rule 83 (atom -> new error .) + yacc.py:2687: equal reduce using rule 83 (atom -> new error .) + yacc.py:2687: semi reduce using rule 83 (atom -> new error .) + yacc.py:2687: of reduce using rule 83 (atom -> new error .) + yacc.py:2687: then reduce using rule 83 (atom -> new error .) + yacc.py:2687: loop reduce using rule 83 (atom -> new error .) + yacc.py:2687: cpar reduce using rule 83 (atom -> new error .) + yacc.py:2687: comma reduce using rule 83 (atom -> new error .) + yacc.py:2687: in reduce using rule 83 (atom -> new error .) + yacc.py:2687: else reduce using rule 83 (atom -> new error .) + yacc.py:2687: pool reduce using rule 83 (atom -> new error .) + yacc.py:2687: error reduce using rule 83 (atom -> new error .) + yacc.py:2687: ccur reduce using rule 83 (atom -> new error .) + yacc.py:2687: fi reduce using rule 83 (atom -> new error .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 135 + yacc.py:2563: + yacc.py:2565: (84) atom -> ocur block . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 172 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 136 + yacc.py:2563: + yacc.py:2565: (88) block -> expr . semi + yacc.py:2565: (89) block -> expr . semi block + yacc.py:2566: + yacc.py:2687: semi shift and go to state 173 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 137 + yacc.py:2563: + yacc.py:2565: (90) block -> error . block + yacc.py:2565: (91) block -> error . + yacc.py:2565: (88) block -> . expr semi + yacc.py:2565: (89) block -> . expr semi block + yacc.py:2565: (90) block -> . error block + yacc.py:2565: (91) block -> . error + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 91 (block -> error .) + yacc.py:2687: error shift and go to state 137 + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: block shift and go to state 174 + yacc.py:2714: expr shift and go to state 136 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 138 + yacc.py:2563: + yacc.py:2565: (24) def_func -> error opar formals cpar colon type . ocur expr ccur + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 175 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 139 + yacc.py:2563: + yacc.py:2565: (23) def_func -> id opar formals cpar colon type . ocur expr ccur + yacc.py:2565: (27) def_func -> id opar formals cpar colon type . ocur error ccur + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 176 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 140 + yacc.py:2563: + yacc.py:2565: (26) def_func -> id opar formals cpar colon error . ocur expr ccur + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 177 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 141 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar error cpar colon type . ocur expr ccur + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 178 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 142 + yacc.py:2563: + yacc.py:2565: (35) expr -> let let_list in . expr + yacc.py:2565: (37) expr -> let let_list in . error + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 180 + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 179 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 143 + yacc.py:2563: + yacc.py:2565: (52) let_list -> error . let_list + yacc.py:2565: (50) let_list -> . let_assign + yacc.py:2565: (51) let_list -> . let_assign comma let_list + yacc.py:2565: (52) let_list -> . error let_list + yacc.py:2565: (53) let_assign -> . param larrow expr + yacc.py:2565: (54) let_assign -> . param + yacc.py:2565: (34) param -> . id colon type + yacc.py:2566: + yacc.py:2687: error shift and go to state 143 + yacc.py:2687: id shift and go to state 48 + yacc.py:2689: + yacc.py:2714: let_list shift and go to state 145 + yacc.py:2714: let_assign shift and go to state 109 + yacc.py:2714: param shift and go to state 110 + yacc.py:2561: + yacc.py:2562:state 144 + yacc.py:2563: + yacc.py:2565: (36) expr -> let error in . expr + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 181 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 145 + yacc.py:2563: + yacc.py:2565: (52) let_list -> error let_list . + yacc.py:2566: + yacc.py:2687: in reduce using rule 52 (let_list -> error let_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 146 + yacc.py:2563: + yacc.py:2565: (51) let_list -> let_assign comma . let_list + yacc.py:2565: (50) let_list -> . let_assign + yacc.py:2565: (51) let_list -> . let_assign comma let_list + yacc.py:2565: (52) let_list -> . error let_list + yacc.py:2565: (53) let_assign -> . param larrow expr + yacc.py:2565: (54) let_assign -> . param + yacc.py:2565: (34) param -> . id colon type + yacc.py:2566: + yacc.py:2687: error shift and go to state 143 + yacc.py:2687: id shift and go to state 48 + yacc.py:2689: + yacc.py:2714: let_assign shift and go to state 109 + yacc.py:2714: let_list shift and go to state 182 + yacc.py:2714: param shift and go to state 110 + yacc.py:2561: + yacc.py:2562:state 147 + yacc.py:2563: + yacc.py:2565: (53) let_assign -> param larrow . expr + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 183 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 148 + yacc.py:2563: + yacc.py:2565: (38) expr -> case expr of . cases_list esac + yacc.py:2565: (40) expr -> case expr of . error esac + yacc.py:2565: (55) cases_list -> . casep semi + yacc.py:2565: (56) cases_list -> . casep semi cases_list + yacc.py:2565: (57) cases_list -> . error cases_list + yacc.py:2565: (58) casep -> . id colon type rarrow expr + yacc.py:2566: + yacc.py:2687: error shift and go to state 185 + yacc.py:2687: id shift and go to state 187 + yacc.py:2689: + yacc.py:2714: cases_list shift and go to state 184 + yacc.py:2714: casep shift and go to state 186 + yacc.py:2561: + yacc.py:2562:state 149 + yacc.py:2563: + yacc.py:2565: (39) expr -> case error of . cases_list esac + yacc.py:2565: (55) cases_list -> . casep semi + yacc.py:2565: (56) cases_list -> . casep semi cases_list + yacc.py:2565: (57) cases_list -> . error cases_list + yacc.py:2565: (58) casep -> . id colon type rarrow expr + yacc.py:2566: + yacc.py:2687: error shift and go to state 188 + yacc.py:2687: id shift and go to state 187 + yacc.py:2689: + yacc.py:2714: cases_list shift and go to state 189 + yacc.py:2714: casep shift and go to state 186 + yacc.py:2561: + yacc.py:2562:state 150 + yacc.py:2563: + yacc.py:2565: (41) expr -> if expr then . expr else expr fi + yacc.py:2565: (43) expr -> if expr then . error else expr fi + yacc.py:2565: (44) expr -> if expr then . expr else error fi + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 191 + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 190 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 151 + yacc.py:2563: + yacc.py:2565: (42) expr -> if error then . expr else expr fi + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 192 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 152 + yacc.py:2563: + yacc.py:2565: (45) expr -> while expr loop . expr pool + yacc.py:2565: (47) expr -> while expr loop . error pool + yacc.py:2565: (48) expr -> while expr loop . expr error + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 194 + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 193 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 153 + yacc.py:2563: + yacc.py:2565: (46) expr -> while error loop . expr pool + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 195 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 154 + yacc.py:2563: + yacc.py:2565: (59) arith -> id larrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 59 (arith -> id larrow expr .) + yacc.py:2687: of reduce using rule 59 (arith -> id larrow expr .) + yacc.py:2687: then reduce using rule 59 (arith -> id larrow expr .) + yacc.py:2687: loop reduce using rule 59 (arith -> id larrow expr .) + yacc.py:2687: cpar reduce using rule 59 (arith -> id larrow expr .) + yacc.py:2687: comma reduce using rule 59 (arith -> id larrow expr .) + yacc.py:2687: in reduce using rule 59 (arith -> id larrow expr .) + yacc.py:2687: else reduce using rule 59 (arith -> id larrow expr .) + yacc.py:2687: pool reduce using rule 59 (arith -> id larrow expr .) + yacc.py:2687: error reduce using rule 59 (arith -> id larrow expr .) + yacc.py:2687: ccur reduce using rule 59 (arith -> id larrow expr .) + yacc.py:2687: fi reduce using rule 59 (arith -> id larrow expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 155 + yacc.py:2563: + yacc.py:2565: (92) func_call -> id opar args . cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 196 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 156 + yacc.py:2563: + yacc.py:2565: (93) args -> arg_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 93 (args -> arg_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 157 + yacc.py:2563: + yacc.py:2565: (94) args -> arg_list_empty . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 94 (args -> arg_list_empty .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 158 + yacc.py:2563: + yacc.py:2565: (95) arg_list -> expr . + yacc.py:2565: (96) arg_list -> expr . comma arg_list + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 95 (arg_list -> expr .) + yacc.py:2687: comma shift and go to state 197 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 159 + yacc.py:2563: + yacc.py:2565: (97) arg_list -> error . arg_list + yacc.py:2565: (95) arg_list -> . expr + yacc.py:2565: (96) arg_list -> . expr comma arg_list + yacc.py:2565: (97) arg_list -> . error arg_list + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 159 + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: arg_list shift and go to state 198 + yacc.py:2714: expr shift and go to state 158 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 160 + yacc.py:2563: + yacc.py:2565: (98) arg_list_empty -> epsilon . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 98 (arg_list_empty -> epsilon .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 161 + yacc.py:2563: + yacc.py:2565: (62) comp -> comp less op . + yacc.py:2565: (66) op -> op . plus term + yacc.py:2565: (67) op -> op . minus term + yacc.py:2566: + yacc.py:2687: less reduce using rule 62 (comp -> comp less op .) + yacc.py:2687: lesseq reduce using rule 62 (comp -> comp less op .) + yacc.py:2687: equal reduce using rule 62 (comp -> comp less op .) + yacc.py:2687: semi reduce using rule 62 (comp -> comp less op .) + yacc.py:2687: of reduce using rule 62 (comp -> comp less op .) + yacc.py:2687: then reduce using rule 62 (comp -> comp less op .) + yacc.py:2687: loop reduce using rule 62 (comp -> comp less op .) + yacc.py:2687: cpar reduce using rule 62 (comp -> comp less op .) + yacc.py:2687: comma reduce using rule 62 (comp -> comp less op .) + yacc.py:2687: in reduce using rule 62 (comp -> comp less op .) + yacc.py:2687: else reduce using rule 62 (comp -> comp less op .) + yacc.py:2687: pool reduce using rule 62 (comp -> comp less op .) + yacc.py:2687: error reduce using rule 62 (comp -> comp less op .) + yacc.py:2687: ccur reduce using rule 62 (comp -> comp less op .) + yacc.py:2687: fi reduce using rule 62 (comp -> comp less op .) + yacc.py:2687: plus shift and go to state 124 + yacc.py:2687: minus shift and go to state 125 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 162 + yacc.py:2563: + yacc.py:2565: (63) comp -> comp lesseq op . + yacc.py:2565: (66) op -> op . plus term + yacc.py:2565: (67) op -> op . minus term + yacc.py:2566: + yacc.py:2687: less reduce using rule 63 (comp -> comp lesseq op .) + yacc.py:2687: lesseq reduce using rule 63 (comp -> comp lesseq op .) + yacc.py:2687: equal reduce using rule 63 (comp -> comp lesseq op .) + yacc.py:2687: semi reduce using rule 63 (comp -> comp lesseq op .) + yacc.py:2687: of reduce using rule 63 (comp -> comp lesseq op .) + yacc.py:2687: then reduce using rule 63 (comp -> comp lesseq op .) + yacc.py:2687: loop reduce using rule 63 (comp -> comp lesseq op .) + yacc.py:2687: cpar reduce using rule 63 (comp -> comp lesseq op .) + yacc.py:2687: comma reduce using rule 63 (comp -> comp lesseq op .) + yacc.py:2687: in reduce using rule 63 (comp -> comp lesseq op .) + yacc.py:2687: else reduce using rule 63 (comp -> comp lesseq op .) + yacc.py:2687: pool reduce using rule 63 (comp -> comp lesseq op .) + yacc.py:2687: error reduce using rule 63 (comp -> comp lesseq op .) + yacc.py:2687: ccur reduce using rule 63 (comp -> comp lesseq op .) + yacc.py:2687: fi reduce using rule 63 (comp -> comp lesseq op .) + yacc.py:2687: plus shift and go to state 124 + yacc.py:2687: minus shift and go to state 125 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 163 + yacc.py:2563: + yacc.py:2565: (64) comp -> comp equal op . + yacc.py:2565: (66) op -> op . plus term + yacc.py:2565: (67) op -> op . minus term + yacc.py:2566: + yacc.py:2687: less reduce using rule 64 (comp -> comp equal op .) + yacc.py:2687: lesseq reduce using rule 64 (comp -> comp equal op .) + yacc.py:2687: equal reduce using rule 64 (comp -> comp equal op .) + yacc.py:2687: semi reduce using rule 64 (comp -> comp equal op .) + yacc.py:2687: of reduce using rule 64 (comp -> comp equal op .) + yacc.py:2687: then reduce using rule 64 (comp -> comp equal op .) + yacc.py:2687: loop reduce using rule 64 (comp -> comp equal op .) + yacc.py:2687: cpar reduce using rule 64 (comp -> comp equal op .) + yacc.py:2687: comma reduce using rule 64 (comp -> comp equal op .) + yacc.py:2687: in reduce using rule 64 (comp -> comp equal op .) + yacc.py:2687: else reduce using rule 64 (comp -> comp equal op .) + yacc.py:2687: pool reduce using rule 64 (comp -> comp equal op .) + yacc.py:2687: error reduce using rule 64 (comp -> comp equal op .) + yacc.py:2687: ccur reduce using rule 64 (comp -> comp equal op .) + yacc.py:2687: fi reduce using rule 64 (comp -> comp equal op .) + yacc.py:2687: plus shift and go to state 124 + yacc.py:2687: minus shift and go to state 125 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 164 + yacc.py:2563: + yacc.py:2565: (66) op -> op plus term . + yacc.py:2565: (69) term -> term . star base_call + yacc.py:2565: (70) term -> term . div base_call + yacc.py:2566: + yacc.py:2687: plus reduce using rule 66 (op -> op plus term .) + yacc.py:2687: minus reduce using rule 66 (op -> op plus term .) + yacc.py:2687: less reduce using rule 66 (op -> op plus term .) + yacc.py:2687: lesseq reduce using rule 66 (op -> op plus term .) + yacc.py:2687: equal reduce using rule 66 (op -> op plus term .) + yacc.py:2687: semi reduce using rule 66 (op -> op plus term .) + yacc.py:2687: of reduce using rule 66 (op -> op plus term .) + yacc.py:2687: then reduce using rule 66 (op -> op plus term .) + yacc.py:2687: loop reduce using rule 66 (op -> op plus term .) + yacc.py:2687: cpar reduce using rule 66 (op -> op plus term .) + yacc.py:2687: comma reduce using rule 66 (op -> op plus term .) + yacc.py:2687: in reduce using rule 66 (op -> op plus term .) + yacc.py:2687: else reduce using rule 66 (op -> op plus term .) + yacc.py:2687: pool reduce using rule 66 (op -> op plus term .) + yacc.py:2687: error reduce using rule 66 (op -> op plus term .) + yacc.py:2687: ccur reduce using rule 66 (op -> op plus term .) + yacc.py:2687: fi reduce using rule 66 (op -> op plus term .) + yacc.py:2687: star shift and go to state 126 + yacc.py:2687: div shift and go to state 127 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 165 + yacc.py:2563: + yacc.py:2565: (67) op -> op minus term . + yacc.py:2565: (69) term -> term . star base_call + yacc.py:2565: (70) term -> term . div base_call + yacc.py:2566: + yacc.py:2687: plus reduce using rule 67 (op -> op minus term .) + yacc.py:2687: minus reduce using rule 67 (op -> op minus term .) + yacc.py:2687: less reduce using rule 67 (op -> op minus term .) + yacc.py:2687: lesseq reduce using rule 67 (op -> op minus term .) + yacc.py:2687: equal reduce using rule 67 (op -> op minus term .) + yacc.py:2687: semi reduce using rule 67 (op -> op minus term .) + yacc.py:2687: of reduce using rule 67 (op -> op minus term .) + yacc.py:2687: then reduce using rule 67 (op -> op minus term .) + yacc.py:2687: loop reduce using rule 67 (op -> op minus term .) + yacc.py:2687: cpar reduce using rule 67 (op -> op minus term .) + yacc.py:2687: comma reduce using rule 67 (op -> op minus term .) + yacc.py:2687: in reduce using rule 67 (op -> op minus term .) + yacc.py:2687: else reduce using rule 67 (op -> op minus term .) + yacc.py:2687: pool reduce using rule 67 (op -> op minus term .) + yacc.py:2687: error reduce using rule 67 (op -> op minus term .) + yacc.py:2687: ccur reduce using rule 67 (op -> op minus term .) + yacc.py:2687: fi reduce using rule 67 (op -> op minus term .) + yacc.py:2687: star shift and go to state 126 + yacc.py:2687: div shift and go to state 127 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 166 + yacc.py:2563: + yacc.py:2565: (69) term -> term star base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 69 (term -> term star base_call .) + yacc.py:2687: div reduce using rule 69 (term -> term star base_call .) + yacc.py:2687: plus reduce using rule 69 (term -> term star base_call .) + yacc.py:2687: minus reduce using rule 69 (term -> term star base_call .) + yacc.py:2687: less reduce using rule 69 (term -> term star base_call .) + yacc.py:2687: lesseq reduce using rule 69 (term -> term star base_call .) + yacc.py:2687: equal reduce using rule 69 (term -> term star base_call .) + yacc.py:2687: semi reduce using rule 69 (term -> term star base_call .) + yacc.py:2687: of reduce using rule 69 (term -> term star base_call .) + yacc.py:2687: then reduce using rule 69 (term -> term star base_call .) + yacc.py:2687: loop reduce using rule 69 (term -> term star base_call .) + yacc.py:2687: cpar reduce using rule 69 (term -> term star base_call .) + yacc.py:2687: comma reduce using rule 69 (term -> term star base_call .) + yacc.py:2687: in reduce using rule 69 (term -> term star base_call .) + yacc.py:2687: else reduce using rule 69 (term -> term star base_call .) + yacc.py:2687: pool reduce using rule 69 (term -> term star base_call .) + yacc.py:2687: error reduce using rule 69 (term -> term star base_call .) + yacc.py:2687: ccur reduce using rule 69 (term -> term star base_call .) + yacc.py:2687: fi reduce using rule 69 (term -> term star base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 167 + yacc.py:2563: + yacc.py:2565: (70) term -> term div base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 70 (term -> term div base_call .) + yacc.py:2687: div reduce using rule 70 (term -> term div base_call .) + yacc.py:2687: plus reduce using rule 70 (term -> term div base_call .) + yacc.py:2687: minus reduce using rule 70 (term -> term div base_call .) + yacc.py:2687: less reduce using rule 70 (term -> term div base_call .) + yacc.py:2687: lesseq reduce using rule 70 (term -> term div base_call .) + yacc.py:2687: equal reduce using rule 70 (term -> term div base_call .) + yacc.py:2687: semi reduce using rule 70 (term -> term div base_call .) + yacc.py:2687: of reduce using rule 70 (term -> term div base_call .) + yacc.py:2687: then reduce using rule 70 (term -> term div base_call .) + yacc.py:2687: loop reduce using rule 70 (term -> term div base_call .) + yacc.py:2687: cpar reduce using rule 70 (term -> term div base_call .) + yacc.py:2687: comma reduce using rule 70 (term -> term div base_call .) + yacc.py:2687: in reduce using rule 70 (term -> term div base_call .) + yacc.py:2687: else reduce using rule 70 (term -> term div base_call .) + yacc.py:2687: pool reduce using rule 70 (term -> term div base_call .) + yacc.py:2687: error reduce using rule 70 (term -> term div base_call .) + yacc.py:2687: ccur reduce using rule 70 (term -> term div base_call .) + yacc.py:2687: fi reduce using rule 70 (term -> term div base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 168 + yacc.py:2563: + yacc.py:2565: (74) base_call -> factor arroba type . dot func_call + yacc.py:2566: + yacc.py:2687: dot shift and go to state 199 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 169 + yacc.py:2563: + yacc.py:2565: (78) factor -> factor dot func_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 78 (factor -> factor dot func_call .) + yacc.py:2687: dot reduce using rule 78 (factor -> factor dot func_call .) + yacc.py:2687: star reduce using rule 78 (factor -> factor dot func_call .) + yacc.py:2687: div reduce using rule 78 (factor -> factor dot func_call .) + yacc.py:2687: plus reduce using rule 78 (factor -> factor dot func_call .) + yacc.py:2687: minus reduce using rule 78 (factor -> factor dot func_call .) + yacc.py:2687: less reduce using rule 78 (factor -> factor dot func_call .) + yacc.py:2687: lesseq reduce using rule 78 (factor -> factor dot func_call .) + yacc.py:2687: equal reduce using rule 78 (factor -> factor dot func_call .) + yacc.py:2687: semi reduce using rule 78 (factor -> factor dot func_call .) + yacc.py:2687: of reduce using rule 78 (factor -> factor dot func_call .) + yacc.py:2687: then reduce using rule 78 (factor -> factor dot func_call .) + yacc.py:2687: loop reduce using rule 78 (factor -> factor dot func_call .) + yacc.py:2687: cpar reduce using rule 78 (factor -> factor dot func_call .) + yacc.py:2687: comma reduce using rule 78 (factor -> factor dot func_call .) + yacc.py:2687: in reduce using rule 78 (factor -> factor dot func_call .) + yacc.py:2687: else reduce using rule 78 (factor -> factor dot func_call .) + yacc.py:2687: pool reduce using rule 78 (factor -> factor dot func_call .) + yacc.py:2687: error reduce using rule 78 (factor -> factor dot func_call .) + yacc.py:2687: ccur reduce using rule 78 (factor -> factor dot func_call .) + yacc.py:2687: fi reduce using rule 78 (factor -> factor dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 170 + yacc.py:2563: + yacc.py:2565: (92) func_call -> id . opar args cpar + yacc.py:2566: + yacc.py:2687: opar shift and go to state 118 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 171 + yacc.py:2563: + yacc.py:2565: (77) factor -> opar expr cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: dot reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: star reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: div reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: plus reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: minus reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: less reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: lesseq reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: equal reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: semi reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: of reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: then reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: loop reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: cpar reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: comma reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: in reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: else reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: pool reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: error reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: ccur reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: fi reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 172 + yacc.py:2563: + yacc.py:2565: (84) atom -> ocur block ccur . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 84 (atom -> ocur block ccur .) + yacc.py:2687: dot reduce using rule 84 (atom -> ocur block ccur .) + yacc.py:2687: star reduce using rule 84 (atom -> ocur block ccur .) + yacc.py:2687: div reduce using rule 84 (atom -> ocur block ccur .) + yacc.py:2687: plus reduce using rule 84 (atom -> ocur block ccur .) + yacc.py:2687: minus reduce using rule 84 (atom -> ocur block ccur .) + yacc.py:2687: less reduce using rule 84 (atom -> ocur block ccur .) + yacc.py:2687: lesseq reduce using rule 84 (atom -> ocur block ccur .) + yacc.py:2687: equal reduce using rule 84 (atom -> ocur block ccur .) + yacc.py:2687: semi reduce using rule 84 (atom -> ocur block ccur .) + yacc.py:2687: of reduce using rule 84 (atom -> ocur block ccur .) + yacc.py:2687: then reduce using rule 84 (atom -> ocur block ccur .) + yacc.py:2687: loop reduce using rule 84 (atom -> ocur block ccur .) + yacc.py:2687: cpar reduce using rule 84 (atom -> ocur block ccur .) + yacc.py:2687: comma reduce using rule 84 (atom -> ocur block ccur .) + yacc.py:2687: in reduce using rule 84 (atom -> ocur block ccur .) + yacc.py:2687: else reduce using rule 84 (atom -> ocur block ccur .) + yacc.py:2687: pool reduce using rule 84 (atom -> ocur block ccur .) + yacc.py:2687: error reduce using rule 84 (atom -> ocur block ccur .) + yacc.py:2687: ccur reduce using rule 84 (atom -> ocur block ccur .) + yacc.py:2687: fi reduce using rule 84 (atom -> ocur block ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 173 + yacc.py:2563: + yacc.py:2565: (88) block -> expr semi . + yacc.py:2565: (89) block -> expr semi . block + yacc.py:2565: (88) block -> . expr semi + yacc.py:2565: (89) block -> . expr semi block + yacc.py:2565: (90) block -> . error block + yacc.py:2565: (91) block -> . error + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 88 (block -> expr semi .) + yacc.py:2687: error shift and go to state 137 + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 136 + yacc.py:2714: block shift and go to state 200 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 174 + yacc.py:2563: + yacc.py:2565: (90) block -> error block . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 90 (block -> error block .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 175 + yacc.py:2563: + yacc.py:2565: (24) def_func -> error opar formals cpar colon type ocur . expr ccur + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 201 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 176 + yacc.py:2563: + yacc.py:2565: (23) def_func -> id opar formals cpar colon type ocur . expr ccur + yacc.py:2565: (27) def_func -> id opar formals cpar colon type ocur . error ccur + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 203 + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 202 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 177 + yacc.py:2563: + yacc.py:2565: (26) def_func -> id opar formals cpar colon error ocur . expr ccur + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 204 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 178 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar error cpar colon type ocur . expr ccur + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 205 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 179 + yacc.py:2563: + yacc.py:2565: (35) expr -> let let_list in expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 35 (expr -> let let_list in expr .) + yacc.py:2687: of reduce using rule 35 (expr -> let let_list in expr .) + yacc.py:2687: then reduce using rule 35 (expr -> let let_list in expr .) + yacc.py:2687: loop reduce using rule 35 (expr -> let let_list in expr .) + yacc.py:2687: cpar reduce using rule 35 (expr -> let let_list in expr .) + yacc.py:2687: comma reduce using rule 35 (expr -> let let_list in expr .) + yacc.py:2687: in reduce using rule 35 (expr -> let let_list in expr .) + yacc.py:2687: else reduce using rule 35 (expr -> let let_list in expr .) + yacc.py:2687: pool reduce using rule 35 (expr -> let let_list in expr .) + yacc.py:2687: error reduce using rule 35 (expr -> let let_list in expr .) + yacc.py:2687: ccur reduce using rule 35 (expr -> let let_list in expr .) + yacc.py:2687: fi reduce using rule 35 (expr -> let let_list in expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 180 + yacc.py:2563: + yacc.py:2565: (37) expr -> let let_list in error . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 37 (expr -> let let_list in error .) + yacc.py:2687: of reduce using rule 37 (expr -> let let_list in error .) + yacc.py:2687: then reduce using rule 37 (expr -> let let_list in error .) + yacc.py:2687: loop reduce using rule 37 (expr -> let let_list in error .) + yacc.py:2687: cpar reduce using rule 37 (expr -> let let_list in error .) + yacc.py:2687: comma reduce using rule 37 (expr -> let let_list in error .) + yacc.py:2687: in reduce using rule 37 (expr -> let let_list in error .) + yacc.py:2687: else reduce using rule 37 (expr -> let let_list in error .) + yacc.py:2687: pool reduce using rule 37 (expr -> let let_list in error .) + yacc.py:2687: error reduce using rule 37 (expr -> let let_list in error .) + yacc.py:2687: ccur reduce using rule 37 (expr -> let let_list in error .) + yacc.py:2687: fi reduce using rule 37 (expr -> let let_list in error .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 181 + yacc.py:2563: + yacc.py:2565: (36) expr -> let error in expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 36 (expr -> let error in expr .) + yacc.py:2687: of reduce using rule 36 (expr -> let error in expr .) + yacc.py:2687: then reduce using rule 36 (expr -> let error in expr .) + yacc.py:2687: loop reduce using rule 36 (expr -> let error in expr .) + yacc.py:2687: cpar reduce using rule 36 (expr -> let error in expr .) + yacc.py:2687: comma reduce using rule 36 (expr -> let error in expr .) + yacc.py:2687: in reduce using rule 36 (expr -> let error in expr .) + yacc.py:2687: else reduce using rule 36 (expr -> let error in expr .) + yacc.py:2687: pool reduce using rule 36 (expr -> let error in expr .) + yacc.py:2687: error reduce using rule 36 (expr -> let error in expr .) + yacc.py:2687: ccur reduce using rule 36 (expr -> let error in expr .) + yacc.py:2687: fi reduce using rule 36 (expr -> let error in expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 182 + yacc.py:2563: + yacc.py:2565: (51) let_list -> let_assign comma let_list . + yacc.py:2566: + yacc.py:2687: in reduce using rule 51 (let_list -> let_assign comma let_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 183 + yacc.py:2563: + yacc.py:2565: (53) let_assign -> param larrow expr . + yacc.py:2566: + yacc.py:2687: comma reduce using rule 53 (let_assign -> param larrow expr .) + yacc.py:2687: in reduce using rule 53 (let_assign -> param larrow expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 184 + yacc.py:2563: + yacc.py:2565: (38) expr -> case expr of cases_list . esac + yacc.py:2566: + yacc.py:2687: esac shift and go to state 206 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 185 + yacc.py:2563: + yacc.py:2565: (40) expr -> case expr of error . esac + yacc.py:2565: (57) cases_list -> error . cases_list + yacc.py:2565: (55) cases_list -> . casep semi + yacc.py:2565: (56) cases_list -> . casep semi cases_list + yacc.py:2565: (57) cases_list -> . error cases_list + yacc.py:2565: (58) casep -> . id colon type rarrow expr + yacc.py:2566: + yacc.py:2687: esac shift and go to state 207 + yacc.py:2687: error shift and go to state 188 + yacc.py:2687: id shift and go to state 187 + yacc.py:2689: + yacc.py:2714: cases_list shift and go to state 208 + yacc.py:2714: casep shift and go to state 186 + yacc.py:2561: + yacc.py:2562:state 186 + yacc.py:2563: + yacc.py:2565: (55) cases_list -> casep . semi + yacc.py:2565: (56) cases_list -> casep . semi cases_list + yacc.py:2566: + yacc.py:2687: semi shift and go to state 209 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 187 + yacc.py:2563: + yacc.py:2565: (58) casep -> id . colon type rarrow expr + yacc.py:2566: + yacc.py:2687: colon shift and go to state 210 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 188 + yacc.py:2563: + yacc.py:2565: (57) cases_list -> error . cases_list + yacc.py:2565: (55) cases_list -> . casep semi + yacc.py:2565: (56) cases_list -> . casep semi cases_list + yacc.py:2565: (57) cases_list -> . error cases_list + yacc.py:2565: (58) casep -> . id colon type rarrow expr + yacc.py:2566: + yacc.py:2687: error shift and go to state 188 + yacc.py:2687: id shift and go to state 187 + yacc.py:2689: + yacc.py:2714: cases_list shift and go to state 208 + yacc.py:2714: casep shift and go to state 186 + yacc.py:2561: + yacc.py:2562:state 189 + yacc.py:2563: + yacc.py:2565: (39) expr -> case error of cases_list . esac + yacc.py:2566: + yacc.py:2687: esac shift and go to state 211 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 190 + yacc.py:2563: + yacc.py:2565: (41) expr -> if expr then expr . else expr fi + yacc.py:2565: (44) expr -> if expr then expr . else error fi + yacc.py:2566: + yacc.py:2687: else shift and go to state 212 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 191 + yacc.py:2563: + yacc.py:2565: (43) expr -> if expr then error . else expr fi + yacc.py:2566: + yacc.py:2687: else shift and go to state 213 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 192 + yacc.py:2563: + yacc.py:2565: (42) expr -> if error then expr . else expr fi + yacc.py:2566: + yacc.py:2687: else shift and go to state 214 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 193 + yacc.py:2563: + yacc.py:2565: (45) expr -> while expr loop expr . pool + yacc.py:2565: (48) expr -> while expr loop expr . error + yacc.py:2566: + yacc.py:2687: pool shift and go to state 215 + yacc.py:2687: error shift and go to state 216 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 194 + yacc.py:2563: + yacc.py:2565: (47) expr -> while expr loop error . pool + yacc.py:2566: + yacc.py:2687: pool shift and go to state 217 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 195 + yacc.py:2563: + yacc.py:2565: (46) expr -> while error loop expr . pool + yacc.py:2566: + yacc.py:2687: pool shift and go to state 218 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 196 + yacc.py:2563: + yacc.py:2565: (92) func_call -> id opar args cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 92 (func_call -> id opar args cpar .) + yacc.py:2687: dot reduce using rule 92 (func_call -> id opar args cpar .) + yacc.py:2687: star reduce using rule 92 (func_call -> id opar args cpar .) + yacc.py:2687: div reduce using rule 92 (func_call -> id opar args cpar .) + yacc.py:2687: plus reduce using rule 92 (func_call -> id opar args cpar .) + yacc.py:2687: minus reduce using rule 92 (func_call -> id opar args cpar .) + yacc.py:2687: less reduce using rule 92 (func_call -> id opar args cpar .) + yacc.py:2687: lesseq reduce using rule 92 (func_call -> id opar args cpar .) + yacc.py:2687: equal reduce using rule 92 (func_call -> id opar args cpar .) + yacc.py:2687: semi reduce using rule 92 (func_call -> id opar args cpar .) + yacc.py:2687: of reduce using rule 92 (func_call -> id opar args cpar .) + yacc.py:2687: then reduce using rule 92 (func_call -> id opar args cpar .) + yacc.py:2687: loop reduce using rule 92 (func_call -> id opar args cpar .) + yacc.py:2687: cpar reduce using rule 92 (func_call -> id opar args cpar .) + yacc.py:2687: comma reduce using rule 92 (func_call -> id opar args cpar .) + yacc.py:2687: in reduce using rule 92 (func_call -> id opar args cpar .) + yacc.py:2687: else reduce using rule 92 (func_call -> id opar args cpar .) + yacc.py:2687: pool reduce using rule 92 (func_call -> id opar args cpar .) + yacc.py:2687: error reduce using rule 92 (func_call -> id opar args cpar .) + yacc.py:2687: ccur reduce using rule 92 (func_call -> id opar args cpar .) + yacc.py:2687: fi reduce using rule 92 (func_call -> id opar args cpar .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 197 + yacc.py:2563: + yacc.py:2565: (96) arg_list -> expr comma . arg_list + yacc.py:2565: (95) arg_list -> . expr + yacc.py:2565: (96) arg_list -> . expr comma arg_list + yacc.py:2565: (97) arg_list -> . error arg_list + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 159 + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 158 + yacc.py:2714: arg_list shift and go to state 219 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 198 + yacc.py:2563: + yacc.py:2565: (97) arg_list -> error arg_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 97 (arg_list -> error arg_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 199 + yacc.py:2563: + yacc.py:2565: (74) base_call -> factor arroba type dot . func_call + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 170 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 220 + yacc.py:2561: + yacc.py:2562:state 200 + yacc.py:2563: + yacc.py:2565: (89) block -> expr semi block . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 89 (block -> expr semi block .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 201 + yacc.py:2563: + yacc.py:2565: (24) def_func -> error opar formals cpar colon type ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 221 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 202 + yacc.py:2563: + yacc.py:2565: (23) def_func -> id opar formals cpar colon type ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 222 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 203 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar formals cpar colon type ocur error . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 223 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 204 + yacc.py:2563: + yacc.py:2565: (26) def_func -> id opar formals cpar colon error ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 224 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 205 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar error cpar colon type ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 225 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 206 + yacc.py:2563: + yacc.py:2565: (38) expr -> case expr of cases_list esac . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 38 (expr -> case expr of cases_list esac .) + yacc.py:2687: of reduce using rule 38 (expr -> case expr of cases_list esac .) + yacc.py:2687: then reduce using rule 38 (expr -> case expr of cases_list esac .) + yacc.py:2687: loop reduce using rule 38 (expr -> case expr of cases_list esac .) + yacc.py:2687: cpar reduce using rule 38 (expr -> case expr of cases_list esac .) + yacc.py:2687: comma reduce using rule 38 (expr -> case expr of cases_list esac .) + yacc.py:2687: in reduce using rule 38 (expr -> case expr of cases_list esac .) + yacc.py:2687: else reduce using rule 38 (expr -> case expr of cases_list esac .) + yacc.py:2687: pool reduce using rule 38 (expr -> case expr of cases_list esac .) + yacc.py:2687: error reduce using rule 38 (expr -> case expr of cases_list esac .) + yacc.py:2687: ccur reduce using rule 38 (expr -> case expr of cases_list esac .) + yacc.py:2687: fi reduce using rule 38 (expr -> case expr of cases_list esac .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 207 + yacc.py:2563: + yacc.py:2565: (40) expr -> case expr of error esac . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 40 (expr -> case expr of error esac .) + yacc.py:2687: of reduce using rule 40 (expr -> case expr of error esac .) + yacc.py:2687: then reduce using rule 40 (expr -> case expr of error esac .) + yacc.py:2687: loop reduce using rule 40 (expr -> case expr of error esac .) + yacc.py:2687: cpar reduce using rule 40 (expr -> case expr of error esac .) + yacc.py:2687: comma reduce using rule 40 (expr -> case expr of error esac .) + yacc.py:2687: in reduce using rule 40 (expr -> case expr of error esac .) + yacc.py:2687: else reduce using rule 40 (expr -> case expr of error esac .) + yacc.py:2687: pool reduce using rule 40 (expr -> case expr of error esac .) + yacc.py:2687: error reduce using rule 40 (expr -> case expr of error esac .) + yacc.py:2687: ccur reduce using rule 40 (expr -> case expr of error esac .) + yacc.py:2687: fi reduce using rule 40 (expr -> case expr of error esac .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 208 + yacc.py:2563: + yacc.py:2565: (57) cases_list -> error cases_list . + yacc.py:2566: + yacc.py:2687: esac reduce using rule 57 (cases_list -> error cases_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 209 + yacc.py:2563: + yacc.py:2565: (55) cases_list -> casep semi . + yacc.py:2565: (56) cases_list -> casep semi . cases_list + yacc.py:2565: (55) cases_list -> . casep semi + yacc.py:2565: (56) cases_list -> . casep semi cases_list + yacc.py:2565: (57) cases_list -> . error cases_list + yacc.py:2565: (58) casep -> . id colon type rarrow expr + yacc.py:2566: + yacc.py:2687: esac reduce using rule 55 (cases_list -> casep semi .) + yacc.py:2687: error shift and go to state 188 + yacc.py:2687: id shift and go to state 187 + yacc.py:2689: + yacc.py:2714: casep shift and go to state 186 + yacc.py:2714: cases_list shift and go to state 226 + yacc.py:2561: + yacc.py:2562:state 210 + yacc.py:2563: + yacc.py:2565: (58) casep -> id colon . type rarrow expr + yacc.py:2566: + yacc.py:2687: type shift and go to state 227 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 211 + yacc.py:2563: + yacc.py:2565: (39) expr -> case error of cases_list esac . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 39 (expr -> case error of cases_list esac .) + yacc.py:2687: of reduce using rule 39 (expr -> case error of cases_list esac .) + yacc.py:2687: then reduce using rule 39 (expr -> case error of cases_list esac .) + yacc.py:2687: loop reduce using rule 39 (expr -> case error of cases_list esac .) + yacc.py:2687: cpar reduce using rule 39 (expr -> case error of cases_list esac .) + yacc.py:2687: comma reduce using rule 39 (expr -> case error of cases_list esac .) + yacc.py:2687: in reduce using rule 39 (expr -> case error of cases_list esac .) + yacc.py:2687: else reduce using rule 39 (expr -> case error of cases_list esac .) + yacc.py:2687: pool reduce using rule 39 (expr -> case error of cases_list esac .) + yacc.py:2687: error reduce using rule 39 (expr -> case error of cases_list esac .) + yacc.py:2687: ccur reduce using rule 39 (expr -> case error of cases_list esac .) + yacc.py:2687: fi reduce using rule 39 (expr -> case error of cases_list esac .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 212 + yacc.py:2563: + yacc.py:2565: (41) expr -> if expr then expr else . expr fi + yacc.py:2565: (44) expr -> if expr then expr else . error fi + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 229 + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 228 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 213 + yacc.py:2563: + yacc.py:2565: (43) expr -> if expr then error else . expr fi + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 230 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 214 + yacc.py:2563: + yacc.py:2565: (42) expr -> if error then expr else . expr fi + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 231 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 215 + yacc.py:2563: + yacc.py:2565: (45) expr -> while expr loop expr pool . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 45 (expr -> while expr loop expr pool .) + yacc.py:2687: of reduce using rule 45 (expr -> while expr loop expr pool .) + yacc.py:2687: then reduce using rule 45 (expr -> while expr loop expr pool .) + yacc.py:2687: loop reduce using rule 45 (expr -> while expr loop expr pool .) + yacc.py:2687: cpar reduce using rule 45 (expr -> while expr loop expr pool .) + yacc.py:2687: comma reduce using rule 45 (expr -> while expr loop expr pool .) + yacc.py:2687: in reduce using rule 45 (expr -> while expr loop expr pool .) + yacc.py:2687: else reduce using rule 45 (expr -> while expr loop expr pool .) + yacc.py:2687: pool reduce using rule 45 (expr -> while expr loop expr pool .) + yacc.py:2687: error reduce using rule 45 (expr -> while expr loop expr pool .) + yacc.py:2687: ccur reduce using rule 45 (expr -> while expr loop expr pool .) + yacc.py:2687: fi reduce using rule 45 (expr -> while expr loop expr pool .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 216 + yacc.py:2563: + yacc.py:2565: (48) expr -> while expr loop expr error . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 48 (expr -> while expr loop expr error .) + yacc.py:2687: of reduce using rule 48 (expr -> while expr loop expr error .) + yacc.py:2687: then reduce using rule 48 (expr -> while expr loop expr error .) + yacc.py:2687: loop reduce using rule 48 (expr -> while expr loop expr error .) + yacc.py:2687: cpar reduce using rule 48 (expr -> while expr loop expr error .) + yacc.py:2687: comma reduce using rule 48 (expr -> while expr loop expr error .) + yacc.py:2687: in reduce using rule 48 (expr -> while expr loop expr error .) + yacc.py:2687: else reduce using rule 48 (expr -> while expr loop expr error .) + yacc.py:2687: pool reduce using rule 48 (expr -> while expr loop expr error .) + yacc.py:2687: error reduce using rule 48 (expr -> while expr loop expr error .) + yacc.py:2687: ccur reduce using rule 48 (expr -> while expr loop expr error .) + yacc.py:2687: fi reduce using rule 48 (expr -> while expr loop expr error .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 217 + yacc.py:2563: + yacc.py:2565: (47) expr -> while expr loop error pool . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 47 (expr -> while expr loop error pool .) + yacc.py:2687: of reduce using rule 47 (expr -> while expr loop error pool .) + yacc.py:2687: then reduce using rule 47 (expr -> while expr loop error pool .) + yacc.py:2687: loop reduce using rule 47 (expr -> while expr loop error pool .) + yacc.py:2687: cpar reduce using rule 47 (expr -> while expr loop error pool .) + yacc.py:2687: comma reduce using rule 47 (expr -> while expr loop error pool .) + yacc.py:2687: in reduce using rule 47 (expr -> while expr loop error pool .) + yacc.py:2687: else reduce using rule 47 (expr -> while expr loop error pool .) + yacc.py:2687: pool reduce using rule 47 (expr -> while expr loop error pool .) + yacc.py:2687: error reduce using rule 47 (expr -> while expr loop error pool .) + yacc.py:2687: ccur reduce using rule 47 (expr -> while expr loop error pool .) + yacc.py:2687: fi reduce using rule 47 (expr -> while expr loop error pool .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 218 + yacc.py:2563: + yacc.py:2565: (46) expr -> while error loop expr pool . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 46 (expr -> while error loop expr pool .) + yacc.py:2687: of reduce using rule 46 (expr -> while error loop expr pool .) + yacc.py:2687: then reduce using rule 46 (expr -> while error loop expr pool .) + yacc.py:2687: loop reduce using rule 46 (expr -> while error loop expr pool .) + yacc.py:2687: cpar reduce using rule 46 (expr -> while error loop expr pool .) + yacc.py:2687: comma reduce using rule 46 (expr -> while error loop expr pool .) + yacc.py:2687: in reduce using rule 46 (expr -> while error loop expr pool .) + yacc.py:2687: else reduce using rule 46 (expr -> while error loop expr pool .) + yacc.py:2687: pool reduce using rule 46 (expr -> while error loop expr pool .) + yacc.py:2687: error reduce using rule 46 (expr -> while error loop expr pool .) + yacc.py:2687: ccur reduce using rule 46 (expr -> while error loop expr pool .) + yacc.py:2687: fi reduce using rule 46 (expr -> while error loop expr pool .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 219 + yacc.py:2563: + yacc.py:2565: (96) arg_list -> expr comma arg_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 96 (arg_list -> expr comma arg_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 220 + yacc.py:2563: + yacc.py:2565: (74) base_call -> factor arroba type dot func_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 74 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: div reduce using rule 74 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: plus reduce using rule 74 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: minus reduce using rule 74 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: less reduce using rule 74 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: lesseq reduce using rule 74 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: equal reduce using rule 74 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: semi reduce using rule 74 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: of reduce using rule 74 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: then reduce using rule 74 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: loop reduce using rule 74 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: cpar reduce using rule 74 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: comma reduce using rule 74 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: in reduce using rule 74 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: else reduce using rule 74 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: pool reduce using rule 74 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: error reduce using rule 74 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: ccur reduce using rule 74 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: fi reduce using rule 74 (base_call -> factor arroba type dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 221 + yacc.py:2563: + yacc.py:2565: (24) def_func -> error opar formals cpar colon type ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 24 (def_func -> error opar formals cpar colon type ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 222 + yacc.py:2563: + yacc.py:2565: (23) def_func -> id opar formals cpar colon type ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 23 (def_func -> id opar formals cpar colon type ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 223 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar formals cpar colon type ocur error ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 27 (def_func -> id opar formals cpar colon type ocur error ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 224 + yacc.py:2563: + yacc.py:2565: (26) def_func -> id opar formals cpar colon error ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 26 (def_func -> id opar formals cpar colon error ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 225 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar error cpar colon type ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 25 (def_func -> id opar error cpar colon type ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 226 + yacc.py:2563: + yacc.py:2565: (56) cases_list -> casep semi cases_list . + yacc.py:2566: + yacc.py:2687: esac reduce using rule 56 (cases_list -> casep semi cases_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 227 + yacc.py:2563: + yacc.py:2565: (58) casep -> id colon type . rarrow expr + yacc.py:2566: + yacc.py:2687: rarrow shift and go to state 232 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 228 + yacc.py:2563: + yacc.py:2565: (41) expr -> if expr then expr else expr . fi + yacc.py:2566: + yacc.py:2687: fi shift and go to state 233 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 229 + yacc.py:2563: + yacc.py:2565: (44) expr -> if expr then expr else error . fi + yacc.py:2566: + yacc.py:2687: fi shift and go to state 234 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 230 + yacc.py:2563: + yacc.py:2565: (43) expr -> if expr then error else expr . fi + yacc.py:2566: + yacc.py:2687: fi shift and go to state 235 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 231 + yacc.py:2563: + yacc.py:2565: (42) expr -> if error then expr else expr . fi + yacc.py:2566: + yacc.py:2687: fi shift and go to state 236 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 232 + yacc.py:2563: + yacc.py:2565: (58) casep -> id colon type rarrow . expr + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . factor dot func_call + yacc.py:2565: (79) factor -> . func_call + yacc.py:2565: (80) atom -> . num + yacc.py:2565: (81) atom -> . id + yacc.py:2565: (82) atom -> . new type + yacc.py:2565: (83) atom -> . new error + yacc.py:2565: (84) atom -> . ocur block ccur + yacc.py:2565: (85) atom -> . true + yacc.py:2565: (86) atom -> . false + yacc.py:2565: (87) atom -> . string + yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 72 + yacc.py:2687: case shift and go to state 73 + yacc.py:2687: if shift and go to state 74 + yacc.py:2687: while shift and go to state 75 + yacc.py:2687: id shift and go to state 77 + yacc.py:2687: not shift and go to state 78 + yacc.py:2687: isvoid shift and go to state 83 + yacc.py:2687: nox shift and go to state 84 + yacc.py:2687: opar shift and go to state 88 + yacc.py:2687: num shift and go to state 89 + yacc.py:2687: new shift and go to state 90 + yacc.py:2687: ocur shift and go to state 91 + yacc.py:2687: true shift and go to state 92 + yacc.py:2687: false shift and go to state 93 + yacc.py:2687: string shift and go to state 94 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 237 + yacc.py:2714: arith shift and go to state 76 + yacc.py:2714: comp shift and go to state 79 + yacc.py:2714: op shift and go to state 80 + yacc.py:2714: term shift and go to state 81 + yacc.py:2714: base_call shift and go to state 82 + yacc.py:2714: factor shift and go to state 85 + yacc.py:2714: func_call shift and go to state 86 + yacc.py:2714: atom shift and go to state 87 + yacc.py:2561: + yacc.py:2562:state 233 + yacc.py:2563: + yacc.py:2565: (41) expr -> if expr then expr else expr fi . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 41 (expr -> if expr then expr else expr fi .) + yacc.py:2687: of reduce using rule 41 (expr -> if expr then expr else expr fi .) + yacc.py:2687: then reduce using rule 41 (expr -> if expr then expr else expr fi .) + yacc.py:2687: loop reduce using rule 41 (expr -> if expr then expr else expr fi .) + yacc.py:2687: cpar reduce using rule 41 (expr -> if expr then expr else expr fi .) + yacc.py:2687: comma reduce using rule 41 (expr -> if expr then expr else expr fi .) + yacc.py:2687: in reduce using rule 41 (expr -> if expr then expr else expr fi .) + yacc.py:2687: else reduce using rule 41 (expr -> if expr then expr else expr fi .) + yacc.py:2687: pool reduce using rule 41 (expr -> if expr then expr else expr fi .) + yacc.py:2687: error reduce using rule 41 (expr -> if expr then expr else expr fi .) + yacc.py:2687: ccur reduce using rule 41 (expr -> if expr then expr else expr fi .) + yacc.py:2687: fi reduce using rule 41 (expr -> if expr then expr else expr fi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 234 + yacc.py:2563: + yacc.py:2565: (44) expr -> if expr then expr else error fi . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 44 (expr -> if expr then expr else error fi .) + yacc.py:2687: of reduce using rule 44 (expr -> if expr then expr else error fi .) + yacc.py:2687: then reduce using rule 44 (expr -> if expr then expr else error fi .) + yacc.py:2687: loop reduce using rule 44 (expr -> if expr then expr else error fi .) + yacc.py:2687: cpar reduce using rule 44 (expr -> if expr then expr else error fi .) + yacc.py:2687: comma reduce using rule 44 (expr -> if expr then expr else error fi .) + yacc.py:2687: in reduce using rule 44 (expr -> if expr then expr else error fi .) + yacc.py:2687: else reduce using rule 44 (expr -> if expr then expr else error fi .) + yacc.py:2687: pool reduce using rule 44 (expr -> if expr then expr else error fi .) + yacc.py:2687: error reduce using rule 44 (expr -> if expr then expr else error fi .) + yacc.py:2687: ccur reduce using rule 44 (expr -> if expr then expr else error fi .) + yacc.py:2687: fi reduce using rule 44 (expr -> if expr then expr else error fi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 235 + yacc.py:2563: + yacc.py:2565: (43) expr -> if expr then error else expr fi . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 43 (expr -> if expr then error else expr fi .) + yacc.py:2687: of reduce using rule 43 (expr -> if expr then error else expr fi .) + yacc.py:2687: then reduce using rule 43 (expr -> if expr then error else expr fi .) + yacc.py:2687: loop reduce using rule 43 (expr -> if expr then error else expr fi .) + yacc.py:2687: cpar reduce using rule 43 (expr -> if expr then error else expr fi .) + yacc.py:2687: comma reduce using rule 43 (expr -> if expr then error else expr fi .) + yacc.py:2687: in reduce using rule 43 (expr -> if expr then error else expr fi .) + yacc.py:2687: else reduce using rule 43 (expr -> if expr then error else expr fi .) + yacc.py:2687: pool reduce using rule 43 (expr -> if expr then error else expr fi .) + yacc.py:2687: error reduce using rule 43 (expr -> if expr then error else expr fi .) + yacc.py:2687: ccur reduce using rule 43 (expr -> if expr then error else expr fi .) + yacc.py:2687: fi reduce using rule 43 (expr -> if expr then error else expr fi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 236 + yacc.py:2563: + yacc.py:2565: (42) expr -> if error then expr else expr fi . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 42 (expr -> if error then expr else expr fi .) + yacc.py:2687: of reduce using rule 42 (expr -> if error then expr else expr fi .) + yacc.py:2687: then reduce using rule 42 (expr -> if error then expr else expr fi .) + yacc.py:2687: loop reduce using rule 42 (expr -> if error then expr else expr fi .) + yacc.py:2687: cpar reduce using rule 42 (expr -> if error then expr else expr fi .) + yacc.py:2687: comma reduce using rule 42 (expr -> if error then expr else expr fi .) + yacc.py:2687: in reduce using rule 42 (expr -> if error then expr else expr fi .) + yacc.py:2687: else reduce using rule 42 (expr -> if error then expr else expr fi .) + yacc.py:2687: pool reduce using rule 42 (expr -> if error then expr else expr fi .) + yacc.py:2687: error reduce using rule 42 (expr -> if error then expr else expr fi .) + yacc.py:2687: ccur reduce using rule 42 (expr -> if error then expr else expr fi .) + yacc.py:2687: fi reduce using rule 42 (expr -> if error then expr else expr fi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 237 + yacc.py:2563: + yacc.py:2565: (58) casep -> id colon type rarrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 58 (casep -> id colon type rarrow expr .) + yacc.py:2689: diff --git a/src/output_parser/parser.out b/src/output_parser/parser.out new file mode 100644 index 00000000..04209aba --- /dev/null +++ b/src/output_parser/parser.out @@ -0,0 +1,5456 @@ +Created by PLY version 3.11 (http://www.dabeaz.com/ply) + +Grammar + +Rule 0 S' -> program +Rule 1 program -> class_list +Rule 2 epsilon -> +Rule 3 class_list -> def_class class_list +Rule 4 class_list -> def_class +Rule 5 class_list -> error class_list +Rule 6 def_class -> class type ocur feature_list ccur semi +Rule 7 def_class -> class type inherits type ocur feature_list ccur semi +Rule 8 def_class -> class error ocur feature_list ccur semi +Rule 9 def_class -> class error inherits type ocur feature_list ccur semi +Rule 10 def_class -> class error inherits error ocur feature_list ccur semi +Rule 11 def_class -> class type inherits error ocur feature_list ccur semi +Rule 12 feature_list -> epsilon +Rule 13 feature_list -> def_attr semi feature_list +Rule 14 feature_list -> def_func semi feature_list +Rule 15 feature_list -> error feature_list +Rule 16 def_attr -> id colon type +Rule 17 def_attr -> id colon type larrow expr +Rule 18 def_attr -> error colon type +Rule 19 def_attr -> id colon error +Rule 20 def_attr -> error colon type larrow expr +Rule 21 def_attr -> id colon error larrow expr +Rule 22 def_attr -> id colon type larrow error +Rule 23 def_func -> id opar formals cpar colon type ocur expr ccur +Rule 24 def_func -> error opar formals cpar colon type ocur expr ccur +Rule 25 def_func -> id opar error cpar colon type ocur expr ccur +Rule 26 def_func -> id opar formals cpar colon error ocur expr ccur +Rule 27 def_func -> id opar formals cpar colon type ocur error ccur +Rule 28 formals -> param_list +Rule 29 formals -> param_list_empty +Rule 30 param_list -> param +Rule 31 param_list -> param comma param_list +Rule 32 param_list -> error param_list +Rule 33 param_list_empty -> epsilon +Rule 34 param -> id colon type +Rule 35 expr -> let let_list in expr +Rule 36 expr -> let error in expr +Rule 37 expr -> let let_list in error +Rule 38 expr -> case expr of cases_list esac +Rule 39 expr -> case error of cases_list esac +Rule 40 expr -> case expr of error esac +Rule 41 expr -> if expr then expr else expr fi +Rule 42 expr -> if error then expr else expr fi +Rule 43 expr -> if expr then error else expr fi +Rule 44 expr -> if expr then expr else error fi +Rule 45 expr -> while expr loop expr pool +Rule 46 expr -> while error loop expr pool +Rule 47 expr -> while expr loop error pool +Rule 48 expr -> while expr loop expr error +Rule 49 expr -> arith +Rule 50 let_list -> let_assign +Rule 51 let_list -> let_assign comma let_list +Rule 52 let_list -> error let_list +Rule 53 let_assign -> param larrow expr +Rule 54 let_assign -> param +Rule 55 cases_list -> casep semi +Rule 56 cases_list -> casep semi cases_list +Rule 57 cases_list -> error cases_list +Rule 58 casep -> id colon type rarrow expr +Rule 59 arith -> id larrow expr +Rule 60 arith -> not comp +Rule 61 arith -> comp +Rule 62 comp -> comp less op +Rule 63 comp -> comp lesseq op +Rule 64 comp -> comp equal op +Rule 65 comp -> op +Rule 66 op -> op plus term +Rule 67 op -> op minus term +Rule 68 op -> term +Rule 69 term -> term star base_call +Rule 70 term -> term div base_call +Rule 71 term -> isvoid base_call +Rule 72 term -> nox base_call +Rule 73 term -> base_call +Rule 74 base_call -> factor arroba type dot func_call +Rule 75 base_call -> factor +Rule 76 factor -> atom +Rule 77 factor -> opar expr cpar +Rule 78 factor -> factor dot func_call +Rule 79 factor -> func_call +Rule 80 atom -> num +Rule 81 atom -> id +Rule 82 atom -> new type +Rule 83 atom -> new error +Rule 84 atom -> ocur block ccur +Rule 85 atom -> true +Rule 86 atom -> false +Rule 87 atom -> string +Rule 88 block -> expr semi +Rule 89 block -> expr semi block +Rule 90 block -> error block +Rule 91 block -> error +Rule 92 func_call -> id opar args cpar +Rule 93 args -> arg_list +Rule 94 args -> arg_list_empty +Rule 95 arg_list -> expr +Rule 96 arg_list -> expr comma arg_list +Rule 97 arg_list -> error arg_list +Rule 98 arg_list_empty -> epsilon + +Terminals, with rules where they appear + +arroba : 74 +case : 38 39 40 +ccur : 6 7 8 9 10 11 23 24 25 26 27 84 +class : 6 7 8 9 10 11 +colon : 16 17 18 19 20 21 22 23 24 25 26 27 34 58 +comma : 31 51 96 +cpar : 23 24 25 26 27 77 92 +div : 70 +dot : 74 78 +else : 41 42 43 44 +equal : 64 +error : 5 8 9 10 10 11 15 18 19 20 21 22 24 25 26 27 32 36 37 39 40 42 43 44 46 47 48 52 57 83 90 91 97 +esac : 38 39 40 +false : 86 +fi : 41 42 43 44 +id : 16 17 19 21 22 23 25 26 27 34 58 59 81 92 +if : 41 42 43 44 +in : 35 36 37 +inherits : 7 9 10 11 +isvoid : 71 +larrow : 17 20 21 22 53 59 +less : 62 +lesseq : 63 +let : 35 36 37 +loop : 45 46 47 48 +minus : 67 +new : 82 83 +not : 60 +nox : 72 +num : 80 +ocur : 6 7 8 9 10 11 23 24 25 26 27 84 +of : 38 39 40 +opar : 23 24 25 26 27 77 92 +plus : 66 +pool : 45 46 47 +rarrow : 58 +semi : 6 7 8 9 10 11 13 14 55 56 88 89 +star : 69 +string : 87 +then : 41 42 43 44 +true : 85 +type : 6 7 7 9 11 16 17 18 20 22 23 24 25 27 34 58 74 82 +while : 45 46 47 48 + +Nonterminals, with rules where they appear + +arg_list : 93 96 97 +arg_list_empty : 94 +args : 92 +arith : 49 +atom : 76 +base_call : 69 70 71 72 73 +block : 84 89 90 +casep : 55 56 +cases_list : 38 39 56 57 +class_list : 1 3 5 +comp : 60 61 62 63 64 +def_attr : 13 +def_class : 3 4 +def_func : 14 +epsilon : 12 33 98 +expr : 17 20 21 23 24 25 26 35 36 38 40 41 41 41 42 42 43 43 44 44 45 45 46 47 48 48 53 58 59 77 88 89 95 96 +factor : 74 75 78 +feature_list : 6 7 8 9 10 11 13 14 15 +formals : 23 24 26 27 +func_call : 74 78 79 +let_assign : 50 51 +let_list : 35 37 51 52 +op : 62 63 64 65 66 67 +param : 30 31 53 54 +param_list : 28 31 32 +param_list_empty : 29 +program : 0 +term : 66 67 68 69 70 + +Parsing method: LALR + +state 0 + + (0) S' -> . program + (1) program -> . class_list + (3) class_list -> . def_class class_list + (4) class_list -> . def_class + (5) class_list -> . error class_list + (6) def_class -> . class type ocur feature_list ccur semi + (7) def_class -> . class type inherits type ocur feature_list ccur semi + (8) def_class -> . class error ocur feature_list ccur semi + (9) def_class -> . class error inherits type ocur feature_list ccur semi + (10) def_class -> . class error inherits error ocur feature_list ccur semi + (11) def_class -> . class type inherits error ocur feature_list ccur semi + + error shift and go to state 4 + class shift and go to state 5 + + program shift and go to state 1 + class_list shift and go to state 2 + def_class shift and go to state 3 + +state 1 + + (0) S' -> program . + + + +state 2 + + (1) program -> class_list . + + $end reduce using rule 1 (program -> class_list .) + + +state 3 + + (3) class_list -> def_class . class_list + (4) class_list -> def_class . + (3) class_list -> . def_class class_list + (4) class_list -> . def_class + (5) class_list -> . error class_list + (6) def_class -> . class type ocur feature_list ccur semi + (7) def_class -> . class type inherits type ocur feature_list ccur semi + (8) def_class -> . class error ocur feature_list ccur semi + (9) def_class -> . class error inherits type ocur feature_list ccur semi + (10) def_class -> . class error inherits error ocur feature_list ccur semi + (11) def_class -> . class type inherits error ocur feature_list ccur semi + + $end reduce using rule 4 (class_list -> def_class .) + error shift and go to state 4 + class shift and go to state 5 + + def_class shift and go to state 3 + class_list shift and go to state 6 + +state 4 + + (5) class_list -> error . class_list + (3) class_list -> . def_class class_list + (4) class_list -> . def_class + (5) class_list -> . error class_list + (6) def_class -> . class type ocur feature_list ccur semi + (7) def_class -> . class type inherits type ocur feature_list ccur semi + (8) def_class -> . class error ocur feature_list ccur semi + (9) def_class -> . class error inherits type ocur feature_list ccur semi + (10) def_class -> . class error inherits error ocur feature_list ccur semi + (11) def_class -> . class type inherits error ocur feature_list ccur semi + + error shift and go to state 4 + class shift and go to state 5 + + class_list shift and go to state 7 + def_class shift and go to state 3 + +state 5 + + (6) def_class -> class . type ocur feature_list ccur semi + (7) def_class -> class . type inherits type ocur feature_list ccur semi + (8) def_class -> class . error ocur feature_list ccur semi + (9) def_class -> class . error inherits type ocur feature_list ccur semi + (10) def_class -> class . error inherits error ocur feature_list ccur semi + (11) def_class -> class . type inherits error ocur feature_list ccur semi + + type shift and go to state 8 + error shift and go to state 9 + + +state 6 + + (3) class_list -> def_class class_list . + + $end reduce using rule 3 (class_list -> def_class class_list .) + + +state 7 + + (5) class_list -> error class_list . + + $end reduce using rule 5 (class_list -> error class_list .) + + +state 8 + + (6) def_class -> class type . ocur feature_list ccur semi + (7) def_class -> class type . inherits type ocur feature_list ccur semi + (11) def_class -> class type . inherits error ocur feature_list ccur semi + + ocur shift and go to state 10 + inherits shift and go to state 11 + + +state 9 + + (8) def_class -> class error . ocur feature_list ccur semi + (9) def_class -> class error . inherits type ocur feature_list ccur semi + (10) def_class -> class error . inherits error ocur feature_list ccur semi + + ocur shift and go to state 12 + inherits shift and go to state 13 + + +state 10 + + (6) def_class -> class type ocur . feature_list ccur semi + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + feature_list shift and go to state 14 + epsilon shift and go to state 15 + def_attr shift and go to state 16 + def_func shift and go to state 17 + +state 11 + + (7) def_class -> class type inherits . type ocur feature_list ccur semi + (11) def_class -> class type inherits . error ocur feature_list ccur semi + + type shift and go to state 20 + error shift and go to state 21 + + +state 12 + + (8) def_class -> class error ocur . feature_list ccur semi + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + feature_list shift and go to state 22 + epsilon shift and go to state 15 + def_attr shift and go to state 16 + def_func shift and go to state 17 + +state 13 + + (9) def_class -> class error inherits . type ocur feature_list ccur semi + (10) def_class -> class error inherits . error ocur feature_list ccur semi + + type shift and go to state 24 + error shift and go to state 23 + + +state 14 + + (6) def_class -> class type ocur feature_list . ccur semi + + ccur shift and go to state 25 + + +state 15 + + (12) feature_list -> epsilon . + + ccur reduce using rule 12 (feature_list -> epsilon .) + + +state 16 + + (13) feature_list -> def_attr . semi feature_list + + semi shift and go to state 26 + + +state 17 + + (14) feature_list -> def_func . semi feature_list + + semi shift and go to state 27 + + +state 18 + + (15) feature_list -> error . feature_list + (18) def_attr -> error . colon type + (20) def_attr -> error . colon type larrow expr + (24) def_func -> error . opar formals cpar colon type ocur expr ccur + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + colon shift and go to state 29 + opar shift and go to state 30 + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + feature_list shift and go to state 28 + epsilon shift and go to state 15 + def_attr shift and go to state 16 + def_func shift and go to state 17 + +state 19 + + (16) def_attr -> id . colon type + (17) def_attr -> id . colon type larrow expr + (19) def_attr -> id . colon error + (21) def_attr -> id . colon error larrow expr + (22) def_attr -> id . colon type larrow error + (23) def_func -> id . opar formals cpar colon type ocur expr ccur + (25) def_func -> id . opar error cpar colon type ocur expr ccur + (26) def_func -> id . opar formals cpar colon error ocur expr ccur + (27) def_func -> id . opar formals cpar colon type ocur error ccur + + colon shift and go to state 31 + opar shift and go to state 32 + + +state 20 + + (7) def_class -> class type inherits type . ocur feature_list ccur semi + + ocur shift and go to state 33 + + +state 21 + + (11) def_class -> class type inherits error . ocur feature_list ccur semi + + ocur shift and go to state 34 + + +state 22 + + (8) def_class -> class error ocur feature_list . ccur semi + + ccur shift and go to state 35 + + +state 23 + + (10) def_class -> class error inherits error . ocur feature_list ccur semi + + ocur shift and go to state 36 + + +state 24 + + (9) def_class -> class error inherits type . ocur feature_list ccur semi + + ocur shift and go to state 37 + + +state 25 + + (6) def_class -> class type ocur feature_list ccur . semi + + semi shift and go to state 38 + + +state 26 + + (13) feature_list -> def_attr semi . feature_list + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + def_attr shift and go to state 16 + feature_list shift and go to state 39 + epsilon shift and go to state 15 + def_func shift and go to state 17 + +state 27 + + (14) feature_list -> def_func semi . feature_list + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + def_func shift and go to state 17 + feature_list shift and go to state 40 + epsilon shift and go to state 15 + def_attr shift and go to state 16 + +state 28 + + (15) feature_list -> error feature_list . + + ccur reduce using rule 15 (feature_list -> error feature_list .) + + +state 29 + + (18) def_attr -> error colon . type + (20) def_attr -> error colon . type larrow expr + + type shift and go to state 41 + + +state 30 + + (24) def_func -> error opar . formals cpar colon type ocur expr ccur + (28) formals -> . param_list + (29) formals -> . param_list_empty + (30) param_list -> . param + (31) param_list -> . param comma param_list + (32) param_list -> . error param_list + (33) param_list_empty -> . epsilon + (34) param -> . id colon type + (2) epsilon -> . + + error shift and go to state 42 + id shift and go to state 48 + cpar reduce using rule 2 (epsilon -> .) + + formals shift and go to state 43 + param_list shift and go to state 44 + param_list_empty shift and go to state 45 + param shift and go to state 46 + epsilon shift and go to state 47 + +state 31 + + (16) def_attr -> id colon . type + (17) def_attr -> id colon . type larrow expr + (19) def_attr -> id colon . error + (21) def_attr -> id colon . error larrow expr + (22) def_attr -> id colon . type larrow error + + type shift and go to state 49 + error shift and go to state 50 + + +state 32 + + (23) def_func -> id opar . formals cpar colon type ocur expr ccur + (25) def_func -> id opar . error cpar colon type ocur expr ccur + (26) def_func -> id opar . formals cpar colon error ocur expr ccur + (27) def_func -> id opar . formals cpar colon type ocur error ccur + (28) formals -> . param_list + (29) formals -> . param_list_empty + (30) param_list -> . param + (31) param_list -> . param comma param_list + (32) param_list -> . error param_list + (33) param_list_empty -> . epsilon + (34) param -> . id colon type + (2) epsilon -> . + + error shift and go to state 52 + id shift and go to state 48 + cpar reduce using rule 2 (epsilon -> .) + + formals shift and go to state 51 + param_list shift and go to state 44 + param_list_empty shift and go to state 45 + param shift and go to state 46 + epsilon shift and go to state 47 + +state 33 + + (7) def_class -> class type inherits type ocur . feature_list ccur semi + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + feature_list shift and go to state 53 + epsilon shift and go to state 15 + def_attr shift and go to state 16 + def_func shift and go to state 17 + +state 34 + + (11) def_class -> class type inherits error ocur . feature_list ccur semi + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + feature_list shift and go to state 54 + epsilon shift and go to state 15 + def_attr shift and go to state 16 + def_func shift and go to state 17 + +state 35 + + (8) def_class -> class error ocur feature_list ccur . semi + + semi shift and go to state 55 + + +state 36 + + (10) def_class -> class error inherits error ocur . feature_list ccur semi + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + feature_list shift and go to state 56 + epsilon shift and go to state 15 + def_attr shift and go to state 16 + def_func shift and go to state 17 + +state 37 + + (9) def_class -> class error inherits type ocur . feature_list ccur semi + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + feature_list shift and go to state 57 + epsilon shift and go to state 15 + def_attr shift and go to state 16 + def_func shift and go to state 17 + +state 38 + + (6) def_class -> class type ocur feature_list ccur semi . + + error reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) + class reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) + $end reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) + + +state 39 + + (13) feature_list -> def_attr semi feature_list . + + ccur reduce using rule 13 (feature_list -> def_attr semi feature_list .) + + +state 40 + + (14) feature_list -> def_func semi feature_list . + + ccur reduce using rule 14 (feature_list -> def_func semi feature_list .) + + +state 41 + + (18) def_attr -> error colon type . + (20) def_attr -> error colon type . larrow expr + + semi reduce using rule 18 (def_attr -> error colon type .) + larrow shift and go to state 58 + + +state 42 + + (32) param_list -> error . param_list + (30) param_list -> . param + (31) param_list -> . param comma param_list + (32) param_list -> . error param_list + (34) param -> . id colon type + + error shift and go to state 42 + id shift and go to state 48 + + param_list shift and go to state 59 + param shift and go to state 46 + +state 43 + + (24) def_func -> error opar formals . cpar colon type ocur expr ccur + + cpar shift and go to state 60 + + +state 44 + + (28) formals -> param_list . + + cpar reduce using rule 28 (formals -> param_list .) + + +state 45 + + (29) formals -> param_list_empty . + + cpar reduce using rule 29 (formals -> param_list_empty .) + + +state 46 + + (30) param_list -> param . + (31) param_list -> param . comma param_list + + cpar reduce using rule 30 (param_list -> param .) + comma shift and go to state 61 + + +state 47 + + (33) param_list_empty -> epsilon . + + cpar reduce using rule 33 (param_list_empty -> epsilon .) + + +state 48 + + (34) param -> id . colon type + + colon shift and go to state 62 + + +state 49 + + (16) def_attr -> id colon type . + (17) def_attr -> id colon type . larrow expr + (22) def_attr -> id colon type . larrow error + + semi reduce using rule 16 (def_attr -> id colon type .) + larrow shift and go to state 63 + + +state 50 + + (19) def_attr -> id colon error . + (21) def_attr -> id colon error . larrow expr + + semi reduce using rule 19 (def_attr -> id colon error .) + larrow shift and go to state 64 + + +state 51 + + (23) def_func -> id opar formals . cpar colon type ocur expr ccur + (26) def_func -> id opar formals . cpar colon error ocur expr ccur + (27) def_func -> id opar formals . cpar colon type ocur error ccur + + cpar shift and go to state 65 + + +state 52 + + (25) def_func -> id opar error . cpar colon type ocur expr ccur + (32) param_list -> error . param_list + (30) param_list -> . param + (31) param_list -> . param comma param_list + (32) param_list -> . error param_list + (34) param -> . id colon type + + cpar shift and go to state 66 + error shift and go to state 42 + id shift and go to state 48 + + param_list shift and go to state 59 + param shift and go to state 46 + +state 53 + + (7) def_class -> class type inherits type ocur feature_list . ccur semi + + ccur shift and go to state 67 + + +state 54 + + (11) def_class -> class type inherits error ocur feature_list . ccur semi + + ccur shift and go to state 68 + + +state 55 + + (8) def_class -> class error ocur feature_list ccur semi . + + error reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + class reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + $end reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + + +state 56 + + (10) def_class -> class error inherits error ocur feature_list . ccur semi + + ccur shift and go to state 69 + + +state 57 + + (9) def_class -> class error inherits type ocur feature_list . ccur semi + + ccur shift and go to state 70 + + +state 58 + + (20) def_attr -> error colon type larrow . expr + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 71 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 59 + + (32) param_list -> error param_list . + + cpar reduce using rule 32 (param_list -> error param_list .) + + +state 60 + + (24) def_func -> error opar formals cpar . colon type ocur expr ccur + + colon shift and go to state 95 + + +state 61 + + (31) param_list -> param comma . param_list + (30) param_list -> . param + (31) param_list -> . param comma param_list + (32) param_list -> . error param_list + (34) param -> . id colon type + + error shift and go to state 42 + id shift and go to state 48 + + param shift and go to state 46 + param_list shift and go to state 96 + +state 62 + + (34) param -> id colon . type + + type shift and go to state 97 + + +state 63 + + (17) def_attr -> id colon type larrow . expr + (22) def_attr -> id colon type larrow . error + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 99 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 98 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 64 + + (21) def_attr -> id colon error larrow . expr + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 100 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 65 + + (23) def_func -> id opar formals cpar . colon type ocur expr ccur + (26) def_func -> id opar formals cpar . colon error ocur expr ccur + (27) def_func -> id opar formals cpar . colon type ocur error ccur + + colon shift and go to state 101 + + +state 66 + + (25) def_func -> id opar error cpar . colon type ocur expr ccur + + colon shift and go to state 102 + + +state 67 + + (7) def_class -> class type inherits type ocur feature_list ccur . semi + + semi shift and go to state 103 + + +state 68 + + (11) def_class -> class type inherits error ocur feature_list ccur . semi + + semi shift and go to state 104 + + +state 69 + + (10) def_class -> class error inherits error ocur feature_list ccur . semi + + semi shift and go to state 105 + + +state 70 + + (9) def_class -> class error inherits type ocur feature_list ccur . semi + + semi shift and go to state 106 + + +state 71 + + (20) def_attr -> error colon type larrow expr . + + semi reduce using rule 20 (def_attr -> error colon type larrow expr .) + + +state 72 + + (35) expr -> let . let_list in expr + (36) expr -> let . error in expr + (37) expr -> let . let_list in error + (50) let_list -> . let_assign + (51) let_list -> . let_assign comma let_list + (52) let_list -> . error let_list + (53) let_assign -> . param larrow expr + (54) let_assign -> . param + (34) param -> . id colon type + + error shift and go to state 108 + id shift and go to state 48 + + let_list shift and go to state 107 + let_assign shift and go to state 109 + param shift and go to state 110 + +state 73 + + (38) expr -> case . expr of cases_list esac + (39) expr -> case . error of cases_list esac + (40) expr -> case . expr of error esac + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 112 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 111 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 74 + + (41) expr -> if . expr then expr else expr fi + (42) expr -> if . error then expr else expr fi + (43) expr -> if . expr then error else expr fi + (44) expr -> if . expr then expr else error fi + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 114 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 113 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 75 + + (45) expr -> while . expr loop expr pool + (46) expr -> while . error loop expr pool + (47) expr -> while . expr loop error pool + (48) expr -> while . expr loop expr error + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 116 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 115 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 76 + + (49) expr -> arith . + + semi reduce using rule 49 (expr -> arith .) + of reduce using rule 49 (expr -> arith .) + then reduce using rule 49 (expr -> arith .) + loop reduce using rule 49 (expr -> arith .) + cpar reduce using rule 49 (expr -> arith .) + comma reduce using rule 49 (expr -> arith .) + in reduce using rule 49 (expr -> arith .) + else reduce using rule 49 (expr -> arith .) + pool reduce using rule 49 (expr -> arith .) + error reduce using rule 49 (expr -> arith .) + ccur reduce using rule 49 (expr -> arith .) + fi reduce using rule 49 (expr -> arith .) + + +state 77 + + (59) arith -> id . larrow expr + (81) atom -> id . + (92) func_call -> id . opar args cpar + + larrow shift and go to state 117 + arroba reduce using rule 81 (atom -> id .) + dot reduce using rule 81 (atom -> id .) + star reduce using rule 81 (atom -> id .) + div reduce using rule 81 (atom -> id .) + plus reduce using rule 81 (atom -> id .) + minus reduce using rule 81 (atom -> id .) + less reduce using rule 81 (atom -> id .) + lesseq reduce using rule 81 (atom -> id .) + equal reduce using rule 81 (atom -> id .) + semi reduce using rule 81 (atom -> id .) + of reduce using rule 81 (atom -> id .) + then reduce using rule 81 (atom -> id .) + loop reduce using rule 81 (atom -> id .) + cpar reduce using rule 81 (atom -> id .) + comma reduce using rule 81 (atom -> id .) + in reduce using rule 81 (atom -> id .) + else reduce using rule 81 (atom -> id .) + pool reduce using rule 81 (atom -> id .) + error reduce using rule 81 (atom -> id .) + ccur reduce using rule 81 (atom -> id .) + fi reduce using rule 81 (atom -> id .) + opar shift and go to state 118 + + +state 78 + + (60) arith -> not . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + comp shift and go to state 119 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 79 + + (61) arith -> comp . + (62) comp -> comp . less op + (63) comp -> comp . lesseq op + (64) comp -> comp . equal op + + semi reduce using rule 61 (arith -> comp .) + of reduce using rule 61 (arith -> comp .) + then reduce using rule 61 (arith -> comp .) + loop reduce using rule 61 (arith -> comp .) + cpar reduce using rule 61 (arith -> comp .) + comma reduce using rule 61 (arith -> comp .) + in reduce using rule 61 (arith -> comp .) + else reduce using rule 61 (arith -> comp .) + pool reduce using rule 61 (arith -> comp .) + error reduce using rule 61 (arith -> comp .) + ccur reduce using rule 61 (arith -> comp .) + fi reduce using rule 61 (arith -> comp .) + less shift and go to state 121 + lesseq shift and go to state 122 + equal shift and go to state 123 + + +state 80 + + (65) comp -> op . + (66) op -> op . plus term + (67) op -> op . minus term + + less reduce using rule 65 (comp -> op .) + lesseq reduce using rule 65 (comp -> op .) + equal reduce using rule 65 (comp -> op .) + semi reduce using rule 65 (comp -> op .) + of reduce using rule 65 (comp -> op .) + then reduce using rule 65 (comp -> op .) + loop reduce using rule 65 (comp -> op .) + cpar reduce using rule 65 (comp -> op .) + comma reduce using rule 65 (comp -> op .) + in reduce using rule 65 (comp -> op .) + else reduce using rule 65 (comp -> op .) + pool reduce using rule 65 (comp -> op .) + error reduce using rule 65 (comp -> op .) + ccur reduce using rule 65 (comp -> op .) + fi reduce using rule 65 (comp -> op .) + plus shift and go to state 124 + minus shift and go to state 125 + + +state 81 + + (68) op -> term . + (69) term -> term . star base_call + (70) term -> term . div base_call + + plus reduce using rule 68 (op -> term .) + minus reduce using rule 68 (op -> term .) + less reduce using rule 68 (op -> term .) + lesseq reduce using rule 68 (op -> term .) + equal reduce using rule 68 (op -> term .) + semi reduce using rule 68 (op -> term .) + of reduce using rule 68 (op -> term .) + then reduce using rule 68 (op -> term .) + loop reduce using rule 68 (op -> term .) + cpar reduce using rule 68 (op -> term .) + comma reduce using rule 68 (op -> term .) + in reduce using rule 68 (op -> term .) + else reduce using rule 68 (op -> term .) + pool reduce using rule 68 (op -> term .) + error reduce using rule 68 (op -> term .) + ccur reduce using rule 68 (op -> term .) + fi reduce using rule 68 (op -> term .) + star shift and go to state 126 + div shift and go to state 127 + + +state 82 + + (73) term -> base_call . + + star reduce using rule 73 (term -> base_call .) + div reduce using rule 73 (term -> base_call .) + plus reduce using rule 73 (term -> base_call .) + minus reduce using rule 73 (term -> base_call .) + less reduce using rule 73 (term -> base_call .) + lesseq reduce using rule 73 (term -> base_call .) + equal reduce using rule 73 (term -> base_call .) + semi reduce using rule 73 (term -> base_call .) + of reduce using rule 73 (term -> base_call .) + then reduce using rule 73 (term -> base_call .) + loop reduce using rule 73 (term -> base_call .) + cpar reduce using rule 73 (term -> base_call .) + comma reduce using rule 73 (term -> base_call .) + in reduce using rule 73 (term -> base_call .) + else reduce using rule 73 (term -> base_call .) + pool reduce using rule 73 (term -> base_call .) + error reduce using rule 73 (term -> base_call .) + ccur reduce using rule 73 (term -> base_call .) + fi reduce using rule 73 (term -> base_call .) + + +state 83 + + (71) term -> isvoid . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + base_call shift and go to state 128 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 84 + + (72) term -> nox . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + base_call shift and go to state 129 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 85 + + (74) base_call -> factor . arroba type dot func_call + (75) base_call -> factor . + (78) factor -> factor . dot func_call + + arroba shift and go to state 130 + star reduce using rule 75 (base_call -> factor .) + div reduce using rule 75 (base_call -> factor .) + plus reduce using rule 75 (base_call -> factor .) + minus reduce using rule 75 (base_call -> factor .) + less reduce using rule 75 (base_call -> factor .) + lesseq reduce using rule 75 (base_call -> factor .) + equal reduce using rule 75 (base_call -> factor .) + semi reduce using rule 75 (base_call -> factor .) + of reduce using rule 75 (base_call -> factor .) + then reduce using rule 75 (base_call -> factor .) + loop reduce using rule 75 (base_call -> factor .) + cpar reduce using rule 75 (base_call -> factor .) + comma reduce using rule 75 (base_call -> factor .) + in reduce using rule 75 (base_call -> factor .) + else reduce using rule 75 (base_call -> factor .) + pool reduce using rule 75 (base_call -> factor .) + error reduce using rule 75 (base_call -> factor .) + ccur reduce using rule 75 (base_call -> factor .) + fi reduce using rule 75 (base_call -> factor .) + dot shift and go to state 131 + + +state 86 + + (79) factor -> func_call . + + arroba reduce using rule 79 (factor -> func_call .) + dot reduce using rule 79 (factor -> func_call .) + star reduce using rule 79 (factor -> func_call .) + div reduce using rule 79 (factor -> func_call .) + plus reduce using rule 79 (factor -> func_call .) + minus reduce using rule 79 (factor -> func_call .) + less reduce using rule 79 (factor -> func_call .) + lesseq reduce using rule 79 (factor -> func_call .) + equal reduce using rule 79 (factor -> func_call .) + semi reduce using rule 79 (factor -> func_call .) + of reduce using rule 79 (factor -> func_call .) + then reduce using rule 79 (factor -> func_call .) + loop reduce using rule 79 (factor -> func_call .) + cpar reduce using rule 79 (factor -> func_call .) + comma reduce using rule 79 (factor -> func_call .) + in reduce using rule 79 (factor -> func_call .) + else reduce using rule 79 (factor -> func_call .) + pool reduce using rule 79 (factor -> func_call .) + error reduce using rule 79 (factor -> func_call .) + ccur reduce using rule 79 (factor -> func_call .) + fi reduce using rule 79 (factor -> func_call .) + + +state 87 + + (76) factor -> atom . + + arroba reduce using rule 76 (factor -> atom .) + dot reduce using rule 76 (factor -> atom .) + star reduce using rule 76 (factor -> atom .) + div reduce using rule 76 (factor -> atom .) + plus reduce using rule 76 (factor -> atom .) + minus reduce using rule 76 (factor -> atom .) + less reduce using rule 76 (factor -> atom .) + lesseq reduce using rule 76 (factor -> atom .) + equal reduce using rule 76 (factor -> atom .) + semi reduce using rule 76 (factor -> atom .) + of reduce using rule 76 (factor -> atom .) + then reduce using rule 76 (factor -> atom .) + loop reduce using rule 76 (factor -> atom .) + cpar reduce using rule 76 (factor -> atom .) + comma reduce using rule 76 (factor -> atom .) + in reduce using rule 76 (factor -> atom .) + else reduce using rule 76 (factor -> atom .) + pool reduce using rule 76 (factor -> atom .) + error reduce using rule 76 (factor -> atom .) + ccur reduce using rule 76 (factor -> atom .) + fi reduce using rule 76 (factor -> atom .) + + +state 88 + + (77) factor -> opar . expr cpar + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 132 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 89 + + (80) atom -> num . + + arroba reduce using rule 80 (atom -> num .) + dot reduce using rule 80 (atom -> num .) + star reduce using rule 80 (atom -> num .) + div reduce using rule 80 (atom -> num .) + plus reduce using rule 80 (atom -> num .) + minus reduce using rule 80 (atom -> num .) + less reduce using rule 80 (atom -> num .) + lesseq reduce using rule 80 (atom -> num .) + equal reduce using rule 80 (atom -> num .) + semi reduce using rule 80 (atom -> num .) + of reduce using rule 80 (atom -> num .) + then reduce using rule 80 (atom -> num .) + loop reduce using rule 80 (atom -> num .) + cpar reduce using rule 80 (atom -> num .) + comma reduce using rule 80 (atom -> num .) + in reduce using rule 80 (atom -> num .) + else reduce using rule 80 (atom -> num .) + pool reduce using rule 80 (atom -> num .) + error reduce using rule 80 (atom -> num .) + ccur reduce using rule 80 (atom -> num .) + fi reduce using rule 80 (atom -> num .) + + +state 90 + + (82) atom -> new . type + (83) atom -> new . error + + type shift and go to state 133 + error shift and go to state 134 + + +state 91 + + (84) atom -> ocur . block ccur + (88) block -> . expr semi + (89) block -> . expr semi block + (90) block -> . error block + (91) block -> . error + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 137 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + block shift and go to state 135 + expr shift and go to state 136 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 92 + + (85) atom -> true . + + arroba reduce using rule 85 (atom -> true .) + dot reduce using rule 85 (atom -> true .) + star reduce using rule 85 (atom -> true .) + div reduce using rule 85 (atom -> true .) + plus reduce using rule 85 (atom -> true .) + minus reduce using rule 85 (atom -> true .) + less reduce using rule 85 (atom -> true .) + lesseq reduce using rule 85 (atom -> true .) + equal reduce using rule 85 (atom -> true .) + semi reduce using rule 85 (atom -> true .) + of reduce using rule 85 (atom -> true .) + then reduce using rule 85 (atom -> true .) + loop reduce using rule 85 (atom -> true .) + cpar reduce using rule 85 (atom -> true .) + comma reduce using rule 85 (atom -> true .) + in reduce using rule 85 (atom -> true .) + else reduce using rule 85 (atom -> true .) + pool reduce using rule 85 (atom -> true .) + error reduce using rule 85 (atom -> true .) + ccur reduce using rule 85 (atom -> true .) + fi reduce using rule 85 (atom -> true .) + + +state 93 + + (86) atom -> false . + + arroba reduce using rule 86 (atom -> false .) + dot reduce using rule 86 (atom -> false .) + star reduce using rule 86 (atom -> false .) + div reduce using rule 86 (atom -> false .) + plus reduce using rule 86 (atom -> false .) + minus reduce using rule 86 (atom -> false .) + less reduce using rule 86 (atom -> false .) + lesseq reduce using rule 86 (atom -> false .) + equal reduce using rule 86 (atom -> false .) + semi reduce using rule 86 (atom -> false .) + of reduce using rule 86 (atom -> false .) + then reduce using rule 86 (atom -> false .) + loop reduce using rule 86 (atom -> false .) + cpar reduce using rule 86 (atom -> false .) + comma reduce using rule 86 (atom -> false .) + in reduce using rule 86 (atom -> false .) + else reduce using rule 86 (atom -> false .) + pool reduce using rule 86 (atom -> false .) + error reduce using rule 86 (atom -> false .) + ccur reduce using rule 86 (atom -> false .) + fi reduce using rule 86 (atom -> false .) + + +state 94 + + (87) atom -> string . + + arroba reduce using rule 87 (atom -> string .) + dot reduce using rule 87 (atom -> string .) + star reduce using rule 87 (atom -> string .) + div reduce using rule 87 (atom -> string .) + plus reduce using rule 87 (atom -> string .) + minus reduce using rule 87 (atom -> string .) + less reduce using rule 87 (atom -> string .) + lesseq reduce using rule 87 (atom -> string .) + equal reduce using rule 87 (atom -> string .) + semi reduce using rule 87 (atom -> string .) + of reduce using rule 87 (atom -> string .) + then reduce using rule 87 (atom -> string .) + loop reduce using rule 87 (atom -> string .) + cpar reduce using rule 87 (atom -> string .) + comma reduce using rule 87 (atom -> string .) + in reduce using rule 87 (atom -> string .) + else reduce using rule 87 (atom -> string .) + pool reduce using rule 87 (atom -> string .) + error reduce using rule 87 (atom -> string .) + ccur reduce using rule 87 (atom -> string .) + fi reduce using rule 87 (atom -> string .) + + +state 95 + + (24) def_func -> error opar formals cpar colon . type ocur expr ccur + + type shift and go to state 138 + + +state 96 + + (31) param_list -> param comma param_list . + + cpar reduce using rule 31 (param_list -> param comma param_list .) + + +state 97 + + (34) param -> id colon type . + + comma reduce using rule 34 (param -> id colon type .) + cpar reduce using rule 34 (param -> id colon type .) + larrow reduce using rule 34 (param -> id colon type .) + in reduce using rule 34 (param -> id colon type .) + + +state 98 + + (17) def_attr -> id colon type larrow expr . + + semi reduce using rule 17 (def_attr -> id colon type larrow expr .) + + +state 99 + + (22) def_attr -> id colon type larrow error . + + semi reduce using rule 22 (def_attr -> id colon type larrow error .) + + +state 100 + + (21) def_attr -> id colon error larrow expr . + + semi reduce using rule 21 (def_attr -> id colon error larrow expr .) + + +state 101 + + (23) def_func -> id opar formals cpar colon . type ocur expr ccur + (26) def_func -> id opar formals cpar colon . error ocur expr ccur + (27) def_func -> id opar formals cpar colon . type ocur error ccur + + type shift and go to state 139 + error shift and go to state 140 + + +state 102 + + (25) def_func -> id opar error cpar colon . type ocur expr ccur + + type shift and go to state 141 + + +state 103 + + (7) def_class -> class type inherits type ocur feature_list ccur semi . + + error reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + class reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + $end reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + + +state 104 + + (11) def_class -> class type inherits error ocur feature_list ccur semi . + + error reduce using rule 11 (def_class -> class type inherits error ocur feature_list ccur semi .) + class reduce using rule 11 (def_class -> class type inherits error ocur feature_list ccur semi .) + $end reduce using rule 11 (def_class -> class type inherits error ocur feature_list ccur semi .) + + +state 105 + + (10) def_class -> class error inherits error ocur feature_list ccur semi . + + error reduce using rule 10 (def_class -> class error inherits error ocur feature_list ccur semi .) + class reduce using rule 10 (def_class -> class error inherits error ocur feature_list ccur semi .) + $end reduce using rule 10 (def_class -> class error inherits error ocur feature_list ccur semi .) + + +state 106 + + (9) def_class -> class error inherits type ocur feature_list ccur semi . + + error reduce using rule 9 (def_class -> class error inherits type ocur feature_list ccur semi .) + class reduce using rule 9 (def_class -> class error inherits type ocur feature_list ccur semi .) + $end reduce using rule 9 (def_class -> class error inherits type ocur feature_list ccur semi .) + + +state 107 + + (35) expr -> let let_list . in expr + (37) expr -> let let_list . in error + + in shift and go to state 142 + + +state 108 + + (36) expr -> let error . in expr + (52) let_list -> error . let_list + (50) let_list -> . let_assign + (51) let_list -> . let_assign comma let_list + (52) let_list -> . error let_list + (53) let_assign -> . param larrow expr + (54) let_assign -> . param + (34) param -> . id colon type + + in shift and go to state 144 + error shift and go to state 143 + id shift and go to state 48 + + let_list shift and go to state 145 + let_assign shift and go to state 109 + param shift and go to state 110 + +state 109 + + (50) let_list -> let_assign . + (51) let_list -> let_assign . comma let_list + + in reduce using rule 50 (let_list -> let_assign .) + comma shift and go to state 146 + + +state 110 + + (53) let_assign -> param . larrow expr + (54) let_assign -> param . + + larrow shift and go to state 147 + comma reduce using rule 54 (let_assign -> param .) + in reduce using rule 54 (let_assign -> param .) + + +state 111 + + (38) expr -> case expr . of cases_list esac + (40) expr -> case expr . of error esac + + of shift and go to state 148 + + +state 112 + + (39) expr -> case error . of cases_list esac + + of shift and go to state 149 + + +state 113 + + (41) expr -> if expr . then expr else expr fi + (43) expr -> if expr . then error else expr fi + (44) expr -> if expr . then expr else error fi + + then shift and go to state 150 + + +state 114 + + (42) expr -> if error . then expr else expr fi + + then shift and go to state 151 + + +state 115 + + (45) expr -> while expr . loop expr pool + (47) expr -> while expr . loop error pool + (48) expr -> while expr . loop expr error + + loop shift and go to state 152 + + +state 116 + + (46) expr -> while error . loop expr pool + + loop shift and go to state 153 + + +state 117 + + (59) arith -> id larrow . expr + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 154 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 118 + + (92) func_call -> id opar . args cpar + (93) args -> . arg_list + (94) args -> . arg_list_empty + (95) arg_list -> . expr + (96) arg_list -> . expr comma arg_list + (97) arg_list -> . error arg_list + (98) arg_list_empty -> . epsilon + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (2) epsilon -> . + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 159 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + cpar reduce using rule 2 (epsilon -> .) + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + args shift and go to state 155 + arg_list shift and go to state 156 + arg_list_empty shift and go to state 157 + expr shift and go to state 158 + epsilon shift and go to state 160 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 119 + + (60) arith -> not comp . + (62) comp -> comp . less op + (63) comp -> comp . lesseq op + (64) comp -> comp . equal op + + semi reduce using rule 60 (arith -> not comp .) + of reduce using rule 60 (arith -> not comp .) + then reduce using rule 60 (arith -> not comp .) + loop reduce using rule 60 (arith -> not comp .) + cpar reduce using rule 60 (arith -> not comp .) + comma reduce using rule 60 (arith -> not comp .) + in reduce using rule 60 (arith -> not comp .) + else reduce using rule 60 (arith -> not comp .) + pool reduce using rule 60 (arith -> not comp .) + error reduce using rule 60 (arith -> not comp .) + ccur reduce using rule 60 (arith -> not comp .) + fi reduce using rule 60 (arith -> not comp .) + less shift and go to state 121 + lesseq shift and go to state 122 + equal shift and go to state 123 + + +state 120 + + (81) atom -> id . + (92) func_call -> id . opar args cpar + + arroba reduce using rule 81 (atom -> id .) + dot reduce using rule 81 (atom -> id .) + star reduce using rule 81 (atom -> id .) + div reduce using rule 81 (atom -> id .) + plus reduce using rule 81 (atom -> id .) + minus reduce using rule 81 (atom -> id .) + less reduce using rule 81 (atom -> id .) + lesseq reduce using rule 81 (atom -> id .) + equal reduce using rule 81 (atom -> id .) + semi reduce using rule 81 (atom -> id .) + of reduce using rule 81 (atom -> id .) + then reduce using rule 81 (atom -> id .) + loop reduce using rule 81 (atom -> id .) + cpar reduce using rule 81 (atom -> id .) + comma reduce using rule 81 (atom -> id .) + in reduce using rule 81 (atom -> id .) + else reduce using rule 81 (atom -> id .) + pool reduce using rule 81 (atom -> id .) + error reduce using rule 81 (atom -> id .) + ccur reduce using rule 81 (atom -> id .) + fi reduce using rule 81 (atom -> id .) + opar shift and go to state 118 + + +state 121 + + (62) comp -> comp less . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + op shift and go to state 161 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 122 + + (63) comp -> comp lesseq . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + op shift and go to state 162 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 123 + + (64) comp -> comp equal . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + op shift and go to state 163 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 124 + + (66) op -> op plus . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + term shift and go to state 164 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 125 + + (67) op -> op minus . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + term shift and go to state 165 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 126 + + (69) term -> term star . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + base_call shift and go to state 166 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 127 + + (70) term -> term div . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + base_call shift and go to state 167 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 128 + + (71) term -> isvoid base_call . + + star reduce using rule 71 (term -> isvoid base_call .) + div reduce using rule 71 (term -> isvoid base_call .) + plus reduce using rule 71 (term -> isvoid base_call .) + minus reduce using rule 71 (term -> isvoid base_call .) + less reduce using rule 71 (term -> isvoid base_call .) + lesseq reduce using rule 71 (term -> isvoid base_call .) + equal reduce using rule 71 (term -> isvoid base_call .) + semi reduce using rule 71 (term -> isvoid base_call .) + of reduce using rule 71 (term -> isvoid base_call .) + then reduce using rule 71 (term -> isvoid base_call .) + loop reduce using rule 71 (term -> isvoid base_call .) + cpar reduce using rule 71 (term -> isvoid base_call .) + comma reduce using rule 71 (term -> isvoid base_call .) + in reduce using rule 71 (term -> isvoid base_call .) + else reduce using rule 71 (term -> isvoid base_call .) + pool reduce using rule 71 (term -> isvoid base_call .) + error reduce using rule 71 (term -> isvoid base_call .) + ccur reduce using rule 71 (term -> isvoid base_call .) + fi reduce using rule 71 (term -> isvoid base_call .) + + +state 129 + + (72) term -> nox base_call . + + star reduce using rule 72 (term -> nox base_call .) + div reduce using rule 72 (term -> nox base_call .) + plus reduce using rule 72 (term -> nox base_call .) + minus reduce using rule 72 (term -> nox base_call .) + less reduce using rule 72 (term -> nox base_call .) + lesseq reduce using rule 72 (term -> nox base_call .) + equal reduce using rule 72 (term -> nox base_call .) + semi reduce using rule 72 (term -> nox base_call .) + of reduce using rule 72 (term -> nox base_call .) + then reduce using rule 72 (term -> nox base_call .) + loop reduce using rule 72 (term -> nox base_call .) + cpar reduce using rule 72 (term -> nox base_call .) + comma reduce using rule 72 (term -> nox base_call .) + in reduce using rule 72 (term -> nox base_call .) + else reduce using rule 72 (term -> nox base_call .) + pool reduce using rule 72 (term -> nox base_call .) + error reduce using rule 72 (term -> nox base_call .) + ccur reduce using rule 72 (term -> nox base_call .) + fi reduce using rule 72 (term -> nox base_call .) + + +state 130 + + (74) base_call -> factor arroba . type dot func_call + + type shift and go to state 168 + + +state 131 + + (78) factor -> factor dot . func_call + (92) func_call -> . id opar args cpar + + id shift and go to state 170 + + func_call shift and go to state 169 + +state 132 + + (77) factor -> opar expr . cpar + + cpar shift and go to state 171 + + +state 133 + + (82) atom -> new type . + + arroba reduce using rule 82 (atom -> new type .) + dot reduce using rule 82 (atom -> new type .) + star reduce using rule 82 (atom -> new type .) + div reduce using rule 82 (atom -> new type .) + plus reduce using rule 82 (atom -> new type .) + minus reduce using rule 82 (atom -> new type .) + less reduce using rule 82 (atom -> new type .) + lesseq reduce using rule 82 (atom -> new type .) + equal reduce using rule 82 (atom -> new type .) + semi reduce using rule 82 (atom -> new type .) + of reduce using rule 82 (atom -> new type .) + then reduce using rule 82 (atom -> new type .) + loop reduce using rule 82 (atom -> new type .) + cpar reduce using rule 82 (atom -> new type .) + comma reduce using rule 82 (atom -> new type .) + in reduce using rule 82 (atom -> new type .) + else reduce using rule 82 (atom -> new type .) + pool reduce using rule 82 (atom -> new type .) + error reduce using rule 82 (atom -> new type .) + ccur reduce using rule 82 (atom -> new type .) + fi reduce using rule 82 (atom -> new type .) + + +state 134 + + (83) atom -> new error . + + arroba reduce using rule 83 (atom -> new error .) + dot reduce using rule 83 (atom -> new error .) + star reduce using rule 83 (atom -> new error .) + div reduce using rule 83 (atom -> new error .) + plus reduce using rule 83 (atom -> new error .) + minus reduce using rule 83 (atom -> new error .) + less reduce using rule 83 (atom -> new error .) + lesseq reduce using rule 83 (atom -> new error .) + equal reduce using rule 83 (atom -> new error .) + semi reduce using rule 83 (atom -> new error .) + of reduce using rule 83 (atom -> new error .) + then reduce using rule 83 (atom -> new error .) + loop reduce using rule 83 (atom -> new error .) + cpar reduce using rule 83 (atom -> new error .) + comma reduce using rule 83 (atom -> new error .) + in reduce using rule 83 (atom -> new error .) + else reduce using rule 83 (atom -> new error .) + pool reduce using rule 83 (atom -> new error .) + error reduce using rule 83 (atom -> new error .) + ccur reduce using rule 83 (atom -> new error .) + fi reduce using rule 83 (atom -> new error .) + + +state 135 + + (84) atom -> ocur block . ccur + + ccur shift and go to state 172 + + +state 136 + + (88) block -> expr . semi + (89) block -> expr . semi block + + semi shift and go to state 173 + + +state 137 + + (90) block -> error . block + (91) block -> error . + (88) block -> . expr semi + (89) block -> . expr semi block + (90) block -> . error block + (91) block -> . error + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + ccur reduce using rule 91 (block -> error .) + error shift and go to state 137 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + block shift and go to state 174 + expr shift and go to state 136 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 138 + + (24) def_func -> error opar formals cpar colon type . ocur expr ccur + + ocur shift and go to state 175 + + +state 139 + + (23) def_func -> id opar formals cpar colon type . ocur expr ccur + (27) def_func -> id opar formals cpar colon type . ocur error ccur + + ocur shift and go to state 176 + + +state 140 + + (26) def_func -> id opar formals cpar colon error . ocur expr ccur + + ocur shift and go to state 177 + + +state 141 + + (25) def_func -> id opar error cpar colon type . ocur expr ccur + + ocur shift and go to state 178 + + +state 142 + + (35) expr -> let let_list in . expr + (37) expr -> let let_list in . error + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 180 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 179 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 143 + + (52) let_list -> error . let_list + (50) let_list -> . let_assign + (51) let_list -> . let_assign comma let_list + (52) let_list -> . error let_list + (53) let_assign -> . param larrow expr + (54) let_assign -> . param + (34) param -> . id colon type + + error shift and go to state 143 + id shift and go to state 48 + + let_list shift and go to state 145 + let_assign shift and go to state 109 + param shift and go to state 110 + +state 144 + + (36) expr -> let error in . expr + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 181 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 145 + + (52) let_list -> error let_list . + + in reduce using rule 52 (let_list -> error let_list .) + + +state 146 + + (51) let_list -> let_assign comma . let_list + (50) let_list -> . let_assign + (51) let_list -> . let_assign comma let_list + (52) let_list -> . error let_list + (53) let_assign -> . param larrow expr + (54) let_assign -> . param + (34) param -> . id colon type + + error shift and go to state 143 + id shift and go to state 48 + + let_assign shift and go to state 109 + let_list shift and go to state 182 + param shift and go to state 110 + +state 147 + + (53) let_assign -> param larrow . expr + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 183 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 148 + + (38) expr -> case expr of . cases_list esac + (40) expr -> case expr of . error esac + (55) cases_list -> . casep semi + (56) cases_list -> . casep semi cases_list + (57) cases_list -> . error cases_list + (58) casep -> . id colon type rarrow expr + + error shift and go to state 185 + id shift and go to state 187 + + cases_list shift and go to state 184 + casep shift and go to state 186 + +state 149 + + (39) expr -> case error of . cases_list esac + (55) cases_list -> . casep semi + (56) cases_list -> . casep semi cases_list + (57) cases_list -> . error cases_list + (58) casep -> . id colon type rarrow expr + + error shift and go to state 188 + id shift and go to state 187 + + cases_list shift and go to state 189 + casep shift and go to state 186 + +state 150 + + (41) expr -> if expr then . expr else expr fi + (43) expr -> if expr then . error else expr fi + (44) expr -> if expr then . expr else error fi + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 191 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 190 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 151 + + (42) expr -> if error then . expr else expr fi + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 192 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 152 + + (45) expr -> while expr loop . expr pool + (47) expr -> while expr loop . error pool + (48) expr -> while expr loop . expr error + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 194 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 193 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 153 + + (46) expr -> while error loop . expr pool + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 195 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 154 + + (59) arith -> id larrow expr . + + semi reduce using rule 59 (arith -> id larrow expr .) + of reduce using rule 59 (arith -> id larrow expr .) + then reduce using rule 59 (arith -> id larrow expr .) + loop reduce using rule 59 (arith -> id larrow expr .) + cpar reduce using rule 59 (arith -> id larrow expr .) + comma reduce using rule 59 (arith -> id larrow expr .) + in reduce using rule 59 (arith -> id larrow expr .) + else reduce using rule 59 (arith -> id larrow expr .) + pool reduce using rule 59 (arith -> id larrow expr .) + error reduce using rule 59 (arith -> id larrow expr .) + ccur reduce using rule 59 (arith -> id larrow expr .) + fi reduce using rule 59 (arith -> id larrow expr .) + + +state 155 + + (92) func_call -> id opar args . cpar + + cpar shift and go to state 196 + + +state 156 + + (93) args -> arg_list . + + cpar reduce using rule 93 (args -> arg_list .) + + +state 157 + + (94) args -> arg_list_empty . + + cpar reduce using rule 94 (args -> arg_list_empty .) + + +state 158 + + (95) arg_list -> expr . + (96) arg_list -> expr . comma arg_list + + cpar reduce using rule 95 (arg_list -> expr .) + comma shift and go to state 197 + + +state 159 + + (97) arg_list -> error . arg_list + (95) arg_list -> . expr + (96) arg_list -> . expr comma arg_list + (97) arg_list -> . error arg_list + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 159 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + arg_list shift and go to state 198 + expr shift and go to state 158 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 160 + + (98) arg_list_empty -> epsilon . + + cpar reduce using rule 98 (arg_list_empty -> epsilon .) + + +state 161 + + (62) comp -> comp less op . + (66) op -> op . plus term + (67) op -> op . minus term + + less reduce using rule 62 (comp -> comp less op .) + lesseq reduce using rule 62 (comp -> comp less op .) + equal reduce using rule 62 (comp -> comp less op .) + semi reduce using rule 62 (comp -> comp less op .) + of reduce using rule 62 (comp -> comp less op .) + then reduce using rule 62 (comp -> comp less op .) + loop reduce using rule 62 (comp -> comp less op .) + cpar reduce using rule 62 (comp -> comp less op .) + comma reduce using rule 62 (comp -> comp less op .) + in reduce using rule 62 (comp -> comp less op .) + else reduce using rule 62 (comp -> comp less op .) + pool reduce using rule 62 (comp -> comp less op .) + error reduce using rule 62 (comp -> comp less op .) + ccur reduce using rule 62 (comp -> comp less op .) + fi reduce using rule 62 (comp -> comp less op .) + plus shift and go to state 124 + minus shift and go to state 125 + + +state 162 + + (63) comp -> comp lesseq op . + (66) op -> op . plus term + (67) op -> op . minus term + + less reduce using rule 63 (comp -> comp lesseq op .) + lesseq reduce using rule 63 (comp -> comp lesseq op .) + equal reduce using rule 63 (comp -> comp lesseq op .) + semi reduce using rule 63 (comp -> comp lesseq op .) + of reduce using rule 63 (comp -> comp lesseq op .) + then reduce using rule 63 (comp -> comp lesseq op .) + loop reduce using rule 63 (comp -> comp lesseq op .) + cpar reduce using rule 63 (comp -> comp lesseq op .) + comma reduce using rule 63 (comp -> comp lesseq op .) + in reduce using rule 63 (comp -> comp lesseq op .) + else reduce using rule 63 (comp -> comp lesseq op .) + pool reduce using rule 63 (comp -> comp lesseq op .) + error reduce using rule 63 (comp -> comp lesseq op .) + ccur reduce using rule 63 (comp -> comp lesseq op .) + fi reduce using rule 63 (comp -> comp lesseq op .) + plus shift and go to state 124 + minus shift and go to state 125 + + +state 163 + + (64) comp -> comp equal op . + (66) op -> op . plus term + (67) op -> op . minus term + + less reduce using rule 64 (comp -> comp equal op .) + lesseq reduce using rule 64 (comp -> comp equal op .) + equal reduce using rule 64 (comp -> comp equal op .) + semi reduce using rule 64 (comp -> comp equal op .) + of reduce using rule 64 (comp -> comp equal op .) + then reduce using rule 64 (comp -> comp equal op .) + loop reduce using rule 64 (comp -> comp equal op .) + cpar reduce using rule 64 (comp -> comp equal op .) + comma reduce using rule 64 (comp -> comp equal op .) + in reduce using rule 64 (comp -> comp equal op .) + else reduce using rule 64 (comp -> comp equal op .) + pool reduce using rule 64 (comp -> comp equal op .) + error reduce using rule 64 (comp -> comp equal op .) + ccur reduce using rule 64 (comp -> comp equal op .) + fi reduce using rule 64 (comp -> comp equal op .) + plus shift and go to state 124 + minus shift and go to state 125 + + +state 164 + + (66) op -> op plus term . + (69) term -> term . star base_call + (70) term -> term . div base_call + + plus reduce using rule 66 (op -> op plus term .) + minus reduce using rule 66 (op -> op plus term .) + less reduce using rule 66 (op -> op plus term .) + lesseq reduce using rule 66 (op -> op plus term .) + equal reduce using rule 66 (op -> op plus term .) + semi reduce using rule 66 (op -> op plus term .) + of reduce using rule 66 (op -> op plus term .) + then reduce using rule 66 (op -> op plus term .) + loop reduce using rule 66 (op -> op plus term .) + cpar reduce using rule 66 (op -> op plus term .) + comma reduce using rule 66 (op -> op plus term .) + in reduce using rule 66 (op -> op plus term .) + else reduce using rule 66 (op -> op plus term .) + pool reduce using rule 66 (op -> op plus term .) + error reduce using rule 66 (op -> op plus term .) + ccur reduce using rule 66 (op -> op plus term .) + fi reduce using rule 66 (op -> op plus term .) + star shift and go to state 126 + div shift and go to state 127 + + +state 165 + + (67) op -> op minus term . + (69) term -> term . star base_call + (70) term -> term . div base_call + + plus reduce using rule 67 (op -> op minus term .) + minus reduce using rule 67 (op -> op minus term .) + less reduce using rule 67 (op -> op minus term .) + lesseq reduce using rule 67 (op -> op minus term .) + equal reduce using rule 67 (op -> op minus term .) + semi reduce using rule 67 (op -> op minus term .) + of reduce using rule 67 (op -> op minus term .) + then reduce using rule 67 (op -> op minus term .) + loop reduce using rule 67 (op -> op minus term .) + cpar reduce using rule 67 (op -> op minus term .) + comma reduce using rule 67 (op -> op minus term .) + in reduce using rule 67 (op -> op minus term .) + else reduce using rule 67 (op -> op minus term .) + pool reduce using rule 67 (op -> op minus term .) + error reduce using rule 67 (op -> op minus term .) + ccur reduce using rule 67 (op -> op minus term .) + fi reduce using rule 67 (op -> op minus term .) + star shift and go to state 126 + div shift and go to state 127 + + +state 166 + + (69) term -> term star base_call . + + star reduce using rule 69 (term -> term star base_call .) + div reduce using rule 69 (term -> term star base_call .) + plus reduce using rule 69 (term -> term star base_call .) + minus reduce using rule 69 (term -> term star base_call .) + less reduce using rule 69 (term -> term star base_call .) + lesseq reduce using rule 69 (term -> term star base_call .) + equal reduce using rule 69 (term -> term star base_call .) + semi reduce using rule 69 (term -> term star base_call .) + of reduce using rule 69 (term -> term star base_call .) + then reduce using rule 69 (term -> term star base_call .) + loop reduce using rule 69 (term -> term star base_call .) + cpar reduce using rule 69 (term -> term star base_call .) + comma reduce using rule 69 (term -> term star base_call .) + in reduce using rule 69 (term -> term star base_call .) + else reduce using rule 69 (term -> term star base_call .) + pool reduce using rule 69 (term -> term star base_call .) + error reduce using rule 69 (term -> term star base_call .) + ccur reduce using rule 69 (term -> term star base_call .) + fi reduce using rule 69 (term -> term star base_call .) + + +state 167 + + (70) term -> term div base_call . + + star reduce using rule 70 (term -> term div base_call .) + div reduce using rule 70 (term -> term div base_call .) + plus reduce using rule 70 (term -> term div base_call .) + minus reduce using rule 70 (term -> term div base_call .) + less reduce using rule 70 (term -> term div base_call .) + lesseq reduce using rule 70 (term -> term div base_call .) + equal reduce using rule 70 (term -> term div base_call .) + semi reduce using rule 70 (term -> term div base_call .) + of reduce using rule 70 (term -> term div base_call .) + then reduce using rule 70 (term -> term div base_call .) + loop reduce using rule 70 (term -> term div base_call .) + cpar reduce using rule 70 (term -> term div base_call .) + comma reduce using rule 70 (term -> term div base_call .) + in reduce using rule 70 (term -> term div base_call .) + else reduce using rule 70 (term -> term div base_call .) + pool reduce using rule 70 (term -> term div base_call .) + error reduce using rule 70 (term -> term div base_call .) + ccur reduce using rule 70 (term -> term div base_call .) + fi reduce using rule 70 (term -> term div base_call .) + + +state 168 + + (74) base_call -> factor arroba type . dot func_call + + dot shift and go to state 199 + + +state 169 + + (78) factor -> factor dot func_call . + + arroba reduce using rule 78 (factor -> factor dot func_call .) + dot reduce using rule 78 (factor -> factor dot func_call .) + star reduce using rule 78 (factor -> factor dot func_call .) + div reduce using rule 78 (factor -> factor dot func_call .) + plus reduce using rule 78 (factor -> factor dot func_call .) + minus reduce using rule 78 (factor -> factor dot func_call .) + less reduce using rule 78 (factor -> factor dot func_call .) + lesseq reduce using rule 78 (factor -> factor dot func_call .) + equal reduce using rule 78 (factor -> factor dot func_call .) + semi reduce using rule 78 (factor -> factor dot func_call .) + of reduce using rule 78 (factor -> factor dot func_call .) + then reduce using rule 78 (factor -> factor dot func_call .) + loop reduce using rule 78 (factor -> factor dot func_call .) + cpar reduce using rule 78 (factor -> factor dot func_call .) + comma reduce using rule 78 (factor -> factor dot func_call .) + in reduce using rule 78 (factor -> factor dot func_call .) + else reduce using rule 78 (factor -> factor dot func_call .) + pool reduce using rule 78 (factor -> factor dot func_call .) + error reduce using rule 78 (factor -> factor dot func_call .) + ccur reduce using rule 78 (factor -> factor dot func_call .) + fi reduce using rule 78 (factor -> factor dot func_call .) + + +state 170 + + (92) func_call -> id . opar args cpar + + opar shift and go to state 118 + + +state 171 + + (77) factor -> opar expr cpar . + + arroba reduce using rule 77 (factor -> opar expr cpar .) + dot reduce using rule 77 (factor -> opar expr cpar .) + star reduce using rule 77 (factor -> opar expr cpar .) + div reduce using rule 77 (factor -> opar expr cpar .) + plus reduce using rule 77 (factor -> opar expr cpar .) + minus reduce using rule 77 (factor -> opar expr cpar .) + less reduce using rule 77 (factor -> opar expr cpar .) + lesseq reduce using rule 77 (factor -> opar expr cpar .) + equal reduce using rule 77 (factor -> opar expr cpar .) + semi reduce using rule 77 (factor -> opar expr cpar .) + of reduce using rule 77 (factor -> opar expr cpar .) + then reduce using rule 77 (factor -> opar expr cpar .) + loop reduce using rule 77 (factor -> opar expr cpar .) + cpar reduce using rule 77 (factor -> opar expr cpar .) + comma reduce using rule 77 (factor -> opar expr cpar .) + in reduce using rule 77 (factor -> opar expr cpar .) + else reduce using rule 77 (factor -> opar expr cpar .) + pool reduce using rule 77 (factor -> opar expr cpar .) + error reduce using rule 77 (factor -> opar expr cpar .) + ccur reduce using rule 77 (factor -> opar expr cpar .) + fi reduce using rule 77 (factor -> opar expr cpar .) + + +state 172 + + (84) atom -> ocur block ccur . + + arroba reduce using rule 84 (atom -> ocur block ccur .) + dot reduce using rule 84 (atom -> ocur block ccur .) + star reduce using rule 84 (atom -> ocur block ccur .) + div reduce using rule 84 (atom -> ocur block ccur .) + plus reduce using rule 84 (atom -> ocur block ccur .) + minus reduce using rule 84 (atom -> ocur block ccur .) + less reduce using rule 84 (atom -> ocur block ccur .) + lesseq reduce using rule 84 (atom -> ocur block ccur .) + equal reduce using rule 84 (atom -> ocur block ccur .) + semi reduce using rule 84 (atom -> ocur block ccur .) + of reduce using rule 84 (atom -> ocur block ccur .) + then reduce using rule 84 (atom -> ocur block ccur .) + loop reduce using rule 84 (atom -> ocur block ccur .) + cpar reduce using rule 84 (atom -> ocur block ccur .) + comma reduce using rule 84 (atom -> ocur block ccur .) + in reduce using rule 84 (atom -> ocur block ccur .) + else reduce using rule 84 (atom -> ocur block ccur .) + pool reduce using rule 84 (atom -> ocur block ccur .) + error reduce using rule 84 (atom -> ocur block ccur .) + ccur reduce using rule 84 (atom -> ocur block ccur .) + fi reduce using rule 84 (atom -> ocur block ccur .) + + +state 173 + + (88) block -> expr semi . + (89) block -> expr semi . block + (88) block -> . expr semi + (89) block -> . expr semi block + (90) block -> . error block + (91) block -> . error + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + ccur reduce using rule 88 (block -> expr semi .) + error shift and go to state 137 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 136 + block shift and go to state 200 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 174 + + (90) block -> error block . + + ccur reduce using rule 90 (block -> error block .) + + +state 175 + + (24) def_func -> error opar formals cpar colon type ocur . expr ccur + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 201 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 176 + + (23) def_func -> id opar formals cpar colon type ocur . expr ccur + (27) def_func -> id opar formals cpar colon type ocur . error ccur + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 203 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 202 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 177 + + (26) def_func -> id opar formals cpar colon error ocur . expr ccur + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 204 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 178 + + (25) def_func -> id opar error cpar colon type ocur . expr ccur + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 205 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 179 + + (35) expr -> let let_list in expr . + + semi reduce using rule 35 (expr -> let let_list in expr .) + of reduce using rule 35 (expr -> let let_list in expr .) + then reduce using rule 35 (expr -> let let_list in expr .) + loop reduce using rule 35 (expr -> let let_list in expr .) + cpar reduce using rule 35 (expr -> let let_list in expr .) + comma reduce using rule 35 (expr -> let let_list in expr .) + in reduce using rule 35 (expr -> let let_list in expr .) + else reduce using rule 35 (expr -> let let_list in expr .) + pool reduce using rule 35 (expr -> let let_list in expr .) + error reduce using rule 35 (expr -> let let_list in expr .) + ccur reduce using rule 35 (expr -> let let_list in expr .) + fi reduce using rule 35 (expr -> let let_list in expr .) + + +state 180 + + (37) expr -> let let_list in error . + + semi reduce using rule 37 (expr -> let let_list in error .) + of reduce using rule 37 (expr -> let let_list in error .) + then reduce using rule 37 (expr -> let let_list in error .) + loop reduce using rule 37 (expr -> let let_list in error .) + cpar reduce using rule 37 (expr -> let let_list in error .) + comma reduce using rule 37 (expr -> let let_list in error .) + in reduce using rule 37 (expr -> let let_list in error .) + else reduce using rule 37 (expr -> let let_list in error .) + pool reduce using rule 37 (expr -> let let_list in error .) + error reduce using rule 37 (expr -> let let_list in error .) + ccur reduce using rule 37 (expr -> let let_list in error .) + fi reduce using rule 37 (expr -> let let_list in error .) + + +state 181 + + (36) expr -> let error in expr . + + semi reduce using rule 36 (expr -> let error in expr .) + of reduce using rule 36 (expr -> let error in expr .) + then reduce using rule 36 (expr -> let error in expr .) + loop reduce using rule 36 (expr -> let error in expr .) + cpar reduce using rule 36 (expr -> let error in expr .) + comma reduce using rule 36 (expr -> let error in expr .) + in reduce using rule 36 (expr -> let error in expr .) + else reduce using rule 36 (expr -> let error in expr .) + pool reduce using rule 36 (expr -> let error in expr .) + error reduce using rule 36 (expr -> let error in expr .) + ccur reduce using rule 36 (expr -> let error in expr .) + fi reduce using rule 36 (expr -> let error in expr .) + + +state 182 + + (51) let_list -> let_assign comma let_list . + + in reduce using rule 51 (let_list -> let_assign comma let_list .) + + +state 183 + + (53) let_assign -> param larrow expr . + + comma reduce using rule 53 (let_assign -> param larrow expr .) + in reduce using rule 53 (let_assign -> param larrow expr .) + + +state 184 + + (38) expr -> case expr of cases_list . esac + + esac shift and go to state 206 + + +state 185 + + (40) expr -> case expr of error . esac + (57) cases_list -> error . cases_list + (55) cases_list -> . casep semi + (56) cases_list -> . casep semi cases_list + (57) cases_list -> . error cases_list + (58) casep -> . id colon type rarrow expr + + esac shift and go to state 207 + error shift and go to state 188 + id shift and go to state 187 + + cases_list shift and go to state 208 + casep shift and go to state 186 + +state 186 + + (55) cases_list -> casep . semi + (56) cases_list -> casep . semi cases_list + + semi shift and go to state 209 + + +state 187 + + (58) casep -> id . colon type rarrow expr + + colon shift and go to state 210 + + +state 188 + + (57) cases_list -> error . cases_list + (55) cases_list -> . casep semi + (56) cases_list -> . casep semi cases_list + (57) cases_list -> . error cases_list + (58) casep -> . id colon type rarrow expr + + error shift and go to state 188 + id shift and go to state 187 + + cases_list shift and go to state 208 + casep shift and go to state 186 + +state 189 + + (39) expr -> case error of cases_list . esac + + esac shift and go to state 211 + + +state 190 + + (41) expr -> if expr then expr . else expr fi + (44) expr -> if expr then expr . else error fi + + else shift and go to state 212 + + +state 191 + + (43) expr -> if expr then error . else expr fi + + else shift and go to state 213 + + +state 192 + + (42) expr -> if error then expr . else expr fi + + else shift and go to state 214 + + +state 193 + + (45) expr -> while expr loop expr . pool + (48) expr -> while expr loop expr . error + + pool shift and go to state 215 + error shift and go to state 216 + + +state 194 + + (47) expr -> while expr loop error . pool + + pool shift and go to state 217 + + +state 195 + + (46) expr -> while error loop expr . pool + + pool shift and go to state 218 + + +state 196 + + (92) func_call -> id opar args cpar . + + arroba reduce using rule 92 (func_call -> id opar args cpar .) + dot reduce using rule 92 (func_call -> id opar args cpar .) + star reduce using rule 92 (func_call -> id opar args cpar .) + div reduce using rule 92 (func_call -> id opar args cpar .) + plus reduce using rule 92 (func_call -> id opar args cpar .) + minus reduce using rule 92 (func_call -> id opar args cpar .) + less reduce using rule 92 (func_call -> id opar args cpar .) + lesseq reduce using rule 92 (func_call -> id opar args cpar .) + equal reduce using rule 92 (func_call -> id opar args cpar .) + semi reduce using rule 92 (func_call -> id opar args cpar .) + of reduce using rule 92 (func_call -> id opar args cpar .) + then reduce using rule 92 (func_call -> id opar args cpar .) + loop reduce using rule 92 (func_call -> id opar args cpar .) + cpar reduce using rule 92 (func_call -> id opar args cpar .) + comma reduce using rule 92 (func_call -> id opar args cpar .) + in reduce using rule 92 (func_call -> id opar args cpar .) + else reduce using rule 92 (func_call -> id opar args cpar .) + pool reduce using rule 92 (func_call -> id opar args cpar .) + error reduce using rule 92 (func_call -> id opar args cpar .) + ccur reduce using rule 92 (func_call -> id opar args cpar .) + fi reduce using rule 92 (func_call -> id opar args cpar .) + + +state 197 + + (96) arg_list -> expr comma . arg_list + (95) arg_list -> . expr + (96) arg_list -> . expr comma arg_list + (97) arg_list -> . error arg_list + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 159 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 158 + arg_list shift and go to state 219 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 198 + + (97) arg_list -> error arg_list . + + cpar reduce using rule 97 (arg_list -> error arg_list .) + + +state 199 + + (74) base_call -> factor arroba type dot . func_call + (92) func_call -> . id opar args cpar + + id shift and go to state 170 + + func_call shift and go to state 220 + +state 200 + + (89) block -> expr semi block . + + ccur reduce using rule 89 (block -> expr semi block .) + + +state 201 + + (24) def_func -> error opar formals cpar colon type ocur expr . ccur + + ccur shift and go to state 221 + + +state 202 + + (23) def_func -> id opar formals cpar colon type ocur expr . ccur + + ccur shift and go to state 222 + + +state 203 + + (27) def_func -> id opar formals cpar colon type ocur error . ccur + + ccur shift and go to state 223 + + +state 204 + + (26) def_func -> id opar formals cpar colon error ocur expr . ccur + + ccur shift and go to state 224 + + +state 205 + + (25) def_func -> id opar error cpar colon type ocur expr . ccur + + ccur shift and go to state 225 + + +state 206 + + (38) expr -> case expr of cases_list esac . + + semi reduce using rule 38 (expr -> case expr of cases_list esac .) + of reduce using rule 38 (expr -> case expr of cases_list esac .) + then reduce using rule 38 (expr -> case expr of cases_list esac .) + loop reduce using rule 38 (expr -> case expr of cases_list esac .) + cpar reduce using rule 38 (expr -> case expr of cases_list esac .) + comma reduce using rule 38 (expr -> case expr of cases_list esac .) + in reduce using rule 38 (expr -> case expr of cases_list esac .) + else reduce using rule 38 (expr -> case expr of cases_list esac .) + pool reduce using rule 38 (expr -> case expr of cases_list esac .) + error reduce using rule 38 (expr -> case expr of cases_list esac .) + ccur reduce using rule 38 (expr -> case expr of cases_list esac .) + fi reduce using rule 38 (expr -> case expr of cases_list esac .) + + +state 207 + + (40) expr -> case expr of error esac . + + semi reduce using rule 40 (expr -> case expr of error esac .) + of reduce using rule 40 (expr -> case expr of error esac .) + then reduce using rule 40 (expr -> case expr of error esac .) + loop reduce using rule 40 (expr -> case expr of error esac .) + cpar reduce using rule 40 (expr -> case expr of error esac .) + comma reduce using rule 40 (expr -> case expr of error esac .) + in reduce using rule 40 (expr -> case expr of error esac .) + else reduce using rule 40 (expr -> case expr of error esac .) + pool reduce using rule 40 (expr -> case expr of error esac .) + error reduce using rule 40 (expr -> case expr of error esac .) + ccur reduce using rule 40 (expr -> case expr of error esac .) + fi reduce using rule 40 (expr -> case expr of error esac .) + + +state 208 + + (57) cases_list -> error cases_list . + + esac reduce using rule 57 (cases_list -> error cases_list .) + + +state 209 + + (55) cases_list -> casep semi . + (56) cases_list -> casep semi . cases_list + (55) cases_list -> . casep semi + (56) cases_list -> . casep semi cases_list + (57) cases_list -> . error cases_list + (58) casep -> . id colon type rarrow expr + + esac reduce using rule 55 (cases_list -> casep semi .) + error shift and go to state 188 + id shift and go to state 187 + + casep shift and go to state 186 + cases_list shift and go to state 226 + +state 210 + + (58) casep -> id colon . type rarrow expr + + type shift and go to state 227 + + +state 211 + + (39) expr -> case error of cases_list esac . + + semi reduce using rule 39 (expr -> case error of cases_list esac .) + of reduce using rule 39 (expr -> case error of cases_list esac .) + then reduce using rule 39 (expr -> case error of cases_list esac .) + loop reduce using rule 39 (expr -> case error of cases_list esac .) + cpar reduce using rule 39 (expr -> case error of cases_list esac .) + comma reduce using rule 39 (expr -> case error of cases_list esac .) + in reduce using rule 39 (expr -> case error of cases_list esac .) + else reduce using rule 39 (expr -> case error of cases_list esac .) + pool reduce using rule 39 (expr -> case error of cases_list esac .) + error reduce using rule 39 (expr -> case error of cases_list esac .) + ccur reduce using rule 39 (expr -> case error of cases_list esac .) + fi reduce using rule 39 (expr -> case error of cases_list esac .) + + +state 212 + + (41) expr -> if expr then expr else . expr fi + (44) expr -> if expr then expr else . error fi + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 229 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 228 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 213 + + (43) expr -> if expr then error else . expr fi + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 230 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 214 + + (42) expr -> if error then expr else . expr fi + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 231 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 215 + + (45) expr -> while expr loop expr pool . + + semi reduce using rule 45 (expr -> while expr loop expr pool .) + of reduce using rule 45 (expr -> while expr loop expr pool .) + then reduce using rule 45 (expr -> while expr loop expr pool .) + loop reduce using rule 45 (expr -> while expr loop expr pool .) + cpar reduce using rule 45 (expr -> while expr loop expr pool .) + comma reduce using rule 45 (expr -> while expr loop expr pool .) + in reduce using rule 45 (expr -> while expr loop expr pool .) + else reduce using rule 45 (expr -> while expr loop expr pool .) + pool reduce using rule 45 (expr -> while expr loop expr pool .) + error reduce using rule 45 (expr -> while expr loop expr pool .) + ccur reduce using rule 45 (expr -> while expr loop expr pool .) + fi reduce using rule 45 (expr -> while expr loop expr pool .) + + +state 216 + + (48) expr -> while expr loop expr error . + + semi reduce using rule 48 (expr -> while expr loop expr error .) + of reduce using rule 48 (expr -> while expr loop expr error .) + then reduce using rule 48 (expr -> while expr loop expr error .) + loop reduce using rule 48 (expr -> while expr loop expr error .) + cpar reduce using rule 48 (expr -> while expr loop expr error .) + comma reduce using rule 48 (expr -> while expr loop expr error .) + in reduce using rule 48 (expr -> while expr loop expr error .) + else reduce using rule 48 (expr -> while expr loop expr error .) + pool reduce using rule 48 (expr -> while expr loop expr error .) + error reduce using rule 48 (expr -> while expr loop expr error .) + ccur reduce using rule 48 (expr -> while expr loop expr error .) + fi reduce using rule 48 (expr -> while expr loop expr error .) + + +state 217 + + (47) expr -> while expr loop error pool . + + semi reduce using rule 47 (expr -> while expr loop error pool .) + of reduce using rule 47 (expr -> while expr loop error pool .) + then reduce using rule 47 (expr -> while expr loop error pool .) + loop reduce using rule 47 (expr -> while expr loop error pool .) + cpar reduce using rule 47 (expr -> while expr loop error pool .) + comma reduce using rule 47 (expr -> while expr loop error pool .) + in reduce using rule 47 (expr -> while expr loop error pool .) + else reduce using rule 47 (expr -> while expr loop error pool .) + pool reduce using rule 47 (expr -> while expr loop error pool .) + error reduce using rule 47 (expr -> while expr loop error pool .) + ccur reduce using rule 47 (expr -> while expr loop error pool .) + fi reduce using rule 47 (expr -> while expr loop error pool .) + + +state 218 + + (46) expr -> while error loop expr pool . + + semi reduce using rule 46 (expr -> while error loop expr pool .) + of reduce using rule 46 (expr -> while error loop expr pool .) + then reduce using rule 46 (expr -> while error loop expr pool .) + loop reduce using rule 46 (expr -> while error loop expr pool .) + cpar reduce using rule 46 (expr -> while error loop expr pool .) + comma reduce using rule 46 (expr -> while error loop expr pool .) + in reduce using rule 46 (expr -> while error loop expr pool .) + else reduce using rule 46 (expr -> while error loop expr pool .) + pool reduce using rule 46 (expr -> while error loop expr pool .) + error reduce using rule 46 (expr -> while error loop expr pool .) + ccur reduce using rule 46 (expr -> while error loop expr pool .) + fi reduce using rule 46 (expr -> while error loop expr pool .) + + +state 219 + + (96) arg_list -> expr comma arg_list . + + cpar reduce using rule 96 (arg_list -> expr comma arg_list .) + + +state 220 + + (74) base_call -> factor arroba type dot func_call . + + star reduce using rule 74 (base_call -> factor arroba type dot func_call .) + div reduce using rule 74 (base_call -> factor arroba type dot func_call .) + plus reduce using rule 74 (base_call -> factor arroba type dot func_call .) + minus reduce using rule 74 (base_call -> factor arroba type dot func_call .) + less reduce using rule 74 (base_call -> factor arroba type dot func_call .) + lesseq reduce using rule 74 (base_call -> factor arroba type dot func_call .) + equal reduce using rule 74 (base_call -> factor arroba type dot func_call .) + semi reduce using rule 74 (base_call -> factor arroba type dot func_call .) + of reduce using rule 74 (base_call -> factor arroba type dot func_call .) + then reduce using rule 74 (base_call -> factor arroba type dot func_call .) + loop reduce using rule 74 (base_call -> factor arroba type dot func_call .) + cpar reduce using rule 74 (base_call -> factor arroba type dot func_call .) + comma reduce using rule 74 (base_call -> factor arroba type dot func_call .) + in reduce using rule 74 (base_call -> factor arroba type dot func_call .) + else reduce using rule 74 (base_call -> factor arroba type dot func_call .) + pool reduce using rule 74 (base_call -> factor arroba type dot func_call .) + error reduce using rule 74 (base_call -> factor arroba type dot func_call .) + ccur reduce using rule 74 (base_call -> factor arroba type dot func_call .) + fi reduce using rule 74 (base_call -> factor arroba type dot func_call .) + + +state 221 + + (24) def_func -> error opar formals cpar colon type ocur expr ccur . + + semi reduce using rule 24 (def_func -> error opar formals cpar colon type ocur expr ccur .) + + +state 222 + + (23) def_func -> id opar formals cpar colon type ocur expr ccur . + + semi reduce using rule 23 (def_func -> id opar formals cpar colon type ocur expr ccur .) + + +state 223 + + (27) def_func -> id opar formals cpar colon type ocur error ccur . + + semi reduce using rule 27 (def_func -> id opar formals cpar colon type ocur error ccur .) + + +state 224 + + (26) def_func -> id opar formals cpar colon error ocur expr ccur . + + semi reduce using rule 26 (def_func -> id opar formals cpar colon error ocur expr ccur .) + + +state 225 + + (25) def_func -> id opar error cpar colon type ocur expr ccur . + + semi reduce using rule 25 (def_func -> id opar error cpar colon type ocur expr ccur .) + + +state 226 + + (56) cases_list -> casep semi cases_list . + + esac reduce using rule 56 (cases_list -> casep semi cases_list .) + + +state 227 + + (58) casep -> id colon type . rarrow expr + + rarrow shift and go to state 232 + + +state 228 + + (41) expr -> if expr then expr else expr . fi + + fi shift and go to state 233 + + +state 229 + + (44) expr -> if expr then expr else error . fi + + fi shift and go to state 234 + + +state 230 + + (43) expr -> if expr then error else expr . fi + + fi shift and go to state 235 + + +state 231 + + (42) expr -> if error then expr else expr . fi + + fi shift and go to state 236 + + +state 232 + + (58) casep -> id colon type rarrow . expr + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 237 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 233 + + (41) expr -> if expr then expr else expr fi . + + semi reduce using rule 41 (expr -> if expr then expr else expr fi .) + of reduce using rule 41 (expr -> if expr then expr else expr fi .) + then reduce using rule 41 (expr -> if expr then expr else expr fi .) + loop reduce using rule 41 (expr -> if expr then expr else expr fi .) + cpar reduce using rule 41 (expr -> if expr then expr else expr fi .) + comma reduce using rule 41 (expr -> if expr then expr else expr fi .) + in reduce using rule 41 (expr -> if expr then expr else expr fi .) + else reduce using rule 41 (expr -> if expr then expr else expr fi .) + pool reduce using rule 41 (expr -> if expr then expr else expr fi .) + error reduce using rule 41 (expr -> if expr then expr else expr fi .) + ccur reduce using rule 41 (expr -> if expr then expr else expr fi .) + fi reduce using rule 41 (expr -> if expr then expr else expr fi .) + + +state 234 + + (44) expr -> if expr then expr else error fi . + + semi reduce using rule 44 (expr -> if expr then expr else error fi .) + of reduce using rule 44 (expr -> if expr then expr else error fi .) + then reduce using rule 44 (expr -> if expr then expr else error fi .) + loop reduce using rule 44 (expr -> if expr then expr else error fi .) + cpar reduce using rule 44 (expr -> if expr then expr else error fi .) + comma reduce using rule 44 (expr -> if expr then expr else error fi .) + in reduce using rule 44 (expr -> if expr then expr else error fi .) + else reduce using rule 44 (expr -> if expr then expr else error fi .) + pool reduce using rule 44 (expr -> if expr then expr else error fi .) + error reduce using rule 44 (expr -> if expr then expr else error fi .) + ccur reduce using rule 44 (expr -> if expr then expr else error fi .) + fi reduce using rule 44 (expr -> if expr then expr else error fi .) + + +state 235 + + (43) expr -> if expr then error else expr fi . + + semi reduce using rule 43 (expr -> if expr then error else expr fi .) + of reduce using rule 43 (expr -> if expr then error else expr fi .) + then reduce using rule 43 (expr -> if expr then error else expr fi .) + loop reduce using rule 43 (expr -> if expr then error else expr fi .) + cpar reduce using rule 43 (expr -> if expr then error else expr fi .) + comma reduce using rule 43 (expr -> if expr then error else expr fi .) + in reduce using rule 43 (expr -> if expr then error else expr fi .) + else reduce using rule 43 (expr -> if expr then error else expr fi .) + pool reduce using rule 43 (expr -> if expr then error else expr fi .) + error reduce using rule 43 (expr -> if expr then error else expr fi .) + ccur reduce using rule 43 (expr -> if expr then error else expr fi .) + fi reduce using rule 43 (expr -> if expr then error else expr fi .) + + +state 236 + + (42) expr -> if error then expr else expr fi . + + semi reduce using rule 42 (expr -> if error then expr else expr fi .) + of reduce using rule 42 (expr -> if error then expr else expr fi .) + then reduce using rule 42 (expr -> if error then expr else expr fi .) + loop reduce using rule 42 (expr -> if error then expr else expr fi .) + cpar reduce using rule 42 (expr -> if error then expr else expr fi .) + comma reduce using rule 42 (expr -> if error then expr else expr fi .) + in reduce using rule 42 (expr -> if error then expr else expr fi .) + else reduce using rule 42 (expr -> if error then expr else expr fi .) + pool reduce using rule 42 (expr -> if error then expr else expr fi .) + error reduce using rule 42 (expr -> if error then expr else expr fi .) + ccur reduce using rule 42 (expr -> if error then expr else expr fi .) + fi reduce using rule 42 (expr -> if error then expr else expr fi .) + + +state 237 + + (58) casep -> id colon type rarrow expr . + + semi reduce using rule 58 (casep -> id colon type rarrow expr .) + diff --git a/src/parser.py b/src/parser.py index 44245fd6..78b8d192 100644 --- a/src/parser.py +++ b/src/parser.py @@ -330,7 +330,7 @@ def p_arg_list(self, p): def p_arg_list_error(self, p): 'arg_list : error arg_list' - p[0] = ErrorNode() + p[0] = [ErrorNode()] def p_arg_list_empty(self, p): 'arg_list_empty : epsilon' @@ -356,29 +356,32 @@ def print_error(self, tok): if __name__ == "__main__": - s = '''class Main inherits IO { - str <- "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; - main() : Object { - { - out_string("Enter number of numbers to multiply\n"); - out_int(prod(in_int())); - out_string("\n"); - } - }; - prod(i : Int) : Int { - let y : Int <- 1 in { - while (not (i = 0) ) loop { - out_string("Enter Number: "); - y <- y * in_int(); - i <- i - 1; - } - y; - } - }; -} - + s = '''(* Cool programs are sets of classes *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + testing(): Int { + 2 + 2 + }; +}; + +-- Only classes +suma(a: Int, b: Int) int { + a + b +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; +}; ''' # Parser() parser = CoolParser() result = parser.parse(s) - print(result) \ No newline at end of file + # print(result) \ No newline at end of file diff --git a/src/tools/__pycache__/ast.cpython-37.pyc b/src/tools/__pycache__/ast.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7bb7556c0c1388db288b63caf07bdebabd832be7 GIT binary patch literal 9588 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 literal 0 HcmV?d00001 diff --git a/src/tools/__pycache__/errors.cpython-37.pyc b/src/tools/__pycache__/errors.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d7afb7ccb7b1f71c9b55adf6be3a959f8ba63ab7 GIT binary patch literal 4576 zcmbtXTW{mW6(%L>>dSha^}^d`H^ib2R!D3ayBqX^pp90hT{SZ0=(2$cv;>zk_A;PI zWk@A!!Vd-3Kz>9}pn1$=(VwvYLa%*ken4OH)b9*+u^eRuv=lhxnHkNQIp23Ke73e$ zR&f3BZ}TsIUQv{PkubS5ynKQ?xNjVES z&kB$WQq~|BSqXAU$~nkowgP!Y%6Z7EYz^|7lnap8*)7Poq+Dbh9i?*H#ZIPIcKj9{ z;Dsxe$`mW}jdG?km1VAqR+eil%d{)ywQA+?o@06Wj(xG>m0}fGiIwpzexqoLRl@o! zqf$K#eM5*)xO9BF=t-*Rj^0HRE3cKmtC#9`s;XROE)_d-nMIpr3YJjKiZ;qc!vPng zqHTMD7u)to^SywN@^0u4`vE3s5%2hAFEH}P_MoDM_8?g{ejQ>Jcz?c zXIv-Q^BvcF^UpvIdOjCb7YE&S$oF28dG7Fj47y7l+aXEL2JqPv>^(P%2KBtUkrEwazsj% zOmb(YYc^p{8%>njXqijp3uwGYNMy_(XbD(VbHsVHSgjykApTU}`b;08GpDJDc~aA_ z@WNEm^)1{0PZdva;EN2N8lKs2mA@6Shn)GN`shdX!$hm-yLyuOonFyqfD2MAcd&SK zqk?Tmv9Rr1(+#T0?b!y$qjP(lT7xzl!yd26{$Qm#%3`gbQ3R$6K7gjpYntX@PKPUH zB6Z;OIY?c$?S9CHKE1En_LoD)Pe&waM#X^$;RW%^r{a=x!M3zN2GMILv`_`RJ0~#X^z1 z+kMIPGkBN&a3^}Gvyex65XL%xGFnFVEjIm! zn0eFmENkVMX2I-Mffv(^fM{G|JbN{C&n**qP10Zn^f40^p;B;G`8m6_?GY^ce(LQdNwXShs zce?F{d1S5N5O%$Fd~BFqt4u;Vumnvyf=*jpMI+HvHTq=)jV#8L=HJA0kvnxR;4bmo zAmjldIB-M+2)9xQomdC30f(cJ!z@RE*uM;g$CxugVS8?0a{%1*5DCC2CpWglkhF_k z(n3x;b_?qJzf4#%5mZwT_-sBJ34X=}4_uGpkvb)IsF$N@_%aO zFNYj)M~4r6f3A=Yx50 z#z9ID2FQ1?aG%nG9(#i@N~$d+K==i+hL@%S#?Md*lJVoOIna`c!U>ps*-IYOoq#e1 z0@znbo$0WLLT)_%WGB)osme7Y-2r|y{jIAe@4x*|V1ZnHIrI-;(`C^AiEx-eKQ-GN z^owKP?S}ch)@&TutrMeN>o!`Zwb?Kc=1w3yYZ`X<^u*{`cb`qiZL`(24~)ZxX&it# z3;UNahfY+Z9bb!y85t94WHEoJ_`4YsDbMkI`UQmiR$zJLx58+>79%0O7{)1ihE4qS z8h_j&kPoH%rqe<_)cbF~k3;lERFX_QUkB!4>eKO??^3)y7A8CMetm;vNPNVvz2pza zJboFbBtuOjxWg`{q#4iBzxLvn2r$e$lUie)B7zeS1>ajvjrVY}Wz^_l&V(BG<}EYF zkK)4Ic;|Vo-KY@}uET!o^LEQTvMEs1y1n+YiiWn?qHR!(InIF@LA{Hy-p9xytS2=M z%UeZWO1~$8dzsN!WO=mKK^Q=c9+x!RtyrLn;q+03pd5_{5g_i*@S`unhZH6Vo!v0- zFZPoC*)SE97+e5ee}?T|vQzhjJM@t%7$0yHM}d1W4K|1a6l!*&J6&*)VWrz;Yemm%T})8-kWja50@7=@c}6I(0cubQp9QPY8+$PqybQIY*O~g*4gd z7|lbw(Xrb`?Vx2gPpz$Ht6po`wI=nPP6Ng}^+vniYu4K6IWbUZne|ia_HhGA2ZTDQ zwQI*zds&;^R?9xFnWuKGebl3D)L9Z#=!_PfVI9r2LW@c*8Z%M(mW)>}ACRHb4`W&T w%OX?OI5Nq~a4Q{){w1w;t)Wk%QSsyS3+(q)v`T#&TN~w#HQeQm^^KMP0@57z+W-In literal 0 HcmV?d00001 diff --git a/src/tools/__pycache__/tokens.cpython-37.pyc b/src/tools/__pycache__/tokens.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4699339eeede99a7b266d9164300ff09857a5bcf GIT binary patch literal 1415 zcmai!OLN>r5XWbvk*qjg=V8D+LfE{BMQqFXQ56V91yTV{zVJBcz?4wW#xf(#W=68( ztvyiXd<&oojvOiY2Kg3q&1c|}6W!XfV-8eiYkobWnQe9dyLUey4CWb*t-p7^e<2uq zPMedljEnm?-4p=~I0O)afCyrkg9OgOJe-FG7{DT2fQxVmF2m9W;BN;~DFQ9&jcRX(UjI2)f-&7QJV>wH|f15<$ywQ9Z4#*Dof8>78w z_f+Gf!@Wu?FUkTv2<3{>hmAV)ff?b#;8$APsdUM5Oxgy7kbvSa8xdl{93df`Ban#p zJYj(_AS@Ct5H1of5iS#!5MDS{SD2R327@Y1T^BwC)8@jA3!96wrztyH6JuRiYYy|6 z%nwB#+u0t2e&QqbxGONlvF@CY>Z<8nE?iq!^jRIC49Yq5fK-oBFTgC1#tIYeY9G7S zR?VXlqdFaw_kEo1CPJ~C1Iq(yfTvg>Y67%G(-kdfeeA+*ZFQLsANy7uNj{nhk`*ey0Iv4PgGNO+{|+UCaQM&@jpwfNW}F>kj%KJtl_ zRa3Q6Zelc!+Jo`9|4bHpb=FTVl+<1{$kN4LCQ4|^_Sw()V?)c)qFnm{S`=(QL@Rzx zP_Afq5_~+I1jCg{usVFf(^T}r^%}htC*}4Qy6hF2VFkB-PD-q~ly`CCs78!W1}E|L zC;tiWw2BmGivb?y@%I0`1huegjBmMj<}Ifx%#L=`m^5pOT1n~WrK}Bfn$`F=I9l{!c3VsHZlf8!c5T~P`XTp;>3HxWe*glC>PT2#6ZLcfW`uL#Gox;D0 lS>^hBXZ-cg`k0^=>FalAnKF^B^LOhASM5Et_Ri4=wu#vFzyAQ{Y{$@CH^!r-ULc#E~P zBr~UYB|{N2PykGPZ343Nb5m0?6ZLcQb1L->j7%&{T}_NZq_L@`n|{1&adK&DPNIH% ze5i-MNlCtfQdAUtxJC-KnOugfdO?vT{=*O_!=2GaTGg1JMjX%1B{G_ zN9bF4MGUYruyHBsS@+#{KeE4buUy_BXy2d1>tBo?d9t!1l4EpLLtunif{Y1}TMON0 zHY+fPxlfLTwdcYM89U6nB3|(er^#@>t*w7E!SoiatYHi8| z#C`kc~Y9NXRf zGddZlAOqpk$z*gvJ6cvw7H^XFWt0erAl6b<7*z6{3qRnC_juXF`mA5aicL&PeL*rf0{c30TAcN=#1z`z9yeGn}z zMc*KAv8|Q0*gJbcaNzrWGkh~J=k0b2LG?d|H;>?-e)y{Znp2S30Wiey6Ph9xT%kCm zKJyiVBG3qA_5l@|p=Zo63o1MdUczPVRj`Nr-NfP67i>X0ZAgC4GMl+b--?2{O_=A( z#G#9z Date: Thu, 20 Feb 2020 21:03:05 -0700 Subject: [PATCH 10/60] Testing the new cases and messing with the tester -_- --- src/__pycache__/base_parser.cpython-37.pyc | Bin 1014 -> 1019 bytes src/__pycache__/lexer.cpython-37.pyc | Bin 3647 -> 3636 bytes src/__pycache__/parser.cpython-37.pyc | Bin 14980 -> 15528 bytes src/base_parser.py | 2 + src/coolc.sh | 5 +- src/lexer.py | 1 + src/main.py | 18 +- src/output_parser/parselog.txt | 5181 +++++++++++-------- src/output_parser/parsetab.py | 56 +- src/parser.py | 47 +- src/utils/__pycache__/logger.cpython-37.pyc | Bin 425 -> 443 bytes src/utils/logger.py | 8 +- tests/utils/utils.py | 18 +- 13 files changed, 3038 insertions(+), 2298 deletions(-) diff --git a/src/__pycache__/base_parser.cpython-37.pyc b/src/__pycache__/base_parser.cpython-37.pyc index 65e91b36654f5af916ecf8b3db131b69b0af5625..490e5cbb5b5d809afe3128d9be0250615ca328a0 100644 GIT binary patch delta 449 zcmZXPF-rq66vy+DyYyOYZMF8Gi|C@aSPDY7f)+Yfp*Xl$YI7Ej;+0%FSPmSVJ4j~T z9sLY`g--bzqKk_!=^_|-zr6oT-pfDVg`Yy@yj(63T;bKlO_M!WKCio|a*#m|_nsn8 zBqt*ffTW5cnV?8d`H3%3=Om%RQ(ST3uQ(7vh9u&HWi6AFR=QC0g&NJrGK*zj58_E_Vipzj3xvnq>CAW!h4W1T=1xSr9@V-tllOcW$EN9zeoSWX39F*L^p{RoWjY($>i#@n)rF#g7; zeJf(JX6xKy&%!>v!LH33h!7+55Ck|~Ze6-xp3HTfwL8|4yY#2gjd0yQo)$4&cL1fb cw3Vo2bj}W-s$W^SZ*53B-JSg#qu1>47bFE;zyJUM delta 469 zcmZWlJxjwt7`~6BiKR_j6(@(L7wT+d;PsmYTbkhO{Z~T|gxu;@m;4@K@pkeh+JEdC0K@f#01y2wuQB*P$I|$@$LR?OF`I8Qaw-gU_JyTArI*OS>OtJ zm5$?N9Jmr70c3s!ESy%@vAjmj7y)Jk>t+~+z>)f_u#}8PP{ZPhKm(7jyZoK*b=t?v z=cId@Oy{wj%9&17TgbMlC-E?xEMI2%Hal|G@dlyIJY>DmCQ?lzn&E#U7O{*8y5Q)W z^?h2{r9+=X9oq_fW!}t1$-@IG2F!bK1EeUO{O|5j&7wqyr*Y zKm^FyFw<)}oCNuRdnMgS5ITa5q! delta 434 zcmdlYvtNeSiIEpm6!!RM7XG#f4iBAP^E4IKUe_Y=aof@4b2N&Ajh> z$R!(hrcEF?)>l_8FQQ0rHd8!vdd5}xY2pZ9CZv3?{A6zbJOOJNwCvsvV^**%G{GIt27#towF+&A_Sl7&CbPsqb?bLs;* zPheCnKy~_E@(4N(!(Y>HlEYA%I|%R1d?X(waQ8p~o+*AtCgFbZb20-T&i+KoaOKz+ zIt5mm(2jg5el4+-xltCs1g ze1OZb9ILV7Dg~*lbaAaKAuF}I+EY$0pJD@8!PI-1giX}THJRVwDQc#`_HpN-b%Mt; zERKg{;OFD)%mp-i+8cJz@|cP?ds&E!Lad=MRW^vKr||G~_KNVnDumt_Ibpqo!iU@Q z23g$setwpWz978kg;-DGpq)5E7)+k1ZtHqR*YrVM?LQjMHT0_Z4(K{+P0z6mF6`-+ zRk!_yW!anfO*w%bMf5B>sNdM~n9n16dYN9!QXC@BF!6g`-l%yF-}Q=!7-k;ee1{aV~JwQkUkJI+9cdh*sz>C6QHaQ!LY_Q&=dWlyo=+w;;+D zi$CCYtzv_Uv(4Gvpufk65$- delta 1076 zcma)3O-vI(6yDk0mTeItCL$qGhe|@1KW+Ihm{&4#t}vFdj(!K@Xlx5U*n54Nl&?5M#V}GQQmw^yuu)n|a@S?|bv!Jim3fSU*}< z7nESEf18|p7k*g3fi_-!`H0kMNiT?1`3AZzjwq23j(>P%A0M;x1(W8f#cc;?D0Y3r zBx&Qrnzc5g?6iuw{uoJX+j;{+KC#ojg6hR)=TY&xqbMIh;>V#T5$}9}8UcKSn#Drb zOLRmub+4n4*zR6MZQ|bXuc%YxPP{-7(Hwb$2E=A$P<)aPiQmyY8WCpCcQhuh^gcsp z#Y*2X(RR2&91R4-slE(K0CKWC3B{BU+h3BN!1@#+$%=85lQXDMT9Ua^l5%QJt=MIG zsp{u^ODgwsRFX?-Ny*4f(z3D)u^9;(p-j#y+3g}o^BCxb~ONzOj-B=NbQotgGHH;GxK9)~3XV3%BT5sa>~fXh(0eVxs?=w;Vv zd#2XiO@Wyc_Xol#w)S?Q8~JBFRQw!lL6$f;G+7R4J}scBd!G+{pXP^IqiKNpv>@|C z(3X};<%waXQlwXwq;NZq<2>bAJA>_OIBgQg0mN`H!3AcgX{N|1=2^mVp4@_I8HJ)r zxQkJIlQ4tKo7BN&Vu8SXj;6WuuTZ-l3|2(XK~j7th+(+-!+H!SJbo2)55g8*#BsBb zC3?5l=dkVtEDZop!>chIwh>RK42g$5u4mi>!&->ASthJqx|<@3J8*PYbdMXY z&_=p&1oF5%SD`0{r#U?L0)~T7Bvd`>>cZyknt82NmHp@s+p;C8 diff --git a/src/base_parser.py b/src/base_parser.py index 4c00f153..387426b5 100644 --- a/src/base_parser.py +++ b/src/base_parser.py @@ -11,6 +11,7 @@ def __init__(self, lexer=None): self.lexer = lexer if lexer else CoolLexer() self.outputdir = 'src/output_parser' self.tokens = tokens + self.errors = False yacc.yacc(start='program', module=self, outputdir=self.outputdir, @@ -20,5 +21,6 @@ def __init__(self, lexer=None): def parse(self, program, debug=False): + self.errors = False # tokens = self.lexer.tokenize_text(program) return yacc.parse(program, self.lexer.lexer, debug=debug) \ No newline at end of file diff --git a/src/coolc.sh b/src/coolc.sh index 9add51d3..974a98e8 100755 --- a/src/coolc.sh +++ b/src/coolc.sh @@ -8,5 +8,8 @@ OUTPUT_FILE=$INPUT_FILE echo "LINEA_CON_NOMBRE_Y_VERSION_DEL_COMPILADOR" # TODO: Recuerde cambiar estas lineas echo "Copyright (c) 2019: Loraine Monteagudo, Amanda Marrero, Manuel Fernandez" +FILE="../src/main.py" +echo $FILE + echo "Compiling $INPUT_FILE into $OUTPUT_FILE" -python main.py $INPUT_FILE $OUTPUT_FILE \ No newline at end of file +python ${FILE} $INPUT_FILE \ No newline at end of file diff --git a/src/lexer.py b/src/lexer.py index 30108b23..69bdc0c5 100644 --- a/src/lexer.py +++ b/src/lexer.py @@ -88,6 +88,7 @@ def tokenize_text(self, text): for tok in self.lexer: col = find_column(self.lexer, tok) tokens.append(Token(tok.type, tok.value, tok.lineno, col)) + self.lexer.lineno = 0 return tokens diff --git a/src/main.py b/src/main.py index d54f670b..1c880e5b 100644 --- a/src/main.py +++ b/src/main.py @@ -1,29 +1,29 @@ -import argparse from pprint import pprint from lexer import CoolLexer from parser import CoolParser +import os -arg_parser = argparse.ArgumentParser() -arg_parser.add_argument('input') -arg_parser.add_argument('output') -args = arg_parser.parse_args() +cwd = os.getcwd() -input_ = args.input -output_ = args.output +# input_ = sys.argv[1] +input_ = f'{cwd}/tests/parser/program3.cl' +# output_ = args.output -# input_ = './tests/parser/err2.cl' try: with open(input_) as f: data = f.read() lexer = CoolLexer() - # lexer.tokenize_text(data) parser = CoolParser(lexer) if lexer.errors: print(lexer.errors) + # raise Exception() + ast = parser.parse(data) + # if parser.errors: + # raise Exception() # print(ast) except FileNotFoundError: diff --git a/src/output_parser/parselog.txt b/src/output_parser/parselog.txt index c6658148..9ec0ccc8 100644 --- a/src/output_parser/parselog.txt +++ b/src/output_parser/parselog.txt @@ -78,48 +78,52 @@ yacc.py:3381:Rule 73 term -> base_call yacc.py:3381:Rule 74 base_call -> factor arroba type dot func_call yacc.py:3381:Rule 75 base_call -> factor - yacc.py:3381:Rule 76 factor -> atom - yacc.py:3381:Rule 77 factor -> opar expr cpar - yacc.py:3381:Rule 78 factor -> factor dot func_call - yacc.py:3381:Rule 79 factor -> func_call - yacc.py:3381:Rule 80 atom -> num - yacc.py:3381:Rule 81 atom -> id - yacc.py:3381:Rule 82 atom -> new type - yacc.py:3381:Rule 83 atom -> new error - yacc.py:3381:Rule 84 atom -> ocur block ccur - yacc.py:3381:Rule 85 atom -> true - yacc.py:3381:Rule 86 atom -> false - yacc.py:3381:Rule 87 atom -> string - yacc.py:3381:Rule 88 block -> expr semi - yacc.py:3381:Rule 89 block -> expr semi block - yacc.py:3381:Rule 90 block -> error block - yacc.py:3381:Rule 91 block -> error - yacc.py:3381:Rule 92 func_call -> id opar args cpar - yacc.py:3381:Rule 93 args -> arg_list - yacc.py:3381:Rule 94 args -> arg_list_empty - yacc.py:3381:Rule 95 arg_list -> expr - yacc.py:3381:Rule 96 arg_list -> expr comma arg_list - yacc.py:3381:Rule 97 arg_list -> error arg_list - yacc.py:3381:Rule 98 arg_list_empty -> epsilon + yacc.py:3381:Rule 76 base_call -> error arroba type dot func_call + yacc.py:3381:Rule 77 base_call -> factor arroba error dot func_call + yacc.py:3381:Rule 78 factor -> atom + yacc.py:3381:Rule 79 factor -> opar expr cpar + yacc.py:3381:Rule 80 factor -> factor dot func_call + yacc.py:3381:Rule 81 factor -> func_call + yacc.py:3381:Rule 82 atom -> num + yacc.py:3381:Rule 83 atom -> id + yacc.py:3381:Rule 84 atom -> new type + yacc.py:3381:Rule 85 atom -> new error + yacc.py:3381:Rule 86 atom -> ocur block ccur + yacc.py:3381:Rule 87 atom -> true + yacc.py:3381:Rule 88 atom -> false + yacc.py:3381:Rule 89 atom -> string + yacc.py:3381:Rule 90 block -> expr semi + yacc.py:3381:Rule 91 block -> expr semi block + yacc.py:3381:Rule 92 block -> error block + yacc.py:3381:Rule 93 block -> error + yacc.py:3381:Rule 94 func_call -> id opar args cpar + yacc.py:3381:Rule 95 func_call -> id opar error cpar + yacc.py:3381:Rule 96 func_call -> error opar args cpar + yacc.py:3381:Rule 97 args -> arg_list + yacc.py:3381:Rule 98 args -> arg_list_empty + yacc.py:3381:Rule 99 arg_list -> expr + yacc.py:3381:Rule 100 arg_list -> expr comma arg_list + yacc.py:3381:Rule 101 arg_list -> error arg_list + yacc.py:3381:Rule 102 arg_list_empty -> epsilon yacc.py:3399: yacc.py:3400:Terminals, with rules where they appear yacc.py:3401: - yacc.py:3405:arroba : 74 + yacc.py:3405:arroba : 74 76 77 yacc.py:3405:case : 38 39 40 - yacc.py:3405:ccur : 6 7 8 9 10 11 23 24 25 26 27 84 + yacc.py:3405:ccur : 6 7 8 9 10 11 23 24 25 26 27 86 yacc.py:3405:class : 6 7 8 9 10 11 yacc.py:3405:colon : 16 17 18 19 20 21 22 23 24 25 26 27 34 58 - yacc.py:3405:comma : 31 51 96 - yacc.py:3405:cpar : 23 24 25 26 27 77 92 + yacc.py:3405:comma : 31 51 100 + yacc.py:3405:cpar : 23 24 25 26 27 79 94 95 96 yacc.py:3405:div : 70 - yacc.py:3405:dot : 74 78 + yacc.py:3405:dot : 74 76 77 80 yacc.py:3405:else : 41 42 43 44 yacc.py:3405:equal : 64 - yacc.py:3405:error : 5 8 9 10 10 11 15 18 19 20 21 22 24 25 26 27 32 36 37 39 40 42 43 44 46 47 48 52 57 83 90 91 97 + yacc.py:3405:error : 5 8 9 10 10 11 15 18 19 20 21 22 24 25 26 27 32 36 37 39 40 42 43 44 46 47 48 52 57 76 77 85 92 93 95 96 101 yacc.py:3405:esac : 38 39 40 - yacc.py:3405:false : 86 + yacc.py:3405:false : 88 yacc.py:3405:fi : 41 42 43 44 - yacc.py:3405:id : 16 17 19 21 22 23 25 26 27 34 58 59 81 92 + yacc.py:3405:id : 16 17 19 21 22 23 25 26 27 34 58 59 83 94 95 yacc.py:3405:if : 41 42 43 44 yacc.py:3405:in : 35 36 37 yacc.py:3405:inherits : 7 9 10 11 @@ -130,33 +134,33 @@ yacc.py:3405:let : 35 36 37 yacc.py:3405:loop : 45 46 47 48 yacc.py:3405:minus : 67 - yacc.py:3405:new : 82 83 + yacc.py:3405:new : 84 85 yacc.py:3405:not : 60 yacc.py:3405:nox : 72 - yacc.py:3405:num : 80 - yacc.py:3405:ocur : 6 7 8 9 10 11 23 24 25 26 27 84 + yacc.py:3405:num : 82 + yacc.py:3405:ocur : 6 7 8 9 10 11 23 24 25 26 27 86 yacc.py:3405:of : 38 39 40 - yacc.py:3405:opar : 23 24 25 26 27 77 92 + yacc.py:3405:opar : 23 24 25 26 27 79 94 95 96 yacc.py:3405:plus : 66 yacc.py:3405:pool : 45 46 47 yacc.py:3405:rarrow : 58 - yacc.py:3405:semi : 6 7 8 9 10 11 13 14 55 56 88 89 + yacc.py:3405:semi : 6 7 8 9 10 11 13 14 55 56 90 91 yacc.py:3405:star : 69 - yacc.py:3405:string : 87 + yacc.py:3405:string : 89 yacc.py:3405:then : 41 42 43 44 - yacc.py:3405:true : 85 - yacc.py:3405:type : 6 7 7 9 11 16 17 18 20 22 23 24 25 27 34 58 74 82 + yacc.py:3405:true : 87 + yacc.py:3405:type : 6 7 7 9 11 16 17 18 20 22 23 24 25 27 34 58 74 76 84 yacc.py:3405:while : 45 46 47 48 yacc.py:3407: yacc.py:3408:Nonterminals, with rules where they appear yacc.py:3409: - yacc.py:3413:arg_list : 93 96 97 - yacc.py:3413:arg_list_empty : 94 - yacc.py:3413:args : 92 + yacc.py:3413:arg_list : 97 100 101 + yacc.py:3413:arg_list_empty : 98 + yacc.py:3413:args : 94 96 yacc.py:3413:arith : 49 - yacc.py:3413:atom : 76 + yacc.py:3413:atom : 78 yacc.py:3413:base_call : 69 70 71 72 73 - yacc.py:3413:block : 84 89 90 + yacc.py:3413:block : 86 91 92 yacc.py:3413:casep : 55 56 yacc.py:3413:cases_list : 38 39 56 57 yacc.py:3413:class_list : 1 3 5 @@ -164,12 +168,12 @@ yacc.py:3413:def_attr : 13 yacc.py:3413:def_class : 3 4 yacc.py:3413:def_func : 14 - yacc.py:3413:epsilon : 12 33 98 - yacc.py:3413:expr : 17 20 21 23 24 25 26 35 36 38 40 41 41 41 42 42 43 43 44 44 45 45 46 47 48 48 53 58 59 77 88 89 95 96 - yacc.py:3413:factor : 74 75 78 + yacc.py:3413:epsilon : 12 33 102 + yacc.py:3413:expr : 17 20 21 23 24 25 26 35 36 38 40 41 41 41 42 42 43 43 44 44 45 45 46 47 48 48 53 58 59 79 90 91 99 100 + yacc.py:3413:factor : 74 75 77 80 yacc.py:3413:feature_list : 6 7 8 9 10 11 13 14 15 yacc.py:3413:formals : 23 24 26 27 - yacc.py:3413:func_call : 74 78 79 + yacc.py:3413:func_call : 74 76 77 80 81 yacc.py:3413:let_assign : 50 51 yacc.py:3413:let_list : 35 37 51 52 yacc.py:3413:op : 62 63 64 65 66 67 @@ -969,45 +973,50 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 71 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: error shift and go to state 71 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 72 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: yacc.py:2562:state 59 yacc.py:2563: @@ -1020,7 +1029,7 @@ yacc.py:2563: yacc.py:2565: (24) def_func -> error opar formals cpar . colon type ocur expr ccur yacc.py:2566: - yacc.py:2687: colon shift and go to state 95 + yacc.py:2687: colon shift and go to state 96 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 61 @@ -1035,13 +1044,13 @@ yacc.py:2687: id shift and go to state 48 yacc.py:2689: yacc.py:2714: param shift and go to state 46 - yacc.py:2714: param_list shift and go to state 96 + yacc.py:2714: param_list shift and go to state 97 yacc.py:2561: yacc.py:2562:state 62 yacc.py:2563: yacc.py:2565: (34) param -> id colon . type yacc.py:2566: - yacc.py:2687: type shift and go to state 97 + yacc.py:2687: type shift and go to state 98 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 63 @@ -1080,46 +1089,50 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 99 - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 98 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 100 + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 99 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: yacc.py:2562:state 64 yacc.py:2563: @@ -1156,45 +1169,50 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 100 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: error shift and go to state 71 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 101 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: yacc.py:2562:state 65 yacc.py:2563: @@ -1202,52 +1220,61 @@ yacc.py:2565: (26) def_func -> id opar formals cpar . colon error ocur expr ccur yacc.py:2565: (27) def_func -> id opar formals cpar . colon type ocur error ccur yacc.py:2566: - yacc.py:2687: colon shift and go to state 101 + yacc.py:2687: colon shift and go to state 102 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 66 yacc.py:2563: yacc.py:2565: (25) def_func -> id opar error cpar . colon type ocur expr ccur yacc.py:2566: - yacc.py:2687: colon shift and go to state 102 + yacc.py:2687: colon shift and go to state 103 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 67 yacc.py:2563: yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list ccur . semi yacc.py:2566: - yacc.py:2687: semi shift and go to state 103 + yacc.py:2687: semi shift and go to state 104 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 68 yacc.py:2563: yacc.py:2565: (11) def_class -> class type inherits error ocur feature_list ccur . semi yacc.py:2566: - yacc.py:2687: semi shift and go to state 104 + yacc.py:2687: semi shift and go to state 105 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 69 yacc.py:2563: yacc.py:2565: (10) def_class -> class error inherits error ocur feature_list ccur . semi yacc.py:2566: - yacc.py:2687: semi shift and go to state 105 + yacc.py:2687: semi shift and go to state 106 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 70 yacc.py:2563: yacc.py:2565: (9) def_class -> class error inherits type ocur feature_list ccur . semi yacc.py:2566: - yacc.py:2687: semi shift and go to state 106 + yacc.py:2687: semi shift and go to state 107 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 71 yacc.py:2563: + yacc.py:2565: (76) base_call -> error . arroba type dot func_call + yacc.py:2565: (96) func_call -> error . opar args cpar + yacc.py:2566: + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 109 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 72 + yacc.py:2563: yacc.py:2565: (20) def_attr -> error colon type larrow expr . yacc.py:2566: yacc.py:2687: semi reduce using rule 20 (def_attr -> error colon type larrow expr .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 72 + yacc.py:2562:state 73 yacc.py:2563: yacc.py:2565: (35) expr -> let . let_list in expr yacc.py:2565: (36) expr -> let . error in expr @@ -1259,14 +1286,14 @@ yacc.py:2565: (54) let_assign -> . param yacc.py:2565: (34) param -> . id colon type yacc.py:2566: - yacc.py:2687: error shift and go to state 108 + yacc.py:2687: error shift and go to state 111 yacc.py:2687: id shift and go to state 48 yacc.py:2689: - yacc.py:2714: let_list shift and go to state 107 - yacc.py:2714: let_assign shift and go to state 109 - yacc.py:2714: param shift and go to state 110 + yacc.py:2714: let_list shift and go to state 110 + yacc.py:2714: let_assign shift and go to state 112 + yacc.py:2714: param shift and go to state 113 yacc.py:2561: - yacc.py:2562:state 73 + yacc.py:2562:state 74 yacc.py:2563: yacc.py:2565: (38) expr -> case . expr of cases_list esac yacc.py:2565: (39) expr -> case . error of cases_list esac @@ -1303,48 +1330,52 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 112 - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 115 + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 114 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 74 + yacc.py:2562:state 75 yacc.py:2563: yacc.py:2565: (41) expr -> if . expr then expr else expr fi yacc.py:2565: (42) expr -> if . error then expr else expr fi @@ -1382,48 +1413,52 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 114 - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 113 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 117 + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 116 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 75 + yacc.py:2562:state 76 yacc.py:2563: yacc.py:2565: (45) expr -> while . expr loop expr pool yacc.py:2565: (46) expr -> while . error loop expr pool @@ -1461,48 +1496,52 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 116 - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 115 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 119 + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 118 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 76 + yacc.py:2562:state 77 yacc.py:2563: yacc.py:2565: (49) expr -> arith . yacc.py:2566: @@ -1520,38 +1559,39 @@ yacc.py:2687: fi reduce using rule 49 (expr -> arith .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 77 + yacc.py:2562:state 78 yacc.py:2563: yacc.py:2565: (59) arith -> id . larrow expr - yacc.py:2565: (81) atom -> id . - yacc.py:2565: (92) func_call -> id . opar args cpar - yacc.py:2566: - yacc.py:2687: larrow shift and go to state 117 - yacc.py:2687: arroba reduce using rule 81 (atom -> id .) - yacc.py:2687: dot reduce using rule 81 (atom -> id .) - yacc.py:2687: star reduce using rule 81 (atom -> id .) - yacc.py:2687: div reduce using rule 81 (atom -> id .) - yacc.py:2687: plus reduce using rule 81 (atom -> id .) - yacc.py:2687: minus reduce using rule 81 (atom -> id .) - yacc.py:2687: less reduce using rule 81 (atom -> id .) - yacc.py:2687: lesseq reduce using rule 81 (atom -> id .) - yacc.py:2687: equal reduce using rule 81 (atom -> id .) - yacc.py:2687: semi reduce using rule 81 (atom -> id .) - yacc.py:2687: of reduce using rule 81 (atom -> id .) - yacc.py:2687: then reduce using rule 81 (atom -> id .) - yacc.py:2687: loop reduce using rule 81 (atom -> id .) - yacc.py:2687: cpar reduce using rule 81 (atom -> id .) - yacc.py:2687: comma reduce using rule 81 (atom -> id .) - yacc.py:2687: in reduce using rule 81 (atom -> id .) - yacc.py:2687: else reduce using rule 81 (atom -> id .) - yacc.py:2687: pool reduce using rule 81 (atom -> id .) - yacc.py:2687: error reduce using rule 81 (atom -> id .) - yacc.py:2687: ccur reduce using rule 81 (atom -> id .) - yacc.py:2687: fi reduce using rule 81 (atom -> id .) - yacc.py:2687: opar shift and go to state 118 + yacc.py:2565: (83) atom -> id . + yacc.py:2565: (94) func_call -> id . opar args cpar + yacc.py:2565: (95) func_call -> id . opar error cpar + yacc.py:2566: + yacc.py:2687: larrow shift and go to state 120 + yacc.py:2687: arroba reduce using rule 83 (atom -> id .) + yacc.py:2687: dot reduce using rule 83 (atom -> id .) + yacc.py:2687: star reduce using rule 83 (atom -> id .) + yacc.py:2687: div reduce using rule 83 (atom -> id .) + yacc.py:2687: plus reduce using rule 83 (atom -> id .) + yacc.py:2687: minus reduce using rule 83 (atom -> id .) + yacc.py:2687: less reduce using rule 83 (atom -> id .) + yacc.py:2687: lesseq reduce using rule 83 (atom -> id .) + yacc.py:2687: equal reduce using rule 83 (atom -> id .) + yacc.py:2687: semi reduce using rule 83 (atom -> id .) + yacc.py:2687: of reduce using rule 83 (atom -> id .) + yacc.py:2687: then reduce using rule 83 (atom -> id .) + yacc.py:2687: loop reduce using rule 83 (atom -> id .) + yacc.py:2687: cpar reduce using rule 83 (atom -> id .) + yacc.py:2687: comma reduce using rule 83 (atom -> id .) + yacc.py:2687: in reduce using rule 83 (atom -> id .) + yacc.py:2687: else reduce using rule 83 (atom -> id .) + yacc.py:2687: pool reduce using rule 83 (atom -> id .) + yacc.py:2687: error reduce using rule 83 (atom -> id .) + yacc.py:2687: ccur reduce using rule 83 (atom -> id .) + yacc.py:2687: fi reduce using rule 83 (atom -> id .) + yacc.py:2687: opar shift and go to state 121 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 78 + yacc.py:2562:state 79 yacc.py:2563: yacc.py:2565: (60) arith -> not . comp yacc.py:2565: (62) comp -> . comp less op @@ -1568,40 +1608,45 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: id shift and go to state 120 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: comp shift and go to state 119 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: error shift and go to state 71 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: id shift and go to state 123 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: comp shift and go to state 122 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 79 + yacc.py:2562:state 80 yacc.py:2563: yacc.py:2565: (61) arith -> comp . yacc.py:2565: (62) comp -> comp . less op @@ -1620,12 +1665,12 @@ yacc.py:2687: error reduce using rule 61 (arith -> comp .) yacc.py:2687: ccur reduce using rule 61 (arith -> comp .) yacc.py:2687: fi reduce using rule 61 (arith -> comp .) - yacc.py:2687: less shift and go to state 121 - yacc.py:2687: lesseq shift and go to state 122 - yacc.py:2687: equal shift and go to state 123 + yacc.py:2687: less shift and go to state 124 + yacc.py:2687: lesseq shift and go to state 125 + yacc.py:2687: equal shift and go to state 126 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 80 + yacc.py:2562:state 81 yacc.py:2563: yacc.py:2565: (65) comp -> op . yacc.py:2565: (66) op -> op . plus term @@ -1646,11 +1691,11 @@ yacc.py:2687: error reduce using rule 65 (comp -> op .) yacc.py:2687: ccur reduce using rule 65 (comp -> op .) yacc.py:2687: fi reduce using rule 65 (comp -> op .) - yacc.py:2687: plus shift and go to state 124 - yacc.py:2687: minus shift and go to state 125 + yacc.py:2687: plus shift and go to state 127 + yacc.py:2687: minus shift and go to state 128 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 81 + yacc.py:2562:state 82 yacc.py:2563: yacc.py:2565: (68) op -> term . yacc.py:2565: (69) term -> term . star base_call @@ -1673,11 +1718,11 @@ yacc.py:2687: error reduce using rule 68 (op -> term .) yacc.py:2687: ccur reduce using rule 68 (op -> term .) yacc.py:2687: fi reduce using rule 68 (op -> term .) - yacc.py:2687: star shift and go to state 126 - yacc.py:2687: div shift and go to state 127 + yacc.py:2687: star shift and go to state 129 + yacc.py:2687: div shift and go to state 130 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 82 + yacc.py:2562:state 83 yacc.py:2563: yacc.py:2565: (73) term -> base_call . yacc.py:2566: @@ -1702,79 +1747,90 @@ yacc.py:2687: fi reduce using rule 73 (term -> base_call .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 83 + yacc.py:2562:state 84 yacc.py:2563: yacc.py:2565: (71) term -> isvoid . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: id shift and go to state 120 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: base_call shift and go to state 128 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 71 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: id shift and go to state 123 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 131 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 84 + yacc.py:2562:state 85 yacc.py:2563: yacc.py:2565: (72) term -> nox . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: id shift and go to state 120 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: base_call shift and go to state 129 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 71 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: id shift and go to state 123 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 132 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 85 + yacc.py:2562:state 86 yacc.py:2563: yacc.py:2565: (74) base_call -> factor . arroba type dot func_call yacc.py:2565: (75) base_call -> factor . - yacc.py:2565: (78) factor -> factor . dot func_call + yacc.py:2565: (77) base_call -> factor . arroba error dot func_call + yacc.py:2565: (80) factor -> factor . dot func_call yacc.py:2566: - yacc.py:2687: arroba shift and go to state 130 + yacc.py:2687: arroba shift and go to state 133 yacc.py:2687: star reduce using rule 75 (base_call -> factor .) yacc.py:2687: div reduce using rule 75 (base_call -> factor .) yacc.py:2687: plus reduce using rule 75 (base_call -> factor .) @@ -1794,66 +1850,66 @@ yacc.py:2687: error reduce using rule 75 (base_call -> factor .) yacc.py:2687: ccur reduce using rule 75 (base_call -> factor .) yacc.py:2687: fi reduce using rule 75 (base_call -> factor .) - yacc.py:2687: dot shift and go to state 131 + yacc.py:2687: dot shift and go to state 134 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 86 + yacc.py:2562:state 87 yacc.py:2563: - yacc.py:2565: (79) factor -> func_call . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 79 (factor -> func_call .) - yacc.py:2687: dot reduce using rule 79 (factor -> func_call .) - yacc.py:2687: star reduce using rule 79 (factor -> func_call .) - yacc.py:2687: div reduce using rule 79 (factor -> func_call .) - yacc.py:2687: plus reduce using rule 79 (factor -> func_call .) - yacc.py:2687: minus reduce using rule 79 (factor -> func_call .) - yacc.py:2687: less reduce using rule 79 (factor -> func_call .) - yacc.py:2687: lesseq reduce using rule 79 (factor -> func_call .) - yacc.py:2687: equal reduce using rule 79 (factor -> func_call .) - yacc.py:2687: semi reduce using rule 79 (factor -> func_call .) - yacc.py:2687: of reduce using rule 79 (factor -> func_call .) - yacc.py:2687: then reduce using rule 79 (factor -> func_call .) - yacc.py:2687: loop reduce using rule 79 (factor -> func_call .) - yacc.py:2687: cpar reduce using rule 79 (factor -> func_call .) - yacc.py:2687: comma reduce using rule 79 (factor -> func_call .) - yacc.py:2687: in reduce using rule 79 (factor -> func_call .) - yacc.py:2687: else reduce using rule 79 (factor -> func_call .) - yacc.py:2687: pool reduce using rule 79 (factor -> func_call .) - yacc.py:2687: error reduce using rule 79 (factor -> func_call .) - yacc.py:2687: ccur reduce using rule 79 (factor -> func_call .) - yacc.py:2687: fi reduce using rule 79 (factor -> func_call .) + yacc.py:2565: (81) factor -> func_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 81 (factor -> func_call .) + yacc.py:2687: dot reduce using rule 81 (factor -> func_call .) + yacc.py:2687: star reduce using rule 81 (factor -> func_call .) + yacc.py:2687: div reduce using rule 81 (factor -> func_call .) + yacc.py:2687: plus reduce using rule 81 (factor -> func_call .) + yacc.py:2687: minus reduce using rule 81 (factor -> func_call .) + yacc.py:2687: less reduce using rule 81 (factor -> func_call .) + yacc.py:2687: lesseq reduce using rule 81 (factor -> func_call .) + yacc.py:2687: equal reduce using rule 81 (factor -> func_call .) + yacc.py:2687: semi reduce using rule 81 (factor -> func_call .) + yacc.py:2687: of reduce using rule 81 (factor -> func_call .) + yacc.py:2687: then reduce using rule 81 (factor -> func_call .) + yacc.py:2687: loop reduce using rule 81 (factor -> func_call .) + yacc.py:2687: cpar reduce using rule 81 (factor -> func_call .) + yacc.py:2687: comma reduce using rule 81 (factor -> func_call .) + yacc.py:2687: in reduce using rule 81 (factor -> func_call .) + yacc.py:2687: else reduce using rule 81 (factor -> func_call .) + yacc.py:2687: pool reduce using rule 81 (factor -> func_call .) + yacc.py:2687: error reduce using rule 81 (factor -> func_call .) + yacc.py:2687: ccur reduce using rule 81 (factor -> func_call .) + yacc.py:2687: fi reduce using rule 81 (factor -> func_call .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 87 + yacc.py:2562:state 88 yacc.py:2563: - yacc.py:2565: (76) factor -> atom . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 76 (factor -> atom .) - yacc.py:2687: dot reduce using rule 76 (factor -> atom .) - yacc.py:2687: star reduce using rule 76 (factor -> atom .) - yacc.py:2687: div reduce using rule 76 (factor -> atom .) - yacc.py:2687: plus reduce using rule 76 (factor -> atom .) - yacc.py:2687: minus reduce using rule 76 (factor -> atom .) - yacc.py:2687: less reduce using rule 76 (factor -> atom .) - yacc.py:2687: lesseq reduce using rule 76 (factor -> atom .) - yacc.py:2687: equal reduce using rule 76 (factor -> atom .) - yacc.py:2687: semi reduce using rule 76 (factor -> atom .) - yacc.py:2687: of reduce using rule 76 (factor -> atom .) - yacc.py:2687: then reduce using rule 76 (factor -> atom .) - yacc.py:2687: loop reduce using rule 76 (factor -> atom .) - yacc.py:2687: cpar reduce using rule 76 (factor -> atom .) - yacc.py:2687: comma reduce using rule 76 (factor -> atom .) - yacc.py:2687: in reduce using rule 76 (factor -> atom .) - yacc.py:2687: else reduce using rule 76 (factor -> atom .) - yacc.py:2687: pool reduce using rule 76 (factor -> atom .) - yacc.py:2687: error reduce using rule 76 (factor -> atom .) - yacc.py:2687: ccur reduce using rule 76 (factor -> atom .) - yacc.py:2687: fi reduce using rule 76 (factor -> atom .) + yacc.py:2565: (78) factor -> atom . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 78 (factor -> atom .) + yacc.py:2687: dot reduce using rule 78 (factor -> atom .) + yacc.py:2687: star reduce using rule 78 (factor -> atom .) + yacc.py:2687: div reduce using rule 78 (factor -> atom .) + yacc.py:2687: plus reduce using rule 78 (factor -> atom .) + yacc.py:2687: minus reduce using rule 78 (factor -> atom .) + yacc.py:2687: less reduce using rule 78 (factor -> atom .) + yacc.py:2687: lesseq reduce using rule 78 (factor -> atom .) + yacc.py:2687: equal reduce using rule 78 (factor -> atom .) + yacc.py:2687: semi reduce using rule 78 (factor -> atom .) + yacc.py:2687: of reduce using rule 78 (factor -> atom .) + yacc.py:2687: then reduce using rule 78 (factor -> atom .) + yacc.py:2687: loop reduce using rule 78 (factor -> atom .) + yacc.py:2687: cpar reduce using rule 78 (factor -> atom .) + yacc.py:2687: comma reduce using rule 78 (factor -> atom .) + yacc.py:2687: in reduce using rule 78 (factor -> atom .) + yacc.py:2687: else reduce using rule 78 (factor -> atom .) + yacc.py:2687: pool reduce using rule 78 (factor -> atom .) + yacc.py:2687: error reduce using rule 78 (factor -> atom .) + yacc.py:2687: ccur reduce using rule 78 (factor -> atom .) + yacc.py:2687: fi reduce using rule 78 (factor -> atom .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 88 + yacc.py:2562:state 89 yacc.py:2563: - yacc.py:2565: (77) factor -> opar . expr cpar + yacc.py:2565: (79) factor -> opar . expr cpar yacc.py:2565: (35) expr -> . let let_list in expr yacc.py:2565: (36) expr -> . let error in expr yacc.py:2565: (37) expr -> . let let_list in error @@ -1886,89 +1942,94 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 132 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: error shift and go to state 71 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 135 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 89 + yacc.py:2562:state 90 yacc.py:2563: - yacc.py:2565: (80) atom -> num . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 80 (atom -> num .) - yacc.py:2687: dot reduce using rule 80 (atom -> num .) - yacc.py:2687: star reduce using rule 80 (atom -> num .) - yacc.py:2687: div reduce using rule 80 (atom -> num .) - yacc.py:2687: plus reduce using rule 80 (atom -> num .) - yacc.py:2687: minus reduce using rule 80 (atom -> num .) - yacc.py:2687: less reduce using rule 80 (atom -> num .) - yacc.py:2687: lesseq reduce using rule 80 (atom -> num .) - yacc.py:2687: equal reduce using rule 80 (atom -> num .) - yacc.py:2687: semi reduce using rule 80 (atom -> num .) - yacc.py:2687: of reduce using rule 80 (atom -> num .) - yacc.py:2687: then reduce using rule 80 (atom -> num .) - yacc.py:2687: loop reduce using rule 80 (atom -> num .) - yacc.py:2687: cpar reduce using rule 80 (atom -> num .) - yacc.py:2687: comma reduce using rule 80 (atom -> num .) - yacc.py:2687: in reduce using rule 80 (atom -> num .) - yacc.py:2687: else reduce using rule 80 (atom -> num .) - yacc.py:2687: pool reduce using rule 80 (atom -> num .) - yacc.py:2687: error reduce using rule 80 (atom -> num .) - yacc.py:2687: ccur reduce using rule 80 (atom -> num .) - yacc.py:2687: fi reduce using rule 80 (atom -> num .) + yacc.py:2565: (82) atom -> num . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 82 (atom -> num .) + yacc.py:2687: dot reduce using rule 82 (atom -> num .) + yacc.py:2687: star reduce using rule 82 (atom -> num .) + yacc.py:2687: div reduce using rule 82 (atom -> num .) + yacc.py:2687: plus reduce using rule 82 (atom -> num .) + yacc.py:2687: minus reduce using rule 82 (atom -> num .) + yacc.py:2687: less reduce using rule 82 (atom -> num .) + yacc.py:2687: lesseq reduce using rule 82 (atom -> num .) + yacc.py:2687: equal reduce using rule 82 (atom -> num .) + yacc.py:2687: semi reduce using rule 82 (atom -> num .) + yacc.py:2687: of reduce using rule 82 (atom -> num .) + yacc.py:2687: then reduce using rule 82 (atom -> num .) + yacc.py:2687: loop reduce using rule 82 (atom -> num .) + yacc.py:2687: cpar reduce using rule 82 (atom -> num .) + yacc.py:2687: comma reduce using rule 82 (atom -> num .) + yacc.py:2687: in reduce using rule 82 (atom -> num .) + yacc.py:2687: else reduce using rule 82 (atom -> num .) + yacc.py:2687: pool reduce using rule 82 (atom -> num .) + yacc.py:2687: error reduce using rule 82 (atom -> num .) + yacc.py:2687: ccur reduce using rule 82 (atom -> num .) + yacc.py:2687: fi reduce using rule 82 (atom -> num .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 90 + yacc.py:2562:state 91 yacc.py:2563: - yacc.py:2565: (82) atom -> new . type - yacc.py:2565: (83) atom -> new . error + yacc.py:2565: (84) atom -> new . type + yacc.py:2565: (85) atom -> new . error yacc.py:2566: - yacc.py:2687: type shift and go to state 133 - yacc.py:2687: error shift and go to state 134 + yacc.py:2687: type shift and go to state 136 + yacc.py:2687: error shift and go to state 137 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 91 + yacc.py:2562:state 92 yacc.py:2563: - yacc.py:2565: (84) atom -> ocur . block ccur - yacc.py:2565: (88) block -> . expr semi - yacc.py:2565: (89) block -> . expr semi block - yacc.py:2565: (90) block -> . error block - yacc.py:2565: (91) block -> . error + yacc.py:2565: (86) atom -> ocur . block ccur + yacc.py:2565: (90) block -> . expr semi + yacc.py:2565: (91) block -> . expr semi block + yacc.py:2565: (92) block -> . error block + yacc.py:2565: (93) block -> . error yacc.py:2565: (35) expr -> . let let_list in expr yacc.py:2565: (36) expr -> . let error in expr yacc.py:2565: (37) expr -> . let let_list in error @@ -2001,144 +2062,148 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar yacc.py:2566: - yacc.py:2687: error shift and go to state 137 - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: block shift and go to state 135 - yacc.py:2714: expr shift and go to state 136 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 - yacc.py:2561: - yacc.py:2562:state 92 - yacc.py:2563: - yacc.py:2565: (85) atom -> true . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 85 (atom -> true .) - yacc.py:2687: dot reduce using rule 85 (atom -> true .) - yacc.py:2687: star reduce using rule 85 (atom -> true .) - yacc.py:2687: div reduce using rule 85 (atom -> true .) - yacc.py:2687: plus reduce using rule 85 (atom -> true .) - yacc.py:2687: minus reduce using rule 85 (atom -> true .) - yacc.py:2687: less reduce using rule 85 (atom -> true .) - yacc.py:2687: lesseq reduce using rule 85 (atom -> true .) - yacc.py:2687: equal reduce using rule 85 (atom -> true .) - yacc.py:2687: semi reduce using rule 85 (atom -> true .) - yacc.py:2687: of reduce using rule 85 (atom -> true .) - yacc.py:2687: then reduce using rule 85 (atom -> true .) - yacc.py:2687: loop reduce using rule 85 (atom -> true .) - yacc.py:2687: cpar reduce using rule 85 (atom -> true .) - yacc.py:2687: comma reduce using rule 85 (atom -> true .) - yacc.py:2687: in reduce using rule 85 (atom -> true .) - yacc.py:2687: else reduce using rule 85 (atom -> true .) - yacc.py:2687: pool reduce using rule 85 (atom -> true .) - yacc.py:2687: error reduce using rule 85 (atom -> true .) - yacc.py:2687: ccur reduce using rule 85 (atom -> true .) - yacc.py:2687: fi reduce using rule 85 (atom -> true .) - yacc.py:2689: + yacc.py:2687: error shift and go to state 140 + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: block shift and go to state 138 + yacc.py:2714: expr shift and go to state 139 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: yacc.py:2562:state 93 yacc.py:2563: - yacc.py:2565: (86) atom -> false . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 86 (atom -> false .) - yacc.py:2687: dot reduce using rule 86 (atom -> false .) - yacc.py:2687: star reduce using rule 86 (atom -> false .) - yacc.py:2687: div reduce using rule 86 (atom -> false .) - yacc.py:2687: plus reduce using rule 86 (atom -> false .) - yacc.py:2687: minus reduce using rule 86 (atom -> false .) - yacc.py:2687: less reduce using rule 86 (atom -> false .) - yacc.py:2687: lesseq reduce using rule 86 (atom -> false .) - yacc.py:2687: equal reduce using rule 86 (atom -> false .) - yacc.py:2687: semi reduce using rule 86 (atom -> false .) - yacc.py:2687: of reduce using rule 86 (atom -> false .) - yacc.py:2687: then reduce using rule 86 (atom -> false .) - yacc.py:2687: loop reduce using rule 86 (atom -> false .) - yacc.py:2687: cpar reduce using rule 86 (atom -> false .) - yacc.py:2687: comma reduce using rule 86 (atom -> false .) - yacc.py:2687: in reduce using rule 86 (atom -> false .) - yacc.py:2687: else reduce using rule 86 (atom -> false .) - yacc.py:2687: pool reduce using rule 86 (atom -> false .) - yacc.py:2687: error reduce using rule 86 (atom -> false .) - yacc.py:2687: ccur reduce using rule 86 (atom -> false .) - yacc.py:2687: fi reduce using rule 86 (atom -> false .) + yacc.py:2565: (87) atom -> true . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 87 (atom -> true .) + yacc.py:2687: dot reduce using rule 87 (atom -> true .) + yacc.py:2687: star reduce using rule 87 (atom -> true .) + yacc.py:2687: div reduce using rule 87 (atom -> true .) + yacc.py:2687: plus reduce using rule 87 (atom -> true .) + yacc.py:2687: minus reduce using rule 87 (atom -> true .) + yacc.py:2687: less reduce using rule 87 (atom -> true .) + yacc.py:2687: lesseq reduce using rule 87 (atom -> true .) + yacc.py:2687: equal reduce using rule 87 (atom -> true .) + yacc.py:2687: semi reduce using rule 87 (atom -> true .) + yacc.py:2687: of reduce using rule 87 (atom -> true .) + yacc.py:2687: then reduce using rule 87 (atom -> true .) + yacc.py:2687: loop reduce using rule 87 (atom -> true .) + yacc.py:2687: cpar reduce using rule 87 (atom -> true .) + yacc.py:2687: comma reduce using rule 87 (atom -> true .) + yacc.py:2687: in reduce using rule 87 (atom -> true .) + yacc.py:2687: else reduce using rule 87 (atom -> true .) + yacc.py:2687: pool reduce using rule 87 (atom -> true .) + yacc.py:2687: error reduce using rule 87 (atom -> true .) + yacc.py:2687: ccur reduce using rule 87 (atom -> true .) + yacc.py:2687: fi reduce using rule 87 (atom -> true .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 94 yacc.py:2563: - yacc.py:2565: (87) atom -> string . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 87 (atom -> string .) - yacc.py:2687: dot reduce using rule 87 (atom -> string .) - yacc.py:2687: star reduce using rule 87 (atom -> string .) - yacc.py:2687: div reduce using rule 87 (atom -> string .) - yacc.py:2687: plus reduce using rule 87 (atom -> string .) - yacc.py:2687: minus reduce using rule 87 (atom -> string .) - yacc.py:2687: less reduce using rule 87 (atom -> string .) - yacc.py:2687: lesseq reduce using rule 87 (atom -> string .) - yacc.py:2687: equal reduce using rule 87 (atom -> string .) - yacc.py:2687: semi reduce using rule 87 (atom -> string .) - yacc.py:2687: of reduce using rule 87 (atom -> string .) - yacc.py:2687: then reduce using rule 87 (atom -> string .) - yacc.py:2687: loop reduce using rule 87 (atom -> string .) - yacc.py:2687: cpar reduce using rule 87 (atom -> string .) - yacc.py:2687: comma reduce using rule 87 (atom -> string .) - yacc.py:2687: in reduce using rule 87 (atom -> string .) - yacc.py:2687: else reduce using rule 87 (atom -> string .) - yacc.py:2687: pool reduce using rule 87 (atom -> string .) - yacc.py:2687: error reduce using rule 87 (atom -> string .) - yacc.py:2687: ccur reduce using rule 87 (atom -> string .) - yacc.py:2687: fi reduce using rule 87 (atom -> string .) + yacc.py:2565: (88) atom -> false . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 88 (atom -> false .) + yacc.py:2687: dot reduce using rule 88 (atom -> false .) + yacc.py:2687: star reduce using rule 88 (atom -> false .) + yacc.py:2687: div reduce using rule 88 (atom -> false .) + yacc.py:2687: plus reduce using rule 88 (atom -> false .) + yacc.py:2687: minus reduce using rule 88 (atom -> false .) + yacc.py:2687: less reduce using rule 88 (atom -> false .) + yacc.py:2687: lesseq reduce using rule 88 (atom -> false .) + yacc.py:2687: equal reduce using rule 88 (atom -> false .) + yacc.py:2687: semi reduce using rule 88 (atom -> false .) + yacc.py:2687: of reduce using rule 88 (atom -> false .) + yacc.py:2687: then reduce using rule 88 (atom -> false .) + yacc.py:2687: loop reduce using rule 88 (atom -> false .) + yacc.py:2687: cpar reduce using rule 88 (atom -> false .) + yacc.py:2687: comma reduce using rule 88 (atom -> false .) + yacc.py:2687: in reduce using rule 88 (atom -> false .) + yacc.py:2687: else reduce using rule 88 (atom -> false .) + yacc.py:2687: pool reduce using rule 88 (atom -> false .) + yacc.py:2687: error reduce using rule 88 (atom -> false .) + yacc.py:2687: ccur reduce using rule 88 (atom -> false .) + yacc.py:2687: fi reduce using rule 88 (atom -> false .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 95 yacc.py:2563: + yacc.py:2565: (89) atom -> string . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 89 (atom -> string .) + yacc.py:2687: dot reduce using rule 89 (atom -> string .) + yacc.py:2687: star reduce using rule 89 (atom -> string .) + yacc.py:2687: div reduce using rule 89 (atom -> string .) + yacc.py:2687: plus reduce using rule 89 (atom -> string .) + yacc.py:2687: minus reduce using rule 89 (atom -> string .) + yacc.py:2687: less reduce using rule 89 (atom -> string .) + yacc.py:2687: lesseq reduce using rule 89 (atom -> string .) + yacc.py:2687: equal reduce using rule 89 (atom -> string .) + yacc.py:2687: semi reduce using rule 89 (atom -> string .) + yacc.py:2687: of reduce using rule 89 (atom -> string .) + yacc.py:2687: then reduce using rule 89 (atom -> string .) + yacc.py:2687: loop reduce using rule 89 (atom -> string .) + yacc.py:2687: cpar reduce using rule 89 (atom -> string .) + yacc.py:2687: comma reduce using rule 89 (atom -> string .) + yacc.py:2687: in reduce using rule 89 (atom -> string .) + yacc.py:2687: else reduce using rule 89 (atom -> string .) + yacc.py:2687: pool reduce using rule 89 (atom -> string .) + yacc.py:2687: error reduce using rule 89 (atom -> string .) + yacc.py:2687: ccur reduce using rule 89 (atom -> string .) + yacc.py:2687: fi reduce using rule 89 (atom -> string .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 96 + yacc.py:2563: yacc.py:2565: (24) def_func -> error opar formals cpar colon . type ocur expr ccur yacc.py:2566: - yacc.py:2687: type shift and go to state 138 + yacc.py:2687: type shift and go to state 141 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 96 + yacc.py:2562:state 97 yacc.py:2563: yacc.py:2565: (31) param_list -> param comma param_list . yacc.py:2566: yacc.py:2687: cpar reduce using rule 31 (param_list -> param comma param_list .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 97 + yacc.py:2562:state 98 yacc.py:2563: yacc.py:2565: (34) param -> id colon type . yacc.py:2566: @@ -2148,45 +2213,49 @@ yacc.py:2687: in reduce using rule 34 (param -> id colon type .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 98 + yacc.py:2562:state 99 yacc.py:2563: yacc.py:2565: (17) def_attr -> id colon type larrow expr . yacc.py:2566: yacc.py:2687: semi reduce using rule 17 (def_attr -> id colon type larrow expr .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 99 + yacc.py:2562:state 100 yacc.py:2563: yacc.py:2565: (22) def_attr -> id colon type larrow error . + yacc.py:2565: (76) base_call -> error . arroba type dot func_call + yacc.py:2565: (96) func_call -> error . opar args cpar yacc.py:2566: yacc.py:2687: semi reduce using rule 22 (def_attr -> id colon type larrow error .) + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 109 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 100 + yacc.py:2562:state 101 yacc.py:2563: yacc.py:2565: (21) def_attr -> id colon error larrow expr . yacc.py:2566: yacc.py:2687: semi reduce using rule 21 (def_attr -> id colon error larrow expr .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 101 + yacc.py:2562:state 102 yacc.py:2563: yacc.py:2565: (23) def_func -> id opar formals cpar colon . type ocur expr ccur yacc.py:2565: (26) def_func -> id opar formals cpar colon . error ocur expr ccur yacc.py:2565: (27) def_func -> id opar formals cpar colon . type ocur error ccur yacc.py:2566: - yacc.py:2687: type shift and go to state 139 - yacc.py:2687: error shift and go to state 140 + yacc.py:2687: type shift and go to state 142 + yacc.py:2687: error shift and go to state 143 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 102 + yacc.py:2562:state 103 yacc.py:2563: yacc.py:2565: (25) def_func -> id opar error cpar colon . type ocur expr ccur yacc.py:2566: - yacc.py:2687: type shift and go to state 141 + yacc.py:2687: type shift and go to state 144 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 103 + yacc.py:2562:state 104 yacc.py:2563: yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list ccur semi . yacc.py:2566: @@ -2195,7 +2264,7 @@ yacc.py:2687: $end reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 104 + yacc.py:2562:state 105 yacc.py:2563: yacc.py:2565: (11) def_class -> class type inherits error ocur feature_list ccur semi . yacc.py:2566: @@ -2204,7 +2273,7 @@ yacc.py:2687: $end reduce using rule 11 (def_class -> class type inherits error ocur feature_list ccur semi .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 105 + yacc.py:2562:state 106 yacc.py:2563: yacc.py:2565: (10) def_class -> class error inherits error ocur feature_list ccur semi . yacc.py:2566: @@ -2213,7 +2282,7 @@ yacc.py:2687: $end reduce using rule 10 (def_class -> class error inherits error ocur feature_list ccur semi .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 106 + yacc.py:2562:state 107 yacc.py:2563: yacc.py:2565: (9) def_class -> class error inherits type ocur feature_list ccur semi . yacc.py:2566: @@ -2222,15 +2291,114 @@ yacc.py:2687: $end reduce using rule 9 (def_class -> class error inherits type ocur feature_list ccur semi .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 107 + yacc.py:2562:state 108 + yacc.py:2563: + yacc.py:2565: (76) base_call -> error arroba . type dot func_call + yacc.py:2566: + yacc.py:2687: type shift and go to state 145 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 109 + yacc.py:2563: + yacc.py:2565: (96) func_call -> error opar . args cpar + yacc.py:2565: (97) args -> . arg_list + yacc.py:2565: (98) args -> . arg_list_empty + yacc.py:2565: (99) arg_list -> . expr + yacc.py:2565: (100) arg_list -> . expr comma arg_list + yacc.py:2565: (101) arg_list -> . error arg_list + yacc.py:2565: (102) arg_list_empty -> . epsilon + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 146 + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: args shift and go to state 147 + yacc.py:2714: arg_list shift and go to state 148 + yacc.py:2714: arg_list_empty shift and go to state 149 + yacc.py:2714: expr shift and go to state 150 + yacc.py:2714: epsilon shift and go to state 151 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 + yacc.py:2561: + yacc.py:2562:state 110 yacc.py:2563: yacc.py:2565: (35) expr -> let let_list . in expr yacc.py:2565: (37) expr -> let let_list . in error yacc.py:2566: - yacc.py:2687: in shift and go to state 142 + yacc.py:2687: in shift and go to state 152 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 108 + yacc.py:2562:state 111 yacc.py:2563: yacc.py:2565: (36) expr -> let error . in expr yacc.py:2565: (52) let_list -> error . let_list @@ -2241,81 +2409,93 @@ yacc.py:2565: (54) let_assign -> . param yacc.py:2565: (34) param -> . id colon type yacc.py:2566: - yacc.py:2687: in shift and go to state 144 - yacc.py:2687: error shift and go to state 143 + yacc.py:2687: in shift and go to state 154 + yacc.py:2687: error shift and go to state 153 yacc.py:2687: id shift and go to state 48 yacc.py:2689: - yacc.py:2714: let_list shift and go to state 145 - yacc.py:2714: let_assign shift and go to state 109 - yacc.py:2714: param shift and go to state 110 + yacc.py:2714: let_list shift and go to state 155 + yacc.py:2714: let_assign shift and go to state 112 + yacc.py:2714: param shift and go to state 113 yacc.py:2561: - yacc.py:2562:state 109 + yacc.py:2562:state 112 yacc.py:2563: yacc.py:2565: (50) let_list -> let_assign . yacc.py:2565: (51) let_list -> let_assign . comma let_list yacc.py:2566: yacc.py:2687: in reduce using rule 50 (let_list -> let_assign .) - yacc.py:2687: comma shift and go to state 146 + yacc.py:2687: comma shift and go to state 156 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 110 + yacc.py:2562:state 113 yacc.py:2563: yacc.py:2565: (53) let_assign -> param . larrow expr yacc.py:2565: (54) let_assign -> param . yacc.py:2566: - yacc.py:2687: larrow shift and go to state 147 + yacc.py:2687: larrow shift and go to state 157 yacc.py:2687: comma reduce using rule 54 (let_assign -> param .) yacc.py:2687: in reduce using rule 54 (let_assign -> param .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 111 + yacc.py:2562:state 114 yacc.py:2563: yacc.py:2565: (38) expr -> case expr . of cases_list esac yacc.py:2565: (40) expr -> case expr . of error esac yacc.py:2566: - yacc.py:2687: of shift and go to state 148 + yacc.py:2687: of shift and go to state 158 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 112 + yacc.py:2562:state 115 yacc.py:2563: yacc.py:2565: (39) expr -> case error . of cases_list esac + yacc.py:2565: (76) base_call -> error . arroba type dot func_call + yacc.py:2565: (96) func_call -> error . opar args cpar yacc.py:2566: - yacc.py:2687: of shift and go to state 149 + yacc.py:2687: of shift and go to state 159 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 109 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 113 + yacc.py:2562:state 116 yacc.py:2563: yacc.py:2565: (41) expr -> if expr . then expr else expr fi yacc.py:2565: (43) expr -> if expr . then error else expr fi yacc.py:2565: (44) expr -> if expr . then expr else error fi yacc.py:2566: - yacc.py:2687: then shift and go to state 150 + yacc.py:2687: then shift and go to state 160 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 114 + yacc.py:2562:state 117 yacc.py:2563: yacc.py:2565: (42) expr -> if error . then expr else expr fi + yacc.py:2565: (76) base_call -> error . arroba type dot func_call + yacc.py:2565: (96) func_call -> error . opar args cpar yacc.py:2566: - yacc.py:2687: then shift and go to state 151 + yacc.py:2687: then shift and go to state 161 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 109 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 115 + yacc.py:2562:state 118 yacc.py:2563: yacc.py:2565: (45) expr -> while expr . loop expr pool yacc.py:2565: (47) expr -> while expr . loop error pool yacc.py:2565: (48) expr -> while expr . loop expr error yacc.py:2566: - yacc.py:2687: loop shift and go to state 152 + yacc.py:2687: loop shift and go to state 162 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 116 + yacc.py:2562:state 119 yacc.py:2563: yacc.py:2565: (46) expr -> while error . loop expr pool + yacc.py:2565: (76) base_call -> error . arroba type dot func_call + yacc.py:2565: (96) func_call -> error . opar args cpar yacc.py:2566: - yacc.py:2687: loop shift and go to state 153 + yacc.py:2687: loop shift and go to state 163 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 109 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 117 + yacc.py:2562:state 120 yacc.py:2563: yacc.py:2565: (59) arith -> id larrow . expr yacc.py:2565: (35) expr -> . let let_list in expr @@ -2350,55 +2530,61 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 154 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: error shift and go to state 71 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 164 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 118 + yacc.py:2562:state 121 yacc.py:2563: - yacc.py:2565: (92) func_call -> id opar . args cpar - yacc.py:2565: (93) args -> . arg_list - yacc.py:2565: (94) args -> . arg_list_empty - yacc.py:2565: (95) arg_list -> . expr - yacc.py:2565: (96) arg_list -> . expr comma arg_list - yacc.py:2565: (97) arg_list -> . error arg_list - yacc.py:2565: (98) arg_list_empty -> . epsilon + yacc.py:2565: (94) func_call -> id opar . args cpar + yacc.py:2565: (95) func_call -> id opar . error cpar + yacc.py:2565: (97) args -> . arg_list + yacc.py:2565: (98) args -> . arg_list_empty + yacc.py:2565: (99) arg_list -> . expr + yacc.py:2565: (100) arg_list -> . expr comma arg_list + yacc.py:2565: (101) arg_list -> . error arg_list + yacc.py:2565: (102) arg_list_empty -> . epsilon yacc.py:2565: (35) expr -> . let let_list in expr yacc.py:2565: (36) expr -> . let error in expr yacc.py:2565: (37) expr -> . let let_list in error @@ -2432,53 +2618,57 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 159 - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 166 + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: args shift and go to state 155 - yacc.py:2714: arg_list shift and go to state 156 - yacc.py:2714: arg_list_empty shift and go to state 157 - yacc.py:2714: expr shift and go to state 158 - yacc.py:2714: epsilon shift and go to state 160 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: args shift and go to state 165 + yacc.py:2714: arg_list shift and go to state 148 + yacc.py:2714: arg_list_empty shift and go to state 149 + yacc.py:2714: expr shift and go to state 150 + yacc.py:2714: epsilon shift and go to state 151 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 119 + yacc.py:2562:state 122 yacc.py:2563: yacc.py:2565: (60) arith -> not comp . yacc.py:2565: (62) comp -> comp . less op @@ -2497,41 +2687,42 @@ yacc.py:2687: error reduce using rule 60 (arith -> not comp .) yacc.py:2687: ccur reduce using rule 60 (arith -> not comp .) yacc.py:2687: fi reduce using rule 60 (arith -> not comp .) - yacc.py:2687: less shift and go to state 121 - yacc.py:2687: lesseq shift and go to state 122 - yacc.py:2687: equal shift and go to state 123 + yacc.py:2687: less shift and go to state 124 + yacc.py:2687: lesseq shift and go to state 125 + yacc.py:2687: equal shift and go to state 126 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 120 + yacc.py:2562:state 123 yacc.py:2563: - yacc.py:2565: (81) atom -> id . - yacc.py:2565: (92) func_call -> id . opar args cpar - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 81 (atom -> id .) - yacc.py:2687: dot reduce using rule 81 (atom -> id .) - yacc.py:2687: star reduce using rule 81 (atom -> id .) - yacc.py:2687: div reduce using rule 81 (atom -> id .) - yacc.py:2687: plus reduce using rule 81 (atom -> id .) - yacc.py:2687: minus reduce using rule 81 (atom -> id .) - yacc.py:2687: less reduce using rule 81 (atom -> id .) - yacc.py:2687: lesseq reduce using rule 81 (atom -> id .) - yacc.py:2687: equal reduce using rule 81 (atom -> id .) - yacc.py:2687: semi reduce using rule 81 (atom -> id .) - yacc.py:2687: of reduce using rule 81 (atom -> id .) - yacc.py:2687: then reduce using rule 81 (atom -> id .) - yacc.py:2687: loop reduce using rule 81 (atom -> id .) - yacc.py:2687: cpar reduce using rule 81 (atom -> id .) - yacc.py:2687: comma reduce using rule 81 (atom -> id .) - yacc.py:2687: in reduce using rule 81 (atom -> id .) - yacc.py:2687: else reduce using rule 81 (atom -> id .) - yacc.py:2687: pool reduce using rule 81 (atom -> id .) - yacc.py:2687: error reduce using rule 81 (atom -> id .) - yacc.py:2687: ccur reduce using rule 81 (atom -> id .) - yacc.py:2687: fi reduce using rule 81 (atom -> id .) - yacc.py:2687: opar shift and go to state 118 + yacc.py:2565: (83) atom -> id . + yacc.py:2565: (94) func_call -> id . opar args cpar + yacc.py:2565: (95) func_call -> id . opar error cpar + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 83 (atom -> id .) + yacc.py:2687: dot reduce using rule 83 (atom -> id .) + yacc.py:2687: star reduce using rule 83 (atom -> id .) + yacc.py:2687: div reduce using rule 83 (atom -> id .) + yacc.py:2687: plus reduce using rule 83 (atom -> id .) + yacc.py:2687: minus reduce using rule 83 (atom -> id .) + yacc.py:2687: less reduce using rule 83 (atom -> id .) + yacc.py:2687: lesseq reduce using rule 83 (atom -> id .) + yacc.py:2687: equal reduce using rule 83 (atom -> id .) + yacc.py:2687: semi reduce using rule 83 (atom -> id .) + yacc.py:2687: of reduce using rule 83 (atom -> id .) + yacc.py:2687: then reduce using rule 83 (atom -> id .) + yacc.py:2687: loop reduce using rule 83 (atom -> id .) + yacc.py:2687: cpar reduce using rule 83 (atom -> id .) + yacc.py:2687: comma reduce using rule 83 (atom -> id .) + yacc.py:2687: in reduce using rule 83 (atom -> id .) + yacc.py:2687: else reduce using rule 83 (atom -> id .) + yacc.py:2687: pool reduce using rule 83 (atom -> id .) + yacc.py:2687: error reduce using rule 83 (atom -> id .) + yacc.py:2687: ccur reduce using rule 83 (atom -> id .) + yacc.py:2687: fi reduce using rule 83 (atom -> id .) + yacc.py:2687: opar shift and go to state 121 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 121 + yacc.py:2562:state 124 yacc.py:2563: yacc.py:2565: (62) comp -> comp less . op yacc.py:2565: (66) op -> . op plus term @@ -2544,39 +2735,44 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: id shift and go to state 120 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: op shift and go to state 161 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: error shift and go to state 71 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: id shift and go to state 123 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: op shift and go to state 167 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 122 + yacc.py:2562:state 125 yacc.py:2563: yacc.py:2565: (63) comp -> comp lesseq . op yacc.py:2565: (66) op -> . op plus term @@ -2589,39 +2785,44 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: id shift and go to state 120 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: op shift and go to state 162 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: error shift and go to state 71 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: id shift and go to state 123 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: op shift and go to state 168 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 123 + yacc.py:2562:state 126 yacc.py:2563: yacc.py:2565: (64) comp -> comp equal . op yacc.py:2565: (66) op -> . op plus term @@ -2634,39 +2835,44 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: id shift and go to state 120 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: op shift and go to state 163 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: error shift and go to state 71 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: id shift and go to state 123 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: op shift and go to state 169 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 124 + yacc.py:2562:state 127 yacc.py:2563: yacc.py:2565: (66) op -> op plus . term yacc.py:2565: (69) term -> . term star base_call @@ -2676,38 +2882,43 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: id shift and go to state 120 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: term shift and go to state 164 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: error shift and go to state 71 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: id shift and go to state 123 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: term shift and go to state 170 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 125 + yacc.py:2562:state 128 yacc.py:2563: yacc.py:2565: (67) op -> op minus . term yacc.py:2565: (69) term -> . term star base_call @@ -2717,104 +2928,119 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: id shift and go to state 120 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: term shift and go to state 165 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: error shift and go to state 71 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: id shift and go to state 123 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: term shift and go to state 171 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 126 + yacc.py:2562:state 129 yacc.py:2563: yacc.py:2565: (69) term -> term star . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: id shift and go to state 120 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: base_call shift and go to state 166 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 71 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: id shift and go to state 123 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 172 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 127 + yacc.py:2562:state 130 yacc.py:2563: yacc.py:2565: (70) term -> term div . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: id shift and go to state 120 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: base_call shift and go to state 167 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 71 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: id shift and go to state 123 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 173 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 128 + yacc.py:2562:state 131 yacc.py:2563: yacc.py:2565: (71) term -> isvoid base_call . yacc.py:2566: @@ -2839,7 +3065,7 @@ yacc.py:2687: fi reduce using rule 71 (term -> isvoid base_call .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 129 + yacc.py:2562:state 132 yacc.py:2563: yacc.py:2565: (72) term -> nox base_call . yacc.py:2566: @@ -2864,106 +3090,113 @@ yacc.py:2687: fi reduce using rule 72 (term -> nox base_call .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 130 + yacc.py:2562:state 133 yacc.py:2563: yacc.py:2565: (74) base_call -> factor arroba . type dot func_call + yacc.py:2565: (77) base_call -> factor arroba . error dot func_call yacc.py:2566: - yacc.py:2687: type shift and go to state 168 + yacc.py:2687: type shift and go to state 174 + yacc.py:2687: error shift and go to state 175 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 131 + yacc.py:2562:state 134 yacc.py:2563: - yacc.py:2565: (78) factor -> factor dot . func_call - yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2565: (80) factor -> factor dot . func_call + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar yacc.py:2566: - yacc.py:2687: id shift and go to state 170 + yacc.py:2687: id shift and go to state 177 + yacc.py:2687: error shift and go to state 178 yacc.py:2689: - yacc.py:2714: func_call shift and go to state 169 + yacc.py:2714: func_call shift and go to state 176 yacc.py:2561: - yacc.py:2562:state 132 + yacc.py:2562:state 135 yacc.py:2563: - yacc.py:2565: (77) factor -> opar expr . cpar + yacc.py:2565: (79) factor -> opar expr . cpar yacc.py:2566: - yacc.py:2687: cpar shift and go to state 171 + yacc.py:2687: cpar shift and go to state 179 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 133 + yacc.py:2562:state 136 yacc.py:2563: - yacc.py:2565: (82) atom -> new type . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 82 (atom -> new type .) - yacc.py:2687: dot reduce using rule 82 (atom -> new type .) - yacc.py:2687: star reduce using rule 82 (atom -> new type .) - yacc.py:2687: div reduce using rule 82 (atom -> new type .) - yacc.py:2687: plus reduce using rule 82 (atom -> new type .) - yacc.py:2687: minus reduce using rule 82 (atom -> new type .) - yacc.py:2687: less reduce using rule 82 (atom -> new type .) - yacc.py:2687: lesseq reduce using rule 82 (atom -> new type .) - yacc.py:2687: equal reduce using rule 82 (atom -> new type .) - yacc.py:2687: semi reduce using rule 82 (atom -> new type .) - yacc.py:2687: of reduce using rule 82 (atom -> new type .) - yacc.py:2687: then reduce using rule 82 (atom -> new type .) - yacc.py:2687: loop reduce using rule 82 (atom -> new type .) - yacc.py:2687: cpar reduce using rule 82 (atom -> new type .) - yacc.py:2687: comma reduce using rule 82 (atom -> new type .) - yacc.py:2687: in reduce using rule 82 (atom -> new type .) - yacc.py:2687: else reduce using rule 82 (atom -> new type .) - yacc.py:2687: pool reduce using rule 82 (atom -> new type .) - yacc.py:2687: error reduce using rule 82 (atom -> new type .) - yacc.py:2687: ccur reduce using rule 82 (atom -> new type .) - yacc.py:2687: fi reduce using rule 82 (atom -> new type .) + yacc.py:2565: (84) atom -> new type . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 84 (atom -> new type .) + yacc.py:2687: dot reduce using rule 84 (atom -> new type .) + yacc.py:2687: star reduce using rule 84 (atom -> new type .) + yacc.py:2687: div reduce using rule 84 (atom -> new type .) + yacc.py:2687: plus reduce using rule 84 (atom -> new type .) + yacc.py:2687: minus reduce using rule 84 (atom -> new type .) + yacc.py:2687: less reduce using rule 84 (atom -> new type .) + yacc.py:2687: lesseq reduce using rule 84 (atom -> new type .) + yacc.py:2687: equal reduce using rule 84 (atom -> new type .) + yacc.py:2687: semi reduce using rule 84 (atom -> new type .) + yacc.py:2687: of reduce using rule 84 (atom -> new type .) + yacc.py:2687: then reduce using rule 84 (atom -> new type .) + yacc.py:2687: loop reduce using rule 84 (atom -> new type .) + yacc.py:2687: cpar reduce using rule 84 (atom -> new type .) + yacc.py:2687: comma reduce using rule 84 (atom -> new type .) + yacc.py:2687: in reduce using rule 84 (atom -> new type .) + yacc.py:2687: else reduce using rule 84 (atom -> new type .) + yacc.py:2687: pool reduce using rule 84 (atom -> new type .) + yacc.py:2687: error reduce using rule 84 (atom -> new type .) + yacc.py:2687: ccur reduce using rule 84 (atom -> new type .) + yacc.py:2687: fi reduce using rule 84 (atom -> new type .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 134 + yacc.py:2562:state 137 yacc.py:2563: - yacc.py:2565: (83) atom -> new error . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 83 (atom -> new error .) - yacc.py:2687: dot reduce using rule 83 (atom -> new error .) - yacc.py:2687: star reduce using rule 83 (atom -> new error .) - yacc.py:2687: div reduce using rule 83 (atom -> new error .) - yacc.py:2687: plus reduce using rule 83 (atom -> new error .) - yacc.py:2687: minus reduce using rule 83 (atom -> new error .) - yacc.py:2687: less reduce using rule 83 (atom -> new error .) - yacc.py:2687: lesseq reduce using rule 83 (atom -> new error .) - yacc.py:2687: equal reduce using rule 83 (atom -> new error .) - yacc.py:2687: semi reduce using rule 83 (atom -> new error .) - yacc.py:2687: of reduce using rule 83 (atom -> new error .) - yacc.py:2687: then reduce using rule 83 (atom -> new error .) - yacc.py:2687: loop reduce using rule 83 (atom -> new error .) - yacc.py:2687: cpar reduce using rule 83 (atom -> new error .) - yacc.py:2687: comma reduce using rule 83 (atom -> new error .) - yacc.py:2687: in reduce using rule 83 (atom -> new error .) - yacc.py:2687: else reduce using rule 83 (atom -> new error .) - yacc.py:2687: pool reduce using rule 83 (atom -> new error .) - yacc.py:2687: error reduce using rule 83 (atom -> new error .) - yacc.py:2687: ccur reduce using rule 83 (atom -> new error .) - yacc.py:2687: fi reduce using rule 83 (atom -> new error .) + yacc.py:2565: (85) atom -> new error . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 85 (atom -> new error .) + yacc.py:2687: dot reduce using rule 85 (atom -> new error .) + yacc.py:2687: star reduce using rule 85 (atom -> new error .) + yacc.py:2687: div reduce using rule 85 (atom -> new error .) + yacc.py:2687: plus reduce using rule 85 (atom -> new error .) + yacc.py:2687: minus reduce using rule 85 (atom -> new error .) + yacc.py:2687: less reduce using rule 85 (atom -> new error .) + yacc.py:2687: lesseq reduce using rule 85 (atom -> new error .) + yacc.py:2687: equal reduce using rule 85 (atom -> new error .) + yacc.py:2687: semi reduce using rule 85 (atom -> new error .) + yacc.py:2687: of reduce using rule 85 (atom -> new error .) + yacc.py:2687: then reduce using rule 85 (atom -> new error .) + yacc.py:2687: loop reduce using rule 85 (atom -> new error .) + yacc.py:2687: cpar reduce using rule 85 (atom -> new error .) + yacc.py:2687: comma reduce using rule 85 (atom -> new error .) + yacc.py:2687: in reduce using rule 85 (atom -> new error .) + yacc.py:2687: else reduce using rule 85 (atom -> new error .) + yacc.py:2687: pool reduce using rule 85 (atom -> new error .) + yacc.py:2687: error reduce using rule 85 (atom -> new error .) + yacc.py:2687: ccur reduce using rule 85 (atom -> new error .) + yacc.py:2687: fi reduce using rule 85 (atom -> new error .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 135 + yacc.py:2562:state 138 yacc.py:2563: - yacc.py:2565: (84) atom -> ocur block . ccur + yacc.py:2565: (86) atom -> ocur block . ccur yacc.py:2566: - yacc.py:2687: ccur shift and go to state 172 + yacc.py:2687: ccur shift and go to state 180 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 136 + yacc.py:2562:state 139 yacc.py:2563: - yacc.py:2565: (88) block -> expr . semi - yacc.py:2565: (89) block -> expr . semi block + yacc.py:2565: (90) block -> expr . semi + yacc.py:2565: (91) block -> expr . semi block yacc.py:2566: - yacc.py:2687: semi shift and go to state 173 + yacc.py:2687: semi shift and go to state 181 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 137 + yacc.py:2562:state 140 yacc.py:2563: - yacc.py:2565: (90) block -> error . block - yacc.py:2565: (91) block -> error . - yacc.py:2565: (88) block -> . expr semi - yacc.py:2565: (89) block -> . expr semi block - yacc.py:2565: (90) block -> . error block - yacc.py:2565: (91) block -> . error + yacc.py:2565: (92) block -> error . block + yacc.py:2565: (93) block -> error . + yacc.py:2565: (76) base_call -> error . arroba type dot func_call + yacc.py:2565: (96) func_call -> error . opar args cpar + yacc.py:2565: (90) block -> . expr semi + yacc.py:2565: (91) block -> . expr semi block + yacc.py:2565: (92) block -> . error block + yacc.py:2565: (93) block -> . error yacc.py:2565: (35) expr -> . let let_list in expr yacc.py:2565: (36) expr -> . let error in expr yacc.py:2565: (37) expr -> . let let_list in error @@ -2996,82 +3229,98 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 91 (block -> error .) - yacc.py:2687: error shift and go to state 137 - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: block shift and go to state 174 - yacc.py:2714: expr shift and go to state 136 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 93 (block -> error .) + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 183 + yacc.py:2687: error shift and go to state 140 + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: block shift and go to state 182 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: expr shift and go to state 139 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 138 + yacc.py:2562:state 141 yacc.py:2563: yacc.py:2565: (24) def_func -> error opar formals cpar colon type . ocur expr ccur yacc.py:2566: - yacc.py:2687: ocur shift and go to state 175 + yacc.py:2687: ocur shift and go to state 184 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 139 + yacc.py:2562:state 142 yacc.py:2563: yacc.py:2565: (23) def_func -> id opar formals cpar colon type . ocur expr ccur yacc.py:2565: (27) def_func -> id opar formals cpar colon type . ocur error ccur yacc.py:2566: - yacc.py:2687: ocur shift and go to state 176 + yacc.py:2687: ocur shift and go to state 185 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 140 + yacc.py:2562:state 143 yacc.py:2563: yacc.py:2565: (26) def_func -> id opar formals cpar colon error . ocur expr ccur yacc.py:2566: - yacc.py:2687: ocur shift and go to state 177 + yacc.py:2687: ocur shift and go to state 186 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 141 + yacc.py:2562:state 144 yacc.py:2563: yacc.py:2565: (25) def_func -> id opar error cpar colon type . ocur expr ccur yacc.py:2566: - yacc.py:2687: ocur shift and go to state 178 + yacc.py:2687: ocur shift and go to state 187 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 142 + yacc.py:2562:state 145 yacc.py:2563: - yacc.py:2565: (35) expr -> let let_list in . expr - yacc.py:2565: (37) expr -> let let_list in . error + yacc.py:2565: (76) base_call -> error arroba type . dot func_call + yacc.py:2566: + yacc.py:2687: dot shift and go to state 188 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 146 + yacc.py:2563: + yacc.py:2565: (101) arg_list -> error . arg_list + yacc.py:2565: (76) base_call -> error . arroba type dot func_call + yacc.py:2565: (96) func_call -> error . opar args cpar + yacc.py:2565: (99) arg_list -> . expr + yacc.py:2565: (100) arg_list -> . expr comma arg_list + yacc.py:2565: (101) arg_list -> . error arg_list yacc.py:2565: (35) expr -> . let let_list in expr yacc.py:2565: (36) expr -> . let error in expr yacc.py:2565: (37) expr -> . let let_list in error @@ -3104,67 +3353,94 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 180 - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 179 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 183 + yacc.py:2687: error shift and go to state 146 + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: arg_list shift and go to state 189 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: expr shift and go to state 150 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 143 + yacc.py:2562:state 147 yacc.py:2563: - yacc.py:2565: (52) let_list -> error . let_list - yacc.py:2565: (50) let_list -> . let_assign - yacc.py:2565: (51) let_list -> . let_assign comma let_list - yacc.py:2565: (52) let_list -> . error let_list - yacc.py:2565: (53) let_assign -> . param larrow expr - yacc.py:2565: (54) let_assign -> . param - yacc.py:2565: (34) param -> . id colon type + yacc.py:2565: (96) func_call -> error opar args . cpar yacc.py:2566: - yacc.py:2687: error shift and go to state 143 - yacc.py:2687: id shift and go to state 48 + yacc.py:2687: cpar shift and go to state 190 yacc.py:2689: - yacc.py:2714: let_list shift and go to state 145 - yacc.py:2714: let_assign shift and go to state 109 - yacc.py:2714: param shift and go to state 110 yacc.py:2561: - yacc.py:2562:state 144 + yacc.py:2562:state 148 yacc.py:2563: - yacc.py:2565: (36) expr -> let error in . expr + yacc.py:2565: (97) args -> arg_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 97 (args -> arg_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 149 + yacc.py:2563: + yacc.py:2565: (98) args -> arg_list_empty . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 98 (args -> arg_list_empty .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 150 + yacc.py:2563: + yacc.py:2565: (99) arg_list -> expr . + yacc.py:2565: (100) arg_list -> expr . comma arg_list + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 99 (arg_list -> expr .) + yacc.py:2687: comma shift and go to state 191 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 151 + yacc.py:2563: + yacc.py:2565: (102) arg_list_empty -> epsilon . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 102 (arg_list_empty -> epsilon .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 152 + yacc.py:2563: + yacc.py:2565: (35) expr -> let let_list in . expr + yacc.py:2565: (37) expr -> let let_list in . error yacc.py:2565: (35) expr -> . let let_list in expr yacc.py:2565: (36) expr -> . let error in expr yacc.py:2565: (37) expr -> . let let_list in error @@ -3197,54 +3473,156 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 181 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 193 + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 192 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 145 + yacc.py:2562:state 153 yacc.py:2563: - yacc.py:2565: (52) let_list -> error let_list . - yacc.py:2566: + yacc.py:2565: (52) let_list -> error . let_list + yacc.py:2565: (50) let_list -> . let_assign + yacc.py:2565: (51) let_list -> . let_assign comma let_list + yacc.py:2565: (52) let_list -> . error let_list + yacc.py:2565: (53) let_assign -> . param larrow expr + yacc.py:2565: (54) let_assign -> . param + yacc.py:2565: (34) param -> . id colon type + yacc.py:2566: + yacc.py:2687: error shift and go to state 153 + yacc.py:2687: id shift and go to state 48 + yacc.py:2689: + yacc.py:2714: let_list shift and go to state 155 + yacc.py:2714: let_assign shift and go to state 112 + yacc.py:2714: param shift and go to state 113 + yacc.py:2561: + yacc.py:2562:state 154 + yacc.py:2563: + yacc.py:2565: (36) expr -> let error in . expr + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: error shift and go to state 71 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 194 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 + yacc.py:2561: + yacc.py:2562:state 155 + yacc.py:2563: + yacc.py:2565: (52) let_list -> error let_list . + yacc.py:2566: yacc.py:2687: in reduce using rule 52 (let_list -> error let_list .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 146 + yacc.py:2562:state 156 yacc.py:2563: yacc.py:2565: (51) let_list -> let_assign comma . let_list yacc.py:2565: (50) let_list -> . let_assign @@ -3254,14 +3632,14 @@ yacc.py:2565: (54) let_assign -> . param yacc.py:2565: (34) param -> . id colon type yacc.py:2566: - yacc.py:2687: error shift and go to state 143 + yacc.py:2687: error shift and go to state 153 yacc.py:2687: id shift and go to state 48 yacc.py:2689: - yacc.py:2714: let_assign shift and go to state 109 - yacc.py:2714: let_list shift and go to state 182 - yacc.py:2714: param shift and go to state 110 + yacc.py:2714: let_assign shift and go to state 112 + yacc.py:2714: let_list shift and go to state 195 + yacc.py:2714: param shift and go to state 113 yacc.py:2561: - yacc.py:2562:state 147 + yacc.py:2562:state 157 yacc.py:2563: yacc.py:2565: (53) let_assign -> param larrow . expr yacc.py:2565: (35) expr -> . let let_list in expr @@ -3296,47 +3674,52 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 183 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: error shift and go to state 71 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 196 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 148 + yacc.py:2562:state 158 yacc.py:2563: yacc.py:2565: (38) expr -> case expr of . cases_list esac yacc.py:2565: (40) expr -> case expr of . error esac @@ -3345,13 +3728,13 @@ yacc.py:2565: (57) cases_list -> . error cases_list yacc.py:2565: (58) casep -> . id colon type rarrow expr yacc.py:2566: - yacc.py:2687: error shift and go to state 185 - yacc.py:2687: id shift and go to state 187 + yacc.py:2687: error shift and go to state 198 + yacc.py:2687: id shift and go to state 200 yacc.py:2689: - yacc.py:2714: cases_list shift and go to state 184 - yacc.py:2714: casep shift and go to state 186 + yacc.py:2714: cases_list shift and go to state 197 + yacc.py:2714: casep shift and go to state 199 yacc.py:2561: - yacc.py:2562:state 149 + yacc.py:2562:state 159 yacc.py:2563: yacc.py:2565: (39) expr -> case error of . cases_list esac yacc.py:2565: (55) cases_list -> . casep semi @@ -3359,13 +3742,13 @@ yacc.py:2565: (57) cases_list -> . error cases_list yacc.py:2565: (58) casep -> . id colon type rarrow expr yacc.py:2566: - yacc.py:2687: error shift and go to state 188 - yacc.py:2687: id shift and go to state 187 + yacc.py:2687: error shift and go to state 201 + yacc.py:2687: id shift and go to state 200 yacc.py:2689: - yacc.py:2714: cases_list shift and go to state 189 - yacc.py:2714: casep shift and go to state 186 + yacc.py:2714: cases_list shift and go to state 202 + yacc.py:2714: casep shift and go to state 199 yacc.py:2561: - yacc.py:2562:state 150 + yacc.py:2562:state 160 yacc.py:2563: yacc.py:2565: (41) expr -> if expr then . expr else expr fi yacc.py:2565: (43) expr -> if expr then . error else expr fi @@ -3402,48 +3785,52 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 191 - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 190 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 204 + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 203 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 151 + yacc.py:2562:state 161 yacc.py:2563: yacc.py:2565: (42) expr -> if error then . expr else expr fi yacc.py:2565: (35) expr -> . let let_list in expr @@ -3478,47 +3865,52 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: error shift and go to state 71 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: expr shift and go to state 192 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2714: expr shift and go to state 205 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 152 + yacc.py:2562:state 162 yacc.py:2563: yacc.py:2565: (45) expr -> while expr loop . expr pool yacc.py:2565: (47) expr -> while expr loop . error pool @@ -3555,48 +3947,52 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 194 - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 193 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 207 + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 206 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 153 + yacc.py:2562:state 163 yacc.py:2563: yacc.py:2565: (46) expr -> while error loop . expr pool yacc.py:2565: (35) expr -> . let let_list in expr @@ -3631,47 +4027,52 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 195 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: error shift and go to state 71 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 208 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 154 + yacc.py:2562:state 164 yacc.py:2563: yacc.py:2565: (59) arith -> id larrow expr . yacc.py:2566: @@ -3689,42 +4090,22 @@ yacc.py:2687: fi reduce using rule 59 (arith -> id larrow expr .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 155 - yacc.py:2563: - yacc.py:2565: (92) func_call -> id opar args . cpar - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 196 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 156 - yacc.py:2563: - yacc.py:2565: (93) args -> arg_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 93 (args -> arg_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 157 - yacc.py:2563: - yacc.py:2565: (94) args -> arg_list_empty . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 94 (args -> arg_list_empty .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 158 + yacc.py:2562:state 165 yacc.py:2563: - yacc.py:2565: (95) arg_list -> expr . - yacc.py:2565: (96) arg_list -> expr . comma arg_list + yacc.py:2565: (94) func_call -> id opar args . cpar yacc.py:2566: - yacc.py:2687: cpar reduce using rule 95 (arg_list -> expr .) - yacc.py:2687: comma shift and go to state 197 + yacc.py:2687: cpar shift and go to state 209 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 159 + yacc.py:2562:state 166 yacc.py:2563: - yacc.py:2565: (97) arg_list -> error . arg_list - yacc.py:2565: (95) arg_list -> . expr - yacc.py:2565: (96) arg_list -> . expr comma arg_list - yacc.py:2565: (97) arg_list -> . error arg_list + yacc.py:2565: (95) func_call -> id opar error . cpar + yacc.py:2565: (101) arg_list -> error . arg_list + yacc.py:2565: (76) base_call -> error . arroba type dot func_call + yacc.py:2565: (96) func_call -> error . opar args cpar + yacc.py:2565: (99) arg_list -> . expr + yacc.py:2565: (100) arg_list -> . expr comma arg_list + yacc.py:2565: (101) arg_list -> . error arg_list yacc.py:2565: (35) expr -> . let let_list in expr yacc.py:2565: (36) expr -> . let error in expr yacc.py:2565: (37) expr -> . let let_list in error @@ -3757,56 +4138,55 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 159 - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: arg_list shift and go to state 198 - yacc.py:2714: expr shift and go to state 158 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 - yacc.py:2561: - yacc.py:2562:state 160 - yacc.py:2563: - yacc.py:2565: (98) arg_list_empty -> epsilon . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 98 (arg_list_empty -> epsilon .) - yacc.py:2689: + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 210 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 183 + yacc.py:2687: error shift and go to state 146 + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: arg_list shift and go to state 189 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: expr shift and go to state 150 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 161 + yacc.py:2562:state 167 yacc.py:2563: yacc.py:2565: (62) comp -> comp less op . yacc.py:2565: (66) op -> op . plus term @@ -3827,11 +4207,11 @@ yacc.py:2687: error reduce using rule 62 (comp -> comp less op .) yacc.py:2687: ccur reduce using rule 62 (comp -> comp less op .) yacc.py:2687: fi reduce using rule 62 (comp -> comp less op .) - yacc.py:2687: plus shift and go to state 124 - yacc.py:2687: minus shift and go to state 125 + yacc.py:2687: plus shift and go to state 127 + yacc.py:2687: minus shift and go to state 128 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 162 + yacc.py:2562:state 168 yacc.py:2563: yacc.py:2565: (63) comp -> comp lesseq op . yacc.py:2565: (66) op -> op . plus term @@ -3852,11 +4232,11 @@ yacc.py:2687: error reduce using rule 63 (comp -> comp lesseq op .) yacc.py:2687: ccur reduce using rule 63 (comp -> comp lesseq op .) yacc.py:2687: fi reduce using rule 63 (comp -> comp lesseq op .) - yacc.py:2687: plus shift and go to state 124 - yacc.py:2687: minus shift and go to state 125 + yacc.py:2687: plus shift and go to state 127 + yacc.py:2687: minus shift and go to state 128 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 163 + yacc.py:2562:state 169 yacc.py:2563: yacc.py:2565: (64) comp -> comp equal op . yacc.py:2565: (66) op -> op . plus term @@ -3877,11 +4257,11 @@ yacc.py:2687: error reduce using rule 64 (comp -> comp equal op .) yacc.py:2687: ccur reduce using rule 64 (comp -> comp equal op .) yacc.py:2687: fi reduce using rule 64 (comp -> comp equal op .) - yacc.py:2687: plus shift and go to state 124 - yacc.py:2687: minus shift and go to state 125 + yacc.py:2687: plus shift and go to state 127 + yacc.py:2687: minus shift and go to state 128 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 164 + yacc.py:2562:state 170 yacc.py:2563: yacc.py:2565: (66) op -> op plus term . yacc.py:2565: (69) term -> term . star base_call @@ -3904,11 +4284,11 @@ yacc.py:2687: error reduce using rule 66 (op -> op plus term .) yacc.py:2687: ccur reduce using rule 66 (op -> op plus term .) yacc.py:2687: fi reduce using rule 66 (op -> op plus term .) - yacc.py:2687: star shift and go to state 126 - yacc.py:2687: div shift and go to state 127 + yacc.py:2687: star shift and go to state 129 + yacc.py:2687: div shift and go to state 130 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 165 + yacc.py:2562:state 171 yacc.py:2563: yacc.py:2565: (67) op -> op minus term . yacc.py:2565: (69) term -> term . star base_call @@ -3931,11 +4311,11 @@ yacc.py:2687: error reduce using rule 67 (op -> op minus term .) yacc.py:2687: ccur reduce using rule 67 (op -> op minus term .) yacc.py:2687: fi reduce using rule 67 (op -> op minus term .) - yacc.py:2687: star shift and go to state 126 - yacc.py:2687: div shift and go to state 127 + yacc.py:2687: star shift and go to state 129 + yacc.py:2687: div shift and go to state 130 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 166 + yacc.py:2562:state 172 yacc.py:2563: yacc.py:2565: (69) term -> term star base_call . yacc.py:2566: @@ -3960,7 +4340,7 @@ yacc.py:2687: fi reduce using rule 69 (term -> term star base_call .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 167 + yacc.py:2562:state 173 yacc.py:2563: yacc.py:2565: (70) term -> term div base_call . yacc.py:2566: @@ -3985,109 +4365,124 @@ yacc.py:2687: fi reduce using rule 70 (term -> term div base_call .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 168 + yacc.py:2562:state 174 yacc.py:2563: yacc.py:2565: (74) base_call -> factor arroba type . dot func_call yacc.py:2566: - yacc.py:2687: dot shift and go to state 199 + yacc.py:2687: dot shift and go to state 211 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 169 + yacc.py:2562:state 175 yacc.py:2563: - yacc.py:2565: (78) factor -> factor dot func_call . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 78 (factor -> factor dot func_call .) - yacc.py:2687: dot reduce using rule 78 (factor -> factor dot func_call .) - yacc.py:2687: star reduce using rule 78 (factor -> factor dot func_call .) - yacc.py:2687: div reduce using rule 78 (factor -> factor dot func_call .) - yacc.py:2687: plus reduce using rule 78 (factor -> factor dot func_call .) - yacc.py:2687: minus reduce using rule 78 (factor -> factor dot func_call .) - yacc.py:2687: less reduce using rule 78 (factor -> factor dot func_call .) - yacc.py:2687: lesseq reduce using rule 78 (factor -> factor dot func_call .) - yacc.py:2687: equal reduce using rule 78 (factor -> factor dot func_call .) - yacc.py:2687: semi reduce using rule 78 (factor -> factor dot func_call .) - yacc.py:2687: of reduce using rule 78 (factor -> factor dot func_call .) - yacc.py:2687: then reduce using rule 78 (factor -> factor dot func_call .) - yacc.py:2687: loop reduce using rule 78 (factor -> factor dot func_call .) - yacc.py:2687: cpar reduce using rule 78 (factor -> factor dot func_call .) - yacc.py:2687: comma reduce using rule 78 (factor -> factor dot func_call .) - yacc.py:2687: in reduce using rule 78 (factor -> factor dot func_call .) - yacc.py:2687: else reduce using rule 78 (factor -> factor dot func_call .) - yacc.py:2687: pool reduce using rule 78 (factor -> factor dot func_call .) - yacc.py:2687: error reduce using rule 78 (factor -> factor dot func_call .) - yacc.py:2687: ccur reduce using rule 78 (factor -> factor dot func_call .) - yacc.py:2687: fi reduce using rule 78 (factor -> factor dot func_call .) + yacc.py:2565: (77) base_call -> factor arroba error . dot func_call + yacc.py:2566: + yacc.py:2687: dot shift and go to state 212 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 170 + yacc.py:2562:state 176 yacc.py:2563: - yacc.py:2565: (92) func_call -> id . opar args cpar + yacc.py:2565: (80) factor -> factor dot func_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 80 (factor -> factor dot func_call .) + yacc.py:2687: dot reduce using rule 80 (factor -> factor dot func_call .) + yacc.py:2687: star reduce using rule 80 (factor -> factor dot func_call .) + yacc.py:2687: div reduce using rule 80 (factor -> factor dot func_call .) + yacc.py:2687: plus reduce using rule 80 (factor -> factor dot func_call .) + yacc.py:2687: minus reduce using rule 80 (factor -> factor dot func_call .) + yacc.py:2687: less reduce using rule 80 (factor -> factor dot func_call .) + yacc.py:2687: lesseq reduce using rule 80 (factor -> factor dot func_call .) + yacc.py:2687: equal reduce using rule 80 (factor -> factor dot func_call .) + yacc.py:2687: semi reduce using rule 80 (factor -> factor dot func_call .) + yacc.py:2687: of reduce using rule 80 (factor -> factor dot func_call .) + yacc.py:2687: then reduce using rule 80 (factor -> factor dot func_call .) + yacc.py:2687: loop reduce using rule 80 (factor -> factor dot func_call .) + yacc.py:2687: cpar reduce using rule 80 (factor -> factor dot func_call .) + yacc.py:2687: comma reduce using rule 80 (factor -> factor dot func_call .) + yacc.py:2687: in reduce using rule 80 (factor -> factor dot func_call .) + yacc.py:2687: else reduce using rule 80 (factor -> factor dot func_call .) + yacc.py:2687: pool reduce using rule 80 (factor -> factor dot func_call .) + yacc.py:2687: error reduce using rule 80 (factor -> factor dot func_call .) + yacc.py:2687: ccur reduce using rule 80 (factor -> factor dot func_call .) + yacc.py:2687: fi reduce using rule 80 (factor -> factor dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 177 + yacc.py:2563: + yacc.py:2565: (94) func_call -> id . opar args cpar + yacc.py:2565: (95) func_call -> id . opar error cpar yacc.py:2566: - yacc.py:2687: opar shift and go to state 118 + yacc.py:2687: opar shift and go to state 121 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 171 + yacc.py:2562:state 178 yacc.py:2563: - yacc.py:2565: (77) factor -> opar expr cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: dot reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: star reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: div reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: plus reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: minus reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: less reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: lesseq reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: equal reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: semi reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: of reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: then reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: loop reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: cpar reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: comma reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: in reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: else reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: pool reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: error reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: ccur reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: fi reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2565: (96) func_call -> error . opar args cpar + yacc.py:2566: + yacc.py:2687: opar shift and go to state 109 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 172 + yacc.py:2562:state 179 yacc.py:2563: - yacc.py:2565: (84) atom -> ocur block ccur . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 84 (atom -> ocur block ccur .) - yacc.py:2687: dot reduce using rule 84 (atom -> ocur block ccur .) - yacc.py:2687: star reduce using rule 84 (atom -> ocur block ccur .) - yacc.py:2687: div reduce using rule 84 (atom -> ocur block ccur .) - yacc.py:2687: plus reduce using rule 84 (atom -> ocur block ccur .) - yacc.py:2687: minus reduce using rule 84 (atom -> ocur block ccur .) - yacc.py:2687: less reduce using rule 84 (atom -> ocur block ccur .) - yacc.py:2687: lesseq reduce using rule 84 (atom -> ocur block ccur .) - yacc.py:2687: equal reduce using rule 84 (atom -> ocur block ccur .) - yacc.py:2687: semi reduce using rule 84 (atom -> ocur block ccur .) - yacc.py:2687: of reduce using rule 84 (atom -> ocur block ccur .) - yacc.py:2687: then reduce using rule 84 (atom -> ocur block ccur .) - yacc.py:2687: loop reduce using rule 84 (atom -> ocur block ccur .) - yacc.py:2687: cpar reduce using rule 84 (atom -> ocur block ccur .) - yacc.py:2687: comma reduce using rule 84 (atom -> ocur block ccur .) - yacc.py:2687: in reduce using rule 84 (atom -> ocur block ccur .) - yacc.py:2687: else reduce using rule 84 (atom -> ocur block ccur .) - yacc.py:2687: pool reduce using rule 84 (atom -> ocur block ccur .) - yacc.py:2687: error reduce using rule 84 (atom -> ocur block ccur .) - yacc.py:2687: ccur reduce using rule 84 (atom -> ocur block ccur .) - yacc.py:2687: fi reduce using rule 84 (atom -> ocur block ccur .) + yacc.py:2565: (79) factor -> opar expr cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 79 (factor -> opar expr cpar .) + yacc.py:2687: dot reduce using rule 79 (factor -> opar expr cpar .) + yacc.py:2687: star reduce using rule 79 (factor -> opar expr cpar .) + yacc.py:2687: div reduce using rule 79 (factor -> opar expr cpar .) + yacc.py:2687: plus reduce using rule 79 (factor -> opar expr cpar .) + yacc.py:2687: minus reduce using rule 79 (factor -> opar expr cpar .) + yacc.py:2687: less reduce using rule 79 (factor -> opar expr cpar .) + yacc.py:2687: lesseq reduce using rule 79 (factor -> opar expr cpar .) + yacc.py:2687: equal reduce using rule 79 (factor -> opar expr cpar .) + yacc.py:2687: semi reduce using rule 79 (factor -> opar expr cpar .) + yacc.py:2687: of reduce using rule 79 (factor -> opar expr cpar .) + yacc.py:2687: then reduce using rule 79 (factor -> opar expr cpar .) + yacc.py:2687: loop reduce using rule 79 (factor -> opar expr cpar .) + yacc.py:2687: cpar reduce using rule 79 (factor -> opar expr cpar .) + yacc.py:2687: comma reduce using rule 79 (factor -> opar expr cpar .) + yacc.py:2687: in reduce using rule 79 (factor -> opar expr cpar .) + yacc.py:2687: else reduce using rule 79 (factor -> opar expr cpar .) + yacc.py:2687: pool reduce using rule 79 (factor -> opar expr cpar .) + yacc.py:2687: error reduce using rule 79 (factor -> opar expr cpar .) + yacc.py:2687: ccur reduce using rule 79 (factor -> opar expr cpar .) + yacc.py:2687: fi reduce using rule 79 (factor -> opar expr cpar .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 173 + yacc.py:2562:state 180 + yacc.py:2563: + yacc.py:2565: (86) atom -> ocur block ccur . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 86 (atom -> ocur block ccur .) + yacc.py:2687: dot reduce using rule 86 (atom -> ocur block ccur .) + yacc.py:2687: star reduce using rule 86 (atom -> ocur block ccur .) + yacc.py:2687: div reduce using rule 86 (atom -> ocur block ccur .) + yacc.py:2687: plus reduce using rule 86 (atom -> ocur block ccur .) + yacc.py:2687: minus reduce using rule 86 (atom -> ocur block ccur .) + yacc.py:2687: less reduce using rule 86 (atom -> ocur block ccur .) + yacc.py:2687: lesseq reduce using rule 86 (atom -> ocur block ccur .) + yacc.py:2687: equal reduce using rule 86 (atom -> ocur block ccur .) + yacc.py:2687: semi reduce using rule 86 (atom -> ocur block ccur .) + yacc.py:2687: of reduce using rule 86 (atom -> ocur block ccur .) + yacc.py:2687: then reduce using rule 86 (atom -> ocur block ccur .) + yacc.py:2687: loop reduce using rule 86 (atom -> ocur block ccur .) + yacc.py:2687: cpar reduce using rule 86 (atom -> ocur block ccur .) + yacc.py:2687: comma reduce using rule 86 (atom -> ocur block ccur .) + yacc.py:2687: in reduce using rule 86 (atom -> ocur block ccur .) + yacc.py:2687: else reduce using rule 86 (atom -> ocur block ccur .) + yacc.py:2687: pool reduce using rule 86 (atom -> ocur block ccur .) + yacc.py:2687: error reduce using rule 86 (atom -> ocur block ccur .) + yacc.py:2687: ccur reduce using rule 86 (atom -> ocur block ccur .) + yacc.py:2687: fi reduce using rule 86 (atom -> ocur block ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 181 yacc.py:2563: - yacc.py:2565: (88) block -> expr semi . - yacc.py:2565: (89) block -> expr semi . block - yacc.py:2565: (88) block -> . expr semi - yacc.py:2565: (89) block -> . expr semi block - yacc.py:2565: (90) block -> . error block - yacc.py:2565: (91) block -> . error + yacc.py:2565: (90) block -> expr semi . + yacc.py:2565: (91) block -> expr semi . block + yacc.py:2565: (90) block -> . expr semi + yacc.py:2565: (91) block -> . expr semi block + yacc.py:2565: (92) block -> . error block + yacc.py:2565: (93) block -> . error yacc.py:2565: (35) expr -> . let let_list in expr yacc.py:2565: (36) expr -> . let error in expr yacc.py:2565: (37) expr -> . let let_list in error @@ -4120,57 +4515,154 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 88 (block -> expr semi .) - yacc.py:2687: error shift and go to state 137 - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 136 - yacc.py:2714: block shift and go to state 200 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 90 (block -> expr semi .) + yacc.py:2687: error shift and go to state 140 + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 139 + yacc.py:2714: block shift and go to state 213 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 174 + yacc.py:2562:state 182 yacc.py:2563: - yacc.py:2565: (90) block -> error block . + yacc.py:2565: (92) block -> error block . yacc.py:2566: - yacc.py:2687: ccur reduce using rule 90 (block -> error block .) + yacc.py:2687: ccur reduce using rule 92 (block -> error block .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 175 + yacc.py:2562:state 183 + yacc.py:2563: + yacc.py:2565: (96) func_call -> error opar . args cpar + yacc.py:2565: (79) factor -> opar . expr cpar + yacc.py:2565: (97) args -> . arg_list + yacc.py:2565: (98) args -> . arg_list_empty + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (99) arg_list -> . expr + yacc.py:2565: (100) arg_list -> . expr comma arg_list + yacc.py:2565: (101) arg_list -> . error arg_list + yacc.py:2565: (102) arg_list_empty -> . epsilon + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: error shift and go to state 146 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: args shift and go to state 147 + yacc.py:2714: expr shift and go to state 214 + yacc.py:2714: arg_list shift and go to state 148 + yacc.py:2714: arg_list_empty shift and go to state 149 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: epsilon shift and go to state 151 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 + yacc.py:2561: + yacc.py:2562:state 184 yacc.py:2563: yacc.py:2565: (24) def_func -> error opar formals cpar colon type ocur . expr ccur yacc.py:2565: (35) expr -> . let let_list in expr @@ -4205,47 +4697,52 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 201 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: error shift and go to state 71 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 215 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 176 + yacc.py:2562:state 185 yacc.py:2563: yacc.py:2565: (23) def_func -> id opar formals cpar colon type ocur . expr ccur yacc.py:2565: (27) def_func -> id opar formals cpar colon type ocur . error ccur @@ -4281,48 +4778,52 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 203 - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 202 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 217 + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 216 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 177 + yacc.py:2562:state 186 yacc.py:2563: yacc.py:2565: (26) def_func -> id opar formals cpar colon error ocur . expr ccur yacc.py:2565: (35) expr -> . let let_list in expr @@ -4357,47 +4858,52 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 204 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: error shift and go to state 71 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 218 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 178 + yacc.py:2562:state 187 yacc.py:2563: yacc.py:2565: (25) def_func -> id opar error cpar colon type ocur . expr ccur yacc.py:2565: (35) expr -> . let let_list in expr @@ -4432,47 +4938,182 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: error shift and go to state 71 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 219 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 + yacc.py:2561: + yacc.py:2562:state 188 + yacc.py:2563: + yacc.py:2565: (76) base_call -> error arroba type dot . func_call + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 177 + yacc.py:2687: error shift and go to state 178 yacc.py:2689: - yacc.py:2714: expr shift and go to state 205 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2714: func_call shift and go to state 220 yacc.py:2561: - yacc.py:2562:state 179 + yacc.py:2562:state 189 + yacc.py:2563: + yacc.py:2565: (101) arg_list -> error arg_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 101 (arg_list -> error arg_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 190 + yacc.py:2563: + yacc.py:2565: (96) func_call -> error opar args cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 96 (func_call -> error opar args cpar .) + yacc.py:2687: dot reduce using rule 96 (func_call -> error opar args cpar .) + yacc.py:2687: star reduce using rule 96 (func_call -> error opar args cpar .) + yacc.py:2687: div reduce using rule 96 (func_call -> error opar args cpar .) + yacc.py:2687: plus reduce using rule 96 (func_call -> error opar args cpar .) + yacc.py:2687: minus reduce using rule 96 (func_call -> error opar args cpar .) + yacc.py:2687: less reduce using rule 96 (func_call -> error opar args cpar .) + yacc.py:2687: lesseq reduce using rule 96 (func_call -> error opar args cpar .) + yacc.py:2687: equal reduce using rule 96 (func_call -> error opar args cpar .) + yacc.py:2687: semi reduce using rule 96 (func_call -> error opar args cpar .) + yacc.py:2687: of reduce using rule 96 (func_call -> error opar args cpar .) + yacc.py:2687: then reduce using rule 96 (func_call -> error opar args cpar .) + yacc.py:2687: loop reduce using rule 96 (func_call -> error opar args cpar .) + yacc.py:2687: cpar reduce using rule 96 (func_call -> error opar args cpar .) + yacc.py:2687: comma reduce using rule 96 (func_call -> error opar args cpar .) + yacc.py:2687: in reduce using rule 96 (func_call -> error opar args cpar .) + yacc.py:2687: else reduce using rule 96 (func_call -> error opar args cpar .) + yacc.py:2687: pool reduce using rule 96 (func_call -> error opar args cpar .) + yacc.py:2687: error reduce using rule 96 (func_call -> error opar args cpar .) + yacc.py:2687: ccur reduce using rule 96 (func_call -> error opar args cpar .) + yacc.py:2687: fi reduce using rule 96 (func_call -> error opar args cpar .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 191 + yacc.py:2563: + yacc.py:2565: (100) arg_list -> expr comma . arg_list + yacc.py:2565: (99) arg_list -> . expr + yacc.py:2565: (100) arg_list -> . expr comma arg_list + yacc.py:2565: (101) arg_list -> . error arg_list + yacc.py:2565: (35) expr -> . let let_list in expr + yacc.py:2565: (36) expr -> . let error in expr + yacc.py:2565: (37) expr -> . let let_list in error + yacc.py:2565: (38) expr -> . case expr of cases_list esac + yacc.py:2565: (39) expr -> . case error of cases_list esac + yacc.py:2565: (40) expr -> . case expr of error esac + yacc.py:2565: (41) expr -> . if expr then expr else expr fi + yacc.py:2565: (42) expr -> . if error then expr else expr fi + yacc.py:2565: (43) expr -> . if expr then error else expr fi + yacc.py:2565: (44) expr -> . if expr then expr else error fi + yacc.py:2565: (45) expr -> . while expr loop expr pool + yacc.py:2565: (46) expr -> . while error loop expr pool + yacc.py:2565: (47) expr -> . while expr loop error pool + yacc.py:2565: (48) expr -> . while expr loop expr error + yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (59) arith -> . id larrow expr + yacc.py:2565: (60) arith -> . not comp + yacc.py:2565: (61) arith -> . comp + yacc.py:2565: (62) comp -> . comp less op + yacc.py:2565: (63) comp -> . comp lesseq op + yacc.py:2565: (64) comp -> . comp equal op + yacc.py:2565: (65) comp -> . op + yacc.py:2565: (66) op -> . op plus term + yacc.py:2565: (67) op -> . op minus term + yacc.py:2565: (68) op -> . term + yacc.py:2565: (69) term -> . term star base_call + yacc.py:2565: (70) term -> . term div base_call + yacc.py:2565: (71) term -> . isvoid base_call + yacc.py:2565: (72) term -> . nox base_call + yacc.py:2565: (73) term -> . base_call + yacc.py:2565: (74) base_call -> . factor arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 146 + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 150 + yacc.py:2714: arg_list shift and go to state 221 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 + yacc.py:2561: + yacc.py:2562:state 192 yacc.py:2563: yacc.py:2565: (35) expr -> let let_list in expr . yacc.py:2566: @@ -4490,9 +5131,11 @@ yacc.py:2687: fi reduce using rule 35 (expr -> let let_list in expr .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 180 + yacc.py:2562:state 193 yacc.py:2563: yacc.py:2565: (37) expr -> let let_list in error . + yacc.py:2565: (76) base_call -> error . arroba type dot func_call + yacc.py:2565: (96) func_call -> error . opar args cpar yacc.py:2566: yacc.py:2687: semi reduce using rule 37 (expr -> let let_list in error .) yacc.py:2687: of reduce using rule 37 (expr -> let let_list in error .) @@ -4506,9 +5149,11 @@ yacc.py:2687: error reduce using rule 37 (expr -> let let_list in error .) yacc.py:2687: ccur reduce using rule 37 (expr -> let let_list in error .) yacc.py:2687: fi reduce using rule 37 (expr -> let let_list in error .) + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 109 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 181 + yacc.py:2562:state 194 yacc.py:2563: yacc.py:2565: (36) expr -> let error in expr . yacc.py:2566: @@ -4526,14 +5171,14 @@ yacc.py:2687: fi reduce using rule 36 (expr -> let error in expr .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 182 + yacc.py:2562:state 195 yacc.py:2563: yacc.py:2565: (51) let_list -> let_assign comma let_list . yacc.py:2566: yacc.py:2687: in reduce using rule 51 (let_list -> let_assign comma let_list .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 183 + yacc.py:2562:state 196 yacc.py:2563: yacc.py:2565: (53) let_assign -> param larrow expr . yacc.py:2566: @@ -4541,14 +5186,14 @@ yacc.py:2687: in reduce using rule 53 (let_assign -> param larrow expr .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 184 + yacc.py:2562:state 197 yacc.py:2563: yacc.py:2565: (38) expr -> case expr of cases_list . esac yacc.py:2566: - yacc.py:2687: esac shift and go to state 206 + yacc.py:2687: esac shift and go to state 222 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 185 + yacc.py:2562:state 198 yacc.py:2563: yacc.py:2565: (40) expr -> case expr of error . esac yacc.py:2565: (57) cases_list -> error . cases_list @@ -4557,29 +5202,29 @@ yacc.py:2565: (57) cases_list -> . error cases_list yacc.py:2565: (58) casep -> . id colon type rarrow expr yacc.py:2566: - yacc.py:2687: esac shift and go to state 207 - yacc.py:2687: error shift and go to state 188 - yacc.py:2687: id shift and go to state 187 + yacc.py:2687: esac shift and go to state 223 + yacc.py:2687: error shift and go to state 201 + yacc.py:2687: id shift and go to state 200 yacc.py:2689: - yacc.py:2714: cases_list shift and go to state 208 - yacc.py:2714: casep shift and go to state 186 + yacc.py:2714: cases_list shift and go to state 224 + yacc.py:2714: casep shift and go to state 199 yacc.py:2561: - yacc.py:2562:state 186 + yacc.py:2562:state 199 yacc.py:2563: yacc.py:2565: (55) cases_list -> casep . semi yacc.py:2565: (56) cases_list -> casep . semi cases_list yacc.py:2566: - yacc.py:2687: semi shift and go to state 209 + yacc.py:2687: semi shift and go to state 225 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 187 + yacc.py:2562:state 200 yacc.py:2563: yacc.py:2565: (58) casep -> id . colon type rarrow expr yacc.py:2566: - yacc.py:2687: colon shift and go to state 210 + yacc.py:2687: colon shift and go to state 226 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 188 + yacc.py:2562:state 201 yacc.py:2563: yacc.py:2565: (57) cases_list -> error . cases_list yacc.py:2565: (55) cases_list -> . casep semi @@ -4587,230 +5232,242 @@ yacc.py:2565: (57) cases_list -> . error cases_list yacc.py:2565: (58) casep -> . id colon type rarrow expr yacc.py:2566: - yacc.py:2687: error shift and go to state 188 - yacc.py:2687: id shift and go to state 187 + yacc.py:2687: error shift and go to state 201 + yacc.py:2687: id shift and go to state 200 yacc.py:2689: - yacc.py:2714: cases_list shift and go to state 208 - yacc.py:2714: casep shift and go to state 186 + yacc.py:2714: cases_list shift and go to state 224 + yacc.py:2714: casep shift and go to state 199 yacc.py:2561: - yacc.py:2562:state 189 + yacc.py:2562:state 202 yacc.py:2563: yacc.py:2565: (39) expr -> case error of cases_list . esac yacc.py:2566: - yacc.py:2687: esac shift and go to state 211 + yacc.py:2687: esac shift and go to state 227 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 190 + yacc.py:2562:state 203 yacc.py:2563: yacc.py:2565: (41) expr -> if expr then expr . else expr fi yacc.py:2565: (44) expr -> if expr then expr . else error fi yacc.py:2566: - yacc.py:2687: else shift and go to state 212 + yacc.py:2687: else shift and go to state 228 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 191 + yacc.py:2562:state 204 yacc.py:2563: yacc.py:2565: (43) expr -> if expr then error . else expr fi + yacc.py:2565: (76) base_call -> error . arroba type dot func_call + yacc.py:2565: (96) func_call -> error . opar args cpar yacc.py:2566: - yacc.py:2687: else shift and go to state 213 + yacc.py:2687: else shift and go to state 229 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 109 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 192 + yacc.py:2562:state 205 yacc.py:2563: yacc.py:2565: (42) expr -> if error then expr . else expr fi yacc.py:2566: - yacc.py:2687: else shift and go to state 214 + yacc.py:2687: else shift and go to state 230 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 193 + yacc.py:2562:state 206 yacc.py:2563: yacc.py:2565: (45) expr -> while expr loop expr . pool yacc.py:2565: (48) expr -> while expr loop expr . error yacc.py:2566: - yacc.py:2687: pool shift and go to state 215 - yacc.py:2687: error shift and go to state 216 + yacc.py:2687: pool shift and go to state 231 + yacc.py:2687: error shift and go to state 232 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 194 + yacc.py:2562:state 207 yacc.py:2563: yacc.py:2565: (47) expr -> while expr loop error . pool + yacc.py:2565: (76) base_call -> error . arroba type dot func_call + yacc.py:2565: (96) func_call -> error . opar args cpar yacc.py:2566: - yacc.py:2687: pool shift and go to state 217 + yacc.py:2687: pool shift and go to state 233 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 109 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 195 + yacc.py:2562:state 208 yacc.py:2563: yacc.py:2565: (46) expr -> while error loop expr . pool yacc.py:2566: - yacc.py:2687: pool shift and go to state 218 + yacc.py:2687: pool shift and go to state 234 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 196 + yacc.py:2562:state 209 yacc.py:2563: - yacc.py:2565: (92) func_call -> id opar args cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 92 (func_call -> id opar args cpar .) - yacc.py:2687: dot reduce using rule 92 (func_call -> id opar args cpar .) - yacc.py:2687: star reduce using rule 92 (func_call -> id opar args cpar .) - yacc.py:2687: div reduce using rule 92 (func_call -> id opar args cpar .) - yacc.py:2687: plus reduce using rule 92 (func_call -> id opar args cpar .) - yacc.py:2687: minus reduce using rule 92 (func_call -> id opar args cpar .) - yacc.py:2687: less reduce using rule 92 (func_call -> id opar args cpar .) - yacc.py:2687: lesseq reduce using rule 92 (func_call -> id opar args cpar .) - yacc.py:2687: equal reduce using rule 92 (func_call -> id opar args cpar .) - yacc.py:2687: semi reduce using rule 92 (func_call -> id opar args cpar .) - yacc.py:2687: of reduce using rule 92 (func_call -> id opar args cpar .) - yacc.py:2687: then reduce using rule 92 (func_call -> id opar args cpar .) - yacc.py:2687: loop reduce using rule 92 (func_call -> id opar args cpar .) - yacc.py:2687: cpar reduce using rule 92 (func_call -> id opar args cpar .) - yacc.py:2687: comma reduce using rule 92 (func_call -> id opar args cpar .) - yacc.py:2687: in reduce using rule 92 (func_call -> id opar args cpar .) - yacc.py:2687: else reduce using rule 92 (func_call -> id opar args cpar .) - yacc.py:2687: pool reduce using rule 92 (func_call -> id opar args cpar .) - yacc.py:2687: error reduce using rule 92 (func_call -> id opar args cpar .) - yacc.py:2687: ccur reduce using rule 92 (func_call -> id opar args cpar .) - yacc.py:2687: fi reduce using rule 92 (func_call -> id opar args cpar .) + yacc.py:2565: (94) func_call -> id opar args cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 94 (func_call -> id opar args cpar .) + yacc.py:2687: dot reduce using rule 94 (func_call -> id opar args cpar .) + yacc.py:2687: star reduce using rule 94 (func_call -> id opar args cpar .) + yacc.py:2687: div reduce using rule 94 (func_call -> id opar args cpar .) + yacc.py:2687: plus reduce using rule 94 (func_call -> id opar args cpar .) + yacc.py:2687: minus reduce using rule 94 (func_call -> id opar args cpar .) + yacc.py:2687: less reduce using rule 94 (func_call -> id opar args cpar .) + yacc.py:2687: lesseq reduce using rule 94 (func_call -> id opar args cpar .) + yacc.py:2687: equal reduce using rule 94 (func_call -> id opar args cpar .) + yacc.py:2687: semi reduce using rule 94 (func_call -> id opar args cpar .) + yacc.py:2687: of reduce using rule 94 (func_call -> id opar args cpar .) + yacc.py:2687: then reduce using rule 94 (func_call -> id opar args cpar .) + yacc.py:2687: loop reduce using rule 94 (func_call -> id opar args cpar .) + yacc.py:2687: cpar reduce using rule 94 (func_call -> id opar args cpar .) + yacc.py:2687: comma reduce using rule 94 (func_call -> id opar args cpar .) + yacc.py:2687: in reduce using rule 94 (func_call -> id opar args cpar .) + yacc.py:2687: else reduce using rule 94 (func_call -> id opar args cpar .) + yacc.py:2687: pool reduce using rule 94 (func_call -> id opar args cpar .) + yacc.py:2687: error reduce using rule 94 (func_call -> id opar args cpar .) + yacc.py:2687: ccur reduce using rule 94 (func_call -> id opar args cpar .) + yacc.py:2687: fi reduce using rule 94 (func_call -> id opar args cpar .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 197 + yacc.py:2562:state 210 yacc.py:2563: - yacc.py:2565: (96) arg_list -> expr comma . arg_list - yacc.py:2565: (95) arg_list -> . expr - yacc.py:2565: (96) arg_list -> . expr comma arg_list - yacc.py:2565: (97) arg_list -> . error arg_list - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 159 - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 158 - yacc.py:2714: arg_list shift and go to state 219 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (95) func_call -> id opar error cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 95 (func_call -> id opar error cpar .) + yacc.py:2687: dot reduce using rule 95 (func_call -> id opar error cpar .) + yacc.py:2687: star reduce using rule 95 (func_call -> id opar error cpar .) + yacc.py:2687: div reduce using rule 95 (func_call -> id opar error cpar .) + yacc.py:2687: plus reduce using rule 95 (func_call -> id opar error cpar .) + yacc.py:2687: minus reduce using rule 95 (func_call -> id opar error cpar .) + yacc.py:2687: less reduce using rule 95 (func_call -> id opar error cpar .) + yacc.py:2687: lesseq reduce using rule 95 (func_call -> id opar error cpar .) + yacc.py:2687: equal reduce using rule 95 (func_call -> id opar error cpar .) + yacc.py:2687: semi reduce using rule 95 (func_call -> id opar error cpar .) + yacc.py:2687: of reduce using rule 95 (func_call -> id opar error cpar .) + yacc.py:2687: then reduce using rule 95 (func_call -> id opar error cpar .) + yacc.py:2687: loop reduce using rule 95 (func_call -> id opar error cpar .) + yacc.py:2687: cpar reduce using rule 95 (func_call -> id opar error cpar .) + yacc.py:2687: comma reduce using rule 95 (func_call -> id opar error cpar .) + yacc.py:2687: in reduce using rule 95 (func_call -> id opar error cpar .) + yacc.py:2687: else reduce using rule 95 (func_call -> id opar error cpar .) + yacc.py:2687: pool reduce using rule 95 (func_call -> id opar error cpar .) + yacc.py:2687: error reduce using rule 95 (func_call -> id opar error cpar .) + yacc.py:2687: ccur reduce using rule 95 (func_call -> id opar error cpar .) + yacc.py:2687: fi reduce using rule 95 (func_call -> id opar error cpar .) + yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 198 + yacc.py:2562:state 211 yacc.py:2563: - yacc.py:2565: (97) arg_list -> error arg_list . + yacc.py:2565: (74) base_call -> factor arroba type dot . func_call + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar yacc.py:2566: - yacc.py:2687: cpar reduce using rule 97 (arg_list -> error arg_list .) + yacc.py:2687: id shift and go to state 177 + yacc.py:2687: error shift and go to state 178 yacc.py:2689: + yacc.py:2714: func_call shift and go to state 235 yacc.py:2561: - yacc.py:2562:state 199 + yacc.py:2562:state 212 yacc.py:2563: - yacc.py:2565: (74) base_call -> factor arroba type dot . func_call - yacc.py:2565: (92) func_call -> . id opar args cpar + yacc.py:2565: (77) base_call -> factor arroba error dot . func_call + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar yacc.py:2566: - yacc.py:2687: id shift and go to state 170 + yacc.py:2687: id shift and go to state 177 + yacc.py:2687: error shift and go to state 178 yacc.py:2689: - yacc.py:2714: func_call shift and go to state 220 + yacc.py:2714: func_call shift and go to state 236 yacc.py:2561: - yacc.py:2562:state 200 + yacc.py:2562:state 213 yacc.py:2563: - yacc.py:2565: (89) block -> expr semi block . + yacc.py:2565: (91) block -> expr semi block . yacc.py:2566: - yacc.py:2687: ccur reduce using rule 89 (block -> expr semi block .) + yacc.py:2687: ccur reduce using rule 91 (block -> expr semi block .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 201 + yacc.py:2562:state 214 + yacc.py:2563: + yacc.py:2565: (79) factor -> opar expr . cpar + yacc.py:2565: (99) arg_list -> expr . + yacc.py:2565: (100) arg_list -> expr . comma arg_list + yacc.py:2566: + yacc.py:2609: ! shift/reduce conflict for cpar resolved as shift + yacc.py:2687: cpar shift and go to state 179 + yacc.py:2687: comma shift and go to state 191 + yacc.py:2689: + yacc.py:2696: ! cpar [ reduce using rule 99 (arg_list -> expr .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 215 yacc.py:2563: yacc.py:2565: (24) def_func -> error opar formals cpar colon type ocur expr . ccur yacc.py:2566: - yacc.py:2687: ccur shift and go to state 221 + yacc.py:2687: ccur shift and go to state 237 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 202 + yacc.py:2562:state 216 yacc.py:2563: yacc.py:2565: (23) def_func -> id opar formals cpar colon type ocur expr . ccur yacc.py:2566: - yacc.py:2687: ccur shift and go to state 222 + yacc.py:2687: ccur shift and go to state 238 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 203 + yacc.py:2562:state 217 yacc.py:2563: yacc.py:2565: (27) def_func -> id opar formals cpar colon type ocur error . ccur + yacc.py:2565: (76) base_call -> error . arroba type dot func_call + yacc.py:2565: (96) func_call -> error . opar args cpar yacc.py:2566: - yacc.py:2687: ccur shift and go to state 223 + yacc.py:2687: ccur shift and go to state 239 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 109 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 204 + yacc.py:2562:state 218 yacc.py:2563: yacc.py:2565: (26) def_func -> id opar formals cpar colon error ocur expr . ccur yacc.py:2566: - yacc.py:2687: ccur shift and go to state 224 + yacc.py:2687: ccur shift and go to state 240 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 205 + yacc.py:2562:state 219 yacc.py:2563: yacc.py:2565: (25) def_func -> id opar error cpar colon type ocur expr . ccur yacc.py:2566: - yacc.py:2687: ccur shift and go to state 225 + yacc.py:2687: ccur shift and go to state 241 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 206 + yacc.py:2562:state 220 + yacc.py:2563: + yacc.py:2565: (76) base_call -> error arroba type dot func_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 76 (base_call -> error arroba type dot func_call .) + yacc.py:2687: div reduce using rule 76 (base_call -> error arroba type dot func_call .) + yacc.py:2687: plus reduce using rule 76 (base_call -> error arroba type dot func_call .) + yacc.py:2687: minus reduce using rule 76 (base_call -> error arroba type dot func_call .) + yacc.py:2687: less reduce using rule 76 (base_call -> error arroba type dot func_call .) + yacc.py:2687: lesseq reduce using rule 76 (base_call -> error arroba type dot func_call .) + yacc.py:2687: equal reduce using rule 76 (base_call -> error arroba type dot func_call .) + yacc.py:2687: semi reduce using rule 76 (base_call -> error arroba type dot func_call .) + yacc.py:2687: of reduce using rule 76 (base_call -> error arroba type dot func_call .) + yacc.py:2687: then reduce using rule 76 (base_call -> error arroba type dot func_call .) + yacc.py:2687: loop reduce using rule 76 (base_call -> error arroba type dot func_call .) + yacc.py:2687: cpar reduce using rule 76 (base_call -> error arroba type dot func_call .) + yacc.py:2687: comma reduce using rule 76 (base_call -> error arroba type dot func_call .) + yacc.py:2687: in reduce using rule 76 (base_call -> error arroba type dot func_call .) + yacc.py:2687: else reduce using rule 76 (base_call -> error arroba type dot func_call .) + yacc.py:2687: pool reduce using rule 76 (base_call -> error arroba type dot func_call .) + yacc.py:2687: error reduce using rule 76 (base_call -> error arroba type dot func_call .) + yacc.py:2687: ccur reduce using rule 76 (base_call -> error arroba type dot func_call .) + yacc.py:2687: fi reduce using rule 76 (base_call -> error arroba type dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 221 + yacc.py:2563: + yacc.py:2565: (100) arg_list -> expr comma arg_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 100 (arg_list -> expr comma arg_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 222 yacc.py:2563: yacc.py:2565: (38) expr -> case expr of cases_list esac . yacc.py:2566: @@ -4828,7 +5485,7 @@ yacc.py:2687: fi reduce using rule 38 (expr -> case expr of cases_list esac .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 207 + yacc.py:2562:state 223 yacc.py:2563: yacc.py:2565: (40) expr -> case expr of error esac . yacc.py:2566: @@ -4846,14 +5503,14 @@ yacc.py:2687: fi reduce using rule 40 (expr -> case expr of error esac .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 208 + yacc.py:2562:state 224 yacc.py:2563: yacc.py:2565: (57) cases_list -> error cases_list . yacc.py:2566: yacc.py:2687: esac reduce using rule 57 (cases_list -> error cases_list .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 209 + yacc.py:2562:state 225 yacc.py:2563: yacc.py:2565: (55) cases_list -> casep semi . yacc.py:2565: (56) cases_list -> casep semi . cases_list @@ -4863,20 +5520,20 @@ yacc.py:2565: (58) casep -> . id colon type rarrow expr yacc.py:2566: yacc.py:2687: esac reduce using rule 55 (cases_list -> casep semi .) - yacc.py:2687: error shift and go to state 188 - yacc.py:2687: id shift and go to state 187 + yacc.py:2687: error shift and go to state 201 + yacc.py:2687: id shift and go to state 200 yacc.py:2689: - yacc.py:2714: casep shift and go to state 186 - yacc.py:2714: cases_list shift and go to state 226 + yacc.py:2714: casep shift and go to state 199 + yacc.py:2714: cases_list shift and go to state 242 yacc.py:2561: - yacc.py:2562:state 210 + yacc.py:2562:state 226 yacc.py:2563: yacc.py:2565: (58) casep -> id colon . type rarrow expr yacc.py:2566: - yacc.py:2687: type shift and go to state 227 + yacc.py:2687: type shift and go to state 243 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 211 + yacc.py:2562:state 227 yacc.py:2563: yacc.py:2565: (39) expr -> case error of cases_list esac . yacc.py:2566: @@ -4894,7 +5551,7 @@ yacc.py:2687: fi reduce using rule 39 (expr -> case error of cases_list esac .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 212 + yacc.py:2562:state 228 yacc.py:2563: yacc.py:2565: (41) expr -> if expr then expr else . expr fi yacc.py:2565: (44) expr -> if expr then expr else . error fi @@ -4930,48 +5587,52 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 229 - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 228 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 245 + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 244 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 213 + yacc.py:2562:state 229 yacc.py:2563: yacc.py:2565: (43) expr -> if expr then error else . expr fi yacc.py:2565: (35) expr -> . let let_list in expr @@ -5006,47 +5667,52 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 230 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: error shift and go to state 71 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 246 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 214 + yacc.py:2562:state 230 yacc.py:2563: yacc.py:2565: (42) expr -> if error then expr else . expr fi yacc.py:2565: (35) expr -> . let let_list in expr @@ -5081,47 +5747,52 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 231 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: error shift and go to state 71 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 247 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 yacc.py:2561: - yacc.py:2562:state 215 + yacc.py:2562:state 231 yacc.py:2563: yacc.py:2565: (45) expr -> while expr loop expr pool . yacc.py:2566: @@ -5139,7 +5810,7 @@ yacc.py:2687: fi reduce using rule 45 (expr -> while expr loop expr pool .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 216 + yacc.py:2562:state 232 yacc.py:2563: yacc.py:2565: (48) expr -> while expr loop expr error . yacc.py:2566: @@ -5157,7 +5828,7 @@ yacc.py:2687: fi reduce using rule 48 (expr -> while expr loop expr error .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 217 + yacc.py:2562:state 233 yacc.py:2563: yacc.py:2565: (47) expr -> while expr loop error pool . yacc.py:2566: @@ -5175,7 +5846,7 @@ yacc.py:2687: fi reduce using rule 47 (expr -> while expr loop error pool .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 218 + yacc.py:2562:state 234 yacc.py:2563: yacc.py:2565: (46) expr -> while error loop expr pool . yacc.py:2566: @@ -5193,14 +5864,7 @@ yacc.py:2687: fi reduce using rule 46 (expr -> while error loop expr pool .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 219 - yacc.py:2563: - yacc.py:2565: (96) arg_list -> expr comma arg_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 96 (arg_list -> expr comma arg_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 220 + yacc.py:2562:state 235 yacc.py:2563: yacc.py:2565: (74) base_call -> factor arroba type dot func_call . yacc.py:2566: @@ -5225,84 +5889,113 @@ yacc.py:2687: fi reduce using rule 74 (base_call -> factor arroba type dot func_call .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 221 + yacc.py:2562:state 236 + yacc.py:2563: + yacc.py:2565: (77) base_call -> factor arroba error dot func_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 77 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: div reduce using rule 77 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: plus reduce using rule 77 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: minus reduce using rule 77 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: less reduce using rule 77 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: lesseq reduce using rule 77 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: equal reduce using rule 77 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: semi reduce using rule 77 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: of reduce using rule 77 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: then reduce using rule 77 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: loop reduce using rule 77 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: cpar reduce using rule 77 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: comma reduce using rule 77 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: in reduce using rule 77 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: else reduce using rule 77 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: pool reduce using rule 77 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: error reduce using rule 77 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: ccur reduce using rule 77 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: fi reduce using rule 77 (base_call -> factor arroba error dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 237 yacc.py:2563: yacc.py:2565: (24) def_func -> error opar formals cpar colon type ocur expr ccur . yacc.py:2566: yacc.py:2687: semi reduce using rule 24 (def_func -> error opar formals cpar colon type ocur expr ccur .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 222 + yacc.py:2562:state 238 yacc.py:2563: yacc.py:2565: (23) def_func -> id opar formals cpar colon type ocur expr ccur . yacc.py:2566: yacc.py:2687: semi reduce using rule 23 (def_func -> id opar formals cpar colon type ocur expr ccur .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 223 + yacc.py:2562:state 239 yacc.py:2563: yacc.py:2565: (27) def_func -> id opar formals cpar colon type ocur error ccur . yacc.py:2566: yacc.py:2687: semi reduce using rule 27 (def_func -> id opar formals cpar colon type ocur error ccur .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 224 + yacc.py:2562:state 240 yacc.py:2563: yacc.py:2565: (26) def_func -> id opar formals cpar colon error ocur expr ccur . yacc.py:2566: yacc.py:2687: semi reduce using rule 26 (def_func -> id opar formals cpar colon error ocur expr ccur .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 225 + yacc.py:2562:state 241 yacc.py:2563: yacc.py:2565: (25) def_func -> id opar error cpar colon type ocur expr ccur . yacc.py:2566: yacc.py:2687: semi reduce using rule 25 (def_func -> id opar error cpar colon type ocur expr ccur .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 226 + yacc.py:2562:state 242 yacc.py:2563: yacc.py:2565: (56) cases_list -> casep semi cases_list . yacc.py:2566: yacc.py:2687: esac reduce using rule 56 (cases_list -> casep semi cases_list .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 227 + yacc.py:2562:state 243 yacc.py:2563: yacc.py:2565: (58) casep -> id colon type . rarrow expr yacc.py:2566: - yacc.py:2687: rarrow shift and go to state 232 + yacc.py:2687: rarrow shift and go to state 248 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 228 + yacc.py:2562:state 244 yacc.py:2563: yacc.py:2565: (41) expr -> if expr then expr else expr . fi yacc.py:2566: - yacc.py:2687: fi shift and go to state 233 + yacc.py:2687: fi shift and go to state 249 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 229 + yacc.py:2562:state 245 yacc.py:2563: yacc.py:2565: (44) expr -> if expr then expr else error . fi + yacc.py:2565: (76) base_call -> error . arroba type dot func_call + yacc.py:2565: (96) func_call -> error . opar args cpar yacc.py:2566: - yacc.py:2687: fi shift and go to state 234 + yacc.py:2687: fi shift and go to state 250 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 109 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 230 + yacc.py:2562:state 246 yacc.py:2563: yacc.py:2565: (43) expr -> if expr then error else expr . fi yacc.py:2566: - yacc.py:2687: fi shift and go to state 235 + yacc.py:2687: fi shift and go to state 251 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 231 + yacc.py:2562:state 247 yacc.py:2563: yacc.py:2565: (42) expr -> if error then expr else expr . fi yacc.py:2566: - yacc.py:2687: fi shift and go to state 236 + yacc.py:2687: fi shift and go to state 252 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 232 + yacc.py:2562:state 248 yacc.py:2563: yacc.py:2565: (58) casep -> id colon type rarrow . expr yacc.py:2565: (35) expr -> . let let_list in expr @@ -5337,47 +6030,52 @@ yacc.py:2565: (73) term -> . base_call yacc.py:2565: (74) base_call -> . factor arroba type dot func_call yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . factor dot func_call - yacc.py:2565: (79) factor -> . func_call - yacc.py:2565: (80) atom -> . num - yacc.py:2565: (81) atom -> . id - yacc.py:2565: (82) atom -> . new type - yacc.py:2565: (83) atom -> . new error - yacc.py:2565: (84) atom -> . ocur block ccur - yacc.py:2565: (85) atom -> . true - yacc.py:2565: (86) atom -> . false - yacc.py:2565: (87) atom -> . string - yacc.py:2565: (92) func_call -> . id opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 72 - yacc.py:2687: case shift and go to state 73 - yacc.py:2687: if shift and go to state 74 - yacc.py:2687: while shift and go to state 75 - yacc.py:2687: id shift and go to state 77 - yacc.py:2687: not shift and go to state 78 - yacc.py:2687: isvoid shift and go to state 83 - yacc.py:2687: nox shift and go to state 84 - yacc.py:2687: opar shift and go to state 88 - yacc.py:2687: num shift and go to state 89 - yacc.py:2687: new shift and go to state 90 - yacc.py:2687: ocur shift and go to state 91 - yacc.py:2687: true shift and go to state 92 - yacc.py:2687: false shift and go to state 93 - yacc.py:2687: string shift and go to state 94 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 237 - yacc.py:2714: arith shift and go to state 76 - yacc.py:2714: comp shift and go to state 79 - yacc.py:2714: op shift and go to state 80 - yacc.py:2714: term shift and go to state 81 - yacc.py:2714: base_call shift and go to state 82 - yacc.py:2714: factor shift and go to state 85 - yacc.py:2714: func_call shift and go to state 86 - yacc.py:2714: atom shift and go to state 87 - yacc.py:2561: - yacc.py:2562:state 233 + yacc.py:2565: (76) base_call -> . error arroba type dot func_call + yacc.py:2565: (77) base_call -> . factor arroba error dot func_call + yacc.py:2565: (78) factor -> . atom + yacc.py:2565: (79) factor -> . opar expr cpar + yacc.py:2565: (80) factor -> . factor dot func_call + yacc.py:2565: (81) factor -> . func_call + yacc.py:2565: (82) atom -> . num + yacc.py:2565: (83) atom -> . id + yacc.py:2565: (84) atom -> . new type + yacc.py:2565: (85) atom -> . new error + yacc.py:2565: (86) atom -> . ocur block ccur + yacc.py:2565: (87) atom -> . true + yacc.py:2565: (88) atom -> . false + yacc.py:2565: (89) atom -> . string + yacc.py:2565: (94) func_call -> . id opar args cpar + yacc.py:2565: (95) func_call -> . id opar error cpar + yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: let shift and go to state 73 + yacc.py:2687: case shift and go to state 74 + yacc.py:2687: if shift and go to state 75 + yacc.py:2687: while shift and go to state 76 + yacc.py:2687: id shift and go to state 78 + yacc.py:2687: not shift and go to state 79 + yacc.py:2687: isvoid shift and go to state 84 + yacc.py:2687: nox shift and go to state 85 + yacc.py:2687: error shift and go to state 71 + yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 253 + yacc.py:2714: arith shift and go to state 77 + yacc.py:2714: comp shift and go to state 80 + yacc.py:2714: op shift and go to state 81 + yacc.py:2714: term shift and go to state 82 + yacc.py:2714: base_call shift and go to state 83 + yacc.py:2714: factor shift and go to state 86 + yacc.py:2714: func_call shift and go to state 87 + yacc.py:2714: atom shift and go to state 88 + yacc.py:2561: + yacc.py:2562:state 249 yacc.py:2563: yacc.py:2565: (41) expr -> if expr then expr else expr fi . yacc.py:2566: @@ -5395,7 +6093,7 @@ yacc.py:2687: fi reduce using rule 41 (expr -> if expr then expr else expr fi .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 234 + yacc.py:2562:state 250 yacc.py:2563: yacc.py:2565: (44) expr -> if expr then expr else error fi . yacc.py:2566: @@ -5413,7 +6111,7 @@ yacc.py:2687: fi reduce using rule 44 (expr -> if expr then expr else error fi .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 235 + yacc.py:2562:state 251 yacc.py:2563: yacc.py:2565: (43) expr -> if expr then error else expr fi . yacc.py:2566: @@ -5431,7 +6129,7 @@ yacc.py:2687: fi reduce using rule 43 (expr -> if expr then error else expr fi .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 236 + yacc.py:2562:state 252 yacc.py:2563: yacc.py:2565: (42) expr -> if error then expr else expr fi . yacc.py:2566: @@ -5449,9 +6147,14 @@ yacc.py:2687: fi reduce using rule 42 (expr -> if error then expr else expr fi .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 237 + yacc.py:2562:state 253 yacc.py:2563: yacc.py:2565: (58) casep -> id colon type rarrow expr . yacc.py:2566: yacc.py:2687: semi reduce using rule 58 (casep -> id colon type rarrow expr .) yacc.py:2689: + yacc.py:3445:1 shift/reduce conflict + yacc.py:3457: + yacc.py:3458:Conflicts: + yacc.py:3459: + yacc.py:3462:shift/reduce conflict for cpar in state 214 resolved as shift diff --git a/src/output_parser/parsetab.py b/src/output_parser/parsetab.py index 00c3cbea..f1c26c39 100644 --- a/src/output_parser/parsetab.py +++ b/src/output_parser/parsetab.py @@ -6,9 +6,9 @@ _lr_method = 'LALR' -_lr_signature = 'programarroba case ccur class colon comma cpar div dot else equal esac false fi id if in inherits isvoid larrow less lesseq let loop minus new not nox num ocur of opar plus pool rarrow semi star string then true type whileprogram : class_listepsilon :class_list : def_class class_list \n | def_classclass_list : error class_listdef_class : class type ocur feature_list ccur semi \n | class type inherits type ocur feature_list ccur semidef_class : class error ocur feature_list ccur semi \n | class error inherits type ocur feature_list ccur semi\n | class error inherits error ocur feature_list ccur semi\n | class type inherits error ocur feature_list ccur semifeature_list : epsilon\n | def_attr semi feature_list\n | def_func semi feature_listfeature_list : error feature_listdef_attr : id colon type\n | id colon type larrow exprdef_attr : error colon type\n | id colon error\n | error colon type larrow expr\n | id colon error larrow expr\n | id colon type larrow errordef_func : id opar formals cpar colon type ocur expr ccurdef_func : error opar formals cpar colon type ocur expr ccur\n | id opar error cpar colon type ocur expr ccur\n | id opar formals cpar colon error ocur expr ccur\n | id opar formals cpar colon type ocur error ccurformals : param_list\n | param_list_empty\n param_list : param\n | param comma param_listparam_list : error param_listparam_list_empty : epsilonparam : id colon typeexpr : let let_list in exprexpr : let error in expr\n | let let_list in errorexpr : case expr of cases_list esacexpr : case error of cases_list esac\n | case expr of error esacexpr : if expr then expr else expr fiexpr : if error then expr else expr fi\n | if expr then error else expr fi\n | if expr then expr else error fiexpr : while expr loop expr poolexpr : while error loop expr pool\n | while expr loop error pool\n | while expr loop expr errorexpr : arithlet_list : let_assign\n | let_assign comma let_listlet_list : error let_listlet_assign : param larrow expr\n | paramcases_list : casep semi\n | casep semi cases_listcases_list : error cases_listcasep : id colon type rarrow exprarith : id larrow expr\n | not comp\n | comp\n comp : comp less op\n | comp lesseq op\n | comp equal op\n | opop : op plus term\n | op minus term\n | termterm : term star base_call\n | term div base_call\n | isvoid base_call\n | nox base_call\n | base_callbase_call : factor arroba type dot func_call\n | factorfactor : atom\n | opar expr cparfactor : factor dot func_call\n | func_callatom : numatom : idatom : new typeatom : new erroratom : ocur block ccuratom : true\n | falseatom : stringblock : expr semi\n | expr semi blockblock : error block\n | errorfunc_call : id opar args cparargs : arg_list\n | arg_list_empty\n arg_list : expr \n | expr comma arg_listarg_list : error arg_listarg_list_empty : epsilon' +_lr_signature = 'programarroba case ccur class colon comma cpar div dot else equal esac false fi id if in inherits isvoid larrow less lesseq let loop minus new not nox num ocur of opar plus pool rarrow semi star string then true type whileprogram : class_listepsilon :class_list : def_class class_list \n | def_classclass_list : error class_listdef_class : class type ocur feature_list ccur semi \n | class type inherits type ocur feature_list ccur semidef_class : class error ocur feature_list ccur semi \n | class error inherits type ocur feature_list ccur semi\n | class error inherits error ocur feature_list ccur semi\n | class type inherits error ocur feature_list ccur semifeature_list : epsilon\n | def_attr semi feature_list\n | def_func semi feature_listfeature_list : error feature_listdef_attr : id colon type\n | id colon type larrow exprdef_attr : error colon type\n | id colon error\n | error colon type larrow expr\n | id colon error larrow expr\n | id colon type larrow errordef_func : id opar formals cpar colon type ocur expr ccurdef_func : error opar formals cpar colon type ocur expr ccur\n | id opar error cpar colon type ocur expr ccur\n | id opar formals cpar colon error ocur expr ccur\n | id opar formals cpar colon type ocur error ccurformals : param_list\n | param_list_empty\n param_list : param\n | param comma param_listparam_list : error param_listparam_list_empty : epsilonparam : id colon typeexpr : let let_list in exprexpr : let error in expr\n | let let_list in errorexpr : case expr of cases_list esacexpr : case error of cases_list esac\n | case expr of error esacexpr : if expr then expr else expr fiexpr : if error then expr else expr fi\n | if expr then error else expr fi\n | if expr then expr else error fiexpr : while expr loop expr poolexpr : while error loop expr pool\n | while expr loop error pool\n | while expr loop expr errorexpr : arithlet_list : let_assign\n | let_assign comma let_listlet_list : error let_listlet_assign : param larrow expr\n | paramcases_list : casep semi\n | casep semi cases_listcases_list : error cases_listcasep : id colon type rarrow exprarith : id larrow expr\n | not comp\n | comp\n comp : comp less op\n | comp lesseq op\n | comp equal op\n | opop : op plus term\n | op minus term\n | termterm : term star base_call\n | term div base_call\n | isvoid base_call\n | nox base_call\n | base_callbase_call : factor arroba type dot func_call\n | factorbase_call : error arroba type dot func_call\n | factor arroba error dot func_call\n factor : atom\n | opar expr cparfactor : factor dot func_call\n | func_callatom : numatom : idatom : new typeatom : new erroratom : ocur block ccuratom : true\n | falseatom : stringblock : expr semi\n | expr semi blockblock : error block\n | errorfunc_call : id opar args cparfunc_call : id opar error cpar\n | error opar args cparargs : arg_list\n | arg_list_empty\n arg_list : expr \n | expr comma arg_listarg_list : error arg_listarg_list_empty : epsilon' -_lr_action_items = {'error':([0,3,4,5,10,11,12,13,18,26,27,30,31,32,33,34,36,37,38,42,52,55,61,63,72,73,74,75,76,77,79,80,81,82,85,86,87,89,90,91,92,93,94,101,103,104,105,106,108,118,119,120,128,129,133,134,137,142,143,146,148,149,150,152,154,159,161,162,163,164,165,166,167,169,171,172,173,176,179,180,181,185,188,193,196,197,206,207,209,211,212,215,216,217,218,220,233,234,235,236,],[4,4,4,9,18,21,18,23,18,18,18,42,50,52,18,18,18,18,-6,42,42,-8,42,99,108,112,114,116,-49,-81,-61,-65,-68,-73,-75,-79,-76,-80,134,137,-85,-86,-87,140,-7,-11,-10,-9,143,159,-60,-81,-71,-72,-82,-83,137,180,143,143,185,188,191,194,-59,159,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,137,203,-35,-37,-36,188,188,216,-92,159,-38,-40,188,-39,229,-45,-48,-47,-46,-74,-41,-44,-43,-42,]),'class':([0,3,4,38,55,103,104,105,106,],[5,5,5,-6,-8,-7,-11,-10,-9,]),'$end':([1,2,3,6,7,38,55,103,104,105,106,],[0,-1,-4,-3,-5,-6,-8,-7,-11,-10,-9,]),'type':([5,11,13,29,31,62,90,95,101,102,130,210,],[8,20,24,41,49,97,133,138,139,141,168,227,]),'ocur':([8,9,20,21,23,24,58,63,64,73,74,75,78,83,84,88,91,117,118,121,122,123,124,125,126,127,137,138,139,140,141,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[10,12,33,34,36,37,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,175,176,177,178,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,]),'inherits':([8,9,],[11,13,]),'ccur':([10,12,14,15,18,22,26,27,28,33,34,36,37,39,40,53,54,56,57,76,77,79,80,81,82,85,86,87,89,92,93,94,119,120,128,129,133,134,135,137,154,161,162,163,164,165,166,167,169,171,172,173,174,179,180,181,196,200,201,202,203,204,205,206,207,211,215,216,217,218,220,233,234,235,236,],[-2,-2,25,-12,-2,35,-2,-2,-15,-2,-2,-2,-2,-13,-14,67,68,69,70,-49,-81,-61,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,-60,-81,-71,-72,-82,-83,172,-91,-59,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-88,-90,-35,-37,-36,-92,-89,221,222,223,224,225,-38,-40,-39,-45,-48,-47,-46,-74,-41,-44,-43,-42,]),'id':([10,12,18,26,27,30,32,33,34,36,37,42,52,58,61,63,64,72,73,74,75,78,83,84,88,91,108,117,118,121,122,123,124,125,126,127,131,137,142,143,144,146,147,148,149,150,151,152,153,159,173,175,176,177,178,185,188,197,199,209,212,213,214,232,],[19,19,19,19,19,48,48,19,19,19,19,48,48,77,48,77,77,48,77,77,77,120,120,120,77,77,48,77,77,120,120,120,120,120,120,120,170,77,77,48,77,48,77,187,187,77,77,77,77,77,77,77,77,77,77,187,187,77,170,187,77,77,77,77,]),'semi':([16,17,25,35,41,49,50,67,68,69,70,71,76,77,79,80,81,82,85,86,87,89,92,93,94,98,99,100,119,120,128,129,133,134,136,154,161,162,163,164,165,166,167,169,171,172,179,180,181,186,196,206,207,211,215,216,217,218,220,221,222,223,224,225,233,234,235,236,237,],[26,27,38,55,-18,-16,-19,103,104,105,106,-20,-49,-81,-61,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,-17,-22,-21,-60,-81,-71,-72,-82,-83,173,-59,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-35,-37,-36,209,-92,-38,-40,-39,-45,-48,-47,-46,-74,-24,-23,-27,-26,-25,-41,-44,-43,-42,-58,]),'colon':([18,19,48,60,65,66,187,],[29,31,62,95,101,102,210,]),'opar':([18,19,58,63,64,73,74,75,77,78,83,84,88,91,117,118,120,121,122,123,124,125,126,127,137,142,144,147,150,151,152,153,159,170,173,175,176,177,178,197,212,213,214,232,],[30,32,88,88,88,88,88,88,118,88,88,88,88,88,88,88,118,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,118,88,88,88,88,88,88,88,88,88,88,]),'cpar':([30,32,43,44,45,46,47,51,52,59,76,77,79,80,81,82,85,86,87,89,92,93,94,96,97,118,119,120,128,129,132,133,134,154,155,156,157,158,160,161,162,163,164,165,166,167,169,171,172,179,180,181,196,198,206,207,211,215,216,217,218,219,220,233,234,235,236,],[-2,-2,60,-28,-29,-30,-33,65,66,-32,-49,-81,-61,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,-31,-34,-2,-60,-81,-71,-72,171,-82,-83,-59,196,-93,-94,-95,-98,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-35,-37,-36,-92,-97,-38,-40,-39,-45,-48,-47,-46,-96,-74,-41,-44,-43,-42,]),'larrow':([41,49,50,77,97,110,],[58,63,64,117,-34,147,]),'comma':([46,76,77,79,80,81,82,85,86,87,89,92,93,94,97,109,110,119,120,128,129,133,134,154,158,161,162,163,164,165,166,167,169,171,172,179,180,181,183,196,206,207,211,215,216,217,218,220,233,234,235,236,],[61,-49,-81,-61,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,-34,146,-54,-60,-81,-71,-72,-82,-83,-59,197,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-35,-37,-36,-53,-92,-38,-40,-39,-45,-48,-47,-46,-74,-41,-44,-43,-42,]),'let':([58,63,64,73,74,75,88,91,117,118,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,]),'case':([58,63,64,73,74,75,88,91,117,118,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,]),'if':([58,63,64,73,74,75,88,91,117,118,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,]),'while':([58,63,64,73,74,75,88,91,117,118,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,]),'not':([58,63,64,73,74,75,88,91,117,118,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,]),'isvoid':([58,63,64,73,74,75,78,88,91,117,118,121,122,123,124,125,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,]),'nox':([58,63,64,73,74,75,78,88,91,117,118,121,122,123,124,125,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,]),'num':([58,63,64,73,74,75,78,83,84,88,91,117,118,121,122,123,124,125,126,127,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,]),'new':([58,63,64,73,74,75,78,83,84,88,91,117,118,121,122,123,124,125,126,127,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,]),'true':([58,63,64,73,74,75,78,83,84,88,91,117,118,121,122,123,124,125,126,127,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,]),'false':([58,63,64,73,74,75,78,83,84,88,91,117,118,121,122,123,124,125,126,127,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,]),'string':([58,63,64,73,74,75,78,83,84,88,91,117,118,121,122,123,124,125,126,127,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,]),'of':([76,77,79,80,81,82,85,86,87,89,92,93,94,111,112,119,120,128,129,133,134,154,161,162,163,164,165,166,167,169,171,172,179,180,181,196,206,207,211,215,216,217,218,220,233,234,235,236,],[-49,-81,-61,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,148,149,-60,-81,-71,-72,-82,-83,-59,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-35,-37,-36,-92,-38,-40,-39,-45,-48,-47,-46,-74,-41,-44,-43,-42,]),'then':([76,77,79,80,81,82,85,86,87,89,92,93,94,113,114,119,120,128,129,133,134,154,161,162,163,164,165,166,167,169,171,172,179,180,181,196,206,207,211,215,216,217,218,220,233,234,235,236,],[-49,-81,-61,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,150,151,-60,-81,-71,-72,-82,-83,-59,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-35,-37,-36,-92,-38,-40,-39,-45,-48,-47,-46,-74,-41,-44,-43,-42,]),'loop':([76,77,79,80,81,82,85,86,87,89,92,93,94,115,116,119,120,128,129,133,134,154,161,162,163,164,165,166,167,169,171,172,179,180,181,196,206,207,211,215,216,217,218,220,233,234,235,236,],[-49,-81,-61,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,152,153,-60,-81,-71,-72,-82,-83,-59,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-35,-37,-36,-92,-38,-40,-39,-45,-48,-47,-46,-74,-41,-44,-43,-42,]),'in':([76,77,79,80,81,82,85,86,87,89,92,93,94,97,107,108,109,110,119,120,128,129,133,134,145,154,161,162,163,164,165,166,167,169,171,172,179,180,181,182,183,196,206,207,211,215,216,217,218,220,233,234,235,236,],[-49,-81,-61,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,-34,142,144,-50,-54,-60,-81,-71,-72,-82,-83,-52,-59,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-35,-37,-36,-51,-53,-92,-38,-40,-39,-45,-48,-47,-46,-74,-41,-44,-43,-42,]),'else':([76,77,79,80,81,82,85,86,87,89,92,93,94,119,120,128,129,133,134,154,161,162,163,164,165,166,167,169,171,172,179,180,181,190,191,192,196,206,207,211,215,216,217,218,220,233,234,235,236,],[-49,-81,-61,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,-60,-81,-71,-72,-82,-83,-59,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-35,-37,-36,212,213,214,-92,-38,-40,-39,-45,-48,-47,-46,-74,-41,-44,-43,-42,]),'pool':([76,77,79,80,81,82,85,86,87,89,92,93,94,119,120,128,129,133,134,154,161,162,163,164,165,166,167,169,171,172,179,180,181,193,194,195,196,206,207,211,215,216,217,218,220,233,234,235,236,],[-49,-81,-61,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,-60,-81,-71,-72,-82,-83,-59,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-35,-37,-36,215,217,218,-92,-38,-40,-39,-45,-48,-47,-46,-74,-41,-44,-43,-42,]),'fi':([76,77,79,80,81,82,85,86,87,89,92,93,94,119,120,128,129,133,134,154,161,162,163,164,165,166,167,169,171,172,179,180,181,196,206,207,211,215,216,217,218,220,228,229,230,231,233,234,235,236,],[-49,-81,-61,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,-60,-81,-71,-72,-82,-83,-59,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-35,-37,-36,-92,-38,-40,-39,-45,-48,-47,-46,-74,233,234,235,236,-41,-44,-43,-42,]),'arroba':([77,85,86,87,89,92,93,94,120,133,134,169,171,172,196,],[-81,130,-79,-76,-80,-85,-86,-87,-81,-82,-83,-78,-77,-84,-92,]),'dot':([77,85,86,87,89,92,93,94,120,133,134,168,169,171,172,196,],[-81,131,-79,-76,-80,-85,-86,-87,-81,-82,-83,199,-78,-77,-84,-92,]),'star':([77,81,82,85,86,87,89,92,93,94,120,128,129,133,134,164,165,166,167,169,171,172,196,220,],[-81,126,-73,-75,-79,-76,-80,-85,-86,-87,-81,-71,-72,-82,-83,126,126,-69,-70,-78,-77,-84,-92,-74,]),'div':([77,81,82,85,86,87,89,92,93,94,120,128,129,133,134,164,165,166,167,169,171,172,196,220,],[-81,127,-73,-75,-79,-76,-80,-85,-86,-87,-81,-71,-72,-82,-83,127,127,-69,-70,-78,-77,-84,-92,-74,]),'plus':([77,80,81,82,85,86,87,89,92,93,94,120,128,129,133,134,161,162,163,164,165,166,167,169,171,172,196,220,],[-81,124,-68,-73,-75,-79,-76,-80,-85,-86,-87,-81,-71,-72,-82,-83,124,124,124,-66,-67,-69,-70,-78,-77,-84,-92,-74,]),'minus':([77,80,81,82,85,86,87,89,92,93,94,120,128,129,133,134,161,162,163,164,165,166,167,169,171,172,196,220,],[-81,125,-68,-73,-75,-79,-76,-80,-85,-86,-87,-81,-71,-72,-82,-83,125,125,125,-66,-67,-69,-70,-78,-77,-84,-92,-74,]),'less':([77,79,80,81,82,85,86,87,89,92,93,94,119,120,128,129,133,134,161,162,163,164,165,166,167,169,171,172,196,220,],[-81,121,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,121,-81,-71,-72,-82,-83,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-92,-74,]),'lesseq':([77,79,80,81,82,85,86,87,89,92,93,94,119,120,128,129,133,134,161,162,163,164,165,166,167,169,171,172,196,220,],[-81,122,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,122,-81,-71,-72,-82,-83,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-92,-74,]),'equal':([77,79,80,81,82,85,86,87,89,92,93,94,119,120,128,129,133,134,161,162,163,164,165,166,167,169,171,172,196,220,],[-81,123,-65,-68,-73,-75,-79,-76,-80,-85,-86,-87,123,-81,-71,-72,-82,-83,-62,-63,-64,-66,-67,-69,-70,-78,-77,-84,-92,-74,]),'esac':([184,185,189,208,209,226,],[206,207,211,-57,-55,-56,]),'rarrow':([227,],[232,]),} +_lr_action_items = {'error':([0,3,4,5,10,11,12,13,18,26,27,30,31,32,33,34,36,37,38,42,52,55,58,61,63,64,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,102,104,105,106,107,109,111,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,136,137,140,146,152,153,154,156,157,158,159,160,161,162,163,164,166,167,168,169,170,171,172,173,176,179,180,181,183,184,185,186,187,188,190,191,192,193,194,198,201,206,209,210,211,212,220,222,223,225,227,228,229,230,231,232,233,234,235,236,248,249,250,251,252,],[4,4,4,9,18,21,18,23,18,18,18,42,50,52,18,18,18,18,-6,42,42,-8,71,42,100,71,111,115,117,119,-49,-83,71,-61,-65,-68,-73,71,71,-75,-81,-78,71,-82,137,140,-87,-88,-89,143,-7,-11,-10,-9,146,153,71,166,-60,-83,71,71,71,71,71,71,71,-71,-72,175,178,-84,-85,140,146,193,153,71,153,71,198,201,204,71,207,71,-59,146,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,140,146,71,217,71,71,178,-96,146,-35,-37,-36,201,201,232,-94,-95,178,178,-76,-38,-40,201,-39,245,71,71,-45,-48,-47,-46,-74,-77,71,-41,-44,-43,-42,]),'class':([0,3,4,38,55,104,105,106,107,],[5,5,5,-6,-8,-7,-11,-10,-9,]),'$end':([1,2,3,6,7,38,55,104,105,106,107,],[0,-1,-4,-3,-5,-6,-8,-7,-11,-10,-9,]),'type':([5,11,13,29,31,62,91,96,102,103,108,133,226,],[8,20,24,41,49,98,136,141,142,144,145,174,243,]),'ocur':([8,9,20,21,23,24,58,63,64,74,75,76,79,84,85,89,92,109,120,121,124,125,126,127,128,129,130,140,141,142,143,144,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[10,12,33,34,36,37,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,184,185,186,187,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,]),'inherits':([8,9,],[11,13,]),'ccur':([10,12,14,15,18,22,26,27,28,33,34,36,37,39,40,53,54,56,57,77,78,80,81,82,83,86,87,88,90,93,94,95,122,123,131,132,136,137,138,140,164,167,168,169,170,171,172,173,176,179,180,181,182,190,192,193,194,209,210,213,215,216,217,218,219,220,222,223,227,231,232,233,234,235,236,249,250,251,252,],[-2,-2,25,-12,-2,35,-2,-2,-15,-2,-2,-2,-2,-13,-14,67,68,69,70,-49,-83,-61,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,-60,-83,-71,-72,-84,-85,180,-93,-59,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-90,-92,-96,-35,-37,-36,-94,-95,-91,237,238,239,240,241,-76,-38,-40,-39,-45,-48,-47,-46,-74,-77,-41,-44,-43,-42,]),'id':([10,12,18,26,27,30,32,33,34,36,37,42,52,58,61,63,64,73,74,75,76,79,84,85,89,92,109,111,120,121,124,125,126,127,128,129,130,134,140,146,152,153,154,156,157,158,159,160,161,162,163,166,181,183,184,185,186,187,188,191,198,201,211,212,225,228,229,230,248,],[19,19,19,19,19,48,48,19,19,19,19,48,48,78,48,78,78,48,78,78,78,123,123,123,78,78,78,48,78,78,123,123,123,123,123,123,123,177,78,78,78,48,78,48,78,200,200,78,78,78,78,78,78,78,78,78,78,78,177,78,200,200,177,177,200,78,78,78,78,]),'semi':([16,17,25,35,41,49,50,67,68,69,70,72,77,78,80,81,82,83,86,87,88,90,93,94,95,99,100,101,122,123,131,132,136,137,139,164,167,168,169,170,171,172,173,176,179,180,190,192,193,194,199,209,210,220,222,223,227,231,232,233,234,235,236,237,238,239,240,241,249,250,251,252,253,],[26,27,38,55,-18,-16,-19,104,105,106,107,-20,-49,-83,-61,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,-17,-22,-21,-60,-83,-71,-72,-84,-85,181,-59,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-96,-35,-37,-36,225,-94,-95,-76,-38,-40,-39,-45,-48,-47,-46,-74,-77,-24,-23,-27,-26,-25,-41,-44,-43,-42,-58,]),'colon':([18,19,48,60,65,66,200,],[29,31,62,96,102,103,226,]),'opar':([18,19,58,63,64,71,74,75,76,78,79,84,85,89,92,100,109,115,117,119,120,121,123,124,125,126,127,128,129,130,140,146,152,154,157,160,161,162,163,166,177,178,181,183,184,185,186,187,191,193,204,207,217,228,229,230,245,248,],[30,32,89,89,89,109,89,89,89,121,89,89,89,89,89,109,89,109,109,109,89,89,121,89,89,89,89,89,89,89,183,183,89,89,89,89,89,89,89,183,121,109,89,89,89,89,89,89,89,109,109,109,109,89,89,89,109,89,]),'cpar':([30,32,43,44,45,46,47,51,52,59,77,78,80,81,82,83,86,87,88,90,93,94,95,97,98,109,121,122,123,131,132,135,136,137,147,148,149,150,151,164,165,166,167,168,169,170,171,172,173,176,179,180,183,189,190,192,193,194,209,210,214,220,221,222,223,227,231,232,233,234,235,236,249,250,251,252,],[-2,-2,60,-28,-29,-30,-33,65,66,-32,-49,-83,-61,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,-31,-34,-2,-2,-60,-83,-71,-72,179,-84,-85,190,-97,-98,-99,-102,-59,209,210,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-2,-101,-96,-35,-37,-36,-94,-95,179,-76,-100,-38,-40,-39,-45,-48,-47,-46,-74,-77,-41,-44,-43,-42,]),'larrow':([41,49,50,78,98,113,],[58,63,64,120,-34,157,]),'comma':([46,77,78,80,81,82,83,86,87,88,90,93,94,95,98,112,113,122,123,131,132,136,137,150,164,167,168,169,170,171,172,173,176,179,180,190,192,193,194,196,209,210,214,220,222,223,227,231,232,233,234,235,236,249,250,251,252,],[61,-49,-83,-61,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,-34,156,-54,-60,-83,-71,-72,-84,-85,191,-59,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-96,-35,-37,-36,-53,-94,-95,191,-76,-38,-40,-39,-45,-48,-47,-46,-74,-77,-41,-44,-43,-42,]),'let':([58,63,64,74,75,76,89,92,109,120,121,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,]),'case':([58,63,64,74,75,76,89,92,109,120,121,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,]),'if':([58,63,64,74,75,76,89,92,109,120,121,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,]),'while':([58,63,64,74,75,76,89,92,109,120,121,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,]),'not':([58,63,64,74,75,76,89,92,109,120,121,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,]),'isvoid':([58,63,64,74,75,76,79,89,92,109,120,121,124,125,126,127,128,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,]),'nox':([58,63,64,74,75,76,79,89,92,109,120,121,124,125,126,127,128,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,]),'num':([58,63,64,74,75,76,79,84,85,89,92,109,120,121,124,125,126,127,128,129,130,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,]),'new':([58,63,64,74,75,76,79,84,85,89,92,109,120,121,124,125,126,127,128,129,130,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,]),'true':([58,63,64,74,75,76,79,84,85,89,92,109,120,121,124,125,126,127,128,129,130,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,]),'false':([58,63,64,74,75,76,79,84,85,89,92,109,120,121,124,125,126,127,128,129,130,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,]),'string':([58,63,64,74,75,76,79,84,85,89,92,109,120,121,124,125,126,127,128,129,130,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,]),'arroba':([71,78,86,87,88,90,93,94,95,100,115,117,119,123,136,137,140,146,166,176,179,180,190,193,204,207,209,210,217,245,],[108,-83,133,-81,-78,-82,-87,-88,-89,108,108,108,108,-83,-84,-85,108,108,108,-80,-79,-86,-96,108,108,108,-94,-95,108,108,]),'of':([77,78,80,81,82,83,86,87,88,90,93,94,95,114,115,122,123,131,132,136,137,164,167,168,169,170,171,172,173,176,179,180,190,192,193,194,209,210,220,222,223,227,231,232,233,234,235,236,249,250,251,252,],[-49,-83,-61,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,158,159,-60,-83,-71,-72,-84,-85,-59,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-96,-35,-37,-36,-94,-95,-76,-38,-40,-39,-45,-48,-47,-46,-74,-77,-41,-44,-43,-42,]),'then':([77,78,80,81,82,83,86,87,88,90,93,94,95,116,117,122,123,131,132,136,137,164,167,168,169,170,171,172,173,176,179,180,190,192,193,194,209,210,220,222,223,227,231,232,233,234,235,236,249,250,251,252,],[-49,-83,-61,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,160,161,-60,-83,-71,-72,-84,-85,-59,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-96,-35,-37,-36,-94,-95,-76,-38,-40,-39,-45,-48,-47,-46,-74,-77,-41,-44,-43,-42,]),'loop':([77,78,80,81,82,83,86,87,88,90,93,94,95,118,119,122,123,131,132,136,137,164,167,168,169,170,171,172,173,176,179,180,190,192,193,194,209,210,220,222,223,227,231,232,233,234,235,236,249,250,251,252,],[-49,-83,-61,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,162,163,-60,-83,-71,-72,-84,-85,-59,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-96,-35,-37,-36,-94,-95,-76,-38,-40,-39,-45,-48,-47,-46,-74,-77,-41,-44,-43,-42,]),'in':([77,78,80,81,82,83,86,87,88,90,93,94,95,98,110,111,112,113,122,123,131,132,136,137,155,164,167,168,169,170,171,172,173,176,179,180,190,192,193,194,195,196,209,210,220,222,223,227,231,232,233,234,235,236,249,250,251,252,],[-49,-83,-61,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,-34,152,154,-50,-54,-60,-83,-71,-72,-84,-85,-52,-59,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-96,-35,-37,-36,-51,-53,-94,-95,-76,-38,-40,-39,-45,-48,-47,-46,-74,-77,-41,-44,-43,-42,]),'else':([77,78,80,81,82,83,86,87,88,90,93,94,95,122,123,131,132,136,137,164,167,168,169,170,171,172,173,176,179,180,190,192,193,194,203,204,205,209,210,220,222,223,227,231,232,233,234,235,236,249,250,251,252,],[-49,-83,-61,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,-60,-83,-71,-72,-84,-85,-59,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-96,-35,-37,-36,228,229,230,-94,-95,-76,-38,-40,-39,-45,-48,-47,-46,-74,-77,-41,-44,-43,-42,]),'pool':([77,78,80,81,82,83,86,87,88,90,93,94,95,122,123,131,132,136,137,164,167,168,169,170,171,172,173,176,179,180,190,192,193,194,206,207,208,209,210,220,222,223,227,231,232,233,234,235,236,249,250,251,252,],[-49,-83,-61,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,-60,-83,-71,-72,-84,-85,-59,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-96,-35,-37,-36,231,233,234,-94,-95,-76,-38,-40,-39,-45,-48,-47,-46,-74,-77,-41,-44,-43,-42,]),'fi':([77,78,80,81,82,83,86,87,88,90,93,94,95,122,123,131,132,136,137,164,167,168,169,170,171,172,173,176,179,180,190,192,193,194,209,210,220,222,223,227,231,232,233,234,235,236,244,245,246,247,249,250,251,252,],[-49,-83,-61,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,-60,-83,-71,-72,-84,-85,-59,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-96,-35,-37,-36,-94,-95,-76,-38,-40,-39,-45,-48,-47,-46,-74,-77,249,250,251,252,-41,-44,-43,-42,]),'dot':([78,86,87,88,90,93,94,95,123,136,137,145,174,175,176,179,180,190,209,210,],[-83,134,-81,-78,-82,-87,-88,-89,-83,-84,-85,188,211,212,-80,-79,-86,-96,-94,-95,]),'star':([78,82,83,86,87,88,90,93,94,95,123,131,132,136,137,170,171,172,173,176,179,180,190,209,210,220,235,236,],[-83,129,-73,-75,-81,-78,-82,-87,-88,-89,-83,-71,-72,-84,-85,129,129,-69,-70,-80,-79,-86,-96,-94,-95,-76,-74,-77,]),'div':([78,82,83,86,87,88,90,93,94,95,123,131,132,136,137,170,171,172,173,176,179,180,190,209,210,220,235,236,],[-83,130,-73,-75,-81,-78,-82,-87,-88,-89,-83,-71,-72,-84,-85,130,130,-69,-70,-80,-79,-86,-96,-94,-95,-76,-74,-77,]),'plus':([78,81,82,83,86,87,88,90,93,94,95,123,131,132,136,137,167,168,169,170,171,172,173,176,179,180,190,209,210,220,235,236,],[-83,127,-68,-73,-75,-81,-78,-82,-87,-88,-89,-83,-71,-72,-84,-85,127,127,127,-66,-67,-69,-70,-80,-79,-86,-96,-94,-95,-76,-74,-77,]),'minus':([78,81,82,83,86,87,88,90,93,94,95,123,131,132,136,137,167,168,169,170,171,172,173,176,179,180,190,209,210,220,235,236,],[-83,128,-68,-73,-75,-81,-78,-82,-87,-88,-89,-83,-71,-72,-84,-85,128,128,128,-66,-67,-69,-70,-80,-79,-86,-96,-94,-95,-76,-74,-77,]),'less':([78,80,81,82,83,86,87,88,90,93,94,95,122,123,131,132,136,137,167,168,169,170,171,172,173,176,179,180,190,209,210,220,235,236,],[-83,124,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,124,-83,-71,-72,-84,-85,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-96,-94,-95,-76,-74,-77,]),'lesseq':([78,80,81,82,83,86,87,88,90,93,94,95,122,123,131,132,136,137,167,168,169,170,171,172,173,176,179,180,190,209,210,220,235,236,],[-83,125,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,125,-83,-71,-72,-84,-85,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-96,-94,-95,-76,-74,-77,]),'equal':([78,80,81,82,83,86,87,88,90,93,94,95,122,123,131,132,136,137,167,168,169,170,171,172,173,176,179,180,190,209,210,220,235,236,],[-83,126,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,126,-83,-71,-72,-84,-85,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-96,-94,-95,-76,-74,-77,]),'esac':([197,198,202,224,225,242,],[222,223,227,-57,-55,-56,]),'rarrow':([243,],[248,]),} _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 = {'program':([0,],[1,]),'class_list':([0,3,4,],[2,6,7,]),'def_class':([0,3,4,],[3,3,3,]),'feature_list':([10,12,18,26,27,33,34,36,37,],[14,22,28,39,40,53,54,56,57,]),'epsilon':([10,12,18,26,27,30,32,33,34,36,37,118,],[15,15,15,15,15,47,47,15,15,15,15,160,]),'def_attr':([10,12,18,26,27,33,34,36,37,],[16,16,16,16,16,16,16,16,16,]),'def_func':([10,12,18,26,27,33,34,36,37,],[17,17,17,17,17,17,17,17,17,]),'formals':([30,32,],[43,51,]),'param_list':([30,32,42,52,61,],[44,44,59,59,96,]),'param_list_empty':([30,32,],[45,45,]),'param':([30,32,42,52,61,72,108,143,146,],[46,46,46,46,46,110,110,110,110,]),'expr':([58,63,64,73,74,75,88,91,117,118,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[71,98,100,111,113,115,132,136,154,158,136,179,181,183,190,192,193,195,158,136,201,202,204,205,158,228,230,231,237,]),'arith':([58,63,64,73,74,75,88,91,117,118,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,]),'comp':([58,63,64,73,74,75,78,88,91,117,118,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[79,79,79,79,79,79,119,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,]),'op':([58,63,64,73,74,75,78,88,91,117,118,121,122,123,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[80,80,80,80,80,80,80,80,80,80,80,161,162,163,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,]),'term':([58,63,64,73,74,75,78,88,91,117,118,121,122,123,124,125,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[81,81,81,81,81,81,81,81,81,81,81,81,81,81,164,165,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,]),'base_call':([58,63,64,73,74,75,78,83,84,88,91,117,118,121,122,123,124,125,126,127,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[82,82,82,82,82,82,82,128,129,82,82,82,82,82,82,82,82,82,166,167,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,]),'factor':([58,63,64,73,74,75,78,83,84,88,91,117,118,121,122,123,124,125,126,127,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,]),'func_call':([58,63,64,73,74,75,78,83,84,88,91,117,118,121,122,123,124,125,126,127,131,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,199,212,213,214,232,],[86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,169,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,220,86,86,86,86,]),'atom':([58,63,64,73,74,75,78,83,84,88,91,117,118,121,122,123,124,125,126,127,137,142,144,147,150,151,152,153,159,173,175,176,177,178,197,212,213,214,232,],[87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,]),'let_list':([72,108,143,146,],[107,145,145,182,]),'let_assign':([72,108,143,146,],[109,109,109,109,]),'block':([91,137,173,],[135,174,200,]),'args':([118,],[155,]),'arg_list':([118,159,197,],[156,198,219,]),'arg_list_empty':([118,],[157,]),'cases_list':([148,149,185,188,209,],[184,189,208,208,226,]),'casep':([148,149,185,188,209,],[186,186,186,186,186,]),} +_lr_goto_items = {'program':([0,],[1,]),'class_list':([0,3,4,],[2,6,7,]),'def_class':([0,3,4,],[3,3,3,]),'feature_list':([10,12,18,26,27,33,34,36,37,],[14,22,28,39,40,53,54,56,57,]),'epsilon':([10,12,18,26,27,30,32,33,34,36,37,109,121,183,],[15,15,15,15,15,47,47,15,15,15,15,151,151,151,]),'def_attr':([10,12,18,26,27,33,34,36,37,],[16,16,16,16,16,16,16,16,16,]),'def_func':([10,12,18,26,27,33,34,36,37,],[17,17,17,17,17,17,17,17,17,]),'formals':([30,32,],[43,51,]),'param_list':([30,32,42,52,61,],[44,44,59,59,97,]),'param_list_empty':([30,32,],[45,45,]),'param':([30,32,42,52,61,73,111,153,156,],[46,46,46,46,46,113,113,113,113,]),'expr':([58,63,64,74,75,76,89,92,109,120,121,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[72,99,101,114,116,118,135,139,150,164,150,139,150,192,194,196,203,205,206,208,150,139,214,215,216,218,219,150,244,246,247,253,]),'arith':([58,63,64,74,75,76,89,92,109,120,121,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,]),'comp':([58,63,64,74,75,76,79,89,92,109,120,121,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[80,80,80,80,80,80,122,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,]),'op':([58,63,64,74,75,76,79,89,92,109,120,121,124,125,126,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[81,81,81,81,81,81,81,81,81,81,81,81,167,168,169,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,]),'term':([58,63,64,74,75,76,79,89,92,109,120,121,124,125,126,127,128,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,170,171,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,]),'base_call':([58,63,64,74,75,76,79,84,85,89,92,109,120,121,124,125,126,127,128,129,130,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[83,83,83,83,83,83,83,131,132,83,83,83,83,83,83,83,83,83,83,172,173,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,]),'factor':([58,63,64,74,75,76,79,84,85,89,92,109,120,121,124,125,126,127,128,129,130,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,]),'func_call':([58,63,64,74,75,76,79,84,85,89,92,109,120,121,124,125,126,127,128,129,130,134,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,188,191,211,212,228,229,230,248,],[87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,176,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,220,87,235,236,87,87,87,87,]),'atom':([58,63,64,74,75,76,79,84,85,89,92,109,120,121,124,125,126,127,128,129,130,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,]),'let_list':([73,111,153,156,],[110,155,155,195,]),'let_assign':([73,111,153,156,],[112,112,112,112,]),'block':([92,140,181,],[138,182,213,]),'args':([109,121,183,],[147,165,147,]),'arg_list':([109,121,146,166,183,191,],[148,148,189,189,148,221,]),'arg_list_empty':([109,121,183,],[149,149,149,]),'cases_list':([158,159,198,201,225,],[197,202,224,224,242,]),'casep':([158,159,198,201,225,],[199,199,199,199,199,]),} _lr_goto = {} for _k, _v in _lr_goto_items.items(): @@ -102,27 +102,31 @@ ('term -> base_call','term',1,'p_term','parser.py',235), ('base_call -> factor arroba type dot func_call','base_call',5,'p_base_call','parser.py',248), ('base_call -> factor','base_call',1,'p_base_call','parser.py',249), - ('factor -> atom','factor',1,'p_factor1','parser.py',257), - ('factor -> opar expr cpar','factor',3,'p_factor1','parser.py',258), - ('factor -> factor dot func_call','factor',3,'p_factor2','parser.py',262), - ('factor -> func_call','factor',1,'p_factor2','parser.py',263), - ('atom -> num','atom',1,'p_atom_num','parser.py',271), - ('atom -> id','atom',1,'p_atom_id','parser.py',275), - ('atom -> new type','atom',2,'p_atom_new','parser.py',279), - ('atom -> new error','atom',2,'p_atom_new_error','parser.py',283), - ('atom -> ocur block ccur','atom',3,'p_atom_block','parser.py',287), - ('atom -> true','atom',1,'p_atom_boolean','parser.py',291), - ('atom -> false','atom',1,'p_atom_boolean','parser.py',292), - ('atom -> string','atom',1,'p_atom_string','parser.py',296), - ('block -> expr semi','block',2,'p_block','parser.py',301), - ('block -> expr semi block','block',3,'p_block','parser.py',302), - ('block -> error block','block',2,'p_block_error','parser.py',306), - ('block -> error','block',1,'p_block_error','parser.py',307), - ('func_call -> id opar args cpar','func_call',4,'p_func_call','parser.py',312), - ('args -> arg_list','args',1,'p_args','parser.py',317), - ('args -> arg_list_empty','args',1,'p_args','parser.py',318), - ('arg_list -> expr','arg_list',1,'p_arg_list','parser.py',324), - ('arg_list -> expr comma arg_list','arg_list',3,'p_arg_list','parser.py',325), - ('arg_list -> error arg_list','arg_list',2,'p_arg_list_error','parser.py',332), - ('arg_list_empty -> epsilon','arg_list_empty',1,'p_arg_list_empty','parser.py',336), + ('base_call -> error arroba type dot func_call','base_call',5,'p_base_call_error','parser.py',256), + ('base_call -> factor arroba error dot func_call','base_call',5,'p_base_call_error','parser.py',257), + ('factor -> atom','factor',1,'p_factor1','parser.py',262), + ('factor -> opar expr cpar','factor',3,'p_factor1','parser.py',263), + ('factor -> factor dot func_call','factor',3,'p_factor2','parser.py',267), + ('factor -> func_call','factor',1,'p_factor2','parser.py',268), + ('atom -> num','atom',1,'p_atom_num','parser.py',276), + ('atom -> id','atom',1,'p_atom_id','parser.py',280), + ('atom -> new type','atom',2,'p_atom_new','parser.py',284), + ('atom -> new error','atom',2,'p_atom_new_error','parser.py',288), + ('atom -> ocur block ccur','atom',3,'p_atom_block','parser.py',292), + ('atom -> true','atom',1,'p_atom_boolean','parser.py',296), + ('atom -> false','atom',1,'p_atom_boolean','parser.py',297), + ('atom -> string','atom',1,'p_atom_string','parser.py',301), + ('block -> expr semi','block',2,'p_block','parser.py',306), + ('block -> expr semi block','block',3,'p_block','parser.py',307), + ('block -> error block','block',2,'p_block_error','parser.py',311), + ('block -> error','block',1,'p_block_error','parser.py',312), + ('func_call -> id opar args cpar','func_call',4,'p_func_call','parser.py',317), + ('func_call -> id opar error cpar','func_call',4,'p_func_call_error','parser.py',321), + ('func_call -> error opar args cpar','func_call',4,'p_func_call_error','parser.py',322), + ('args -> arg_list','args',1,'p_args','parser.py',327), + ('args -> arg_list_empty','args',1,'p_args','parser.py',328), + ('arg_list -> expr','arg_list',1,'p_arg_list','parser.py',334), + ('arg_list -> expr comma arg_list','arg_list',3,'p_arg_list','parser.py',335), + ('arg_list -> error arg_list','arg_list',2,'p_arg_list_error','parser.py',342), + ('arg_list_empty -> epsilon','arg_list_empty',1,'p_arg_list_empty','parser.py',346), ] diff --git a/src/parser.py b/src/parser.py index 78b8d192..91450b3e 100644 --- a/src/parser.py +++ b/src/parser.py @@ -252,6 +252,11 @@ def p_base_call(self, p): else: p[0] = BaseCallNode(p[1], p[3], *p[5]) + def p_base_call_error(self, p): + '''base_call : error arroba type dot func_call + | factor arroba error dot func_call + ''' + p[0] = ErrorNode() def p_factor1(self, p): '''factor : atom @@ -312,6 +317,11 @@ def p_func_call(self, p): 'func_call : id opar args cpar' p[0] = (p[1], p[3]) + def p_func_call_error(self, p): + '''func_call : id opar error cpar + | error opar args cpar''' + p[0] = (ErrorNode(), ErrorNode()) + def p_args(self, p): '''args : arg_list @@ -338,6 +348,7 @@ def p_arg_list_empty(self, p): # Error rule for syntax errors def p_error(self, p): + self.errors = True if p: self.print_error(p) else: @@ -356,30 +367,28 @@ def print_error(self, tok): if __name__ == "__main__": - s = '''(* Cool programs are sets of classes *) - -class Main { - main(): Object { - (new Alpha).print() + s = '''class Main inherits IO { + main() : Object { + { + out_string("Enter number of numbers to multiply\n"); + out_int(prod(in_int())); + out_string("\n"); + } }; -}; -class Test { - testing(): Int { - 2 + 2 + prod(i : Int) : Int { + let y : Int <- 1 in { + while (not (i = 0) ) loop { + out_string("Enter Number: "); + y <- y * in_int(Main : Int); -- the parser correctly catches the error here + i <- i - 1; + } + pool; + y; + } }; }; --- Only classes -suma(a: Int, b: Int) int { - a + b -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; -}; ''' # Parser() parser = CoolParser() diff --git a/src/utils/__pycache__/logger.cpython-37.pyc b/src/utils/__pycache__/logger.cpython-37.pyc index 95673d5f1443c38fe306d710a0c7edadf7f64db8..58700997b744ab85d4e27a56562aadf9d69612ae 100644 GIT binary patch delta 184 zcmZ3 Date: Tue, 25 Feb 2020 12:35:04 -0500 Subject: [PATCH 11/60] Fixing Comments --- src/lexer.py | 45 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/src/lexer.py b/src/lexer.py index 2f3ffddb..5c21aa19 100644 --- a/src/lexer.py +++ b/src/lexer.py @@ -12,6 +12,47 @@ def __init__(self, **kwargs): self.errors = [] self.lexer = lex.lex(module=self, **kwargs) + + states = ( + ('comments', 'exclusive'), + ('strings', 'exclusive') + ) + + #Comments + def t_comments(self,t): + r'\(\*' + t.lexer.level = 1 + t.lexer.begin('comments') + + def t_comments_open(self,t): + r'\(\*' + t.lexer.level += 1 + + def t_comments_close(self,t): + r'\*\)' + t.lexer.level -= 1 + + if t.lexer.level == 0: + t.lexer.begin('INITIAL') + + def t_comments_newline(self,t): + r'\n+' + t.lexer.lineno += len(t.value) + + t_comments_ignore = ' \t\f\r\t\v' + + def t_comments_error(self,t): + t.lexer.skip(1) + + def t_comments_eof(self,t): + + if t.lexer.level > 0: + error_text = LexicographicError.EOF_COMMENT + line = t.lineno + column = find_column(self.lexer, t) + self.errors.append(LexicographicError(error_text, line, column)) + + # Regular expressions for simple tokens # t_ignore_COMMENT = r'--.* | \*(.)*\*' # A string containing ignored characters @@ -63,9 +104,9 @@ def t_string(self, t): t.value = t.value[1:-1] return t - # TODO: Comentarios anidados, eof en los comentarios def t_comment(self, t): - r'--.* | \*(.)*\*' + r'--.*($|\n)' + t.lexer.lineno += 1 pass # Define a rule so we can track line numbers From e4b5fc394d7ffd779776550d0c9a7bc11fb0b8f5 Mon Sep 17 00:00:00 2001 From: nolyfdezarias Date: Tue, 25 Feb 2020 13:00:12 -0500 Subject: [PATCH 12/60] Fixing Strings --- src/lexer.py | 113 +++++++++++++++++++++++++++++++------------- src/tools/errors.py | 1 + 2 files changed, 82 insertions(+), 32 deletions(-) diff --git a/src/lexer.py b/src/lexer.py index 5c21aa19..48ddfaec 100644 --- a/src/lexer.py +++ b/src/lexer.py @@ -51,6 +51,80 @@ def t_comments_eof(self,t): line = t.lineno column = find_column(self.lexer, t) self.errors.append(LexicographicError(error_text, line, column)) + + #Strings + def t_strings(self,t): + r'\"' + t.lexer.str_start = t.lexer.lexpos + t.lexer.myString = '' + t.lexer.backslash = False + t.lexer.begin('strings') + + def t_strings_end(self,t): + r'\"' + if t.lexer.backslash : + t.lexer.myString += '"' + t.lexer.backslash = False + else: + t.value = t.lexer.myString + t.type = 'string' + t.lexer.begin('INITIAL') + return t + + def t_strings_newline(self,t): + r'\n' + t.lexer.lineno += 1 + if not t.lexer.backslash: + error_text = LexicographicError.UNDETERMINATED_STRING + line = t.lineno + column = find_column(self.lexer, t) + self.errors.append(LexicographicError(error_text, line, column)) + t.lexer.begin('INITIAL') + + def t_strings_nill(self,t): + r'\0' + error_text = LexicographicError.NULL_STRING + line = t.lineno + column = find_column(self.lexer, t) + self.errors.append(LexicographicError(error_text, line, column)) + + def t_strings_consume(self,t): + r'[^\n]' + + if t.lexer.backslash : + if t.value == 'b': + t.lexer.myString += '\b' + + elif t.value == 't': + t.lexer.myString += '\t' + + + elif t.value == 'f': + t.lexer.myString += '\f' + + + elif t.value == 'n': + t.lexer.myString += '\n' + + elif t.value == '\\': + t.lexer.myString += '\\' + else: + t.lexer.myString += t.value + t.lexer.backslash = False + else: + if t.value != '\\': + t.lexer.myString += t.value + else: + t.lexer.backslash = True + + + t_strings_ignore = '' + + def t_strings_eof(self,t): + error_text = LexicographicError.EOF_STRING + line = t.lineno + column = find_column(self.lexer, t) + self.errors.append(LexicographicError(error_text, line, column)) # Regular expressions for simple tokens @@ -97,12 +171,6 @@ def t_num(self, t): r'\d+(\.\d+)? ' t.value = float(t.value) return t - - # TODO: Los strings no pueden contener \n, \0, strings anidados, eof en strings - def t_string(self, t): - r'"[^"]*"' - t.value = t.value[1:-1] - return t def t_comment(self, t): r'--.*($|\n)' @@ -116,12 +184,13 @@ def t_newline(self, t): # Error handling rule def t_error(self, t): - error_text = LexicographicError.UNKNOWN_TOKEN % t.value + error_text = LexicographicError.UNKNOWN_TOKEN % t.value[0] line = t.lineno column = find_column(self.lexer, t) self.errors.append(LexicographicError(error_text, line, column)) - t.lexer.skip(len(t.value)) + t.lexer.skip(1) + #t.lexer.skip(len(t.value)) def tokenize_text(self, text): self.lexer.input(text) @@ -135,28 +204,8 @@ def tokenize_text(self, text): if __name__ == "__main__": lexer = CoolLexer() - data = ''' -class Main inherits IO { - str <- "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; - main() : Object { - { - out_string("Enter number of numbers to multiply\n"); - out_int(prod(in_int())); - out_string("\n"); - } - }; - prod(i : Int) : Int { - let y : Int <- 1 in { - while (not (i = 0) ) loop { - out_string("Enter Number: "); - y <- y * in_int(); - i <- i - 1; - } - y; - } - }; -} - ''' - + data = open('comment1.cl',encoding='utf-8') + data = data.read() res = lexer.tokenize_text(data) - pprint(res) + #pprint(res) + pprint(lexer.errors) diff --git a/src/tools/errors.py b/src/tools/errors.py index 111d995f..8b519b79 100644 --- a/src/tools/errors.py +++ b/src/tools/errors.py @@ -36,6 +36,7 @@ class LexicographicError(CoolError): UNDETERMINATED_STRING = 'Undeterminated string constant' EOF_COMMENT = 'EOF in comment' EOF_STRING = 'EOF in string constant' + NULL_STRING = 'String contains null character' @property def error_type(self): From ce28fca008d290c02db56dff6a0f32e72ae9813a Mon Sep 17 00:00:00 2001 From: nolyfdezarias Date: Tue, 25 Feb 2020 13:11:29 -0500 Subject: [PATCH 13/60] Fixing Strings --- src/lexer.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lexer.py b/src/lexer.py index 48ddfaec..f47a96bb 100644 --- a/src/lexer.py +++ b/src/lexer.py @@ -117,6 +117,8 @@ def t_strings_consume(self,t): else: t.lexer.backslash = True + def t_strings_error(self,t): + pass t_strings_ignore = '' @@ -204,7 +206,7 @@ def tokenize_text(self, text): if __name__ == "__main__": lexer = CoolLexer() - data = open('comment1.cl',encoding='utf-8') + data = open('string4.cl',encoding='utf-8') data = data.read() res = lexer.tokenize_text(data) #pprint(res) From 799f1b32d45bfe34949bc6e96e8f34663fa39b6b Mon Sep 17 00:00:00 2001 From: Loraine Monteagudo Garcia Date: Tue, 25 Feb 2020 13:29:14 -0500 Subject: [PATCH 14/60] Testing errors in the parser --- src/__pycache__/base_parser.cpython-37.pyc | Bin 1019 -> 1028 bytes src/__pycache__/cool_grammar.cpython-37.pyc | Bin 384 -> 0 bytes src/__pycache__/lexer.cpython-37.pyc | Bin 3636 -> 5899 bytes src/__pycache__/parser.cpython-37.pyc | Bin 15528 -> 17319 bytes src/base_parser.py | 14 +- src/coolc.sh | 4 +- src/main.py | 19 +- src/makefile | 4 +- src/output_parser/parselog.txt | 14713 ++++++++++++------ src/output_parser/parsetab.py | 223 +- src/parser.py | 171 +- src/tools/__pycache__/errors.cpython-37.pyc | Bin 4576 -> 4555 bytes src/tools/errors.py | 4 +- src/utils/__pycache__/logger.cpython-37.pyc | Bin 443 -> 431 bytes src/utils/logger.py | 2 +- tests/utils/utils.py | 6 - 16 files changed, 10165 insertions(+), 4995 deletions(-) delete mode 100644 src/__pycache__/cool_grammar.cpython-37.pyc diff --git a/src/__pycache__/base_parser.cpython-37.pyc b/src/__pycache__/base_parser.cpython-37.pyc index 490e5cbb5b5d809afe3128d9be0250615ca328a0..aa729f7b2e5b2f574d97e3aaece476ccef8dfb5f 100644 GIT binary patch delta 246 zcmey(-onA_#LLUY00h^1L*j}j@_u1-n9Rgz%~Hb<&pz3nF@=$1@)AZ(xm#=niABY! zMVd^vSc+3~(u(+iT2?X?2?MEL36q~O>P?npYRr)Va#I+AdKqdMvKX_NYJlu4<}BtC zmK3I5=3oX*W; zKA^&t3`Igf>T4>HnEaMek0svm@W#nfOiig$K#>&28isg=62>g18Xzl+Ig7c5DTS$* zIha9{+0RXr@fK@JYEo&sCQA`NP<4?2khsNKkXTfl3N~DmxkwNs&ITexK?KMy2q6q& fiB0BU_LdR>GvP8wY9{A0rwSnWV3zRYN6bn9r-d#d diff --git a/src/__pycache__/cool_grammar.cpython-37.pyc b/src/__pycache__/cool_grammar.cpython-37.pyc deleted file mode 100644 index 2a450602786f3a0384d8a9390cc04b28cfa3baef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 384 zcmXv|yH3ME5cDOE2_*i9G!#Kf&Pp5!B!qa#2pXC|;{xk+KG2ChUvzga+~s!=72*@} z33O?x_yBtL9A%}Qot@E0a~;P=0nYLF{qqOjAOGy9gX9v|CJ1Fv5(pH@3GuuGokxGW z&{bg`wps{173C4~-ZB_RznBWfWE(mCCMt`JoFK%@rgF?lo*APJ3WFC}l?B&OtLkBV zkPn^KV5hs3@g?%Zoy4r$yTXU93B5b0oy0(kriaRVU?My%{H>8uB}&OCXlQ6MOHUVB zI`=qVoZZqQv%D6-Xi+@f(bVbD)#g*v8?9C#l&GAxqf(6gFM)Bn`Knq|f-sb0*9mVe mVJ5R=mQZVWD;KYZDaFim)olCcN|!Z=3xaK|FE=E8G9>?Q?rAIl diff --git a/src/__pycache__/lexer.cpython-37.pyc b/src/__pycache__/lexer.cpython-37.pyc index feabe50b37e860d27c0b673e8880eaaa04f5c383..18bd2c6a0b16eed0c3dbb6055192d150cc9fa789 100644 GIT binary patch literal 5899 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�gbd|(SzDtn0f@+jzu$X0QZDVUaHIi{0yOjCCZ zCy!Rq8FQwb)8;rvbrbvhqyDC2W9}46%PFew(3ZFA&A@d#g%tlwOAWtcZN=-0mvIZ~ zctIl+xMwOK;kmZ|bct@$O5lqZV_bGcOG@V=rI~5;QA$kK)TK~%7G)XmR@}rSRVu~j z#k2=kcpD%j3sii`HENM>NKCrQNla0X>xn77x=_e*12??tgggqv#JQ5H?+4_KBGOQD V0b~UD8{@yy9^o)x&_S_)=U=QB^Pd0! literal 3636 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 QV*XxXuP~yNN}`$m0Z` class type ocur feature_list ccur semi yacc.py:3381:Rule 7 def_class -> class type inherits type ocur feature_list ccur semi yacc.py:3381:Rule 8 def_class -> class error ocur feature_list ccur semi - yacc.py:3381:Rule 9 def_class -> class error inherits type ocur feature_list ccur semi - yacc.py:3381:Rule 10 def_class -> class error inherits error ocur feature_list ccur semi - yacc.py:3381:Rule 11 def_class -> class type inherits error ocur feature_list ccur semi - yacc.py:3381:Rule 12 feature_list -> epsilon - yacc.py:3381:Rule 13 feature_list -> def_attr semi feature_list - yacc.py:3381:Rule 14 feature_list -> def_func semi feature_list - yacc.py:3381:Rule 15 feature_list -> error feature_list - yacc.py:3381:Rule 16 def_attr -> id colon type - yacc.py:3381:Rule 17 def_attr -> id colon type larrow expr - yacc.py:3381:Rule 18 def_attr -> error colon type - yacc.py:3381:Rule 19 def_attr -> id colon error - yacc.py:3381:Rule 20 def_attr -> error colon type larrow expr - yacc.py:3381:Rule 21 def_attr -> id colon error larrow expr - yacc.py:3381:Rule 22 def_attr -> id colon type larrow error - yacc.py:3381:Rule 23 def_func -> id opar formals cpar colon type ocur expr ccur - yacc.py:3381:Rule 24 def_func -> error opar formals cpar colon type ocur expr ccur - yacc.py:3381:Rule 25 def_func -> id opar error cpar colon type ocur expr ccur - yacc.py:3381:Rule 26 def_func -> id opar formals cpar colon error ocur expr ccur - yacc.py:3381:Rule 27 def_func -> id opar formals cpar colon type ocur error ccur - yacc.py:3381:Rule 28 formals -> param_list - yacc.py:3381:Rule 29 formals -> param_list_empty - yacc.py:3381:Rule 30 param_list -> param - yacc.py:3381:Rule 31 param_list -> param comma param_list - yacc.py:3381:Rule 32 param_list -> error param_list - yacc.py:3381:Rule 33 param_list_empty -> epsilon - yacc.py:3381:Rule 34 param -> id colon type - yacc.py:3381:Rule 35 expr -> let let_list in expr - yacc.py:3381:Rule 36 expr -> let error in expr - yacc.py:3381:Rule 37 expr -> let let_list in error - yacc.py:3381:Rule 38 expr -> case expr of cases_list esac - yacc.py:3381:Rule 39 expr -> case error of cases_list esac - yacc.py:3381:Rule 40 expr -> case expr of error esac - yacc.py:3381:Rule 41 expr -> if expr then expr else expr fi - yacc.py:3381:Rule 42 expr -> if error then expr else expr fi - yacc.py:3381:Rule 43 expr -> if expr then error else expr fi - yacc.py:3381:Rule 44 expr -> if expr then expr else error fi - yacc.py:3381:Rule 45 expr -> while expr loop expr pool - yacc.py:3381:Rule 46 expr -> while error loop expr pool - yacc.py:3381:Rule 47 expr -> while expr loop error pool - yacc.py:3381:Rule 48 expr -> while expr loop expr error - yacc.py:3381:Rule 49 expr -> arith - yacc.py:3381:Rule 50 let_list -> let_assign - yacc.py:3381:Rule 51 let_list -> let_assign comma let_list - yacc.py:3381:Rule 52 let_list -> error let_list - yacc.py:3381:Rule 53 let_assign -> param larrow expr - yacc.py:3381:Rule 54 let_assign -> param - yacc.py:3381:Rule 55 cases_list -> casep semi - yacc.py:3381:Rule 56 cases_list -> casep semi cases_list - yacc.py:3381:Rule 57 cases_list -> error cases_list - yacc.py:3381:Rule 58 casep -> id colon type rarrow expr - yacc.py:3381:Rule 59 arith -> id larrow expr - yacc.py:3381:Rule 60 arith -> not comp - yacc.py:3381:Rule 61 arith -> comp - yacc.py:3381:Rule 62 comp -> comp less op - yacc.py:3381:Rule 63 comp -> comp lesseq op - yacc.py:3381:Rule 64 comp -> comp equal op - yacc.py:3381:Rule 65 comp -> op - yacc.py:3381:Rule 66 op -> op plus term - yacc.py:3381:Rule 67 op -> op minus term - yacc.py:3381:Rule 68 op -> term - yacc.py:3381:Rule 69 term -> term star base_call - yacc.py:3381:Rule 70 term -> term div base_call - yacc.py:3381:Rule 71 term -> isvoid base_call - yacc.py:3381:Rule 72 term -> nox base_call - yacc.py:3381:Rule 73 term -> base_call - yacc.py:3381:Rule 74 base_call -> factor arroba type dot func_call - yacc.py:3381:Rule 75 base_call -> factor - yacc.py:3381:Rule 76 base_call -> error arroba type dot func_call - yacc.py:3381:Rule 77 base_call -> factor arroba error dot func_call - yacc.py:3381:Rule 78 factor -> atom - yacc.py:3381:Rule 79 factor -> opar expr cpar - yacc.py:3381:Rule 80 factor -> factor dot func_call - yacc.py:3381:Rule 81 factor -> func_call - yacc.py:3381:Rule 82 atom -> num - yacc.py:3381:Rule 83 atom -> id - yacc.py:3381:Rule 84 atom -> new type - yacc.py:3381:Rule 85 atom -> new error - yacc.py:3381:Rule 86 atom -> ocur block ccur - yacc.py:3381:Rule 87 atom -> true - yacc.py:3381:Rule 88 atom -> false - yacc.py:3381:Rule 89 atom -> string - yacc.py:3381:Rule 90 block -> expr semi - yacc.py:3381:Rule 91 block -> expr semi block - yacc.py:3381:Rule 92 block -> error block - yacc.py:3381:Rule 93 block -> error - yacc.py:3381:Rule 94 func_call -> id opar args cpar - yacc.py:3381:Rule 95 func_call -> id opar error cpar - yacc.py:3381:Rule 96 func_call -> error opar args cpar - yacc.py:3381:Rule 97 args -> arg_list - yacc.py:3381:Rule 98 args -> arg_list_empty - yacc.py:3381:Rule 99 arg_list -> expr - yacc.py:3381:Rule 100 arg_list -> expr comma arg_list - yacc.py:3381:Rule 101 arg_list -> error arg_list - yacc.py:3381:Rule 102 arg_list_empty -> epsilon + yacc.py:3381:Rule 9 def_class -> class type ocur feature_list ccur error + yacc.py:3381:Rule 10 def_class -> class error inherits type ocur feature_list ccur semi + yacc.py:3381:Rule 11 def_class -> class error inherits error ocur feature_list ccur semi + yacc.py:3381:Rule 12 def_class -> class type inherits error ocur feature_list ccur semi + yacc.py:3381:Rule 13 def_class -> class type inherits type ocur feature_list ccur error + yacc.py:3381:Rule 14 feature_list -> epsilon + yacc.py:3381:Rule 15 feature_list -> def_attr semi feature_list + yacc.py:3381:Rule 16 feature_list -> def_func semi feature_list + yacc.py:3381:Rule 17 feature_list -> error feature_list + yacc.py:3381:Rule 18 def_attr -> id colon type + yacc.py:3381:Rule 19 def_attr -> id colon type larrow expr + yacc.py:3381:Rule 20 def_attr -> error colon type + yacc.py:3381:Rule 21 def_attr -> id colon error + yacc.py:3381:Rule 22 def_attr -> error colon type larrow expr + yacc.py:3381:Rule 23 def_attr -> id colon error larrow expr + yacc.py:3381:Rule 24 def_attr -> id colon type larrow error + yacc.py:3381:Rule 25 def_func -> id opar formals cpar colon type ocur expr ccur + yacc.py:3381:Rule 26 def_func -> error opar formals cpar colon type ocur expr ccur + yacc.py:3381:Rule 27 def_func -> id opar error cpar colon type ocur expr ccur + yacc.py:3381:Rule 28 def_func -> id opar formals cpar colon error ocur expr ccur + yacc.py:3381:Rule 29 def_func -> id opar formals cpar colon type ocur error ccur + yacc.py:3381:Rule 30 formals -> param_list + yacc.py:3381:Rule 31 formals -> param_list_empty + yacc.py:3381:Rule 32 param_list -> param + yacc.py:3381:Rule 33 param_list -> param comma param_list + yacc.py:3381:Rule 34 param_list -> error comma param_list + yacc.py:3381:Rule 35 param_list -> param comma error + yacc.py:3381:Rule 36 param_list_empty -> epsilon + yacc.py:3381:Rule 37 param -> id colon type + yacc.py:3381:Rule 38 let_list -> let_assign + yacc.py:3381:Rule 39 let_list -> let_assign comma let_list + yacc.py:3381:Rule 40 let_list -> error let_list + yacc.py:3381:Rule 41 let_list -> error + yacc.py:3381:Rule 42 let_assign -> param larrow expr + yacc.py:3381:Rule 43 let_assign -> param + yacc.py:3381:Rule 44 cases_list -> casep semi + yacc.py:3381:Rule 45 cases_list -> casep semi cases_list + yacc.py:3381:Rule 46 cases_list -> error cases_list + yacc.py:3381:Rule 47 cases_list -> error semi + yacc.py:3381:Rule 48 casep -> id colon type rarrow expr + yacc.py:3381:Rule 49 expr -> id larrow expr + yacc.py:3381:Rule 50 expr -> comp + yacc.py:3381:Rule 51 comp -> comp less op + yacc.py:3381:Rule 52 comp -> comp lesseq op + yacc.py:3381:Rule 53 comp -> comp equal op + yacc.py:3381:Rule 54 comp -> op + yacc.py:3381:Rule 55 comp -> comp less error + yacc.py:3381:Rule 56 comp -> comp lesseq error + yacc.py:3381:Rule 57 comp -> comp equal error + yacc.py:3381:Rule 58 op -> op plus term + yacc.py:3381:Rule 59 op -> op minus term + yacc.py:3381:Rule 60 op -> term + yacc.py:3381:Rule 61 op -> op plus error + yacc.py:3381:Rule 62 op -> op minus error + yacc.py:3381:Rule 63 term -> term star base_call + yacc.py:3381:Rule 64 term -> term div base_call + yacc.py:3381:Rule 65 term -> isvoid base_call + yacc.py:3381:Rule 66 term -> nox base_call + yacc.py:3381:Rule 67 term -> base_call + yacc.py:3381:Rule 68 term -> term star error + yacc.py:3381:Rule 69 term -> term div error + yacc.py:3381:Rule 70 term -> isvoid error + yacc.py:3381:Rule 71 term -> nox error + yacc.py:3381:Rule 72 base_call -> factor arroba type dot func_call + yacc.py:3381:Rule 73 base_call -> factor + yacc.py:3381:Rule 74 base_call -> error arroba type dot func_call + yacc.py:3381:Rule 75 base_call -> factor arroba error dot func_call + yacc.py:3381:Rule 76 factor -> atom + yacc.py:3381:Rule 77 factor -> opar expr cpar + yacc.py:3381:Rule 78 factor -> opar expr error + yacc.py:3381:Rule 79 factor -> error expr cpar + yacc.py:3381:Rule 80 factor -> opar error cpar + yacc.py:3381:Rule 81 factor -> factor dot func_call + yacc.py:3381:Rule 82 factor -> not expr + yacc.py:3381:Rule 83 factor -> func_call + yacc.py:3381:Rule 84 factor -> let let_list in expr + yacc.py:3381:Rule 85 factor -> let error in expr + yacc.py:3381:Rule 86 factor -> let let_list in error + yacc.py:3381:Rule 87 factor -> let let_list error expr + yacc.py:3381:Rule 88 factor -> case expr of cases_list esac + yacc.py:3381:Rule 89 factor -> case error of cases_list esac + yacc.py:3381:Rule 90 factor -> case expr of error esac + yacc.py:3381:Rule 91 factor -> case expr error cases_list esac + yacc.py:3381:Rule 92 factor -> case expr of cases_list error + yacc.py:3381:Rule 93 factor -> if expr then expr else expr fi + yacc.py:3381:Rule 94 factor -> if error then expr else expr fi + yacc.py:3381:Rule 95 factor -> if expr then error else expr fi + yacc.py:3381:Rule 96 factor -> if expr then expr else error fi + yacc.py:3381:Rule 97 factor -> if expr error expr else expr fi + yacc.py:3381:Rule 98 factor -> if expr then expr error error expr fi + yacc.py:3381:Rule 99 factor -> if expr then expr error expr fi + yacc.py:3381:Rule 100 factor -> if expr then expr else expr error + yacc.py:3381:Rule 101 factor -> if error fi + yacc.py:3381:Rule 102 factor -> while expr loop expr pool + yacc.py:3381:Rule 103 factor -> while error loop expr pool + yacc.py:3381:Rule 104 factor -> while expr loop error pool + yacc.py:3381:Rule 105 factor -> while expr loop expr error + yacc.py:3381:Rule 106 factor -> while expr error expr loop expr pool + yacc.py:3381:Rule 107 factor -> while expr error expr pool + yacc.py:3381:Rule 108 atom -> num + yacc.py:3381:Rule 109 atom -> id + yacc.py:3381:Rule 110 atom -> new type + yacc.py:3381:Rule 111 atom -> new error + yacc.py:3381:Rule 112 atom -> ocur block ccur + yacc.py:3381:Rule 113 atom -> error block ccur + yacc.py:3381:Rule 114 atom -> ocur error ccur + yacc.py:3381:Rule 115 atom -> ocur block error + yacc.py:3381:Rule 116 atom -> true + yacc.py:3381:Rule 117 atom -> false + yacc.py:3381:Rule 118 atom -> string + yacc.py:3381:Rule 119 block -> expr semi + yacc.py:3381:Rule 120 block -> expr semi block + yacc.py:3381:Rule 121 block -> error block + yacc.py:3381:Rule 122 block -> error semi + yacc.py:3381:Rule 123 func_call -> id opar args cpar + yacc.py:3381:Rule 124 func_call -> id opar error cpar + yacc.py:3381:Rule 125 func_call -> error opar args cpar + yacc.py:3381:Rule 126 args -> arg_list + yacc.py:3381:Rule 127 args -> arg_list_empty + yacc.py:3381:Rule 128 arg_list -> expr + yacc.py:3381:Rule 129 arg_list -> expr comma arg_list + yacc.py:3381:Rule 130 arg_list -> error arg_list + yacc.py:3381:Rule 131 arg_list_empty -> epsilon yacc.py:3399: yacc.py:3400:Terminals, with rules where they appear yacc.py:3401: - yacc.py:3405:arroba : 74 76 77 - yacc.py:3405:case : 38 39 40 - yacc.py:3405:ccur : 6 7 8 9 10 11 23 24 25 26 27 86 - yacc.py:3405:class : 6 7 8 9 10 11 - yacc.py:3405:colon : 16 17 18 19 20 21 22 23 24 25 26 27 34 58 - yacc.py:3405:comma : 31 51 100 - yacc.py:3405:cpar : 23 24 25 26 27 79 94 95 96 - yacc.py:3405:div : 70 - yacc.py:3405:dot : 74 76 77 80 - yacc.py:3405:else : 41 42 43 44 - yacc.py:3405:equal : 64 - yacc.py:3405:error : 5 8 9 10 10 11 15 18 19 20 21 22 24 25 26 27 32 36 37 39 40 42 43 44 46 47 48 52 57 76 77 85 92 93 95 96 101 - yacc.py:3405:esac : 38 39 40 - yacc.py:3405:false : 88 - yacc.py:3405:fi : 41 42 43 44 - yacc.py:3405:id : 16 17 19 21 22 23 25 26 27 34 58 59 83 94 95 - yacc.py:3405:if : 41 42 43 44 - yacc.py:3405:in : 35 36 37 - yacc.py:3405:inherits : 7 9 10 11 - yacc.py:3405:isvoid : 71 - yacc.py:3405:larrow : 17 20 21 22 53 59 - yacc.py:3405:less : 62 - yacc.py:3405:lesseq : 63 - yacc.py:3405:let : 35 36 37 - yacc.py:3405:loop : 45 46 47 48 - yacc.py:3405:minus : 67 - yacc.py:3405:new : 84 85 - yacc.py:3405:not : 60 - yacc.py:3405:nox : 72 - yacc.py:3405:num : 82 - yacc.py:3405:ocur : 6 7 8 9 10 11 23 24 25 26 27 86 - yacc.py:3405:of : 38 39 40 - yacc.py:3405:opar : 23 24 25 26 27 79 94 95 96 - yacc.py:3405:plus : 66 - yacc.py:3405:pool : 45 46 47 - yacc.py:3405:rarrow : 58 - yacc.py:3405:semi : 6 7 8 9 10 11 13 14 55 56 90 91 - yacc.py:3405:star : 69 - yacc.py:3405:string : 89 - yacc.py:3405:then : 41 42 43 44 - yacc.py:3405:true : 87 - yacc.py:3405:type : 6 7 7 9 11 16 17 18 20 22 23 24 25 27 34 58 74 76 84 - yacc.py:3405:while : 45 46 47 48 + yacc.py:3405:arroba : 72 74 75 + yacc.py:3405:case : 88 89 90 91 92 + yacc.py:3405:ccur : 6 7 8 9 10 11 12 13 25 26 27 28 29 112 113 114 + yacc.py:3405:class : 6 7 8 9 10 11 12 13 + yacc.py:3405:colon : 18 19 20 21 22 23 24 25 26 27 28 29 37 48 + yacc.py:3405:comma : 33 34 35 39 129 + yacc.py:3405:cpar : 25 26 27 28 29 77 79 80 123 124 125 + yacc.py:3405:div : 64 69 + yacc.py:3405:dot : 72 74 75 81 + yacc.py:3405:else : 93 94 95 96 97 100 + yacc.py:3405:equal : 53 57 + yacc.py:3405:error : 5 8 9 10 11 11 12 13 17 20 21 22 23 24 26 27 28 29 34 35 40 41 46 47 55 56 57 61 62 68 69 70 71 74 75 78 79 80 85 86 87 89 90 91 92 94 95 96 97 98 98 99 100 101 103 104 105 106 107 111 113 114 115 121 122 124 125 130 + yacc.py:3405:esac : 88 89 90 91 + yacc.py:3405:false : 117 + yacc.py:3405:fi : 93 94 95 96 97 98 99 101 + yacc.py:3405:id : 18 19 21 23 24 25 27 28 29 37 48 49 109 123 124 + yacc.py:3405:if : 93 94 95 96 97 98 99 100 101 + yacc.py:3405:in : 84 85 86 + yacc.py:3405:inherits : 7 10 11 12 13 + yacc.py:3405:isvoid : 65 70 + yacc.py:3405:larrow : 19 22 23 24 42 49 + yacc.py:3405:less : 51 55 + yacc.py:3405:lesseq : 52 56 + yacc.py:3405:let : 84 85 86 87 + yacc.py:3405:loop : 102 103 104 105 106 + yacc.py:3405:minus : 59 62 + yacc.py:3405:new : 110 111 + yacc.py:3405:not : 82 + yacc.py:3405:nox : 66 71 + yacc.py:3405:num : 108 + yacc.py:3405:ocur : 6 7 8 9 10 11 12 13 25 26 27 28 29 112 114 115 + yacc.py:3405:of : 88 89 90 92 + yacc.py:3405:opar : 25 26 27 28 29 77 78 80 123 124 125 + yacc.py:3405:plus : 58 61 + yacc.py:3405:pool : 102 103 104 106 107 + yacc.py:3405:rarrow : 48 + yacc.py:3405:semi : 6 7 8 10 11 12 15 16 44 45 47 119 120 122 + yacc.py:3405:star : 63 68 + yacc.py:3405:string : 118 + yacc.py:3405:then : 93 94 95 96 98 99 100 + yacc.py:3405:true : 116 + yacc.py:3405:type : 6 7 7 9 10 12 13 13 18 19 20 22 24 25 26 27 29 37 48 72 74 110 + yacc.py:3405:while : 102 103 104 105 106 107 yacc.py:3407: yacc.py:3408:Nonterminals, with rules where they appear yacc.py:3409: - yacc.py:3413:arg_list : 97 100 101 - yacc.py:3413:arg_list_empty : 98 - yacc.py:3413:args : 94 96 - yacc.py:3413:arith : 49 - yacc.py:3413:atom : 78 - yacc.py:3413:base_call : 69 70 71 72 73 - yacc.py:3413:block : 86 91 92 - yacc.py:3413:casep : 55 56 - yacc.py:3413:cases_list : 38 39 56 57 + yacc.py:3413:arg_list : 126 129 130 + yacc.py:3413:arg_list_empty : 127 + yacc.py:3413:args : 123 125 + yacc.py:3413:atom : 76 + yacc.py:3413:base_call : 63 64 65 66 67 + yacc.py:3413:block : 112 113 115 120 121 + yacc.py:3413:casep : 44 45 + yacc.py:3413:cases_list : 45 46 88 89 91 92 yacc.py:3413:class_list : 1 3 5 - yacc.py:3413:comp : 60 61 62 63 64 - yacc.py:3413:def_attr : 13 + yacc.py:3413:comp : 50 51 52 53 55 56 57 + yacc.py:3413:def_attr : 15 yacc.py:3413:def_class : 3 4 - yacc.py:3413:def_func : 14 - yacc.py:3413:epsilon : 12 33 102 - yacc.py:3413:expr : 17 20 21 23 24 25 26 35 36 38 40 41 41 41 42 42 43 43 44 44 45 45 46 47 48 48 53 58 59 79 90 91 99 100 - yacc.py:3413:factor : 74 75 77 80 - yacc.py:3413:feature_list : 6 7 8 9 10 11 13 14 15 - yacc.py:3413:formals : 23 24 26 27 - yacc.py:3413:func_call : 74 76 77 80 81 - yacc.py:3413:let_assign : 50 51 - yacc.py:3413:let_list : 35 37 51 52 - yacc.py:3413:op : 62 63 64 65 66 67 - yacc.py:3413:param : 30 31 53 54 - yacc.py:3413:param_list : 28 31 32 - yacc.py:3413:param_list_empty : 29 + yacc.py:3413:def_func : 16 + yacc.py:3413:epsilon : 14 36 131 + yacc.py:3413:expr : 19 22 23 25 26 27 28 42 48 49 77 78 79 82 84 85 87 88 90 91 92 93 93 93 94 94 95 95 96 96 97 97 97 98 98 98 99 99 99 100 100 100 102 102 103 104 105 105 106 106 106 107 107 119 120 128 129 + yacc.py:3413:factor : 72 73 75 81 + yacc.py:3413:feature_list : 6 7 8 9 10 11 12 13 15 16 17 + yacc.py:3413:formals : 25 26 28 29 + yacc.py:3413:func_call : 72 74 75 81 83 + yacc.py:3413:let_assign : 38 39 + yacc.py:3413:let_list : 39 40 84 86 87 + yacc.py:3413:op : 51 52 53 54 58 59 61 62 + yacc.py:3413:param : 32 33 35 42 43 + yacc.py:3413:param_list : 30 33 34 + yacc.py:3413:param_list_empty : 31 yacc.py:3413:program : 0 - yacc.py:3413:term : 66 67 68 69 70 + yacc.py:3413:term : 58 59 60 63 64 68 69 yacc.py:3414: yacc.py:3436:Generating LALR tables yacc.py:2543:Parsing method: LALR @@ -196,9 +225,11 @@ yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi - yacc.py:2565: (9) def_class -> . class error inherits type ocur feature_list ccur semi - yacc.py:2565: (10) def_class -> . class error inherits error ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> . class type inherits error ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error + yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi + yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error yacc.py:2566: yacc.py:2687: error shift and go to state 4 yacc.py:2687: class shift and go to state 5 @@ -230,9 +261,11 @@ yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi - yacc.py:2565: (9) def_class -> . class error inherits type ocur feature_list ccur semi - yacc.py:2565: (10) def_class -> . class error inherits error ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> . class type inherits error ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error + yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi + yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error yacc.py:2566: yacc.py:2687: $end reduce using rule 4 (class_list -> def_class .) yacc.py:2687: error shift and go to state 4 @@ -250,9 +283,11 @@ yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi - yacc.py:2565: (9) def_class -> . class error inherits type ocur feature_list ccur semi - yacc.py:2565: (10) def_class -> . class error inherits error ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> . class type inherits error ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error + yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi + yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error yacc.py:2566: yacc.py:2687: error shift and go to state 4 yacc.py:2687: class shift and go to state 5 @@ -265,9 +300,11 @@ yacc.py:2565: (6) def_class -> class . type ocur feature_list ccur semi yacc.py:2565: (7) def_class -> class . type inherits type ocur feature_list ccur semi yacc.py:2565: (8) def_class -> class . error ocur feature_list ccur semi - yacc.py:2565: (9) def_class -> class . error inherits type ocur feature_list ccur semi - yacc.py:2565: (10) def_class -> class . error inherits error ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> class . type inherits error ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> class . type ocur feature_list ccur error + yacc.py:2565: (10) def_class -> class . error inherits type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> class . error inherits error ocur feature_list ccur semi + yacc.py:2565: (12) def_class -> class . type inherits error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> class . type inherits type ocur feature_list ccur error yacc.py:2566: yacc.py:2687: type shift and go to state 8 yacc.py:2687: error shift and go to state 9 @@ -291,7 +328,9 @@ yacc.py:2563: yacc.py:2565: (6) def_class -> class type . ocur feature_list ccur semi yacc.py:2565: (7) def_class -> class type . inherits type ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> class type . inherits error ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> class type . ocur feature_list ccur error + yacc.py:2565: (12) def_class -> class type . inherits error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> class type . inherits type ocur feature_list ccur error yacc.py:2566: yacc.py:2687: ocur shift and go to state 10 yacc.py:2687: inherits shift and go to state 11 @@ -300,8 +339,8 @@ yacc.py:2562:state 9 yacc.py:2563: yacc.py:2565: (8) def_class -> class error . ocur feature_list ccur semi - yacc.py:2565: (9) def_class -> class error . inherits type ocur feature_list ccur semi - yacc.py:2565: (10) def_class -> class error . inherits error ocur feature_list ccur semi + yacc.py:2565: (10) def_class -> class error . inherits type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> class error . inherits error ocur feature_list ccur semi yacc.py:2566: yacc.py:2687: ocur shift and go to state 12 yacc.py:2687: inherits shift and go to state 13 @@ -310,37 +349,39 @@ yacc.py:2562:state 10 yacc.py:2563: yacc.py:2565: (6) def_class -> class type ocur . feature_list ccur semi - yacc.py:2565: (12) feature_list -> . epsilon - yacc.py:2565: (13) feature_list -> . def_attr semi feature_list - yacc.py:2565: (14) feature_list -> . def_func semi feature_list - yacc.py:2565: (15) feature_list -> . error feature_list + yacc.py:2565: (9) def_class -> class type ocur . feature_list ccur error + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (16) def_attr -> . id colon type - yacc.py:2565: (17) def_attr -> . id colon type larrow expr - yacc.py:2565: (18) def_attr -> . error colon type - yacc.py:2565: (19) def_attr -> . id colon error - yacc.py:2565: (20) def_attr -> . error colon type larrow expr - yacc.py:2565: (21) def_attr -> . id colon error larrow expr - yacc.py:2565: (22) def_attr -> . id colon type larrow error - yacc.py:2565: (23) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (24) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (25) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 18 + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) yacc.py:2687: id shift and go to state 19 yacc.py:2689: yacc.py:2714: feature_list shift and go to state 14 - yacc.py:2714: epsilon shift and go to state 15 - yacc.py:2714: def_attr shift and go to state 16 - yacc.py:2714: def_func shift and go to state 17 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 yacc.py:2561: yacc.py:2562:state 11 yacc.py:2563: yacc.py:2565: (7) def_class -> class type inherits . type ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> class type inherits . error ocur feature_list ccur semi + yacc.py:2565: (12) def_class -> class type inherits . error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> class type inherits . type ocur feature_list ccur error yacc.py:2566: yacc.py:2687: type shift and go to state 20 yacc.py:2687: error shift and go to state 21 @@ -349,37 +390,37 @@ yacc.py:2562:state 12 yacc.py:2563: yacc.py:2565: (8) def_class -> class error ocur . feature_list ccur semi - yacc.py:2565: (12) feature_list -> . epsilon - yacc.py:2565: (13) feature_list -> . def_attr semi feature_list - yacc.py:2565: (14) feature_list -> . def_func semi feature_list - yacc.py:2565: (15) feature_list -> . error feature_list + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (16) def_attr -> . id colon type - yacc.py:2565: (17) def_attr -> . id colon type larrow expr - yacc.py:2565: (18) def_attr -> . error colon type - yacc.py:2565: (19) def_attr -> . id colon error - yacc.py:2565: (20) def_attr -> . error colon type larrow expr - yacc.py:2565: (21) def_attr -> . id colon error larrow expr - yacc.py:2565: (22) def_attr -> . id colon type larrow error - yacc.py:2565: (23) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (24) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (25) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 18 + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) yacc.py:2687: id shift and go to state 19 yacc.py:2689: yacc.py:2714: feature_list shift and go to state 22 - yacc.py:2714: epsilon shift and go to state 15 - yacc.py:2714: def_attr shift and go to state 16 - yacc.py:2714: def_func shift and go to state 17 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 yacc.py:2561: yacc.py:2562:state 13 yacc.py:2563: - yacc.py:2565: (9) def_class -> class error inherits . type ocur feature_list ccur semi - yacc.py:2565: (10) def_class -> class error inherits . error ocur feature_list ccur semi + yacc.py:2565: (10) def_class -> class error inherits . type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> class error inherits . error ocur feature_list ccur semi yacc.py:2566: yacc.py:2687: type shift and go to state 24 yacc.py:2687: error shift and go to state 23 @@ -388,77 +429,78 @@ yacc.py:2562:state 14 yacc.py:2563: yacc.py:2565: (6) def_class -> class type ocur feature_list . ccur semi + yacc.py:2565: (9) def_class -> class type ocur feature_list . ccur error yacc.py:2566: yacc.py:2687: ccur shift and go to state 25 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 15 yacc.py:2563: - yacc.py:2565: (12) feature_list -> epsilon . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 12 (feature_list -> epsilon .) + yacc.py:2565: (17) feature_list -> error . feature_list + yacc.py:2565: (20) def_attr -> error . colon type + yacc.py:2565: (22) def_attr -> error . colon type larrow expr + yacc.py:2565: (26) def_func -> error . opar formals cpar colon type ocur expr ccur + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: colon shift and go to state 27 + yacc.py:2687: opar shift and go to state 28 + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 26 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 yacc.py:2561: yacc.py:2562:state 16 yacc.py:2563: - yacc.py:2565: (13) feature_list -> def_attr . semi feature_list + yacc.py:2565: (14) feature_list -> epsilon . yacc.py:2566: - yacc.py:2687: semi shift and go to state 26 + yacc.py:2687: ccur reduce using rule 14 (feature_list -> epsilon .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 17 yacc.py:2563: - yacc.py:2565: (14) feature_list -> def_func . semi feature_list + yacc.py:2565: (15) feature_list -> def_attr . semi feature_list yacc.py:2566: - yacc.py:2687: semi shift and go to state 27 + yacc.py:2687: semi shift and go to state 29 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 18 yacc.py:2563: - yacc.py:2565: (15) feature_list -> error . feature_list - yacc.py:2565: (18) def_attr -> error . colon type - yacc.py:2565: (20) def_attr -> error . colon type larrow expr - yacc.py:2565: (24) def_func -> error . opar formals cpar colon type ocur expr ccur - yacc.py:2565: (12) feature_list -> . epsilon - yacc.py:2565: (13) feature_list -> . def_attr semi feature_list - yacc.py:2565: (14) feature_list -> . def_func semi feature_list - yacc.py:2565: (15) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (16) def_attr -> . id colon type - yacc.py:2565: (17) def_attr -> . id colon type larrow expr - yacc.py:2565: (18) def_attr -> . error colon type - yacc.py:2565: (19) def_attr -> . id colon error - yacc.py:2565: (20) def_attr -> . error colon type larrow expr - yacc.py:2565: (21) def_attr -> . id colon error larrow expr - yacc.py:2565: (22) def_attr -> . id colon type larrow error - yacc.py:2565: (23) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (24) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (25) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: colon shift and go to state 29 - yacc.py:2687: opar shift and go to state 30 - yacc.py:2687: error shift and go to state 18 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 + yacc.py:2565: (16) feature_list -> def_func . semi feature_list + yacc.py:2566: + yacc.py:2687: semi shift and go to state 30 yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 28 - yacc.py:2714: epsilon shift and go to state 15 - yacc.py:2714: def_attr shift and go to state 16 - yacc.py:2714: def_func shift and go to state 17 yacc.py:2561: yacc.py:2562:state 19 yacc.py:2563: - yacc.py:2565: (16) def_attr -> id . colon type - yacc.py:2565: (17) def_attr -> id . colon type larrow expr - yacc.py:2565: (19) def_attr -> id . colon error - yacc.py:2565: (21) def_attr -> id . colon error larrow expr - yacc.py:2565: (22) def_attr -> id . colon type larrow error - yacc.py:2565: (23) def_func -> id . opar formals cpar colon type ocur expr ccur - yacc.py:2565: (25) def_func -> id . opar error cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> id . opar formals cpar colon error ocur expr ccur - yacc.py:2565: (27) def_func -> id . opar formals cpar colon type ocur error ccur + yacc.py:2565: (18) def_attr -> id . colon type + yacc.py:2565: (19) def_attr -> id . colon type larrow expr + yacc.py:2565: (21) def_attr -> id . colon error + yacc.py:2565: (23) def_attr -> id . colon error larrow expr + yacc.py:2565: (24) def_attr -> id . colon type larrow error + yacc.py:2565: (25) def_func -> id . opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> id . opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> id . opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> id . opar formals cpar colon type ocur error ccur yacc.py:2566: yacc.py:2687: colon shift and go to state 31 yacc.py:2687: opar shift and go to state 32 @@ -467,13 +509,14 @@ yacc.py:2562:state 20 yacc.py:2563: yacc.py:2565: (7) def_class -> class type inherits type . ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> class type inherits type . ocur feature_list ccur error yacc.py:2566: yacc.py:2687: ocur shift and go to state 33 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 21 yacc.py:2563: - yacc.py:2565: (11) def_class -> class type inherits error . ocur feature_list ccur semi + yacc.py:2565: (12) def_class -> class type inherits error . ocur feature_list ccur semi yacc.py:2566: yacc.py:2687: ocur shift and go to state 34 yacc.py:2689: @@ -487,14 +530,14 @@ yacc.py:2561: yacc.py:2562:state 23 yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits error . ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> class error inherits error . ocur feature_list ccur semi yacc.py:2566: yacc.py:2687: ocur shift and go to state 36 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 24 yacc.py:2563: - yacc.py:2565: (9) def_class -> class error inherits type . ocur feature_list ccur semi + yacc.py:2565: (10) def_class -> class error inherits type . ocur feature_list ccur semi yacc.py:2566: yacc.py:2687: ocur shift and go to state 37 yacc.py:2689: @@ -502,270 +545,275 @@ yacc.py:2562:state 25 yacc.py:2563: yacc.py:2565: (6) def_class -> class type ocur feature_list ccur . semi + yacc.py:2565: (9) def_class -> class type ocur feature_list ccur . error yacc.py:2566: yacc.py:2687: semi shift and go to state 38 + yacc.py:2687: error shift and go to state 39 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 26 yacc.py:2563: - yacc.py:2565: (13) feature_list -> def_attr semi . feature_list - yacc.py:2565: (12) feature_list -> . epsilon - yacc.py:2565: (13) feature_list -> . def_attr semi feature_list - yacc.py:2565: (14) feature_list -> . def_func semi feature_list - yacc.py:2565: (15) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (16) def_attr -> . id colon type - yacc.py:2565: (17) def_attr -> . id colon type larrow expr - yacc.py:2565: (18) def_attr -> . error colon type - yacc.py:2565: (19) def_attr -> . id colon error - yacc.py:2565: (20) def_attr -> . error colon type larrow expr - yacc.py:2565: (21) def_attr -> . id colon error larrow expr - yacc.py:2565: (22) def_attr -> . id colon type larrow error - yacc.py:2565: (23) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (24) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (25) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 18 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 + yacc.py:2565: (17) feature_list -> error feature_list . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 17 (feature_list -> error feature_list .) yacc.py:2689: - yacc.py:2714: def_attr shift and go to state 16 - yacc.py:2714: feature_list shift and go to state 39 - yacc.py:2714: epsilon shift and go to state 15 - yacc.py:2714: def_func shift and go to state 17 yacc.py:2561: yacc.py:2562:state 27 yacc.py:2563: - yacc.py:2565: (14) feature_list -> def_func semi . feature_list - yacc.py:2565: (12) feature_list -> . epsilon - yacc.py:2565: (13) feature_list -> . def_attr semi feature_list - yacc.py:2565: (14) feature_list -> . def_func semi feature_list - yacc.py:2565: (15) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (16) def_attr -> . id colon type - yacc.py:2565: (17) def_attr -> . id colon type larrow expr - yacc.py:2565: (18) def_attr -> . error colon type - yacc.py:2565: (19) def_attr -> . id colon error - yacc.py:2565: (20) def_attr -> . error colon type larrow expr - yacc.py:2565: (21) def_attr -> . id colon error larrow expr - yacc.py:2565: (22) def_attr -> . id colon type larrow error - yacc.py:2565: (23) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (24) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (25) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 18 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 + yacc.py:2565: (20) def_attr -> error colon . type + yacc.py:2565: (22) def_attr -> error colon . type larrow expr + yacc.py:2566: + yacc.py:2687: type shift and go to state 40 yacc.py:2689: - yacc.py:2714: def_func shift and go to state 17 - yacc.py:2714: feature_list shift and go to state 40 - yacc.py:2714: epsilon shift and go to state 15 - yacc.py:2714: def_attr shift and go to state 16 yacc.py:2561: yacc.py:2562:state 28 yacc.py:2563: - yacc.py:2565: (15) feature_list -> error feature_list . + yacc.py:2565: (26) def_func -> error opar . formals cpar colon type ocur expr ccur + yacc.py:2565: (30) formals -> . param_list + yacc.py:2565: (31) formals -> . param_list_empty + yacc.py:2565: (32) param_list -> . param + yacc.py:2565: (33) param_list -> . param comma param_list + yacc.py:2565: (34) param_list -> . error comma param_list + yacc.py:2565: (35) param_list -> . param comma error + yacc.py:2565: (36) param_list_empty -> . epsilon + yacc.py:2565: (37) param -> . id colon type + yacc.py:2565: (2) epsilon -> . yacc.py:2566: - yacc.py:2687: ccur reduce using rule 15 (feature_list -> error feature_list .) + yacc.py:2687: error shift and go to state 41 + yacc.py:2687: id shift and go to state 47 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) yacc.py:2689: + yacc.py:2714: formals shift and go to state 42 + yacc.py:2714: param_list shift and go to state 43 + yacc.py:2714: param_list_empty shift and go to state 44 + yacc.py:2714: param shift and go to state 45 + yacc.py:2714: epsilon shift and go to state 46 yacc.py:2561: yacc.py:2562:state 29 yacc.py:2563: - yacc.py:2565: (18) def_attr -> error colon . type - yacc.py:2565: (20) def_attr -> error colon . type larrow expr - yacc.py:2566: - yacc.py:2687: type shift and go to state 41 + yacc.py:2565: (15) feature_list -> def_attr semi . feature_list + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 yacc.py:2689: + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: feature_list shift and go to state 48 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_func shift and go to state 18 yacc.py:2561: yacc.py:2562:state 30 yacc.py:2563: - yacc.py:2565: (24) def_func -> error opar . formals cpar colon type ocur expr ccur - yacc.py:2565: (28) formals -> . param_list - yacc.py:2565: (29) formals -> . param_list_empty - yacc.py:2565: (30) param_list -> . param - yacc.py:2565: (31) param_list -> . param comma param_list - yacc.py:2565: (32) param_list -> . error param_list - yacc.py:2565: (33) param_list_empty -> . epsilon - yacc.py:2565: (34) param -> . id colon type + yacc.py:2565: (16) feature_list -> def_func semi . feature_list + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list yacc.py:2565: (2) epsilon -> . - yacc.py:2566: - yacc.py:2687: error shift and go to state 42 - yacc.py:2687: id shift and go to state 48 - yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 yacc.py:2689: - yacc.py:2714: formals shift and go to state 43 - yacc.py:2714: param_list shift and go to state 44 - yacc.py:2714: param_list_empty shift and go to state 45 - yacc.py:2714: param shift and go to state 46 - yacc.py:2714: epsilon shift and go to state 47 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2714: feature_list shift and go to state 49 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 yacc.py:2561: yacc.py:2562:state 31 yacc.py:2563: - yacc.py:2565: (16) def_attr -> id colon . type - yacc.py:2565: (17) def_attr -> id colon . type larrow expr - yacc.py:2565: (19) def_attr -> id colon . error - yacc.py:2565: (21) def_attr -> id colon . error larrow expr - yacc.py:2565: (22) def_attr -> id colon . type larrow error + yacc.py:2565: (18) def_attr -> id colon . type + yacc.py:2565: (19) def_attr -> id colon . type larrow expr + yacc.py:2565: (21) def_attr -> id colon . error + yacc.py:2565: (23) def_attr -> id colon . error larrow expr + yacc.py:2565: (24) def_attr -> id colon . type larrow error yacc.py:2566: - yacc.py:2687: type shift and go to state 49 - yacc.py:2687: error shift and go to state 50 + yacc.py:2687: type shift and go to state 50 + yacc.py:2687: error shift and go to state 51 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 32 yacc.py:2563: - yacc.py:2565: (23) def_func -> id opar . formals cpar colon type ocur expr ccur - yacc.py:2565: (25) def_func -> id opar . error cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> id opar . formals cpar colon error ocur expr ccur - yacc.py:2565: (27) def_func -> id opar . formals cpar colon type ocur error ccur - yacc.py:2565: (28) formals -> . param_list - yacc.py:2565: (29) formals -> . param_list_empty - yacc.py:2565: (30) param_list -> . param - yacc.py:2565: (31) param_list -> . param comma param_list - yacc.py:2565: (32) param_list -> . error param_list - yacc.py:2565: (33) param_list_empty -> . epsilon - yacc.py:2565: (34) param -> . id colon type + yacc.py:2565: (25) def_func -> id opar . formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> id opar . error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> id opar . formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> id opar . formals cpar colon type ocur error ccur + yacc.py:2565: (30) formals -> . param_list + yacc.py:2565: (31) formals -> . param_list_empty + yacc.py:2565: (32) param_list -> . param + yacc.py:2565: (33) param_list -> . param comma param_list + yacc.py:2565: (34) param_list -> . error comma param_list + yacc.py:2565: (35) param_list -> . param comma error + yacc.py:2565: (36) param_list_empty -> . epsilon + yacc.py:2565: (37) param -> . id colon type yacc.py:2565: (2) epsilon -> . yacc.py:2566: - yacc.py:2687: error shift and go to state 52 - yacc.py:2687: id shift and go to state 48 + yacc.py:2687: error shift and go to state 53 + yacc.py:2687: id shift and go to state 47 yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) yacc.py:2689: - yacc.py:2714: formals shift and go to state 51 - yacc.py:2714: param_list shift and go to state 44 - yacc.py:2714: param_list_empty shift and go to state 45 - yacc.py:2714: param shift and go to state 46 - yacc.py:2714: epsilon shift and go to state 47 + yacc.py:2714: formals shift and go to state 52 + yacc.py:2714: param_list shift and go to state 43 + yacc.py:2714: param_list_empty shift and go to state 44 + yacc.py:2714: param shift and go to state 45 + yacc.py:2714: epsilon shift and go to state 46 yacc.py:2561: yacc.py:2562:state 33 yacc.py:2563: yacc.py:2565: (7) def_class -> class type inherits type ocur . feature_list ccur semi - yacc.py:2565: (12) feature_list -> . epsilon - yacc.py:2565: (13) feature_list -> . def_attr semi feature_list - yacc.py:2565: (14) feature_list -> . def_func semi feature_list - yacc.py:2565: (15) feature_list -> . error feature_list + yacc.py:2565: (13) def_class -> class type inherits type ocur . feature_list ccur error + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (16) def_attr -> . id colon type - yacc.py:2565: (17) def_attr -> . id colon type larrow expr - yacc.py:2565: (18) def_attr -> . error colon type - yacc.py:2565: (19) def_attr -> . id colon error - yacc.py:2565: (20) def_attr -> . error colon type larrow expr - yacc.py:2565: (21) def_attr -> . id colon error larrow expr - yacc.py:2565: (22) def_attr -> . id colon type larrow error - yacc.py:2565: (23) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (24) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (25) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 18 + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) yacc.py:2687: id shift and go to state 19 yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 53 - yacc.py:2714: epsilon shift and go to state 15 - yacc.py:2714: def_attr shift and go to state 16 - yacc.py:2714: def_func shift and go to state 17 + yacc.py:2714: feature_list shift and go to state 54 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 yacc.py:2561: yacc.py:2562:state 34 yacc.py:2563: - yacc.py:2565: (11) def_class -> class type inherits error ocur . feature_list ccur semi - yacc.py:2565: (12) feature_list -> . epsilon - yacc.py:2565: (13) feature_list -> . def_attr semi feature_list - yacc.py:2565: (14) feature_list -> . def_func semi feature_list - yacc.py:2565: (15) feature_list -> . error feature_list + yacc.py:2565: (12) def_class -> class type inherits error ocur . feature_list ccur semi + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (16) def_attr -> . id colon type - yacc.py:2565: (17) def_attr -> . id colon type larrow expr - yacc.py:2565: (18) def_attr -> . error colon type - yacc.py:2565: (19) def_attr -> . id colon error - yacc.py:2565: (20) def_attr -> . error colon type larrow expr - yacc.py:2565: (21) def_attr -> . id colon error larrow expr - yacc.py:2565: (22) def_attr -> . id colon type larrow error - yacc.py:2565: (23) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (24) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (25) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 18 + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) yacc.py:2687: id shift and go to state 19 yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 54 - yacc.py:2714: epsilon shift and go to state 15 - yacc.py:2714: def_attr shift and go to state 16 - yacc.py:2714: def_func shift and go to state 17 + yacc.py:2714: feature_list shift and go to state 55 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 yacc.py:2561: yacc.py:2562:state 35 yacc.py:2563: yacc.py:2565: (8) def_class -> class error ocur feature_list ccur . semi yacc.py:2566: - yacc.py:2687: semi shift and go to state 55 + yacc.py:2687: semi shift and go to state 56 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 36 yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits error ocur . feature_list ccur semi - yacc.py:2565: (12) feature_list -> . epsilon - yacc.py:2565: (13) feature_list -> . def_attr semi feature_list - yacc.py:2565: (14) feature_list -> . def_func semi feature_list - yacc.py:2565: (15) feature_list -> . error feature_list + yacc.py:2565: (11) def_class -> class error inherits error ocur . feature_list ccur semi + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (16) def_attr -> . id colon type - yacc.py:2565: (17) def_attr -> . id colon type larrow expr - yacc.py:2565: (18) def_attr -> . error colon type - yacc.py:2565: (19) def_attr -> . id colon error - yacc.py:2565: (20) def_attr -> . error colon type larrow expr - yacc.py:2565: (21) def_attr -> . id colon error larrow expr - yacc.py:2565: (22) def_attr -> . id colon type larrow error - yacc.py:2565: (23) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (24) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (25) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 18 + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) yacc.py:2687: id shift and go to state 19 yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 56 - yacc.py:2714: epsilon shift and go to state 15 - yacc.py:2714: def_attr shift and go to state 16 - yacc.py:2714: def_func shift and go to state 17 + yacc.py:2714: feature_list shift and go to state 57 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 yacc.py:2561: yacc.py:2562:state 37 yacc.py:2563: - yacc.py:2565: (9) def_class -> class error inherits type ocur . feature_list ccur semi - yacc.py:2565: (12) feature_list -> . epsilon - yacc.py:2565: (13) feature_list -> . def_attr semi feature_list - yacc.py:2565: (14) feature_list -> . def_func semi feature_list - yacc.py:2565: (15) feature_list -> . error feature_list + yacc.py:2565: (10) def_class -> class error inherits type ocur . feature_list ccur semi + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (16) def_attr -> . id colon type - yacc.py:2565: (17) def_attr -> . id colon type larrow expr - yacc.py:2565: (18) def_attr -> . error colon type - yacc.py:2565: (19) def_attr -> . id colon error - yacc.py:2565: (20) def_attr -> . error colon type larrow expr - yacc.py:2565: (21) def_attr -> . id colon error larrow expr - yacc.py:2565: (22) def_attr -> . id colon type larrow error - yacc.py:2565: (23) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (24) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (25) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 18 + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) yacc.py:2687: id shift and go to state 19 yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 57 - yacc.py:2714: epsilon shift and go to state 15 - yacc.py:2714: def_attr shift and go to state 16 - yacc.py:2714: def_func shift and go to state 17 + yacc.py:2714: feature_list shift and go to state 58 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 yacc.py:2561: yacc.py:2562:state 38 yacc.py:2563: @@ -778,229 +826,250 @@ yacc.py:2561: yacc.py:2562:state 39 yacc.py:2563: - yacc.py:2565: (13) feature_list -> def_attr semi feature_list . + yacc.py:2565: (9) def_class -> class type ocur feature_list ccur error . yacc.py:2566: - yacc.py:2687: ccur reduce using rule 13 (feature_list -> def_attr semi feature_list .) + yacc.py:2687: error reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) + yacc.py:2687: class reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) + yacc.py:2687: $end reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 40 yacc.py:2563: - yacc.py:2565: (14) feature_list -> def_func semi feature_list . + yacc.py:2565: (20) def_attr -> error colon type . + yacc.py:2565: (22) def_attr -> error colon type . larrow expr yacc.py:2566: - yacc.py:2687: ccur reduce using rule 14 (feature_list -> def_func semi feature_list .) + yacc.py:2687: semi reduce using rule 20 (def_attr -> error colon type .) + yacc.py:2687: larrow shift and go to state 59 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 41 yacc.py:2563: - yacc.py:2565: (18) def_attr -> error colon type . - yacc.py:2565: (20) def_attr -> error colon type . larrow expr + yacc.py:2565: (34) param_list -> error . comma param_list yacc.py:2566: - yacc.py:2687: semi reduce using rule 18 (def_attr -> error colon type .) - yacc.py:2687: larrow shift and go to state 58 + yacc.py:2687: comma shift and go to state 60 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 42 yacc.py:2563: - yacc.py:2565: (32) param_list -> error . param_list - yacc.py:2565: (30) param_list -> . param - yacc.py:2565: (31) param_list -> . param comma param_list - yacc.py:2565: (32) param_list -> . error param_list - yacc.py:2565: (34) param -> . id colon type + yacc.py:2565: (26) def_func -> error opar formals . cpar colon type ocur expr ccur yacc.py:2566: - yacc.py:2687: error shift and go to state 42 - yacc.py:2687: id shift and go to state 48 + yacc.py:2687: cpar shift and go to state 61 yacc.py:2689: - yacc.py:2714: param_list shift and go to state 59 - yacc.py:2714: param shift and go to state 46 yacc.py:2561: yacc.py:2562:state 43 yacc.py:2563: - yacc.py:2565: (24) def_func -> error opar formals . cpar colon type ocur expr ccur + yacc.py:2565: (30) formals -> param_list . yacc.py:2566: - yacc.py:2687: cpar shift and go to state 60 + yacc.py:2687: cpar reduce using rule 30 (formals -> param_list .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 44 yacc.py:2563: - yacc.py:2565: (28) formals -> param_list . + yacc.py:2565: (31) formals -> param_list_empty . yacc.py:2566: - yacc.py:2687: cpar reduce using rule 28 (formals -> param_list .) + yacc.py:2687: cpar reduce using rule 31 (formals -> param_list_empty .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 45 yacc.py:2563: - yacc.py:2565: (29) formals -> param_list_empty . + yacc.py:2565: (32) param_list -> param . + yacc.py:2565: (33) param_list -> param . comma param_list + yacc.py:2565: (35) param_list -> param . comma error yacc.py:2566: - yacc.py:2687: cpar reduce using rule 29 (formals -> param_list_empty .) + yacc.py:2687: cpar reduce using rule 32 (param_list -> param .) + yacc.py:2687: comma shift and go to state 62 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 46 yacc.py:2563: - yacc.py:2565: (30) param_list -> param . - yacc.py:2565: (31) param_list -> param . comma param_list + yacc.py:2565: (36) param_list_empty -> epsilon . yacc.py:2566: - yacc.py:2687: cpar reduce using rule 30 (param_list -> param .) - yacc.py:2687: comma shift and go to state 61 + yacc.py:2687: cpar reduce using rule 36 (param_list_empty -> epsilon .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 47 yacc.py:2563: - yacc.py:2565: (33) param_list_empty -> epsilon . + yacc.py:2565: (37) param -> id . colon type yacc.py:2566: - yacc.py:2687: cpar reduce using rule 33 (param_list_empty -> epsilon .) + yacc.py:2687: colon shift and go to state 63 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 48 yacc.py:2563: - yacc.py:2565: (34) param -> id . colon type + yacc.py:2565: (15) feature_list -> def_attr semi feature_list . yacc.py:2566: - yacc.py:2687: colon shift and go to state 62 + yacc.py:2687: ccur reduce using rule 15 (feature_list -> def_attr semi feature_list .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 49 yacc.py:2563: - yacc.py:2565: (16) def_attr -> id colon type . - yacc.py:2565: (17) def_attr -> id colon type . larrow expr - yacc.py:2565: (22) def_attr -> id colon type . larrow error + yacc.py:2565: (16) feature_list -> def_func semi feature_list . yacc.py:2566: - yacc.py:2687: semi reduce using rule 16 (def_attr -> id colon type .) - yacc.py:2687: larrow shift and go to state 63 + yacc.py:2687: ccur reduce using rule 16 (feature_list -> def_func semi feature_list .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 50 yacc.py:2563: - yacc.py:2565: (19) def_attr -> id colon error . - yacc.py:2565: (21) def_attr -> id colon error . larrow expr + yacc.py:2565: (18) def_attr -> id colon type . + yacc.py:2565: (19) def_attr -> id colon type . larrow expr + yacc.py:2565: (24) def_attr -> id colon type . larrow error yacc.py:2566: - yacc.py:2687: semi reduce using rule 19 (def_attr -> id colon error .) + yacc.py:2687: semi reduce using rule 18 (def_attr -> id colon type .) yacc.py:2687: larrow shift and go to state 64 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 51 yacc.py:2563: - yacc.py:2565: (23) def_func -> id opar formals . cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> id opar formals . cpar colon error ocur expr ccur - yacc.py:2565: (27) def_func -> id opar formals . cpar colon type ocur error ccur + yacc.py:2565: (21) def_attr -> id colon error . + yacc.py:2565: (23) def_attr -> id colon error . larrow expr yacc.py:2566: - yacc.py:2687: cpar shift and go to state 65 + yacc.py:2687: semi reduce using rule 21 (def_attr -> id colon error .) + yacc.py:2687: larrow shift and go to state 65 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 52 yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar error . cpar colon type ocur expr ccur - yacc.py:2565: (32) param_list -> error . param_list - yacc.py:2565: (30) param_list -> . param - yacc.py:2565: (31) param_list -> . param comma param_list - yacc.py:2565: (32) param_list -> . error param_list - yacc.py:2565: (34) param -> . id colon type + yacc.py:2565: (25) def_func -> id opar formals . cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> id opar formals . cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> id opar formals . cpar colon type ocur error ccur yacc.py:2566: yacc.py:2687: cpar shift and go to state 66 - yacc.py:2687: error shift and go to state 42 - yacc.py:2687: id shift and go to state 48 yacc.py:2689: - yacc.py:2714: param_list shift and go to state 59 - yacc.py:2714: param shift and go to state 46 yacc.py:2561: yacc.py:2562:state 53 yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list . ccur semi + yacc.py:2565: (27) def_func -> id opar error . cpar colon type ocur expr ccur + yacc.py:2565: (34) param_list -> error . comma param_list yacc.py:2566: - yacc.py:2687: ccur shift and go to state 67 + yacc.py:2687: cpar shift and go to state 67 + yacc.py:2687: comma shift and go to state 60 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 54 yacc.py:2563: - yacc.py:2565: (11) def_class -> class type inherits error ocur feature_list . ccur semi + yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list . ccur semi + yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list . ccur error yacc.py:2566: yacc.py:2687: ccur shift and go to state 68 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 55 yacc.py:2563: - yacc.py:2565: (8) def_class -> class error ocur feature_list ccur semi . + yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list . ccur semi yacc.py:2566: - yacc.py:2687: error reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + yacc.py:2687: ccur shift and go to state 69 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 56 yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits error ocur feature_list . ccur semi + yacc.py:2565: (8) def_class -> class error ocur feature_list ccur semi . yacc.py:2566: - yacc.py:2687: ccur shift and go to state 69 + yacc.py:2687: error reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 57 yacc.py:2563: - yacc.py:2565: (9) def_class -> class error inherits type ocur feature_list . ccur semi + yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list . ccur semi yacc.py:2566: yacc.py:2687: ccur shift and go to state 70 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 58 yacc.py:2563: - yacc.py:2565: (20) def_attr -> error colon type larrow . expr - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: error shift and go to state 71 - yacc.py:2687: opar shift and go to state 89 + yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list . ccur semi + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 71 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 59 + yacc.py:2563: + yacc.py:2565: (22) def_attr -> error colon type larrow . expr + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: error shift and go to state 72 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 yacc.py:2687: num shift and go to state 90 yacc.py:2687: new shift and go to state 91 yacc.py:2687: ocur shift and go to state 92 @@ -1008,195 +1077,148 @@ yacc.py:2687: false shift and go to state 94 yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: expr shift and go to state 72 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 - yacc.py:2561: - yacc.py:2562:state 59 - yacc.py:2563: - yacc.py:2565: (32) param_list -> error param_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 32 (param_list -> error param_list .) - yacc.py:2689: + yacc.py:2714: expr shift and go to state 73 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 60 yacc.py:2563: - yacc.py:2565: (24) def_func -> error opar formals cpar . colon type ocur expr ccur + yacc.py:2565: (34) param_list -> error comma . param_list + yacc.py:2565: (32) param_list -> . param + yacc.py:2565: (33) param_list -> . param comma param_list + yacc.py:2565: (34) param_list -> . error comma param_list + yacc.py:2565: (35) param_list -> . param comma error + yacc.py:2565: (37) param -> . id colon type yacc.py:2566: - yacc.py:2687: colon shift and go to state 96 + yacc.py:2687: error shift and go to state 41 + yacc.py:2687: id shift and go to state 47 yacc.py:2689: + yacc.py:2714: param_list shift and go to state 96 + yacc.py:2714: param shift and go to state 45 yacc.py:2561: yacc.py:2562:state 61 yacc.py:2563: - yacc.py:2565: (31) param_list -> param comma . param_list - yacc.py:2565: (30) param_list -> . param - yacc.py:2565: (31) param_list -> . param comma param_list - yacc.py:2565: (32) param_list -> . error param_list - yacc.py:2565: (34) param -> . id colon type + yacc.py:2565: (26) def_func -> error opar formals cpar . colon type ocur expr ccur yacc.py:2566: - yacc.py:2687: error shift and go to state 42 - yacc.py:2687: id shift and go to state 48 + yacc.py:2687: colon shift and go to state 97 yacc.py:2689: - yacc.py:2714: param shift and go to state 46 - yacc.py:2714: param_list shift and go to state 97 yacc.py:2561: yacc.py:2562:state 62 yacc.py:2563: - yacc.py:2565: (34) param -> id colon . type + yacc.py:2565: (33) param_list -> param comma . param_list + yacc.py:2565: (35) param_list -> param comma . error + yacc.py:2565: (32) param_list -> . param + yacc.py:2565: (33) param_list -> . param comma param_list + yacc.py:2565: (34) param_list -> . error comma param_list + yacc.py:2565: (35) param_list -> . param comma error + yacc.py:2565: (37) param -> . id colon type yacc.py:2566: - yacc.py:2687: type shift and go to state 98 + yacc.py:2687: error shift and go to state 99 + yacc.py:2687: id shift and go to state 47 yacc.py:2689: + yacc.py:2714: param shift and go to state 45 + yacc.py:2714: param_list shift and go to state 98 yacc.py:2561: yacc.py:2562:state 63 yacc.py:2563: - yacc.py:2565: (17) def_attr -> id colon type larrow . expr - yacc.py:2565: (22) def_attr -> id colon type larrow . error - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 100 - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: opar shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 + yacc.py:2565: (37) param -> id colon . type + yacc.py:2566: + yacc.py:2687: type shift and go to state 100 yacc.py:2689: - yacc.py:2714: expr shift and go to state 99 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 yacc.py:2561: yacc.py:2562:state 64 yacc.py:2563: - yacc.py:2565: (21) def_attr -> id colon error larrow . expr - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: error shift and go to state 71 - yacc.py:2687: opar shift and go to state 89 + yacc.py:2565: (19) def_attr -> id colon type larrow . expr + yacc.py:2565: (24) def_attr -> id colon type larrow . error + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 102 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 yacc.py:2687: num shift and go to state 90 yacc.py:2687: new shift and go to state 91 yacc.py:2687: ocur shift and go to state 92 @@ -1205,771 +1227,1231 @@ yacc.py:2687: string shift and go to state 95 yacc.py:2689: yacc.py:2714: expr shift and go to state 101 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 65 yacc.py:2563: - yacc.py:2565: (23) def_func -> id opar formals cpar . colon type ocur expr ccur - yacc.py:2565: (26) def_func -> id opar formals cpar . colon error ocur expr ccur - yacc.py:2565: (27) def_func -> id opar formals cpar . colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: colon shift and go to state 102 + yacc.py:2565: (23) def_attr -> id colon error larrow . expr + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: error shift and go to state 72 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2714: expr shift and go to state 103 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 66 yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar error cpar . colon type ocur expr ccur + yacc.py:2565: (25) def_func -> id opar formals cpar . colon type ocur expr ccur + yacc.py:2565: (28) def_func -> id opar formals cpar . colon error ocur expr ccur + yacc.py:2565: (29) def_func -> id opar formals cpar . colon type ocur error ccur yacc.py:2566: - yacc.py:2687: colon shift and go to state 103 + yacc.py:2687: colon shift and go to state 104 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 67 yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list ccur . semi + yacc.py:2565: (27) def_func -> id opar error cpar . colon type ocur expr ccur yacc.py:2566: - yacc.py:2687: semi shift and go to state 104 + yacc.py:2687: colon shift and go to state 105 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 68 yacc.py:2563: - yacc.py:2565: (11) def_class -> class type inherits error ocur feature_list ccur . semi + yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list ccur . semi + yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list ccur . error yacc.py:2566: - yacc.py:2687: semi shift and go to state 105 + yacc.py:2687: semi shift and go to state 106 + yacc.py:2687: error shift and go to state 107 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 69 yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits error ocur feature_list ccur . semi + yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list ccur . semi yacc.py:2566: - yacc.py:2687: semi shift and go to state 106 + yacc.py:2687: semi shift and go to state 108 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 70 yacc.py:2563: - yacc.py:2565: (9) def_class -> class error inherits type ocur feature_list ccur . semi + yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list ccur . semi yacc.py:2566: - yacc.py:2687: semi shift and go to state 107 + yacc.py:2687: semi shift and go to state 109 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 71 yacc.py:2563: - yacc.py:2565: (76) base_call -> error . arroba type dot func_call - yacc.py:2565: (96) func_call -> error . opar args cpar + yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list ccur . semi yacc.py:2566: - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 109 + yacc.py:2687: semi shift and go to state 110 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 72 yacc.py:2563: - yacc.py:2565: (20) def_attr -> error colon type larrow expr . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 20 (def_attr -> error colon type larrow expr .) + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: arroba shift and go to state 112 + yacc.py:2687: opar shift and go to state 115 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: error shift and go to state 111 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: expr shift and go to state 113 + yacc.py:2714: block shift and go to state 114 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 73 yacc.py:2563: - yacc.py:2565: (35) expr -> let . let_list in expr - yacc.py:2565: (36) expr -> let . error in expr - yacc.py:2565: (37) expr -> let . let_list in error - yacc.py:2565: (50) let_list -> . let_assign - yacc.py:2565: (51) let_list -> . let_assign comma let_list - yacc.py:2565: (52) let_list -> . error let_list - yacc.py:2565: (53) let_assign -> . param larrow expr - yacc.py:2565: (54) let_assign -> . param - yacc.py:2565: (34) param -> . id colon type + yacc.py:2565: (22) def_attr -> error colon type larrow expr . yacc.py:2566: - yacc.py:2687: error shift and go to state 111 - yacc.py:2687: id shift and go to state 48 + yacc.py:2687: semi reduce using rule 22 (def_attr -> error colon type larrow expr .) yacc.py:2689: - yacc.py:2714: let_list shift and go to state 110 - yacc.py:2714: let_assign shift and go to state 112 - yacc.py:2714: param shift and go to state 113 yacc.py:2561: yacc.py:2562:state 74 yacc.py:2563: - yacc.py:2565: (38) expr -> case . expr of cases_list esac - yacc.py:2565: (39) expr -> case . error of cases_list esac - yacc.py:2565: (40) expr -> case . expr of error esac - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 115 - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: opar shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 + yacc.py:2565: (49) expr -> id . larrow expr + yacc.py:2565: (109) atom -> id . + yacc.py:2565: (123) func_call -> id . opar args cpar + yacc.py:2565: (124) func_call -> id . opar error cpar + yacc.py:2566: + yacc.py:2687: larrow shift and go to state 116 + yacc.py:2687: arroba reduce using rule 109 (atom -> id .) + yacc.py:2687: dot reduce using rule 109 (atom -> id .) + yacc.py:2687: star reduce using rule 109 (atom -> id .) + yacc.py:2687: div reduce using rule 109 (atom -> id .) + yacc.py:2687: plus reduce using rule 109 (atom -> id .) + yacc.py:2687: minus reduce using rule 109 (atom -> id .) + yacc.py:2687: less reduce using rule 109 (atom -> id .) + yacc.py:2687: lesseq reduce using rule 109 (atom -> id .) + yacc.py:2687: equal reduce using rule 109 (atom -> id .) + yacc.py:2687: semi reduce using rule 109 (atom -> id .) + yacc.py:2687: cpar reduce using rule 109 (atom -> id .) + yacc.py:2687: error reduce using rule 109 (atom -> id .) + yacc.py:2687: of reduce using rule 109 (atom -> id .) + yacc.py:2687: then reduce using rule 109 (atom -> id .) + yacc.py:2687: loop reduce using rule 109 (atom -> id .) + yacc.py:2687: comma reduce using rule 109 (atom -> id .) + yacc.py:2687: in reduce using rule 109 (atom -> id .) + yacc.py:2687: else reduce using rule 109 (atom -> id .) + yacc.py:2687: pool reduce using rule 109 (atom -> id .) + yacc.py:2687: ccur reduce using rule 109 (atom -> id .) + yacc.py:2687: fi reduce using rule 109 (atom -> id .) + yacc.py:2687: opar shift and go to state 117 yacc.py:2689: - yacc.py:2714: expr shift and go to state 114 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 yacc.py:2561: yacc.py:2562:state 75 yacc.py:2563: - yacc.py:2565: (41) expr -> if . expr then expr else expr fi - yacc.py:2565: (42) expr -> if . error then expr else expr fi - yacc.py:2565: (43) expr -> if . expr then error else expr fi - yacc.py:2565: (44) expr -> if . expr then expr else error fi - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 117 - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: opar shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 116 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 + yacc.py:2565: (50) expr -> comp . + yacc.py:2565: (51) comp -> comp . less op + yacc.py:2565: (52) comp -> comp . lesseq op + yacc.py:2565: (53) comp -> comp . equal op + yacc.py:2565: (55) comp -> comp . less error + yacc.py:2565: (56) comp -> comp . lesseq error + yacc.py:2565: (57) comp -> comp . equal error + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for less resolved as shift + yacc.py:2666: ! shift/reduce conflict for lesseq resolved as shift + yacc.py:2666: ! shift/reduce conflict for equal resolved as shift + yacc.py:2687: semi reduce using rule 50 (expr -> comp .) + yacc.py:2687: cpar reduce using rule 50 (expr -> comp .) + yacc.py:2687: error reduce using rule 50 (expr -> comp .) + yacc.py:2687: star reduce using rule 50 (expr -> comp .) + yacc.py:2687: div reduce using rule 50 (expr -> comp .) + yacc.py:2687: plus reduce using rule 50 (expr -> comp .) + yacc.py:2687: minus reduce using rule 50 (expr -> comp .) + yacc.py:2687: arroba reduce using rule 50 (expr -> comp .) + yacc.py:2687: dot reduce using rule 50 (expr -> comp .) + yacc.py:2687: of reduce using rule 50 (expr -> comp .) + yacc.py:2687: then reduce using rule 50 (expr -> comp .) + yacc.py:2687: loop reduce using rule 50 (expr -> comp .) + yacc.py:2687: comma reduce using rule 50 (expr -> comp .) + yacc.py:2687: in reduce using rule 50 (expr -> comp .) + yacc.py:2687: else reduce using rule 50 (expr -> comp .) + yacc.py:2687: pool reduce using rule 50 (expr -> comp .) + yacc.py:2687: ccur reduce using rule 50 (expr -> comp .) + yacc.py:2687: fi reduce using rule 50 (expr -> comp .) + yacc.py:2687: less shift and go to state 118 + yacc.py:2687: lesseq shift and go to state 119 + yacc.py:2687: equal shift and go to state 120 + yacc.py:2689: + yacc.py:2696: ! less [ reduce using rule 50 (expr -> comp .) ] + yacc.py:2696: ! lesseq [ reduce using rule 50 (expr -> comp .) ] + yacc.py:2696: ! equal [ reduce using rule 50 (expr -> comp .) ] + yacc.py:2700: yacc.py:2561: yacc.py:2562:state 76 yacc.py:2563: - yacc.py:2565: (45) expr -> while . expr loop expr pool - yacc.py:2565: (46) expr -> while . error loop expr pool - yacc.py:2565: (47) expr -> while . expr loop error pool - yacc.py:2565: (48) expr -> while . expr loop expr error - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 119 - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: opar shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 118 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 + yacc.py:2565: (54) comp -> op . + yacc.py:2565: (58) op -> op . plus term + yacc.py:2565: (59) op -> op . minus term + yacc.py:2565: (61) op -> op . plus error + yacc.py:2565: (62) op -> op . minus error + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for plus resolved as shift + yacc.py:2666: ! shift/reduce conflict for minus resolved as shift + yacc.py:2687: less reduce using rule 54 (comp -> op .) + yacc.py:2687: lesseq reduce using rule 54 (comp -> op .) + yacc.py:2687: equal reduce using rule 54 (comp -> op .) + yacc.py:2687: semi reduce using rule 54 (comp -> op .) + yacc.py:2687: cpar reduce using rule 54 (comp -> op .) + yacc.py:2687: error reduce using rule 54 (comp -> op .) + yacc.py:2687: star reduce using rule 54 (comp -> op .) + yacc.py:2687: div reduce using rule 54 (comp -> op .) + yacc.py:2687: arroba reduce using rule 54 (comp -> op .) + yacc.py:2687: dot reduce using rule 54 (comp -> op .) + yacc.py:2687: of reduce using rule 54 (comp -> op .) + yacc.py:2687: then reduce using rule 54 (comp -> op .) + yacc.py:2687: loop reduce using rule 54 (comp -> op .) + yacc.py:2687: comma reduce using rule 54 (comp -> op .) + yacc.py:2687: in reduce using rule 54 (comp -> op .) + yacc.py:2687: else reduce using rule 54 (comp -> op .) + yacc.py:2687: pool reduce using rule 54 (comp -> op .) + yacc.py:2687: ccur reduce using rule 54 (comp -> op .) + yacc.py:2687: fi reduce using rule 54 (comp -> op .) + yacc.py:2687: plus shift and go to state 121 + yacc.py:2687: minus shift and go to state 122 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 54 (comp -> op .) ] + yacc.py:2696: ! minus [ reduce using rule 54 (comp -> op .) ] + yacc.py:2700: yacc.py:2561: yacc.py:2562:state 77 yacc.py:2563: - yacc.py:2565: (49) expr -> arith . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 49 (expr -> arith .) - yacc.py:2687: of reduce using rule 49 (expr -> arith .) - yacc.py:2687: then reduce using rule 49 (expr -> arith .) - yacc.py:2687: loop reduce using rule 49 (expr -> arith .) - yacc.py:2687: cpar reduce using rule 49 (expr -> arith .) - yacc.py:2687: comma reduce using rule 49 (expr -> arith .) - yacc.py:2687: in reduce using rule 49 (expr -> arith .) - yacc.py:2687: else reduce using rule 49 (expr -> arith .) - yacc.py:2687: pool reduce using rule 49 (expr -> arith .) - yacc.py:2687: error reduce using rule 49 (expr -> arith .) - yacc.py:2687: ccur reduce using rule 49 (expr -> arith .) - yacc.py:2687: fi reduce using rule 49 (expr -> arith .) - yacc.py:2689: + yacc.py:2565: (60) op -> term . + yacc.py:2565: (63) term -> term . star base_call + yacc.py:2565: (64) term -> term . div base_call + yacc.py:2565: (68) term -> term . star error + yacc.py:2565: (69) term -> term . div error + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for star resolved as shift + yacc.py:2666: ! shift/reduce conflict for div resolved as shift + yacc.py:2687: plus reduce using rule 60 (op -> term .) + yacc.py:2687: minus reduce using rule 60 (op -> term .) + yacc.py:2687: less reduce using rule 60 (op -> term .) + yacc.py:2687: lesseq reduce using rule 60 (op -> term .) + yacc.py:2687: equal reduce using rule 60 (op -> term .) + yacc.py:2687: semi reduce using rule 60 (op -> term .) + yacc.py:2687: cpar reduce using rule 60 (op -> term .) + yacc.py:2687: error reduce using rule 60 (op -> term .) + yacc.py:2687: arroba reduce using rule 60 (op -> term .) + yacc.py:2687: dot reduce using rule 60 (op -> term .) + yacc.py:2687: of reduce using rule 60 (op -> term .) + yacc.py:2687: then reduce using rule 60 (op -> term .) + yacc.py:2687: loop reduce using rule 60 (op -> term .) + yacc.py:2687: comma reduce using rule 60 (op -> term .) + yacc.py:2687: in reduce using rule 60 (op -> term .) + yacc.py:2687: else reduce using rule 60 (op -> term .) + yacc.py:2687: pool reduce using rule 60 (op -> term .) + yacc.py:2687: ccur reduce using rule 60 (op -> term .) + yacc.py:2687: fi reduce using rule 60 (op -> term .) + yacc.py:2687: star shift and go to state 123 + yacc.py:2687: div shift and go to state 124 + yacc.py:2689: + yacc.py:2696: ! star [ reduce using rule 60 (op -> term .) ] + yacc.py:2696: ! div [ reduce using rule 60 (op -> term .) ] + yacc.py:2700: yacc.py:2561: yacc.py:2562:state 78 yacc.py:2563: - yacc.py:2565: (59) arith -> id . larrow expr - yacc.py:2565: (83) atom -> id . - yacc.py:2565: (94) func_call -> id . opar args cpar - yacc.py:2565: (95) func_call -> id . opar error cpar - yacc.py:2566: - yacc.py:2687: larrow shift and go to state 120 - yacc.py:2687: arroba reduce using rule 83 (atom -> id .) - yacc.py:2687: dot reduce using rule 83 (atom -> id .) - yacc.py:2687: star reduce using rule 83 (atom -> id .) - yacc.py:2687: div reduce using rule 83 (atom -> id .) - yacc.py:2687: plus reduce using rule 83 (atom -> id .) - yacc.py:2687: minus reduce using rule 83 (atom -> id .) - yacc.py:2687: less reduce using rule 83 (atom -> id .) - yacc.py:2687: lesseq reduce using rule 83 (atom -> id .) - yacc.py:2687: equal reduce using rule 83 (atom -> id .) - yacc.py:2687: semi reduce using rule 83 (atom -> id .) - yacc.py:2687: of reduce using rule 83 (atom -> id .) - yacc.py:2687: then reduce using rule 83 (atom -> id .) - yacc.py:2687: loop reduce using rule 83 (atom -> id .) - yacc.py:2687: cpar reduce using rule 83 (atom -> id .) - yacc.py:2687: comma reduce using rule 83 (atom -> id .) - yacc.py:2687: in reduce using rule 83 (atom -> id .) - yacc.py:2687: else reduce using rule 83 (atom -> id .) - yacc.py:2687: pool reduce using rule 83 (atom -> id .) - yacc.py:2687: error reduce using rule 83 (atom -> id .) - yacc.py:2687: ccur reduce using rule 83 (atom -> id .) - yacc.py:2687: fi reduce using rule 83 (atom -> id .) - yacc.py:2687: opar shift and go to state 121 + yacc.py:2565: (67) term -> base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 67 (term -> base_call .) + yacc.py:2687: div reduce using rule 67 (term -> base_call .) + yacc.py:2687: plus reduce using rule 67 (term -> base_call .) + yacc.py:2687: minus reduce using rule 67 (term -> base_call .) + yacc.py:2687: less reduce using rule 67 (term -> base_call .) + yacc.py:2687: lesseq reduce using rule 67 (term -> base_call .) + yacc.py:2687: equal reduce using rule 67 (term -> base_call .) + yacc.py:2687: semi reduce using rule 67 (term -> base_call .) + yacc.py:2687: cpar reduce using rule 67 (term -> base_call .) + yacc.py:2687: error reduce using rule 67 (term -> base_call .) + yacc.py:2687: arroba reduce using rule 67 (term -> base_call .) + yacc.py:2687: dot reduce using rule 67 (term -> base_call .) + yacc.py:2687: of reduce using rule 67 (term -> base_call .) + yacc.py:2687: then reduce using rule 67 (term -> base_call .) + yacc.py:2687: loop reduce using rule 67 (term -> base_call .) + yacc.py:2687: comma reduce using rule 67 (term -> base_call .) + yacc.py:2687: in reduce using rule 67 (term -> base_call .) + yacc.py:2687: else reduce using rule 67 (term -> base_call .) + yacc.py:2687: pool reduce using rule 67 (term -> base_call .) + yacc.py:2687: ccur reduce using rule 67 (term -> base_call .) + yacc.py:2687: fi reduce using rule 67 (term -> base_call .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 79 yacc.py:2563: - yacc.py:2565: (60) arith -> not . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: error shift and go to state 71 - yacc.py:2687: opar shift and go to state 89 + yacc.py:2565: (65) term -> isvoid . base_call + yacc.py:2565: (70) term -> isvoid . error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 126 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 yacc.py:2687: num shift and go to state 90 - yacc.py:2687: id shift and go to state 123 + yacc.py:2687: id shift and go to state 127 yacc.py:2687: new shift and go to state 91 yacc.py:2687: ocur shift and go to state 92 yacc.py:2687: true shift and go to state 93 yacc.py:2687: false shift and go to state 94 yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: comp shift and go to state 122 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 + yacc.py:2714: base_call shift and go to state 125 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 80 yacc.py:2563: - yacc.py:2565: (61) arith -> comp . - yacc.py:2565: (62) comp -> comp . less op - yacc.py:2565: (63) comp -> comp . lesseq op - yacc.py:2565: (64) comp -> comp . equal op - yacc.py:2566: - yacc.py:2687: semi reduce using rule 61 (arith -> comp .) - yacc.py:2687: of reduce using rule 61 (arith -> comp .) - yacc.py:2687: then reduce using rule 61 (arith -> comp .) - yacc.py:2687: loop reduce using rule 61 (arith -> comp .) - yacc.py:2687: cpar reduce using rule 61 (arith -> comp .) - yacc.py:2687: comma reduce using rule 61 (arith -> comp .) - yacc.py:2687: in reduce using rule 61 (arith -> comp .) - yacc.py:2687: else reduce using rule 61 (arith -> comp .) - yacc.py:2687: pool reduce using rule 61 (arith -> comp .) - yacc.py:2687: error reduce using rule 61 (arith -> comp .) - yacc.py:2687: ccur reduce using rule 61 (arith -> comp .) - yacc.py:2687: fi reduce using rule 61 (arith -> comp .) - yacc.py:2687: less shift and go to state 124 - yacc.py:2687: lesseq shift and go to state 125 - yacc.py:2687: equal shift and go to state 126 + yacc.py:2565: (66) term -> nox . base_call + yacc.py:2565: (71) term -> nox . error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 129 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: id shift and go to state 127 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2714: base_call shift and go to state 128 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 81 yacc.py:2563: - yacc.py:2565: (65) comp -> op . - yacc.py:2565: (66) op -> op . plus term - yacc.py:2565: (67) op -> op . minus term - yacc.py:2566: - yacc.py:2687: less reduce using rule 65 (comp -> op .) - yacc.py:2687: lesseq reduce using rule 65 (comp -> op .) - yacc.py:2687: equal reduce using rule 65 (comp -> op .) - yacc.py:2687: semi reduce using rule 65 (comp -> op .) - yacc.py:2687: of reduce using rule 65 (comp -> op .) - yacc.py:2687: then reduce using rule 65 (comp -> op .) - yacc.py:2687: loop reduce using rule 65 (comp -> op .) - yacc.py:2687: cpar reduce using rule 65 (comp -> op .) - yacc.py:2687: comma reduce using rule 65 (comp -> op .) - yacc.py:2687: in reduce using rule 65 (comp -> op .) - yacc.py:2687: else reduce using rule 65 (comp -> op .) - yacc.py:2687: pool reduce using rule 65 (comp -> op .) - yacc.py:2687: error reduce using rule 65 (comp -> op .) - yacc.py:2687: ccur reduce using rule 65 (comp -> op .) - yacc.py:2687: fi reduce using rule 65 (comp -> op .) - yacc.py:2687: plus shift and go to state 127 - yacc.py:2687: minus shift and go to state 128 - yacc.py:2689: + yacc.py:2565: (72) base_call -> factor . arroba type dot func_call + yacc.py:2565: (73) base_call -> factor . + yacc.py:2565: (75) base_call -> factor . arroba error dot func_call + yacc.py:2565: (81) factor -> factor . dot func_call + yacc.py:2566: + yacc.py:2609: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2666: ! shift/reduce conflict for dot resolved as shift + yacc.py:2687: arroba shift and go to state 130 + yacc.py:2687: star reduce using rule 73 (base_call -> factor .) + yacc.py:2687: div reduce using rule 73 (base_call -> factor .) + yacc.py:2687: plus reduce using rule 73 (base_call -> factor .) + yacc.py:2687: minus reduce using rule 73 (base_call -> factor .) + yacc.py:2687: less reduce using rule 73 (base_call -> factor .) + yacc.py:2687: lesseq reduce using rule 73 (base_call -> factor .) + yacc.py:2687: equal reduce using rule 73 (base_call -> factor .) + yacc.py:2687: semi reduce using rule 73 (base_call -> factor .) + yacc.py:2687: cpar reduce using rule 73 (base_call -> factor .) + yacc.py:2687: error reduce using rule 73 (base_call -> factor .) + yacc.py:2687: of reduce using rule 73 (base_call -> factor .) + yacc.py:2687: then reduce using rule 73 (base_call -> factor .) + yacc.py:2687: loop reduce using rule 73 (base_call -> factor .) + yacc.py:2687: comma reduce using rule 73 (base_call -> factor .) + yacc.py:2687: in reduce using rule 73 (base_call -> factor .) + yacc.py:2687: else reduce using rule 73 (base_call -> factor .) + yacc.py:2687: pool reduce using rule 73 (base_call -> factor .) + yacc.py:2687: ccur reduce using rule 73 (base_call -> factor .) + yacc.py:2687: fi reduce using rule 73 (base_call -> factor .) + yacc.py:2687: dot shift and go to state 131 + yacc.py:2689: + yacc.py:2696: ! arroba [ reduce using rule 73 (base_call -> factor .) ] + yacc.py:2696: ! dot [ reduce using rule 73 (base_call -> factor .) ] + yacc.py:2700: yacc.py:2561: yacc.py:2562:state 82 yacc.py:2563: - yacc.py:2565: (68) op -> term . - yacc.py:2565: (69) term -> term . star base_call - yacc.py:2565: (70) term -> term . div base_call - yacc.py:2566: - yacc.py:2687: plus reduce using rule 68 (op -> term .) - yacc.py:2687: minus reduce using rule 68 (op -> term .) - yacc.py:2687: less reduce using rule 68 (op -> term .) - yacc.py:2687: lesseq reduce using rule 68 (op -> term .) - yacc.py:2687: equal reduce using rule 68 (op -> term .) - yacc.py:2687: semi reduce using rule 68 (op -> term .) - yacc.py:2687: of reduce using rule 68 (op -> term .) - yacc.py:2687: then reduce using rule 68 (op -> term .) - yacc.py:2687: loop reduce using rule 68 (op -> term .) - yacc.py:2687: cpar reduce using rule 68 (op -> term .) - yacc.py:2687: comma reduce using rule 68 (op -> term .) - yacc.py:2687: in reduce using rule 68 (op -> term .) - yacc.py:2687: else reduce using rule 68 (op -> term .) - yacc.py:2687: pool reduce using rule 68 (op -> term .) - yacc.py:2687: error reduce using rule 68 (op -> term .) - yacc.py:2687: ccur reduce using rule 68 (op -> term .) - yacc.py:2687: fi reduce using rule 68 (op -> term .) - yacc.py:2687: star shift and go to state 129 - yacc.py:2687: div shift and go to state 130 + yacc.py:2565: (83) factor -> func_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 83 (factor -> func_call .) + yacc.py:2687: dot reduce using rule 83 (factor -> func_call .) + yacc.py:2687: star reduce using rule 83 (factor -> func_call .) + yacc.py:2687: div reduce using rule 83 (factor -> func_call .) + yacc.py:2687: plus reduce using rule 83 (factor -> func_call .) + yacc.py:2687: minus reduce using rule 83 (factor -> func_call .) + yacc.py:2687: less reduce using rule 83 (factor -> func_call .) + yacc.py:2687: lesseq reduce using rule 83 (factor -> func_call .) + yacc.py:2687: equal reduce using rule 83 (factor -> func_call .) + yacc.py:2687: semi reduce using rule 83 (factor -> func_call .) + yacc.py:2687: cpar reduce using rule 83 (factor -> func_call .) + yacc.py:2687: error reduce using rule 83 (factor -> func_call .) + yacc.py:2687: of reduce using rule 83 (factor -> func_call .) + yacc.py:2687: then reduce using rule 83 (factor -> func_call .) + yacc.py:2687: loop reduce using rule 83 (factor -> func_call .) + yacc.py:2687: comma reduce using rule 83 (factor -> func_call .) + yacc.py:2687: in reduce using rule 83 (factor -> func_call .) + yacc.py:2687: else reduce using rule 83 (factor -> func_call .) + yacc.py:2687: pool reduce using rule 83 (factor -> func_call .) + yacc.py:2687: ccur reduce using rule 83 (factor -> func_call .) + yacc.py:2687: fi reduce using rule 83 (factor -> func_call .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 83 yacc.py:2563: - yacc.py:2565: (73) term -> base_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 73 (term -> base_call .) - yacc.py:2687: div reduce using rule 73 (term -> base_call .) - yacc.py:2687: plus reduce using rule 73 (term -> base_call .) - yacc.py:2687: minus reduce using rule 73 (term -> base_call .) - yacc.py:2687: less reduce using rule 73 (term -> base_call .) - yacc.py:2687: lesseq reduce using rule 73 (term -> base_call .) - yacc.py:2687: equal reduce using rule 73 (term -> base_call .) - yacc.py:2687: semi reduce using rule 73 (term -> base_call .) - yacc.py:2687: of reduce using rule 73 (term -> base_call .) - yacc.py:2687: then reduce using rule 73 (term -> base_call .) - yacc.py:2687: loop reduce using rule 73 (term -> base_call .) - yacc.py:2687: cpar reduce using rule 73 (term -> base_call .) - yacc.py:2687: comma reduce using rule 73 (term -> base_call .) - yacc.py:2687: in reduce using rule 73 (term -> base_call .) - yacc.py:2687: else reduce using rule 73 (term -> base_call .) - yacc.py:2687: pool reduce using rule 73 (term -> base_call .) - yacc.py:2687: error reduce using rule 73 (term -> base_call .) - yacc.py:2687: ccur reduce using rule 73 (term -> base_call .) - yacc.py:2687: fi reduce using rule 73 (term -> base_call .) + yacc.py:2565: (76) factor -> atom . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 76 (factor -> atom .) + yacc.py:2687: dot reduce using rule 76 (factor -> atom .) + yacc.py:2687: star reduce using rule 76 (factor -> atom .) + yacc.py:2687: div reduce using rule 76 (factor -> atom .) + yacc.py:2687: plus reduce using rule 76 (factor -> atom .) + yacc.py:2687: minus reduce using rule 76 (factor -> atom .) + yacc.py:2687: less reduce using rule 76 (factor -> atom .) + yacc.py:2687: lesseq reduce using rule 76 (factor -> atom .) + yacc.py:2687: equal reduce using rule 76 (factor -> atom .) + yacc.py:2687: semi reduce using rule 76 (factor -> atom .) + yacc.py:2687: cpar reduce using rule 76 (factor -> atom .) + yacc.py:2687: error reduce using rule 76 (factor -> atom .) + yacc.py:2687: of reduce using rule 76 (factor -> atom .) + yacc.py:2687: then reduce using rule 76 (factor -> atom .) + yacc.py:2687: loop reduce using rule 76 (factor -> atom .) + yacc.py:2687: comma reduce using rule 76 (factor -> atom .) + yacc.py:2687: in reduce using rule 76 (factor -> atom .) + yacc.py:2687: else reduce using rule 76 (factor -> atom .) + yacc.py:2687: pool reduce using rule 76 (factor -> atom .) + yacc.py:2687: ccur reduce using rule 76 (factor -> atom .) + yacc.py:2687: fi reduce using rule 76 (factor -> atom .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 84 yacc.py:2563: - yacc.py:2565: (71) term -> isvoid . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 71 - yacc.py:2687: opar shift and go to state 89 + yacc.py:2565: (77) factor -> opar . expr cpar + yacc.py:2565: (78) factor -> opar . expr error + yacc.py:2565: (80) factor -> opar . error cpar + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 133 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 yacc.py:2687: num shift and go to state 90 - yacc.py:2687: id shift and go to state 123 yacc.py:2687: new shift and go to state 91 yacc.py:2687: ocur shift and go to state 92 yacc.py:2687: true shift and go to state 93 yacc.py:2687: false shift and go to state 94 yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: base_call shift and go to state 131 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 + yacc.py:2714: expr shift and go to state 132 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 85 yacc.py:2563: - yacc.py:2565: (72) term -> nox . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 71 - yacc.py:2687: opar shift and go to state 89 + yacc.py:2565: (82) factor -> not . expr + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: error shift and go to state 72 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 yacc.py:2687: num shift and go to state 90 - yacc.py:2687: id shift and go to state 123 yacc.py:2687: new shift and go to state 91 yacc.py:2687: ocur shift and go to state 92 yacc.py:2687: true shift and go to state 93 yacc.py:2687: false shift and go to state 94 yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: base_call shift and go to state 132 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 + yacc.py:2714: expr shift and go to state 134 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 86 yacc.py:2563: - yacc.py:2565: (74) base_call -> factor . arroba type dot func_call - yacc.py:2565: (75) base_call -> factor . - yacc.py:2565: (77) base_call -> factor . arroba error dot func_call - yacc.py:2565: (80) factor -> factor . dot func_call - yacc.py:2566: - yacc.py:2687: arroba shift and go to state 133 - yacc.py:2687: star reduce using rule 75 (base_call -> factor .) - yacc.py:2687: div reduce using rule 75 (base_call -> factor .) - yacc.py:2687: plus reduce using rule 75 (base_call -> factor .) - yacc.py:2687: minus reduce using rule 75 (base_call -> factor .) - yacc.py:2687: less reduce using rule 75 (base_call -> factor .) - yacc.py:2687: lesseq reduce using rule 75 (base_call -> factor .) - yacc.py:2687: equal reduce using rule 75 (base_call -> factor .) - yacc.py:2687: semi reduce using rule 75 (base_call -> factor .) - yacc.py:2687: of reduce using rule 75 (base_call -> factor .) - yacc.py:2687: then reduce using rule 75 (base_call -> factor .) - yacc.py:2687: loop reduce using rule 75 (base_call -> factor .) - yacc.py:2687: cpar reduce using rule 75 (base_call -> factor .) - yacc.py:2687: comma reduce using rule 75 (base_call -> factor .) - yacc.py:2687: in reduce using rule 75 (base_call -> factor .) - yacc.py:2687: else reduce using rule 75 (base_call -> factor .) - yacc.py:2687: pool reduce using rule 75 (base_call -> factor .) - yacc.py:2687: error reduce using rule 75 (base_call -> factor .) - yacc.py:2687: ccur reduce using rule 75 (base_call -> factor .) - yacc.py:2687: fi reduce using rule 75 (base_call -> factor .) - yacc.py:2687: dot shift and go to state 134 - yacc.py:2689: + yacc.py:2565: (84) factor -> let . let_list in expr + yacc.py:2565: (85) factor -> let . error in expr + yacc.py:2565: (86) factor -> let . let_list in error + yacc.py:2565: (87) factor -> let . let_list error expr + yacc.py:2565: (38) let_list -> . let_assign + yacc.py:2565: (39) let_list -> . let_assign comma let_list + yacc.py:2565: (40) let_list -> . error let_list + yacc.py:2565: (41) let_list -> . error + yacc.py:2565: (42) let_assign -> . param larrow expr + yacc.py:2565: (43) let_assign -> . param + yacc.py:2565: (37) param -> . id colon type + yacc.py:2566: + yacc.py:2687: error shift and go to state 136 + yacc.py:2687: id shift and go to state 47 + yacc.py:2689: + yacc.py:2714: let_list shift and go to state 135 + yacc.py:2714: let_assign shift and go to state 137 + yacc.py:2714: param shift and go to state 138 yacc.py:2561: yacc.py:2562:state 87 yacc.py:2563: - yacc.py:2565: (81) factor -> func_call . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 81 (factor -> func_call .) - yacc.py:2687: dot reduce using rule 81 (factor -> func_call .) - yacc.py:2687: star reduce using rule 81 (factor -> func_call .) - yacc.py:2687: div reduce using rule 81 (factor -> func_call .) - yacc.py:2687: plus reduce using rule 81 (factor -> func_call .) - yacc.py:2687: minus reduce using rule 81 (factor -> func_call .) - yacc.py:2687: less reduce using rule 81 (factor -> func_call .) - yacc.py:2687: lesseq reduce using rule 81 (factor -> func_call .) - yacc.py:2687: equal reduce using rule 81 (factor -> func_call .) - yacc.py:2687: semi reduce using rule 81 (factor -> func_call .) - yacc.py:2687: of reduce using rule 81 (factor -> func_call .) - yacc.py:2687: then reduce using rule 81 (factor -> func_call .) - yacc.py:2687: loop reduce using rule 81 (factor -> func_call .) - yacc.py:2687: cpar reduce using rule 81 (factor -> func_call .) - yacc.py:2687: comma reduce using rule 81 (factor -> func_call .) - yacc.py:2687: in reduce using rule 81 (factor -> func_call .) - yacc.py:2687: else reduce using rule 81 (factor -> func_call .) - yacc.py:2687: pool reduce using rule 81 (factor -> func_call .) - yacc.py:2687: error reduce using rule 81 (factor -> func_call .) - yacc.py:2687: ccur reduce using rule 81 (factor -> func_call .) - yacc.py:2687: fi reduce using rule 81 (factor -> func_call .) + yacc.py:2565: (88) factor -> case . expr of cases_list esac + yacc.py:2565: (89) factor -> case . error of cases_list esac + yacc.py:2565: (90) factor -> case . expr of error esac + yacc.py:2565: (91) factor -> case . expr error cases_list esac + yacc.py:2565: (92) factor -> case . expr of cases_list error + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 140 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2714: expr shift and go to state 139 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 88 yacc.py:2563: - yacc.py:2565: (78) factor -> atom . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 78 (factor -> atom .) - yacc.py:2687: dot reduce using rule 78 (factor -> atom .) - yacc.py:2687: star reduce using rule 78 (factor -> atom .) - yacc.py:2687: div reduce using rule 78 (factor -> atom .) - yacc.py:2687: plus reduce using rule 78 (factor -> atom .) - yacc.py:2687: minus reduce using rule 78 (factor -> atom .) - yacc.py:2687: less reduce using rule 78 (factor -> atom .) - yacc.py:2687: lesseq reduce using rule 78 (factor -> atom .) - yacc.py:2687: equal reduce using rule 78 (factor -> atom .) - yacc.py:2687: semi reduce using rule 78 (factor -> atom .) - yacc.py:2687: of reduce using rule 78 (factor -> atom .) - yacc.py:2687: then reduce using rule 78 (factor -> atom .) - yacc.py:2687: loop reduce using rule 78 (factor -> atom .) - yacc.py:2687: cpar reduce using rule 78 (factor -> atom .) - yacc.py:2687: comma reduce using rule 78 (factor -> atom .) - yacc.py:2687: in reduce using rule 78 (factor -> atom .) - yacc.py:2687: else reduce using rule 78 (factor -> atom .) - yacc.py:2687: pool reduce using rule 78 (factor -> atom .) - yacc.py:2687: error reduce using rule 78 (factor -> atom .) - yacc.py:2687: ccur reduce using rule 78 (factor -> atom .) - yacc.py:2687: fi reduce using rule 78 (factor -> atom .) + yacc.py:2565: (93) factor -> if . expr then expr else expr fi + yacc.py:2565: (94) factor -> if . error then expr else expr fi + yacc.py:2565: (95) factor -> if . expr then error else expr fi + yacc.py:2565: (96) factor -> if . expr then expr else error fi + yacc.py:2565: (97) factor -> if . expr error expr else expr fi + yacc.py:2565: (98) factor -> if . expr then expr error error expr fi + yacc.py:2565: (99) factor -> if . expr then expr error expr fi + yacc.py:2565: (100) factor -> if . expr then expr else expr error + yacc.py:2565: (101) factor -> if . error fi + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 142 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2714: expr shift and go to state 141 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 89 yacc.py:2563: - yacc.py:2565: (79) factor -> opar . expr cpar - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: error shift and go to state 71 - yacc.py:2687: opar shift and go to state 89 + yacc.py:2565: (102) factor -> while . expr loop expr pool + yacc.py:2565: (103) factor -> while . error loop expr pool + yacc.py:2565: (104) factor -> while . expr loop error pool + yacc.py:2565: (105) factor -> while . expr loop expr error + yacc.py:2565: (106) factor -> while . expr error expr loop expr pool + yacc.py:2565: (107) factor -> while . expr error expr pool + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 144 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 yacc.py:2687: num shift and go to state 90 yacc.py:2687: new shift and go to state 91 yacc.py:2687: ocur shift and go to state 92 @@ -1977,119 +2459,144 @@ yacc.py:2687: false shift and go to state 94 yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: expr shift and go to state 135 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 + yacc.py:2714: expr shift and go to state 143 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 90 yacc.py:2563: - yacc.py:2565: (82) atom -> num . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 82 (atom -> num .) - yacc.py:2687: dot reduce using rule 82 (atom -> num .) - yacc.py:2687: star reduce using rule 82 (atom -> num .) - yacc.py:2687: div reduce using rule 82 (atom -> num .) - yacc.py:2687: plus reduce using rule 82 (atom -> num .) - yacc.py:2687: minus reduce using rule 82 (atom -> num .) - yacc.py:2687: less reduce using rule 82 (atom -> num .) - yacc.py:2687: lesseq reduce using rule 82 (atom -> num .) - yacc.py:2687: equal reduce using rule 82 (atom -> num .) - yacc.py:2687: semi reduce using rule 82 (atom -> num .) - yacc.py:2687: of reduce using rule 82 (atom -> num .) - yacc.py:2687: then reduce using rule 82 (atom -> num .) - yacc.py:2687: loop reduce using rule 82 (atom -> num .) - yacc.py:2687: cpar reduce using rule 82 (atom -> num .) - yacc.py:2687: comma reduce using rule 82 (atom -> num .) - yacc.py:2687: in reduce using rule 82 (atom -> num .) - yacc.py:2687: else reduce using rule 82 (atom -> num .) - yacc.py:2687: pool reduce using rule 82 (atom -> num .) - yacc.py:2687: error reduce using rule 82 (atom -> num .) - yacc.py:2687: ccur reduce using rule 82 (atom -> num .) - yacc.py:2687: fi reduce using rule 82 (atom -> num .) + yacc.py:2565: (108) atom -> num . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 108 (atom -> num .) + yacc.py:2687: dot reduce using rule 108 (atom -> num .) + yacc.py:2687: star reduce using rule 108 (atom -> num .) + yacc.py:2687: div reduce using rule 108 (atom -> num .) + yacc.py:2687: plus reduce using rule 108 (atom -> num .) + yacc.py:2687: minus reduce using rule 108 (atom -> num .) + yacc.py:2687: less reduce using rule 108 (atom -> num .) + yacc.py:2687: lesseq reduce using rule 108 (atom -> num .) + yacc.py:2687: equal reduce using rule 108 (atom -> num .) + yacc.py:2687: semi reduce using rule 108 (atom -> num .) + yacc.py:2687: cpar reduce using rule 108 (atom -> num .) + yacc.py:2687: error reduce using rule 108 (atom -> num .) + yacc.py:2687: of reduce using rule 108 (atom -> num .) + yacc.py:2687: then reduce using rule 108 (atom -> num .) + yacc.py:2687: loop reduce using rule 108 (atom -> num .) + yacc.py:2687: comma reduce using rule 108 (atom -> num .) + yacc.py:2687: in reduce using rule 108 (atom -> num .) + yacc.py:2687: else reduce using rule 108 (atom -> num .) + yacc.py:2687: pool reduce using rule 108 (atom -> num .) + yacc.py:2687: ccur reduce using rule 108 (atom -> num .) + yacc.py:2687: fi reduce using rule 108 (atom -> num .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 91 yacc.py:2563: - yacc.py:2565: (84) atom -> new . type - yacc.py:2565: (85) atom -> new . error + yacc.py:2565: (110) atom -> new . type + yacc.py:2565: (111) atom -> new . error yacc.py:2566: - yacc.py:2687: type shift and go to state 136 - yacc.py:2687: error shift and go to state 137 + yacc.py:2687: type shift and go to state 145 + yacc.py:2687: error shift and go to state 146 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 92 yacc.py:2563: - yacc.py:2565: (86) atom -> ocur . block ccur - yacc.py:2565: (90) block -> . expr semi - yacc.py:2565: (91) block -> . expr semi block - yacc.py:2565: (92) block -> . error block - yacc.py:2565: (93) block -> . error - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 140 - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: opar shift and go to state 89 + yacc.py:2565: (112) atom -> ocur . block ccur + yacc.py:2565: (114) atom -> ocur . error ccur + yacc.py:2565: (115) atom -> ocur . block error + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 148 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 yacc.py:2687: num shift and go to state 90 yacc.py:2687: new shift and go to state 91 yacc.py:2687: ocur shift and go to state 92 @@ -2097,467 +2604,672 @@ yacc.py:2687: false shift and go to state 94 yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: block shift and go to state 138 - yacc.py:2714: expr shift and go to state 139 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 + yacc.py:2714: block shift and go to state 147 + yacc.py:2714: expr shift and go to state 149 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 93 yacc.py:2563: - yacc.py:2565: (87) atom -> true . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 87 (atom -> true .) - yacc.py:2687: dot reduce using rule 87 (atom -> true .) - yacc.py:2687: star reduce using rule 87 (atom -> true .) - yacc.py:2687: div reduce using rule 87 (atom -> true .) - yacc.py:2687: plus reduce using rule 87 (atom -> true .) - yacc.py:2687: minus reduce using rule 87 (atom -> true .) - yacc.py:2687: less reduce using rule 87 (atom -> true .) - yacc.py:2687: lesseq reduce using rule 87 (atom -> true .) - yacc.py:2687: equal reduce using rule 87 (atom -> true .) - yacc.py:2687: semi reduce using rule 87 (atom -> true .) - yacc.py:2687: of reduce using rule 87 (atom -> true .) - yacc.py:2687: then reduce using rule 87 (atom -> true .) - yacc.py:2687: loop reduce using rule 87 (atom -> true .) - yacc.py:2687: cpar reduce using rule 87 (atom -> true .) - yacc.py:2687: comma reduce using rule 87 (atom -> true .) - yacc.py:2687: in reduce using rule 87 (atom -> true .) - yacc.py:2687: else reduce using rule 87 (atom -> true .) - yacc.py:2687: pool reduce using rule 87 (atom -> true .) - yacc.py:2687: error reduce using rule 87 (atom -> true .) - yacc.py:2687: ccur reduce using rule 87 (atom -> true .) - yacc.py:2687: fi reduce using rule 87 (atom -> true .) + yacc.py:2565: (116) atom -> true . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 116 (atom -> true .) + yacc.py:2687: dot reduce using rule 116 (atom -> true .) + yacc.py:2687: star reduce using rule 116 (atom -> true .) + yacc.py:2687: div reduce using rule 116 (atom -> true .) + yacc.py:2687: plus reduce using rule 116 (atom -> true .) + yacc.py:2687: minus reduce using rule 116 (atom -> true .) + yacc.py:2687: less reduce using rule 116 (atom -> true .) + yacc.py:2687: lesseq reduce using rule 116 (atom -> true .) + yacc.py:2687: equal reduce using rule 116 (atom -> true .) + yacc.py:2687: semi reduce using rule 116 (atom -> true .) + yacc.py:2687: cpar reduce using rule 116 (atom -> true .) + yacc.py:2687: error reduce using rule 116 (atom -> true .) + yacc.py:2687: of reduce using rule 116 (atom -> true .) + yacc.py:2687: then reduce using rule 116 (atom -> true .) + yacc.py:2687: loop reduce using rule 116 (atom -> true .) + yacc.py:2687: comma reduce using rule 116 (atom -> true .) + yacc.py:2687: in reduce using rule 116 (atom -> true .) + yacc.py:2687: else reduce using rule 116 (atom -> true .) + yacc.py:2687: pool reduce using rule 116 (atom -> true .) + yacc.py:2687: ccur reduce using rule 116 (atom -> true .) + yacc.py:2687: fi reduce using rule 116 (atom -> true .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 94 yacc.py:2563: - yacc.py:2565: (88) atom -> false . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 88 (atom -> false .) - yacc.py:2687: dot reduce using rule 88 (atom -> false .) - yacc.py:2687: star reduce using rule 88 (atom -> false .) - yacc.py:2687: div reduce using rule 88 (atom -> false .) - yacc.py:2687: plus reduce using rule 88 (atom -> false .) - yacc.py:2687: minus reduce using rule 88 (atom -> false .) - yacc.py:2687: less reduce using rule 88 (atom -> false .) - yacc.py:2687: lesseq reduce using rule 88 (atom -> false .) - yacc.py:2687: equal reduce using rule 88 (atom -> false .) - yacc.py:2687: semi reduce using rule 88 (atom -> false .) - yacc.py:2687: of reduce using rule 88 (atom -> false .) - yacc.py:2687: then reduce using rule 88 (atom -> false .) - yacc.py:2687: loop reduce using rule 88 (atom -> false .) - yacc.py:2687: cpar reduce using rule 88 (atom -> false .) - yacc.py:2687: comma reduce using rule 88 (atom -> false .) - yacc.py:2687: in reduce using rule 88 (atom -> false .) - yacc.py:2687: else reduce using rule 88 (atom -> false .) - yacc.py:2687: pool reduce using rule 88 (atom -> false .) - yacc.py:2687: error reduce using rule 88 (atom -> false .) - yacc.py:2687: ccur reduce using rule 88 (atom -> false .) - yacc.py:2687: fi reduce using rule 88 (atom -> false .) + yacc.py:2565: (117) atom -> false . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 117 (atom -> false .) + yacc.py:2687: dot reduce using rule 117 (atom -> false .) + yacc.py:2687: star reduce using rule 117 (atom -> false .) + yacc.py:2687: div reduce using rule 117 (atom -> false .) + yacc.py:2687: plus reduce using rule 117 (atom -> false .) + yacc.py:2687: minus reduce using rule 117 (atom -> false .) + yacc.py:2687: less reduce using rule 117 (atom -> false .) + yacc.py:2687: lesseq reduce using rule 117 (atom -> false .) + yacc.py:2687: equal reduce using rule 117 (atom -> false .) + yacc.py:2687: semi reduce using rule 117 (atom -> false .) + yacc.py:2687: cpar reduce using rule 117 (atom -> false .) + yacc.py:2687: error reduce using rule 117 (atom -> false .) + yacc.py:2687: of reduce using rule 117 (atom -> false .) + yacc.py:2687: then reduce using rule 117 (atom -> false .) + yacc.py:2687: loop reduce using rule 117 (atom -> false .) + yacc.py:2687: comma reduce using rule 117 (atom -> false .) + yacc.py:2687: in reduce using rule 117 (atom -> false .) + yacc.py:2687: else reduce using rule 117 (atom -> false .) + yacc.py:2687: pool reduce using rule 117 (atom -> false .) + yacc.py:2687: ccur reduce using rule 117 (atom -> false .) + yacc.py:2687: fi reduce using rule 117 (atom -> false .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 95 yacc.py:2563: - yacc.py:2565: (89) atom -> string . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 89 (atom -> string .) - yacc.py:2687: dot reduce using rule 89 (atom -> string .) - yacc.py:2687: star reduce using rule 89 (atom -> string .) - yacc.py:2687: div reduce using rule 89 (atom -> string .) - yacc.py:2687: plus reduce using rule 89 (atom -> string .) - yacc.py:2687: minus reduce using rule 89 (atom -> string .) - yacc.py:2687: less reduce using rule 89 (atom -> string .) - yacc.py:2687: lesseq reduce using rule 89 (atom -> string .) - yacc.py:2687: equal reduce using rule 89 (atom -> string .) - yacc.py:2687: semi reduce using rule 89 (atom -> string .) - yacc.py:2687: of reduce using rule 89 (atom -> string .) - yacc.py:2687: then reduce using rule 89 (atom -> string .) - yacc.py:2687: loop reduce using rule 89 (atom -> string .) - yacc.py:2687: cpar reduce using rule 89 (atom -> string .) - yacc.py:2687: comma reduce using rule 89 (atom -> string .) - yacc.py:2687: in reduce using rule 89 (atom -> string .) - yacc.py:2687: else reduce using rule 89 (atom -> string .) - yacc.py:2687: pool reduce using rule 89 (atom -> string .) - yacc.py:2687: error reduce using rule 89 (atom -> string .) - yacc.py:2687: ccur reduce using rule 89 (atom -> string .) - yacc.py:2687: fi reduce using rule 89 (atom -> string .) + yacc.py:2565: (118) atom -> string . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 118 (atom -> string .) + yacc.py:2687: dot reduce using rule 118 (atom -> string .) + yacc.py:2687: star reduce using rule 118 (atom -> string .) + yacc.py:2687: div reduce using rule 118 (atom -> string .) + yacc.py:2687: plus reduce using rule 118 (atom -> string .) + yacc.py:2687: minus reduce using rule 118 (atom -> string .) + yacc.py:2687: less reduce using rule 118 (atom -> string .) + yacc.py:2687: lesseq reduce using rule 118 (atom -> string .) + yacc.py:2687: equal reduce using rule 118 (atom -> string .) + yacc.py:2687: semi reduce using rule 118 (atom -> string .) + yacc.py:2687: cpar reduce using rule 118 (atom -> string .) + yacc.py:2687: error reduce using rule 118 (atom -> string .) + yacc.py:2687: of reduce using rule 118 (atom -> string .) + yacc.py:2687: then reduce using rule 118 (atom -> string .) + yacc.py:2687: loop reduce using rule 118 (atom -> string .) + yacc.py:2687: comma reduce using rule 118 (atom -> string .) + yacc.py:2687: in reduce using rule 118 (atom -> string .) + yacc.py:2687: else reduce using rule 118 (atom -> string .) + yacc.py:2687: pool reduce using rule 118 (atom -> string .) + yacc.py:2687: ccur reduce using rule 118 (atom -> string .) + yacc.py:2687: fi reduce using rule 118 (atom -> string .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 96 yacc.py:2563: - yacc.py:2565: (24) def_func -> error opar formals cpar colon . type ocur expr ccur + yacc.py:2565: (34) param_list -> error comma param_list . yacc.py:2566: - yacc.py:2687: type shift and go to state 141 + yacc.py:2687: cpar reduce using rule 34 (param_list -> error comma param_list .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 97 yacc.py:2563: - yacc.py:2565: (31) param_list -> param comma param_list . + yacc.py:2565: (26) def_func -> error opar formals cpar colon . type ocur expr ccur yacc.py:2566: - yacc.py:2687: cpar reduce using rule 31 (param_list -> param comma param_list .) + yacc.py:2687: type shift and go to state 150 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 98 yacc.py:2563: - yacc.py:2565: (34) param -> id colon type . + yacc.py:2565: (33) param_list -> param comma param_list . yacc.py:2566: - yacc.py:2687: comma reduce using rule 34 (param -> id colon type .) - yacc.py:2687: cpar reduce using rule 34 (param -> id colon type .) - yacc.py:2687: larrow reduce using rule 34 (param -> id colon type .) - yacc.py:2687: in reduce using rule 34 (param -> id colon type .) + yacc.py:2687: cpar reduce using rule 33 (param_list -> param comma param_list .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 99 yacc.py:2563: - yacc.py:2565: (17) def_attr -> id colon type larrow expr . + yacc.py:2565: (35) param_list -> param comma error . + yacc.py:2565: (34) param_list -> error . comma param_list yacc.py:2566: - yacc.py:2687: semi reduce using rule 17 (def_attr -> id colon type larrow expr .) + yacc.py:2687: cpar reduce using rule 35 (param_list -> param comma error .) + yacc.py:2687: comma shift and go to state 60 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 100 yacc.py:2563: - yacc.py:2565: (22) def_attr -> id colon type larrow error . - yacc.py:2565: (76) base_call -> error . arroba type dot func_call - yacc.py:2565: (96) func_call -> error . opar args cpar + yacc.py:2565: (37) param -> id colon type . yacc.py:2566: - yacc.py:2687: semi reduce using rule 22 (def_attr -> id colon type larrow error .) - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 109 + yacc.py:2687: comma reduce using rule 37 (param -> id colon type .) + yacc.py:2687: cpar reduce using rule 37 (param -> id colon type .) + yacc.py:2687: larrow reduce using rule 37 (param -> id colon type .) + yacc.py:2687: in reduce using rule 37 (param -> id colon type .) + yacc.py:2687: error reduce using rule 37 (param -> id colon type .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 101 yacc.py:2563: - yacc.py:2565: (21) def_attr -> id colon error larrow expr . + yacc.py:2565: (19) def_attr -> id colon type larrow expr . yacc.py:2566: - yacc.py:2687: semi reduce using rule 21 (def_attr -> id colon error larrow expr .) + yacc.py:2687: semi reduce using rule 19 (def_attr -> id colon type larrow expr .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 102 yacc.py:2563: - yacc.py:2565: (23) def_func -> id opar formals cpar colon . type ocur expr ccur - yacc.py:2565: (26) def_func -> id opar formals cpar colon . error ocur expr ccur - yacc.py:2565: (27) def_func -> id opar formals cpar colon . type ocur error ccur - yacc.py:2566: - yacc.py:2687: type shift and go to state 142 - yacc.py:2687: error shift and go to state 143 + yacc.py:2565: (24) def_attr -> id colon type larrow error . + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: semi reduce using rule 24 (def_attr -> id colon type larrow error .) + yacc.py:2687: arroba shift and go to state 112 + yacc.py:2687: opar shift and go to state 115 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: error shift and go to state 111 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: expr shift and go to state 113 + yacc.py:2714: block shift and go to state 114 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 103 yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar error cpar colon . type ocur expr ccur + yacc.py:2565: (23) def_attr -> id colon error larrow expr . yacc.py:2566: - yacc.py:2687: type shift and go to state 144 + yacc.py:2687: semi reduce using rule 23 (def_attr -> id colon error larrow expr .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 104 yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list ccur semi . + yacc.py:2565: (25) def_func -> id opar formals cpar colon . type ocur expr ccur + yacc.py:2565: (28) def_func -> id opar formals cpar colon . error ocur expr ccur + yacc.py:2565: (29) def_func -> id opar formals cpar colon . type ocur error ccur yacc.py:2566: - yacc.py:2687: error reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + yacc.py:2687: type shift and go to state 151 + yacc.py:2687: error shift and go to state 152 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 105 yacc.py:2563: - yacc.py:2565: (11) def_class -> class type inherits error ocur feature_list ccur semi . + yacc.py:2565: (27) def_func -> id opar error cpar colon . type ocur expr ccur yacc.py:2566: - yacc.py:2687: error reduce using rule 11 (def_class -> class type inherits error ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 11 (def_class -> class type inherits error ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 11 (def_class -> class type inherits error ocur feature_list ccur semi .) + yacc.py:2687: type shift and go to state 153 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 106 yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits error ocur feature_list ccur semi . + yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list ccur semi . yacc.py:2566: - yacc.py:2687: error reduce using rule 10 (def_class -> class error inherits error ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 10 (def_class -> class error inherits error ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 10 (def_class -> class error inherits error ocur feature_list ccur semi .) + yacc.py:2687: error reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 107 yacc.py:2563: - yacc.py:2565: (9) def_class -> class error inherits type ocur feature_list ccur semi . + yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list ccur error . yacc.py:2566: - yacc.py:2687: error reduce using rule 9 (def_class -> class error inherits type ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 9 (def_class -> class error inherits type ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 9 (def_class -> class error inherits type ocur feature_list ccur semi .) + yacc.py:2687: error reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) + yacc.py:2687: class reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) + yacc.py:2687: $end reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 108 yacc.py:2563: - yacc.py:2565: (76) base_call -> error arroba . type dot func_call + yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list ccur semi . yacc.py:2566: - yacc.py:2687: type shift and go to state 145 + yacc.py:2687: error reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 109 yacc.py:2563: - yacc.py:2565: (96) func_call -> error opar . args cpar - yacc.py:2565: (97) args -> . arg_list - yacc.py:2565: (98) args -> . arg_list_empty - yacc.py:2565: (99) arg_list -> . expr - yacc.py:2565: (100) arg_list -> . expr comma arg_list - yacc.py:2565: (101) arg_list -> . error arg_list - yacc.py:2565: (102) arg_list_empty -> . epsilon - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list ccur semi . yacc.py:2566: - yacc.py:2687: error shift and go to state 146 - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: opar shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 + yacc.py:2687: error reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) yacc.py:2689: - yacc.py:2714: args shift and go to state 147 - yacc.py:2714: arg_list shift and go to state 148 - yacc.py:2714: arg_list_empty shift and go to state 149 - yacc.py:2714: expr shift and go to state 150 - yacc.py:2714: epsilon shift and go to state 151 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 yacc.py:2561: yacc.py:2562:state 110 yacc.py:2563: - yacc.py:2565: (35) expr -> let let_list . in expr - yacc.py:2565: (37) expr -> let let_list . in error + yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list ccur semi . yacc.py:2566: - yacc.py:2687: in shift and go to state 152 + yacc.py:2687: error reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 111 yacc.py:2563: - yacc.py:2565: (36) expr -> let error . in expr - yacc.py:2565: (52) let_list -> error . let_list - yacc.py:2565: (50) let_list -> . let_assign - yacc.py:2565: (51) let_list -> . let_assign comma let_list - yacc.py:2565: (52) let_list -> . error let_list - yacc.py:2565: (53) let_assign -> . param larrow expr - yacc.py:2565: (54) let_assign -> . param - yacc.py:2565: (34) param -> . id colon type - yacc.py:2566: - yacc.py:2687: in shift and go to state 154 - yacc.py:2687: error shift and go to state 153 - yacc.py:2687: id shift and go to state 48 + yacc.py:2565: (121) block -> error . block + yacc.py:2565: (122) block -> error . semi + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: semi shift and go to state 155 + yacc.py:2687: arroba shift and go to state 112 + yacc.py:2687: opar shift and go to state 115 + yacc.py:2687: error shift and go to state 111 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: let_list shift and go to state 155 - yacc.py:2714: let_assign shift and go to state 112 - yacc.py:2714: param shift and go to state 113 + yacc.py:2714: block shift and go to state 154 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: expr shift and go to state 113 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 112 yacc.py:2563: - yacc.py:2565: (50) let_list -> let_assign . - yacc.py:2565: (51) let_list -> let_assign . comma let_list + yacc.py:2565: (74) base_call -> error arroba . type dot func_call yacc.py:2566: - yacc.py:2687: in reduce using rule 50 (let_list -> let_assign .) - yacc.py:2687: comma shift and go to state 156 + yacc.py:2687: type shift and go to state 156 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 113 yacc.py:2563: - yacc.py:2565: (53) let_assign -> param . larrow expr - yacc.py:2565: (54) let_assign -> param . + yacc.py:2565: (79) factor -> error expr . cpar + yacc.py:2565: (119) block -> expr . semi + yacc.py:2565: (120) block -> expr . semi block yacc.py:2566: - yacc.py:2687: larrow shift and go to state 157 - yacc.py:2687: comma reduce using rule 54 (let_assign -> param .) - yacc.py:2687: in reduce using rule 54 (let_assign -> param .) + yacc.py:2687: cpar shift and go to state 157 + yacc.py:2687: semi shift and go to state 158 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 114 yacc.py:2563: - yacc.py:2565: (38) expr -> case expr . of cases_list esac - yacc.py:2565: (40) expr -> case expr . of error esac + yacc.py:2565: (113) atom -> error block . ccur yacc.py:2566: - yacc.py:2687: of shift and go to state 158 + yacc.py:2687: ccur shift and go to state 159 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 115 yacc.py:2563: - yacc.py:2565: (39) expr -> case error . of cases_list esac - yacc.py:2565: (76) base_call -> error . arroba type dot func_call - yacc.py:2565: (96) func_call -> error . opar args cpar - yacc.py:2566: - yacc.py:2687: of shift and go to state 159 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 109 + yacc.py:2565: (125) func_call -> error opar . args cpar + yacc.py:2565: (77) factor -> opar . expr cpar + yacc.py:2565: (78) factor -> opar . expr error + yacc.py:2565: (80) factor -> opar . error cpar + yacc.py:2565: (126) args -> . arg_list + yacc.py:2565: (127) args -> . arg_list_empty + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (128) arg_list -> . expr + yacc.py:2565: (129) arg_list -> . expr comma arg_list + yacc.py:2565: (130) arg_list -> . error arg_list + yacc.py:2565: (131) arg_list_empty -> . epsilon + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 160 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2714: args shift and go to state 161 + yacc.py:2714: expr shift and go to state 162 + yacc.py:2714: arg_list shift and go to state 163 + yacc.py:2714: arg_list_empty shift and go to state 164 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: epsilon shift and go to state 165 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 116 yacc.py:2563: - yacc.py:2565: (41) expr -> if expr . then expr else expr fi - yacc.py:2565: (43) expr -> if expr . then error else expr fi - yacc.py:2565: (44) expr -> if expr . then expr else error fi - yacc.py:2566: - yacc.py:2687: then shift and go to state 160 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 117 - yacc.py:2563: - yacc.py:2565: (42) expr -> if error . then expr else expr fi - yacc.py:2565: (76) base_call -> error . arroba type dot func_call - yacc.py:2565: (96) func_call -> error . opar args cpar - yacc.py:2566: - yacc.py:2687: then shift and go to state 161 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 109 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 118 - yacc.py:2563: - yacc.py:2565: (45) expr -> while expr . loop expr pool - yacc.py:2565: (47) expr -> while expr . loop error pool - yacc.py:2565: (48) expr -> while expr . loop expr error - yacc.py:2566: - yacc.py:2687: loop shift and go to state 162 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 119 - yacc.py:2563: - yacc.py:2565: (46) expr -> while error . loop expr pool - yacc.py:2565: (76) base_call -> error . arroba type dot func_call - yacc.py:2565: (96) func_call -> error . opar args cpar - yacc.py:2566: - yacc.py:2687: loop shift and go to state 163 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 109 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 120 - yacc.py:2563: - yacc.py:2565: (59) arith -> id larrow . expr - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: error shift and go to state 71 - yacc.py:2687: opar shift and go to state 89 + yacc.py:2565: (49) expr -> id larrow . expr + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: error shift and go to state 72 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 yacc.py:2687: num shift and go to state 90 yacc.py:2687: new shift and go to state 91 yacc.py:2687: ocur shift and go to state 92 @@ -2565,88 +3277,111 @@ yacc.py:2687: false shift and go to state 94 yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: expr shift and go to state 164 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 + yacc.py:2714: expr shift and go to state 166 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: - yacc.py:2562:state 121 + yacc.py:2562:state 117 yacc.py:2563: - yacc.py:2565: (94) func_call -> id opar . args cpar - yacc.py:2565: (95) func_call -> id opar . error cpar - yacc.py:2565: (97) args -> . arg_list - yacc.py:2565: (98) args -> . arg_list_empty - yacc.py:2565: (99) arg_list -> . expr - yacc.py:2565: (100) arg_list -> . expr comma arg_list - yacc.py:2565: (101) arg_list -> . error arg_list - yacc.py:2565: (102) arg_list_empty -> . epsilon - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith + yacc.py:2565: (123) func_call -> id opar . args cpar + yacc.py:2565: (124) func_call -> id opar . error cpar + yacc.py:2565: (126) args -> . arg_list + yacc.py:2565: (127) args -> . arg_list_empty + yacc.py:2565: (128) arg_list -> . expr + yacc.py:2565: (129) arg_list -> . expr comma arg_list + yacc.py:2565: (130) arg_list -> . error arg_list + yacc.py:2565: (131) arg_list_empty -> . epsilon + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 166 - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 168 + yacc.py:2687: id shift and go to state 74 yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: opar shift and go to state 89 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 yacc.py:2687: num shift and go to state 90 yacc.py:2687: new shift and go to state 91 yacc.py:2687: ocur shift and go to state 92 @@ -2654,611 +3389,1316 @@ yacc.py:2687: false shift and go to state 94 yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: args shift and go to state 165 - yacc.py:2714: arg_list shift and go to state 148 - yacc.py:2714: arg_list_empty shift and go to state 149 - yacc.py:2714: expr shift and go to state 150 - yacc.py:2714: epsilon shift and go to state 151 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 - yacc.py:2561: - yacc.py:2562:state 122 - yacc.py:2563: - yacc.py:2565: (60) arith -> not comp . - yacc.py:2565: (62) comp -> comp . less op - yacc.py:2565: (63) comp -> comp . lesseq op - yacc.py:2565: (64) comp -> comp . equal op - yacc.py:2566: - yacc.py:2687: semi reduce using rule 60 (arith -> not comp .) - yacc.py:2687: of reduce using rule 60 (arith -> not comp .) - yacc.py:2687: then reduce using rule 60 (arith -> not comp .) - yacc.py:2687: loop reduce using rule 60 (arith -> not comp .) - yacc.py:2687: cpar reduce using rule 60 (arith -> not comp .) - yacc.py:2687: comma reduce using rule 60 (arith -> not comp .) - yacc.py:2687: in reduce using rule 60 (arith -> not comp .) - yacc.py:2687: else reduce using rule 60 (arith -> not comp .) - yacc.py:2687: pool reduce using rule 60 (arith -> not comp .) - yacc.py:2687: error reduce using rule 60 (arith -> not comp .) - yacc.py:2687: ccur reduce using rule 60 (arith -> not comp .) - yacc.py:2687: fi reduce using rule 60 (arith -> not comp .) - yacc.py:2687: less shift and go to state 124 - yacc.py:2687: lesseq shift and go to state 125 - yacc.py:2687: equal shift and go to state 126 - yacc.py:2689: + yacc.py:2714: args shift and go to state 167 + yacc.py:2714: arg_list shift and go to state 163 + yacc.py:2714: arg_list_empty shift and go to state 164 + yacc.py:2714: expr shift and go to state 169 + yacc.py:2714: epsilon shift and go to state 165 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: - yacc.py:2562:state 123 + yacc.py:2562:state 118 yacc.py:2563: - yacc.py:2565: (83) atom -> id . - yacc.py:2565: (94) func_call -> id . opar args cpar - yacc.py:2565: (95) func_call -> id . opar error cpar - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 83 (atom -> id .) - yacc.py:2687: dot reduce using rule 83 (atom -> id .) - yacc.py:2687: star reduce using rule 83 (atom -> id .) - yacc.py:2687: div reduce using rule 83 (atom -> id .) - yacc.py:2687: plus reduce using rule 83 (atom -> id .) - yacc.py:2687: minus reduce using rule 83 (atom -> id .) - yacc.py:2687: less reduce using rule 83 (atom -> id .) - yacc.py:2687: lesseq reduce using rule 83 (atom -> id .) - yacc.py:2687: equal reduce using rule 83 (atom -> id .) - yacc.py:2687: semi reduce using rule 83 (atom -> id .) - yacc.py:2687: of reduce using rule 83 (atom -> id .) - yacc.py:2687: then reduce using rule 83 (atom -> id .) - yacc.py:2687: loop reduce using rule 83 (atom -> id .) - yacc.py:2687: cpar reduce using rule 83 (atom -> id .) - yacc.py:2687: comma reduce using rule 83 (atom -> id .) - yacc.py:2687: in reduce using rule 83 (atom -> id .) - yacc.py:2687: else reduce using rule 83 (atom -> id .) - yacc.py:2687: pool reduce using rule 83 (atom -> id .) - yacc.py:2687: error reduce using rule 83 (atom -> id .) - yacc.py:2687: ccur reduce using rule 83 (atom -> id .) - yacc.py:2687: fi reduce using rule 83 (atom -> id .) - yacc.py:2687: opar shift and go to state 121 + yacc.py:2565: (51) comp -> comp less . op + yacc.py:2565: (55) comp -> comp less . error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 171 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: id shift and go to state 127 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2714: op shift and go to state 170 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: - yacc.py:2562:state 124 + yacc.py:2562:state 119 yacc.py:2563: - yacc.py:2565: (62) comp -> comp less . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: error shift and go to state 71 - yacc.py:2687: opar shift and go to state 89 + yacc.py:2565: (52) comp -> comp lesseq . op + yacc.py:2565: (56) comp -> comp lesseq . error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 173 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 yacc.py:2687: num shift and go to state 90 - yacc.py:2687: id shift and go to state 123 + yacc.py:2687: id shift and go to state 127 yacc.py:2687: new shift and go to state 91 yacc.py:2687: ocur shift and go to state 92 yacc.py:2687: true shift and go to state 93 yacc.py:2687: false shift and go to state 94 yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: op shift and go to state 167 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 + yacc.py:2714: op shift and go to state 172 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: - yacc.py:2562:state 125 + yacc.py:2562:state 120 yacc.py:2563: - yacc.py:2565: (63) comp -> comp lesseq . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: error shift and go to state 71 - yacc.py:2687: opar shift and go to state 89 + yacc.py:2565: (53) comp -> comp equal . op + yacc.py:2565: (57) comp -> comp equal . error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 175 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 yacc.py:2687: num shift and go to state 90 - yacc.py:2687: id shift and go to state 123 + yacc.py:2687: id shift and go to state 127 yacc.py:2687: new shift and go to state 91 yacc.py:2687: ocur shift and go to state 92 yacc.py:2687: true shift and go to state 93 yacc.py:2687: false shift and go to state 94 yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: op shift and go to state 168 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 + yacc.py:2714: op shift and go to state 174 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: - yacc.py:2562:state 126 + yacc.py:2562:state 121 yacc.py:2563: - yacc.py:2565: (64) comp -> comp equal . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: error shift and go to state 71 - yacc.py:2687: opar shift and go to state 89 + yacc.py:2565: (58) op -> op plus . term + yacc.py:2565: (61) op -> op plus . error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 177 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 yacc.py:2687: num shift and go to state 90 - yacc.py:2687: id shift and go to state 123 + yacc.py:2687: id shift and go to state 127 yacc.py:2687: new shift and go to state 91 yacc.py:2687: ocur shift and go to state 92 yacc.py:2687: true shift and go to state 93 yacc.py:2687: false shift and go to state 94 yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: op shift and go to state 169 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 + yacc.py:2714: term shift and go to state 176 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: - yacc.py:2562:state 127 + yacc.py:2562:state 122 yacc.py:2563: - yacc.py:2565: (66) op -> op plus . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: error shift and go to state 71 - yacc.py:2687: opar shift and go to state 89 + yacc.py:2565: (59) op -> op minus . term + yacc.py:2565: (62) op -> op minus . error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 179 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 yacc.py:2687: num shift and go to state 90 - yacc.py:2687: id shift and go to state 123 + yacc.py:2687: id shift and go to state 127 yacc.py:2687: new shift and go to state 91 yacc.py:2687: ocur shift and go to state 92 yacc.py:2687: true shift and go to state 93 yacc.py:2687: false shift and go to state 94 yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: term shift and go to state 170 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 + yacc.py:2714: term shift and go to state 178 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: - yacc.py:2562:state 128 + yacc.py:2562:state 123 yacc.py:2563: - yacc.py:2565: (67) op -> op minus . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: error shift and go to state 71 - yacc.py:2687: opar shift and go to state 89 + yacc.py:2565: (63) term -> term star . base_call + yacc.py:2565: (68) term -> term star . error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 181 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 yacc.py:2687: num shift and go to state 90 - yacc.py:2687: id shift and go to state 123 + yacc.py:2687: id shift and go to state 127 yacc.py:2687: new shift and go to state 91 yacc.py:2687: ocur shift and go to state 92 yacc.py:2687: true shift and go to state 93 yacc.py:2687: false shift and go to state 94 yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: term shift and go to state 171 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 + yacc.py:2714: base_call shift and go to state 180 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: - yacc.py:2562:state 129 + yacc.py:2562:state 124 yacc.py:2563: - yacc.py:2565: (69) term -> term star . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 71 - yacc.py:2687: opar shift and go to state 89 + yacc.py:2565: (64) term -> term div . base_call + yacc.py:2565: (69) term -> term div . error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 183 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 yacc.py:2687: num shift and go to state 90 - yacc.py:2687: id shift and go to state 123 + yacc.py:2687: id shift and go to state 127 yacc.py:2687: new shift and go to state 91 yacc.py:2687: ocur shift and go to state 92 yacc.py:2687: true shift and go to state 93 yacc.py:2687: false shift and go to state 94 yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: base_call shift and go to state 172 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 + yacc.py:2714: base_call shift and go to state 182 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: - yacc.py:2562:state 130 + yacc.py:2562:state 125 + yacc.py:2563: + yacc.py:2565: (65) term -> isvoid base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 65 (term -> isvoid base_call .) + yacc.py:2687: div reduce using rule 65 (term -> isvoid base_call .) + yacc.py:2687: plus reduce using rule 65 (term -> isvoid base_call .) + yacc.py:2687: minus reduce using rule 65 (term -> isvoid base_call .) + yacc.py:2687: less reduce using rule 65 (term -> isvoid base_call .) + yacc.py:2687: lesseq reduce using rule 65 (term -> isvoid base_call .) + yacc.py:2687: equal reduce using rule 65 (term -> isvoid base_call .) + yacc.py:2687: semi reduce using rule 65 (term -> isvoid base_call .) + yacc.py:2687: cpar reduce using rule 65 (term -> isvoid base_call .) + yacc.py:2687: error reduce using rule 65 (term -> isvoid base_call .) + yacc.py:2687: arroba reduce using rule 65 (term -> isvoid base_call .) + yacc.py:2687: dot reduce using rule 65 (term -> isvoid base_call .) + yacc.py:2687: of reduce using rule 65 (term -> isvoid base_call .) + yacc.py:2687: then reduce using rule 65 (term -> isvoid base_call .) + yacc.py:2687: loop reduce using rule 65 (term -> isvoid base_call .) + yacc.py:2687: comma reduce using rule 65 (term -> isvoid base_call .) + yacc.py:2687: in reduce using rule 65 (term -> isvoid base_call .) + yacc.py:2687: else reduce using rule 65 (term -> isvoid base_call .) + yacc.py:2687: pool reduce using rule 65 (term -> isvoid base_call .) + yacc.py:2687: ccur reduce using rule 65 (term -> isvoid base_call .) + yacc.py:2687: fi reduce using rule 65 (term -> isvoid base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 126 yacc.py:2563: - yacc.py:2565: (70) term -> term div . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 71 - yacc.py:2687: opar shift and go to state 89 + yacc.py:2565: (70) term -> isvoid error . + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2666: ! shift/reduce conflict for error resolved as shift + yacc.py:2687: star reduce using rule 70 (term -> isvoid error .) + yacc.py:2687: div reduce using rule 70 (term -> isvoid error .) + yacc.py:2687: plus reduce using rule 70 (term -> isvoid error .) + yacc.py:2687: minus reduce using rule 70 (term -> isvoid error .) + yacc.py:2687: less reduce using rule 70 (term -> isvoid error .) + yacc.py:2687: lesseq reduce using rule 70 (term -> isvoid error .) + yacc.py:2687: equal reduce using rule 70 (term -> isvoid error .) + yacc.py:2687: semi reduce using rule 70 (term -> isvoid error .) + yacc.py:2687: cpar reduce using rule 70 (term -> isvoid error .) + yacc.py:2687: dot reduce using rule 70 (term -> isvoid error .) + yacc.py:2687: of reduce using rule 70 (term -> isvoid error .) + yacc.py:2687: then reduce using rule 70 (term -> isvoid error .) + yacc.py:2687: loop reduce using rule 70 (term -> isvoid error .) + yacc.py:2687: comma reduce using rule 70 (term -> isvoid error .) + yacc.py:2687: in reduce using rule 70 (term -> isvoid error .) + yacc.py:2687: else reduce using rule 70 (term -> isvoid error .) + yacc.py:2687: pool reduce using rule 70 (term -> isvoid error .) + yacc.py:2687: ccur reduce using rule 70 (term -> isvoid error .) + yacc.py:2687: fi reduce using rule 70 (term -> isvoid error .) + yacc.py:2687: arroba shift and go to state 112 + yacc.py:2687: opar shift and go to state 115 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: error shift and go to state 111 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 yacc.py:2687: num shift and go to state 90 - yacc.py:2687: id shift and go to state 123 yacc.py:2687: new shift and go to state 91 yacc.py:2687: ocur shift and go to state 92 yacc.py:2687: true shift and go to state 93 yacc.py:2687: false shift and go to state 94 yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: base_call shift and go to state 173 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 + yacc.py:2696: ! error [ reduce using rule 70 (term -> isvoid error .) ] + yacc.py:2696: ! arroba [ reduce using rule 70 (term -> isvoid error .) ] + yacc.py:2700: + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: expr shift and go to state 113 + yacc.py:2714: block shift and go to state 114 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: - yacc.py:2562:state 131 + yacc.py:2562:state 127 yacc.py:2563: - yacc.py:2565: (71) term -> isvoid base_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 71 (term -> isvoid base_call .) - yacc.py:2687: div reduce using rule 71 (term -> isvoid base_call .) - yacc.py:2687: plus reduce using rule 71 (term -> isvoid base_call .) - yacc.py:2687: minus reduce using rule 71 (term -> isvoid base_call .) - yacc.py:2687: less reduce using rule 71 (term -> isvoid base_call .) - yacc.py:2687: lesseq reduce using rule 71 (term -> isvoid base_call .) - yacc.py:2687: equal reduce using rule 71 (term -> isvoid base_call .) - yacc.py:2687: semi reduce using rule 71 (term -> isvoid base_call .) - yacc.py:2687: of reduce using rule 71 (term -> isvoid base_call .) - yacc.py:2687: then reduce using rule 71 (term -> isvoid base_call .) - yacc.py:2687: loop reduce using rule 71 (term -> isvoid base_call .) - yacc.py:2687: cpar reduce using rule 71 (term -> isvoid base_call .) - yacc.py:2687: comma reduce using rule 71 (term -> isvoid base_call .) - yacc.py:2687: in reduce using rule 71 (term -> isvoid base_call .) - yacc.py:2687: else reduce using rule 71 (term -> isvoid base_call .) - yacc.py:2687: pool reduce using rule 71 (term -> isvoid base_call .) - yacc.py:2687: error reduce using rule 71 (term -> isvoid base_call .) - yacc.py:2687: ccur reduce using rule 71 (term -> isvoid base_call .) - yacc.py:2687: fi reduce using rule 71 (term -> isvoid base_call .) + yacc.py:2565: (109) atom -> id . + yacc.py:2565: (123) func_call -> id . opar args cpar + yacc.py:2565: (124) func_call -> id . opar error cpar + yacc.py:2566: + yacc.py:2687: star reduce using rule 109 (atom -> id .) + yacc.py:2687: div reduce using rule 109 (atom -> id .) + yacc.py:2687: plus reduce using rule 109 (atom -> id .) + yacc.py:2687: minus reduce using rule 109 (atom -> id .) + yacc.py:2687: less reduce using rule 109 (atom -> id .) + yacc.py:2687: lesseq reduce using rule 109 (atom -> id .) + yacc.py:2687: equal reduce using rule 109 (atom -> id .) + yacc.py:2687: semi reduce using rule 109 (atom -> id .) + yacc.py:2687: cpar reduce using rule 109 (atom -> id .) + yacc.py:2687: error reduce using rule 109 (atom -> id .) + yacc.py:2687: arroba reduce using rule 109 (atom -> id .) + yacc.py:2687: dot reduce using rule 109 (atom -> id .) + yacc.py:2687: of reduce using rule 109 (atom -> id .) + yacc.py:2687: then reduce using rule 109 (atom -> id .) + yacc.py:2687: loop reduce using rule 109 (atom -> id .) + yacc.py:2687: comma reduce using rule 109 (atom -> id .) + yacc.py:2687: in reduce using rule 109 (atom -> id .) + yacc.py:2687: else reduce using rule 109 (atom -> id .) + yacc.py:2687: pool reduce using rule 109 (atom -> id .) + yacc.py:2687: ccur reduce using rule 109 (atom -> id .) + yacc.py:2687: fi reduce using rule 109 (atom -> id .) + yacc.py:2687: opar shift and go to state 117 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 132 + yacc.py:2562:state 128 yacc.py:2563: - yacc.py:2565: (72) term -> nox base_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 72 (term -> nox base_call .) - yacc.py:2687: div reduce using rule 72 (term -> nox base_call .) - yacc.py:2687: plus reduce using rule 72 (term -> nox base_call .) - yacc.py:2687: minus reduce using rule 72 (term -> nox base_call .) - yacc.py:2687: less reduce using rule 72 (term -> nox base_call .) - yacc.py:2687: lesseq reduce using rule 72 (term -> nox base_call .) - yacc.py:2687: equal reduce using rule 72 (term -> nox base_call .) - yacc.py:2687: semi reduce using rule 72 (term -> nox base_call .) - yacc.py:2687: of reduce using rule 72 (term -> nox base_call .) - yacc.py:2687: then reduce using rule 72 (term -> nox base_call .) - yacc.py:2687: loop reduce using rule 72 (term -> nox base_call .) - yacc.py:2687: cpar reduce using rule 72 (term -> nox base_call .) - yacc.py:2687: comma reduce using rule 72 (term -> nox base_call .) - yacc.py:2687: in reduce using rule 72 (term -> nox base_call .) - yacc.py:2687: else reduce using rule 72 (term -> nox base_call .) - yacc.py:2687: pool reduce using rule 72 (term -> nox base_call .) - yacc.py:2687: error reduce using rule 72 (term -> nox base_call .) - yacc.py:2687: ccur reduce using rule 72 (term -> nox base_call .) - yacc.py:2687: fi reduce using rule 72 (term -> nox base_call .) + yacc.py:2565: (66) term -> nox base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 66 (term -> nox base_call .) + yacc.py:2687: div reduce using rule 66 (term -> nox base_call .) + yacc.py:2687: plus reduce using rule 66 (term -> nox base_call .) + yacc.py:2687: minus reduce using rule 66 (term -> nox base_call .) + yacc.py:2687: less reduce using rule 66 (term -> nox base_call .) + yacc.py:2687: lesseq reduce using rule 66 (term -> nox base_call .) + yacc.py:2687: equal reduce using rule 66 (term -> nox base_call .) + yacc.py:2687: semi reduce using rule 66 (term -> nox base_call .) + yacc.py:2687: cpar reduce using rule 66 (term -> nox base_call .) + yacc.py:2687: error reduce using rule 66 (term -> nox base_call .) + yacc.py:2687: arroba reduce using rule 66 (term -> nox base_call .) + yacc.py:2687: dot reduce using rule 66 (term -> nox base_call .) + yacc.py:2687: of reduce using rule 66 (term -> nox base_call .) + yacc.py:2687: then reduce using rule 66 (term -> nox base_call .) + yacc.py:2687: loop reduce using rule 66 (term -> nox base_call .) + yacc.py:2687: comma reduce using rule 66 (term -> nox base_call .) + yacc.py:2687: in reduce using rule 66 (term -> nox base_call .) + yacc.py:2687: else reduce using rule 66 (term -> nox base_call .) + yacc.py:2687: pool reduce using rule 66 (term -> nox base_call .) + yacc.py:2687: ccur reduce using rule 66 (term -> nox base_call .) + yacc.py:2687: fi reduce using rule 66 (term -> nox base_call .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 133 + yacc.py:2562:state 129 yacc.py:2563: - yacc.py:2565: (74) base_call -> factor arroba . type dot func_call - yacc.py:2565: (77) base_call -> factor arroba . error dot func_call - yacc.py:2566: - yacc.py:2687: type shift and go to state 174 - yacc.py:2687: error shift and go to state 175 + yacc.py:2565: (71) term -> nox error . + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2666: ! shift/reduce conflict for error resolved as shift + yacc.py:2687: star reduce using rule 71 (term -> nox error .) + yacc.py:2687: div reduce using rule 71 (term -> nox error .) + yacc.py:2687: plus reduce using rule 71 (term -> nox error .) + yacc.py:2687: minus reduce using rule 71 (term -> nox error .) + yacc.py:2687: less reduce using rule 71 (term -> nox error .) + yacc.py:2687: lesseq reduce using rule 71 (term -> nox error .) + yacc.py:2687: equal reduce using rule 71 (term -> nox error .) + yacc.py:2687: semi reduce using rule 71 (term -> nox error .) + yacc.py:2687: cpar reduce using rule 71 (term -> nox error .) + yacc.py:2687: dot reduce using rule 71 (term -> nox error .) + yacc.py:2687: of reduce using rule 71 (term -> nox error .) + yacc.py:2687: then reduce using rule 71 (term -> nox error .) + yacc.py:2687: loop reduce using rule 71 (term -> nox error .) + yacc.py:2687: comma reduce using rule 71 (term -> nox error .) + yacc.py:2687: in reduce using rule 71 (term -> nox error .) + yacc.py:2687: else reduce using rule 71 (term -> nox error .) + yacc.py:2687: pool reduce using rule 71 (term -> nox error .) + yacc.py:2687: ccur reduce using rule 71 (term -> nox error .) + yacc.py:2687: fi reduce using rule 71 (term -> nox error .) + yacc.py:2687: arroba shift and go to state 112 + yacc.py:2687: opar shift and go to state 115 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: error shift and go to state 111 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2696: ! error [ reduce using rule 71 (term -> nox error .) ] + yacc.py:2696: ! arroba [ reduce using rule 71 (term -> nox error .) ] + yacc.py:2700: + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: expr shift and go to state 113 + yacc.py:2714: block shift and go to state 114 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: - yacc.py:2562:state 134 + yacc.py:2562:state 130 yacc.py:2563: - yacc.py:2565: (80) factor -> factor dot . func_call - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2565: (72) base_call -> factor arroba . type dot func_call + yacc.py:2565: (75) base_call -> factor arroba . error dot func_call yacc.py:2566: - yacc.py:2687: id shift and go to state 177 - yacc.py:2687: error shift and go to state 178 + yacc.py:2687: type shift and go to state 184 + yacc.py:2687: error shift and go to state 185 yacc.py:2689: - yacc.py:2714: func_call shift and go to state 176 yacc.py:2561: - yacc.py:2562:state 135 + yacc.py:2562:state 131 yacc.py:2563: - yacc.py:2565: (79) factor -> opar expr . cpar + yacc.py:2565: (81) factor -> factor dot . func_call + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar yacc.py:2566: - yacc.py:2687: cpar shift and go to state 179 + yacc.py:2687: id shift and go to state 187 + yacc.py:2687: error shift and go to state 188 yacc.py:2689: + yacc.py:2714: func_call shift and go to state 186 yacc.py:2561: - yacc.py:2562:state 136 + yacc.py:2562:state 132 yacc.py:2563: - yacc.py:2565: (84) atom -> new type . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 84 (atom -> new type .) - yacc.py:2687: dot reduce using rule 84 (atom -> new type .) - yacc.py:2687: star reduce using rule 84 (atom -> new type .) - yacc.py:2687: div reduce using rule 84 (atom -> new type .) - yacc.py:2687: plus reduce using rule 84 (atom -> new type .) - yacc.py:2687: minus reduce using rule 84 (atom -> new type .) - yacc.py:2687: less reduce using rule 84 (atom -> new type .) - yacc.py:2687: lesseq reduce using rule 84 (atom -> new type .) - yacc.py:2687: equal reduce using rule 84 (atom -> new type .) - yacc.py:2687: semi reduce using rule 84 (atom -> new type .) - yacc.py:2687: of reduce using rule 84 (atom -> new type .) - yacc.py:2687: then reduce using rule 84 (atom -> new type .) - yacc.py:2687: loop reduce using rule 84 (atom -> new type .) - yacc.py:2687: cpar reduce using rule 84 (atom -> new type .) - yacc.py:2687: comma reduce using rule 84 (atom -> new type .) - yacc.py:2687: in reduce using rule 84 (atom -> new type .) - yacc.py:2687: else reduce using rule 84 (atom -> new type .) - yacc.py:2687: pool reduce using rule 84 (atom -> new type .) - yacc.py:2687: error reduce using rule 84 (atom -> new type .) - yacc.py:2687: ccur reduce using rule 84 (atom -> new type .) - yacc.py:2687: fi reduce using rule 84 (atom -> new type .) + yacc.py:2565: (77) factor -> opar expr . cpar + yacc.py:2565: (78) factor -> opar expr . error + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 189 + yacc.py:2687: error shift and go to state 190 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 137 + yacc.py:2562:state 133 + yacc.py:2563: + yacc.py:2565: (80) factor -> opar error . cpar + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 191 + yacc.py:2687: arroba shift and go to state 112 + yacc.py:2687: opar shift and go to state 115 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: error shift and go to state 111 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: expr shift and go to state 113 + yacc.py:2714: block shift and go to state 114 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: atom shift and go to state 83 + yacc.py:2561: + yacc.py:2562:state 134 + yacc.py:2563: + yacc.py:2565: (82) factor -> not expr . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 82 (factor -> not expr .) + yacc.py:2687: dot reduce using rule 82 (factor -> not expr .) + yacc.py:2687: star reduce using rule 82 (factor -> not expr .) + yacc.py:2687: div reduce using rule 82 (factor -> not expr .) + yacc.py:2687: plus reduce using rule 82 (factor -> not expr .) + yacc.py:2687: minus reduce using rule 82 (factor -> not expr .) + yacc.py:2687: less reduce using rule 82 (factor -> not expr .) + yacc.py:2687: lesseq reduce using rule 82 (factor -> not expr .) + yacc.py:2687: equal reduce using rule 82 (factor -> not expr .) + yacc.py:2687: semi reduce using rule 82 (factor -> not expr .) + yacc.py:2687: cpar reduce using rule 82 (factor -> not expr .) + yacc.py:2687: error reduce using rule 82 (factor -> not expr .) + yacc.py:2687: of reduce using rule 82 (factor -> not expr .) + yacc.py:2687: then reduce using rule 82 (factor -> not expr .) + yacc.py:2687: loop reduce using rule 82 (factor -> not expr .) + yacc.py:2687: comma reduce using rule 82 (factor -> not expr .) + yacc.py:2687: in reduce using rule 82 (factor -> not expr .) + yacc.py:2687: else reduce using rule 82 (factor -> not expr .) + yacc.py:2687: pool reduce using rule 82 (factor -> not expr .) + yacc.py:2687: ccur reduce using rule 82 (factor -> not expr .) + yacc.py:2687: fi reduce using rule 82 (factor -> not expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 135 yacc.py:2563: - yacc.py:2565: (85) atom -> new error . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 85 (atom -> new error .) - yacc.py:2687: dot reduce using rule 85 (atom -> new error .) - yacc.py:2687: star reduce using rule 85 (atom -> new error .) - yacc.py:2687: div reduce using rule 85 (atom -> new error .) - yacc.py:2687: plus reduce using rule 85 (atom -> new error .) - yacc.py:2687: minus reduce using rule 85 (atom -> new error .) - yacc.py:2687: less reduce using rule 85 (atom -> new error .) - yacc.py:2687: lesseq reduce using rule 85 (atom -> new error .) - yacc.py:2687: equal reduce using rule 85 (atom -> new error .) - yacc.py:2687: semi reduce using rule 85 (atom -> new error .) - yacc.py:2687: of reduce using rule 85 (atom -> new error .) - yacc.py:2687: then reduce using rule 85 (atom -> new error .) - yacc.py:2687: loop reduce using rule 85 (atom -> new error .) - yacc.py:2687: cpar reduce using rule 85 (atom -> new error .) - yacc.py:2687: comma reduce using rule 85 (atom -> new error .) - yacc.py:2687: in reduce using rule 85 (atom -> new error .) - yacc.py:2687: else reduce using rule 85 (atom -> new error .) - yacc.py:2687: pool reduce using rule 85 (atom -> new error .) - yacc.py:2687: error reduce using rule 85 (atom -> new error .) - yacc.py:2687: ccur reduce using rule 85 (atom -> new error .) - yacc.py:2687: fi reduce using rule 85 (atom -> new error .) + yacc.py:2565: (84) factor -> let let_list . in expr + yacc.py:2565: (86) factor -> let let_list . in error + yacc.py:2565: (87) factor -> let let_list . error expr + yacc.py:2566: + yacc.py:2687: in shift and go to state 192 + yacc.py:2687: error shift and go to state 193 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 136 + yacc.py:2563: + yacc.py:2565: (85) factor -> let error . in expr + yacc.py:2565: (40) let_list -> error . let_list + yacc.py:2565: (41) let_list -> error . + yacc.py:2565: (38) let_list -> . let_assign + yacc.py:2565: (39) let_list -> . let_assign comma let_list + yacc.py:2565: (40) let_list -> . error let_list + yacc.py:2565: (41) let_list -> . error + yacc.py:2565: (42) let_assign -> . param larrow expr + yacc.py:2565: (43) let_assign -> . param + yacc.py:2565: (37) param -> . id colon type + yacc.py:2566: + yacc.py:2609: ! shift/reduce conflict for in resolved as shift + yacc.py:2666: ! shift/reduce conflict for error resolved as shift + yacc.py:2687: in shift and go to state 195 + yacc.py:2687: error shift and go to state 194 + yacc.py:2687: id shift and go to state 47 + yacc.py:2689: + yacc.py:2696: ! in [ reduce using rule 41 (let_list -> error .) ] + yacc.py:2696: ! error [ reduce using rule 41 (let_list -> error .) ] + yacc.py:2700: + yacc.py:2714: let_list shift and go to state 196 + yacc.py:2714: let_assign shift and go to state 137 + yacc.py:2714: param shift and go to state 138 + yacc.py:2561: + yacc.py:2562:state 137 + yacc.py:2563: + yacc.py:2565: (38) let_list -> let_assign . + yacc.py:2565: (39) let_list -> let_assign . comma let_list + yacc.py:2566: + yacc.py:2687: in reduce using rule 38 (let_list -> let_assign .) + yacc.py:2687: error reduce using rule 38 (let_list -> let_assign .) + yacc.py:2687: comma shift and go to state 197 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 138 yacc.py:2563: - yacc.py:2565: (86) atom -> ocur block . ccur + yacc.py:2565: (42) let_assign -> param . larrow expr + yacc.py:2565: (43) let_assign -> param . yacc.py:2566: - yacc.py:2687: ccur shift and go to state 180 + yacc.py:2687: larrow shift and go to state 198 + yacc.py:2687: comma reduce using rule 43 (let_assign -> param .) + yacc.py:2687: in reduce using rule 43 (let_assign -> param .) + yacc.py:2687: error reduce using rule 43 (let_assign -> param .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 139 yacc.py:2563: - yacc.py:2565: (90) block -> expr . semi - yacc.py:2565: (91) block -> expr . semi block + yacc.py:2565: (88) factor -> case expr . of cases_list esac + yacc.py:2565: (90) factor -> case expr . of error esac + yacc.py:2565: (91) factor -> case expr . error cases_list esac + yacc.py:2565: (92) factor -> case expr . of cases_list error yacc.py:2566: - yacc.py:2687: semi shift and go to state 181 + yacc.py:2687: of shift and go to state 199 + yacc.py:2687: error shift and go to state 200 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 140 yacc.py:2563: - yacc.py:2565: (92) block -> error . block - yacc.py:2565: (93) block -> error . - yacc.py:2565: (76) base_call -> error . arroba type dot func_call - yacc.py:2565: (96) func_call -> error . opar args cpar - yacc.py:2565: (90) block -> . expr semi - yacc.py:2565: (91) block -> . expr semi block - yacc.py:2565: (92) block -> . error block - yacc.py:2565: (93) block -> . error - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 93 (block -> error .) - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 183 - yacc.py:2687: error shift and go to state 140 - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 + yacc.py:2565: (89) factor -> case error . of cases_list esac + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: of shift and go to state 201 + yacc.py:2687: arroba shift and go to state 112 + yacc.py:2687: opar shift and go to state 115 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: error shift and go to state 111 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 yacc.py:2687: num shift and go to state 90 yacc.py:2687: new shift and go to state 91 yacc.py:2687: ocur shift and go to state 92 @@ -3266,442 +4706,637 @@ yacc.py:2687: false shift and go to state 94 yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: block shift and go to state 182 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: expr shift and go to state 139 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: atom shift and go to state 88 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: expr shift and go to state 113 + yacc.py:2714: block shift and go to state 114 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 141 yacc.py:2563: - yacc.py:2565: (24) def_func -> error opar formals cpar colon type . ocur expr ccur + yacc.py:2565: (93) factor -> if expr . then expr else expr fi + yacc.py:2565: (95) factor -> if expr . then error else expr fi + yacc.py:2565: (96) factor -> if expr . then expr else error fi + yacc.py:2565: (97) factor -> if expr . error expr else expr fi + yacc.py:2565: (98) factor -> if expr . then expr error error expr fi + yacc.py:2565: (99) factor -> if expr . then expr error expr fi + yacc.py:2565: (100) factor -> if expr . then expr else expr error yacc.py:2566: - yacc.py:2687: ocur shift and go to state 184 + yacc.py:2687: then shift and go to state 202 + yacc.py:2687: error shift and go to state 203 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 142 yacc.py:2563: - yacc.py:2565: (23) def_func -> id opar formals cpar colon type . ocur expr ccur - yacc.py:2565: (27) def_func -> id opar formals cpar colon type . ocur error ccur - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 185 + yacc.py:2565: (94) factor -> if error . then expr else expr fi + yacc.py:2565: (101) factor -> if error . fi + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: then shift and go to state 204 + yacc.py:2687: fi shift and go to state 205 + yacc.py:2687: arroba shift and go to state 112 + yacc.py:2687: opar shift and go to state 115 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: error shift and go to state 111 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2714: expr shift and go to state 113 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: block shift and go to state 114 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 143 yacc.py:2563: - yacc.py:2565: (26) def_func -> id opar formals cpar colon error . ocur expr ccur + yacc.py:2565: (102) factor -> while expr . loop expr pool + yacc.py:2565: (104) factor -> while expr . loop error pool + yacc.py:2565: (105) factor -> while expr . loop expr error + yacc.py:2565: (106) factor -> while expr . error expr loop expr pool + yacc.py:2565: (107) factor -> while expr . error expr pool yacc.py:2566: - yacc.py:2687: ocur shift and go to state 186 + yacc.py:2687: loop shift and go to state 206 + yacc.py:2687: error shift and go to state 207 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 144 yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar error cpar colon type . ocur expr ccur - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 187 + yacc.py:2565: (103) factor -> while error . loop expr pool + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: loop shift and go to state 208 + yacc.py:2687: arroba shift and go to state 112 + yacc.py:2687: opar shift and go to state 115 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: error shift and go to state 111 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2714: expr shift and go to state 113 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: block shift and go to state 114 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 145 yacc.py:2563: - yacc.py:2565: (76) base_call -> error arroba type . dot func_call - yacc.py:2566: - yacc.py:2687: dot shift and go to state 188 + yacc.py:2565: (110) atom -> new type . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 110 (atom -> new type .) + yacc.py:2687: dot reduce using rule 110 (atom -> new type .) + yacc.py:2687: star reduce using rule 110 (atom -> new type .) + yacc.py:2687: div reduce using rule 110 (atom -> new type .) + yacc.py:2687: plus reduce using rule 110 (atom -> new type .) + yacc.py:2687: minus reduce using rule 110 (atom -> new type .) + yacc.py:2687: less reduce using rule 110 (atom -> new type .) + yacc.py:2687: lesseq reduce using rule 110 (atom -> new type .) + yacc.py:2687: equal reduce using rule 110 (atom -> new type .) + yacc.py:2687: semi reduce using rule 110 (atom -> new type .) + yacc.py:2687: cpar reduce using rule 110 (atom -> new type .) + yacc.py:2687: error reduce using rule 110 (atom -> new type .) + yacc.py:2687: of reduce using rule 110 (atom -> new type .) + yacc.py:2687: then reduce using rule 110 (atom -> new type .) + yacc.py:2687: loop reduce using rule 110 (atom -> new type .) + yacc.py:2687: comma reduce using rule 110 (atom -> new type .) + yacc.py:2687: in reduce using rule 110 (atom -> new type .) + yacc.py:2687: else reduce using rule 110 (atom -> new type .) + yacc.py:2687: pool reduce using rule 110 (atom -> new type .) + yacc.py:2687: ccur reduce using rule 110 (atom -> new type .) + yacc.py:2687: fi reduce using rule 110 (atom -> new type .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 146 yacc.py:2563: - yacc.py:2565: (101) arg_list -> error . arg_list - yacc.py:2565: (76) base_call -> error . arroba type dot func_call - yacc.py:2565: (96) func_call -> error . opar args cpar - yacc.py:2565: (99) arg_list -> . expr - yacc.py:2565: (100) arg_list -> . expr comma arg_list - yacc.py:2565: (101) arg_list -> . error arg_list - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 183 - yacc.py:2687: error shift and go to state 146 - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 + yacc.py:2565: (111) atom -> new error . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 111 (atom -> new error .) + yacc.py:2687: dot reduce using rule 111 (atom -> new error .) + yacc.py:2687: star reduce using rule 111 (atom -> new error .) + yacc.py:2687: div reduce using rule 111 (atom -> new error .) + yacc.py:2687: plus reduce using rule 111 (atom -> new error .) + yacc.py:2687: minus reduce using rule 111 (atom -> new error .) + yacc.py:2687: less reduce using rule 111 (atom -> new error .) + yacc.py:2687: lesseq reduce using rule 111 (atom -> new error .) + yacc.py:2687: equal reduce using rule 111 (atom -> new error .) + yacc.py:2687: semi reduce using rule 111 (atom -> new error .) + yacc.py:2687: cpar reduce using rule 111 (atom -> new error .) + yacc.py:2687: error reduce using rule 111 (atom -> new error .) + yacc.py:2687: of reduce using rule 111 (atom -> new error .) + yacc.py:2687: then reduce using rule 111 (atom -> new error .) + yacc.py:2687: loop reduce using rule 111 (atom -> new error .) + yacc.py:2687: comma reduce using rule 111 (atom -> new error .) + yacc.py:2687: in reduce using rule 111 (atom -> new error .) + yacc.py:2687: else reduce using rule 111 (atom -> new error .) + yacc.py:2687: pool reduce using rule 111 (atom -> new error .) + yacc.py:2687: ccur reduce using rule 111 (atom -> new error .) + yacc.py:2687: fi reduce using rule 111 (atom -> new error .) yacc.py:2689: - yacc.py:2714: arg_list shift and go to state 189 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: expr shift and go to state 150 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: atom shift and go to state 88 yacc.py:2561: yacc.py:2562:state 147 yacc.py:2563: - yacc.py:2565: (96) func_call -> error opar args . cpar + yacc.py:2565: (112) atom -> ocur block . ccur + yacc.py:2565: (115) atom -> ocur block . error yacc.py:2566: - yacc.py:2687: cpar shift and go to state 190 + yacc.py:2687: ccur shift and go to state 209 + yacc.py:2687: error shift and go to state 210 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 148 yacc.py:2563: - yacc.py:2565: (97) args -> arg_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 97 (args -> arg_list .) + yacc.py:2565: (114) atom -> ocur error . ccur + yacc.py:2565: (121) block -> error . block + yacc.py:2565: (122) block -> error . semi + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 211 + yacc.py:2687: semi shift and go to state 155 + yacc.py:2687: arroba shift and go to state 112 + yacc.py:2687: opar shift and go to state 115 + yacc.py:2687: error shift and go to state 111 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2714: block shift and go to state 154 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: expr shift and go to state 113 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 149 yacc.py:2563: - yacc.py:2565: (98) args -> arg_list_empty . + yacc.py:2565: (119) block -> expr . semi + yacc.py:2565: (120) block -> expr . semi block yacc.py:2566: - yacc.py:2687: cpar reduce using rule 98 (args -> arg_list_empty .) + yacc.py:2687: semi shift and go to state 158 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 150 yacc.py:2563: - yacc.py:2565: (99) arg_list -> expr . - yacc.py:2565: (100) arg_list -> expr . comma arg_list + yacc.py:2565: (26) def_func -> error opar formals cpar colon type . ocur expr ccur yacc.py:2566: - yacc.py:2687: cpar reduce using rule 99 (arg_list -> expr .) - yacc.py:2687: comma shift and go to state 191 + yacc.py:2687: ocur shift and go to state 212 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 151 yacc.py:2563: - yacc.py:2565: (102) arg_list_empty -> epsilon . + yacc.py:2565: (25) def_func -> id opar formals cpar colon type . ocur expr ccur + yacc.py:2565: (29) def_func -> id opar formals cpar colon type . ocur error ccur yacc.py:2566: - yacc.py:2687: cpar reduce using rule 102 (arg_list_empty -> epsilon .) + yacc.py:2687: ocur shift and go to state 213 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 152 yacc.py:2563: - yacc.py:2565: (35) expr -> let let_list in . expr - yacc.py:2565: (37) expr -> let let_list in . error - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2565: (28) def_func -> id opar formals cpar colon error . ocur expr ccur yacc.py:2566: - yacc.py:2687: error shift and go to state 193 - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: opar shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 + yacc.py:2687: ocur shift and go to state 214 yacc.py:2689: - yacc.py:2714: expr shift and go to state 192 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 yacc.py:2561: yacc.py:2562:state 153 yacc.py:2563: - yacc.py:2565: (52) let_list -> error . let_list - yacc.py:2565: (50) let_list -> . let_assign - yacc.py:2565: (51) let_list -> . let_assign comma let_list - yacc.py:2565: (52) let_list -> . error let_list - yacc.py:2565: (53) let_assign -> . param larrow expr - yacc.py:2565: (54) let_assign -> . param - yacc.py:2565: (34) param -> . id colon type + yacc.py:2565: (27) def_func -> id opar error cpar colon type . ocur expr ccur yacc.py:2566: - yacc.py:2687: error shift and go to state 153 - yacc.py:2687: id shift and go to state 48 + yacc.py:2687: ocur shift and go to state 215 yacc.py:2689: - yacc.py:2714: let_list shift and go to state 155 - yacc.py:2714: let_assign shift and go to state 112 - yacc.py:2714: param shift and go to state 113 yacc.py:2561: yacc.py:2562:state 154 yacc.py:2563: - yacc.py:2565: (36) expr -> let error in . expr - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: error shift and go to state 71 - yacc.py:2687: opar shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 + yacc.py:2565: (121) block -> error block . + yacc.py:2565: (113) atom -> error block . ccur + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for ccur resolved as shift + yacc.py:2687: error reduce using rule 121 (block -> error block .) + yacc.py:2687: ccur shift and go to state 159 yacc.py:2689: - yacc.py:2714: expr shift and go to state 194 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 + yacc.py:2696: ! ccur [ reduce using rule 121 (block -> error block .) ] + yacc.py:2700: yacc.py:2561: yacc.py:2562:state 155 yacc.py:2563: - yacc.py:2565: (52) let_list -> error let_list . + yacc.py:2565: (122) block -> error semi . yacc.py:2566: - yacc.py:2687: in reduce using rule 52 (let_list -> error let_list .) + yacc.py:2687: ccur reduce using rule 122 (block -> error semi .) + yacc.py:2687: error reduce using rule 122 (block -> error semi .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 156 yacc.py:2563: - yacc.py:2565: (51) let_list -> let_assign comma . let_list - yacc.py:2565: (50) let_list -> . let_assign - yacc.py:2565: (51) let_list -> . let_assign comma let_list - yacc.py:2565: (52) let_list -> . error let_list - yacc.py:2565: (53) let_assign -> . param larrow expr - yacc.py:2565: (54) let_assign -> . param - yacc.py:2565: (34) param -> . id colon type + yacc.py:2565: (74) base_call -> error arroba type . dot func_call yacc.py:2566: - yacc.py:2687: error shift and go to state 153 - yacc.py:2687: id shift and go to state 48 + yacc.py:2687: dot shift and go to state 216 yacc.py:2689: - yacc.py:2714: let_assign shift and go to state 112 - yacc.py:2714: let_list shift and go to state 195 - yacc.py:2714: param shift and go to state 113 yacc.py:2561: yacc.py:2562:state 157 yacc.py:2563: - yacc.py:2565: (53) let_assign -> param larrow . expr - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: error shift and go to state 71 - yacc.py:2687: opar shift and go to state 89 + yacc.py:2565: (79) factor -> error expr cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 79 (factor -> error expr cpar .) + yacc.py:2687: dot reduce using rule 79 (factor -> error expr cpar .) + yacc.py:2687: star reduce using rule 79 (factor -> error expr cpar .) + yacc.py:2687: div reduce using rule 79 (factor -> error expr cpar .) + yacc.py:2687: plus reduce using rule 79 (factor -> error expr cpar .) + yacc.py:2687: minus reduce using rule 79 (factor -> error expr cpar .) + yacc.py:2687: less reduce using rule 79 (factor -> error expr cpar .) + yacc.py:2687: lesseq reduce using rule 79 (factor -> error expr cpar .) + yacc.py:2687: equal reduce using rule 79 (factor -> error expr cpar .) + yacc.py:2687: semi reduce using rule 79 (factor -> error expr cpar .) + yacc.py:2687: cpar reduce using rule 79 (factor -> error expr cpar .) + yacc.py:2687: error reduce using rule 79 (factor -> error expr cpar .) + yacc.py:2687: of reduce using rule 79 (factor -> error expr cpar .) + yacc.py:2687: then reduce using rule 79 (factor -> error expr cpar .) + yacc.py:2687: loop reduce using rule 79 (factor -> error expr cpar .) + yacc.py:2687: comma reduce using rule 79 (factor -> error expr cpar .) + yacc.py:2687: in reduce using rule 79 (factor -> error expr cpar .) + yacc.py:2687: else reduce using rule 79 (factor -> error expr cpar .) + yacc.py:2687: pool reduce using rule 79 (factor -> error expr cpar .) + yacc.py:2687: ccur reduce using rule 79 (factor -> error expr cpar .) + yacc.py:2687: fi reduce using rule 79 (factor -> error expr cpar .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 158 + yacc.py:2563: + yacc.py:2565: (119) block -> expr semi . + yacc.py:2565: (120) block -> expr semi . block + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for error resolved as shift + yacc.py:2687: ccur reduce using rule 119 (block -> expr semi .) + yacc.py:2687: error shift and go to state 111 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 yacc.py:2687: num shift and go to state 90 yacc.py:2687: new shift and go to state 91 yacc.py:2687: ocur shift and go to state 92 @@ -3709,110 +5344,146 @@ yacc.py:2687: false shift and go to state 94 yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: expr shift and go to state 196 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 - yacc.py:2561: - yacc.py:2562:state 158 - yacc.py:2563: - yacc.py:2565: (38) expr -> case expr of . cases_list esac - yacc.py:2565: (40) expr -> case expr of . error esac - yacc.py:2565: (55) cases_list -> . casep semi - yacc.py:2565: (56) cases_list -> . casep semi cases_list - yacc.py:2565: (57) cases_list -> . error cases_list - yacc.py:2565: (58) casep -> . id colon type rarrow expr - yacc.py:2566: - yacc.py:2687: error shift and go to state 198 - yacc.py:2687: id shift and go to state 200 - yacc.py:2689: - yacc.py:2714: cases_list shift and go to state 197 - yacc.py:2714: casep shift and go to state 199 + yacc.py:2696: ! error [ reduce using rule 119 (block -> expr semi .) ] + yacc.py:2700: + yacc.py:2714: expr shift and go to state 149 + yacc.py:2714: block shift and go to state 217 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 159 yacc.py:2563: - yacc.py:2565: (39) expr -> case error of . cases_list esac - yacc.py:2565: (55) cases_list -> . casep semi - yacc.py:2565: (56) cases_list -> . casep semi cases_list - yacc.py:2565: (57) cases_list -> . error cases_list - yacc.py:2565: (58) casep -> . id colon type rarrow expr - yacc.py:2566: - yacc.py:2687: error shift and go to state 201 - yacc.py:2687: id shift and go to state 200 + yacc.py:2565: (113) atom -> error block ccur . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 113 (atom -> error block ccur .) + yacc.py:2687: dot reduce using rule 113 (atom -> error block ccur .) + yacc.py:2687: star reduce using rule 113 (atom -> error block ccur .) + yacc.py:2687: div reduce using rule 113 (atom -> error block ccur .) + yacc.py:2687: plus reduce using rule 113 (atom -> error block ccur .) + yacc.py:2687: minus reduce using rule 113 (atom -> error block ccur .) + yacc.py:2687: less reduce using rule 113 (atom -> error block ccur .) + yacc.py:2687: lesseq reduce using rule 113 (atom -> error block ccur .) + yacc.py:2687: equal reduce using rule 113 (atom -> error block ccur .) + yacc.py:2687: semi reduce using rule 113 (atom -> error block ccur .) + yacc.py:2687: cpar reduce using rule 113 (atom -> error block ccur .) + yacc.py:2687: error reduce using rule 113 (atom -> error block ccur .) + yacc.py:2687: of reduce using rule 113 (atom -> error block ccur .) + yacc.py:2687: then reduce using rule 113 (atom -> error block ccur .) + yacc.py:2687: loop reduce using rule 113 (atom -> error block ccur .) + yacc.py:2687: comma reduce using rule 113 (atom -> error block ccur .) + yacc.py:2687: in reduce using rule 113 (atom -> error block ccur .) + yacc.py:2687: else reduce using rule 113 (atom -> error block ccur .) + yacc.py:2687: pool reduce using rule 113 (atom -> error block ccur .) + yacc.py:2687: ccur reduce using rule 113 (atom -> error block ccur .) + yacc.py:2687: fi reduce using rule 113 (atom -> error block ccur .) yacc.py:2689: - yacc.py:2714: cases_list shift and go to state 202 - yacc.py:2714: casep shift and go to state 199 yacc.py:2561: yacc.py:2562:state 160 yacc.py:2563: - yacc.py:2565: (41) expr -> if expr then . expr else expr fi - yacc.py:2565: (43) expr -> if expr then . error else expr fi - yacc.py:2565: (44) expr -> if expr then . expr else error fi - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 204 - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: opar shift and go to state 89 + yacc.py:2565: (80) factor -> opar error . cpar + yacc.py:2565: (130) arg_list -> error . arg_list + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (128) arg_list -> . expr + yacc.py:2565: (129) arg_list -> . expr comma arg_list + yacc.py:2565: (130) arg_list -> . error arg_list + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 191 + yacc.py:2687: arroba shift and go to state 112 + yacc.py:2687: opar shift and go to state 115 + yacc.py:2687: error shift and go to state 218 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 yacc.py:2687: num shift and go to state 90 yacc.py:2687: new shift and go to state 91 yacc.py:2687: ocur shift and go to state 92 @@ -3820,730 +5491,1231 @@ yacc.py:2687: false shift and go to state 94 yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: expr shift and go to state 203 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 + yacc.py:2714: arg_list shift and go to state 219 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: expr shift and go to state 220 + yacc.py:2714: block shift and go to state 114 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 161 yacc.py:2563: - yacc.py:2565: (42) expr -> if error then . expr else expr fi - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: error shift and go to state 71 - yacc.py:2687: opar shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 + yacc.py:2565: (125) func_call -> error opar args . cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 221 yacc.py:2689: - yacc.py:2714: expr shift and go to state 205 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 yacc.py:2561: yacc.py:2562:state 162 yacc.py:2563: - yacc.py:2565: (45) expr -> while expr loop . expr pool - yacc.py:2565: (47) expr -> while expr loop . error pool - yacc.py:2565: (48) expr -> while expr loop . expr error - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2565: (77) factor -> opar expr . cpar + yacc.py:2565: (78) factor -> opar expr . error + yacc.py:2565: (128) arg_list -> expr . + yacc.py:2565: (129) arg_list -> expr . comma arg_list yacc.py:2566: - yacc.py:2687: error shift and go to state 207 - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: opar shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 + yacc.py:2609: ! shift/reduce conflict for cpar resolved as shift + yacc.py:2687: cpar shift and go to state 189 + yacc.py:2687: error shift and go to state 190 + yacc.py:2687: comma shift and go to state 222 yacc.py:2689: - yacc.py:2714: expr shift and go to state 206 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 + yacc.py:2696: ! cpar [ reduce using rule 128 (arg_list -> expr .) ] + yacc.py:2700: yacc.py:2561: yacc.py:2562:state 163 yacc.py:2563: - yacc.py:2565: (46) expr -> while error loop . expr pool - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: error shift and go to state 71 - yacc.py:2687: opar shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 + yacc.py:2565: (126) args -> arg_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 126 (args -> arg_list .) yacc.py:2689: - yacc.py:2714: expr shift and go to state 208 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 yacc.py:2561: yacc.py:2562:state 164 yacc.py:2563: - yacc.py:2565: (59) arith -> id larrow expr . + yacc.py:2565: (127) args -> arg_list_empty . yacc.py:2566: - yacc.py:2687: semi reduce using rule 59 (arith -> id larrow expr .) - yacc.py:2687: of reduce using rule 59 (arith -> id larrow expr .) - yacc.py:2687: then reduce using rule 59 (arith -> id larrow expr .) - yacc.py:2687: loop reduce using rule 59 (arith -> id larrow expr .) - yacc.py:2687: cpar reduce using rule 59 (arith -> id larrow expr .) - yacc.py:2687: comma reduce using rule 59 (arith -> id larrow expr .) - yacc.py:2687: in reduce using rule 59 (arith -> id larrow expr .) - yacc.py:2687: else reduce using rule 59 (arith -> id larrow expr .) - yacc.py:2687: pool reduce using rule 59 (arith -> id larrow expr .) - yacc.py:2687: error reduce using rule 59 (arith -> id larrow expr .) - yacc.py:2687: ccur reduce using rule 59 (arith -> id larrow expr .) - yacc.py:2687: fi reduce using rule 59 (arith -> id larrow expr .) + yacc.py:2687: cpar reduce using rule 127 (args -> arg_list_empty .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 165 yacc.py:2563: - yacc.py:2565: (94) func_call -> id opar args . cpar + yacc.py:2565: (131) arg_list_empty -> epsilon . yacc.py:2566: - yacc.py:2687: cpar shift and go to state 209 + yacc.py:2687: cpar reduce using rule 131 (arg_list_empty -> epsilon .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 166 yacc.py:2563: - yacc.py:2565: (95) func_call -> id opar error . cpar - yacc.py:2565: (101) arg_list -> error . arg_list - yacc.py:2565: (76) base_call -> error . arroba type dot func_call - yacc.py:2565: (96) func_call -> error . opar args cpar - yacc.py:2565: (99) arg_list -> . expr - yacc.py:2565: (100) arg_list -> . expr comma arg_list - yacc.py:2565: (101) arg_list -> . error arg_list - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 210 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 183 - yacc.py:2687: error shift and go to state 146 - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 + yacc.py:2565: (49) expr -> id larrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 49 (expr -> id larrow expr .) + yacc.py:2687: cpar reduce using rule 49 (expr -> id larrow expr .) + yacc.py:2687: error reduce using rule 49 (expr -> id larrow expr .) + yacc.py:2687: star reduce using rule 49 (expr -> id larrow expr .) + yacc.py:2687: div reduce using rule 49 (expr -> id larrow expr .) + yacc.py:2687: plus reduce using rule 49 (expr -> id larrow expr .) + yacc.py:2687: minus reduce using rule 49 (expr -> id larrow expr .) + yacc.py:2687: less reduce using rule 49 (expr -> id larrow expr .) + yacc.py:2687: lesseq reduce using rule 49 (expr -> id larrow expr .) + yacc.py:2687: equal reduce using rule 49 (expr -> id larrow expr .) + yacc.py:2687: arroba reduce using rule 49 (expr -> id larrow expr .) + yacc.py:2687: dot reduce using rule 49 (expr -> id larrow expr .) + yacc.py:2687: of reduce using rule 49 (expr -> id larrow expr .) + yacc.py:2687: then reduce using rule 49 (expr -> id larrow expr .) + yacc.py:2687: loop reduce using rule 49 (expr -> id larrow expr .) + yacc.py:2687: comma reduce using rule 49 (expr -> id larrow expr .) + yacc.py:2687: in reduce using rule 49 (expr -> id larrow expr .) + yacc.py:2687: else reduce using rule 49 (expr -> id larrow expr .) + yacc.py:2687: pool reduce using rule 49 (expr -> id larrow expr .) + yacc.py:2687: ccur reduce using rule 49 (expr -> id larrow expr .) + yacc.py:2687: fi reduce using rule 49 (expr -> id larrow expr .) yacc.py:2689: - yacc.py:2714: arg_list shift and go to state 189 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: expr shift and go to state 150 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: atom shift and go to state 88 yacc.py:2561: yacc.py:2562:state 167 yacc.py:2563: - yacc.py:2565: (62) comp -> comp less op . - yacc.py:2565: (66) op -> op . plus term - yacc.py:2565: (67) op -> op . minus term - yacc.py:2566: - yacc.py:2687: less reduce using rule 62 (comp -> comp less op .) - yacc.py:2687: lesseq reduce using rule 62 (comp -> comp less op .) - yacc.py:2687: equal reduce using rule 62 (comp -> comp less op .) - yacc.py:2687: semi reduce using rule 62 (comp -> comp less op .) - yacc.py:2687: of reduce using rule 62 (comp -> comp less op .) - yacc.py:2687: then reduce using rule 62 (comp -> comp less op .) - yacc.py:2687: loop reduce using rule 62 (comp -> comp less op .) - yacc.py:2687: cpar reduce using rule 62 (comp -> comp less op .) - yacc.py:2687: comma reduce using rule 62 (comp -> comp less op .) - yacc.py:2687: in reduce using rule 62 (comp -> comp less op .) - yacc.py:2687: else reduce using rule 62 (comp -> comp less op .) - yacc.py:2687: pool reduce using rule 62 (comp -> comp less op .) - yacc.py:2687: error reduce using rule 62 (comp -> comp less op .) - yacc.py:2687: ccur reduce using rule 62 (comp -> comp less op .) - yacc.py:2687: fi reduce using rule 62 (comp -> comp less op .) - yacc.py:2687: plus shift and go to state 127 - yacc.py:2687: minus shift and go to state 128 + yacc.py:2565: (123) func_call -> id opar args . cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 223 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 168 yacc.py:2563: - yacc.py:2565: (63) comp -> comp lesseq op . - yacc.py:2565: (66) op -> op . plus term - yacc.py:2565: (67) op -> op . minus term - yacc.py:2566: - yacc.py:2687: less reduce using rule 63 (comp -> comp lesseq op .) - yacc.py:2687: lesseq reduce using rule 63 (comp -> comp lesseq op .) - yacc.py:2687: equal reduce using rule 63 (comp -> comp lesseq op .) - yacc.py:2687: semi reduce using rule 63 (comp -> comp lesseq op .) - yacc.py:2687: of reduce using rule 63 (comp -> comp lesseq op .) - yacc.py:2687: then reduce using rule 63 (comp -> comp lesseq op .) - yacc.py:2687: loop reduce using rule 63 (comp -> comp lesseq op .) - yacc.py:2687: cpar reduce using rule 63 (comp -> comp lesseq op .) - yacc.py:2687: comma reduce using rule 63 (comp -> comp lesseq op .) - yacc.py:2687: in reduce using rule 63 (comp -> comp lesseq op .) - yacc.py:2687: else reduce using rule 63 (comp -> comp lesseq op .) - yacc.py:2687: pool reduce using rule 63 (comp -> comp lesseq op .) - yacc.py:2687: error reduce using rule 63 (comp -> comp lesseq op .) - yacc.py:2687: ccur reduce using rule 63 (comp -> comp lesseq op .) - yacc.py:2687: fi reduce using rule 63 (comp -> comp lesseq op .) - yacc.py:2687: plus shift and go to state 127 - yacc.py:2687: minus shift and go to state 128 + yacc.py:2565: (124) func_call -> id opar error . cpar + yacc.py:2565: (130) arg_list -> error . arg_list + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (128) arg_list -> . expr + yacc.py:2565: (129) arg_list -> . expr comma arg_list + yacc.py:2565: (130) arg_list -> . error arg_list + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 224 + yacc.py:2687: arroba shift and go to state 112 + yacc.py:2687: opar shift and go to state 115 + yacc.py:2687: error shift and go to state 218 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2714: arg_list shift and go to state 219 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: expr shift and go to state 220 + yacc.py:2714: block shift and go to state 114 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 169 yacc.py:2563: - yacc.py:2565: (64) comp -> comp equal op . - yacc.py:2565: (66) op -> op . plus term - yacc.py:2565: (67) op -> op . minus term - yacc.py:2566: - yacc.py:2687: less reduce using rule 64 (comp -> comp equal op .) - yacc.py:2687: lesseq reduce using rule 64 (comp -> comp equal op .) - yacc.py:2687: equal reduce using rule 64 (comp -> comp equal op .) - yacc.py:2687: semi reduce using rule 64 (comp -> comp equal op .) - yacc.py:2687: of reduce using rule 64 (comp -> comp equal op .) - yacc.py:2687: then reduce using rule 64 (comp -> comp equal op .) - yacc.py:2687: loop reduce using rule 64 (comp -> comp equal op .) - yacc.py:2687: cpar reduce using rule 64 (comp -> comp equal op .) - yacc.py:2687: comma reduce using rule 64 (comp -> comp equal op .) - yacc.py:2687: in reduce using rule 64 (comp -> comp equal op .) - yacc.py:2687: else reduce using rule 64 (comp -> comp equal op .) - yacc.py:2687: pool reduce using rule 64 (comp -> comp equal op .) - yacc.py:2687: error reduce using rule 64 (comp -> comp equal op .) - yacc.py:2687: ccur reduce using rule 64 (comp -> comp equal op .) - yacc.py:2687: fi reduce using rule 64 (comp -> comp equal op .) - yacc.py:2687: plus shift and go to state 127 - yacc.py:2687: minus shift and go to state 128 + yacc.py:2565: (128) arg_list -> expr . + yacc.py:2565: (129) arg_list -> expr . comma arg_list + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 128 (arg_list -> expr .) + yacc.py:2687: comma shift and go to state 222 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 170 yacc.py:2563: - yacc.py:2565: (66) op -> op plus term . - yacc.py:2565: (69) term -> term . star base_call - yacc.py:2565: (70) term -> term . div base_call - yacc.py:2566: - yacc.py:2687: plus reduce using rule 66 (op -> op plus term .) - yacc.py:2687: minus reduce using rule 66 (op -> op plus term .) - yacc.py:2687: less reduce using rule 66 (op -> op plus term .) - yacc.py:2687: lesseq reduce using rule 66 (op -> op plus term .) - yacc.py:2687: equal reduce using rule 66 (op -> op plus term .) - yacc.py:2687: semi reduce using rule 66 (op -> op plus term .) - yacc.py:2687: of reduce using rule 66 (op -> op plus term .) - yacc.py:2687: then reduce using rule 66 (op -> op plus term .) - yacc.py:2687: loop reduce using rule 66 (op -> op plus term .) - yacc.py:2687: cpar reduce using rule 66 (op -> op plus term .) - yacc.py:2687: comma reduce using rule 66 (op -> op plus term .) - yacc.py:2687: in reduce using rule 66 (op -> op plus term .) - yacc.py:2687: else reduce using rule 66 (op -> op plus term .) - yacc.py:2687: pool reduce using rule 66 (op -> op plus term .) - yacc.py:2687: error reduce using rule 66 (op -> op plus term .) - yacc.py:2687: ccur reduce using rule 66 (op -> op plus term .) - yacc.py:2687: fi reduce using rule 66 (op -> op plus term .) - yacc.py:2687: star shift and go to state 129 - yacc.py:2687: div shift and go to state 130 - yacc.py:2689: + yacc.py:2565: (51) comp -> comp less op . + yacc.py:2565: (58) op -> op . plus term + yacc.py:2565: (59) op -> op . minus term + yacc.py:2565: (61) op -> op . plus error + yacc.py:2565: (62) op -> op . minus error + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for plus resolved as shift + yacc.py:2666: ! shift/reduce conflict for minus resolved as shift + yacc.py:2687: less reduce using rule 51 (comp -> comp less op .) + yacc.py:2687: lesseq reduce using rule 51 (comp -> comp less op .) + yacc.py:2687: equal reduce using rule 51 (comp -> comp less op .) + yacc.py:2687: semi reduce using rule 51 (comp -> comp less op .) + yacc.py:2687: cpar reduce using rule 51 (comp -> comp less op .) + yacc.py:2687: error reduce using rule 51 (comp -> comp less op .) + yacc.py:2687: star reduce using rule 51 (comp -> comp less op .) + yacc.py:2687: div reduce using rule 51 (comp -> comp less op .) + yacc.py:2687: arroba reduce using rule 51 (comp -> comp less op .) + yacc.py:2687: dot reduce using rule 51 (comp -> comp less op .) + yacc.py:2687: of reduce using rule 51 (comp -> comp less op .) + yacc.py:2687: then reduce using rule 51 (comp -> comp less op .) + yacc.py:2687: loop reduce using rule 51 (comp -> comp less op .) + yacc.py:2687: comma reduce using rule 51 (comp -> comp less op .) + yacc.py:2687: in reduce using rule 51 (comp -> comp less op .) + yacc.py:2687: else reduce using rule 51 (comp -> comp less op .) + yacc.py:2687: pool reduce using rule 51 (comp -> comp less op .) + yacc.py:2687: ccur reduce using rule 51 (comp -> comp less op .) + yacc.py:2687: fi reduce using rule 51 (comp -> comp less op .) + yacc.py:2687: plus shift and go to state 121 + yacc.py:2687: minus shift and go to state 122 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 51 (comp -> comp less op .) ] + yacc.py:2696: ! minus [ reduce using rule 51 (comp -> comp less op .) ] + yacc.py:2700: yacc.py:2561: yacc.py:2562:state 171 yacc.py:2563: - yacc.py:2565: (67) op -> op minus term . - yacc.py:2565: (69) term -> term . star base_call - yacc.py:2565: (70) term -> term . div base_call - yacc.py:2566: - yacc.py:2687: plus reduce using rule 67 (op -> op minus term .) - yacc.py:2687: minus reduce using rule 67 (op -> op minus term .) - yacc.py:2687: less reduce using rule 67 (op -> op minus term .) - yacc.py:2687: lesseq reduce using rule 67 (op -> op minus term .) - yacc.py:2687: equal reduce using rule 67 (op -> op minus term .) - yacc.py:2687: semi reduce using rule 67 (op -> op minus term .) - yacc.py:2687: of reduce using rule 67 (op -> op minus term .) - yacc.py:2687: then reduce using rule 67 (op -> op minus term .) - yacc.py:2687: loop reduce using rule 67 (op -> op minus term .) - yacc.py:2687: cpar reduce using rule 67 (op -> op minus term .) - yacc.py:2687: comma reduce using rule 67 (op -> op minus term .) - yacc.py:2687: in reduce using rule 67 (op -> op minus term .) - yacc.py:2687: else reduce using rule 67 (op -> op minus term .) - yacc.py:2687: pool reduce using rule 67 (op -> op minus term .) - yacc.py:2687: error reduce using rule 67 (op -> op minus term .) - yacc.py:2687: ccur reduce using rule 67 (op -> op minus term .) - yacc.py:2687: fi reduce using rule 67 (op -> op minus term .) - yacc.py:2687: star shift and go to state 129 - yacc.py:2687: div shift and go to state 130 + yacc.py:2565: (55) comp -> comp less error . + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2666: ! shift/reduce conflict for error resolved as shift + yacc.py:2687: less reduce using rule 55 (comp -> comp less error .) + yacc.py:2687: lesseq reduce using rule 55 (comp -> comp less error .) + yacc.py:2687: equal reduce using rule 55 (comp -> comp less error .) + yacc.py:2687: semi reduce using rule 55 (comp -> comp less error .) + yacc.py:2687: cpar reduce using rule 55 (comp -> comp less error .) + yacc.py:2687: star reduce using rule 55 (comp -> comp less error .) + yacc.py:2687: div reduce using rule 55 (comp -> comp less error .) + yacc.py:2687: plus reduce using rule 55 (comp -> comp less error .) + yacc.py:2687: minus reduce using rule 55 (comp -> comp less error .) + yacc.py:2687: dot reduce using rule 55 (comp -> comp less error .) + yacc.py:2687: of reduce using rule 55 (comp -> comp less error .) + yacc.py:2687: then reduce using rule 55 (comp -> comp less error .) + yacc.py:2687: loop reduce using rule 55 (comp -> comp less error .) + yacc.py:2687: comma reduce using rule 55 (comp -> comp less error .) + yacc.py:2687: in reduce using rule 55 (comp -> comp less error .) + yacc.py:2687: else reduce using rule 55 (comp -> comp less error .) + yacc.py:2687: pool reduce using rule 55 (comp -> comp less error .) + yacc.py:2687: ccur reduce using rule 55 (comp -> comp less error .) + yacc.py:2687: fi reduce using rule 55 (comp -> comp less error .) + yacc.py:2687: arroba shift and go to state 112 + yacc.py:2687: opar shift and go to state 115 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: error shift and go to state 111 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2696: ! error [ reduce using rule 55 (comp -> comp less error .) ] + yacc.py:2696: ! arroba [ reduce using rule 55 (comp -> comp less error .) ] + yacc.py:2700: + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: expr shift and go to state 113 + yacc.py:2714: block shift and go to state 114 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 172 yacc.py:2563: - yacc.py:2565: (69) term -> term star base_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 69 (term -> term star base_call .) - yacc.py:2687: div reduce using rule 69 (term -> term star base_call .) - yacc.py:2687: plus reduce using rule 69 (term -> term star base_call .) - yacc.py:2687: minus reduce using rule 69 (term -> term star base_call .) - yacc.py:2687: less reduce using rule 69 (term -> term star base_call .) - yacc.py:2687: lesseq reduce using rule 69 (term -> term star base_call .) - yacc.py:2687: equal reduce using rule 69 (term -> term star base_call .) - yacc.py:2687: semi reduce using rule 69 (term -> term star base_call .) - yacc.py:2687: of reduce using rule 69 (term -> term star base_call .) - yacc.py:2687: then reduce using rule 69 (term -> term star base_call .) - yacc.py:2687: loop reduce using rule 69 (term -> term star base_call .) - yacc.py:2687: cpar reduce using rule 69 (term -> term star base_call .) - yacc.py:2687: comma reduce using rule 69 (term -> term star base_call .) - yacc.py:2687: in reduce using rule 69 (term -> term star base_call .) - yacc.py:2687: else reduce using rule 69 (term -> term star base_call .) - yacc.py:2687: pool reduce using rule 69 (term -> term star base_call .) - yacc.py:2687: error reduce using rule 69 (term -> term star base_call .) - yacc.py:2687: ccur reduce using rule 69 (term -> term star base_call .) - yacc.py:2687: fi reduce using rule 69 (term -> term star base_call .) - yacc.py:2689: + yacc.py:2565: (52) comp -> comp lesseq op . + yacc.py:2565: (58) op -> op . plus term + yacc.py:2565: (59) op -> op . minus term + yacc.py:2565: (61) op -> op . plus error + yacc.py:2565: (62) op -> op . minus error + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for plus resolved as shift + yacc.py:2666: ! shift/reduce conflict for minus resolved as shift + yacc.py:2687: less reduce using rule 52 (comp -> comp lesseq op .) + yacc.py:2687: lesseq reduce using rule 52 (comp -> comp lesseq op .) + yacc.py:2687: equal reduce using rule 52 (comp -> comp lesseq op .) + yacc.py:2687: semi reduce using rule 52 (comp -> comp lesseq op .) + yacc.py:2687: cpar reduce using rule 52 (comp -> comp lesseq op .) + yacc.py:2687: error reduce using rule 52 (comp -> comp lesseq op .) + yacc.py:2687: star reduce using rule 52 (comp -> comp lesseq op .) + yacc.py:2687: div reduce using rule 52 (comp -> comp lesseq op .) + yacc.py:2687: arroba reduce using rule 52 (comp -> comp lesseq op .) + yacc.py:2687: dot reduce using rule 52 (comp -> comp lesseq op .) + yacc.py:2687: of reduce using rule 52 (comp -> comp lesseq op .) + yacc.py:2687: then reduce using rule 52 (comp -> comp lesseq op .) + yacc.py:2687: loop reduce using rule 52 (comp -> comp lesseq op .) + yacc.py:2687: comma reduce using rule 52 (comp -> comp lesseq op .) + yacc.py:2687: in reduce using rule 52 (comp -> comp lesseq op .) + yacc.py:2687: else reduce using rule 52 (comp -> comp lesseq op .) + yacc.py:2687: pool reduce using rule 52 (comp -> comp lesseq op .) + yacc.py:2687: ccur reduce using rule 52 (comp -> comp lesseq op .) + yacc.py:2687: fi reduce using rule 52 (comp -> comp lesseq op .) + yacc.py:2687: plus shift and go to state 121 + yacc.py:2687: minus shift and go to state 122 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 52 (comp -> comp lesseq op .) ] + yacc.py:2696: ! minus [ reduce using rule 52 (comp -> comp lesseq op .) ] + yacc.py:2700: yacc.py:2561: yacc.py:2562:state 173 yacc.py:2563: - yacc.py:2565: (70) term -> term div base_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 70 (term -> term div base_call .) - yacc.py:2687: div reduce using rule 70 (term -> term div base_call .) - yacc.py:2687: plus reduce using rule 70 (term -> term div base_call .) - yacc.py:2687: minus reduce using rule 70 (term -> term div base_call .) - yacc.py:2687: less reduce using rule 70 (term -> term div base_call .) - yacc.py:2687: lesseq reduce using rule 70 (term -> term div base_call .) - yacc.py:2687: equal reduce using rule 70 (term -> term div base_call .) - yacc.py:2687: semi reduce using rule 70 (term -> term div base_call .) - yacc.py:2687: of reduce using rule 70 (term -> term div base_call .) - yacc.py:2687: then reduce using rule 70 (term -> term div base_call .) - yacc.py:2687: loop reduce using rule 70 (term -> term div base_call .) - yacc.py:2687: cpar reduce using rule 70 (term -> term div base_call .) - yacc.py:2687: comma reduce using rule 70 (term -> term div base_call .) - yacc.py:2687: in reduce using rule 70 (term -> term div base_call .) - yacc.py:2687: else reduce using rule 70 (term -> term div base_call .) - yacc.py:2687: pool reduce using rule 70 (term -> term div base_call .) - yacc.py:2687: error reduce using rule 70 (term -> term div base_call .) - yacc.py:2687: ccur reduce using rule 70 (term -> term div base_call .) - yacc.py:2687: fi reduce using rule 70 (term -> term div base_call .) + yacc.py:2565: (56) comp -> comp lesseq error . + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2666: ! shift/reduce conflict for error resolved as shift + yacc.py:2687: less reduce using rule 56 (comp -> comp lesseq error .) + yacc.py:2687: lesseq reduce using rule 56 (comp -> comp lesseq error .) + yacc.py:2687: equal reduce using rule 56 (comp -> comp lesseq error .) + yacc.py:2687: semi reduce using rule 56 (comp -> comp lesseq error .) + yacc.py:2687: cpar reduce using rule 56 (comp -> comp lesseq error .) + yacc.py:2687: star reduce using rule 56 (comp -> comp lesseq error .) + yacc.py:2687: div reduce using rule 56 (comp -> comp lesseq error .) + yacc.py:2687: plus reduce using rule 56 (comp -> comp lesseq error .) + yacc.py:2687: minus reduce using rule 56 (comp -> comp lesseq error .) + yacc.py:2687: dot reduce using rule 56 (comp -> comp lesseq error .) + yacc.py:2687: of reduce using rule 56 (comp -> comp lesseq error .) + yacc.py:2687: then reduce using rule 56 (comp -> comp lesseq error .) + yacc.py:2687: loop reduce using rule 56 (comp -> comp lesseq error .) + yacc.py:2687: comma reduce using rule 56 (comp -> comp lesseq error .) + yacc.py:2687: in reduce using rule 56 (comp -> comp lesseq error .) + yacc.py:2687: else reduce using rule 56 (comp -> comp lesseq error .) + yacc.py:2687: pool reduce using rule 56 (comp -> comp lesseq error .) + yacc.py:2687: ccur reduce using rule 56 (comp -> comp lesseq error .) + yacc.py:2687: fi reduce using rule 56 (comp -> comp lesseq error .) + yacc.py:2687: arroba shift and go to state 112 + yacc.py:2687: opar shift and go to state 115 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: error shift and go to state 111 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2696: ! error [ reduce using rule 56 (comp -> comp lesseq error .) ] + yacc.py:2696: ! arroba [ reduce using rule 56 (comp -> comp lesseq error .) ] + yacc.py:2700: + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: expr shift and go to state 113 + yacc.py:2714: block shift and go to state 114 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 174 yacc.py:2563: - yacc.py:2565: (74) base_call -> factor arroba type . dot func_call - yacc.py:2566: - yacc.py:2687: dot shift and go to state 211 - yacc.py:2689: + yacc.py:2565: (53) comp -> comp equal op . + yacc.py:2565: (58) op -> op . plus term + yacc.py:2565: (59) op -> op . minus term + yacc.py:2565: (61) op -> op . plus error + yacc.py:2565: (62) op -> op . minus error + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for plus resolved as shift + yacc.py:2666: ! shift/reduce conflict for minus resolved as shift + yacc.py:2687: less reduce using rule 53 (comp -> comp equal op .) + yacc.py:2687: lesseq reduce using rule 53 (comp -> comp equal op .) + yacc.py:2687: equal reduce using rule 53 (comp -> comp equal op .) + yacc.py:2687: semi reduce using rule 53 (comp -> comp equal op .) + yacc.py:2687: cpar reduce using rule 53 (comp -> comp equal op .) + yacc.py:2687: error reduce using rule 53 (comp -> comp equal op .) + yacc.py:2687: star reduce using rule 53 (comp -> comp equal op .) + yacc.py:2687: div reduce using rule 53 (comp -> comp equal op .) + yacc.py:2687: arroba reduce using rule 53 (comp -> comp equal op .) + yacc.py:2687: dot reduce using rule 53 (comp -> comp equal op .) + yacc.py:2687: of reduce using rule 53 (comp -> comp equal op .) + yacc.py:2687: then reduce using rule 53 (comp -> comp equal op .) + yacc.py:2687: loop reduce using rule 53 (comp -> comp equal op .) + yacc.py:2687: comma reduce using rule 53 (comp -> comp equal op .) + yacc.py:2687: in reduce using rule 53 (comp -> comp equal op .) + yacc.py:2687: else reduce using rule 53 (comp -> comp equal op .) + yacc.py:2687: pool reduce using rule 53 (comp -> comp equal op .) + yacc.py:2687: ccur reduce using rule 53 (comp -> comp equal op .) + yacc.py:2687: fi reduce using rule 53 (comp -> comp equal op .) + yacc.py:2687: plus shift and go to state 121 + yacc.py:2687: minus shift and go to state 122 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 53 (comp -> comp equal op .) ] + yacc.py:2696: ! minus [ reduce using rule 53 (comp -> comp equal op .) ] + yacc.py:2700: yacc.py:2561: yacc.py:2562:state 175 yacc.py:2563: - yacc.py:2565: (77) base_call -> factor arroba error . dot func_call - yacc.py:2566: - yacc.py:2687: dot shift and go to state 212 + yacc.py:2565: (57) comp -> comp equal error . + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2666: ! shift/reduce conflict for error resolved as shift + yacc.py:2687: less reduce using rule 57 (comp -> comp equal error .) + yacc.py:2687: lesseq reduce using rule 57 (comp -> comp equal error .) + yacc.py:2687: equal reduce using rule 57 (comp -> comp equal error .) + yacc.py:2687: semi reduce using rule 57 (comp -> comp equal error .) + yacc.py:2687: cpar reduce using rule 57 (comp -> comp equal error .) + yacc.py:2687: star reduce using rule 57 (comp -> comp equal error .) + yacc.py:2687: div reduce using rule 57 (comp -> comp equal error .) + yacc.py:2687: plus reduce using rule 57 (comp -> comp equal error .) + yacc.py:2687: minus reduce using rule 57 (comp -> comp equal error .) + yacc.py:2687: dot reduce using rule 57 (comp -> comp equal error .) + yacc.py:2687: of reduce using rule 57 (comp -> comp equal error .) + yacc.py:2687: then reduce using rule 57 (comp -> comp equal error .) + yacc.py:2687: loop reduce using rule 57 (comp -> comp equal error .) + yacc.py:2687: comma reduce using rule 57 (comp -> comp equal error .) + yacc.py:2687: in reduce using rule 57 (comp -> comp equal error .) + yacc.py:2687: else reduce using rule 57 (comp -> comp equal error .) + yacc.py:2687: pool reduce using rule 57 (comp -> comp equal error .) + yacc.py:2687: ccur reduce using rule 57 (comp -> comp equal error .) + yacc.py:2687: fi reduce using rule 57 (comp -> comp equal error .) + yacc.py:2687: arroba shift and go to state 112 + yacc.py:2687: opar shift and go to state 115 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: error shift and go to state 111 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2696: ! error [ reduce using rule 57 (comp -> comp equal error .) ] + yacc.py:2696: ! arroba [ reduce using rule 57 (comp -> comp equal error .) ] + yacc.py:2700: + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: expr shift and go to state 113 + yacc.py:2714: block shift and go to state 114 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 176 yacc.py:2563: - yacc.py:2565: (80) factor -> factor dot func_call . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 80 (factor -> factor dot func_call .) - yacc.py:2687: dot reduce using rule 80 (factor -> factor dot func_call .) - yacc.py:2687: star reduce using rule 80 (factor -> factor dot func_call .) - yacc.py:2687: div reduce using rule 80 (factor -> factor dot func_call .) - yacc.py:2687: plus reduce using rule 80 (factor -> factor dot func_call .) - yacc.py:2687: minus reduce using rule 80 (factor -> factor dot func_call .) - yacc.py:2687: less reduce using rule 80 (factor -> factor dot func_call .) - yacc.py:2687: lesseq reduce using rule 80 (factor -> factor dot func_call .) - yacc.py:2687: equal reduce using rule 80 (factor -> factor dot func_call .) - yacc.py:2687: semi reduce using rule 80 (factor -> factor dot func_call .) - yacc.py:2687: of reduce using rule 80 (factor -> factor dot func_call .) - yacc.py:2687: then reduce using rule 80 (factor -> factor dot func_call .) - yacc.py:2687: loop reduce using rule 80 (factor -> factor dot func_call .) - yacc.py:2687: cpar reduce using rule 80 (factor -> factor dot func_call .) - yacc.py:2687: comma reduce using rule 80 (factor -> factor dot func_call .) - yacc.py:2687: in reduce using rule 80 (factor -> factor dot func_call .) - yacc.py:2687: else reduce using rule 80 (factor -> factor dot func_call .) - yacc.py:2687: pool reduce using rule 80 (factor -> factor dot func_call .) - yacc.py:2687: error reduce using rule 80 (factor -> factor dot func_call .) - yacc.py:2687: ccur reduce using rule 80 (factor -> factor dot func_call .) - yacc.py:2687: fi reduce using rule 80 (factor -> factor dot func_call .) - yacc.py:2689: + yacc.py:2565: (58) op -> op plus term . + yacc.py:2565: (63) term -> term . star base_call + yacc.py:2565: (64) term -> term . div base_call + yacc.py:2565: (68) term -> term . star error + yacc.py:2565: (69) term -> term . div error + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for star resolved as shift + yacc.py:2666: ! shift/reduce conflict for div resolved as shift + yacc.py:2687: plus reduce using rule 58 (op -> op plus term .) + yacc.py:2687: minus reduce using rule 58 (op -> op plus term .) + yacc.py:2687: less reduce using rule 58 (op -> op plus term .) + yacc.py:2687: lesseq reduce using rule 58 (op -> op plus term .) + yacc.py:2687: equal reduce using rule 58 (op -> op plus term .) + yacc.py:2687: semi reduce using rule 58 (op -> op plus term .) + yacc.py:2687: cpar reduce using rule 58 (op -> op plus term .) + yacc.py:2687: error reduce using rule 58 (op -> op plus term .) + yacc.py:2687: arroba reduce using rule 58 (op -> op plus term .) + yacc.py:2687: dot reduce using rule 58 (op -> op plus term .) + yacc.py:2687: of reduce using rule 58 (op -> op plus term .) + yacc.py:2687: then reduce using rule 58 (op -> op plus term .) + yacc.py:2687: loop reduce using rule 58 (op -> op plus term .) + yacc.py:2687: comma reduce using rule 58 (op -> op plus term .) + yacc.py:2687: in reduce using rule 58 (op -> op plus term .) + yacc.py:2687: else reduce using rule 58 (op -> op plus term .) + yacc.py:2687: pool reduce using rule 58 (op -> op plus term .) + yacc.py:2687: ccur reduce using rule 58 (op -> op plus term .) + yacc.py:2687: fi reduce using rule 58 (op -> op plus term .) + yacc.py:2687: star shift and go to state 123 + yacc.py:2687: div shift and go to state 124 + yacc.py:2689: + yacc.py:2696: ! star [ reduce using rule 58 (op -> op plus term .) ] + yacc.py:2696: ! div [ reduce using rule 58 (op -> op plus term .) ] + yacc.py:2700: yacc.py:2561: yacc.py:2562:state 177 yacc.py:2563: - yacc.py:2565: (94) func_call -> id . opar args cpar - yacc.py:2565: (95) func_call -> id . opar error cpar - yacc.py:2566: - yacc.py:2687: opar shift and go to state 121 + yacc.py:2565: (61) op -> op plus error . + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2666: ! shift/reduce conflict for error resolved as shift + yacc.py:2687: plus reduce using rule 61 (op -> op plus error .) + yacc.py:2687: minus reduce using rule 61 (op -> op plus error .) + yacc.py:2687: less reduce using rule 61 (op -> op plus error .) + yacc.py:2687: lesseq reduce using rule 61 (op -> op plus error .) + yacc.py:2687: equal reduce using rule 61 (op -> op plus error .) + yacc.py:2687: semi reduce using rule 61 (op -> op plus error .) + yacc.py:2687: cpar reduce using rule 61 (op -> op plus error .) + yacc.py:2687: star reduce using rule 61 (op -> op plus error .) + yacc.py:2687: div reduce using rule 61 (op -> op plus error .) + yacc.py:2687: dot reduce using rule 61 (op -> op plus error .) + yacc.py:2687: of reduce using rule 61 (op -> op plus error .) + yacc.py:2687: then reduce using rule 61 (op -> op plus error .) + yacc.py:2687: loop reduce using rule 61 (op -> op plus error .) + yacc.py:2687: comma reduce using rule 61 (op -> op plus error .) + yacc.py:2687: in reduce using rule 61 (op -> op plus error .) + yacc.py:2687: else reduce using rule 61 (op -> op plus error .) + yacc.py:2687: pool reduce using rule 61 (op -> op plus error .) + yacc.py:2687: ccur reduce using rule 61 (op -> op plus error .) + yacc.py:2687: fi reduce using rule 61 (op -> op plus error .) + yacc.py:2687: arroba shift and go to state 112 + yacc.py:2687: opar shift and go to state 115 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: error shift and go to state 111 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2696: ! error [ reduce using rule 61 (op -> op plus error .) ] + yacc.py:2696: ! arroba [ reduce using rule 61 (op -> op plus error .) ] + yacc.py:2700: + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: expr shift and go to state 113 + yacc.py:2714: block shift and go to state 114 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 178 yacc.py:2563: - yacc.py:2565: (96) func_call -> error . opar args cpar - yacc.py:2566: - yacc.py:2687: opar shift and go to state 109 - yacc.py:2689: + yacc.py:2565: (59) op -> op minus term . + yacc.py:2565: (63) term -> term . star base_call + yacc.py:2565: (64) term -> term . div base_call + yacc.py:2565: (68) term -> term . star error + yacc.py:2565: (69) term -> term . div error + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for star resolved as shift + yacc.py:2666: ! shift/reduce conflict for div resolved as shift + yacc.py:2687: plus reduce using rule 59 (op -> op minus term .) + yacc.py:2687: minus reduce using rule 59 (op -> op minus term .) + yacc.py:2687: less reduce using rule 59 (op -> op minus term .) + yacc.py:2687: lesseq reduce using rule 59 (op -> op minus term .) + yacc.py:2687: equal reduce using rule 59 (op -> op minus term .) + yacc.py:2687: semi reduce using rule 59 (op -> op minus term .) + yacc.py:2687: cpar reduce using rule 59 (op -> op minus term .) + yacc.py:2687: error reduce using rule 59 (op -> op minus term .) + yacc.py:2687: arroba reduce using rule 59 (op -> op minus term .) + yacc.py:2687: dot reduce using rule 59 (op -> op minus term .) + yacc.py:2687: of reduce using rule 59 (op -> op minus term .) + yacc.py:2687: then reduce using rule 59 (op -> op minus term .) + yacc.py:2687: loop reduce using rule 59 (op -> op minus term .) + yacc.py:2687: comma reduce using rule 59 (op -> op minus term .) + yacc.py:2687: in reduce using rule 59 (op -> op minus term .) + yacc.py:2687: else reduce using rule 59 (op -> op minus term .) + yacc.py:2687: pool reduce using rule 59 (op -> op minus term .) + yacc.py:2687: ccur reduce using rule 59 (op -> op minus term .) + yacc.py:2687: fi reduce using rule 59 (op -> op minus term .) + yacc.py:2687: star shift and go to state 123 + yacc.py:2687: div shift and go to state 124 + yacc.py:2689: + yacc.py:2696: ! star [ reduce using rule 59 (op -> op minus term .) ] + yacc.py:2696: ! div [ reduce using rule 59 (op -> op minus term .) ] + yacc.py:2700: yacc.py:2561: yacc.py:2562:state 179 yacc.py:2563: - yacc.py:2565: (79) factor -> opar expr cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 79 (factor -> opar expr cpar .) - yacc.py:2687: dot reduce using rule 79 (factor -> opar expr cpar .) - yacc.py:2687: star reduce using rule 79 (factor -> opar expr cpar .) - yacc.py:2687: div reduce using rule 79 (factor -> opar expr cpar .) - yacc.py:2687: plus reduce using rule 79 (factor -> opar expr cpar .) - yacc.py:2687: minus reduce using rule 79 (factor -> opar expr cpar .) - yacc.py:2687: less reduce using rule 79 (factor -> opar expr cpar .) - yacc.py:2687: lesseq reduce using rule 79 (factor -> opar expr cpar .) - yacc.py:2687: equal reduce using rule 79 (factor -> opar expr cpar .) - yacc.py:2687: semi reduce using rule 79 (factor -> opar expr cpar .) - yacc.py:2687: of reduce using rule 79 (factor -> opar expr cpar .) - yacc.py:2687: then reduce using rule 79 (factor -> opar expr cpar .) - yacc.py:2687: loop reduce using rule 79 (factor -> opar expr cpar .) - yacc.py:2687: cpar reduce using rule 79 (factor -> opar expr cpar .) - yacc.py:2687: comma reduce using rule 79 (factor -> opar expr cpar .) - yacc.py:2687: in reduce using rule 79 (factor -> opar expr cpar .) - yacc.py:2687: else reduce using rule 79 (factor -> opar expr cpar .) - yacc.py:2687: pool reduce using rule 79 (factor -> opar expr cpar .) - yacc.py:2687: error reduce using rule 79 (factor -> opar expr cpar .) - yacc.py:2687: ccur reduce using rule 79 (factor -> opar expr cpar .) - yacc.py:2687: fi reduce using rule 79 (factor -> opar expr cpar .) + yacc.py:2565: (62) op -> op minus error . + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2666: ! shift/reduce conflict for error resolved as shift + yacc.py:2687: plus reduce using rule 62 (op -> op minus error .) + yacc.py:2687: minus reduce using rule 62 (op -> op minus error .) + yacc.py:2687: less reduce using rule 62 (op -> op minus error .) + yacc.py:2687: lesseq reduce using rule 62 (op -> op minus error .) + yacc.py:2687: equal reduce using rule 62 (op -> op minus error .) + yacc.py:2687: semi reduce using rule 62 (op -> op minus error .) + yacc.py:2687: cpar reduce using rule 62 (op -> op minus error .) + yacc.py:2687: star reduce using rule 62 (op -> op minus error .) + yacc.py:2687: div reduce using rule 62 (op -> op minus error .) + yacc.py:2687: dot reduce using rule 62 (op -> op minus error .) + yacc.py:2687: of reduce using rule 62 (op -> op minus error .) + yacc.py:2687: then reduce using rule 62 (op -> op minus error .) + yacc.py:2687: loop reduce using rule 62 (op -> op minus error .) + yacc.py:2687: comma reduce using rule 62 (op -> op minus error .) + yacc.py:2687: in reduce using rule 62 (op -> op minus error .) + yacc.py:2687: else reduce using rule 62 (op -> op minus error .) + yacc.py:2687: pool reduce using rule 62 (op -> op minus error .) + yacc.py:2687: ccur reduce using rule 62 (op -> op minus error .) + yacc.py:2687: fi reduce using rule 62 (op -> op minus error .) + yacc.py:2687: arroba shift and go to state 112 + yacc.py:2687: opar shift and go to state 115 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: error shift and go to state 111 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2696: ! error [ reduce using rule 62 (op -> op minus error .) ] + yacc.py:2696: ! arroba [ reduce using rule 62 (op -> op minus error .) ] + yacc.py:2700: + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: expr shift and go to state 113 + yacc.py:2714: block shift and go to state 114 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 180 yacc.py:2563: - yacc.py:2565: (86) atom -> ocur block ccur . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 86 (atom -> ocur block ccur .) - yacc.py:2687: dot reduce using rule 86 (atom -> ocur block ccur .) - yacc.py:2687: star reduce using rule 86 (atom -> ocur block ccur .) - yacc.py:2687: div reduce using rule 86 (atom -> ocur block ccur .) - yacc.py:2687: plus reduce using rule 86 (atom -> ocur block ccur .) - yacc.py:2687: minus reduce using rule 86 (atom -> ocur block ccur .) - yacc.py:2687: less reduce using rule 86 (atom -> ocur block ccur .) - yacc.py:2687: lesseq reduce using rule 86 (atom -> ocur block ccur .) - yacc.py:2687: equal reduce using rule 86 (atom -> ocur block ccur .) - yacc.py:2687: semi reduce using rule 86 (atom -> ocur block ccur .) - yacc.py:2687: of reduce using rule 86 (atom -> ocur block ccur .) - yacc.py:2687: then reduce using rule 86 (atom -> ocur block ccur .) - yacc.py:2687: loop reduce using rule 86 (atom -> ocur block ccur .) - yacc.py:2687: cpar reduce using rule 86 (atom -> ocur block ccur .) - yacc.py:2687: comma reduce using rule 86 (atom -> ocur block ccur .) - yacc.py:2687: in reduce using rule 86 (atom -> ocur block ccur .) - yacc.py:2687: else reduce using rule 86 (atom -> ocur block ccur .) - yacc.py:2687: pool reduce using rule 86 (atom -> ocur block ccur .) - yacc.py:2687: error reduce using rule 86 (atom -> ocur block ccur .) - yacc.py:2687: ccur reduce using rule 86 (atom -> ocur block ccur .) - yacc.py:2687: fi reduce using rule 86 (atom -> ocur block ccur .) + yacc.py:2565: (63) term -> term star base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 63 (term -> term star base_call .) + yacc.py:2687: div reduce using rule 63 (term -> term star base_call .) + yacc.py:2687: plus reduce using rule 63 (term -> term star base_call .) + yacc.py:2687: minus reduce using rule 63 (term -> term star base_call .) + yacc.py:2687: less reduce using rule 63 (term -> term star base_call .) + yacc.py:2687: lesseq reduce using rule 63 (term -> term star base_call .) + yacc.py:2687: equal reduce using rule 63 (term -> term star base_call .) + yacc.py:2687: semi reduce using rule 63 (term -> term star base_call .) + yacc.py:2687: cpar reduce using rule 63 (term -> term star base_call .) + yacc.py:2687: error reduce using rule 63 (term -> term star base_call .) + yacc.py:2687: arroba reduce using rule 63 (term -> term star base_call .) + yacc.py:2687: dot reduce using rule 63 (term -> term star base_call .) + yacc.py:2687: of reduce using rule 63 (term -> term star base_call .) + yacc.py:2687: then reduce using rule 63 (term -> term star base_call .) + yacc.py:2687: loop reduce using rule 63 (term -> term star base_call .) + yacc.py:2687: comma reduce using rule 63 (term -> term star base_call .) + yacc.py:2687: in reduce using rule 63 (term -> term star base_call .) + yacc.py:2687: else reduce using rule 63 (term -> term star base_call .) + yacc.py:2687: pool reduce using rule 63 (term -> term star base_call .) + yacc.py:2687: ccur reduce using rule 63 (term -> term star base_call .) + yacc.py:2687: fi reduce using rule 63 (term -> term star base_call .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 181 yacc.py:2563: - yacc.py:2565: (90) block -> expr semi . - yacc.py:2565: (91) block -> expr semi . block - yacc.py:2565: (90) block -> . expr semi - yacc.py:2565: (91) block -> . expr semi block - yacc.py:2565: (92) block -> . error block - yacc.py:2565: (93) block -> . error - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 90 (block -> expr semi .) - yacc.py:2687: error shift and go to state 140 - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: opar shift and go to state 89 + yacc.py:2565: (68) term -> term star error . + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2666: ! shift/reduce conflict for error resolved as shift + yacc.py:2687: star reduce using rule 68 (term -> term star error .) + yacc.py:2687: div reduce using rule 68 (term -> term star error .) + yacc.py:2687: plus reduce using rule 68 (term -> term star error .) + yacc.py:2687: minus reduce using rule 68 (term -> term star error .) + yacc.py:2687: less reduce using rule 68 (term -> term star error .) + yacc.py:2687: lesseq reduce using rule 68 (term -> term star error .) + yacc.py:2687: equal reduce using rule 68 (term -> term star error .) + yacc.py:2687: semi reduce using rule 68 (term -> term star error .) + yacc.py:2687: cpar reduce using rule 68 (term -> term star error .) + yacc.py:2687: dot reduce using rule 68 (term -> term star error .) + yacc.py:2687: of reduce using rule 68 (term -> term star error .) + yacc.py:2687: then reduce using rule 68 (term -> term star error .) + yacc.py:2687: loop reduce using rule 68 (term -> term star error .) + yacc.py:2687: comma reduce using rule 68 (term -> term star error .) + yacc.py:2687: in reduce using rule 68 (term -> term star error .) + yacc.py:2687: else reduce using rule 68 (term -> term star error .) + yacc.py:2687: pool reduce using rule 68 (term -> term star error .) + yacc.py:2687: ccur reduce using rule 68 (term -> term star error .) + yacc.py:2687: fi reduce using rule 68 (term -> term star error .) + yacc.py:2687: arroba shift and go to state 112 + yacc.py:2687: opar shift and go to state 115 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: error shift and go to state 111 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 yacc.py:2687: num shift and go to state 90 yacc.py:2687: new shift and go to state 91 yacc.py:2687: ocur shift and go to state 92 @@ -4551,96 +6723,163 @@ yacc.py:2687: false shift and go to state 94 yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: expr shift and go to state 139 - yacc.py:2714: block shift and go to state 213 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 + yacc.py:2696: ! error [ reduce using rule 68 (term -> term star error .) ] + yacc.py:2696: ! arroba [ reduce using rule 68 (term -> term star error .) ] + yacc.py:2700: + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: expr shift and go to state 113 + yacc.py:2714: block shift and go to state 114 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 182 yacc.py:2563: - yacc.py:2565: (92) block -> error block . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 92 (block -> error block .) + yacc.py:2565: (64) term -> term div base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 64 (term -> term div base_call .) + yacc.py:2687: div reduce using rule 64 (term -> term div base_call .) + yacc.py:2687: plus reduce using rule 64 (term -> term div base_call .) + yacc.py:2687: minus reduce using rule 64 (term -> term div base_call .) + yacc.py:2687: less reduce using rule 64 (term -> term div base_call .) + yacc.py:2687: lesseq reduce using rule 64 (term -> term div base_call .) + yacc.py:2687: equal reduce using rule 64 (term -> term div base_call .) + yacc.py:2687: semi reduce using rule 64 (term -> term div base_call .) + yacc.py:2687: cpar reduce using rule 64 (term -> term div base_call .) + yacc.py:2687: error reduce using rule 64 (term -> term div base_call .) + yacc.py:2687: arroba reduce using rule 64 (term -> term div base_call .) + yacc.py:2687: dot reduce using rule 64 (term -> term div base_call .) + yacc.py:2687: of reduce using rule 64 (term -> term div base_call .) + yacc.py:2687: then reduce using rule 64 (term -> term div base_call .) + yacc.py:2687: loop reduce using rule 64 (term -> term div base_call .) + yacc.py:2687: comma reduce using rule 64 (term -> term div base_call .) + yacc.py:2687: in reduce using rule 64 (term -> term div base_call .) + yacc.py:2687: else reduce using rule 64 (term -> term div base_call .) + yacc.py:2687: pool reduce using rule 64 (term -> term div base_call .) + yacc.py:2687: ccur reduce using rule 64 (term -> term div base_call .) + yacc.py:2687: fi reduce using rule 64 (term -> term div base_call .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 183 yacc.py:2563: - yacc.py:2565: (96) func_call -> error opar . args cpar - yacc.py:2565: (79) factor -> opar . expr cpar - yacc.py:2565: (97) args -> . arg_list - yacc.py:2565: (98) args -> . arg_list_empty - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (99) arg_list -> . expr - yacc.py:2565: (100) arg_list -> . expr comma arg_list - yacc.py:2565: (101) arg_list -> . error arg_list - yacc.py:2565: (102) arg_list_empty -> . epsilon - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: error shift and go to state 146 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: opar shift and go to state 89 + yacc.py:2565: (69) term -> term div error . + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2666: ! shift/reduce conflict for error resolved as shift + yacc.py:2687: star reduce using rule 69 (term -> term div error .) + yacc.py:2687: div reduce using rule 69 (term -> term div error .) + yacc.py:2687: plus reduce using rule 69 (term -> term div error .) + yacc.py:2687: minus reduce using rule 69 (term -> term div error .) + yacc.py:2687: less reduce using rule 69 (term -> term div error .) + yacc.py:2687: lesseq reduce using rule 69 (term -> term div error .) + yacc.py:2687: equal reduce using rule 69 (term -> term div error .) + yacc.py:2687: semi reduce using rule 69 (term -> term div error .) + yacc.py:2687: cpar reduce using rule 69 (term -> term div error .) + yacc.py:2687: dot reduce using rule 69 (term -> term div error .) + yacc.py:2687: of reduce using rule 69 (term -> term div error .) + yacc.py:2687: then reduce using rule 69 (term -> term div error .) + yacc.py:2687: loop reduce using rule 69 (term -> term div error .) + yacc.py:2687: comma reduce using rule 69 (term -> term div error .) + yacc.py:2687: in reduce using rule 69 (term -> term div error .) + yacc.py:2687: else reduce using rule 69 (term -> term div error .) + yacc.py:2687: pool reduce using rule 69 (term -> term div error .) + yacc.py:2687: ccur reduce using rule 69 (term -> term div error .) + yacc.py:2687: fi reduce using rule 69 (term -> term div error .) + yacc.py:2687: arroba shift and go to state 112 + yacc.py:2687: opar shift and go to state 115 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: error shift and go to state 111 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 yacc.py:2687: num shift and go to state 90 yacc.py:2687: new shift and go to state 91 yacc.py:2687: ocur shift and go to state 92 @@ -4648,453 +6887,244 @@ yacc.py:2687: false shift and go to state 94 yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: args shift and go to state 147 - yacc.py:2714: expr shift and go to state 214 - yacc.py:2714: arg_list shift and go to state 148 - yacc.py:2714: arg_list_empty shift and go to state 149 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: epsilon shift and go to state 151 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 + yacc.py:2696: ! error [ reduce using rule 69 (term -> term div error .) ] + yacc.py:2696: ! arroba [ reduce using rule 69 (term -> term div error .) ] + yacc.py:2700: + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: expr shift and go to state 113 + yacc.py:2714: block shift and go to state 114 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 184 yacc.py:2563: - yacc.py:2565: (24) def_func -> error opar formals cpar colon type ocur . expr ccur - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: error shift and go to state 71 - yacc.py:2687: opar shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 + yacc.py:2565: (72) base_call -> factor arroba type . dot func_call + yacc.py:2566: + yacc.py:2687: dot shift and go to state 225 yacc.py:2689: - yacc.py:2714: expr shift and go to state 215 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 yacc.py:2561: yacc.py:2562:state 185 yacc.py:2563: - yacc.py:2565: (23) def_func -> id opar formals cpar colon type ocur . expr ccur - yacc.py:2565: (27) def_func -> id opar formals cpar colon type ocur . error ccur - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 217 - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: opar shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 + yacc.py:2565: (75) base_call -> factor arroba error . dot func_call + yacc.py:2566: + yacc.py:2687: dot shift and go to state 226 yacc.py:2689: - yacc.py:2714: expr shift and go to state 216 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 yacc.py:2561: yacc.py:2562:state 186 yacc.py:2563: - yacc.py:2565: (26) def_func -> id opar formals cpar colon error ocur . expr ccur - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: error shift and go to state 71 - yacc.py:2687: opar shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 + yacc.py:2565: (81) factor -> factor dot func_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 81 (factor -> factor dot func_call .) + yacc.py:2687: dot reduce using rule 81 (factor -> factor dot func_call .) + yacc.py:2687: star reduce using rule 81 (factor -> factor dot func_call .) + yacc.py:2687: div reduce using rule 81 (factor -> factor dot func_call .) + yacc.py:2687: plus reduce using rule 81 (factor -> factor dot func_call .) + yacc.py:2687: minus reduce using rule 81 (factor -> factor dot func_call .) + yacc.py:2687: less reduce using rule 81 (factor -> factor dot func_call .) + yacc.py:2687: lesseq reduce using rule 81 (factor -> factor dot func_call .) + yacc.py:2687: equal reduce using rule 81 (factor -> factor dot func_call .) + yacc.py:2687: semi reduce using rule 81 (factor -> factor dot func_call .) + yacc.py:2687: cpar reduce using rule 81 (factor -> factor dot func_call .) + yacc.py:2687: error reduce using rule 81 (factor -> factor dot func_call .) + yacc.py:2687: of reduce using rule 81 (factor -> factor dot func_call .) + yacc.py:2687: then reduce using rule 81 (factor -> factor dot func_call .) + yacc.py:2687: loop reduce using rule 81 (factor -> factor dot func_call .) + yacc.py:2687: comma reduce using rule 81 (factor -> factor dot func_call .) + yacc.py:2687: in reduce using rule 81 (factor -> factor dot func_call .) + yacc.py:2687: else reduce using rule 81 (factor -> factor dot func_call .) + yacc.py:2687: pool reduce using rule 81 (factor -> factor dot func_call .) + yacc.py:2687: ccur reduce using rule 81 (factor -> factor dot func_call .) + yacc.py:2687: fi reduce using rule 81 (factor -> factor dot func_call .) yacc.py:2689: - yacc.py:2714: expr shift and go to state 218 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 yacc.py:2561: yacc.py:2562:state 187 yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar error cpar colon type ocur . expr ccur - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: error shift and go to state 71 - yacc.py:2687: opar shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 + yacc.py:2565: (123) func_call -> id . opar args cpar + yacc.py:2565: (124) func_call -> id . opar error cpar + yacc.py:2566: + yacc.py:2687: opar shift and go to state 117 yacc.py:2689: - yacc.py:2714: expr shift and go to state 219 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 yacc.py:2561: yacc.py:2562:state 188 yacc.py:2563: - yacc.py:2565: (76) base_call -> error arroba type dot . func_call - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar + yacc.py:2565: (125) func_call -> error . opar args cpar yacc.py:2566: - yacc.py:2687: id shift and go to state 177 - yacc.py:2687: error shift and go to state 178 + yacc.py:2687: opar shift and go to state 227 yacc.py:2689: - yacc.py:2714: func_call shift and go to state 220 yacc.py:2561: yacc.py:2562:state 189 yacc.py:2563: - yacc.py:2565: (101) arg_list -> error arg_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 101 (arg_list -> error arg_list .) + yacc.py:2565: (77) factor -> opar expr cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: dot reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: star reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: div reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: plus reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: minus reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: less reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: lesseq reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: equal reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: semi reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: cpar reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: error reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: of reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: then reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: loop reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: comma reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: in reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: else reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: pool reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: ccur reduce using rule 77 (factor -> opar expr cpar .) + yacc.py:2687: fi reduce using rule 77 (factor -> opar expr cpar .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 190 yacc.py:2563: - yacc.py:2565: (96) func_call -> error opar args cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 96 (func_call -> error opar args cpar .) - yacc.py:2687: dot reduce using rule 96 (func_call -> error opar args cpar .) - yacc.py:2687: star reduce using rule 96 (func_call -> error opar args cpar .) - yacc.py:2687: div reduce using rule 96 (func_call -> error opar args cpar .) - yacc.py:2687: plus reduce using rule 96 (func_call -> error opar args cpar .) - yacc.py:2687: minus reduce using rule 96 (func_call -> error opar args cpar .) - yacc.py:2687: less reduce using rule 96 (func_call -> error opar args cpar .) - yacc.py:2687: lesseq reduce using rule 96 (func_call -> error opar args cpar .) - yacc.py:2687: equal reduce using rule 96 (func_call -> error opar args cpar .) - yacc.py:2687: semi reduce using rule 96 (func_call -> error opar args cpar .) - yacc.py:2687: of reduce using rule 96 (func_call -> error opar args cpar .) - yacc.py:2687: then reduce using rule 96 (func_call -> error opar args cpar .) - yacc.py:2687: loop reduce using rule 96 (func_call -> error opar args cpar .) - yacc.py:2687: cpar reduce using rule 96 (func_call -> error opar args cpar .) - yacc.py:2687: comma reduce using rule 96 (func_call -> error opar args cpar .) - yacc.py:2687: in reduce using rule 96 (func_call -> error opar args cpar .) - yacc.py:2687: else reduce using rule 96 (func_call -> error opar args cpar .) - yacc.py:2687: pool reduce using rule 96 (func_call -> error opar args cpar .) - yacc.py:2687: error reduce using rule 96 (func_call -> error opar args cpar .) - yacc.py:2687: ccur reduce using rule 96 (func_call -> error opar args cpar .) - yacc.py:2687: fi reduce using rule 96 (func_call -> error opar args cpar .) + yacc.py:2565: (78) factor -> opar expr error . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 78 (factor -> opar expr error .) + yacc.py:2687: dot reduce using rule 78 (factor -> opar expr error .) + yacc.py:2687: star reduce using rule 78 (factor -> opar expr error .) + yacc.py:2687: div reduce using rule 78 (factor -> opar expr error .) + yacc.py:2687: plus reduce using rule 78 (factor -> opar expr error .) + yacc.py:2687: minus reduce using rule 78 (factor -> opar expr error .) + yacc.py:2687: less reduce using rule 78 (factor -> opar expr error .) + yacc.py:2687: lesseq reduce using rule 78 (factor -> opar expr error .) + yacc.py:2687: equal reduce using rule 78 (factor -> opar expr error .) + yacc.py:2687: semi reduce using rule 78 (factor -> opar expr error .) + yacc.py:2687: cpar reduce using rule 78 (factor -> opar expr error .) + yacc.py:2687: error reduce using rule 78 (factor -> opar expr error .) + yacc.py:2687: of reduce using rule 78 (factor -> opar expr error .) + yacc.py:2687: then reduce using rule 78 (factor -> opar expr error .) + yacc.py:2687: loop reduce using rule 78 (factor -> opar expr error .) + yacc.py:2687: comma reduce using rule 78 (factor -> opar expr error .) + yacc.py:2687: in reduce using rule 78 (factor -> opar expr error .) + yacc.py:2687: else reduce using rule 78 (factor -> opar expr error .) + yacc.py:2687: pool reduce using rule 78 (factor -> opar expr error .) + yacc.py:2687: ccur reduce using rule 78 (factor -> opar expr error .) + yacc.py:2687: fi reduce using rule 78 (factor -> opar expr error .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 191 yacc.py:2563: - yacc.py:2565: (100) arg_list -> expr comma . arg_list - yacc.py:2565: (99) arg_list -> . expr - yacc.py:2565: (100) arg_list -> . expr comma arg_list - yacc.py:2565: (101) arg_list -> . error arg_list - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 146 - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: opar shift and go to state 89 + yacc.py:2565: (80) factor -> opar error cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 80 (factor -> opar error cpar .) + yacc.py:2687: dot reduce using rule 80 (factor -> opar error cpar .) + yacc.py:2687: star reduce using rule 80 (factor -> opar error cpar .) + yacc.py:2687: div reduce using rule 80 (factor -> opar error cpar .) + yacc.py:2687: plus reduce using rule 80 (factor -> opar error cpar .) + yacc.py:2687: minus reduce using rule 80 (factor -> opar error cpar .) + yacc.py:2687: less reduce using rule 80 (factor -> opar error cpar .) + yacc.py:2687: lesseq reduce using rule 80 (factor -> opar error cpar .) + yacc.py:2687: equal reduce using rule 80 (factor -> opar error cpar .) + yacc.py:2687: semi reduce using rule 80 (factor -> opar error cpar .) + yacc.py:2687: cpar reduce using rule 80 (factor -> opar error cpar .) + yacc.py:2687: error reduce using rule 80 (factor -> opar error cpar .) + yacc.py:2687: of reduce using rule 80 (factor -> opar error cpar .) + yacc.py:2687: then reduce using rule 80 (factor -> opar error cpar .) + yacc.py:2687: loop reduce using rule 80 (factor -> opar error cpar .) + yacc.py:2687: comma reduce using rule 80 (factor -> opar error cpar .) + yacc.py:2687: in reduce using rule 80 (factor -> opar error cpar .) + yacc.py:2687: else reduce using rule 80 (factor -> opar error cpar .) + yacc.py:2687: pool reduce using rule 80 (factor -> opar error cpar .) + yacc.py:2687: ccur reduce using rule 80 (factor -> opar error cpar .) + yacc.py:2687: fi reduce using rule 80 (factor -> opar error cpar .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 192 + yacc.py:2563: + yacc.py:2565: (84) factor -> let let_list in . expr + yacc.py:2565: (86) factor -> let let_list in . error + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 229 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 yacc.py:2687: num shift and go to state 90 yacc.py:2687: new shift and go to state 91 yacc.py:2687: ocur shift and go to state 92 @@ -5102,519 +7132,2037 @@ yacc.py:2687: false shift and go to state 94 yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: expr shift and go to state 150 - yacc.py:2714: arg_list shift and go to state 221 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 - yacc.py:2561: - yacc.py:2562:state 192 - yacc.py:2563: - yacc.py:2565: (35) expr -> let let_list in expr . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 35 (expr -> let let_list in expr .) - yacc.py:2687: of reduce using rule 35 (expr -> let let_list in expr .) - yacc.py:2687: then reduce using rule 35 (expr -> let let_list in expr .) - yacc.py:2687: loop reduce using rule 35 (expr -> let let_list in expr .) - yacc.py:2687: cpar reduce using rule 35 (expr -> let let_list in expr .) - yacc.py:2687: comma reduce using rule 35 (expr -> let let_list in expr .) - yacc.py:2687: in reduce using rule 35 (expr -> let let_list in expr .) - yacc.py:2687: else reduce using rule 35 (expr -> let let_list in expr .) - yacc.py:2687: pool reduce using rule 35 (expr -> let let_list in expr .) - yacc.py:2687: error reduce using rule 35 (expr -> let let_list in expr .) - yacc.py:2687: ccur reduce using rule 35 (expr -> let let_list in expr .) - yacc.py:2687: fi reduce using rule 35 (expr -> let let_list in expr .) - yacc.py:2689: + yacc.py:2714: expr shift and go to state 228 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 193 yacc.py:2563: - yacc.py:2565: (37) expr -> let let_list in error . - yacc.py:2565: (76) base_call -> error . arroba type dot func_call - yacc.py:2565: (96) func_call -> error . opar args cpar - yacc.py:2566: - yacc.py:2687: semi reduce using rule 37 (expr -> let let_list in error .) - yacc.py:2687: of reduce using rule 37 (expr -> let let_list in error .) - yacc.py:2687: then reduce using rule 37 (expr -> let let_list in error .) - yacc.py:2687: loop reduce using rule 37 (expr -> let let_list in error .) - yacc.py:2687: cpar reduce using rule 37 (expr -> let let_list in error .) - yacc.py:2687: comma reduce using rule 37 (expr -> let let_list in error .) - yacc.py:2687: in reduce using rule 37 (expr -> let let_list in error .) - yacc.py:2687: else reduce using rule 37 (expr -> let let_list in error .) - yacc.py:2687: pool reduce using rule 37 (expr -> let let_list in error .) - yacc.py:2687: error reduce using rule 37 (expr -> let let_list in error .) - yacc.py:2687: ccur reduce using rule 37 (expr -> let let_list in error .) - yacc.py:2687: fi reduce using rule 37 (expr -> let let_list in error .) - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 109 + yacc.py:2565: (87) factor -> let let_list error . expr + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: error shift and go to state 72 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2714: expr shift and go to state 230 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 194 yacc.py:2563: - yacc.py:2565: (36) expr -> let error in expr . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 36 (expr -> let error in expr .) - yacc.py:2687: of reduce using rule 36 (expr -> let error in expr .) - yacc.py:2687: then reduce using rule 36 (expr -> let error in expr .) - yacc.py:2687: loop reduce using rule 36 (expr -> let error in expr .) - yacc.py:2687: cpar reduce using rule 36 (expr -> let error in expr .) - yacc.py:2687: comma reduce using rule 36 (expr -> let error in expr .) - yacc.py:2687: in reduce using rule 36 (expr -> let error in expr .) - yacc.py:2687: else reduce using rule 36 (expr -> let error in expr .) - yacc.py:2687: pool reduce using rule 36 (expr -> let error in expr .) - yacc.py:2687: error reduce using rule 36 (expr -> let error in expr .) - yacc.py:2687: ccur reduce using rule 36 (expr -> let error in expr .) - yacc.py:2687: fi reduce using rule 36 (expr -> let error in expr .) - yacc.py:2689: + yacc.py:2565: (40) let_list -> error . let_list + yacc.py:2565: (41) let_list -> error . + yacc.py:2565: (38) let_list -> . let_assign + yacc.py:2565: (39) let_list -> . let_assign comma let_list + yacc.py:2565: (40) let_list -> . error let_list + yacc.py:2565: (41) let_list -> . error + yacc.py:2565: (42) let_assign -> . param larrow expr + yacc.py:2565: (43) let_assign -> . param + yacc.py:2565: (37) param -> . id colon type + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for error resolved as shift + yacc.py:2687: in reduce using rule 41 (let_list -> error .) + yacc.py:2687: error shift and go to state 194 + yacc.py:2687: id shift and go to state 47 + yacc.py:2689: + yacc.py:2696: ! error [ reduce using rule 41 (let_list -> error .) ] + yacc.py:2700: + yacc.py:2714: let_list shift and go to state 196 + yacc.py:2714: let_assign shift and go to state 137 + yacc.py:2714: param shift and go to state 138 yacc.py:2561: yacc.py:2562:state 195 yacc.py:2563: - yacc.py:2565: (51) let_list -> let_assign comma let_list . - yacc.py:2566: - yacc.py:2687: in reduce using rule 51 (let_list -> let_assign comma let_list .) + yacc.py:2565: (85) factor -> let error in . expr + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: error shift and go to state 72 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2714: expr shift and go to state 231 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 196 yacc.py:2563: - yacc.py:2565: (53) let_assign -> param larrow expr . + yacc.py:2565: (40) let_list -> error let_list . yacc.py:2566: - yacc.py:2687: comma reduce using rule 53 (let_assign -> param larrow expr .) - yacc.py:2687: in reduce using rule 53 (let_assign -> param larrow expr .) + yacc.py:2687: in reduce using rule 40 (let_list -> error let_list .) + yacc.py:2687: error reduce using rule 40 (let_list -> error let_list .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 197 yacc.py:2563: - yacc.py:2565: (38) expr -> case expr of cases_list . esac + yacc.py:2565: (39) let_list -> let_assign comma . let_list + yacc.py:2565: (38) let_list -> . let_assign + yacc.py:2565: (39) let_list -> . let_assign comma let_list + yacc.py:2565: (40) let_list -> . error let_list + yacc.py:2565: (41) let_list -> . error + yacc.py:2565: (42) let_assign -> . param larrow expr + yacc.py:2565: (43) let_assign -> . param + yacc.py:2565: (37) param -> . id colon type yacc.py:2566: - yacc.py:2687: esac shift and go to state 222 + yacc.py:2687: error shift and go to state 194 + yacc.py:2687: id shift and go to state 47 yacc.py:2689: + yacc.py:2714: let_assign shift and go to state 137 + yacc.py:2714: let_list shift and go to state 232 + yacc.py:2714: param shift and go to state 138 yacc.py:2561: yacc.py:2562:state 198 yacc.py:2563: - yacc.py:2565: (40) expr -> case expr of error . esac - yacc.py:2565: (57) cases_list -> error . cases_list - yacc.py:2565: (55) cases_list -> . casep semi - yacc.py:2565: (56) cases_list -> . casep semi cases_list - yacc.py:2565: (57) cases_list -> . error cases_list - yacc.py:2565: (58) casep -> . id colon type rarrow expr - yacc.py:2566: - yacc.py:2687: esac shift and go to state 223 - yacc.py:2687: error shift and go to state 201 - yacc.py:2687: id shift and go to state 200 + yacc.py:2565: (42) let_assign -> param larrow . expr + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: error shift and go to state 72 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: cases_list shift and go to state 224 - yacc.py:2714: casep shift and go to state 199 + yacc.py:2714: expr shift and go to state 233 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 199 yacc.py:2563: - yacc.py:2565: (55) cases_list -> casep . semi - yacc.py:2565: (56) cases_list -> casep . semi cases_list + yacc.py:2565: (88) factor -> case expr of . cases_list esac + yacc.py:2565: (90) factor -> case expr of . error esac + yacc.py:2565: (92) factor -> case expr of . cases_list error + yacc.py:2565: (44) cases_list -> . casep semi + yacc.py:2565: (45) cases_list -> . casep semi cases_list + yacc.py:2565: (46) cases_list -> . error cases_list + yacc.py:2565: (47) cases_list -> . error semi + yacc.py:2565: (48) casep -> . id colon type rarrow expr yacc.py:2566: - yacc.py:2687: semi shift and go to state 225 + yacc.py:2687: error shift and go to state 235 + yacc.py:2687: id shift and go to state 237 yacc.py:2689: + yacc.py:2714: cases_list shift and go to state 234 + yacc.py:2714: casep shift and go to state 236 yacc.py:2561: yacc.py:2562:state 200 yacc.py:2563: - yacc.py:2565: (58) casep -> id . colon type rarrow expr + yacc.py:2565: (91) factor -> case expr error . cases_list esac + yacc.py:2565: (44) cases_list -> . casep semi + yacc.py:2565: (45) cases_list -> . casep semi cases_list + yacc.py:2565: (46) cases_list -> . error cases_list + yacc.py:2565: (47) cases_list -> . error semi + yacc.py:2565: (48) casep -> . id colon type rarrow expr yacc.py:2566: - yacc.py:2687: colon shift and go to state 226 + yacc.py:2687: error shift and go to state 238 + yacc.py:2687: id shift and go to state 237 yacc.py:2689: + yacc.py:2714: cases_list shift and go to state 239 + yacc.py:2714: casep shift and go to state 236 yacc.py:2561: yacc.py:2562:state 201 yacc.py:2563: - yacc.py:2565: (57) cases_list -> error . cases_list - yacc.py:2565: (55) cases_list -> . casep semi - yacc.py:2565: (56) cases_list -> . casep semi cases_list - yacc.py:2565: (57) cases_list -> . error cases_list - yacc.py:2565: (58) casep -> . id colon type rarrow expr + yacc.py:2565: (89) factor -> case error of . cases_list esac + yacc.py:2565: (44) cases_list -> . casep semi + yacc.py:2565: (45) cases_list -> . casep semi cases_list + yacc.py:2565: (46) cases_list -> . error cases_list + yacc.py:2565: (47) cases_list -> . error semi + yacc.py:2565: (48) casep -> . id colon type rarrow expr yacc.py:2566: - yacc.py:2687: error shift and go to state 201 - yacc.py:2687: id shift and go to state 200 + yacc.py:2687: error shift and go to state 238 + yacc.py:2687: id shift and go to state 237 yacc.py:2689: - yacc.py:2714: cases_list shift and go to state 224 - yacc.py:2714: casep shift and go to state 199 + yacc.py:2714: cases_list shift and go to state 240 + yacc.py:2714: casep shift and go to state 236 yacc.py:2561: yacc.py:2562:state 202 yacc.py:2563: - yacc.py:2565: (39) expr -> case error of cases_list . esac - yacc.py:2566: - yacc.py:2687: esac shift and go to state 227 + yacc.py:2565: (93) factor -> if expr then . expr else expr fi + yacc.py:2565: (95) factor -> if expr then . error else expr fi + yacc.py:2565: (96) factor -> if expr then . expr else error fi + yacc.py:2565: (98) factor -> if expr then . expr error error expr fi + yacc.py:2565: (99) factor -> if expr then . expr error expr fi + yacc.py:2565: (100) factor -> if expr then . expr else expr error + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 242 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2714: expr shift and go to state 241 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 203 yacc.py:2563: - yacc.py:2565: (41) expr -> if expr then expr . else expr fi - yacc.py:2565: (44) expr -> if expr then expr . else error fi - yacc.py:2566: - yacc.py:2687: else shift and go to state 228 + yacc.py:2565: (97) factor -> if expr error . expr else expr fi + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: error shift and go to state 72 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2714: expr shift and go to state 243 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 204 yacc.py:2563: - yacc.py:2565: (43) expr -> if expr then error . else expr fi - yacc.py:2565: (76) base_call -> error . arroba type dot func_call - yacc.py:2565: (96) func_call -> error . opar args cpar - yacc.py:2566: - yacc.py:2687: else shift and go to state 229 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 109 + yacc.py:2565: (94) factor -> if error then . expr else expr fi + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: error shift and go to state 72 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2714: expr shift and go to state 244 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 205 yacc.py:2563: - yacc.py:2565: (42) expr -> if error then expr . else expr fi - yacc.py:2566: - yacc.py:2687: else shift and go to state 230 + yacc.py:2565: (101) factor -> if error fi . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 101 (factor -> if error fi .) + yacc.py:2687: dot reduce using rule 101 (factor -> if error fi .) + yacc.py:2687: star reduce using rule 101 (factor -> if error fi .) + yacc.py:2687: div reduce using rule 101 (factor -> if error fi .) + yacc.py:2687: plus reduce using rule 101 (factor -> if error fi .) + yacc.py:2687: minus reduce using rule 101 (factor -> if error fi .) + yacc.py:2687: less reduce using rule 101 (factor -> if error fi .) + yacc.py:2687: lesseq reduce using rule 101 (factor -> if error fi .) + yacc.py:2687: equal reduce using rule 101 (factor -> if error fi .) + yacc.py:2687: semi reduce using rule 101 (factor -> if error fi .) + yacc.py:2687: cpar reduce using rule 101 (factor -> if error fi .) + yacc.py:2687: error reduce using rule 101 (factor -> if error fi .) + yacc.py:2687: of reduce using rule 101 (factor -> if error fi .) + yacc.py:2687: then reduce using rule 101 (factor -> if error fi .) + yacc.py:2687: loop reduce using rule 101 (factor -> if error fi .) + yacc.py:2687: comma reduce using rule 101 (factor -> if error fi .) + yacc.py:2687: in reduce using rule 101 (factor -> if error fi .) + yacc.py:2687: else reduce using rule 101 (factor -> if error fi .) + yacc.py:2687: pool reduce using rule 101 (factor -> if error fi .) + yacc.py:2687: ccur reduce using rule 101 (factor -> if error fi .) + yacc.py:2687: fi reduce using rule 101 (factor -> if error fi .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 206 yacc.py:2563: - yacc.py:2565: (45) expr -> while expr loop expr . pool - yacc.py:2565: (48) expr -> while expr loop expr . error - yacc.py:2566: - yacc.py:2687: pool shift and go to state 231 - yacc.py:2687: error shift and go to state 232 + yacc.py:2565: (102) factor -> while expr loop . expr pool + yacc.py:2565: (104) factor -> while expr loop . error pool + yacc.py:2565: (105) factor -> while expr loop . expr error + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 246 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2714: expr shift and go to state 245 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 207 yacc.py:2563: - yacc.py:2565: (47) expr -> while expr loop error . pool - yacc.py:2565: (76) base_call -> error . arroba type dot func_call - yacc.py:2565: (96) func_call -> error . opar args cpar - yacc.py:2566: - yacc.py:2687: pool shift and go to state 233 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 109 + yacc.py:2565: (106) factor -> while expr error . expr loop expr pool + yacc.py:2565: (107) factor -> while expr error . expr pool + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: error shift and go to state 72 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2714: expr shift and go to state 247 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 208 yacc.py:2563: - yacc.py:2565: (46) expr -> while error loop expr . pool - yacc.py:2566: - yacc.py:2687: pool shift and go to state 234 + yacc.py:2565: (103) factor -> while error loop . expr pool + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: error shift and go to state 72 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2714: expr shift and go to state 248 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 209 yacc.py:2563: - yacc.py:2565: (94) func_call -> id opar args cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 94 (func_call -> id opar args cpar .) - yacc.py:2687: dot reduce using rule 94 (func_call -> id opar args cpar .) - yacc.py:2687: star reduce using rule 94 (func_call -> id opar args cpar .) - yacc.py:2687: div reduce using rule 94 (func_call -> id opar args cpar .) - yacc.py:2687: plus reduce using rule 94 (func_call -> id opar args cpar .) - yacc.py:2687: minus reduce using rule 94 (func_call -> id opar args cpar .) - yacc.py:2687: less reduce using rule 94 (func_call -> id opar args cpar .) - yacc.py:2687: lesseq reduce using rule 94 (func_call -> id opar args cpar .) - yacc.py:2687: equal reduce using rule 94 (func_call -> id opar args cpar .) - yacc.py:2687: semi reduce using rule 94 (func_call -> id opar args cpar .) - yacc.py:2687: of reduce using rule 94 (func_call -> id opar args cpar .) - yacc.py:2687: then reduce using rule 94 (func_call -> id opar args cpar .) - yacc.py:2687: loop reduce using rule 94 (func_call -> id opar args cpar .) - yacc.py:2687: cpar reduce using rule 94 (func_call -> id opar args cpar .) - yacc.py:2687: comma reduce using rule 94 (func_call -> id opar args cpar .) - yacc.py:2687: in reduce using rule 94 (func_call -> id opar args cpar .) - yacc.py:2687: else reduce using rule 94 (func_call -> id opar args cpar .) - yacc.py:2687: pool reduce using rule 94 (func_call -> id opar args cpar .) - yacc.py:2687: error reduce using rule 94 (func_call -> id opar args cpar .) - yacc.py:2687: ccur reduce using rule 94 (func_call -> id opar args cpar .) - yacc.py:2687: fi reduce using rule 94 (func_call -> id opar args cpar .) + yacc.py:2565: (112) atom -> ocur block ccur . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 112 (atom -> ocur block ccur .) + yacc.py:2687: dot reduce using rule 112 (atom -> ocur block ccur .) + yacc.py:2687: star reduce using rule 112 (atom -> ocur block ccur .) + yacc.py:2687: div reduce using rule 112 (atom -> ocur block ccur .) + yacc.py:2687: plus reduce using rule 112 (atom -> ocur block ccur .) + yacc.py:2687: minus reduce using rule 112 (atom -> ocur block ccur .) + yacc.py:2687: less reduce using rule 112 (atom -> ocur block ccur .) + yacc.py:2687: lesseq reduce using rule 112 (atom -> ocur block ccur .) + yacc.py:2687: equal reduce using rule 112 (atom -> ocur block ccur .) + yacc.py:2687: semi reduce using rule 112 (atom -> ocur block ccur .) + yacc.py:2687: cpar reduce using rule 112 (atom -> ocur block ccur .) + yacc.py:2687: error reduce using rule 112 (atom -> ocur block ccur .) + yacc.py:2687: of reduce using rule 112 (atom -> ocur block ccur .) + yacc.py:2687: then reduce using rule 112 (atom -> ocur block ccur .) + yacc.py:2687: loop reduce using rule 112 (atom -> ocur block ccur .) + yacc.py:2687: comma reduce using rule 112 (atom -> ocur block ccur .) + yacc.py:2687: in reduce using rule 112 (atom -> ocur block ccur .) + yacc.py:2687: else reduce using rule 112 (atom -> ocur block ccur .) + yacc.py:2687: pool reduce using rule 112 (atom -> ocur block ccur .) + yacc.py:2687: ccur reduce using rule 112 (atom -> ocur block ccur .) + yacc.py:2687: fi reduce using rule 112 (atom -> ocur block ccur .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 210 yacc.py:2563: - yacc.py:2565: (95) func_call -> id opar error cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 95 (func_call -> id opar error cpar .) - yacc.py:2687: dot reduce using rule 95 (func_call -> id opar error cpar .) - yacc.py:2687: star reduce using rule 95 (func_call -> id opar error cpar .) - yacc.py:2687: div reduce using rule 95 (func_call -> id opar error cpar .) - yacc.py:2687: plus reduce using rule 95 (func_call -> id opar error cpar .) - yacc.py:2687: minus reduce using rule 95 (func_call -> id opar error cpar .) - yacc.py:2687: less reduce using rule 95 (func_call -> id opar error cpar .) - yacc.py:2687: lesseq reduce using rule 95 (func_call -> id opar error cpar .) - yacc.py:2687: equal reduce using rule 95 (func_call -> id opar error cpar .) - yacc.py:2687: semi reduce using rule 95 (func_call -> id opar error cpar .) - yacc.py:2687: of reduce using rule 95 (func_call -> id opar error cpar .) - yacc.py:2687: then reduce using rule 95 (func_call -> id opar error cpar .) - yacc.py:2687: loop reduce using rule 95 (func_call -> id opar error cpar .) - yacc.py:2687: cpar reduce using rule 95 (func_call -> id opar error cpar .) - yacc.py:2687: comma reduce using rule 95 (func_call -> id opar error cpar .) - yacc.py:2687: in reduce using rule 95 (func_call -> id opar error cpar .) - yacc.py:2687: else reduce using rule 95 (func_call -> id opar error cpar .) - yacc.py:2687: pool reduce using rule 95 (func_call -> id opar error cpar .) - yacc.py:2687: error reduce using rule 95 (func_call -> id opar error cpar .) - yacc.py:2687: ccur reduce using rule 95 (func_call -> id opar error cpar .) - yacc.py:2687: fi reduce using rule 95 (func_call -> id opar error cpar .) + yacc.py:2565: (115) atom -> ocur block error . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 115 (atom -> ocur block error .) + yacc.py:2687: dot reduce using rule 115 (atom -> ocur block error .) + yacc.py:2687: star reduce using rule 115 (atom -> ocur block error .) + yacc.py:2687: div reduce using rule 115 (atom -> ocur block error .) + yacc.py:2687: plus reduce using rule 115 (atom -> ocur block error .) + yacc.py:2687: minus reduce using rule 115 (atom -> ocur block error .) + yacc.py:2687: less reduce using rule 115 (atom -> ocur block error .) + yacc.py:2687: lesseq reduce using rule 115 (atom -> ocur block error .) + yacc.py:2687: equal reduce using rule 115 (atom -> ocur block error .) + yacc.py:2687: semi reduce using rule 115 (atom -> ocur block error .) + yacc.py:2687: cpar reduce using rule 115 (atom -> ocur block error .) + yacc.py:2687: error reduce using rule 115 (atom -> ocur block error .) + yacc.py:2687: of reduce using rule 115 (atom -> ocur block error .) + yacc.py:2687: then reduce using rule 115 (atom -> ocur block error .) + yacc.py:2687: loop reduce using rule 115 (atom -> ocur block error .) + yacc.py:2687: comma reduce using rule 115 (atom -> ocur block error .) + yacc.py:2687: in reduce using rule 115 (atom -> ocur block error .) + yacc.py:2687: else reduce using rule 115 (atom -> ocur block error .) + yacc.py:2687: pool reduce using rule 115 (atom -> ocur block error .) + yacc.py:2687: ccur reduce using rule 115 (atom -> ocur block error .) + yacc.py:2687: fi reduce using rule 115 (atom -> ocur block error .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 211 yacc.py:2563: - yacc.py:2565: (74) base_call -> factor arroba type dot . func_call - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 177 - yacc.py:2687: error shift and go to state 178 + yacc.py:2565: (114) atom -> ocur error ccur . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 114 (atom -> ocur error ccur .) + yacc.py:2687: dot reduce using rule 114 (atom -> ocur error ccur .) + yacc.py:2687: star reduce using rule 114 (atom -> ocur error ccur .) + yacc.py:2687: div reduce using rule 114 (atom -> ocur error ccur .) + yacc.py:2687: plus reduce using rule 114 (atom -> ocur error ccur .) + yacc.py:2687: minus reduce using rule 114 (atom -> ocur error ccur .) + yacc.py:2687: less reduce using rule 114 (atom -> ocur error ccur .) + yacc.py:2687: lesseq reduce using rule 114 (atom -> ocur error ccur .) + yacc.py:2687: equal reduce using rule 114 (atom -> ocur error ccur .) + yacc.py:2687: semi reduce using rule 114 (atom -> ocur error ccur .) + yacc.py:2687: cpar reduce using rule 114 (atom -> ocur error ccur .) + yacc.py:2687: error reduce using rule 114 (atom -> ocur error ccur .) + yacc.py:2687: of reduce using rule 114 (atom -> ocur error ccur .) + yacc.py:2687: then reduce using rule 114 (atom -> ocur error ccur .) + yacc.py:2687: loop reduce using rule 114 (atom -> ocur error ccur .) + yacc.py:2687: comma reduce using rule 114 (atom -> ocur error ccur .) + yacc.py:2687: in reduce using rule 114 (atom -> ocur error ccur .) + yacc.py:2687: else reduce using rule 114 (atom -> ocur error ccur .) + yacc.py:2687: pool reduce using rule 114 (atom -> ocur error ccur .) + yacc.py:2687: ccur reduce using rule 114 (atom -> ocur error ccur .) + yacc.py:2687: fi reduce using rule 114 (atom -> ocur error ccur .) yacc.py:2689: - yacc.py:2714: func_call shift and go to state 235 yacc.py:2561: yacc.py:2562:state 212 yacc.py:2563: - yacc.py:2565: (77) base_call -> factor arroba error dot . func_call - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 177 - yacc.py:2687: error shift and go to state 178 + yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur . expr ccur + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: error shift and go to state 72 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: func_call shift and go to state 236 + yacc.py:2714: expr shift and go to state 249 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 213 yacc.py:2563: - yacc.py:2565: (91) block -> expr semi block . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 91 (block -> expr semi block .) + yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur . expr ccur + yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur . error ccur + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 251 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2714: expr shift and go to state 250 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 214 yacc.py:2563: - yacc.py:2565: (79) factor -> opar expr . cpar - yacc.py:2565: (99) arg_list -> expr . - yacc.py:2565: (100) arg_list -> expr . comma arg_list - yacc.py:2566: - yacc.py:2609: ! shift/reduce conflict for cpar resolved as shift - yacc.py:2687: cpar shift and go to state 179 - yacc.py:2687: comma shift and go to state 191 + yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur . expr ccur + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: error shift and go to state 72 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2696: ! cpar [ reduce using rule 99 (arg_list -> expr .) ] - yacc.py:2700: + yacc.py:2714: expr shift and go to state 252 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 215 yacc.py:2563: - yacc.py:2565: (24) def_func -> error opar formals cpar colon type ocur expr . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 237 + yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur . expr ccur + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: error shift and go to state 72 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2714: expr shift and go to state 253 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 216 yacc.py:2563: - yacc.py:2565: (23) def_func -> id opar formals cpar colon type ocur expr . ccur + yacc.py:2565: (74) base_call -> error arroba type dot . func_call + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar yacc.py:2566: - yacc.py:2687: ccur shift and go to state 238 + yacc.py:2687: id shift and go to state 187 + yacc.py:2687: error shift and go to state 188 yacc.py:2689: + yacc.py:2714: func_call shift and go to state 254 yacc.py:2561: yacc.py:2562:state 217 yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar formals cpar colon type ocur error . ccur - yacc.py:2565: (76) base_call -> error . arroba type dot func_call - yacc.py:2565: (96) func_call -> error . opar args cpar + yacc.py:2565: (120) block -> expr semi block . yacc.py:2566: - yacc.py:2687: ccur shift and go to state 239 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 109 + yacc.py:2687: ccur reduce using rule 120 (block -> expr semi block .) + yacc.py:2687: error reduce using rule 120 (block -> expr semi block .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 218 yacc.py:2563: - yacc.py:2565: (26) def_func -> id opar formals cpar colon error ocur expr . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 240 + yacc.py:2565: (130) arg_list -> error . arg_list + yacc.py:2565: (121) block -> error . block + yacc.py:2565: (122) block -> error . semi + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (128) arg_list -> . expr + yacc.py:2565: (129) arg_list -> . expr comma arg_list + yacc.py:2565: (130) arg_list -> . error arg_list + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: semi shift and go to state 155 + yacc.py:2687: arroba shift and go to state 112 + yacc.py:2687: opar shift and go to state 115 + yacc.py:2687: error shift and go to state 218 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2714: arg_list shift and go to state 219 + yacc.py:2714: block shift and go to state 154 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: expr shift and go to state 220 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 219 yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar error cpar colon type ocur expr . ccur + yacc.py:2565: (130) arg_list -> error arg_list . yacc.py:2566: - yacc.py:2687: ccur shift and go to state 241 + yacc.py:2687: cpar reduce using rule 130 (arg_list -> error arg_list .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 220 yacc.py:2563: - yacc.py:2565: (76) base_call -> error arroba type dot func_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 76 (base_call -> error arroba type dot func_call .) - yacc.py:2687: div reduce using rule 76 (base_call -> error arroba type dot func_call .) - yacc.py:2687: plus reduce using rule 76 (base_call -> error arroba type dot func_call .) - yacc.py:2687: minus reduce using rule 76 (base_call -> error arroba type dot func_call .) - yacc.py:2687: less reduce using rule 76 (base_call -> error arroba type dot func_call .) - yacc.py:2687: lesseq reduce using rule 76 (base_call -> error arroba type dot func_call .) - yacc.py:2687: equal reduce using rule 76 (base_call -> error arroba type dot func_call .) - yacc.py:2687: semi reduce using rule 76 (base_call -> error arroba type dot func_call .) - yacc.py:2687: of reduce using rule 76 (base_call -> error arroba type dot func_call .) - yacc.py:2687: then reduce using rule 76 (base_call -> error arroba type dot func_call .) - yacc.py:2687: loop reduce using rule 76 (base_call -> error arroba type dot func_call .) - yacc.py:2687: cpar reduce using rule 76 (base_call -> error arroba type dot func_call .) - yacc.py:2687: comma reduce using rule 76 (base_call -> error arroba type dot func_call .) - yacc.py:2687: in reduce using rule 76 (base_call -> error arroba type dot func_call .) - yacc.py:2687: else reduce using rule 76 (base_call -> error arroba type dot func_call .) - yacc.py:2687: pool reduce using rule 76 (base_call -> error arroba type dot func_call .) - yacc.py:2687: error reduce using rule 76 (base_call -> error arroba type dot func_call .) - yacc.py:2687: ccur reduce using rule 76 (base_call -> error arroba type dot func_call .) - yacc.py:2687: fi reduce using rule 76 (base_call -> error arroba type dot func_call .) + yacc.py:2565: (79) factor -> error expr . cpar + yacc.py:2565: (128) arg_list -> expr . + yacc.py:2565: (129) arg_list -> expr . comma arg_list + yacc.py:2565: (119) block -> expr . semi + yacc.py:2565: (120) block -> expr . semi block + yacc.py:2566: + yacc.py:2609: ! shift/reduce conflict for cpar resolved as shift + yacc.py:2687: cpar shift and go to state 157 + yacc.py:2687: comma shift and go to state 222 + yacc.py:2687: semi shift and go to state 158 yacc.py:2689: + yacc.py:2696: ! cpar [ reduce using rule 128 (arg_list -> expr .) ] + yacc.py:2700: yacc.py:2561: yacc.py:2562:state 221 yacc.py:2563: - yacc.py:2565: (100) arg_list -> expr comma arg_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 100 (arg_list -> expr comma arg_list .) + yacc.py:2565: (125) func_call -> error opar args cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 125 (func_call -> error opar args cpar .) + yacc.py:2687: dot reduce using rule 125 (func_call -> error opar args cpar .) + yacc.py:2687: star reduce using rule 125 (func_call -> error opar args cpar .) + yacc.py:2687: div reduce using rule 125 (func_call -> error opar args cpar .) + yacc.py:2687: plus reduce using rule 125 (func_call -> error opar args cpar .) + yacc.py:2687: minus reduce using rule 125 (func_call -> error opar args cpar .) + yacc.py:2687: less reduce using rule 125 (func_call -> error opar args cpar .) + yacc.py:2687: lesseq reduce using rule 125 (func_call -> error opar args cpar .) + yacc.py:2687: equal reduce using rule 125 (func_call -> error opar args cpar .) + yacc.py:2687: semi reduce using rule 125 (func_call -> error opar args cpar .) + yacc.py:2687: cpar reduce using rule 125 (func_call -> error opar args cpar .) + yacc.py:2687: error reduce using rule 125 (func_call -> error opar args cpar .) + yacc.py:2687: of reduce using rule 125 (func_call -> error opar args cpar .) + yacc.py:2687: then reduce using rule 125 (func_call -> error opar args cpar .) + yacc.py:2687: loop reduce using rule 125 (func_call -> error opar args cpar .) + yacc.py:2687: comma reduce using rule 125 (func_call -> error opar args cpar .) + yacc.py:2687: in reduce using rule 125 (func_call -> error opar args cpar .) + yacc.py:2687: else reduce using rule 125 (func_call -> error opar args cpar .) + yacc.py:2687: pool reduce using rule 125 (func_call -> error opar args cpar .) + yacc.py:2687: ccur reduce using rule 125 (func_call -> error opar args cpar .) + yacc.py:2687: fi reduce using rule 125 (func_call -> error opar args cpar .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 222 yacc.py:2563: - yacc.py:2565: (38) expr -> case expr of cases_list esac . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 38 (expr -> case expr of cases_list esac .) - yacc.py:2687: of reduce using rule 38 (expr -> case expr of cases_list esac .) - yacc.py:2687: then reduce using rule 38 (expr -> case expr of cases_list esac .) - yacc.py:2687: loop reduce using rule 38 (expr -> case expr of cases_list esac .) - yacc.py:2687: cpar reduce using rule 38 (expr -> case expr of cases_list esac .) - yacc.py:2687: comma reduce using rule 38 (expr -> case expr of cases_list esac .) - yacc.py:2687: in reduce using rule 38 (expr -> case expr of cases_list esac .) - yacc.py:2687: else reduce using rule 38 (expr -> case expr of cases_list esac .) - yacc.py:2687: pool reduce using rule 38 (expr -> case expr of cases_list esac .) - yacc.py:2687: error reduce using rule 38 (expr -> case expr of cases_list esac .) - yacc.py:2687: ccur reduce using rule 38 (expr -> case expr of cases_list esac .) - yacc.py:2687: fi reduce using rule 38 (expr -> case expr of cases_list esac .) + yacc.py:2565: (129) arg_list -> expr comma . arg_list + yacc.py:2565: (128) arg_list -> . expr + yacc.py:2565: (129) arg_list -> . expr comma arg_list + yacc.py:2565: (130) arg_list -> . error arg_list + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 256 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2714: expr shift and go to state 169 + yacc.py:2714: arg_list shift and go to state 255 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 223 yacc.py:2563: - yacc.py:2565: (40) expr -> case expr of error esac . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 40 (expr -> case expr of error esac .) - yacc.py:2687: of reduce using rule 40 (expr -> case expr of error esac .) - yacc.py:2687: then reduce using rule 40 (expr -> case expr of error esac .) - yacc.py:2687: loop reduce using rule 40 (expr -> case expr of error esac .) - yacc.py:2687: cpar reduce using rule 40 (expr -> case expr of error esac .) - yacc.py:2687: comma reduce using rule 40 (expr -> case expr of error esac .) - yacc.py:2687: in reduce using rule 40 (expr -> case expr of error esac .) - yacc.py:2687: else reduce using rule 40 (expr -> case expr of error esac .) - yacc.py:2687: pool reduce using rule 40 (expr -> case expr of error esac .) - yacc.py:2687: error reduce using rule 40 (expr -> case expr of error esac .) - yacc.py:2687: ccur reduce using rule 40 (expr -> case expr of error esac .) - yacc.py:2687: fi reduce using rule 40 (expr -> case expr of error esac .) + yacc.py:2565: (123) func_call -> id opar args cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 123 (func_call -> id opar args cpar .) + yacc.py:2687: dot reduce using rule 123 (func_call -> id opar args cpar .) + yacc.py:2687: star reduce using rule 123 (func_call -> id opar args cpar .) + yacc.py:2687: div reduce using rule 123 (func_call -> id opar args cpar .) + yacc.py:2687: plus reduce using rule 123 (func_call -> id opar args cpar .) + yacc.py:2687: minus reduce using rule 123 (func_call -> id opar args cpar .) + yacc.py:2687: less reduce using rule 123 (func_call -> id opar args cpar .) + yacc.py:2687: lesseq reduce using rule 123 (func_call -> id opar args cpar .) + yacc.py:2687: equal reduce using rule 123 (func_call -> id opar args cpar .) + yacc.py:2687: semi reduce using rule 123 (func_call -> id opar args cpar .) + yacc.py:2687: cpar reduce using rule 123 (func_call -> id opar args cpar .) + yacc.py:2687: error reduce using rule 123 (func_call -> id opar args cpar .) + yacc.py:2687: of reduce using rule 123 (func_call -> id opar args cpar .) + yacc.py:2687: then reduce using rule 123 (func_call -> id opar args cpar .) + yacc.py:2687: loop reduce using rule 123 (func_call -> id opar args cpar .) + yacc.py:2687: comma reduce using rule 123 (func_call -> id opar args cpar .) + yacc.py:2687: in reduce using rule 123 (func_call -> id opar args cpar .) + yacc.py:2687: else reduce using rule 123 (func_call -> id opar args cpar .) + yacc.py:2687: pool reduce using rule 123 (func_call -> id opar args cpar .) + yacc.py:2687: ccur reduce using rule 123 (func_call -> id opar args cpar .) + yacc.py:2687: fi reduce using rule 123 (func_call -> id opar args cpar .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 224 yacc.py:2563: - yacc.py:2565: (57) cases_list -> error cases_list . - yacc.py:2566: - yacc.py:2687: esac reduce using rule 57 (cases_list -> error cases_list .) + yacc.py:2565: (124) func_call -> id opar error cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 124 (func_call -> id opar error cpar .) + yacc.py:2687: dot reduce using rule 124 (func_call -> id opar error cpar .) + yacc.py:2687: star reduce using rule 124 (func_call -> id opar error cpar .) + yacc.py:2687: div reduce using rule 124 (func_call -> id opar error cpar .) + yacc.py:2687: plus reduce using rule 124 (func_call -> id opar error cpar .) + yacc.py:2687: minus reduce using rule 124 (func_call -> id opar error cpar .) + yacc.py:2687: less reduce using rule 124 (func_call -> id opar error cpar .) + yacc.py:2687: lesseq reduce using rule 124 (func_call -> id opar error cpar .) + yacc.py:2687: equal reduce using rule 124 (func_call -> id opar error cpar .) + yacc.py:2687: semi reduce using rule 124 (func_call -> id opar error cpar .) + yacc.py:2687: cpar reduce using rule 124 (func_call -> id opar error cpar .) + yacc.py:2687: error reduce using rule 124 (func_call -> id opar error cpar .) + yacc.py:2687: of reduce using rule 124 (func_call -> id opar error cpar .) + yacc.py:2687: then reduce using rule 124 (func_call -> id opar error cpar .) + yacc.py:2687: loop reduce using rule 124 (func_call -> id opar error cpar .) + yacc.py:2687: comma reduce using rule 124 (func_call -> id opar error cpar .) + yacc.py:2687: in reduce using rule 124 (func_call -> id opar error cpar .) + yacc.py:2687: else reduce using rule 124 (func_call -> id opar error cpar .) + yacc.py:2687: pool reduce using rule 124 (func_call -> id opar error cpar .) + yacc.py:2687: ccur reduce using rule 124 (func_call -> id opar error cpar .) + yacc.py:2687: fi reduce using rule 124 (func_call -> id opar error cpar .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 225 yacc.py:2563: - yacc.py:2565: (55) cases_list -> casep semi . - yacc.py:2565: (56) cases_list -> casep semi . cases_list - yacc.py:2565: (55) cases_list -> . casep semi - yacc.py:2565: (56) cases_list -> . casep semi cases_list - yacc.py:2565: (57) cases_list -> . error cases_list - yacc.py:2565: (58) casep -> . id colon type rarrow expr + yacc.py:2565: (72) base_call -> factor arroba type dot . func_call + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar yacc.py:2566: - yacc.py:2687: esac reduce using rule 55 (cases_list -> casep semi .) - yacc.py:2687: error shift and go to state 201 - yacc.py:2687: id shift and go to state 200 + yacc.py:2687: id shift and go to state 187 + yacc.py:2687: error shift and go to state 188 yacc.py:2689: - yacc.py:2714: casep shift and go to state 199 - yacc.py:2714: cases_list shift and go to state 242 + yacc.py:2714: func_call shift and go to state 257 yacc.py:2561: yacc.py:2562:state 226 yacc.py:2563: - yacc.py:2565: (58) casep -> id colon . type rarrow expr + yacc.py:2565: (75) base_call -> factor arroba error dot . func_call + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar yacc.py:2566: - yacc.py:2687: type shift and go to state 243 + yacc.py:2687: id shift and go to state 187 + yacc.py:2687: error shift and go to state 188 yacc.py:2689: + yacc.py:2714: func_call shift and go to state 258 yacc.py:2561: yacc.py:2562:state 227 yacc.py:2563: - yacc.py:2565: (39) expr -> case error of cases_list esac . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 39 (expr -> case error of cases_list esac .) - yacc.py:2687: of reduce using rule 39 (expr -> case error of cases_list esac .) - yacc.py:2687: then reduce using rule 39 (expr -> case error of cases_list esac .) - yacc.py:2687: loop reduce using rule 39 (expr -> case error of cases_list esac .) - yacc.py:2687: cpar reduce using rule 39 (expr -> case error of cases_list esac .) - yacc.py:2687: comma reduce using rule 39 (expr -> case error of cases_list esac .) - yacc.py:2687: in reduce using rule 39 (expr -> case error of cases_list esac .) - yacc.py:2687: else reduce using rule 39 (expr -> case error of cases_list esac .) - yacc.py:2687: pool reduce using rule 39 (expr -> case error of cases_list esac .) - yacc.py:2687: error reduce using rule 39 (expr -> case error of cases_list esac .) - yacc.py:2687: ccur reduce using rule 39 (expr -> case error of cases_list esac .) - yacc.py:2687: fi reduce using rule 39 (expr -> case error of cases_list esac .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 228 - yacc.py:2563: - yacc.py:2565: (41) expr -> if expr then expr else . expr fi - yacc.py:2565: (44) expr -> if expr then expr else . error fi - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 245 - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: opar shift and go to state 89 + yacc.py:2565: (125) func_call -> error opar . args cpar + yacc.py:2565: (126) args -> . arg_list + yacc.py:2565: (127) args -> . arg_list_empty + yacc.py:2565: (128) arg_list -> . expr + yacc.py:2565: (129) arg_list -> . expr comma arg_list + yacc.py:2565: (130) arg_list -> . error arg_list + yacc.py:2565: (131) arg_list_empty -> . epsilon + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 256 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 yacc.py:2687: num shift and go to state 90 yacc.py:2687: new shift and go to state 91 yacc.py:2687: ocur shift and go to state 92 @@ -5622,79 +9170,163 @@ yacc.py:2687: false shift and go to state 94 yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: expr shift and go to state 244 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 + yacc.py:2714: args shift and go to state 161 + yacc.py:2714: arg_list shift and go to state 163 + yacc.py:2714: arg_list_empty shift and go to state 164 + yacc.py:2714: expr shift and go to state 169 + yacc.py:2714: epsilon shift and go to state 165 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 + yacc.py:2561: + yacc.py:2562:state 228 + yacc.py:2563: + yacc.py:2565: (84) factor -> let let_list in expr . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 84 (factor -> let let_list in expr .) + yacc.py:2687: dot reduce using rule 84 (factor -> let let_list in expr .) + yacc.py:2687: star reduce using rule 84 (factor -> let let_list in expr .) + yacc.py:2687: div reduce using rule 84 (factor -> let let_list in expr .) + yacc.py:2687: plus reduce using rule 84 (factor -> let let_list in expr .) + yacc.py:2687: minus reduce using rule 84 (factor -> let let_list in expr .) + yacc.py:2687: less reduce using rule 84 (factor -> let let_list in expr .) + yacc.py:2687: lesseq reduce using rule 84 (factor -> let let_list in expr .) + yacc.py:2687: equal reduce using rule 84 (factor -> let let_list in expr .) + yacc.py:2687: semi reduce using rule 84 (factor -> let let_list in expr .) + yacc.py:2687: cpar reduce using rule 84 (factor -> let let_list in expr .) + yacc.py:2687: error reduce using rule 84 (factor -> let let_list in expr .) + yacc.py:2687: of reduce using rule 84 (factor -> let let_list in expr .) + yacc.py:2687: then reduce using rule 84 (factor -> let let_list in expr .) + yacc.py:2687: loop reduce using rule 84 (factor -> let let_list in expr .) + yacc.py:2687: comma reduce using rule 84 (factor -> let let_list in expr .) + yacc.py:2687: in reduce using rule 84 (factor -> let let_list in expr .) + yacc.py:2687: else reduce using rule 84 (factor -> let let_list in expr .) + yacc.py:2687: pool reduce using rule 84 (factor -> let let_list in expr .) + yacc.py:2687: ccur reduce using rule 84 (factor -> let let_list in expr .) + yacc.py:2687: fi reduce using rule 84 (factor -> let let_list in expr .) + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 229 yacc.py:2563: - yacc.py:2565: (43) expr -> if expr then error else . expr fi - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: error shift and go to state 71 - yacc.py:2687: opar shift and go to state 89 + yacc.py:2565: (86) factor -> let let_list in error . + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2666: ! shift/reduce conflict for error resolved as shift + yacc.py:2687: dot reduce using rule 86 (factor -> let let_list in error .) + yacc.py:2687: star reduce using rule 86 (factor -> let let_list in error .) + yacc.py:2687: div reduce using rule 86 (factor -> let let_list in error .) + yacc.py:2687: plus reduce using rule 86 (factor -> let let_list in error .) + yacc.py:2687: minus reduce using rule 86 (factor -> let let_list in error .) + yacc.py:2687: less reduce using rule 86 (factor -> let let_list in error .) + yacc.py:2687: lesseq reduce using rule 86 (factor -> let let_list in error .) + yacc.py:2687: equal reduce using rule 86 (factor -> let let_list in error .) + yacc.py:2687: semi reduce using rule 86 (factor -> let let_list in error .) + yacc.py:2687: cpar reduce using rule 86 (factor -> let let_list in error .) + yacc.py:2687: of reduce using rule 86 (factor -> let let_list in error .) + yacc.py:2687: then reduce using rule 86 (factor -> let let_list in error .) + yacc.py:2687: loop reduce using rule 86 (factor -> let let_list in error .) + yacc.py:2687: comma reduce using rule 86 (factor -> let let_list in error .) + yacc.py:2687: in reduce using rule 86 (factor -> let let_list in error .) + yacc.py:2687: else reduce using rule 86 (factor -> let let_list in error .) + yacc.py:2687: pool reduce using rule 86 (factor -> let let_list in error .) + yacc.py:2687: ccur reduce using rule 86 (factor -> let let_list in error .) + yacc.py:2687: fi reduce using rule 86 (factor -> let let_list in error .) + yacc.py:2687: arroba shift and go to state 112 + yacc.py:2687: opar shift and go to state 115 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: error shift and go to state 111 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 yacc.py:2687: num shift and go to state 90 yacc.py:2687: new shift and go to state 91 yacc.py:2687: ocur shift and go to state 92 @@ -5702,362 +9334,554 @@ yacc.py:2687: false shift and go to state 94 yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: expr shift and go to state 246 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 + yacc.py:2696: ! arroba [ reduce using rule 86 (factor -> let let_list in error .) ] + yacc.py:2696: ! error [ reduce using rule 86 (factor -> let let_list in error .) ] + yacc.py:2700: + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: expr shift and go to state 113 + yacc.py:2714: block shift and go to state 114 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 230 yacc.py:2563: - yacc.py:2565: (42) expr -> if error then expr else . expr fi - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: error shift and go to state 71 - yacc.py:2687: opar shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 + yacc.py:2565: (87) factor -> let let_list error expr . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 87 (factor -> let let_list error expr .) + yacc.py:2687: dot reduce using rule 87 (factor -> let let_list error expr .) + yacc.py:2687: star reduce using rule 87 (factor -> let let_list error expr .) + yacc.py:2687: div reduce using rule 87 (factor -> let let_list error expr .) + yacc.py:2687: plus reduce using rule 87 (factor -> let let_list error expr .) + yacc.py:2687: minus reduce using rule 87 (factor -> let let_list error expr .) + yacc.py:2687: less reduce using rule 87 (factor -> let let_list error expr .) + yacc.py:2687: lesseq reduce using rule 87 (factor -> let let_list error expr .) + yacc.py:2687: equal reduce using rule 87 (factor -> let let_list error expr .) + yacc.py:2687: semi reduce using rule 87 (factor -> let let_list error expr .) + yacc.py:2687: cpar reduce using rule 87 (factor -> let let_list error expr .) + yacc.py:2687: error reduce using rule 87 (factor -> let let_list error expr .) + yacc.py:2687: of reduce using rule 87 (factor -> let let_list error expr .) + yacc.py:2687: then reduce using rule 87 (factor -> let let_list error expr .) + yacc.py:2687: loop reduce using rule 87 (factor -> let let_list error expr .) + yacc.py:2687: comma reduce using rule 87 (factor -> let let_list error expr .) + yacc.py:2687: in reduce using rule 87 (factor -> let let_list error expr .) + yacc.py:2687: else reduce using rule 87 (factor -> let let_list error expr .) + yacc.py:2687: pool reduce using rule 87 (factor -> let let_list error expr .) + yacc.py:2687: ccur reduce using rule 87 (factor -> let let_list error expr .) + yacc.py:2687: fi reduce using rule 87 (factor -> let let_list error expr .) yacc.py:2689: - yacc.py:2714: expr shift and go to state 247 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 yacc.py:2561: yacc.py:2562:state 231 yacc.py:2563: - yacc.py:2565: (45) expr -> while expr loop expr pool . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 45 (expr -> while expr loop expr pool .) - yacc.py:2687: of reduce using rule 45 (expr -> while expr loop expr pool .) - yacc.py:2687: then reduce using rule 45 (expr -> while expr loop expr pool .) - yacc.py:2687: loop reduce using rule 45 (expr -> while expr loop expr pool .) - yacc.py:2687: cpar reduce using rule 45 (expr -> while expr loop expr pool .) - yacc.py:2687: comma reduce using rule 45 (expr -> while expr loop expr pool .) - yacc.py:2687: in reduce using rule 45 (expr -> while expr loop expr pool .) - yacc.py:2687: else reduce using rule 45 (expr -> while expr loop expr pool .) - yacc.py:2687: pool reduce using rule 45 (expr -> while expr loop expr pool .) - yacc.py:2687: error reduce using rule 45 (expr -> while expr loop expr pool .) - yacc.py:2687: ccur reduce using rule 45 (expr -> while expr loop expr pool .) - yacc.py:2687: fi reduce using rule 45 (expr -> while expr loop expr pool .) + yacc.py:2565: (85) factor -> let error in expr . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 85 (factor -> let error in expr .) + yacc.py:2687: dot reduce using rule 85 (factor -> let error in expr .) + yacc.py:2687: star reduce using rule 85 (factor -> let error in expr .) + yacc.py:2687: div reduce using rule 85 (factor -> let error in expr .) + yacc.py:2687: plus reduce using rule 85 (factor -> let error in expr .) + yacc.py:2687: minus reduce using rule 85 (factor -> let error in expr .) + yacc.py:2687: less reduce using rule 85 (factor -> let error in expr .) + yacc.py:2687: lesseq reduce using rule 85 (factor -> let error in expr .) + yacc.py:2687: equal reduce using rule 85 (factor -> let error in expr .) + yacc.py:2687: semi reduce using rule 85 (factor -> let error in expr .) + yacc.py:2687: cpar reduce using rule 85 (factor -> let error in expr .) + yacc.py:2687: error reduce using rule 85 (factor -> let error in expr .) + yacc.py:2687: of reduce using rule 85 (factor -> let error in expr .) + yacc.py:2687: then reduce using rule 85 (factor -> let error in expr .) + yacc.py:2687: loop reduce using rule 85 (factor -> let error in expr .) + yacc.py:2687: comma reduce using rule 85 (factor -> let error in expr .) + yacc.py:2687: in reduce using rule 85 (factor -> let error in expr .) + yacc.py:2687: else reduce using rule 85 (factor -> let error in expr .) + yacc.py:2687: pool reduce using rule 85 (factor -> let error in expr .) + yacc.py:2687: ccur reduce using rule 85 (factor -> let error in expr .) + yacc.py:2687: fi reduce using rule 85 (factor -> let error in expr .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 232 yacc.py:2563: - yacc.py:2565: (48) expr -> while expr loop expr error . + yacc.py:2565: (39) let_list -> let_assign comma let_list . yacc.py:2566: - yacc.py:2687: semi reduce using rule 48 (expr -> while expr loop expr error .) - yacc.py:2687: of reduce using rule 48 (expr -> while expr loop expr error .) - yacc.py:2687: then reduce using rule 48 (expr -> while expr loop expr error .) - yacc.py:2687: loop reduce using rule 48 (expr -> while expr loop expr error .) - yacc.py:2687: cpar reduce using rule 48 (expr -> while expr loop expr error .) - yacc.py:2687: comma reduce using rule 48 (expr -> while expr loop expr error .) - yacc.py:2687: in reduce using rule 48 (expr -> while expr loop expr error .) - yacc.py:2687: else reduce using rule 48 (expr -> while expr loop expr error .) - yacc.py:2687: pool reduce using rule 48 (expr -> while expr loop expr error .) - yacc.py:2687: error reduce using rule 48 (expr -> while expr loop expr error .) - yacc.py:2687: ccur reduce using rule 48 (expr -> while expr loop expr error .) - yacc.py:2687: fi reduce using rule 48 (expr -> while expr loop expr error .) + yacc.py:2687: in reduce using rule 39 (let_list -> let_assign comma let_list .) + yacc.py:2687: error reduce using rule 39 (let_list -> let_assign comma let_list .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 233 yacc.py:2563: - yacc.py:2565: (47) expr -> while expr loop error pool . + yacc.py:2565: (42) let_assign -> param larrow expr . yacc.py:2566: - yacc.py:2687: semi reduce using rule 47 (expr -> while expr loop error pool .) - yacc.py:2687: of reduce using rule 47 (expr -> while expr loop error pool .) - yacc.py:2687: then reduce using rule 47 (expr -> while expr loop error pool .) - yacc.py:2687: loop reduce using rule 47 (expr -> while expr loop error pool .) - yacc.py:2687: cpar reduce using rule 47 (expr -> while expr loop error pool .) - yacc.py:2687: comma reduce using rule 47 (expr -> while expr loop error pool .) - yacc.py:2687: in reduce using rule 47 (expr -> while expr loop error pool .) - yacc.py:2687: else reduce using rule 47 (expr -> while expr loop error pool .) - yacc.py:2687: pool reduce using rule 47 (expr -> while expr loop error pool .) - yacc.py:2687: error reduce using rule 47 (expr -> while expr loop error pool .) - yacc.py:2687: ccur reduce using rule 47 (expr -> while expr loop error pool .) - yacc.py:2687: fi reduce using rule 47 (expr -> while expr loop error pool .) + yacc.py:2687: comma reduce using rule 42 (let_assign -> param larrow expr .) + yacc.py:2687: in reduce using rule 42 (let_assign -> param larrow expr .) + yacc.py:2687: error reduce using rule 42 (let_assign -> param larrow expr .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 234 yacc.py:2563: - yacc.py:2565: (46) expr -> while error loop expr pool . + yacc.py:2565: (88) factor -> case expr of cases_list . esac + yacc.py:2565: (92) factor -> case expr of cases_list . error yacc.py:2566: - yacc.py:2687: semi reduce using rule 46 (expr -> while error loop expr pool .) - yacc.py:2687: of reduce using rule 46 (expr -> while error loop expr pool .) - yacc.py:2687: then reduce using rule 46 (expr -> while error loop expr pool .) - yacc.py:2687: loop reduce using rule 46 (expr -> while error loop expr pool .) - yacc.py:2687: cpar reduce using rule 46 (expr -> while error loop expr pool .) - yacc.py:2687: comma reduce using rule 46 (expr -> while error loop expr pool .) - yacc.py:2687: in reduce using rule 46 (expr -> while error loop expr pool .) - yacc.py:2687: else reduce using rule 46 (expr -> while error loop expr pool .) - yacc.py:2687: pool reduce using rule 46 (expr -> while error loop expr pool .) - yacc.py:2687: error reduce using rule 46 (expr -> while error loop expr pool .) - yacc.py:2687: ccur reduce using rule 46 (expr -> while error loop expr pool .) - yacc.py:2687: fi reduce using rule 46 (expr -> while error loop expr pool .) + yacc.py:2687: esac shift and go to state 259 + yacc.py:2687: error shift and go to state 260 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 235 yacc.py:2563: - yacc.py:2565: (74) base_call -> factor arroba type dot func_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 74 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: div reduce using rule 74 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: plus reduce using rule 74 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: minus reduce using rule 74 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: less reduce using rule 74 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: lesseq reduce using rule 74 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: equal reduce using rule 74 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: semi reduce using rule 74 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: of reduce using rule 74 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: then reduce using rule 74 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: loop reduce using rule 74 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: cpar reduce using rule 74 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: comma reduce using rule 74 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: in reduce using rule 74 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: else reduce using rule 74 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: pool reduce using rule 74 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: error reduce using rule 74 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: ccur reduce using rule 74 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: fi reduce using rule 74 (base_call -> factor arroba type dot func_call .) + yacc.py:2565: (90) factor -> case expr of error . esac + yacc.py:2565: (46) cases_list -> error . cases_list + yacc.py:2565: (47) cases_list -> error . semi + yacc.py:2565: (44) cases_list -> . casep semi + yacc.py:2565: (45) cases_list -> . casep semi cases_list + yacc.py:2565: (46) cases_list -> . error cases_list + yacc.py:2565: (47) cases_list -> . error semi + yacc.py:2565: (48) casep -> . id colon type rarrow expr + yacc.py:2566: + yacc.py:2687: esac shift and go to state 261 + yacc.py:2687: semi shift and go to state 263 + yacc.py:2687: error shift and go to state 238 + yacc.py:2687: id shift and go to state 237 yacc.py:2689: + yacc.py:2714: cases_list shift and go to state 262 + yacc.py:2714: casep shift and go to state 236 yacc.py:2561: yacc.py:2562:state 236 yacc.py:2563: - yacc.py:2565: (77) base_call -> factor arroba error dot func_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 77 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: div reduce using rule 77 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: plus reduce using rule 77 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: minus reduce using rule 77 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: less reduce using rule 77 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: lesseq reduce using rule 77 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: equal reduce using rule 77 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: semi reduce using rule 77 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: of reduce using rule 77 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: then reduce using rule 77 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: loop reduce using rule 77 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: cpar reduce using rule 77 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: comma reduce using rule 77 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: in reduce using rule 77 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: else reduce using rule 77 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: pool reduce using rule 77 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: error reduce using rule 77 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: ccur reduce using rule 77 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: fi reduce using rule 77 (base_call -> factor arroba error dot func_call .) + yacc.py:2565: (44) cases_list -> casep . semi + yacc.py:2565: (45) cases_list -> casep . semi cases_list + yacc.py:2566: + yacc.py:2687: semi shift and go to state 264 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 237 yacc.py:2563: - yacc.py:2565: (24) def_func -> error opar formals cpar colon type ocur expr ccur . + yacc.py:2565: (48) casep -> id . colon type rarrow expr yacc.py:2566: - yacc.py:2687: semi reduce using rule 24 (def_func -> error opar formals cpar colon type ocur expr ccur .) + yacc.py:2687: colon shift and go to state 265 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 238 yacc.py:2563: - yacc.py:2565: (23) def_func -> id opar formals cpar colon type ocur expr ccur . + yacc.py:2565: (46) cases_list -> error . cases_list + yacc.py:2565: (47) cases_list -> error . semi + yacc.py:2565: (44) cases_list -> . casep semi + yacc.py:2565: (45) cases_list -> . casep semi cases_list + yacc.py:2565: (46) cases_list -> . error cases_list + yacc.py:2565: (47) cases_list -> . error semi + yacc.py:2565: (48) casep -> . id colon type rarrow expr yacc.py:2566: - yacc.py:2687: semi reduce using rule 23 (def_func -> id opar formals cpar colon type ocur expr ccur .) + yacc.py:2687: semi shift and go to state 263 + yacc.py:2687: error shift and go to state 238 + yacc.py:2687: id shift and go to state 237 yacc.py:2689: + yacc.py:2714: cases_list shift and go to state 262 + yacc.py:2714: casep shift and go to state 236 yacc.py:2561: yacc.py:2562:state 239 yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar formals cpar colon type ocur error ccur . + yacc.py:2565: (91) factor -> case expr error cases_list . esac yacc.py:2566: - yacc.py:2687: semi reduce using rule 27 (def_func -> id opar formals cpar colon type ocur error ccur .) + yacc.py:2687: esac shift and go to state 266 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 240 yacc.py:2563: - yacc.py:2565: (26) def_func -> id opar formals cpar colon error ocur expr ccur . + yacc.py:2565: (89) factor -> case error of cases_list . esac yacc.py:2566: - yacc.py:2687: semi reduce using rule 26 (def_func -> id opar formals cpar colon error ocur expr ccur .) + yacc.py:2687: esac shift and go to state 267 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 241 yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar error cpar colon type ocur expr ccur . + yacc.py:2565: (93) factor -> if expr then expr . else expr fi + yacc.py:2565: (96) factor -> if expr then expr . else error fi + yacc.py:2565: (98) factor -> if expr then expr . error error expr fi + yacc.py:2565: (99) factor -> if expr then expr . error expr fi + yacc.py:2565: (100) factor -> if expr then expr . else expr error yacc.py:2566: - yacc.py:2687: semi reduce using rule 25 (def_func -> id opar error cpar colon type ocur expr ccur .) + yacc.py:2687: else shift and go to state 268 + yacc.py:2687: error shift and go to state 269 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 242 yacc.py:2563: - yacc.py:2565: (56) cases_list -> casep semi cases_list . - yacc.py:2566: - yacc.py:2687: esac reduce using rule 56 (cases_list -> casep semi cases_list .) + yacc.py:2565: (95) factor -> if expr then error . else expr fi + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: else shift and go to state 270 + yacc.py:2687: arroba shift and go to state 112 + yacc.py:2687: opar shift and go to state 115 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: error shift and go to state 111 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2714: expr shift and go to state 113 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: block shift and go to state 114 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 243 yacc.py:2563: - yacc.py:2565: (58) casep -> id colon type . rarrow expr + yacc.py:2565: (97) factor -> if expr error expr . else expr fi yacc.py:2566: - yacc.py:2687: rarrow shift and go to state 248 + yacc.py:2687: else shift and go to state 271 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 244 yacc.py:2563: - yacc.py:2565: (41) expr -> if expr then expr else expr . fi + yacc.py:2565: (94) factor -> if error then expr . else expr fi yacc.py:2566: - yacc.py:2687: fi shift and go to state 249 + yacc.py:2687: else shift and go to state 272 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 245 yacc.py:2563: - yacc.py:2565: (44) expr -> if expr then expr else error . fi - yacc.py:2565: (76) base_call -> error . arroba type dot func_call - yacc.py:2565: (96) func_call -> error . opar args cpar + yacc.py:2565: (102) factor -> while expr loop expr . pool + yacc.py:2565: (105) factor -> while expr loop expr . error yacc.py:2566: - yacc.py:2687: fi shift and go to state 250 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 109 + yacc.py:2687: pool shift and go to state 273 + yacc.py:2687: error shift and go to state 274 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 246 yacc.py:2563: - yacc.py:2565: (43) expr -> if expr then error else expr . fi - yacc.py:2566: - yacc.py:2687: fi shift and go to state 251 + yacc.py:2565: (104) factor -> while expr loop error . pool + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: pool shift and go to state 275 + yacc.py:2687: arroba shift and go to state 112 + yacc.py:2687: opar shift and go to state 115 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: error shift and go to state 111 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: + yacc.py:2714: expr shift and go to state 113 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: block shift and go to state 114 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 247 yacc.py:2563: - yacc.py:2565: (42) expr -> if error then expr else expr . fi + yacc.py:2565: (106) factor -> while expr error expr . loop expr pool + yacc.py:2565: (107) factor -> while expr error expr . pool yacc.py:2566: - yacc.py:2687: fi shift and go to state 252 + yacc.py:2687: loop shift and go to state 276 + yacc.py:2687: pool shift and go to state 277 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 248 yacc.py:2563: - yacc.py:2565: (58) casep -> id colon type rarrow . expr - yacc.py:2565: (35) expr -> . let let_list in expr - yacc.py:2565: (36) expr -> . let error in expr - yacc.py:2565: (37) expr -> . let let_list in error - yacc.py:2565: (38) expr -> . case expr of cases_list esac - yacc.py:2565: (39) expr -> . case error of cases_list esac - yacc.py:2565: (40) expr -> . case expr of error esac - yacc.py:2565: (41) expr -> . if expr then expr else expr fi - yacc.py:2565: (42) expr -> . if error then expr else expr fi - yacc.py:2565: (43) expr -> . if expr then error else expr fi - yacc.py:2565: (44) expr -> . if expr then expr else error fi - yacc.py:2565: (45) expr -> . while expr loop expr pool - yacc.py:2565: (46) expr -> . while error loop expr pool - yacc.py:2565: (47) expr -> . while expr loop error pool - yacc.py:2565: (48) expr -> . while expr loop expr error - yacc.py:2565: (49) expr -> . arith - yacc.py:2565: (59) arith -> . id larrow expr - yacc.py:2565: (60) arith -> . not comp - yacc.py:2565: (61) arith -> . comp - yacc.py:2565: (62) comp -> . comp less op - yacc.py:2565: (63) comp -> . comp lesseq op - yacc.py:2565: (64) comp -> . comp equal op - yacc.py:2565: (65) comp -> . op - yacc.py:2565: (66) op -> . op plus term - yacc.py:2565: (67) op -> . op minus term - yacc.py:2565: (68) op -> . term - yacc.py:2565: (69) term -> . term star base_call - yacc.py:2565: (70) term -> . term div base_call - yacc.py:2565: (71) term -> . isvoid base_call - yacc.py:2565: (72) term -> . nox base_call - yacc.py:2565: (73) term -> . base_call - yacc.py:2565: (74) base_call -> . factor arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor - yacc.py:2565: (76) base_call -> . error arroba type dot func_call - yacc.py:2565: (77) base_call -> . factor arroba error dot func_call - yacc.py:2565: (78) factor -> . atom - yacc.py:2565: (79) factor -> . opar expr cpar - yacc.py:2565: (80) factor -> . factor dot func_call - yacc.py:2565: (81) factor -> . func_call - yacc.py:2565: (82) atom -> . num - yacc.py:2565: (83) atom -> . id - yacc.py:2565: (84) atom -> . new type - yacc.py:2565: (85) atom -> . new error - yacc.py:2565: (86) atom -> . ocur block ccur - yacc.py:2565: (87) atom -> . true - yacc.py:2565: (88) atom -> . false - yacc.py:2565: (89) atom -> . string - yacc.py:2565: (94) func_call -> . id opar args cpar - yacc.py:2565: (95) func_call -> . id opar error cpar - yacc.py:2565: (96) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: let shift and go to state 73 - yacc.py:2687: case shift and go to state 74 - yacc.py:2687: if shift and go to state 75 - yacc.py:2687: while shift and go to state 76 - yacc.py:2687: id shift and go to state 78 - yacc.py:2687: not shift and go to state 79 - yacc.py:2687: isvoid shift and go to state 84 - yacc.py:2687: nox shift and go to state 85 - yacc.py:2687: error shift and go to state 71 - yacc.py:2687: opar shift and go to state 89 + yacc.py:2565: (103) factor -> while error loop expr . pool + yacc.py:2566: + yacc.py:2687: pool shift and go to state 278 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 249 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 279 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 250 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 280 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 251 + yacc.py:2563: + yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur error . ccur + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 281 + yacc.py:2687: arroba shift and go to state 112 + yacc.py:2687: opar shift and go to state 115 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: error shift and go to state 111 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 yacc.py:2687: num shift and go to state 90 yacc.py:2687: new shift and go to state 91 yacc.py:2687: ocur shift and go to state 92 @@ -6065,96 +9889,1373 @@ yacc.py:2687: false shift and go to state 94 yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:2714: expr shift and go to state 253 - yacc.py:2714: arith shift and go to state 77 - yacc.py:2714: comp shift and go to state 80 - yacc.py:2714: op shift and go to state 81 - yacc.py:2714: term shift and go to state 82 - yacc.py:2714: base_call shift and go to state 83 - yacc.py:2714: factor shift and go to state 86 - yacc.py:2714: func_call shift and go to state 87 - yacc.py:2714: atom shift and go to state 88 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: expr shift and go to state 113 + yacc.py:2714: block shift and go to state 114 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: atom shift and go to state 83 yacc.py:2561: - yacc.py:2562:state 249 + yacc.py:2562:state 252 yacc.py:2563: - yacc.py:2565: (41) expr -> if expr then expr else expr fi . + yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur expr . ccur yacc.py:2566: - yacc.py:2687: semi reduce using rule 41 (expr -> if expr then expr else expr fi .) - yacc.py:2687: of reduce using rule 41 (expr -> if expr then expr else expr fi .) - yacc.py:2687: then reduce using rule 41 (expr -> if expr then expr else expr fi .) - yacc.py:2687: loop reduce using rule 41 (expr -> if expr then expr else expr fi .) - yacc.py:2687: cpar reduce using rule 41 (expr -> if expr then expr else expr fi .) - yacc.py:2687: comma reduce using rule 41 (expr -> if expr then expr else expr fi .) - yacc.py:2687: in reduce using rule 41 (expr -> if expr then expr else expr fi .) - yacc.py:2687: else reduce using rule 41 (expr -> if expr then expr else expr fi .) - yacc.py:2687: pool reduce using rule 41 (expr -> if expr then expr else expr fi .) - yacc.py:2687: error reduce using rule 41 (expr -> if expr then expr else expr fi .) - yacc.py:2687: ccur reduce using rule 41 (expr -> if expr then expr else expr fi .) - yacc.py:2687: fi reduce using rule 41 (expr -> if expr then expr else expr fi .) + yacc.py:2687: ccur shift and go to state 282 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 250 + yacc.py:2562:state 253 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 283 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 254 + yacc.py:2563: + yacc.py:2565: (74) base_call -> error arroba type dot func_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 74 (base_call -> error arroba type dot func_call .) + yacc.py:2687: div reduce using rule 74 (base_call -> error arroba type dot func_call .) + yacc.py:2687: plus reduce using rule 74 (base_call -> error arroba type dot func_call .) + yacc.py:2687: minus reduce using rule 74 (base_call -> error arroba type dot func_call .) + yacc.py:2687: less reduce using rule 74 (base_call -> error arroba type dot func_call .) + yacc.py:2687: lesseq reduce using rule 74 (base_call -> error arroba type dot func_call .) + yacc.py:2687: equal reduce using rule 74 (base_call -> error arroba type dot func_call .) + yacc.py:2687: semi reduce using rule 74 (base_call -> error arroba type dot func_call .) + yacc.py:2687: cpar reduce using rule 74 (base_call -> error arroba type dot func_call .) + yacc.py:2687: error reduce using rule 74 (base_call -> error arroba type dot func_call .) + yacc.py:2687: arroba reduce using rule 74 (base_call -> error arroba type dot func_call .) + yacc.py:2687: dot reduce using rule 74 (base_call -> error arroba type dot func_call .) + yacc.py:2687: of reduce using rule 74 (base_call -> error arroba type dot func_call .) + yacc.py:2687: then reduce using rule 74 (base_call -> error arroba type dot func_call .) + yacc.py:2687: loop reduce using rule 74 (base_call -> error arroba type dot func_call .) + yacc.py:2687: comma reduce using rule 74 (base_call -> error arroba type dot func_call .) + yacc.py:2687: in reduce using rule 74 (base_call -> error arroba type dot func_call .) + yacc.py:2687: else reduce using rule 74 (base_call -> error arroba type dot func_call .) + yacc.py:2687: pool reduce using rule 74 (base_call -> error arroba type dot func_call .) + yacc.py:2687: ccur reduce using rule 74 (base_call -> error arroba type dot func_call .) + yacc.py:2687: fi reduce using rule 74 (base_call -> error arroba type dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 255 + yacc.py:2563: + yacc.py:2565: (129) arg_list -> expr comma arg_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 129 (arg_list -> expr comma arg_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 256 + yacc.py:2563: + yacc.py:2565: (130) arg_list -> error . arg_list + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (128) arg_list -> . expr + yacc.py:2565: (129) arg_list -> . expr comma arg_list + yacc.py:2565: (130) arg_list -> . error arg_list + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: arroba shift and go to state 112 + yacc.py:2687: opar shift and go to state 115 + yacc.py:2687: error shift and go to state 218 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: arg_list shift and go to state 219 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: expr shift and go to state 220 + yacc.py:2714: block shift and go to state 114 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: atom shift and go to state 83 + yacc.py:2561: + yacc.py:2562:state 257 + yacc.py:2563: + yacc.py:2565: (72) base_call -> factor arroba type dot func_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 72 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: div reduce using rule 72 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: plus reduce using rule 72 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: minus reduce using rule 72 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: less reduce using rule 72 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: lesseq reduce using rule 72 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: equal reduce using rule 72 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: semi reduce using rule 72 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: cpar reduce using rule 72 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: error reduce using rule 72 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: arroba reduce using rule 72 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: dot reduce using rule 72 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: of reduce using rule 72 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: then reduce using rule 72 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: loop reduce using rule 72 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: comma reduce using rule 72 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: in reduce using rule 72 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: else reduce using rule 72 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: pool reduce using rule 72 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: ccur reduce using rule 72 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: fi reduce using rule 72 (base_call -> factor arroba type dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 258 + yacc.py:2563: + yacc.py:2565: (75) base_call -> factor arroba error dot func_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 75 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: div reduce using rule 75 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: plus reduce using rule 75 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: minus reduce using rule 75 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: less reduce using rule 75 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: lesseq reduce using rule 75 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: equal reduce using rule 75 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: semi reduce using rule 75 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: cpar reduce using rule 75 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: error reduce using rule 75 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: arroba reduce using rule 75 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: dot reduce using rule 75 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: of reduce using rule 75 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: then reduce using rule 75 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: loop reduce using rule 75 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: comma reduce using rule 75 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: in reduce using rule 75 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: else reduce using rule 75 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: pool reduce using rule 75 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: ccur reduce using rule 75 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: fi reduce using rule 75 (base_call -> factor arroba error dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 259 + yacc.py:2563: + yacc.py:2565: (88) factor -> case expr of cases_list esac . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 88 (factor -> case expr of cases_list esac .) + yacc.py:2687: dot reduce using rule 88 (factor -> case expr of cases_list esac .) + yacc.py:2687: star reduce using rule 88 (factor -> case expr of cases_list esac .) + yacc.py:2687: div reduce using rule 88 (factor -> case expr of cases_list esac .) + yacc.py:2687: plus reduce using rule 88 (factor -> case expr of cases_list esac .) + yacc.py:2687: minus reduce using rule 88 (factor -> case expr of cases_list esac .) + yacc.py:2687: less reduce using rule 88 (factor -> case expr of cases_list esac .) + yacc.py:2687: lesseq reduce using rule 88 (factor -> case expr of cases_list esac .) + yacc.py:2687: equal reduce using rule 88 (factor -> case expr of cases_list esac .) + yacc.py:2687: semi reduce using rule 88 (factor -> case expr of cases_list esac .) + yacc.py:2687: cpar reduce using rule 88 (factor -> case expr of cases_list esac .) + yacc.py:2687: error reduce using rule 88 (factor -> case expr of cases_list esac .) + yacc.py:2687: of reduce using rule 88 (factor -> case expr of cases_list esac .) + yacc.py:2687: then reduce using rule 88 (factor -> case expr of cases_list esac .) + yacc.py:2687: loop reduce using rule 88 (factor -> case expr of cases_list esac .) + yacc.py:2687: comma reduce using rule 88 (factor -> case expr of cases_list esac .) + yacc.py:2687: in reduce using rule 88 (factor -> case expr of cases_list esac .) + yacc.py:2687: else reduce using rule 88 (factor -> case expr of cases_list esac .) + yacc.py:2687: pool reduce using rule 88 (factor -> case expr of cases_list esac .) + yacc.py:2687: ccur reduce using rule 88 (factor -> case expr of cases_list esac .) + yacc.py:2687: fi reduce using rule 88 (factor -> case expr of cases_list esac .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 260 + yacc.py:2563: + yacc.py:2565: (92) factor -> case expr of cases_list error . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 92 (factor -> case expr of cases_list error .) + yacc.py:2687: dot reduce using rule 92 (factor -> case expr of cases_list error .) + yacc.py:2687: star reduce using rule 92 (factor -> case expr of cases_list error .) + yacc.py:2687: div reduce using rule 92 (factor -> case expr of cases_list error .) + yacc.py:2687: plus reduce using rule 92 (factor -> case expr of cases_list error .) + yacc.py:2687: minus reduce using rule 92 (factor -> case expr of cases_list error .) + yacc.py:2687: less reduce using rule 92 (factor -> case expr of cases_list error .) + yacc.py:2687: lesseq reduce using rule 92 (factor -> case expr of cases_list error .) + yacc.py:2687: equal reduce using rule 92 (factor -> case expr of cases_list error .) + yacc.py:2687: semi reduce using rule 92 (factor -> case expr of cases_list error .) + yacc.py:2687: cpar reduce using rule 92 (factor -> case expr of cases_list error .) + yacc.py:2687: error reduce using rule 92 (factor -> case expr of cases_list error .) + yacc.py:2687: of reduce using rule 92 (factor -> case expr of cases_list error .) + yacc.py:2687: then reduce using rule 92 (factor -> case expr of cases_list error .) + yacc.py:2687: loop reduce using rule 92 (factor -> case expr of cases_list error .) + yacc.py:2687: comma reduce using rule 92 (factor -> case expr of cases_list error .) + yacc.py:2687: in reduce using rule 92 (factor -> case expr of cases_list error .) + yacc.py:2687: else reduce using rule 92 (factor -> case expr of cases_list error .) + yacc.py:2687: pool reduce using rule 92 (factor -> case expr of cases_list error .) + yacc.py:2687: ccur reduce using rule 92 (factor -> case expr of cases_list error .) + yacc.py:2687: fi reduce using rule 92 (factor -> case expr of cases_list error .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 261 + yacc.py:2563: + yacc.py:2565: (90) factor -> case expr of error esac . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 90 (factor -> case expr of error esac .) + yacc.py:2687: dot reduce using rule 90 (factor -> case expr of error esac .) + yacc.py:2687: star reduce using rule 90 (factor -> case expr of error esac .) + yacc.py:2687: div reduce using rule 90 (factor -> case expr of error esac .) + yacc.py:2687: plus reduce using rule 90 (factor -> case expr of error esac .) + yacc.py:2687: minus reduce using rule 90 (factor -> case expr of error esac .) + yacc.py:2687: less reduce using rule 90 (factor -> case expr of error esac .) + yacc.py:2687: lesseq reduce using rule 90 (factor -> case expr of error esac .) + yacc.py:2687: equal reduce using rule 90 (factor -> case expr of error esac .) + yacc.py:2687: semi reduce using rule 90 (factor -> case expr of error esac .) + yacc.py:2687: cpar reduce using rule 90 (factor -> case expr of error esac .) + yacc.py:2687: error reduce using rule 90 (factor -> case expr of error esac .) + yacc.py:2687: of reduce using rule 90 (factor -> case expr of error esac .) + yacc.py:2687: then reduce using rule 90 (factor -> case expr of error esac .) + yacc.py:2687: loop reduce using rule 90 (factor -> case expr of error esac .) + yacc.py:2687: comma reduce using rule 90 (factor -> case expr of error esac .) + yacc.py:2687: in reduce using rule 90 (factor -> case expr of error esac .) + yacc.py:2687: else reduce using rule 90 (factor -> case expr of error esac .) + yacc.py:2687: pool reduce using rule 90 (factor -> case expr of error esac .) + yacc.py:2687: ccur reduce using rule 90 (factor -> case expr of error esac .) + yacc.py:2687: fi reduce using rule 90 (factor -> case expr of error esac .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 262 + yacc.py:2563: + yacc.py:2565: (46) cases_list -> error cases_list . + yacc.py:2566: + yacc.py:2687: esac reduce using rule 46 (cases_list -> error cases_list .) + yacc.py:2687: error reduce using rule 46 (cases_list -> error cases_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 263 + yacc.py:2563: + yacc.py:2565: (47) cases_list -> error semi . + yacc.py:2566: + yacc.py:2687: esac reduce using rule 47 (cases_list -> error semi .) + yacc.py:2687: error reduce using rule 47 (cases_list -> error semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 264 + yacc.py:2563: + yacc.py:2565: (44) cases_list -> casep semi . + yacc.py:2565: (45) cases_list -> casep semi . cases_list + yacc.py:2565: (44) cases_list -> . casep semi + yacc.py:2565: (45) cases_list -> . casep semi cases_list + yacc.py:2565: (46) cases_list -> . error cases_list + yacc.py:2565: (47) cases_list -> . error semi + yacc.py:2565: (48) casep -> . id colon type rarrow expr + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for error resolved as shift + yacc.py:2687: esac reduce using rule 44 (cases_list -> casep semi .) + yacc.py:2687: error shift and go to state 238 + yacc.py:2687: id shift and go to state 237 + yacc.py:2689: + yacc.py:2696: ! error [ reduce using rule 44 (cases_list -> casep semi .) ] + yacc.py:2700: + yacc.py:2714: casep shift and go to state 236 + yacc.py:2714: cases_list shift and go to state 284 + yacc.py:2561: + yacc.py:2562:state 265 + yacc.py:2563: + yacc.py:2565: (48) casep -> id colon . type rarrow expr + yacc.py:2566: + yacc.py:2687: type shift and go to state 285 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 266 + yacc.py:2563: + yacc.py:2565: (91) factor -> case expr error cases_list esac . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 91 (factor -> case expr error cases_list esac .) + yacc.py:2687: dot reduce using rule 91 (factor -> case expr error cases_list esac .) + yacc.py:2687: star reduce using rule 91 (factor -> case expr error cases_list esac .) + yacc.py:2687: div reduce using rule 91 (factor -> case expr error cases_list esac .) + yacc.py:2687: plus reduce using rule 91 (factor -> case expr error cases_list esac .) + yacc.py:2687: minus reduce using rule 91 (factor -> case expr error cases_list esac .) + yacc.py:2687: less reduce using rule 91 (factor -> case expr error cases_list esac .) + yacc.py:2687: lesseq reduce using rule 91 (factor -> case expr error cases_list esac .) + yacc.py:2687: equal reduce using rule 91 (factor -> case expr error cases_list esac .) + yacc.py:2687: semi reduce using rule 91 (factor -> case expr error cases_list esac .) + yacc.py:2687: cpar reduce using rule 91 (factor -> case expr error cases_list esac .) + yacc.py:2687: error reduce using rule 91 (factor -> case expr error cases_list esac .) + yacc.py:2687: of reduce using rule 91 (factor -> case expr error cases_list esac .) + yacc.py:2687: then reduce using rule 91 (factor -> case expr error cases_list esac .) + yacc.py:2687: loop reduce using rule 91 (factor -> case expr error cases_list esac .) + yacc.py:2687: comma reduce using rule 91 (factor -> case expr error cases_list esac .) + yacc.py:2687: in reduce using rule 91 (factor -> case expr error cases_list esac .) + yacc.py:2687: else reduce using rule 91 (factor -> case expr error cases_list esac .) + yacc.py:2687: pool reduce using rule 91 (factor -> case expr error cases_list esac .) + yacc.py:2687: ccur reduce using rule 91 (factor -> case expr error cases_list esac .) + yacc.py:2687: fi reduce using rule 91 (factor -> case expr error cases_list esac .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 267 + yacc.py:2563: + yacc.py:2565: (89) factor -> case error of cases_list esac . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 89 (factor -> case error of cases_list esac .) + yacc.py:2687: dot reduce using rule 89 (factor -> case error of cases_list esac .) + yacc.py:2687: star reduce using rule 89 (factor -> case error of cases_list esac .) + yacc.py:2687: div reduce using rule 89 (factor -> case error of cases_list esac .) + yacc.py:2687: plus reduce using rule 89 (factor -> case error of cases_list esac .) + yacc.py:2687: minus reduce using rule 89 (factor -> case error of cases_list esac .) + yacc.py:2687: less reduce using rule 89 (factor -> case error of cases_list esac .) + yacc.py:2687: lesseq reduce using rule 89 (factor -> case error of cases_list esac .) + yacc.py:2687: equal reduce using rule 89 (factor -> case error of cases_list esac .) + yacc.py:2687: semi reduce using rule 89 (factor -> case error of cases_list esac .) + yacc.py:2687: cpar reduce using rule 89 (factor -> case error of cases_list esac .) + yacc.py:2687: error reduce using rule 89 (factor -> case error of cases_list esac .) + yacc.py:2687: of reduce using rule 89 (factor -> case error of cases_list esac .) + yacc.py:2687: then reduce using rule 89 (factor -> case error of cases_list esac .) + yacc.py:2687: loop reduce using rule 89 (factor -> case error of cases_list esac .) + yacc.py:2687: comma reduce using rule 89 (factor -> case error of cases_list esac .) + yacc.py:2687: in reduce using rule 89 (factor -> case error of cases_list esac .) + yacc.py:2687: else reduce using rule 89 (factor -> case error of cases_list esac .) + yacc.py:2687: pool reduce using rule 89 (factor -> case error of cases_list esac .) + yacc.py:2687: ccur reduce using rule 89 (factor -> case error of cases_list esac .) + yacc.py:2687: fi reduce using rule 89 (factor -> case error of cases_list esac .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 268 + yacc.py:2563: + yacc.py:2565: (93) factor -> if expr then expr else . expr fi + yacc.py:2565: (96) factor -> if expr then expr else . error fi + yacc.py:2565: (100) factor -> if expr then expr else . expr error + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 287 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 286 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 + yacc.py:2561: + yacc.py:2562:state 269 + yacc.py:2563: + yacc.py:2565: (98) factor -> if expr then expr error . error expr fi + yacc.py:2565: (99) factor -> if expr then expr error . expr fi + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 289 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 288 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 + yacc.py:2561: + yacc.py:2562:state 270 + yacc.py:2563: + yacc.py:2565: (95) factor -> if expr then error else . expr fi + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: error shift and go to state 72 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 290 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 + yacc.py:2561: + yacc.py:2562:state 271 + yacc.py:2563: + yacc.py:2565: (97) factor -> if expr error expr else . expr fi + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: error shift and go to state 72 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 291 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 + yacc.py:2561: + yacc.py:2562:state 272 + yacc.py:2563: + yacc.py:2565: (94) factor -> if error then expr else . expr fi + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: error shift and go to state 72 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 292 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 + yacc.py:2561: + yacc.py:2562:state 273 + yacc.py:2563: + yacc.py:2565: (102) factor -> while expr loop expr pool . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 102 (factor -> while expr loop expr pool .) + yacc.py:2687: dot reduce using rule 102 (factor -> while expr loop expr pool .) + yacc.py:2687: star reduce using rule 102 (factor -> while expr loop expr pool .) + yacc.py:2687: div reduce using rule 102 (factor -> while expr loop expr pool .) + yacc.py:2687: plus reduce using rule 102 (factor -> while expr loop expr pool .) + yacc.py:2687: minus reduce using rule 102 (factor -> while expr loop expr pool .) + yacc.py:2687: less reduce using rule 102 (factor -> while expr loop expr pool .) + yacc.py:2687: lesseq reduce using rule 102 (factor -> while expr loop expr pool .) + yacc.py:2687: equal reduce using rule 102 (factor -> while expr loop expr pool .) + yacc.py:2687: semi reduce using rule 102 (factor -> while expr loop expr pool .) + yacc.py:2687: cpar reduce using rule 102 (factor -> while expr loop expr pool .) + yacc.py:2687: error reduce using rule 102 (factor -> while expr loop expr pool .) + yacc.py:2687: of reduce using rule 102 (factor -> while expr loop expr pool .) + yacc.py:2687: then reduce using rule 102 (factor -> while expr loop expr pool .) + yacc.py:2687: loop reduce using rule 102 (factor -> while expr loop expr pool .) + yacc.py:2687: comma reduce using rule 102 (factor -> while expr loop expr pool .) + yacc.py:2687: in reduce using rule 102 (factor -> while expr loop expr pool .) + yacc.py:2687: else reduce using rule 102 (factor -> while expr loop expr pool .) + yacc.py:2687: pool reduce using rule 102 (factor -> while expr loop expr pool .) + yacc.py:2687: ccur reduce using rule 102 (factor -> while expr loop expr pool .) + yacc.py:2687: fi reduce using rule 102 (factor -> while expr loop expr pool .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 274 + yacc.py:2563: + yacc.py:2565: (105) factor -> while expr loop expr error . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 105 (factor -> while expr loop expr error .) + yacc.py:2687: dot reduce using rule 105 (factor -> while expr loop expr error .) + yacc.py:2687: star reduce using rule 105 (factor -> while expr loop expr error .) + yacc.py:2687: div reduce using rule 105 (factor -> while expr loop expr error .) + yacc.py:2687: plus reduce using rule 105 (factor -> while expr loop expr error .) + yacc.py:2687: minus reduce using rule 105 (factor -> while expr loop expr error .) + yacc.py:2687: less reduce using rule 105 (factor -> while expr loop expr error .) + yacc.py:2687: lesseq reduce using rule 105 (factor -> while expr loop expr error .) + yacc.py:2687: equal reduce using rule 105 (factor -> while expr loop expr error .) + yacc.py:2687: semi reduce using rule 105 (factor -> while expr loop expr error .) + yacc.py:2687: cpar reduce using rule 105 (factor -> while expr loop expr error .) + yacc.py:2687: error reduce using rule 105 (factor -> while expr loop expr error .) + yacc.py:2687: of reduce using rule 105 (factor -> while expr loop expr error .) + yacc.py:2687: then reduce using rule 105 (factor -> while expr loop expr error .) + yacc.py:2687: loop reduce using rule 105 (factor -> while expr loop expr error .) + yacc.py:2687: comma reduce using rule 105 (factor -> while expr loop expr error .) + yacc.py:2687: in reduce using rule 105 (factor -> while expr loop expr error .) + yacc.py:2687: else reduce using rule 105 (factor -> while expr loop expr error .) + yacc.py:2687: pool reduce using rule 105 (factor -> while expr loop expr error .) + yacc.py:2687: ccur reduce using rule 105 (factor -> while expr loop expr error .) + yacc.py:2687: fi reduce using rule 105 (factor -> while expr loop expr error .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 275 + yacc.py:2563: + yacc.py:2565: (104) factor -> while expr loop error pool . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 104 (factor -> while expr loop error pool .) + yacc.py:2687: dot reduce using rule 104 (factor -> while expr loop error pool .) + yacc.py:2687: star reduce using rule 104 (factor -> while expr loop error pool .) + yacc.py:2687: div reduce using rule 104 (factor -> while expr loop error pool .) + yacc.py:2687: plus reduce using rule 104 (factor -> while expr loop error pool .) + yacc.py:2687: minus reduce using rule 104 (factor -> while expr loop error pool .) + yacc.py:2687: less reduce using rule 104 (factor -> while expr loop error pool .) + yacc.py:2687: lesseq reduce using rule 104 (factor -> while expr loop error pool .) + yacc.py:2687: equal reduce using rule 104 (factor -> while expr loop error pool .) + yacc.py:2687: semi reduce using rule 104 (factor -> while expr loop error pool .) + yacc.py:2687: cpar reduce using rule 104 (factor -> while expr loop error pool .) + yacc.py:2687: error reduce using rule 104 (factor -> while expr loop error pool .) + yacc.py:2687: of reduce using rule 104 (factor -> while expr loop error pool .) + yacc.py:2687: then reduce using rule 104 (factor -> while expr loop error pool .) + yacc.py:2687: loop reduce using rule 104 (factor -> while expr loop error pool .) + yacc.py:2687: comma reduce using rule 104 (factor -> while expr loop error pool .) + yacc.py:2687: in reduce using rule 104 (factor -> while expr loop error pool .) + yacc.py:2687: else reduce using rule 104 (factor -> while expr loop error pool .) + yacc.py:2687: pool reduce using rule 104 (factor -> while expr loop error pool .) + yacc.py:2687: ccur reduce using rule 104 (factor -> while expr loop error pool .) + yacc.py:2687: fi reduce using rule 104 (factor -> while expr loop error pool .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 276 + yacc.py:2563: + yacc.py:2565: (106) factor -> while expr error expr loop . expr pool + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: error shift and go to state 72 + yacc.py:2687: opar shift and go to state 84 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 293 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: atom shift and go to state 83 + yacc.py:2561: + yacc.py:2562:state 277 yacc.py:2563: - yacc.py:2565: (44) expr -> if expr then expr else error fi . + yacc.py:2565: (107) factor -> while expr error expr pool . yacc.py:2566: - yacc.py:2687: semi reduce using rule 44 (expr -> if expr then expr else error fi .) - yacc.py:2687: of reduce using rule 44 (expr -> if expr then expr else error fi .) - yacc.py:2687: then reduce using rule 44 (expr -> if expr then expr else error fi .) - yacc.py:2687: loop reduce using rule 44 (expr -> if expr then expr else error fi .) - yacc.py:2687: cpar reduce using rule 44 (expr -> if expr then expr else error fi .) - yacc.py:2687: comma reduce using rule 44 (expr -> if expr then expr else error fi .) - yacc.py:2687: in reduce using rule 44 (expr -> if expr then expr else error fi .) - yacc.py:2687: else reduce using rule 44 (expr -> if expr then expr else error fi .) - yacc.py:2687: pool reduce using rule 44 (expr -> if expr then expr else error fi .) - yacc.py:2687: error reduce using rule 44 (expr -> if expr then expr else error fi .) - yacc.py:2687: ccur reduce using rule 44 (expr -> if expr then expr else error fi .) - yacc.py:2687: fi reduce using rule 44 (expr -> if expr then expr else error fi .) + yacc.py:2687: arroba reduce using rule 107 (factor -> while expr error expr pool .) + yacc.py:2687: dot reduce using rule 107 (factor -> while expr error expr pool .) + yacc.py:2687: star reduce using rule 107 (factor -> while expr error expr pool .) + yacc.py:2687: div reduce using rule 107 (factor -> while expr error expr pool .) + yacc.py:2687: plus reduce using rule 107 (factor -> while expr error expr pool .) + yacc.py:2687: minus reduce using rule 107 (factor -> while expr error expr pool .) + yacc.py:2687: less reduce using rule 107 (factor -> while expr error expr pool .) + yacc.py:2687: lesseq reduce using rule 107 (factor -> while expr error expr pool .) + yacc.py:2687: equal reduce using rule 107 (factor -> while expr error expr pool .) + yacc.py:2687: semi reduce using rule 107 (factor -> while expr error expr pool .) + yacc.py:2687: cpar reduce using rule 107 (factor -> while expr error expr pool .) + yacc.py:2687: error reduce using rule 107 (factor -> while expr error expr pool .) + yacc.py:2687: of reduce using rule 107 (factor -> while expr error expr pool .) + yacc.py:2687: then reduce using rule 107 (factor -> while expr error expr pool .) + yacc.py:2687: loop reduce using rule 107 (factor -> while expr error expr pool .) + yacc.py:2687: comma reduce using rule 107 (factor -> while expr error expr pool .) + yacc.py:2687: in reduce using rule 107 (factor -> while expr error expr pool .) + yacc.py:2687: else reduce using rule 107 (factor -> while expr error expr pool .) + yacc.py:2687: pool reduce using rule 107 (factor -> while expr error expr pool .) + yacc.py:2687: ccur reduce using rule 107 (factor -> while expr error expr pool .) + yacc.py:2687: fi reduce using rule 107 (factor -> while expr error expr pool .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 251 + yacc.py:2562:state 278 yacc.py:2563: - yacc.py:2565: (43) expr -> if expr then error else expr fi . + yacc.py:2565: (103) factor -> while error loop expr pool . yacc.py:2566: - yacc.py:2687: semi reduce using rule 43 (expr -> if expr then error else expr fi .) - yacc.py:2687: of reduce using rule 43 (expr -> if expr then error else expr fi .) - yacc.py:2687: then reduce using rule 43 (expr -> if expr then error else expr fi .) - yacc.py:2687: loop reduce using rule 43 (expr -> if expr then error else expr fi .) - yacc.py:2687: cpar reduce using rule 43 (expr -> if expr then error else expr fi .) - yacc.py:2687: comma reduce using rule 43 (expr -> if expr then error else expr fi .) - yacc.py:2687: in reduce using rule 43 (expr -> if expr then error else expr fi .) - yacc.py:2687: else reduce using rule 43 (expr -> if expr then error else expr fi .) - yacc.py:2687: pool reduce using rule 43 (expr -> if expr then error else expr fi .) - yacc.py:2687: error reduce using rule 43 (expr -> if expr then error else expr fi .) - yacc.py:2687: ccur reduce using rule 43 (expr -> if expr then error else expr fi .) - yacc.py:2687: fi reduce using rule 43 (expr -> if expr then error else expr fi .) + yacc.py:2687: arroba reduce using rule 103 (factor -> while error loop expr pool .) + yacc.py:2687: dot reduce using rule 103 (factor -> while error loop expr pool .) + yacc.py:2687: star reduce using rule 103 (factor -> while error loop expr pool .) + yacc.py:2687: div reduce using rule 103 (factor -> while error loop expr pool .) + yacc.py:2687: plus reduce using rule 103 (factor -> while error loop expr pool .) + yacc.py:2687: minus reduce using rule 103 (factor -> while error loop expr pool .) + yacc.py:2687: less reduce using rule 103 (factor -> while error loop expr pool .) + yacc.py:2687: lesseq reduce using rule 103 (factor -> while error loop expr pool .) + yacc.py:2687: equal reduce using rule 103 (factor -> while error loop expr pool .) + yacc.py:2687: semi reduce using rule 103 (factor -> while error loop expr pool .) + yacc.py:2687: cpar reduce using rule 103 (factor -> while error loop expr pool .) + yacc.py:2687: error reduce using rule 103 (factor -> while error loop expr pool .) + yacc.py:2687: of reduce using rule 103 (factor -> while error loop expr pool .) + yacc.py:2687: then reduce using rule 103 (factor -> while error loop expr pool .) + yacc.py:2687: loop reduce using rule 103 (factor -> while error loop expr pool .) + yacc.py:2687: comma reduce using rule 103 (factor -> while error loop expr pool .) + yacc.py:2687: in reduce using rule 103 (factor -> while error loop expr pool .) + yacc.py:2687: else reduce using rule 103 (factor -> while error loop expr pool .) + yacc.py:2687: pool reduce using rule 103 (factor -> while error loop expr pool .) + yacc.py:2687: ccur reduce using rule 103 (factor -> while error loop expr pool .) + yacc.py:2687: fi reduce using rule 103 (factor -> while error loop expr pool .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 252 + yacc.py:2562:state 279 yacc.py:2563: - yacc.py:2565: (42) expr -> if error then expr else expr fi . + yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur expr ccur . yacc.py:2566: - yacc.py:2687: semi reduce using rule 42 (expr -> if error then expr else expr fi .) - yacc.py:2687: of reduce using rule 42 (expr -> if error then expr else expr fi .) - yacc.py:2687: then reduce using rule 42 (expr -> if error then expr else expr fi .) - yacc.py:2687: loop reduce using rule 42 (expr -> if error then expr else expr fi .) - yacc.py:2687: cpar reduce using rule 42 (expr -> if error then expr else expr fi .) - yacc.py:2687: comma reduce using rule 42 (expr -> if error then expr else expr fi .) - yacc.py:2687: in reduce using rule 42 (expr -> if error then expr else expr fi .) - yacc.py:2687: else reduce using rule 42 (expr -> if error then expr else expr fi .) - yacc.py:2687: pool reduce using rule 42 (expr -> if error then expr else expr fi .) - yacc.py:2687: error reduce using rule 42 (expr -> if error then expr else expr fi .) - yacc.py:2687: ccur reduce using rule 42 (expr -> if error then expr else expr fi .) - yacc.py:2687: fi reduce using rule 42 (expr -> if error then expr else expr fi .) + yacc.py:2687: semi reduce using rule 26 (def_func -> error opar formals cpar colon type ocur expr ccur .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 253 + yacc.py:2562:state 280 yacc.py:2563: - yacc.py:2565: (58) casep -> id colon type rarrow expr . + yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur expr ccur . yacc.py:2566: - yacc.py:2687: semi reduce using rule 58 (casep -> id colon type rarrow expr .) + yacc.py:2687: semi reduce using rule 25 (def_func -> id opar formals cpar colon type ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 281 + yacc.py:2563: + yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur error ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 29 (def_func -> id opar formals cpar colon type ocur error ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 282 + yacc.py:2563: + yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 28 (def_func -> id opar formals cpar colon error ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 283 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 27 (def_func -> id opar error cpar colon type ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 284 + yacc.py:2563: + yacc.py:2565: (45) cases_list -> casep semi cases_list . + yacc.py:2566: + yacc.py:2687: esac reduce using rule 45 (cases_list -> casep semi cases_list .) + yacc.py:2687: error reduce using rule 45 (cases_list -> casep semi cases_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 285 + yacc.py:2563: + yacc.py:2565: (48) casep -> id colon type . rarrow expr + yacc.py:2566: + yacc.py:2687: rarrow shift and go to state 294 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 286 + yacc.py:2563: + yacc.py:2565: (93) factor -> if expr then expr else expr . fi + yacc.py:2565: (100) factor -> if expr then expr else expr . error + yacc.py:2566: + yacc.py:2687: fi shift and go to state 295 + yacc.py:2687: error shift and go to state 296 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 287 + yacc.py:2563: + yacc.py:2565: (96) factor -> if expr then expr else error . fi + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (65) term -> . isvoid base_call + yacc.py:2565: (66) term -> . nox base_call + yacc.py:2565: (67) term -> . base_call + yacc.py:2565: (68) term -> . term star error + yacc.py:2565: (69) term -> . term div error + yacc.py:2565: (70) term -> . isvoid error + yacc.py:2565: (71) term -> . nox error + yacc.py:2565: (72) base_call -> . factor arroba type dot func_call + yacc.py:2565: (73) base_call -> . factor + yacc.py:2565: (74) base_call -> . error arroba type dot func_call + yacc.py:2565: (75) base_call -> . factor arroba error dot func_call + yacc.py:2565: (76) factor -> . atom + yacc.py:2565: (77) factor -> . opar expr cpar + yacc.py:2565: (78) factor -> . opar expr error + yacc.py:2565: (79) factor -> . error expr cpar + yacc.py:2565: (80) factor -> . opar error cpar + yacc.py:2565: (81) factor -> . factor dot func_call + yacc.py:2565: (82) factor -> . not expr + yacc.py:2565: (83) factor -> . func_call + yacc.py:2565: (84) factor -> . let let_list in expr + yacc.py:2565: (85) factor -> . let error in expr + yacc.py:2565: (86) factor -> . let let_list in error + yacc.py:2565: (87) factor -> . let let_list error expr + yacc.py:2565: (88) factor -> . case expr of cases_list esac + yacc.py:2565: (89) factor -> . case error of cases_list esac + yacc.py:2565: (90) factor -> . case expr of error esac + yacc.py:2565: (91) factor -> . case expr error cases_list esac + yacc.py:2565: (92) factor -> . case expr of cases_list error + yacc.py:2565: (93) factor -> . if expr then expr else expr fi + yacc.py:2565: (94) factor -> . if error then expr else expr fi + yacc.py:2565: (95) factor -> . if expr then error else expr fi + yacc.py:2565: (96) factor -> . if expr then expr else error fi + yacc.py:2565: (97) factor -> . if expr error expr else expr fi + yacc.py:2565: (98) factor -> . if expr then expr error error expr fi + yacc.py:2565: (99) factor -> . if expr then expr error expr fi + yacc.py:2565: (100) factor -> . if expr then expr else expr error + yacc.py:2565: (101) factor -> . if error fi + yacc.py:2565: (102) factor -> . while expr loop expr pool + yacc.py:2565: (103) factor -> . while error loop expr pool + yacc.py:2565: (104) factor -> . while expr loop error pool + yacc.py:2565: (105) factor -> . while expr loop expr error + yacc.py:2565: (106) factor -> . while expr error expr loop expr pool + yacc.py:2565: (107) factor -> . while expr error expr pool + yacc.py:2565: (108) atom -> . num + yacc.py:2565: (109) atom -> . id + yacc.py:2565: (110) atom -> . new type + yacc.py:2565: (111) atom -> . new error + yacc.py:2565: (112) atom -> . ocur block ccur + yacc.py:2565: (113) atom -> . error block ccur + yacc.py:2565: (114) atom -> . ocur error ccur + yacc.py:2565: (115) atom -> . ocur block error + yacc.py:2565: (116) atom -> . true + yacc.py:2565: (117) atom -> . false + yacc.py:2565: (118) atom -> . string + yacc.py:2565: (123) func_call -> . id opar args cpar + yacc.py:2565: (124) func_call -> . id opar error cpar + yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: fi shift and go to state 297 + yacc.py:2687: arroba shift and go to state 112 + yacc.py:2687: opar shift and go to state 115 + yacc.py:2687: id shift and go to state 74 + yacc.py:2687: error shift and go to state 111 + yacc.py:2687: isvoid shift and go to state 79 + yacc.py:2687: nox shift and go to state 80 + yacc.py:2687: not shift and go to state 85 + yacc.py:2687: let shift and go to state 86 + yacc.py:2687: case shift and go to state 87 + yacc.py:2687: if shift and go to state 88 + yacc.py:2687: while shift and go to state 89 + yacc.py:2687: num shift and go to state 90 + yacc.py:2687: new shift and go to state 91 + yacc.py:2687: ocur shift and go to state 92 + yacc.py:2687: true shift and go to state 93 + yacc.py:2687: false shift and go to state 94 + yacc.py:2687: string shift and go to state 95 yacc.py:2689: - yacc.py:3445:1 shift/reduce conflict - yacc.py:3457: - yacc.py:3458:Conflicts: - yacc.py:3459: - yacc.py:3462:shift/reduce conflict for cpar in state 214 resolved as shift + yacc.py:2714: expr shift and go to state 113 + yacc.py:2714: func_call shift and go to state 82 + yacc.py:2714: block shift and go to state 114 + yacc.py:2714: comp shift and go to state 75 + yacc.py:2714: op shift and go to state 76 + yacc.py:2714: term shift and go to state 77 + yacc.py:2714: base_call shift and go to state 78 + yacc.py:2714: factor shift and go to state 81 + yacc.py:2714: atom shift and go to state 83 + yacc.py:2561: + yacc.py:2562:state 288 + yacc.py:2563: + yacc.py:2565: (99) factor -> if expr then expr error expr . fi + yacc.py:2566: + yacc.py:2687: fi shift and go to state 298 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 289 + yacc.py:2563: + yacc.py:2565: (98) factor -> if expr then expr error error . expr fi + yacc.py:2565: (74) base_call -> error . arroba type dot func_call + yacc.py:2565: (79) factor -> error . expr cpar + yacc.py:2565: (113) atom -> error . block ccur + yacc.py:2565: (125) func_call -> error . opar args cpar + yacc.py:2565: (49) expr -> . id larrow expr + yacc.py:2565: (50) expr -> . comp + yacc.py:2565: (119) block -> . expr semi + yacc.py:2565: (120) block -> . expr semi block + yacc.py:2565: (121) block -> . error block + yacc.py:2565: (122) block -> . error semi + yacc.py:2565: (51) comp -> . comp less op + yacc.py:2565: (52) comp -> . comp lesseq op + yacc.py:2565: (53) comp -> . comp equal op + yacc.py:2565: (54) comp -> . op + yacc.py:2565: (55) comp -> . comp less error + yacc.py:2565: (56) comp -> . comp lesseq error + yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (58) op -> . op plus term + yacc.py:2565: (59) op -> . op minus term + yacc.py:2565: (60) op -> . term + yacc.py:2565: (61) op -> . op plus error + yacc.py:2565: (62) op -> . op minus error + yacc.py:2565: (63) term -> . term star base_call + yacc.py:2565: (64) term -> . term div base_call diff --git a/src/output_parser/parsetab.py b/src/output_parser/parsetab.py index f1c26c39..2845b7dd 100644 --- a/src/output_parser/parsetab.py +++ b/src/output_parser/parsetab.py @@ -6,9 +6,9 @@ _lr_method = 'LALR' -_lr_signature = 'programarroba case ccur class colon comma cpar div dot else equal esac false fi id if in inherits isvoid larrow less lesseq let loop minus new not nox num ocur of opar plus pool rarrow semi star string then true type whileprogram : class_listepsilon :class_list : def_class class_list \n | def_classclass_list : error class_listdef_class : class type ocur feature_list ccur semi \n | class type inherits type ocur feature_list ccur semidef_class : class error ocur feature_list ccur semi \n | class error inherits type ocur feature_list ccur semi\n | class error inherits error ocur feature_list ccur semi\n | class type inherits error ocur feature_list ccur semifeature_list : epsilon\n | def_attr semi feature_list\n | def_func semi feature_listfeature_list : error feature_listdef_attr : id colon type\n | id colon type larrow exprdef_attr : error colon type\n | id colon error\n | error colon type larrow expr\n | id colon error larrow expr\n | id colon type larrow errordef_func : id opar formals cpar colon type ocur expr ccurdef_func : error opar formals cpar colon type ocur expr ccur\n | id opar error cpar colon type ocur expr ccur\n | id opar formals cpar colon error ocur expr ccur\n | id opar formals cpar colon type ocur error ccurformals : param_list\n | param_list_empty\n param_list : param\n | param comma param_listparam_list : error param_listparam_list_empty : epsilonparam : id colon typeexpr : let let_list in exprexpr : let error in expr\n | let let_list in errorexpr : case expr of cases_list esacexpr : case error of cases_list esac\n | case expr of error esacexpr : if expr then expr else expr fiexpr : if error then expr else expr fi\n | if expr then error else expr fi\n | if expr then expr else error fiexpr : while expr loop expr poolexpr : while error loop expr pool\n | while expr loop error pool\n | while expr loop expr errorexpr : arithlet_list : let_assign\n | let_assign comma let_listlet_list : error let_listlet_assign : param larrow expr\n | paramcases_list : casep semi\n | casep semi cases_listcases_list : error cases_listcasep : id colon type rarrow exprarith : id larrow expr\n | not comp\n | comp\n comp : comp less op\n | comp lesseq op\n | comp equal op\n | opop : op plus term\n | op minus term\n | termterm : term star base_call\n | term div base_call\n | isvoid base_call\n | nox base_call\n | base_callbase_call : factor arroba type dot func_call\n | factorbase_call : error arroba type dot func_call\n | factor arroba error dot func_call\n factor : atom\n | opar expr cparfactor : factor dot func_call\n | func_callatom : numatom : idatom : new typeatom : new erroratom : ocur block ccuratom : true\n | falseatom : stringblock : expr semi\n | expr semi blockblock : error block\n | errorfunc_call : id opar args cparfunc_call : id opar error cpar\n | error opar args cparargs : arg_list\n | arg_list_empty\n arg_list : expr \n | expr comma arg_listarg_list : error arg_listarg_list_empty : epsilon' +_lr_signature = 'programarroba case ccur class colon comma cpar div dot else equal esac false fi id if in inherits isvoid larrow less lesseq let loop minus new not nox num ocur of opar plus pool rarrow semi star string then true type whileprogram : class_listepsilon :class_list : def_class class_list \n | def_classclass_list : error class_listdef_class : class type ocur feature_list ccur semi \n | class type inherits type ocur feature_list ccur semidef_class : class error ocur feature_list ccur semi \n | class type ocur feature_list ccur error \n | class error inherits type ocur feature_list ccur semi\n | class error inherits error ocur feature_list ccur semi\n | class type inherits error ocur feature_list ccur semi\n | class type inherits type ocur feature_list ccur errorfeature_list : epsilon\n | def_attr semi feature_list\n | def_func semi feature_listfeature_list : error feature_listdef_attr : id colon type\n | id colon type larrow exprdef_attr : error colon type\n | id colon error\n | error colon type larrow expr\n | id colon error larrow expr\n | id colon type larrow errordef_func : id opar formals cpar colon type ocur expr ccurdef_func : error opar formals cpar colon type ocur expr ccur\n | id opar error cpar colon type ocur expr ccur\n | id opar formals cpar colon error ocur expr ccur\n | id opar formals cpar colon type ocur error ccurformals : param_list\n | param_list_empty\n param_list : param\n | param comma param_listparam_list : error comma param_list\n | param comma errorparam_list_empty : epsilonparam : id colon typelet_list : let_assign\n | let_assign comma let_listlet_list : error let_list\n | errorlet_assign : param larrow expr\n | paramcases_list : casep semi\n | casep semi cases_listcases_list : error cases_list\n | error semicasep : id colon type rarrow exprexpr : id larrow expr\n | comp\n comp : comp less op\n | comp lesseq op\n | comp equal op\n | opcomp : comp less error\n | comp lesseq error\n | comp equal errorop : op plus term\n | op minus term\n | termop : op plus error\n | op minus errorterm : term star base_call\n | term div base_call\n | isvoid base_call\n | nox base_call\n | base_callterm : term star error\n | term div error\n | isvoid error\n | nox errorbase_call : factor arroba type dot func_call\n | factorbase_call : error arroba type dot func_call\n | factor arroba error dot func_call\n factor : atom\n | opar expr cparfactor : opar expr error\n | error expr cpar\n | opar error cparfactor : factor dot func_call\n | not expr\n | func_callfactor : let let_list in exprfactor : let error in expr\n | let let_list in error\n | let let_list error exprfactor : case expr of cases_list esacfactor : case error of cases_list esac\n | case expr of error esac\n | case expr error cases_list esac\n | case expr of cases_list errorfactor : if expr then expr else expr fifactor : if error then expr else expr fi\n | if expr then error else expr fi\n | if expr then expr else error fi\n | if expr error expr else expr fi\n | if expr then expr error error expr fi\n | if expr then expr error expr fi\n | if expr then expr else expr error\n | if error fifactor : while expr loop expr poolfactor : while error loop expr pool\n | while expr loop error pool\n | while expr loop expr error\n | while expr error expr loop expr pool\n | while expr error expr poolatom : numatom : idatom : new typeatom : new erroratom : ocur block ccuratom : error block ccur\n | ocur error ccur\n | ocur block erroratom : true\n | falseatom : stringblock : expr semi\n | expr semi blockblock : error block\n | error semifunc_call : id opar args cparfunc_call : id opar error cpar\n | error opar args cparargs : arg_list\n | arg_list_empty\n arg_list : expr \n | expr comma arg_listarg_list : error arg_listarg_list_empty : epsilon' -_lr_action_items = {'error':([0,3,4,5,10,11,12,13,18,26,27,30,31,32,33,34,36,37,38,42,52,55,58,61,63,64,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,102,104,105,106,107,109,111,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,136,137,140,146,152,153,154,156,157,158,159,160,161,162,163,164,166,167,168,169,170,171,172,173,176,179,180,181,183,184,185,186,187,188,190,191,192,193,194,198,201,206,209,210,211,212,220,222,223,225,227,228,229,230,231,232,233,234,235,236,248,249,250,251,252,],[4,4,4,9,18,21,18,23,18,18,18,42,50,52,18,18,18,18,-6,42,42,-8,71,42,100,71,111,115,117,119,-49,-83,71,-61,-65,-68,-73,71,71,-75,-81,-78,71,-82,137,140,-87,-88,-89,143,-7,-11,-10,-9,146,153,71,166,-60,-83,71,71,71,71,71,71,71,-71,-72,175,178,-84,-85,140,146,193,153,71,153,71,198,201,204,71,207,71,-59,146,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,140,146,71,217,71,71,178,-96,146,-35,-37,-36,201,201,232,-94,-95,178,178,-76,-38,-40,201,-39,245,71,71,-45,-48,-47,-46,-74,-77,71,-41,-44,-43,-42,]),'class':([0,3,4,38,55,104,105,106,107,],[5,5,5,-6,-8,-7,-11,-10,-9,]),'$end':([1,2,3,6,7,38,55,104,105,106,107,],[0,-1,-4,-3,-5,-6,-8,-7,-11,-10,-9,]),'type':([5,11,13,29,31,62,91,96,102,103,108,133,226,],[8,20,24,41,49,98,136,141,142,144,145,174,243,]),'ocur':([8,9,20,21,23,24,58,63,64,74,75,76,79,84,85,89,92,109,120,121,124,125,126,127,128,129,130,140,141,142,143,144,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[10,12,33,34,36,37,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,184,185,186,187,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,]),'inherits':([8,9,],[11,13,]),'ccur':([10,12,14,15,18,22,26,27,28,33,34,36,37,39,40,53,54,56,57,77,78,80,81,82,83,86,87,88,90,93,94,95,122,123,131,132,136,137,138,140,164,167,168,169,170,171,172,173,176,179,180,181,182,190,192,193,194,209,210,213,215,216,217,218,219,220,222,223,227,231,232,233,234,235,236,249,250,251,252,],[-2,-2,25,-12,-2,35,-2,-2,-15,-2,-2,-2,-2,-13,-14,67,68,69,70,-49,-83,-61,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,-60,-83,-71,-72,-84,-85,180,-93,-59,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-90,-92,-96,-35,-37,-36,-94,-95,-91,237,238,239,240,241,-76,-38,-40,-39,-45,-48,-47,-46,-74,-77,-41,-44,-43,-42,]),'id':([10,12,18,26,27,30,32,33,34,36,37,42,52,58,61,63,64,73,74,75,76,79,84,85,89,92,109,111,120,121,124,125,126,127,128,129,130,134,140,146,152,153,154,156,157,158,159,160,161,162,163,166,181,183,184,185,186,187,188,191,198,201,211,212,225,228,229,230,248,],[19,19,19,19,19,48,48,19,19,19,19,48,48,78,48,78,78,48,78,78,78,123,123,123,78,78,78,48,78,78,123,123,123,123,123,123,123,177,78,78,78,48,78,48,78,200,200,78,78,78,78,78,78,78,78,78,78,78,177,78,200,200,177,177,200,78,78,78,78,]),'semi':([16,17,25,35,41,49,50,67,68,69,70,72,77,78,80,81,82,83,86,87,88,90,93,94,95,99,100,101,122,123,131,132,136,137,139,164,167,168,169,170,171,172,173,176,179,180,190,192,193,194,199,209,210,220,222,223,227,231,232,233,234,235,236,237,238,239,240,241,249,250,251,252,253,],[26,27,38,55,-18,-16,-19,104,105,106,107,-20,-49,-83,-61,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,-17,-22,-21,-60,-83,-71,-72,-84,-85,181,-59,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-96,-35,-37,-36,225,-94,-95,-76,-38,-40,-39,-45,-48,-47,-46,-74,-77,-24,-23,-27,-26,-25,-41,-44,-43,-42,-58,]),'colon':([18,19,48,60,65,66,200,],[29,31,62,96,102,103,226,]),'opar':([18,19,58,63,64,71,74,75,76,78,79,84,85,89,92,100,109,115,117,119,120,121,123,124,125,126,127,128,129,130,140,146,152,154,157,160,161,162,163,166,177,178,181,183,184,185,186,187,191,193,204,207,217,228,229,230,245,248,],[30,32,89,89,89,109,89,89,89,121,89,89,89,89,89,109,89,109,109,109,89,89,121,89,89,89,89,89,89,89,183,183,89,89,89,89,89,89,89,183,121,109,89,89,89,89,89,89,89,109,109,109,109,89,89,89,109,89,]),'cpar':([30,32,43,44,45,46,47,51,52,59,77,78,80,81,82,83,86,87,88,90,93,94,95,97,98,109,121,122,123,131,132,135,136,137,147,148,149,150,151,164,165,166,167,168,169,170,171,172,173,176,179,180,183,189,190,192,193,194,209,210,214,220,221,222,223,227,231,232,233,234,235,236,249,250,251,252,],[-2,-2,60,-28,-29,-30,-33,65,66,-32,-49,-83,-61,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,-31,-34,-2,-2,-60,-83,-71,-72,179,-84,-85,190,-97,-98,-99,-102,-59,209,210,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-2,-101,-96,-35,-37,-36,-94,-95,179,-76,-100,-38,-40,-39,-45,-48,-47,-46,-74,-77,-41,-44,-43,-42,]),'larrow':([41,49,50,78,98,113,],[58,63,64,120,-34,157,]),'comma':([46,77,78,80,81,82,83,86,87,88,90,93,94,95,98,112,113,122,123,131,132,136,137,150,164,167,168,169,170,171,172,173,176,179,180,190,192,193,194,196,209,210,214,220,222,223,227,231,232,233,234,235,236,249,250,251,252,],[61,-49,-83,-61,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,-34,156,-54,-60,-83,-71,-72,-84,-85,191,-59,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-96,-35,-37,-36,-53,-94,-95,191,-76,-38,-40,-39,-45,-48,-47,-46,-74,-77,-41,-44,-43,-42,]),'let':([58,63,64,74,75,76,89,92,109,120,121,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,]),'case':([58,63,64,74,75,76,89,92,109,120,121,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,]),'if':([58,63,64,74,75,76,89,92,109,120,121,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,]),'while':([58,63,64,74,75,76,89,92,109,120,121,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,]),'not':([58,63,64,74,75,76,89,92,109,120,121,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,]),'isvoid':([58,63,64,74,75,76,79,89,92,109,120,121,124,125,126,127,128,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,]),'nox':([58,63,64,74,75,76,79,89,92,109,120,121,124,125,126,127,128,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,]),'num':([58,63,64,74,75,76,79,84,85,89,92,109,120,121,124,125,126,127,128,129,130,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,]),'new':([58,63,64,74,75,76,79,84,85,89,92,109,120,121,124,125,126,127,128,129,130,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,]),'true':([58,63,64,74,75,76,79,84,85,89,92,109,120,121,124,125,126,127,128,129,130,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,]),'false':([58,63,64,74,75,76,79,84,85,89,92,109,120,121,124,125,126,127,128,129,130,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,]),'string':([58,63,64,74,75,76,79,84,85,89,92,109,120,121,124,125,126,127,128,129,130,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,]),'arroba':([71,78,86,87,88,90,93,94,95,100,115,117,119,123,136,137,140,146,166,176,179,180,190,193,204,207,209,210,217,245,],[108,-83,133,-81,-78,-82,-87,-88,-89,108,108,108,108,-83,-84,-85,108,108,108,-80,-79,-86,-96,108,108,108,-94,-95,108,108,]),'of':([77,78,80,81,82,83,86,87,88,90,93,94,95,114,115,122,123,131,132,136,137,164,167,168,169,170,171,172,173,176,179,180,190,192,193,194,209,210,220,222,223,227,231,232,233,234,235,236,249,250,251,252,],[-49,-83,-61,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,158,159,-60,-83,-71,-72,-84,-85,-59,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-96,-35,-37,-36,-94,-95,-76,-38,-40,-39,-45,-48,-47,-46,-74,-77,-41,-44,-43,-42,]),'then':([77,78,80,81,82,83,86,87,88,90,93,94,95,116,117,122,123,131,132,136,137,164,167,168,169,170,171,172,173,176,179,180,190,192,193,194,209,210,220,222,223,227,231,232,233,234,235,236,249,250,251,252,],[-49,-83,-61,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,160,161,-60,-83,-71,-72,-84,-85,-59,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-96,-35,-37,-36,-94,-95,-76,-38,-40,-39,-45,-48,-47,-46,-74,-77,-41,-44,-43,-42,]),'loop':([77,78,80,81,82,83,86,87,88,90,93,94,95,118,119,122,123,131,132,136,137,164,167,168,169,170,171,172,173,176,179,180,190,192,193,194,209,210,220,222,223,227,231,232,233,234,235,236,249,250,251,252,],[-49,-83,-61,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,162,163,-60,-83,-71,-72,-84,-85,-59,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-96,-35,-37,-36,-94,-95,-76,-38,-40,-39,-45,-48,-47,-46,-74,-77,-41,-44,-43,-42,]),'in':([77,78,80,81,82,83,86,87,88,90,93,94,95,98,110,111,112,113,122,123,131,132,136,137,155,164,167,168,169,170,171,172,173,176,179,180,190,192,193,194,195,196,209,210,220,222,223,227,231,232,233,234,235,236,249,250,251,252,],[-49,-83,-61,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,-34,152,154,-50,-54,-60,-83,-71,-72,-84,-85,-52,-59,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-96,-35,-37,-36,-51,-53,-94,-95,-76,-38,-40,-39,-45,-48,-47,-46,-74,-77,-41,-44,-43,-42,]),'else':([77,78,80,81,82,83,86,87,88,90,93,94,95,122,123,131,132,136,137,164,167,168,169,170,171,172,173,176,179,180,190,192,193,194,203,204,205,209,210,220,222,223,227,231,232,233,234,235,236,249,250,251,252,],[-49,-83,-61,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,-60,-83,-71,-72,-84,-85,-59,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-96,-35,-37,-36,228,229,230,-94,-95,-76,-38,-40,-39,-45,-48,-47,-46,-74,-77,-41,-44,-43,-42,]),'pool':([77,78,80,81,82,83,86,87,88,90,93,94,95,122,123,131,132,136,137,164,167,168,169,170,171,172,173,176,179,180,190,192,193,194,206,207,208,209,210,220,222,223,227,231,232,233,234,235,236,249,250,251,252,],[-49,-83,-61,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,-60,-83,-71,-72,-84,-85,-59,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-96,-35,-37,-36,231,233,234,-94,-95,-76,-38,-40,-39,-45,-48,-47,-46,-74,-77,-41,-44,-43,-42,]),'fi':([77,78,80,81,82,83,86,87,88,90,93,94,95,122,123,131,132,136,137,164,167,168,169,170,171,172,173,176,179,180,190,192,193,194,209,210,220,222,223,227,231,232,233,234,235,236,244,245,246,247,249,250,251,252,],[-49,-83,-61,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,-60,-83,-71,-72,-84,-85,-59,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-96,-35,-37,-36,-94,-95,-76,-38,-40,-39,-45,-48,-47,-46,-74,-77,249,250,251,252,-41,-44,-43,-42,]),'dot':([78,86,87,88,90,93,94,95,123,136,137,145,174,175,176,179,180,190,209,210,],[-83,134,-81,-78,-82,-87,-88,-89,-83,-84,-85,188,211,212,-80,-79,-86,-96,-94,-95,]),'star':([78,82,83,86,87,88,90,93,94,95,123,131,132,136,137,170,171,172,173,176,179,180,190,209,210,220,235,236,],[-83,129,-73,-75,-81,-78,-82,-87,-88,-89,-83,-71,-72,-84,-85,129,129,-69,-70,-80,-79,-86,-96,-94,-95,-76,-74,-77,]),'div':([78,82,83,86,87,88,90,93,94,95,123,131,132,136,137,170,171,172,173,176,179,180,190,209,210,220,235,236,],[-83,130,-73,-75,-81,-78,-82,-87,-88,-89,-83,-71,-72,-84,-85,130,130,-69,-70,-80,-79,-86,-96,-94,-95,-76,-74,-77,]),'plus':([78,81,82,83,86,87,88,90,93,94,95,123,131,132,136,137,167,168,169,170,171,172,173,176,179,180,190,209,210,220,235,236,],[-83,127,-68,-73,-75,-81,-78,-82,-87,-88,-89,-83,-71,-72,-84,-85,127,127,127,-66,-67,-69,-70,-80,-79,-86,-96,-94,-95,-76,-74,-77,]),'minus':([78,81,82,83,86,87,88,90,93,94,95,123,131,132,136,137,167,168,169,170,171,172,173,176,179,180,190,209,210,220,235,236,],[-83,128,-68,-73,-75,-81,-78,-82,-87,-88,-89,-83,-71,-72,-84,-85,128,128,128,-66,-67,-69,-70,-80,-79,-86,-96,-94,-95,-76,-74,-77,]),'less':([78,80,81,82,83,86,87,88,90,93,94,95,122,123,131,132,136,137,167,168,169,170,171,172,173,176,179,180,190,209,210,220,235,236,],[-83,124,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,124,-83,-71,-72,-84,-85,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-96,-94,-95,-76,-74,-77,]),'lesseq':([78,80,81,82,83,86,87,88,90,93,94,95,122,123,131,132,136,137,167,168,169,170,171,172,173,176,179,180,190,209,210,220,235,236,],[-83,125,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,125,-83,-71,-72,-84,-85,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-96,-94,-95,-76,-74,-77,]),'equal':([78,80,81,82,83,86,87,88,90,93,94,95,122,123,131,132,136,137,167,168,169,170,171,172,173,176,179,180,190,209,210,220,235,236,],[-83,126,-65,-68,-73,-75,-81,-78,-82,-87,-88,-89,126,-83,-71,-72,-84,-85,-62,-63,-64,-66,-67,-69,-70,-80,-79,-86,-96,-94,-95,-76,-74,-77,]),'esac':([197,198,202,224,225,242,],[222,223,227,-57,-55,-56,]),'rarrow':([243,],[248,]),} +_lr_action_items = {'error':([0,3,4,5,10,11,12,13,15,25,28,29,30,31,32,33,34,36,37,38,39,56,59,60,62,64,65,68,72,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,100,102,104,106,107,108,109,110,111,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,154,155,157,158,159,160,162,166,168,170,171,172,173,174,175,176,177,178,179,180,181,182,183,186,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,238,241,242,245,246,251,254,256,257,258,259,260,261,262,263,264,266,267,268,269,270,271,272,273,274,275,276,277,278,284,286,287,289,294,295,296,297,298,300,301,302,303,305,],[4,4,4,9,15,21,15,23,15,39,41,15,15,51,53,15,15,15,15,-6,-9,-8,72,41,99,102,72,107,111,-109,-50,-54,-60,-67,126,129,-73,-83,-76,133,72,136,140,142,144,-108,146,148,-116,-117,-118,-37,111,152,-7,-13,-12,-11,-10,111,160,72,168,171,173,175,177,179,181,183,-65,111,-109,-66,111,185,188,190,111,-82,193,194,-38,-43,200,111,203,111,207,111,-110,-111,210,111,-121,-122,-79,111,-113,218,190,-49,218,-51,111,-52,111,-53,111,-58,111,-59,111,-63,111,-64,111,-81,-77,-78,-80,229,72,194,72,-40,194,72,235,238,238,242,72,72,-101,246,72,72,-112,-115,-114,72,251,72,72,188,-120,218,-125,256,-123,-124,188,188,256,-84,111,-87,-85,-39,-42,260,238,238,269,111,274,111,111,-74,218,-72,-75,-88,-92,-90,-46,-47,238,-91,-89,287,289,72,72,72,-102,-105,-104,72,-107,-103,-45,296,111,111,72,-93,-100,-96,-99,-95,-97,-94,-106,-98,]),'class':([0,3,4,38,39,56,106,107,108,109,110,],[5,5,5,-6,-9,-8,-7,-13,-12,-11,-10,]),'$end':([1,2,3,6,7,38,39,56,106,107,108,109,110,],[0,-1,-4,-3,-5,-6,-9,-8,-7,-13,-12,-11,-10,]),'type':([5,11,13,27,31,63,91,97,104,105,112,130,265,],[8,20,24,40,50,100,145,150,151,153,156,184,285,]),'ocur':([8,9,20,21,23,24,59,64,65,72,79,80,84,85,87,88,89,92,102,111,115,116,117,118,119,120,121,122,123,124,126,129,133,140,142,144,148,150,151,152,153,158,160,168,171,173,175,177,179,181,183,192,193,195,198,202,203,204,206,207,208,212,213,214,215,218,222,227,229,242,246,251,256,268,269,270,271,272,276,287,289,294,],[10,12,33,34,36,37,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,212,213,214,215,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,]),'inherits':([8,9,],[11,13,]),'ccur':([10,12,14,15,16,22,26,29,30,33,34,36,37,48,49,54,55,57,58,74,75,76,77,78,81,82,83,90,93,94,95,114,125,126,127,128,129,134,145,146,147,148,154,155,157,158,159,166,170,171,172,173,174,175,176,177,178,179,180,181,182,183,186,189,190,191,205,209,210,211,217,221,223,224,228,229,230,231,249,250,251,252,253,254,257,258,259,260,261,266,267,273,274,275,277,278,295,296,297,298,300,301,302,303,305,],[-2,-2,25,-2,-14,35,-17,-2,-2,-2,-2,-2,-2,-15,-16,68,69,70,71,-109,-50,-54,-60,-67,-73,-83,-76,-108,-116,-117,-118,159,-65,-70,-109,-66,-71,-82,-110,-111,209,211,159,-122,-79,-119,-113,-49,-51,-55,-52,-56,-53,-57,-58,-61,-59,-62,-63,-68,-64,-69,-81,-77,-78,-80,-101,-112,-115,-114,-120,-125,-123,-124,-84,-86,-87,-85,279,280,281,282,283,-74,-72,-75,-88,-92,-90,-91,-89,-102,-105,-104,-107,-103,-93,-100,-96,-99,-95,-97,-94,-106,-98,]),'id':([10,12,15,28,29,30,32,33,34,36,37,59,60,62,64,65,72,79,80,84,85,86,87,88,89,92,102,111,115,116,117,118,119,120,121,122,123,124,126,129,131,133,136,140,142,144,148,158,160,168,171,173,175,177,179,181,183,192,193,194,195,197,198,199,200,201,202,203,204,206,207,208,212,213,214,215,216,218,222,225,226,227,229,235,238,242,246,251,256,264,268,269,270,271,272,276,287,289,294,],[19,19,19,47,19,19,47,19,19,19,19,74,47,47,74,74,74,127,127,74,74,47,74,74,74,74,74,74,74,74,74,127,127,127,127,127,127,127,74,74,187,74,47,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,47,74,47,74,237,237,237,74,74,74,74,74,74,74,74,74,74,187,74,74,187,187,74,74,237,237,74,74,74,74,237,74,74,74,74,74,74,74,74,74,]),'colon':([15,19,47,61,66,67,237,],[27,31,63,97,104,105,265,]),'opar':([15,19,59,64,65,72,74,79,80,84,85,87,88,89,92,102,111,115,116,117,118,119,120,121,122,123,124,126,127,129,133,140,142,144,148,158,160,168,171,173,175,177,179,181,183,187,188,192,193,195,198,202,203,204,206,207,208,212,213,214,215,218,222,227,229,242,246,251,256,268,269,270,271,272,276,287,289,294,],[28,32,84,84,84,115,117,84,84,84,84,84,84,84,84,115,115,84,84,84,84,84,84,84,84,84,84,115,117,115,115,115,115,115,115,84,115,115,115,115,115,115,115,115,115,117,227,84,84,84,84,84,84,84,84,84,84,84,84,84,84,115,84,84,115,115,115,115,115,84,84,84,84,84,84,115,115,84,]),'semi':([17,18,25,35,40,50,51,68,69,70,71,73,74,75,76,77,78,81,82,83,90,93,94,95,101,102,103,111,113,125,126,127,128,129,134,145,146,148,149,157,159,166,170,171,172,173,174,175,176,177,178,179,180,181,182,183,186,189,190,191,205,209,210,211,218,220,221,223,224,228,229,230,231,235,236,238,254,257,258,259,260,261,266,267,273,274,275,277,278,279,280,281,282,283,295,296,297,298,299,300,301,302,303,304,305,],[29,30,38,56,-20,-18,-21,106,108,109,110,-22,-109,-50,-54,-60,-67,-73,-83,-76,-108,-116,-117,-118,-19,-24,-23,155,158,-65,-70,-109,-66,-71,-82,-110,-111,155,158,-79,-113,-49,-51,-55,-52,-56,-53,-57,-58,-61,-59,-62,-63,-68,-64,-69,-81,-77,-78,-80,-101,-112,-115,-114,155,158,-125,-123,-124,-84,-86,-87,-85,263,264,263,-74,-72,-75,-88,-92,-90,-91,-89,-102,-105,-104,-107,-103,-26,-25,-29,-28,-27,-93,-100,-96,-99,158,-95,-97,-94,-106,-48,-98,]),'cpar':([28,32,42,43,44,45,46,52,53,74,75,76,77,78,81,82,83,90,93,94,95,96,98,99,100,113,115,117,125,126,127,128,129,132,133,134,145,146,157,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,186,189,190,191,205,209,210,211,219,220,221,223,224,227,228,229,230,231,254,255,257,258,259,260,261,266,267,273,274,275,277,278,295,296,297,298,299,300,301,302,303,305,],[-2,-2,61,-30,-31,-32,-36,66,67,-109,-50,-54,-60,-67,-73,-83,-76,-108,-116,-117,-118,-34,-33,-35,-37,157,-2,-2,-65,-70,-109,-66,-71,189,191,-82,-110,-111,-79,-113,191,221,189,-126,-127,-131,-49,223,224,-128,-51,-55,-52,-56,-53,-57,-58,-61,-59,-62,-63,-68,-64,-69,-81,-77,-78,-80,-101,-112,-115,-114,-130,157,-125,-123,-124,-2,-84,-86,-87,-85,-74,-129,-72,-75,-88,-92,-90,-91,-89,-102,-105,-104,-107,-103,-93,-100,-96,-99,157,-95,-97,-94,-106,-98,]),'larrow':([40,50,51,74,100,138,],[59,64,65,116,-37,198,]),'comma':([41,45,53,74,75,76,77,78,81,82,83,90,93,94,95,99,100,125,126,127,128,129,134,137,138,145,146,157,159,162,166,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,186,189,190,191,205,209,210,211,220,221,223,224,228,229,230,231,233,254,257,258,259,260,261,266,267,273,274,275,277,278,295,296,297,298,300,301,302,303,305,],[60,62,60,-109,-50,-54,-60,-67,-73,-83,-76,-108,-116,-117,-118,60,-37,-65,-70,-109,-66,-71,-82,197,-43,-110,-111,-79,-113,222,-49,222,-51,-55,-52,-56,-53,-57,-58,-61,-59,-62,-63,-68,-64,-69,-81,-77,-78,-80,-101,-112,-115,-114,222,-125,-123,-124,-84,-86,-87,-85,-42,-74,-72,-75,-88,-92,-90,-91,-89,-102,-105,-104,-107,-103,-93,-100,-96,-99,-95,-97,-94,-106,-98,]),'isvoid':([59,64,65,72,84,85,87,88,89,92,102,111,115,116,117,118,119,120,121,122,126,129,133,140,142,144,148,158,160,168,171,173,175,177,179,181,183,192,193,195,198,202,203,204,206,207,208,212,213,214,215,218,222,227,229,242,246,251,256,268,269,270,271,272,276,287,289,294,],[79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,]),'nox':([59,64,65,72,84,85,87,88,89,92,102,111,115,116,117,118,119,120,121,122,126,129,133,140,142,144,148,158,160,168,171,173,175,177,179,181,183,192,193,195,198,202,203,204,206,207,208,212,213,214,215,218,222,227,229,242,246,251,256,268,269,270,271,272,276,287,289,294,],[80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,]),'not':([59,64,65,72,79,80,84,85,87,88,89,92,102,111,115,116,117,118,119,120,121,122,123,124,126,129,133,140,142,144,148,158,160,168,171,173,175,177,179,181,183,192,193,195,198,202,203,204,206,207,208,212,213,214,215,218,222,227,229,242,246,251,256,268,269,270,271,272,276,287,289,294,],[85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,]),'let':([59,64,65,72,79,80,84,85,87,88,89,92,102,111,115,116,117,118,119,120,121,122,123,124,126,129,133,140,142,144,148,158,160,168,171,173,175,177,179,181,183,192,193,195,198,202,203,204,206,207,208,212,213,214,215,218,222,227,229,242,246,251,256,268,269,270,271,272,276,287,289,294,],[86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,]),'case':([59,64,65,72,79,80,84,85,87,88,89,92,102,111,115,116,117,118,119,120,121,122,123,124,126,129,133,140,142,144,148,158,160,168,171,173,175,177,179,181,183,192,193,195,198,202,203,204,206,207,208,212,213,214,215,218,222,227,229,242,246,251,256,268,269,270,271,272,276,287,289,294,],[87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,]),'if':([59,64,65,72,79,80,84,85,87,88,89,92,102,111,115,116,117,118,119,120,121,122,123,124,126,129,133,140,142,144,148,158,160,168,171,173,175,177,179,181,183,192,193,195,198,202,203,204,206,207,208,212,213,214,215,218,222,227,229,242,246,251,256,268,269,270,271,272,276,287,289,294,],[88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,]),'while':([59,64,65,72,79,80,84,85,87,88,89,92,102,111,115,116,117,118,119,120,121,122,123,124,126,129,133,140,142,144,148,158,160,168,171,173,175,177,179,181,183,192,193,195,198,202,203,204,206,207,208,212,213,214,215,218,222,227,229,242,246,251,256,268,269,270,271,272,276,287,289,294,],[89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,]),'num':([59,64,65,72,79,80,84,85,87,88,89,92,102,111,115,116,117,118,119,120,121,122,123,124,126,129,133,140,142,144,148,158,160,168,171,173,175,177,179,181,183,192,193,195,198,202,203,204,206,207,208,212,213,214,215,218,222,227,229,242,246,251,256,268,269,270,271,272,276,287,289,294,],[90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,]),'new':([59,64,65,72,79,80,84,85,87,88,89,92,102,111,115,116,117,118,119,120,121,122,123,124,126,129,133,140,142,144,148,158,160,168,171,173,175,177,179,181,183,192,193,195,198,202,203,204,206,207,208,212,213,214,215,218,222,227,229,242,246,251,256,268,269,270,271,272,276,287,289,294,],[91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,]),'true':([59,64,65,72,79,80,84,85,87,88,89,92,102,111,115,116,117,118,119,120,121,122,123,124,126,129,133,140,142,144,148,158,160,168,171,173,175,177,179,181,183,192,193,195,198,202,203,204,206,207,208,212,213,214,215,218,222,227,229,242,246,251,256,268,269,270,271,272,276,287,289,294,],[93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,]),'false':([59,64,65,72,79,80,84,85,87,88,89,92,102,111,115,116,117,118,119,120,121,122,123,124,126,129,133,140,142,144,148,158,160,168,171,173,175,177,179,181,183,192,193,195,198,202,203,204,206,207,208,212,213,214,215,218,222,227,229,242,246,251,256,268,269,270,271,272,276,287,289,294,],[94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,]),'string':([59,64,65,72,79,80,84,85,87,88,89,92,102,111,115,116,117,118,119,120,121,122,123,124,126,129,133,140,142,144,148,158,160,168,171,173,175,177,179,181,183,192,193,195,198,202,203,204,206,207,208,212,213,214,215,218,222,227,229,242,246,251,256,268,269,270,271,272,276,287,289,294,],[95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,]),'arroba':([72,74,75,76,77,78,81,82,83,90,93,94,95,102,111,125,126,127,128,129,133,134,140,142,144,145,146,148,157,159,160,166,168,170,171,172,173,174,175,176,177,178,179,180,181,182,183,186,189,190,191,205,209,210,211,218,221,223,224,228,229,230,231,242,246,251,254,256,257,258,259,260,261,266,267,273,274,275,277,278,287,289,295,296,297,298,300,301,302,303,305,],[112,-109,-50,-54,-60,-67,130,-83,-76,-108,-116,-117,-118,112,112,-65,112,-109,-66,112,112,-82,112,112,112,-110,-111,112,-79,-113,112,-49,112,-51,112,-52,112,-53,112,-58,112,-59,112,-63,112,-64,112,-81,-77,-78,-80,-101,-112,-115,-114,112,-125,-123,-124,-84,112,-87,-85,112,112,112,-74,112,-72,-75,-88,-92,-90,-91,-89,-102,-105,-104,-107,-103,112,112,-93,-100,-96,-99,-95,-97,-94,-106,-98,]),'dot':([74,75,76,77,78,81,82,83,90,93,94,95,125,126,127,128,129,134,145,146,156,157,159,166,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,189,190,191,205,209,210,211,221,223,224,228,229,230,231,254,257,258,259,260,261,266,267,273,274,275,277,278,295,296,297,298,300,301,302,303,305,],[-109,-50,-54,-60,-67,131,-83,-76,-108,-116,-117,-118,-65,-70,-109,-66,-71,-82,-110,-111,216,-79,-113,-49,-51,-55,-52,-56,-53,-57,-58,-61,-59,-62,-63,-68,-64,-69,225,226,-81,-77,-78,-80,-101,-112,-115,-114,-125,-123,-124,-84,-86,-87,-85,-74,-72,-75,-88,-92,-90,-91,-89,-102,-105,-104,-107,-103,-93,-100,-96,-99,-95,-97,-94,-106,-98,]),'star':([74,75,76,77,78,81,82,83,90,93,94,95,125,126,127,128,129,134,145,146,157,159,166,170,171,172,173,174,175,176,177,178,179,180,181,182,183,186,189,190,191,205,209,210,211,221,223,224,228,229,230,231,254,257,258,259,260,261,266,267,273,274,275,277,278,295,296,297,298,300,301,302,303,305,],[-109,-50,-54,123,-67,-73,-83,-76,-108,-116,-117,-118,-65,-70,-109,-66,-71,-82,-110,-111,-79,-113,-49,-51,-55,-52,-56,-53,-57,123,-61,123,-62,-63,-68,-64,-69,-81,-77,-78,-80,-101,-112,-115,-114,-125,-123,-124,-84,-86,-87,-85,-74,-72,-75,-88,-92,-90,-91,-89,-102,-105,-104,-107,-103,-93,-100,-96,-99,-95,-97,-94,-106,-98,]),'div':([74,75,76,77,78,81,82,83,90,93,94,95,125,126,127,128,129,134,145,146,157,159,166,170,171,172,173,174,175,176,177,178,179,180,181,182,183,186,189,190,191,205,209,210,211,221,223,224,228,229,230,231,254,257,258,259,260,261,266,267,273,274,275,277,278,295,296,297,298,300,301,302,303,305,],[-109,-50,-54,124,-67,-73,-83,-76,-108,-116,-117,-118,-65,-70,-109,-66,-71,-82,-110,-111,-79,-113,-49,-51,-55,-52,-56,-53,-57,124,-61,124,-62,-63,-68,-64,-69,-81,-77,-78,-80,-101,-112,-115,-114,-125,-123,-124,-84,-86,-87,-85,-74,-72,-75,-88,-92,-90,-91,-89,-102,-105,-104,-107,-103,-93,-100,-96,-99,-95,-97,-94,-106,-98,]),'plus':([74,75,76,77,78,81,82,83,90,93,94,95,125,126,127,128,129,134,145,146,157,159,166,170,171,172,173,174,175,176,177,178,179,180,181,182,183,186,189,190,191,205,209,210,211,221,223,224,228,229,230,231,254,257,258,259,260,261,266,267,273,274,275,277,278,295,296,297,298,300,301,302,303,305,],[-109,-50,121,-60,-67,-73,-83,-76,-108,-116,-117,-118,-65,-70,-109,-66,-71,-82,-110,-111,-79,-113,-49,121,-55,121,-56,121,-57,-58,-61,-59,-62,-63,-68,-64,-69,-81,-77,-78,-80,-101,-112,-115,-114,-125,-123,-124,-84,-86,-87,-85,-74,-72,-75,-88,-92,-90,-91,-89,-102,-105,-104,-107,-103,-93,-100,-96,-99,-95,-97,-94,-106,-98,]),'minus':([74,75,76,77,78,81,82,83,90,93,94,95,125,126,127,128,129,134,145,146,157,159,166,170,171,172,173,174,175,176,177,178,179,180,181,182,183,186,189,190,191,205,209,210,211,221,223,224,228,229,230,231,254,257,258,259,260,261,266,267,273,274,275,277,278,295,296,297,298,300,301,302,303,305,],[-109,-50,122,-60,-67,-73,-83,-76,-108,-116,-117,-118,-65,-70,-109,-66,-71,-82,-110,-111,-79,-113,-49,122,-55,122,-56,122,-57,-58,-61,-59,-62,-63,-68,-64,-69,-81,-77,-78,-80,-101,-112,-115,-114,-125,-123,-124,-84,-86,-87,-85,-74,-72,-75,-88,-92,-90,-91,-89,-102,-105,-104,-107,-103,-93,-100,-96,-99,-95,-97,-94,-106,-98,]),'less':([74,75,76,77,78,81,82,83,90,93,94,95,125,126,127,128,129,134,145,146,157,159,166,170,171,172,173,174,175,176,177,178,179,180,181,182,183,186,189,190,191,205,209,210,211,221,223,224,228,229,230,231,254,257,258,259,260,261,266,267,273,274,275,277,278,295,296,297,298,300,301,302,303,305,],[-109,118,-54,-60,-67,-73,-83,-76,-108,-116,-117,-118,-65,-70,-109,-66,-71,-82,-110,-111,-79,-113,-49,-51,-55,-52,-56,-53,-57,-58,-61,-59,-62,-63,-68,-64,-69,-81,-77,-78,-80,-101,-112,-115,-114,-125,-123,-124,-84,-86,-87,-85,-74,-72,-75,-88,-92,-90,-91,-89,-102,-105,-104,-107,-103,-93,-100,-96,-99,-95,-97,-94,-106,-98,]),'lesseq':([74,75,76,77,78,81,82,83,90,93,94,95,125,126,127,128,129,134,145,146,157,159,166,170,171,172,173,174,175,176,177,178,179,180,181,182,183,186,189,190,191,205,209,210,211,221,223,224,228,229,230,231,254,257,258,259,260,261,266,267,273,274,275,277,278,295,296,297,298,300,301,302,303,305,],[-109,119,-54,-60,-67,-73,-83,-76,-108,-116,-117,-118,-65,-70,-109,-66,-71,-82,-110,-111,-79,-113,-49,-51,-55,-52,-56,-53,-57,-58,-61,-59,-62,-63,-68,-64,-69,-81,-77,-78,-80,-101,-112,-115,-114,-125,-123,-124,-84,-86,-87,-85,-74,-72,-75,-88,-92,-90,-91,-89,-102,-105,-104,-107,-103,-93,-100,-96,-99,-95,-97,-94,-106,-98,]),'equal':([74,75,76,77,78,81,82,83,90,93,94,95,125,126,127,128,129,134,145,146,157,159,166,170,171,172,173,174,175,176,177,178,179,180,181,182,183,186,189,190,191,205,209,210,211,221,223,224,228,229,230,231,254,257,258,259,260,261,266,267,273,274,275,277,278,295,296,297,298,300,301,302,303,305,],[-109,120,-54,-60,-67,-73,-83,-76,-108,-116,-117,-118,-65,-70,-109,-66,-71,-82,-110,-111,-79,-113,-49,-51,-55,-52,-56,-53,-57,-58,-61,-59,-62,-63,-68,-64,-69,-81,-77,-78,-80,-101,-112,-115,-114,-125,-123,-124,-84,-86,-87,-85,-74,-72,-75,-88,-92,-90,-91,-89,-102,-105,-104,-107,-103,-93,-100,-96,-99,-95,-97,-94,-106,-98,]),'of':([74,75,76,77,78,81,82,83,90,93,94,95,125,126,127,128,129,134,139,140,145,146,157,159,166,170,171,172,173,174,175,176,177,178,179,180,181,182,183,186,189,190,191,205,209,210,211,221,223,224,228,229,230,231,254,257,258,259,260,261,266,267,273,274,275,277,278,295,296,297,298,300,301,302,303,305,],[-109,-50,-54,-60,-67,-73,-83,-76,-108,-116,-117,-118,-65,-70,-109,-66,-71,-82,199,201,-110,-111,-79,-113,-49,-51,-55,-52,-56,-53,-57,-58,-61,-59,-62,-63,-68,-64,-69,-81,-77,-78,-80,-101,-112,-115,-114,-125,-123,-124,-84,-86,-87,-85,-74,-72,-75,-88,-92,-90,-91,-89,-102,-105,-104,-107,-103,-93,-100,-96,-99,-95,-97,-94,-106,-98,]),'then':([74,75,76,77,78,81,82,83,90,93,94,95,125,126,127,128,129,134,141,142,145,146,157,159,166,170,171,172,173,174,175,176,177,178,179,180,181,182,183,186,189,190,191,205,209,210,211,221,223,224,228,229,230,231,254,257,258,259,260,261,266,267,273,274,275,277,278,295,296,297,298,300,301,302,303,305,],[-109,-50,-54,-60,-67,-73,-83,-76,-108,-116,-117,-118,-65,-70,-109,-66,-71,-82,202,204,-110,-111,-79,-113,-49,-51,-55,-52,-56,-53,-57,-58,-61,-59,-62,-63,-68,-64,-69,-81,-77,-78,-80,-101,-112,-115,-114,-125,-123,-124,-84,-86,-87,-85,-74,-72,-75,-88,-92,-90,-91,-89,-102,-105,-104,-107,-103,-93,-100,-96,-99,-95,-97,-94,-106,-98,]),'loop':([74,75,76,77,78,81,82,83,90,93,94,95,125,126,127,128,129,134,143,144,145,146,157,159,166,170,171,172,173,174,175,176,177,178,179,180,181,182,183,186,189,190,191,205,209,210,211,221,223,224,228,229,230,231,247,254,257,258,259,260,261,266,267,273,274,275,277,278,295,296,297,298,300,301,302,303,305,],[-109,-50,-54,-60,-67,-73,-83,-76,-108,-116,-117,-118,-65,-70,-109,-66,-71,-82,206,208,-110,-111,-79,-113,-49,-51,-55,-52,-56,-53,-57,-58,-61,-59,-62,-63,-68,-64,-69,-81,-77,-78,-80,-101,-112,-115,-114,-125,-123,-124,-84,-86,-87,-85,276,-74,-72,-75,-88,-92,-90,-91,-89,-102,-105,-104,-107,-103,-93,-100,-96,-99,-95,-97,-94,-106,-98,]),'in':([74,75,76,77,78,81,82,83,90,93,94,95,100,125,126,127,128,129,134,135,136,137,138,145,146,157,159,166,170,171,172,173,174,175,176,177,178,179,180,181,182,183,186,189,190,191,194,196,205,209,210,211,221,223,224,228,229,230,231,232,233,254,257,258,259,260,261,266,267,273,274,275,277,278,295,296,297,298,300,301,302,303,305,],[-109,-50,-54,-60,-67,-73,-83,-76,-108,-116,-117,-118,-37,-65,-70,-109,-66,-71,-82,192,195,-38,-43,-110,-111,-79,-113,-49,-51,-55,-52,-56,-53,-57,-58,-61,-59,-62,-63,-68,-64,-69,-81,-77,-78,-80,-41,-40,-101,-112,-115,-114,-125,-123,-124,-84,-86,-87,-85,-39,-42,-74,-72,-75,-88,-92,-90,-91,-89,-102,-105,-104,-107,-103,-93,-100,-96,-99,-95,-97,-94,-106,-98,]),'else':([74,75,76,77,78,81,82,83,90,93,94,95,125,126,127,128,129,134,145,146,157,159,166,170,171,172,173,174,175,176,177,178,179,180,181,182,183,186,189,190,191,205,209,210,211,221,223,224,228,229,230,231,241,242,243,244,254,257,258,259,260,261,266,267,273,274,275,277,278,295,296,297,298,300,301,302,303,305,],[-109,-50,-54,-60,-67,-73,-83,-76,-108,-116,-117,-118,-65,-70,-109,-66,-71,-82,-110,-111,-79,-113,-49,-51,-55,-52,-56,-53,-57,-58,-61,-59,-62,-63,-68,-64,-69,-81,-77,-78,-80,-101,-112,-115,-114,-125,-123,-124,-84,-86,-87,-85,268,270,271,272,-74,-72,-75,-88,-92,-90,-91,-89,-102,-105,-104,-107,-103,-93,-100,-96,-99,-95,-97,-94,-106,-98,]),'pool':([74,75,76,77,78,81,82,83,90,93,94,95,125,126,127,128,129,134,145,146,157,159,166,170,171,172,173,174,175,176,177,178,179,180,181,182,183,186,189,190,191,205,209,210,211,221,223,224,228,229,230,231,245,246,247,248,254,257,258,259,260,261,266,267,273,274,275,277,278,293,295,296,297,298,300,301,302,303,305,],[-109,-50,-54,-60,-67,-73,-83,-76,-108,-116,-117,-118,-65,-70,-109,-66,-71,-82,-110,-111,-79,-113,-49,-51,-55,-52,-56,-53,-57,-58,-61,-59,-62,-63,-68,-64,-69,-81,-77,-78,-80,-101,-112,-115,-114,-125,-123,-124,-84,-86,-87,-85,273,275,277,278,-74,-72,-75,-88,-92,-90,-91,-89,-102,-105,-104,-107,-103,303,-93,-100,-96,-99,-95,-97,-94,-106,-98,]),'fi':([74,75,76,77,78,81,82,83,90,93,94,95,125,126,127,128,129,134,142,145,146,157,159,166,170,171,172,173,174,175,176,177,178,179,180,181,182,183,186,189,190,191,205,209,210,211,221,223,224,228,229,230,231,254,257,258,259,260,261,266,267,273,274,275,277,278,286,287,288,290,291,292,295,296,297,298,299,300,301,302,303,305,],[-109,-50,-54,-60,-67,-73,-83,-76,-108,-116,-117,-118,-65,-70,-109,-66,-71,-82,205,-110,-111,-79,-113,-49,-51,-55,-52,-56,-53,-57,-58,-61,-59,-62,-63,-68,-64,-69,-81,-77,-78,-80,-101,-112,-115,-114,-125,-123,-124,-84,-86,-87,-85,-74,-72,-75,-88,-92,-90,-91,-89,-102,-105,-104,-107,-103,295,297,298,300,301,302,-93,-100,-96,-99,305,-95,-97,-94,-106,-98,]),'esac':([234,235,239,240,262,263,264,284,],[259,261,266,267,-46,-47,-44,-45,]),'rarrow':([285,],[294,]),} _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 = {'program':([0,],[1,]),'class_list':([0,3,4,],[2,6,7,]),'def_class':([0,3,4,],[3,3,3,]),'feature_list':([10,12,18,26,27,33,34,36,37,],[14,22,28,39,40,53,54,56,57,]),'epsilon':([10,12,18,26,27,30,32,33,34,36,37,109,121,183,],[15,15,15,15,15,47,47,15,15,15,15,151,151,151,]),'def_attr':([10,12,18,26,27,33,34,36,37,],[16,16,16,16,16,16,16,16,16,]),'def_func':([10,12,18,26,27,33,34,36,37,],[17,17,17,17,17,17,17,17,17,]),'formals':([30,32,],[43,51,]),'param_list':([30,32,42,52,61,],[44,44,59,59,97,]),'param_list_empty':([30,32,],[45,45,]),'param':([30,32,42,52,61,73,111,153,156,],[46,46,46,46,46,113,113,113,113,]),'expr':([58,63,64,74,75,76,89,92,109,120,121,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[72,99,101,114,116,118,135,139,150,164,150,139,150,192,194,196,203,205,206,208,150,139,214,215,216,218,219,150,244,246,247,253,]),'arith':([58,63,64,74,75,76,89,92,109,120,121,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,]),'comp':([58,63,64,74,75,76,79,89,92,109,120,121,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[80,80,80,80,80,80,122,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,]),'op':([58,63,64,74,75,76,79,89,92,109,120,121,124,125,126,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[81,81,81,81,81,81,81,81,81,81,81,81,167,168,169,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,]),'term':([58,63,64,74,75,76,79,89,92,109,120,121,124,125,126,127,128,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,170,171,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,]),'base_call':([58,63,64,74,75,76,79,84,85,89,92,109,120,121,124,125,126,127,128,129,130,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[83,83,83,83,83,83,83,131,132,83,83,83,83,83,83,83,83,83,83,172,173,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,]),'factor':([58,63,64,74,75,76,79,84,85,89,92,109,120,121,124,125,126,127,128,129,130,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,]),'func_call':([58,63,64,74,75,76,79,84,85,89,92,109,120,121,124,125,126,127,128,129,130,134,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,188,191,211,212,228,229,230,248,],[87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,176,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,220,87,235,236,87,87,87,87,]),'atom':([58,63,64,74,75,76,79,84,85,89,92,109,120,121,124,125,126,127,128,129,130,140,146,152,154,157,160,161,162,163,166,181,183,184,185,186,187,191,228,229,230,248,],[88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,]),'let_list':([73,111,153,156,],[110,155,155,195,]),'let_assign':([73,111,153,156,],[112,112,112,112,]),'block':([92,140,181,],[138,182,213,]),'args':([109,121,183,],[147,165,147,]),'arg_list':([109,121,146,166,183,191,],[148,148,189,189,148,221,]),'arg_list_empty':([109,121,183,],[149,149,149,]),'cases_list':([158,159,198,201,225,],[197,202,224,224,242,]),'casep':([158,159,198,201,225,],[199,199,199,199,199,]),} +_lr_goto_items = {'program':([0,],[1,]),'class_list':([0,3,4,],[2,6,7,]),'def_class':([0,3,4,],[3,3,3,]),'feature_list':([10,12,15,29,30,33,34,36,37,],[14,22,26,48,49,54,55,57,58,]),'epsilon':([10,12,15,28,29,30,32,33,34,36,37,115,117,227,],[16,16,16,46,16,16,46,16,16,16,16,165,165,165,]),'def_attr':([10,12,15,29,30,33,34,36,37,],[17,17,17,17,17,17,17,17,17,]),'def_func':([10,12,15,29,30,33,34,36,37,],[18,18,18,18,18,18,18,18,18,]),'formals':([28,32,],[42,52,]),'param_list':([28,32,60,62,],[43,43,96,98,]),'param_list_empty':([28,32,],[44,44,]),'param':([28,32,60,62,86,136,194,197,],[45,45,45,45,138,138,138,138,]),'expr':([59,64,65,72,84,85,87,88,89,92,102,111,115,116,117,126,129,133,140,142,144,148,158,160,168,171,173,175,177,179,181,183,192,193,195,198,202,203,204,206,207,208,212,213,214,215,218,222,227,229,242,246,251,256,268,269,270,271,272,276,287,289,294,],[73,101,103,113,132,134,139,141,143,149,113,113,162,166,169,113,113,113,113,113,113,113,149,220,220,113,113,113,113,113,113,113,228,230,231,233,241,243,244,245,247,248,249,250,252,253,220,169,169,113,113,113,113,220,286,288,290,291,292,293,113,299,304,]),'comp':([59,64,65,72,84,85,87,88,89,92,102,111,115,116,117,126,129,133,140,142,144,148,158,160,168,171,173,175,177,179,181,183,192,193,195,198,202,203,204,206,207,208,212,213,214,215,218,222,227,229,242,246,251,256,268,269,270,271,272,276,287,289,294,],[75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,]),'op':([59,64,65,72,84,85,87,88,89,92,102,111,115,116,117,118,119,120,126,129,133,140,142,144,148,158,160,168,171,173,175,177,179,181,183,192,193,195,198,202,203,204,206,207,208,212,213,214,215,218,222,227,229,242,246,251,256,268,269,270,271,272,276,287,289,294,],[76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,170,172,174,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,]),'term':([59,64,65,72,84,85,87,88,89,92,102,111,115,116,117,118,119,120,121,122,126,129,133,140,142,144,148,158,160,168,171,173,175,177,179,181,183,192,193,195,198,202,203,204,206,207,208,212,213,214,215,218,222,227,229,242,246,251,256,268,269,270,271,272,276,287,289,294,],[77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,176,178,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,]),'base_call':([59,64,65,72,79,80,84,85,87,88,89,92,102,111,115,116,117,118,119,120,121,122,123,124,126,129,133,140,142,144,148,158,160,168,171,173,175,177,179,181,183,192,193,195,198,202,203,204,206,207,208,212,213,214,215,218,222,227,229,242,246,251,256,268,269,270,271,272,276,287,289,294,],[78,78,78,78,125,128,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,180,182,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,]),'factor':([59,64,65,72,79,80,84,85,87,88,89,92,102,111,115,116,117,118,119,120,121,122,123,124,126,129,133,140,142,144,148,158,160,168,171,173,175,177,179,181,183,192,193,195,198,202,203,204,206,207,208,212,213,214,215,218,222,227,229,242,246,251,256,268,269,270,271,272,276,287,289,294,],[81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,]),'func_call':([59,64,65,72,79,80,84,85,87,88,89,92,102,111,115,116,117,118,119,120,121,122,123,124,126,129,131,133,140,142,144,148,158,160,168,171,173,175,177,179,181,183,192,193,195,198,202,203,204,206,207,208,212,213,214,215,216,218,222,225,226,227,229,242,246,251,256,268,269,270,271,272,276,287,289,294,],[82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,186,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,254,82,82,257,258,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,]),'atom':([59,64,65,72,79,80,84,85,87,88,89,92,102,111,115,116,117,118,119,120,121,122,123,124,126,129,133,140,142,144,148,158,160,168,171,173,175,177,179,181,183,192,193,195,198,202,203,204,206,207,208,212,213,214,215,218,222,227,229,242,246,251,256,268,269,270,271,272,276,287,289,294,],[83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,]),'block':([72,92,102,111,126,129,133,140,142,144,148,158,160,168,171,173,175,177,179,181,183,218,229,242,246,251,256,287,289,],[114,147,114,154,114,114,114,114,114,114,154,217,114,114,114,114,114,114,114,114,114,154,114,114,114,114,114,114,114,]),'let_list':([86,136,194,197,],[135,196,196,232,]),'let_assign':([86,136,194,197,],[137,137,137,137,]),'args':([115,117,227,],[161,167,161,]),'arg_list':([115,117,160,168,218,222,227,256,],[163,163,219,219,219,255,163,219,]),'arg_list_empty':([115,117,227,],[164,164,164,]),'cases_list':([199,200,201,235,238,264,],[234,239,240,262,262,284,]),'casep':([199,200,201,235,238,264,],[236,236,236,236,236,236,]),} _lr_goto = {} for _k, _v in _lr_goto_items.items(): @@ -35,98 +35,127 @@ ('def_class -> class type ocur feature_list ccur semi','def_class',6,'p_def_class','parser.py',29), ('def_class -> class type inherits type ocur feature_list ccur semi','def_class',8,'p_def_class','parser.py',30), ('def_class -> class error ocur feature_list ccur semi','def_class',6,'p_def_class_error','parser.py',38), - ('def_class -> class error inherits type ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',39), - ('def_class -> class error inherits error ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',40), - ('def_class -> class type inherits error ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',41), - ('feature_list -> epsilon','feature_list',1,'p_feature_list','parser.py',46), - ('feature_list -> def_attr semi feature_list','feature_list',3,'p_feature_list','parser.py',47), - ('feature_list -> def_func semi feature_list','feature_list',3,'p_feature_list','parser.py',48), - ('feature_list -> error feature_list','feature_list',2,'p_feature_list_error','parser.py',53), - ('def_attr -> id colon type','def_attr',3,'p_def_attr','parser.py',58), - ('def_attr -> id colon type larrow expr','def_attr',5,'p_def_attr','parser.py',59), - ('def_attr -> error colon type','def_attr',3,'p_def_attr_error','parser.py',66), - ('def_attr -> id colon error','def_attr',3,'p_def_attr_error','parser.py',67), - ('def_attr -> error colon type larrow expr','def_attr',5,'p_def_attr_error','parser.py',68), - ('def_attr -> id colon error larrow expr','def_attr',5,'p_def_attr_error','parser.py',69), - ('def_attr -> id colon type larrow error','def_attr',5,'p_def_attr_error','parser.py',70), - ('def_func -> id opar formals cpar colon type ocur expr ccur','def_func',9,'p_def_func','parser.py',75), - ('def_func -> error opar formals cpar colon type ocur expr ccur','def_func',9,'p_def_func_error','parser.py',79), - ('def_func -> id opar error cpar colon type ocur expr ccur','def_func',9,'p_def_func_error','parser.py',80), - ('def_func -> id opar formals cpar colon error ocur expr ccur','def_func',9,'p_def_func_error','parser.py',81), - ('def_func -> id opar formals cpar colon type ocur error ccur','def_func',9,'p_def_func_error','parser.py',82), - ('formals -> param_list','formals',1,'p_formals','parser.py',87), - ('formals -> param_list_empty','formals',1,'p_formals','parser.py',88), - ('param_list -> param','param_list',1,'p_param_list','parser.py',94), - ('param_list -> param comma param_list','param_list',3,'p_param_list','parser.py',95), - ('param_list -> error param_list','param_list',2,'p_param_list_error','parser.py',99), - ('param_list_empty -> epsilon','param_list_empty',1,'p_param_list_empty','parser.py',104), - ('param -> id colon type','param',3,'p_param','parser.py',108), - ('expr -> let let_list in expr','expr',4,'p_expr_let','parser.py',113), - ('expr -> let error in expr','expr',4,'p_expr_let_error','parser.py',117), - ('expr -> let let_list in error','expr',4,'p_expr_let_error','parser.py',118), - ('expr -> case expr of cases_list esac','expr',5,'p_expr_case','parser.py',123), - ('expr -> case error of cases_list esac','expr',5,'p_expr_case_error','parser.py',127), - ('expr -> case expr of error esac','expr',5,'p_expr_case_error','parser.py',128), - ('expr -> if expr then expr else expr fi','expr',7,'p_expr_if','parser.py',133), - ('expr -> if error then expr else expr fi','expr',7,'p_expr_if_error','parser.py',137), - ('expr -> if expr then error else expr fi','expr',7,'p_expr_if_error','parser.py',138), - ('expr -> if expr then expr else error fi','expr',7,'p_expr_if_error','parser.py',139), - ('expr -> while expr loop expr pool','expr',5,'p_expr_while','parser.py',144), - ('expr -> while error loop expr pool','expr',5,'p_expr_while_error','parser.py',149), - ('expr -> while expr loop error pool','expr',5,'p_expr_while_error','parser.py',150), - ('expr -> while expr loop expr error','expr',5,'p_expr_while_error','parser.py',151), - ('expr -> arith','expr',1,'p_expr_arith','parser.py',156), - ('let_list -> let_assign','let_list',1,'p_let_list','parser.py',161), - ('let_list -> let_assign comma let_list','let_list',3,'p_let_list','parser.py',162), - ('let_list -> error let_list','let_list',2,'p_let_list_error','parser.py',166), - ('let_assign -> param larrow expr','let_assign',3,'p_let_assign','parser.py',170), - ('let_assign -> param','let_assign',1,'p_let_assign','parser.py',171), - ('cases_list -> casep semi','cases_list',2,'p_cases_list','parser.py',179), - ('cases_list -> casep semi cases_list','cases_list',3,'p_cases_list','parser.py',180), - ('cases_list -> error cases_list','cases_list',2,'p_cases_list_error','parser.py',184), - ('casep -> id colon type rarrow expr','casep',5,'p_case','parser.py',188), - ('arith -> id larrow expr','arith',3,'p_arith','parser.py',193), - ('arith -> not comp','arith',2,'p_arith','parser.py',194), - ('arith -> comp','arith',1,'p_arith','parser.py',195), - ('comp -> comp less op','comp',3,'p_comp','parser.py',205), - ('comp -> comp lesseq op','comp',3,'p_comp','parser.py',206), - ('comp -> comp equal op','comp',3,'p_comp','parser.py',207), - ('comp -> op','comp',1,'p_comp','parser.py',208), - ('op -> op plus term','op',3,'p_op','parser.py',220), - ('op -> op minus term','op',3,'p_op','parser.py',221), - ('op -> term','op',1,'p_op','parser.py',222), - ('term -> term star base_call','term',3,'p_term','parser.py',231), - ('term -> term div base_call','term',3,'p_term','parser.py',232), - ('term -> isvoid base_call','term',2,'p_term','parser.py',233), - ('term -> nox base_call','term',2,'p_term','parser.py',234), - ('term -> base_call','term',1,'p_term','parser.py',235), - ('base_call -> factor arroba type dot func_call','base_call',5,'p_base_call','parser.py',248), - ('base_call -> factor','base_call',1,'p_base_call','parser.py',249), - ('base_call -> error arroba type dot func_call','base_call',5,'p_base_call_error','parser.py',256), - ('base_call -> factor arroba error dot func_call','base_call',5,'p_base_call_error','parser.py',257), - ('factor -> atom','factor',1,'p_factor1','parser.py',262), - ('factor -> opar expr cpar','factor',3,'p_factor1','parser.py',263), - ('factor -> factor dot func_call','factor',3,'p_factor2','parser.py',267), - ('factor -> func_call','factor',1,'p_factor2','parser.py',268), - ('atom -> num','atom',1,'p_atom_num','parser.py',276), - ('atom -> id','atom',1,'p_atom_id','parser.py',280), - ('atom -> new type','atom',2,'p_atom_new','parser.py',284), - ('atom -> new error','atom',2,'p_atom_new_error','parser.py',288), - ('atom -> ocur block ccur','atom',3,'p_atom_block','parser.py',292), - ('atom -> true','atom',1,'p_atom_boolean','parser.py',296), - ('atom -> false','atom',1,'p_atom_boolean','parser.py',297), - ('atom -> string','atom',1,'p_atom_string','parser.py',301), - ('block -> expr semi','block',2,'p_block','parser.py',306), - ('block -> expr semi block','block',3,'p_block','parser.py',307), - ('block -> error block','block',2,'p_block_error','parser.py',311), - ('block -> error','block',1,'p_block_error','parser.py',312), - ('func_call -> id opar args cpar','func_call',4,'p_func_call','parser.py',317), - ('func_call -> id opar error cpar','func_call',4,'p_func_call_error','parser.py',321), - ('func_call -> error opar args cpar','func_call',4,'p_func_call_error','parser.py',322), - ('args -> arg_list','args',1,'p_args','parser.py',327), - ('args -> arg_list_empty','args',1,'p_args','parser.py',328), - ('arg_list -> expr','arg_list',1,'p_arg_list','parser.py',334), - ('arg_list -> expr comma arg_list','arg_list',3,'p_arg_list','parser.py',335), - ('arg_list -> error arg_list','arg_list',2,'p_arg_list_error','parser.py',342), - ('arg_list_empty -> epsilon','arg_list_empty',1,'p_arg_list_empty','parser.py',346), + ('def_class -> class type ocur feature_list ccur error','def_class',6,'p_def_class_error','parser.py',39), + ('def_class -> class error inherits type ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',40), + ('def_class -> class error inherits error ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',41), + ('def_class -> class type inherits error ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',42), + ('def_class -> class type inherits type ocur feature_list ccur error','def_class',8,'p_def_class_error','parser.py',43), + ('feature_list -> epsilon','feature_list',1,'p_feature_list','parser.py',48), + ('feature_list -> def_attr semi feature_list','feature_list',3,'p_feature_list','parser.py',49), + ('feature_list -> def_func semi feature_list','feature_list',3,'p_feature_list','parser.py',50), + ('feature_list -> error feature_list','feature_list',2,'p_feature_list_error','parser.py',55), + ('def_attr -> id colon type','def_attr',3,'p_def_attr','parser.py',60), + ('def_attr -> id colon type larrow expr','def_attr',5,'p_def_attr','parser.py',61), + ('def_attr -> error colon type','def_attr',3,'p_def_attr_error','parser.py',68), + ('def_attr -> id colon error','def_attr',3,'p_def_attr_error','parser.py',69), + ('def_attr -> error colon type larrow expr','def_attr',5,'p_def_attr_error','parser.py',70), + ('def_attr -> id colon error larrow expr','def_attr',5,'p_def_attr_error','parser.py',71), + ('def_attr -> id colon type larrow error','def_attr',5,'p_def_attr_error','parser.py',72), + ('def_func -> id opar formals cpar colon type ocur expr ccur','def_func',9,'p_def_func','parser.py',77), + ('def_func -> error opar formals cpar colon type ocur expr ccur','def_func',9,'p_def_func_error','parser.py',81), + ('def_func -> id opar error cpar colon type ocur expr ccur','def_func',9,'p_def_func_error','parser.py',82), + ('def_func -> id opar formals cpar colon error ocur expr ccur','def_func',9,'p_def_func_error','parser.py',83), + ('def_func -> id opar formals cpar colon type ocur error ccur','def_func',9,'p_def_func_error','parser.py',84), + ('formals -> param_list','formals',1,'p_formals','parser.py',89), + ('formals -> param_list_empty','formals',1,'p_formals','parser.py',90), + ('param_list -> param','param_list',1,'p_param_list','parser.py',96), + ('param_list -> param comma param_list','param_list',3,'p_param_list','parser.py',97), + ('param_list -> error comma param_list','param_list',3,'p_param_list_error','parser.py',101), + ('param_list -> param comma error','param_list',3,'p_param_list_error','parser.py',102), + ('param_list_empty -> epsilon','param_list_empty',1,'p_param_list_empty','parser.py',107), + ('param -> id colon type','param',3,'p_param','parser.py',111), + ('let_list -> let_assign','let_list',1,'p_let_list','parser.py',116), + ('let_list -> let_assign comma let_list','let_list',3,'p_let_list','parser.py',117), + ('let_list -> error let_list','let_list',2,'p_let_list_error','parser.py',121), + ('let_list -> error','let_list',1,'p_let_list_error','parser.py',122), + ('let_assign -> param larrow expr','let_assign',3,'p_let_assign','parser.py',126), + ('let_assign -> param','let_assign',1,'p_let_assign','parser.py',127), + ('cases_list -> casep semi','cases_list',2,'p_cases_list','parser.py',135), + ('cases_list -> casep semi cases_list','cases_list',3,'p_cases_list','parser.py',136), + ('cases_list -> error cases_list','cases_list',2,'p_cases_list_error','parser.py',140), + ('cases_list -> error semi','cases_list',2,'p_cases_list_error','parser.py',141), + ('casep -> id colon type rarrow expr','casep',5,'p_case','parser.py',145), + ('expr -> id larrow expr','expr',3,'p_expr','parser.py',150), + ('expr -> comp','expr',1,'p_expr','parser.py',151), + ('comp -> comp less op','comp',3,'p_comp','parser.py',159), + ('comp -> comp lesseq op','comp',3,'p_comp','parser.py',160), + ('comp -> comp equal op','comp',3,'p_comp','parser.py',161), + ('comp -> op','comp',1,'p_comp','parser.py',162), + ('comp -> comp less error','comp',3,'p_comp_error','parser.py',174), + ('comp -> comp lesseq error','comp',3,'p_comp_error','parser.py',175), + ('comp -> comp equal error','comp',3,'p_comp_error','parser.py',176), + ('op -> op plus term','op',3,'p_op','parser.py',181), + ('op -> op minus term','op',3,'p_op','parser.py',182), + ('op -> term','op',1,'p_op','parser.py',183), + ('op -> op plus error','op',3,'p_op_error','parser.py',193), + ('op -> op minus error','op',3,'p_op_error','parser.py',194), + ('term -> term star base_call','term',3,'p_term','parser.py',199), + ('term -> term div base_call','term',3,'p_term','parser.py',200), + ('term -> isvoid base_call','term',2,'p_term','parser.py',201), + ('term -> nox base_call','term',2,'p_term','parser.py',202), + ('term -> base_call','term',1,'p_term','parser.py',203), + ('term -> term star error','term',3,'p_term_error','parser.py',216), + ('term -> term div error','term',3,'p_term_error','parser.py',217), + ('term -> isvoid error','term',2,'p_term_error','parser.py',218), + ('term -> nox error','term',2,'p_term_error','parser.py',219), + ('base_call -> factor arroba type dot func_call','base_call',5,'p_base_call','parser.py',226), + ('base_call -> factor','base_call',1,'p_base_call','parser.py',227), + ('base_call -> error arroba type dot func_call','base_call',5,'p_base_call_error','parser.py',234), + ('base_call -> factor arroba error dot func_call','base_call',5,'p_base_call_error','parser.py',235), + ('factor -> atom','factor',1,'p_factor1','parser.py',240), + ('factor -> opar expr cpar','factor',3,'p_factor1','parser.py',241), + ('factor -> opar expr error','factor',3,'p_factor1_error','parser.py',245), + ('factor -> error expr cpar','factor',3,'p_factor1_error','parser.py',246), + ('factor -> opar error cpar','factor',3,'p_factor1_error','parser.py',247), + ('factor -> factor dot func_call','factor',3,'p_factor2','parser.py',252), + ('factor -> not expr','factor',2,'p_factor2','parser.py',253), + ('factor -> func_call','factor',1,'p_factor2','parser.py',254), + ('factor -> let let_list in expr','factor',4,'p_expr_let','parser.py',264), + ('factor -> let error in expr','factor',4,'p_expr_let_error','parser.py',268), + ('factor -> let let_list in error','factor',4,'p_expr_let_error','parser.py',269), + ('factor -> let let_list error expr','factor',4,'p_expr_let_error','parser.py',270), + ('factor -> case expr of cases_list esac','factor',5,'p_expr_case','parser.py',275), + ('factor -> case error of cases_list esac','factor',5,'p_expr_case_error','parser.py',279), + ('factor -> case expr of error esac','factor',5,'p_expr_case_error','parser.py',280), + ('factor -> case expr error cases_list esac','factor',5,'p_expr_case_error','parser.py',281), + ('factor -> case expr of cases_list error','factor',5,'p_expr_case_error','parser.py',282), + ('factor -> if expr then expr else expr fi','factor',7,'p_expr_if','parser.py',287), + ('factor -> if error then expr else expr fi','factor',7,'p_expr_if_error','parser.py',291), + ('factor -> if expr then error else expr fi','factor',7,'p_expr_if_error','parser.py',292), + ('factor -> if expr then expr else error fi','factor',7,'p_expr_if_error','parser.py',293), + ('factor -> if expr error expr else expr fi','factor',7,'p_expr_if_error','parser.py',294), + ('factor -> if expr then expr error error expr fi','factor',8,'p_expr_if_error','parser.py',295), + ('factor -> if expr then expr error expr fi','factor',7,'p_expr_if_error','parser.py',296), + ('factor -> if expr then expr else expr error','factor',7,'p_expr_if_error','parser.py',297), + ('factor -> if error fi','factor',3,'p_expr_if_error','parser.py',298), + ('factor -> while expr loop expr pool','factor',5,'p_expr_while','parser.py',303), + ('factor -> while error loop expr pool','factor',5,'p_expr_while_error','parser.py',308), + ('factor -> while expr loop error pool','factor',5,'p_expr_while_error','parser.py',309), + ('factor -> while expr loop expr error','factor',5,'p_expr_while_error','parser.py',310), + ('factor -> while expr error expr loop expr pool','factor',7,'p_expr_while_error','parser.py',311), + ('factor -> while expr error expr pool','factor',5,'p_expr_while_error','parser.py',312), + ('atom -> num','atom',1,'p_atom_num','parser.py',317), + ('atom -> id','atom',1,'p_atom_id','parser.py',321), + ('atom -> new type','atom',2,'p_atom_new','parser.py',325), + ('atom -> new error','atom',2,'p_atom_new_error','parser.py',329), + ('atom -> ocur block ccur','atom',3,'p_atom_block','parser.py',333), + ('atom -> error block ccur','atom',3,'p_atom_block_error','parser.py',337), + ('atom -> ocur error ccur','atom',3,'p_atom_block_error','parser.py',338), + ('atom -> ocur block error','atom',3,'p_atom_block_error','parser.py',339), + ('atom -> true','atom',1,'p_atom_boolean','parser.py',343), + ('atom -> false','atom',1,'p_atom_boolean','parser.py',344), + ('atom -> string','atom',1,'p_atom_string','parser.py',348), + ('block -> expr semi','block',2,'p_block','parser.py',353), + ('block -> expr semi block','block',3,'p_block','parser.py',354), + ('block -> error block','block',2,'p_block_error','parser.py',358), + ('block -> error semi','block',2,'p_block_error','parser.py',359), + ('func_call -> id opar args cpar','func_call',4,'p_func_call','parser.py',364), + ('func_call -> id opar error cpar','func_call',4,'p_func_call_error','parser.py',368), + ('func_call -> error opar args cpar','func_call',4,'p_func_call_error','parser.py',369), + ('args -> arg_list','args',1,'p_args','parser.py',374), + ('args -> arg_list_empty','args',1,'p_args','parser.py',375), + ('arg_list -> expr','arg_list',1,'p_arg_list','parser.py',381), + ('arg_list -> expr comma arg_list','arg_list',3,'p_arg_list','parser.py',382), + ('arg_list -> error arg_list','arg_list',2,'p_arg_list_error','parser.py',389), + ('arg_list_empty -> epsilon','arg_list_empty',1,'p_arg_list_empty','parser.py',393), ] diff --git a/src/parser.py b/src/parser.py index 91450b3e..5b6b7225 100644 --- a/src/parser.py +++ b/src/parser.py @@ -36,9 +36,11 @@ def p_def_class(self, p): def p_def_class_error(self, p): '''def_class : class error ocur feature_list ccur semi + | class type ocur feature_list ccur error | class error inherits type ocur feature_list ccur semi | class error inherits error ocur feature_list ccur semi - | class type inherits error ocur feature_list ccur semi''' + | class type inherits error ocur feature_list ccur semi + | class type inherits type ocur feature_list ccur error''' p[0] = ErrorNode() @@ -96,8 +98,9 @@ def p_param_list(self, p): p[0] = [p[1]] if len(p) == 2 else [p[1]] + p[3] def p_param_list_error(self, p): - '''param_list : error param_list''' - p[0] = [ErrorNode()] if len(p) == 2 else [ErrorNode()] + p[2] + '''param_list : error comma param_list + | param comma error''' + p[0] = [ErrorNode()] def p_param_list_empty(self, p): @@ -109,68 +112,21 @@ def p_param(self, p): p[0] = (p[1], p[3]) - def p_expr_let(self, p): - 'expr : let let_list in expr' - p[0] = LetNode(p[2], p[4]) - - def p_expr_let_error(self, p): - '''expr : let error in expr - | let let_list in error''' - p[0] = ErrorNode() - - - def p_expr_case(self, p): - 'expr : case expr of cases_list esac' - p[0] = CaseNode(p[2], p[4]) - - def p_expr_case_error(self, p): - '''expr : case error of cases_list esac - | case expr of error esac''' - p[0] = ErrorNode() - - - def p_expr_if(self, p): - 'expr : if expr then expr else expr fi' - p[0] = ConditionalNode(p[2], p[4], p[6]) - - def p_expr_if_error(self, p): - '''expr : if error then expr else expr fi - | if expr then error else expr fi - | if expr then expr else error fi''' - p[0] = ErrorNode() - - - def p_expr_while(self, p): - 'expr : while expr loop expr pool' - p[0] = WhileNode(p[2], p[4]) - - - def p_expr_while_error(self, p): - '''expr : while error loop expr pool - | while expr loop error pool - | while expr loop expr error''' - p[0] = ErrorNode() - - - def p_expr_arith(self, p): - 'expr : arith' - p[0] = p[1] - - def p_let_list(self, p): '''let_list : let_assign | let_assign comma let_list''' p[0] = [p[1]] if len(p) == 2 else [p[1]] + p[3] def p_let_list_error(self, p): - 'let_list : error let_list' - p[0] = ErrorNode() + '''let_list : error let_list + | error''' + p[0] = [ErrorNode()] def p_let_assign(self, p): '''let_assign : param larrow expr | param''' if len(p) == 2: - p[0] = VariableNode(p[1][0], p[1][1]) + p[0] = VariableNode((p[1][0], p[1][1])) else: p[0] = VarDeclarationNode(p[1][0], p[1][1], p[3]) @@ -181,23 +137,21 @@ def p_cases_list(self, p): p[0] = [p[1]] if len(p) == 3 else [p[1]] + p[3] def p_cases_list_error(self, p): - '''cases_list : error cases_list''' - p[0] = ErrorNode() + '''cases_list : error cases_list + | error semi''' + p[0] = [ErrorNode()] def p_case(self, p): 'casep : id colon type rarrow expr' p[0] = OptionNode(p[1], p[3], p[5]) - def p_arith(self, p): - '''arith : id larrow expr - | not comp + def p_expr(self, p): + '''expr : id larrow expr | comp ''' if len(p) == 4: p[0] = AssignNode(p[1], p[3]) - elif len(p) == 3: - p[0] = NotNode(p[2]) else: p[0] = p[1] @@ -216,6 +170,13 @@ def p_comp(self, p): p[0] = EqualNode(p[1], p[3]) + def p_comp_error(self, p): + '''comp : comp less error + | comp lesseq error + | comp equal error''' + p[0] = ErrorNode() + + def p_op(self, p): '''op : op plus term | op minus term @@ -227,6 +188,13 @@ def p_op(self, p): elif p[2] == '-': p[0] = MinusNode(p[1], p[3]) + + def p_op_error(self, p): + '''op : op plus error + | op minus error''' + p[0] = ErrorNode() + + def p_term(self, p): '''term : term star base_call | term div base_call @@ -244,6 +212,16 @@ def p_term(self, p): elif p[2] == '/': p[0] = DivNode(p[1], p[3]) + def p_term_error(self, p): + '''term : term star error + | term div error + | isvoid error + | nox error''' + if len(p) == 2: + p[0] = ErrorNode() + else: + p[0] = ErrorNode() + def p_base_call(self, p): '''base_call : factor arroba type dot func_call | factor''' @@ -263,15 +241,78 @@ def p_factor1(self, p): | opar expr cpar''' p[0] = p[1] if len(p) == 2 else p[2] + def p_factor1_error(self, p): + '''factor : opar expr error + | error expr cpar + | opar error cpar''' + p[0] = ErrorNode() + + def p_factor2(self, p): '''factor : factor dot func_call + | not expr | func_call''' if len(p) == 2: p[0] = StaticCallNode(*p[1]) + elif p[1] == 'not': + p[0] = NotNode(p[2]) else: p[0] = CallNode(p[1], *p[3]) + def p_expr_let(self, p): + 'factor : let let_list in expr' + p[0] = LetNode(p[2], p[4]) + + def p_expr_let_error(self, p): + '''factor : let error in expr + | let let_list in error + | let let_list error expr''' + p[0] = ErrorNode() + + + def p_expr_case(self, p): + 'factor : case expr of cases_list esac' + p[0] = CaseNode(p[2], p[4]) + + def p_expr_case_error(self, p): + '''factor : case error of cases_list esac + | case expr of error esac + | case expr error cases_list esac + | case expr of cases_list error''' + p[0] = ErrorNode() + + + def p_expr_if(self, p): + 'factor : if expr then expr else expr fi' + p[0] = ConditionalNode(p[2], p[4], p[6]) + + def p_expr_if_error(self, p): + '''factor : if error then expr else expr fi + | if expr then error else expr fi + | if expr then expr else error fi + | if expr error expr else expr fi + | if expr then expr error error expr fi + | if expr then expr error expr fi + | if expr then expr else expr error + | if error fi''' + p[0] = ErrorNode() + + + def p_expr_while(self, p): + 'factor : while expr loop expr pool' + p[0] = WhileNode(p[2], p[4]) + + + def p_expr_while_error(self, p): + '''factor : while error loop expr pool + | while expr loop error pool + | while expr loop expr error + | while expr error expr loop expr pool + | while expr error expr pool''' + p[0] = ErrorNode() + + def p_atom_num(self, p): 'atom : num' p[0] = ConstantNumNode(p[1]) @@ -292,6 +333,12 @@ def p_atom_block(self, p): 'atom : ocur block ccur' p[0] = BlockNode(p[2]) + def p_atom_block_error(self, p): + '''atom : error block ccur + | ocur error ccur + | ocur block error''' + p[0] = ErrorNode() + def p_atom_boolean(self, p): '''atom : true | false''' @@ -309,7 +356,7 @@ def p_block(self, p): def p_block_error(self, p): '''block : error block - | error''' + | error semi''' p[0] = [ErrorNode()] diff --git a/src/tools/__pycache__/errors.cpython-37.pyc b/src/tools/__pycache__/errors.cpython-37.pyc index d7afb7ccb7b1f71c9b55adf6be3a959f8ba63ab7..4913345ec136b13aac0ac09b880f882e65a7e7b1 100644 GIT binary patch delta 627 zcmaE$d|H{;iIFeS%f| z!IgO>iOD6I$*x63`9)TfC$cI`zRaO1gT=-uR@a~){~(A_lXzJKbFlf$`G1<*~J+`}cq2=@Nu4}2_w=4ghs`eO!ygCO=@66_o(05Ch_3HXy;l$il?J zR3tI^7?;oFIJQ-cQeZQ6*!4nC%`B1xs*d7?nHS>k?dlgL8tUib8sZw{>*?nh;_4C~ z91`T|=N`rF>hBis?CK78l1>!&?APxXpafV$INKR*QoUG1~##AH?wsRkcrVJK4 zZ?U=t1^EX-^-51x

I<2I_T~T*|qUQ5LAxLl=v-D6!CBpo^Sb-TZ@G;~j&8J>C64 z?tun^EYLURXn`QR`50F)BcmMHHMTse0_et0F5-!11P9_|1x}X9?|H-~n{Y~Pmgf~^ zoGizsGC6`z3scV|K5d8|ae1J9{vbO!fCM<;fq`Enzxfki7UN_|9+k-r0-BimcM4=e o^fM|f-7Y>K?@jRNw>DkXm$$8K`k3LlFlYU#Pb|u1yfyKGr0Fg0q{QOPWas?6w9NEd ztS+ujq3*Xh(^E@)^3&5(i*7OJDB=g204Bbs0a=r^8TDA=9S?7u9Kje404Go% AH~;_u diff --git a/src/utils/logger.py b/src/utils/logger.py index 376e1896..189fc214 100644 --- a/src/utils/logger.py +++ b/src/utils/logger.py @@ -6,7 +6,7 @@ logging.basicConfig( level = logging.DEBUG, - filename = f"{cwd}/src/output_parser/parselog.txt", + filename = f"{cwd}/output_parser/parselog.txt", filemode = "w", format = "%(filename)10s:%(lineno)4d:%(message)s" ) diff --git a/tests/utils/utils.py b/tests/utils/utils.py index 2e978ead..13f357c0 100644 --- a/tests/utils/utils.py +++ b/tests/utils/utils.py @@ -65,9 +65,3 @@ def compare_errors(compiler_path: str, cool_file_path: str, error_file_path: str print(return_code, output) assert return_code == 0, TEST_MUST_COMPILE % get_file_name(cool_file_path) - -if __name__ == "__main__": - compiler_path = '/media/loly/02485E43485E359F/_Escuela/__UH/4to Año/Complementos de Compilación/Compiler/cool-compiler-2020/src/coolc.sh' - cool_file_path = '/media/loly/02485E43485E359F/_Escuela/__UH/4to Año/Complementos de Compilación/Compiler/cool-compiler-2020/tests/parser/program3.cl' - sp = subprocess.run(['bash', compiler_path, cool_file_path], capture_output=True, timeout=1000) - return_code, output = sp.returncode, sp.stdout.decode() From 11ff3614b8fec47082064bb3012af4457e0998a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Loraine=20Monteagudo=20Garc=C3=ADa?= Date: Tue, 25 Feb 2020 21:27:31 -0700 Subject: [PATCH 15/60] Everything working ok :). Last changes in the parser --- src/__pycache__/base_parser.cpython-37.pyc | Bin 1028 -> 1032 bytes src/__pycache__/lexer.cpython-37.pyc | Bin 5899 -> 5917 bytes src/__pycache__/parser.cpython-37.pyc | Bin 17319 -> 13889 bytes src/lexer.py | 3 +- src/main.py | 7 +- src/output_parser/parselog.txt | 22253 +++++++++------- src/output_parser/parsetab.py | 167 +- src/parser.py | 154 +- src/tools/__pycache__/errors.cpython-37.pyc | Bin 4555 -> 4607 bytes src/tools/__pycache__/tokens.cpython-37.pyc | Bin 1415 -> 1385 bytes src/tools/errors.py | 2 +- src/utils/__pycache__/__init__.cpython-37.pyc | Bin 237 -> 207 bytes src/utils/__pycache__/logger.cpython-37.pyc | Bin 431 -> 426 bytes src/utils/__pycache__/utils.cpython-37.pyc | Bin 392 -> 362 bytes src/utils/logger.py | 2 +- tests/utils/utils.py | 13 +- 16 files changed, 12566 insertions(+), 10035 deletions(-) diff --git a/src/__pycache__/base_parser.cpython-37.pyc b/src/__pycache__/base_parser.cpython-37.pyc index aa729f7b2e5b2f574d97e3aaece476ccef8dfb5f..1336524db7df5f62e5ea9311ba7ea854da558bbb 100644 GIT binary patch delta 36 qcmZqS=-}XX;^pOH0D@ELp&Pj$GBT!2e#_{~qM%`@x!H>86e9qg3kgL4 delta 31 lcmeC+XyM>?;^pOH0D^11Ase|LGBPGie#_{)*^cQHBLH~&2+#lk diff --git a/src/__pycache__/lexer.cpython-37.pyc b/src/__pycache__/lexer.cpython-37.pyc index 18bd2c6a0b16eed0c3dbb6055192d150cc9fa789..c4b85ca947b7b4944f514d8a5637adc60a9eff73 100644 GIT binary patch delta 2481 zcmb_eOKenC7{2Ge=FYRPnQ2SugO<`xOQ)@ZLNSWq&`@Bi6hb^8m)dh^hE8Ydxwk;c zL>9$pB4Y5wXiQAX#>9miUFgPzA-XaVw|9ea=SpIHB(D7bGt-9%?Z%nh@18m5{EzdU z|1oc8Kh7o&#p4kTJ`+o)&)-eoPPCAlxBJE?#x-WM&<%}+mUSBCG3Lza;w>Is)@Yn3 zSeQjv^c|hn@w%1zI~u&>D-FEv4xx?Q=J88S%YMo^+QN3yR@O_mv0b!{_0jFDpSH6M z?O+46lMT`?wwvx?L$sS^X%8EwJJ|^BWutT#dxG|{Cuu+1Lo;kIdkXXqu&3ERcn`Au zZ0v^2>g_Rh2!4;S!{F}=a#C-JnBdfIFQqc;eLO#%M!N@h4UePX@uEjKv zF!F&tUuKI%{tE$-j4cd!2|Q+Cb0NyY3ydPaDj(?Gb_2}*eNMI*CkEZoVNc8q!wMJK zg{8o8-9oA0yRHL!Jas9$P4JtRw~R3}1=F(2Nz0#&-W)EABtSl6h&a3htH>|&Vqm?> zXA7l_F6wZS_yR3fp%G^yzB^N%pXVjtYnI2&mnTqD9`>UW(F{8oY zq&!TZTA;HOSeK`Zi~MnV62${H-qlf4j7o;Tw&p{GWYEi8Iph4Zys1p*o-YceS#Q6*=X`h;saMkI$N)kHp%Wl5{iOxICC%|QjV}0q5ClCu znx@OU;g4F>C031utHGhpJs=k&y?gQCq6a~_y?S(<*on}KunS=W5%PyfI;yg&X68ZU z-B;GhRFtnNUZZn!ov<1Jxix0oQlVHp4Rapmkfy)qB)@nNttSLxGv0PcSx{6VONy_@ zg#xSx4eNSm$|Y}co}ZKF<2iRm1w8792gCd@JRX(|RS!sB9eOj(kVdN>s{*lv3Y1m? zY4l?_6~?k5`e9nOM#tr^@ogvn2ckA!c=_V%@@(SUTo!Bq*I2RwW0w2X0J4hZE8v-0 ztd^2TmIK>&G168fuUi^XoQ{K@EyYaVEwE2yqW(f33T?)e<-4WD`OoD0^>iObZ*^(zZ!b4LkqB1 zLcUhfD@Mg!Hts;ntB_09ioP4g+i_UnrNTAt;^yzL!5|dIhJEOA;&az$8f?hiaHU%cE^C3h^fnasUCShW!LGB4f7VD<%ESJ z_4H6INka?8r7U!85t9ef6J=#VOrb5jw!p-m7?^C@pAJmHrOH@T(`TYZDH!^%!wTME?h~edCt^ delta 2413 zcmb_dO>7%Q6y9C$uGjYZFR|VH)k)L3iJQhrOOUFz;wP1<(ozT7gsLNvZJL=Hr;crA z*KJc7^^izCAVAefz@dmlT=|heLWl$EfeHyORN{bEf(sH72UJcR5C`5{JBeF0%>`TY z?d+Ru8=O4Lt{Rf!ra z3JJ3a4O~(99Tr}ZNR-8BkcO!FmO|nzzSglW!85wn$>QrWNidxyR%BU%XLK=%Gb*2x zvf7g0YOZSsLIz)EUVUng<(oYYN0XjnV(1T=JY$b4C08GQ+jDba#Tm9@*Q78eouK@Zb+6!m4>va zSvr+K%U8(yTz#oZ>t#j^#(9-PUc{j6QoRVXKV&eL^>ZIQIA-YT-bXg%&#rR=B;p%o zQ15`rKScbloXL*ad|?b08PC<0UBj|Um6BswxKXyZTZ%5@zemjZj;blN@RvU&KKEtv zA$Z|Q0Emi5;OS~*c9oS~?Gh`NDp`fcP$)Yb{WYNzB|*nps4gwBieq<+KJ~&Wv{Zoa z(FpGXXzB7E6g;9G-O{$IHC9Q(H#R0KDL1;seLX3DQqP_Bfhm>Vf@U?3a^53u`P2Q6 z@D^#yh*d8i7T@|CfnA_o$m%>Iri_ClJCPD_EZgCwO3^+h){OTr?cUJFKt>P_APfMw zs*CbE^j}Z{sPT&;!!Xn^1;m0$N}Gn z;AODE0tzw+`w@l^+Bgv(22-H|2wNV--QYW~Zt?1|ziD`rSv0b}O;~k-=N3s;rBp6o zKo3}Xk|KWeC%(8Fipfw-_s!l(&xJ?Z04#glZFekS-HmS zp8X#}Z{LmT<#)wLk$d?ua1GgGOL2Wg<}`O#D_5^UYw;GFb^h2|)g23u!PnxG=<@gg znBXT7c2ZLvt3>aLS7H~3Q0YmeXpU8>FMTI|iIF3CMmF0B((xokILoaj^s}hOFCO(a z1C@9`!obez6?Uy$s<2;0pkp|KC5qz&44a5&J2E#Nsi8D{4Ryu$h6YVsU-NHC*5QJ3 zjE066RYP9X)&f*PS*y)+>|7l4$p)L%AD%6oE=->*{jwnkVf+Unq2)RN diff --git a/src/__pycache__/parser.cpython-37.pyc b/src/__pycache__/parser.cpython-37.pyc index 01fb7e6a4b9a5354363165a55430e1ce75ec952e..10a9aa953c3353620fda6899a6853b90191d0e8e 100644 GIT binary patch delta 877 zcmYk4TS!z<6ozM=xp?O2j9r{@#!Jqq*^HVxqvL3KOQYyArkN7mY-lt`&8g#PC?!N> zWJJVYJp^XG)QduKgdV#-^bk=5MG`_(R0L( z#iHo=nVM@o&|G-Q`h+I$zM3LKi_Y7PXVNj+j~abQYWHd9_1p{jA@v5Xf%c{=X1JpA);#Igh{o|aqe7d_Tu!86 zZj~RinQ_{SQP)nSyB#)F;*U`sj0Gxg^y<}Q4$rzh;T;gQ>e`}sBs!jT=s@ytRz z$X4hDXLM>`vJ;42V=iZbX7Mfe4SmGp)oVF{S^JciOY{|rCxB40x!%u*o}dUhbrGpY zQdh;rO7GO2CY}vdy1r#`5&fq`jQmGT!y7xphvG5SwGMAw*{HJ^u;{Y;)C4|n#uV)z zj71}=l@}^88okmUWlMh>i;b~J#~w?4v@fgUqHRin1dG__27&=1|t&oOO z8e*~Drm))Ip%xu&|C_B8FEj0!Epj93IY_^dmF&a^k4+S|q-NxIlY%=HPTa`1^JSF4 zQ#eR=OcX8^&z>>LMYOmQYXj*h@imbTr+nR%ho6=#B>EK!u-A!V{{^b#oh-cbJC?jt zrMsybrn1kp0pH7>(q`NXOwx8l%HLBnHU+1t4U5cuoc%2w#8~Ac>O^SW4{nd@^|xpM zqg6Rbs2ZUmZL}(jXau*aPi}4Ia%YT#;ogA`)xfd3Q(%`s3&U$r%{3X};11j+@10+k5WI;a-m+8w6d zLTJL5S~qn;sdE)5vOzY=ifm?zVV3Rkaydyh$uhr2Ig$60cvxi%4%Zb+GdfViHty+A MLra21CWB<6Kl2InBme*a delta 3040 zcmai0YfK#172dn-!tS!L3oOen-h~14*dbl5#PD@oOADa+;i@o_mnq(!D=69KY(pD8=xhV~|>Z9;}unwLGhe55MWpnU)khs5O zD*U|RHZ#CV^Oz>XPsysVc5FnHxAoxN zVB6X|3C7q8tTo%6JdzQ67|+8 z46=j~+eDEJ1J<)?;G3iHSvCa^H&3*ZVnD^^LCc_y^`z{i#81bp1D-ELbnCagp{k}67D^Y5h6^<@q74AT~v_reA z6GEL=&A@h@C@G0yth9*r8eGjBf!NMA*u66a@of9>jY`=#tI6UW_P9=mr>79^u)c9V zsK;Mte*binQVW)3z?>G znO($y(Y2JxF5*n|qsx(vu~>ng1uU%m>|Xdh+u-^`XS_qz&O3Fk*Wz9}Lm21%wqFo$ z$;YlE!>B~?1*0tLUmI&lGPVv=t#{bJ-~@NQ`X(tjH3_TjjjVwEm87a_u%>2&X%jn$ z4qMPU>3j)3#d5+n3OlVuoYVPqoX(#VoPH|_uv*hoh?ORt^#!NkZhM9TR`ZrpaMh^h z*5tMh#=eH<+6N)m)dQ?!idBKoora~3#&QWZS&HWwHkfNyR$ppQ)-7|yDYqRbtCXeW z7T$*Mt2MoS7=v!Nsm-p&1UlIWZ0k^058ewVKx+xZr&u9>?3lxY?Ck6-dzQ2Q;CVJJ z7?SInHp9`(a4rkU5T>Ef*U;o>pnVP%T(4YN>xRtD>i=86VSswDwGJDQA|tkw|D+dM z(8@reGYPLZJqVXN&-z;!OjV>H(UoxHXxwF?vKNV5_RgG@R4M~JYK4NM(Tq&7w2}@@ z9TmF}w(G!iovA8YvTcobAb0QExpiOLw6nQ`|I>p_nj1RkL56O`YA+)6 zdB(|AyO*o*wpw-7?E8^Q;7FIu@^GbVAGJ(}weBVD+^npW&tK8-ezen5(ll7lB+{;w zTyunWIIgteE~(vl&GAiqJ7*x^k$skFXx=XHj42e}-g-AYTg{1Zz>Bcb%5LdKJ3?C% zUWjKv>)8SE?!#;ZyKs)>;K^hw{JT5izt1U}SngT&JruRVl^kA|u|(903#L}YOGA~; zQ7I1KGf13CoIAFE=-KvfYqGMQXZdFCIC})sn+Acu#tuV&&sBB|zUp}kU;a1lS!Yx5 z^sdWHg3;c~Y##p8`wynU2l+p<1$e&iCO*R#`rlxe;A&wfj1?YdPp@4qv@-TA{B!rp z!zb`Qx)D4pC<~Gvz_EUk;55N01U{gLk=&>-wRwG#xKjin52|T2f$(ei-9V1r2Y(;1 zM(IM=y9s!L9)f!ab`kUv^b-^a_7Dsb>?7C@&+kdWTYC-+9ir)Bf*%naAvj9#D8Y{j zjuAXYaGc-_!32D>r;S?O%LzSUGC}{tMJsJyDg`y~_3q?X9q(OTgKn&nKfU;mH zj9*D}gMIf4Gx#b@D}rHg2L)Nht8`YkNTN#en)LD-{j;SWOie!_Y^e!yA+>u_cfI)7OmUncz zE2nBEmy@|suDYM+c&Bfd;G=LlyV)Nn$ZF diff --git a/src/lexer.py b/src/lexer.py index aad86bac..7fa3f733 100644 --- a/src/lexer.py +++ b/src/lexer.py @@ -11,6 +11,7 @@ def __init__(self, **kwargs): self.tokens = tokens self.errors = [] self.lexer = lex.lex(module=self, **kwargs) + self.lexer.lineno = 1 states = ( @@ -200,7 +201,7 @@ def tokenize_text(self, text): for tok in self.lexer: col = find_column(self.lexer, tok) tokens.append(Token(tok.type, tok.value, tok.lineno, col)) - self.lexer.lineno = 0 + self.lexer.lineno = 1 return tokens diff --git a/src/main.py b/src/main.py index 2fd1cfbd..b23890f8 100644 --- a/src/main.py +++ b/src/main.py @@ -3,10 +3,8 @@ from parser import CoolParser import sys, os -cwd = os.getcwd() - input_ = sys.argv[1] -# input_ = f'{cwd}/tests/parser/operation4.cl' +# input_ = f'tests/codegen/atoi2.cl' # output_ = args.output @@ -17,7 +15,8 @@ lexer = CoolLexer() tokens = lexer.tokenize_text(data) if lexer.errors: - # print(lexer.errors) + for error in lexer.errors: + print(error) raise Exception() parser = CoolParser(lexer) diff --git a/src/output_parser/parselog.txt b/src/output_parser/parselog.txt index 51db16b4..0f3e054c 100644 --- a/src/output_parser/parselog.txt +++ b/src/output_parser/parselog.txt @@ -1,4 +1,3 @@ - lex.py:1007:No error rule is defined for exclusive state 'strings' yacc.py:3317:Created by PLY version 3.11 (http://www.dabeaz.com/ply) yacc.py:3377: yacc.py:3378:Grammar @@ -37,180 +36,145 @@ yacc.py:3381:Rule 31 formals -> param_list_empty yacc.py:3381:Rule 32 param_list -> param yacc.py:3381:Rule 33 param_list -> param comma param_list - yacc.py:3381:Rule 34 param_list -> error comma param_list - yacc.py:3381:Rule 35 param_list -> param comma error - yacc.py:3381:Rule 36 param_list_empty -> epsilon - yacc.py:3381:Rule 37 param -> id colon type - yacc.py:3381:Rule 38 let_list -> let_assign - yacc.py:3381:Rule 39 let_list -> let_assign comma let_list - yacc.py:3381:Rule 40 let_list -> error let_list - yacc.py:3381:Rule 41 let_list -> error - yacc.py:3381:Rule 42 let_assign -> param larrow expr - yacc.py:3381:Rule 43 let_assign -> param - yacc.py:3381:Rule 44 cases_list -> casep semi - yacc.py:3381:Rule 45 cases_list -> casep semi cases_list - yacc.py:3381:Rule 46 cases_list -> error cases_list - yacc.py:3381:Rule 47 cases_list -> error semi - yacc.py:3381:Rule 48 casep -> id colon type rarrow expr - yacc.py:3381:Rule 49 expr -> id larrow expr - yacc.py:3381:Rule 50 expr -> comp - yacc.py:3381:Rule 51 comp -> comp less op - yacc.py:3381:Rule 52 comp -> comp lesseq op - yacc.py:3381:Rule 53 comp -> comp equal op - yacc.py:3381:Rule 54 comp -> op - yacc.py:3381:Rule 55 comp -> comp less error - yacc.py:3381:Rule 56 comp -> comp lesseq error - yacc.py:3381:Rule 57 comp -> comp equal error - yacc.py:3381:Rule 58 op -> op plus term - yacc.py:3381:Rule 59 op -> op minus term - yacc.py:3381:Rule 60 op -> term - yacc.py:3381:Rule 61 op -> op plus error - yacc.py:3381:Rule 62 op -> op minus error - yacc.py:3381:Rule 63 term -> term star base_call - yacc.py:3381:Rule 64 term -> term div base_call - yacc.py:3381:Rule 65 term -> isvoid base_call - yacc.py:3381:Rule 66 term -> nox base_call - yacc.py:3381:Rule 67 term -> base_call - yacc.py:3381:Rule 68 term -> term star error - yacc.py:3381:Rule 69 term -> term div error - yacc.py:3381:Rule 70 term -> isvoid error - yacc.py:3381:Rule 71 term -> nox error - yacc.py:3381:Rule 72 base_call -> factor arroba type dot func_call - yacc.py:3381:Rule 73 base_call -> factor - yacc.py:3381:Rule 74 base_call -> error arroba type dot func_call - yacc.py:3381:Rule 75 base_call -> factor arroba error dot func_call - yacc.py:3381:Rule 76 factor -> atom - yacc.py:3381:Rule 77 factor -> opar expr cpar - yacc.py:3381:Rule 78 factor -> opar expr error - yacc.py:3381:Rule 79 factor -> error expr cpar - yacc.py:3381:Rule 80 factor -> opar error cpar - yacc.py:3381:Rule 81 factor -> factor dot func_call - yacc.py:3381:Rule 82 factor -> not expr - yacc.py:3381:Rule 83 factor -> func_call - yacc.py:3381:Rule 84 factor -> let let_list in expr - yacc.py:3381:Rule 85 factor -> let error in expr - yacc.py:3381:Rule 86 factor -> let let_list in error - yacc.py:3381:Rule 87 factor -> let let_list error expr - yacc.py:3381:Rule 88 factor -> case expr of cases_list esac - yacc.py:3381:Rule 89 factor -> case error of cases_list esac - yacc.py:3381:Rule 90 factor -> case expr of error esac - yacc.py:3381:Rule 91 factor -> case expr error cases_list esac - yacc.py:3381:Rule 92 factor -> case expr of cases_list error - yacc.py:3381:Rule 93 factor -> if expr then expr else expr fi - yacc.py:3381:Rule 94 factor -> if error then expr else expr fi - yacc.py:3381:Rule 95 factor -> if expr then error else expr fi - yacc.py:3381:Rule 96 factor -> if expr then expr else error fi - yacc.py:3381:Rule 97 factor -> if expr error expr else expr fi - yacc.py:3381:Rule 98 factor -> if expr then expr error error expr fi - yacc.py:3381:Rule 99 factor -> if expr then expr error expr fi - yacc.py:3381:Rule 100 factor -> if expr then expr else expr error - yacc.py:3381:Rule 101 factor -> if error fi - yacc.py:3381:Rule 102 factor -> while expr loop expr pool - yacc.py:3381:Rule 103 factor -> while error loop expr pool - yacc.py:3381:Rule 104 factor -> while expr loop error pool - yacc.py:3381:Rule 105 factor -> while expr loop expr error - yacc.py:3381:Rule 106 factor -> while expr error expr loop expr pool - yacc.py:3381:Rule 107 factor -> while expr error expr pool - yacc.py:3381:Rule 108 atom -> num - yacc.py:3381:Rule 109 atom -> id - yacc.py:3381:Rule 110 atom -> new type - yacc.py:3381:Rule 111 atom -> new error - yacc.py:3381:Rule 112 atom -> ocur block ccur - yacc.py:3381:Rule 113 atom -> error block ccur - yacc.py:3381:Rule 114 atom -> ocur error ccur - yacc.py:3381:Rule 115 atom -> ocur block error - yacc.py:3381:Rule 116 atom -> true - yacc.py:3381:Rule 117 atom -> false - yacc.py:3381:Rule 118 atom -> string - yacc.py:3381:Rule 119 block -> expr semi - yacc.py:3381:Rule 120 block -> expr semi block - yacc.py:3381:Rule 121 block -> error block - yacc.py:3381:Rule 122 block -> error semi - yacc.py:3381:Rule 123 func_call -> id opar args cpar - yacc.py:3381:Rule 124 func_call -> id opar error cpar - yacc.py:3381:Rule 125 func_call -> error opar args cpar - yacc.py:3381:Rule 126 args -> arg_list - yacc.py:3381:Rule 127 args -> arg_list_empty - yacc.py:3381:Rule 128 arg_list -> expr - yacc.py:3381:Rule 129 arg_list -> expr comma arg_list - yacc.py:3381:Rule 130 arg_list -> error arg_list - yacc.py:3381:Rule 131 arg_list_empty -> epsilon + yacc.py:3381:Rule 34 param_list_empty -> epsilon + yacc.py:3381:Rule 35 param -> id colon type + yacc.py:3381:Rule 36 let_list -> let_assign + yacc.py:3381:Rule 37 let_list -> let_assign comma let_list + yacc.py:3381:Rule 38 let_assign -> param larrow expr + yacc.py:3381:Rule 39 let_assign -> param + yacc.py:3381:Rule 40 cases_list -> casep semi + yacc.py:3381:Rule 41 cases_list -> casep semi cases_list + yacc.py:3381:Rule 42 cases_list -> error cases_list + yacc.py:3381:Rule 43 cases_list -> error semi + yacc.py:3381:Rule 44 casep -> id colon type rarrow expr + yacc.py:3381:Rule 45 expr -> id larrow expr + yacc.py:3381:Rule 46 expr -> comp + yacc.py:3381:Rule 47 comp -> comp less op + yacc.py:3381:Rule 48 comp -> comp lesseq op + yacc.py:3381:Rule 49 comp -> comp equal op + yacc.py:3381:Rule 50 comp -> op + yacc.py:3381:Rule 51 op -> op plus term + yacc.py:3381:Rule 52 op -> op minus term + yacc.py:3381:Rule 53 op -> term + yacc.py:3381:Rule 54 term -> term star base_call + yacc.py:3381:Rule 55 term -> term div base_call + yacc.py:3381:Rule 56 term -> base_call + yacc.py:3381:Rule 57 term -> term star error + yacc.py:3381:Rule 58 term -> term div error + yacc.py:3381:Rule 59 base_call -> factor arroba type dot func_call + yacc.py:3381:Rule 60 base_call -> factor + yacc.py:3381:Rule 61 base_call -> error arroba type dot func_call + yacc.py:3381:Rule 62 base_call -> factor arroba error dot func_call + yacc.py:3381:Rule 63 factor -> atom + yacc.py:3381:Rule 64 factor -> opar expr cpar + yacc.py:3381:Rule 65 factor -> factor dot func_call + yacc.py:3381:Rule 66 factor -> not expr + yacc.py:3381:Rule 67 factor -> func_call + yacc.py:3381:Rule 68 factor -> isvoid base_call + yacc.py:3381:Rule 69 factor -> nox base_call + yacc.py:3381:Rule 70 factor -> let let_list in expr + yacc.py:3381:Rule 71 factor -> case expr of cases_list esac + yacc.py:3381:Rule 72 factor -> if expr then expr else expr fi + yacc.py:3381:Rule 73 factor -> while expr loop expr pool + yacc.py:3381:Rule 74 atom -> num + yacc.py:3381:Rule 75 atom -> id + yacc.py:3381:Rule 76 atom -> new type + yacc.py:3381:Rule 77 atom -> ocur block ccur + yacc.py:3381:Rule 78 atom -> error block ccur + yacc.py:3381:Rule 79 atom -> ocur error ccur + yacc.py:3381:Rule 80 atom -> ocur block error + yacc.py:3381:Rule 81 atom -> true + yacc.py:3381:Rule 82 atom -> false + yacc.py:3381:Rule 83 atom -> string + yacc.py:3381:Rule 84 block -> expr semi + yacc.py:3381:Rule 85 block -> expr semi block + yacc.py:3381:Rule 86 block -> error block + yacc.py:3381:Rule 87 block -> error semi + yacc.py:3381:Rule 88 func_call -> id opar args cpar + yacc.py:3381:Rule 89 func_call -> id opar error cpar + yacc.py:3381:Rule 90 func_call -> error opar args cpar + yacc.py:3381:Rule 91 args -> arg_list + yacc.py:3381:Rule 92 args -> arg_list_empty + yacc.py:3381:Rule 93 arg_list -> expr + yacc.py:3381:Rule 94 arg_list -> expr comma arg_list + yacc.py:3381:Rule 95 arg_list -> error arg_list + yacc.py:3381:Rule 96 arg_list_empty -> epsilon yacc.py:3399: yacc.py:3400:Terminals, with rules where they appear yacc.py:3401: - yacc.py:3405:arroba : 72 74 75 - yacc.py:3405:case : 88 89 90 91 92 - yacc.py:3405:ccur : 6 7 8 9 10 11 12 13 25 26 27 28 29 112 113 114 + yacc.py:3405:arroba : 59 61 62 + yacc.py:3405:case : 71 + yacc.py:3405:ccur : 6 7 8 9 10 11 12 13 25 26 27 28 29 77 78 79 yacc.py:3405:class : 6 7 8 9 10 11 12 13 - yacc.py:3405:colon : 18 19 20 21 22 23 24 25 26 27 28 29 37 48 - yacc.py:3405:comma : 33 34 35 39 129 - yacc.py:3405:cpar : 25 26 27 28 29 77 79 80 123 124 125 - yacc.py:3405:div : 64 69 - yacc.py:3405:dot : 72 74 75 81 - yacc.py:3405:else : 93 94 95 96 97 100 - yacc.py:3405:equal : 53 57 - yacc.py:3405:error : 5 8 9 10 11 11 12 13 17 20 21 22 23 24 26 27 28 29 34 35 40 41 46 47 55 56 57 61 62 68 69 70 71 74 75 78 79 80 85 86 87 89 90 91 92 94 95 96 97 98 98 99 100 101 103 104 105 106 107 111 113 114 115 121 122 124 125 130 - yacc.py:3405:esac : 88 89 90 91 - yacc.py:3405:false : 117 - yacc.py:3405:fi : 93 94 95 96 97 98 99 101 - yacc.py:3405:id : 18 19 21 23 24 25 27 28 29 37 48 49 109 123 124 - yacc.py:3405:if : 93 94 95 96 97 98 99 100 101 - yacc.py:3405:in : 84 85 86 + yacc.py:3405:colon : 18 19 20 21 22 23 24 25 26 27 28 29 35 44 + yacc.py:3405:comma : 33 37 94 + yacc.py:3405:cpar : 25 26 27 28 29 64 88 89 90 + yacc.py:3405:div : 55 58 + yacc.py:3405:dot : 59 61 62 65 + yacc.py:3405:else : 72 + yacc.py:3405:equal : 49 + yacc.py:3405:error : 5 8 9 10 11 11 12 13 17 20 21 22 23 24 26 27 28 29 42 43 57 58 61 62 78 79 80 86 87 89 90 95 + yacc.py:3405:esac : 71 + yacc.py:3405:false : 82 + yacc.py:3405:fi : 72 + yacc.py:3405:id : 18 19 21 23 24 25 27 28 29 35 44 45 75 88 89 + yacc.py:3405:if : 72 + yacc.py:3405:in : 70 yacc.py:3405:inherits : 7 10 11 12 13 - yacc.py:3405:isvoid : 65 70 - yacc.py:3405:larrow : 19 22 23 24 42 49 - yacc.py:3405:less : 51 55 - yacc.py:3405:lesseq : 52 56 - yacc.py:3405:let : 84 85 86 87 - yacc.py:3405:loop : 102 103 104 105 106 - yacc.py:3405:minus : 59 62 - yacc.py:3405:new : 110 111 - yacc.py:3405:not : 82 - yacc.py:3405:nox : 66 71 - yacc.py:3405:num : 108 - yacc.py:3405:ocur : 6 7 8 9 10 11 12 13 25 26 27 28 29 112 114 115 - yacc.py:3405:of : 88 89 90 92 - yacc.py:3405:opar : 25 26 27 28 29 77 78 80 123 124 125 - yacc.py:3405:plus : 58 61 - yacc.py:3405:pool : 102 103 104 106 107 - yacc.py:3405:rarrow : 48 - yacc.py:3405:semi : 6 7 8 10 11 12 15 16 44 45 47 119 120 122 - yacc.py:3405:star : 63 68 - yacc.py:3405:string : 118 - yacc.py:3405:then : 93 94 95 96 98 99 100 - yacc.py:3405:true : 116 - yacc.py:3405:type : 6 7 7 9 10 12 13 13 18 19 20 22 24 25 26 27 29 37 48 72 74 110 - yacc.py:3405:while : 102 103 104 105 106 107 + yacc.py:3405:isvoid : 68 + yacc.py:3405:larrow : 19 22 23 24 38 45 + yacc.py:3405:less : 47 + yacc.py:3405:lesseq : 48 + yacc.py:3405:let : 70 + yacc.py:3405:loop : 73 + yacc.py:3405:minus : 52 + yacc.py:3405:new : 76 + yacc.py:3405:not : 66 + yacc.py:3405:nox : 69 + yacc.py:3405:num : 74 + yacc.py:3405:ocur : 6 7 8 9 10 11 12 13 25 26 27 28 29 77 79 80 + yacc.py:3405:of : 71 + yacc.py:3405:opar : 25 26 27 28 29 64 88 89 90 + yacc.py:3405:plus : 51 + yacc.py:3405:pool : 73 + yacc.py:3405:rarrow : 44 + yacc.py:3405:semi : 6 7 8 10 11 12 15 16 40 41 43 84 85 87 + yacc.py:3405:star : 54 57 + yacc.py:3405:string : 83 + yacc.py:3405:then : 72 + yacc.py:3405:true : 81 + yacc.py:3405:type : 6 7 7 9 10 12 13 13 18 19 20 22 24 25 26 27 29 35 44 59 61 76 + yacc.py:3405:while : 73 yacc.py:3407: yacc.py:3408:Nonterminals, with rules where they appear yacc.py:3409: - yacc.py:3413:arg_list : 126 129 130 - yacc.py:3413:arg_list_empty : 127 - yacc.py:3413:args : 123 125 - yacc.py:3413:atom : 76 - yacc.py:3413:base_call : 63 64 65 66 67 - yacc.py:3413:block : 112 113 115 120 121 - yacc.py:3413:casep : 44 45 - yacc.py:3413:cases_list : 45 46 88 89 91 92 + yacc.py:3413:arg_list : 91 94 95 + yacc.py:3413:arg_list_empty : 92 + yacc.py:3413:args : 88 90 + yacc.py:3413:atom : 63 + yacc.py:3413:base_call : 54 55 56 68 69 + yacc.py:3413:block : 77 78 80 85 86 + yacc.py:3413:casep : 40 41 + yacc.py:3413:cases_list : 41 42 71 yacc.py:3413:class_list : 1 3 5 - yacc.py:3413:comp : 50 51 52 53 55 56 57 + yacc.py:3413:comp : 46 47 48 49 yacc.py:3413:def_attr : 15 yacc.py:3413:def_class : 3 4 yacc.py:3413:def_func : 16 - yacc.py:3413:epsilon : 14 36 131 - yacc.py:3413:expr : 19 22 23 25 26 27 28 42 48 49 77 78 79 82 84 85 87 88 90 91 92 93 93 93 94 94 95 95 96 96 97 97 97 98 98 98 99 99 99 100 100 100 102 102 103 104 105 105 106 106 106 107 107 119 120 128 129 - yacc.py:3413:factor : 72 73 75 81 + yacc.py:3413:epsilon : 14 34 96 + yacc.py:3413:expr : 19 22 23 25 26 27 28 38 44 45 64 66 70 71 72 72 72 73 73 84 85 93 94 + yacc.py:3413:factor : 59 60 62 65 yacc.py:3413:feature_list : 6 7 8 9 10 11 12 13 15 16 17 yacc.py:3413:formals : 25 26 28 29 - yacc.py:3413:func_call : 72 74 75 81 83 - yacc.py:3413:let_assign : 38 39 - yacc.py:3413:let_list : 39 40 84 86 87 - yacc.py:3413:op : 51 52 53 54 58 59 61 62 - yacc.py:3413:param : 32 33 35 42 43 - yacc.py:3413:param_list : 30 33 34 + yacc.py:3413:func_call : 59 61 62 65 67 + yacc.py:3413:let_assign : 36 37 + yacc.py:3413:let_list : 37 70 + yacc.py:3413:op : 47 48 49 50 51 52 + yacc.py:3413:param : 32 33 38 39 + yacc.py:3413:param_list : 30 33 yacc.py:3413:param_list_empty : 31 yacc.py:3413:program : 0 - yacc.py:3413:term : 58 59 60 63 64 68 69 + yacc.py:3413:term : 51 52 53 54 55 57 58 yacc.py:3414: yacc.py:3436:Generating LALR tables yacc.py:2543:Parsing method: LALR @@ -573,21 +537,18 @@ yacc.py:2565: (31) formals -> . param_list_empty yacc.py:2565: (32) param_list -> . param yacc.py:2565: (33) param_list -> . param comma param_list - yacc.py:2565: (34) param_list -> . error comma param_list - yacc.py:2565: (35) param_list -> . param comma error - yacc.py:2565: (36) param_list_empty -> . epsilon - yacc.py:2565: (37) param -> . id colon type + yacc.py:2565: (34) param_list_empty -> . epsilon + yacc.py:2565: (35) param -> . id colon type yacc.py:2565: (2) epsilon -> . yacc.py:2566: - yacc.py:2687: error shift and go to state 41 - yacc.py:2687: id shift and go to state 47 + yacc.py:2687: id shift and go to state 46 yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) yacc.py:2689: - yacc.py:2714: formals shift and go to state 42 - yacc.py:2714: param_list shift and go to state 43 - yacc.py:2714: param_list_empty shift and go to state 44 - yacc.py:2714: param shift and go to state 45 - yacc.py:2714: epsilon shift and go to state 46 + yacc.py:2714: formals shift and go to state 41 + yacc.py:2714: param_list shift and go to state 42 + yacc.py:2714: param_list_empty shift and go to state 43 + yacc.py:2714: param shift and go to state 44 + yacc.py:2714: epsilon shift and go to state 45 yacc.py:2561: yacc.py:2562:state 29 yacc.py:2563: @@ -615,7 +576,7 @@ yacc.py:2687: id shift and go to state 19 yacc.py:2689: yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: feature_list shift and go to state 48 + yacc.py:2714: feature_list shift and go to state 47 yacc.py:2714: epsilon shift and go to state 16 yacc.py:2714: def_func shift and go to state 18 yacc.py:2561: @@ -645,7 +606,7 @@ yacc.py:2687: id shift and go to state 19 yacc.py:2689: yacc.py:2714: def_func shift and go to state 18 - yacc.py:2714: feature_list shift and go to state 49 + yacc.py:2714: feature_list shift and go to state 48 yacc.py:2714: epsilon shift and go to state 16 yacc.py:2714: def_attr shift and go to state 17 yacc.py:2561: @@ -657,8 +618,8 @@ yacc.py:2565: (23) def_attr -> id colon . error larrow expr yacc.py:2565: (24) def_attr -> id colon . type larrow error yacc.py:2566: - yacc.py:2687: type shift and go to state 50 - yacc.py:2687: error shift and go to state 51 + yacc.py:2687: type shift and go to state 49 + yacc.py:2687: error shift and go to state 50 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 32 @@ -671,21 +632,19 @@ yacc.py:2565: (31) formals -> . param_list_empty yacc.py:2565: (32) param_list -> . param yacc.py:2565: (33) param_list -> . param comma param_list - yacc.py:2565: (34) param_list -> . error comma param_list - yacc.py:2565: (35) param_list -> . param comma error - yacc.py:2565: (36) param_list_empty -> . epsilon - yacc.py:2565: (37) param -> . id colon type + yacc.py:2565: (34) param_list_empty -> . epsilon + yacc.py:2565: (35) param -> . id colon type yacc.py:2565: (2) epsilon -> . yacc.py:2566: - yacc.py:2687: error shift and go to state 53 - yacc.py:2687: id shift and go to state 47 + yacc.py:2687: error shift and go to state 52 + yacc.py:2687: id shift and go to state 46 yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) yacc.py:2689: - yacc.py:2714: formals shift and go to state 52 - yacc.py:2714: param_list shift and go to state 43 - yacc.py:2714: param_list_empty shift and go to state 44 - yacc.py:2714: param shift and go to state 45 - yacc.py:2714: epsilon shift and go to state 46 + yacc.py:2714: formals shift and go to state 51 + yacc.py:2714: param_list shift and go to state 42 + yacc.py:2714: param_list_empty shift and go to state 43 + yacc.py:2714: param shift and go to state 44 + yacc.py:2714: epsilon shift and go to state 45 yacc.py:2561: yacc.py:2562:state 33 yacc.py:2563: @@ -713,7 +672,7 @@ yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) yacc.py:2687: id shift and go to state 19 yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 54 + yacc.py:2714: feature_list shift and go to state 53 yacc.py:2714: epsilon shift and go to state 16 yacc.py:2714: def_attr shift and go to state 17 yacc.py:2714: def_func shift and go to state 18 @@ -743,7 +702,7 @@ yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) yacc.py:2687: id shift and go to state 19 yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 55 + yacc.py:2714: feature_list shift and go to state 54 yacc.py:2714: epsilon shift and go to state 16 yacc.py:2714: def_attr shift and go to state 17 yacc.py:2714: def_func shift and go to state 18 @@ -752,7 +711,7 @@ yacc.py:2563: yacc.py:2565: (8) def_class -> class error ocur feature_list ccur . semi yacc.py:2566: - yacc.py:2687: semi shift and go to state 56 + yacc.py:2687: semi shift and go to state 55 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 36 @@ -780,7 +739,7 @@ yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) yacc.py:2687: id shift and go to state 19 yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 57 + yacc.py:2714: feature_list shift and go to state 56 yacc.py:2714: epsilon shift and go to state 16 yacc.py:2714: def_attr shift and go to state 17 yacc.py:2714: def_func shift and go to state 18 @@ -810,7 +769,7 @@ yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) yacc.py:2687: id shift and go to state 19 yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 58 + yacc.py:2714: feature_list shift and go to state 57 yacc.py:2714: epsilon shift and go to state 16 yacc.py:2714: def_attr shift and go to state 17 yacc.py:2714: def_func shift and go to state 18 @@ -839,128 +798,118 @@ yacc.py:2565: (22) def_attr -> error colon type . larrow expr yacc.py:2566: yacc.py:2687: semi reduce using rule 20 (def_attr -> error colon type .) - yacc.py:2687: larrow shift and go to state 59 + yacc.py:2687: larrow shift and go to state 58 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 41 yacc.py:2563: - yacc.py:2565: (34) param_list -> error . comma param_list - yacc.py:2566: - yacc.py:2687: comma shift and go to state 60 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 42 - yacc.py:2563: yacc.py:2565: (26) def_func -> error opar formals . cpar colon type ocur expr ccur yacc.py:2566: - yacc.py:2687: cpar shift and go to state 61 + yacc.py:2687: cpar shift and go to state 59 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 43 + yacc.py:2562:state 42 yacc.py:2563: yacc.py:2565: (30) formals -> param_list . yacc.py:2566: yacc.py:2687: cpar reduce using rule 30 (formals -> param_list .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 44 + yacc.py:2562:state 43 yacc.py:2563: yacc.py:2565: (31) formals -> param_list_empty . yacc.py:2566: yacc.py:2687: cpar reduce using rule 31 (formals -> param_list_empty .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 45 + yacc.py:2562:state 44 yacc.py:2563: yacc.py:2565: (32) param_list -> param . yacc.py:2565: (33) param_list -> param . comma param_list - yacc.py:2565: (35) param_list -> param . comma error yacc.py:2566: yacc.py:2687: cpar reduce using rule 32 (param_list -> param .) - yacc.py:2687: comma shift and go to state 62 + yacc.py:2687: comma shift and go to state 60 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 46 + yacc.py:2562:state 45 yacc.py:2563: - yacc.py:2565: (36) param_list_empty -> epsilon . + yacc.py:2565: (34) param_list_empty -> epsilon . yacc.py:2566: - yacc.py:2687: cpar reduce using rule 36 (param_list_empty -> epsilon .) + yacc.py:2687: cpar reduce using rule 34 (param_list_empty -> epsilon .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 47 + yacc.py:2562:state 46 yacc.py:2563: - yacc.py:2565: (37) param -> id . colon type + yacc.py:2565: (35) param -> id . colon type yacc.py:2566: - yacc.py:2687: colon shift and go to state 63 + yacc.py:2687: colon shift and go to state 61 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 48 + yacc.py:2562:state 47 yacc.py:2563: yacc.py:2565: (15) feature_list -> def_attr semi feature_list . yacc.py:2566: yacc.py:2687: ccur reduce using rule 15 (feature_list -> def_attr semi feature_list .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 49 + yacc.py:2562:state 48 yacc.py:2563: yacc.py:2565: (16) feature_list -> def_func semi feature_list . yacc.py:2566: yacc.py:2687: ccur reduce using rule 16 (feature_list -> def_func semi feature_list .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 50 + yacc.py:2562:state 49 yacc.py:2563: yacc.py:2565: (18) def_attr -> id colon type . yacc.py:2565: (19) def_attr -> id colon type . larrow expr yacc.py:2565: (24) def_attr -> id colon type . larrow error yacc.py:2566: yacc.py:2687: semi reduce using rule 18 (def_attr -> id colon type .) - yacc.py:2687: larrow shift and go to state 64 + yacc.py:2687: larrow shift and go to state 62 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 51 + yacc.py:2562:state 50 yacc.py:2563: yacc.py:2565: (21) def_attr -> id colon error . yacc.py:2565: (23) def_attr -> id colon error . larrow expr yacc.py:2566: yacc.py:2687: semi reduce using rule 21 (def_attr -> id colon error .) - yacc.py:2687: larrow shift and go to state 65 + yacc.py:2687: larrow shift and go to state 63 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 52 + yacc.py:2562:state 51 yacc.py:2563: yacc.py:2565: (25) def_func -> id opar formals . cpar colon type ocur expr ccur yacc.py:2565: (28) def_func -> id opar formals . cpar colon error ocur expr ccur yacc.py:2565: (29) def_func -> id opar formals . cpar colon type ocur error ccur yacc.py:2566: - yacc.py:2687: cpar shift and go to state 66 + yacc.py:2687: cpar shift and go to state 64 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 53 + yacc.py:2562:state 52 yacc.py:2563: yacc.py:2565: (27) def_func -> id opar error . cpar colon type ocur expr ccur - yacc.py:2565: (34) param_list -> error . comma param_list yacc.py:2566: - yacc.py:2687: cpar shift and go to state 67 - yacc.py:2687: comma shift and go to state 60 + yacc.py:2687: cpar shift and go to state 65 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 54 + yacc.py:2562:state 53 yacc.py:2563: yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list . ccur semi yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list . ccur error yacc.py:2566: - yacc.py:2687: ccur shift and go to state 68 + yacc.py:2687: ccur shift and go to state 66 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 55 + yacc.py:2562:state 54 yacc.py:2563: yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list . ccur semi yacc.py:2566: - yacc.py:2687: ccur shift and go to state 69 + yacc.py:2687: ccur shift and go to state 67 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 56 + yacc.py:2562:state 55 yacc.py:2563: yacc.py:2565: (8) def_class -> class error ocur feature_list ccur semi . yacc.py:2566: @@ -969,1919 +918,1454 @@ yacc.py:2687: $end reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 57 + yacc.py:2562:state 56 yacc.py:2563: yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list . ccur semi yacc.py:2566: - yacc.py:2687: ccur shift and go to state 70 + yacc.py:2687: ccur shift and go to state 68 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 58 + yacc.py:2562:state 57 yacc.py:2563: yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list . ccur semi yacc.py:2566: - yacc.py:2687: ccur shift and go to state 71 + yacc.py:2687: ccur shift and go to state 69 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 59 + yacc.py:2562:state 58 yacc.py:2563: yacc.py:2565: (22) def_attr -> error colon type larrow . expr - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: error shift and go to state 72 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 73 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 - yacc.py:2561: - yacc.py:2562:state 60 - yacc.py:2563: - yacc.py:2565: (34) param_list -> error comma . param_list - yacc.py:2565: (32) param_list -> . param - yacc.py:2565: (33) param_list -> . param comma param_list - yacc.py:2565: (34) param_list -> . error comma param_list - yacc.py:2565: (35) param_list -> . param comma error - yacc.py:2565: (37) param -> . id colon type - yacc.py:2566: - yacc.py:2687: error shift and go to state 41 - yacc.py:2687: id shift and go to state 47 - yacc.py:2689: - yacc.py:2714: param_list shift and go to state 96 - yacc.py:2714: param shift and go to state 45 + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 71 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: - yacc.py:2562:state 61 + yacc.py:2562:state 59 yacc.py:2563: yacc.py:2565: (26) def_func -> error opar formals cpar . colon type ocur expr ccur yacc.py:2566: - yacc.py:2687: colon shift and go to state 97 + yacc.py:2687: colon shift and go to state 94 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 62 + yacc.py:2562:state 60 yacc.py:2563: yacc.py:2565: (33) param_list -> param comma . param_list - yacc.py:2565: (35) param_list -> param comma . error yacc.py:2565: (32) param_list -> . param yacc.py:2565: (33) param_list -> . param comma param_list - yacc.py:2565: (34) param_list -> . error comma param_list - yacc.py:2565: (35) param_list -> . param comma error - yacc.py:2565: (37) param -> . id colon type + yacc.py:2565: (35) param -> . id colon type yacc.py:2566: - yacc.py:2687: error shift and go to state 99 - yacc.py:2687: id shift and go to state 47 + yacc.py:2687: id shift and go to state 46 yacc.py:2689: - yacc.py:2714: param shift and go to state 45 - yacc.py:2714: param_list shift and go to state 98 + yacc.py:2714: param shift and go to state 44 + yacc.py:2714: param_list shift and go to state 95 yacc.py:2561: - yacc.py:2562:state 63 + yacc.py:2562:state 61 yacc.py:2563: - yacc.py:2565: (37) param -> id colon . type + yacc.py:2565: (35) param -> id colon . type yacc.py:2566: - yacc.py:2687: type shift and go to state 100 + yacc.py:2687: type shift and go to state 96 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 64 + yacc.py:2562:state 62 yacc.py:2563: yacc.py:2565: (19) def_attr -> id colon type larrow . expr yacc.py:2565: (24) def_attr -> id colon type larrow . error - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 102 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 101 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 98 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 97 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: - yacc.py:2562:state 65 + yacc.py:2562:state 63 yacc.py:2563: yacc.py:2565: (23) def_attr -> id colon error larrow . expr - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: error shift and go to state 72 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 103 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 99 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: - yacc.py:2562:state 66 + yacc.py:2562:state 64 yacc.py:2563: yacc.py:2565: (25) def_func -> id opar formals cpar . colon type ocur expr ccur yacc.py:2565: (28) def_func -> id opar formals cpar . colon error ocur expr ccur yacc.py:2565: (29) def_func -> id opar formals cpar . colon type ocur error ccur yacc.py:2566: - yacc.py:2687: colon shift and go to state 104 + yacc.py:2687: colon shift and go to state 100 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 67 + yacc.py:2562:state 65 yacc.py:2563: yacc.py:2565: (27) def_func -> id opar error cpar . colon type ocur expr ccur yacc.py:2566: - yacc.py:2687: colon shift and go to state 105 + yacc.py:2687: colon shift and go to state 101 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 68 + yacc.py:2562:state 66 yacc.py:2563: yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list ccur . semi yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list ccur . error yacc.py:2566: - yacc.py:2687: semi shift and go to state 106 - yacc.py:2687: error shift and go to state 107 + yacc.py:2687: semi shift and go to state 102 + yacc.py:2687: error shift and go to state 103 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 69 + yacc.py:2562:state 67 yacc.py:2563: yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list ccur . semi yacc.py:2566: - yacc.py:2687: semi shift and go to state 108 + yacc.py:2687: semi shift and go to state 104 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 70 + yacc.py:2562:state 68 yacc.py:2563: yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list ccur . semi yacc.py:2566: - yacc.py:2687: semi shift and go to state 109 + yacc.py:2687: semi shift and go to state 105 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 71 + yacc.py:2562:state 69 yacc.py:2563: yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list ccur . semi yacc.py:2566: - yacc.py:2687: semi shift and go to state 110 + yacc.py:2687: semi shift and go to state 106 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 72 + yacc.py:2562:state 70 yacc.py:2563: - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: arroba shift and go to state 112 - yacc.py:2687: opar shift and go to state 115 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: error shift and go to state 111 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: expr shift and go to state 113 - yacc.py:2714: block shift and go to state 114 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: - yacc.py:2562:state 73 + yacc.py:2562:state 71 yacc.py:2563: yacc.py:2565: (22) def_attr -> error colon type larrow expr . yacc.py:2566: yacc.py:2687: semi reduce using rule 22 (def_attr -> error colon type larrow expr .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 74 + yacc.py:2562:state 72 yacc.py:2563: - yacc.py:2565: (49) expr -> id . larrow expr - yacc.py:2565: (109) atom -> id . - yacc.py:2565: (123) func_call -> id . opar args cpar - yacc.py:2565: (124) func_call -> id . opar error cpar - yacc.py:2566: - yacc.py:2687: larrow shift and go to state 116 - yacc.py:2687: arroba reduce using rule 109 (atom -> id .) - yacc.py:2687: dot reduce using rule 109 (atom -> id .) - yacc.py:2687: star reduce using rule 109 (atom -> id .) - yacc.py:2687: div reduce using rule 109 (atom -> id .) - yacc.py:2687: plus reduce using rule 109 (atom -> id .) - yacc.py:2687: minus reduce using rule 109 (atom -> id .) - yacc.py:2687: less reduce using rule 109 (atom -> id .) - yacc.py:2687: lesseq reduce using rule 109 (atom -> id .) - yacc.py:2687: equal reduce using rule 109 (atom -> id .) - yacc.py:2687: semi reduce using rule 109 (atom -> id .) - yacc.py:2687: cpar reduce using rule 109 (atom -> id .) - yacc.py:2687: error reduce using rule 109 (atom -> id .) - yacc.py:2687: of reduce using rule 109 (atom -> id .) - yacc.py:2687: then reduce using rule 109 (atom -> id .) - yacc.py:2687: loop reduce using rule 109 (atom -> id .) - yacc.py:2687: comma reduce using rule 109 (atom -> id .) - yacc.py:2687: in reduce using rule 109 (atom -> id .) - yacc.py:2687: else reduce using rule 109 (atom -> id .) - yacc.py:2687: pool reduce using rule 109 (atom -> id .) - yacc.py:2687: ccur reduce using rule 109 (atom -> id .) - yacc.py:2687: fi reduce using rule 109 (atom -> id .) - yacc.py:2687: opar shift and go to state 117 + yacc.py:2565: (45) expr -> id . larrow expr + yacc.py:2565: (75) atom -> id . + yacc.py:2565: (88) func_call -> id . opar args cpar + yacc.py:2565: (89) func_call -> id . opar error cpar + yacc.py:2566: + yacc.py:2687: larrow shift and go to state 112 + yacc.py:2687: arroba reduce using rule 75 (atom -> id .) + yacc.py:2687: dot reduce using rule 75 (atom -> id .) + yacc.py:2687: star reduce using rule 75 (atom -> id .) + yacc.py:2687: div reduce using rule 75 (atom -> id .) + yacc.py:2687: plus reduce using rule 75 (atom -> id .) + yacc.py:2687: minus reduce using rule 75 (atom -> id .) + yacc.py:2687: less reduce using rule 75 (atom -> id .) + yacc.py:2687: lesseq reduce using rule 75 (atom -> id .) + yacc.py:2687: equal reduce using rule 75 (atom -> id .) + yacc.py:2687: semi reduce using rule 75 (atom -> id .) + yacc.py:2687: cpar reduce using rule 75 (atom -> id .) + yacc.py:2687: of reduce using rule 75 (atom -> id .) + yacc.py:2687: then reduce using rule 75 (atom -> id .) + yacc.py:2687: loop reduce using rule 75 (atom -> id .) + yacc.py:2687: comma reduce using rule 75 (atom -> id .) + yacc.py:2687: in reduce using rule 75 (atom -> id .) + yacc.py:2687: else reduce using rule 75 (atom -> id .) + yacc.py:2687: pool reduce using rule 75 (atom -> id .) + yacc.py:2687: ccur reduce using rule 75 (atom -> id .) + yacc.py:2687: fi reduce using rule 75 (atom -> id .) + yacc.py:2687: opar shift and go to state 113 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 75 + yacc.py:2562:state 73 yacc.py:2563: - yacc.py:2565: (50) expr -> comp . - yacc.py:2565: (51) comp -> comp . less op - yacc.py:2565: (52) comp -> comp . lesseq op - yacc.py:2565: (53) comp -> comp . equal op - yacc.py:2565: (55) comp -> comp . less error - yacc.py:2565: (56) comp -> comp . lesseq error - yacc.py:2565: (57) comp -> comp . equal error + yacc.py:2565: (46) expr -> comp . + yacc.py:2565: (47) comp -> comp . less op + yacc.py:2565: (48) comp -> comp . lesseq op + yacc.py:2565: (49) comp -> comp . equal op yacc.py:2566: yacc.py:2666: ! shift/reduce conflict for less resolved as shift yacc.py:2666: ! shift/reduce conflict for lesseq resolved as shift yacc.py:2666: ! shift/reduce conflict for equal resolved as shift - yacc.py:2687: semi reduce using rule 50 (expr -> comp .) - yacc.py:2687: cpar reduce using rule 50 (expr -> comp .) - yacc.py:2687: error reduce using rule 50 (expr -> comp .) - yacc.py:2687: star reduce using rule 50 (expr -> comp .) - yacc.py:2687: div reduce using rule 50 (expr -> comp .) - yacc.py:2687: plus reduce using rule 50 (expr -> comp .) - yacc.py:2687: minus reduce using rule 50 (expr -> comp .) - yacc.py:2687: arroba reduce using rule 50 (expr -> comp .) - yacc.py:2687: dot reduce using rule 50 (expr -> comp .) - yacc.py:2687: of reduce using rule 50 (expr -> comp .) - yacc.py:2687: then reduce using rule 50 (expr -> comp .) - yacc.py:2687: loop reduce using rule 50 (expr -> comp .) - yacc.py:2687: comma reduce using rule 50 (expr -> comp .) - yacc.py:2687: in reduce using rule 50 (expr -> comp .) - yacc.py:2687: else reduce using rule 50 (expr -> comp .) - yacc.py:2687: pool reduce using rule 50 (expr -> comp .) - yacc.py:2687: ccur reduce using rule 50 (expr -> comp .) - yacc.py:2687: fi reduce using rule 50 (expr -> comp .) - yacc.py:2687: less shift and go to state 118 - yacc.py:2687: lesseq shift and go to state 119 - yacc.py:2687: equal shift and go to state 120 - yacc.py:2689: - yacc.py:2696: ! less [ reduce using rule 50 (expr -> comp .) ] - yacc.py:2696: ! lesseq [ reduce using rule 50 (expr -> comp .) ] - yacc.py:2696: ! equal [ reduce using rule 50 (expr -> comp .) ] + yacc.py:2687: semi reduce using rule 46 (expr -> comp .) + yacc.py:2687: cpar reduce using rule 46 (expr -> comp .) + yacc.py:2687: arroba reduce using rule 46 (expr -> comp .) + yacc.py:2687: dot reduce using rule 46 (expr -> comp .) + yacc.py:2687: star reduce using rule 46 (expr -> comp .) + yacc.py:2687: div reduce using rule 46 (expr -> comp .) + yacc.py:2687: plus reduce using rule 46 (expr -> comp .) + yacc.py:2687: minus reduce using rule 46 (expr -> comp .) + yacc.py:2687: of reduce using rule 46 (expr -> comp .) + yacc.py:2687: then reduce using rule 46 (expr -> comp .) + yacc.py:2687: loop reduce using rule 46 (expr -> comp .) + yacc.py:2687: comma reduce using rule 46 (expr -> comp .) + yacc.py:2687: in reduce using rule 46 (expr -> comp .) + yacc.py:2687: else reduce using rule 46 (expr -> comp .) + yacc.py:2687: pool reduce using rule 46 (expr -> comp .) + yacc.py:2687: ccur reduce using rule 46 (expr -> comp .) + yacc.py:2687: fi reduce using rule 46 (expr -> comp .) + yacc.py:2687: less shift and go to state 114 + yacc.py:2687: lesseq shift and go to state 115 + yacc.py:2687: equal shift and go to state 116 + yacc.py:2689: + yacc.py:2696: ! less [ reduce using rule 46 (expr -> comp .) ] + yacc.py:2696: ! lesseq [ reduce using rule 46 (expr -> comp .) ] + yacc.py:2696: ! equal [ reduce using rule 46 (expr -> comp .) ] yacc.py:2700: yacc.py:2561: - yacc.py:2562:state 76 + yacc.py:2562:state 74 yacc.py:2563: - yacc.py:2565: (54) comp -> op . - yacc.py:2565: (58) op -> op . plus term - yacc.py:2565: (59) op -> op . minus term - yacc.py:2565: (61) op -> op . plus error - yacc.py:2565: (62) op -> op . minus error + yacc.py:2565: (50) comp -> op . + yacc.py:2565: (51) op -> op . plus term + yacc.py:2565: (52) op -> op . minus term yacc.py:2566: yacc.py:2666: ! shift/reduce conflict for plus resolved as shift yacc.py:2666: ! shift/reduce conflict for minus resolved as shift - yacc.py:2687: less reduce using rule 54 (comp -> op .) - yacc.py:2687: lesseq reduce using rule 54 (comp -> op .) - yacc.py:2687: equal reduce using rule 54 (comp -> op .) - yacc.py:2687: semi reduce using rule 54 (comp -> op .) - yacc.py:2687: cpar reduce using rule 54 (comp -> op .) - yacc.py:2687: error reduce using rule 54 (comp -> op .) - yacc.py:2687: star reduce using rule 54 (comp -> op .) - yacc.py:2687: div reduce using rule 54 (comp -> op .) - yacc.py:2687: arroba reduce using rule 54 (comp -> op .) - yacc.py:2687: dot reduce using rule 54 (comp -> op .) - yacc.py:2687: of reduce using rule 54 (comp -> op .) - yacc.py:2687: then reduce using rule 54 (comp -> op .) - yacc.py:2687: loop reduce using rule 54 (comp -> op .) - yacc.py:2687: comma reduce using rule 54 (comp -> op .) - yacc.py:2687: in reduce using rule 54 (comp -> op .) - yacc.py:2687: else reduce using rule 54 (comp -> op .) - yacc.py:2687: pool reduce using rule 54 (comp -> op .) - yacc.py:2687: ccur reduce using rule 54 (comp -> op .) - yacc.py:2687: fi reduce using rule 54 (comp -> op .) - yacc.py:2687: plus shift and go to state 121 - yacc.py:2687: minus shift and go to state 122 - yacc.py:2689: - yacc.py:2696: ! plus [ reduce using rule 54 (comp -> op .) ] - yacc.py:2696: ! minus [ reduce using rule 54 (comp -> op .) ] + yacc.py:2687: less reduce using rule 50 (comp -> op .) + yacc.py:2687: lesseq reduce using rule 50 (comp -> op .) + yacc.py:2687: equal reduce using rule 50 (comp -> op .) + yacc.py:2687: semi reduce using rule 50 (comp -> op .) + yacc.py:2687: cpar reduce using rule 50 (comp -> op .) + yacc.py:2687: arroba reduce using rule 50 (comp -> op .) + yacc.py:2687: dot reduce using rule 50 (comp -> op .) + yacc.py:2687: star reduce using rule 50 (comp -> op .) + yacc.py:2687: div reduce using rule 50 (comp -> op .) + yacc.py:2687: of reduce using rule 50 (comp -> op .) + yacc.py:2687: then reduce using rule 50 (comp -> op .) + yacc.py:2687: loop reduce using rule 50 (comp -> op .) + yacc.py:2687: comma reduce using rule 50 (comp -> op .) + yacc.py:2687: in reduce using rule 50 (comp -> op .) + yacc.py:2687: else reduce using rule 50 (comp -> op .) + yacc.py:2687: pool reduce using rule 50 (comp -> op .) + yacc.py:2687: ccur reduce using rule 50 (comp -> op .) + yacc.py:2687: fi reduce using rule 50 (comp -> op .) + yacc.py:2687: plus shift and go to state 117 + yacc.py:2687: minus shift and go to state 118 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 50 (comp -> op .) ] + yacc.py:2696: ! minus [ reduce using rule 50 (comp -> op .) ] yacc.py:2700: yacc.py:2561: - yacc.py:2562:state 77 + yacc.py:2562:state 75 yacc.py:2563: - yacc.py:2565: (60) op -> term . - yacc.py:2565: (63) term -> term . star base_call - yacc.py:2565: (64) term -> term . div base_call - yacc.py:2565: (68) term -> term . star error - yacc.py:2565: (69) term -> term . div error + yacc.py:2565: (53) op -> term . + yacc.py:2565: (54) term -> term . star base_call + yacc.py:2565: (55) term -> term . div base_call + yacc.py:2565: (57) term -> term . star error + yacc.py:2565: (58) term -> term . div error yacc.py:2566: yacc.py:2666: ! shift/reduce conflict for star resolved as shift yacc.py:2666: ! shift/reduce conflict for div resolved as shift - yacc.py:2687: plus reduce using rule 60 (op -> term .) - yacc.py:2687: minus reduce using rule 60 (op -> term .) - yacc.py:2687: less reduce using rule 60 (op -> term .) - yacc.py:2687: lesseq reduce using rule 60 (op -> term .) - yacc.py:2687: equal reduce using rule 60 (op -> term .) - yacc.py:2687: semi reduce using rule 60 (op -> term .) - yacc.py:2687: cpar reduce using rule 60 (op -> term .) - yacc.py:2687: error reduce using rule 60 (op -> term .) - yacc.py:2687: arroba reduce using rule 60 (op -> term .) - yacc.py:2687: dot reduce using rule 60 (op -> term .) - yacc.py:2687: of reduce using rule 60 (op -> term .) - yacc.py:2687: then reduce using rule 60 (op -> term .) - yacc.py:2687: loop reduce using rule 60 (op -> term .) - yacc.py:2687: comma reduce using rule 60 (op -> term .) - yacc.py:2687: in reduce using rule 60 (op -> term .) - yacc.py:2687: else reduce using rule 60 (op -> term .) - yacc.py:2687: pool reduce using rule 60 (op -> term .) - yacc.py:2687: ccur reduce using rule 60 (op -> term .) - yacc.py:2687: fi reduce using rule 60 (op -> term .) - yacc.py:2687: star shift and go to state 123 - yacc.py:2687: div shift and go to state 124 - yacc.py:2689: - yacc.py:2696: ! star [ reduce using rule 60 (op -> term .) ] - yacc.py:2696: ! div [ reduce using rule 60 (op -> term .) ] + yacc.py:2687: plus reduce using rule 53 (op -> term .) + yacc.py:2687: minus reduce using rule 53 (op -> term .) + yacc.py:2687: less reduce using rule 53 (op -> term .) + yacc.py:2687: lesseq reduce using rule 53 (op -> term .) + yacc.py:2687: equal reduce using rule 53 (op -> term .) + yacc.py:2687: semi reduce using rule 53 (op -> term .) + yacc.py:2687: cpar reduce using rule 53 (op -> term .) + yacc.py:2687: arroba reduce using rule 53 (op -> term .) + yacc.py:2687: dot reduce using rule 53 (op -> term .) + yacc.py:2687: of reduce using rule 53 (op -> term .) + yacc.py:2687: then reduce using rule 53 (op -> term .) + yacc.py:2687: loop reduce using rule 53 (op -> term .) + yacc.py:2687: comma reduce using rule 53 (op -> term .) + yacc.py:2687: in reduce using rule 53 (op -> term .) + yacc.py:2687: else reduce using rule 53 (op -> term .) + yacc.py:2687: pool reduce using rule 53 (op -> term .) + yacc.py:2687: ccur reduce using rule 53 (op -> term .) + yacc.py:2687: fi reduce using rule 53 (op -> term .) + yacc.py:2687: star shift and go to state 119 + yacc.py:2687: div shift and go to state 120 + yacc.py:2689: + yacc.py:2696: ! star [ reduce using rule 53 (op -> term .) ] + yacc.py:2696: ! div [ reduce using rule 53 (op -> term .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 76 + yacc.py:2563: + yacc.py:2565: (56) term -> base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 56 (term -> base_call .) + yacc.py:2687: div reduce using rule 56 (term -> base_call .) + yacc.py:2687: plus reduce using rule 56 (term -> base_call .) + yacc.py:2687: minus reduce using rule 56 (term -> base_call .) + yacc.py:2687: less reduce using rule 56 (term -> base_call .) + yacc.py:2687: lesseq reduce using rule 56 (term -> base_call .) + yacc.py:2687: equal reduce using rule 56 (term -> base_call .) + yacc.py:2687: semi reduce using rule 56 (term -> base_call .) + yacc.py:2687: cpar reduce using rule 56 (term -> base_call .) + yacc.py:2687: arroba reduce using rule 56 (term -> base_call .) + yacc.py:2687: dot reduce using rule 56 (term -> base_call .) + yacc.py:2687: of reduce using rule 56 (term -> base_call .) + yacc.py:2687: then reduce using rule 56 (term -> base_call .) + yacc.py:2687: loop reduce using rule 56 (term -> base_call .) + yacc.py:2687: comma reduce using rule 56 (term -> base_call .) + yacc.py:2687: in reduce using rule 56 (term -> base_call .) + yacc.py:2687: else reduce using rule 56 (term -> base_call .) + yacc.py:2687: pool reduce using rule 56 (term -> base_call .) + yacc.py:2687: ccur reduce using rule 56 (term -> base_call .) + yacc.py:2687: fi reduce using rule 56 (term -> base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 77 + yacc.py:2563: + yacc.py:2565: (59) base_call -> factor . arroba type dot func_call + yacc.py:2565: (60) base_call -> factor . + yacc.py:2565: (62) base_call -> factor . arroba error dot func_call + yacc.py:2565: (65) factor -> factor . dot func_call + yacc.py:2566: + yacc.py:2609: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2666: ! shift/reduce conflict for dot resolved as shift + yacc.py:2687: arroba shift and go to state 121 + yacc.py:2687: star reduce using rule 60 (base_call -> factor .) + yacc.py:2687: div reduce using rule 60 (base_call -> factor .) + yacc.py:2687: plus reduce using rule 60 (base_call -> factor .) + yacc.py:2687: minus reduce using rule 60 (base_call -> factor .) + yacc.py:2687: less reduce using rule 60 (base_call -> factor .) + yacc.py:2687: lesseq reduce using rule 60 (base_call -> factor .) + yacc.py:2687: equal reduce using rule 60 (base_call -> factor .) + yacc.py:2687: semi reduce using rule 60 (base_call -> factor .) + yacc.py:2687: cpar reduce using rule 60 (base_call -> factor .) + yacc.py:2687: of reduce using rule 60 (base_call -> factor .) + yacc.py:2687: then reduce using rule 60 (base_call -> factor .) + yacc.py:2687: loop reduce using rule 60 (base_call -> factor .) + yacc.py:2687: comma reduce using rule 60 (base_call -> factor .) + yacc.py:2687: in reduce using rule 60 (base_call -> factor .) + yacc.py:2687: else reduce using rule 60 (base_call -> factor .) + yacc.py:2687: pool reduce using rule 60 (base_call -> factor .) + yacc.py:2687: ccur reduce using rule 60 (base_call -> factor .) + yacc.py:2687: fi reduce using rule 60 (base_call -> factor .) + yacc.py:2687: dot shift and go to state 122 + yacc.py:2689: + yacc.py:2696: ! arroba [ reduce using rule 60 (base_call -> factor .) ] + yacc.py:2696: ! dot [ reduce using rule 60 (base_call -> factor .) ] yacc.py:2700: yacc.py:2561: yacc.py:2562:state 78 yacc.py:2563: - yacc.py:2565: (67) term -> base_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 67 (term -> base_call .) - yacc.py:2687: div reduce using rule 67 (term -> base_call .) - yacc.py:2687: plus reduce using rule 67 (term -> base_call .) - yacc.py:2687: minus reduce using rule 67 (term -> base_call .) - yacc.py:2687: less reduce using rule 67 (term -> base_call .) - yacc.py:2687: lesseq reduce using rule 67 (term -> base_call .) - yacc.py:2687: equal reduce using rule 67 (term -> base_call .) - yacc.py:2687: semi reduce using rule 67 (term -> base_call .) - yacc.py:2687: cpar reduce using rule 67 (term -> base_call .) - yacc.py:2687: error reduce using rule 67 (term -> base_call .) - yacc.py:2687: arroba reduce using rule 67 (term -> base_call .) - yacc.py:2687: dot reduce using rule 67 (term -> base_call .) - yacc.py:2687: of reduce using rule 67 (term -> base_call .) - yacc.py:2687: then reduce using rule 67 (term -> base_call .) - yacc.py:2687: loop reduce using rule 67 (term -> base_call .) - yacc.py:2687: comma reduce using rule 67 (term -> base_call .) - yacc.py:2687: in reduce using rule 67 (term -> base_call .) - yacc.py:2687: else reduce using rule 67 (term -> base_call .) - yacc.py:2687: pool reduce using rule 67 (term -> base_call .) - yacc.py:2687: ccur reduce using rule 67 (term -> base_call .) - yacc.py:2687: fi reduce using rule 67 (term -> base_call .) + yacc.py:2565: (67) factor -> func_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 67 (factor -> func_call .) + yacc.py:2687: dot reduce using rule 67 (factor -> func_call .) + yacc.py:2687: star reduce using rule 67 (factor -> func_call .) + yacc.py:2687: div reduce using rule 67 (factor -> func_call .) + yacc.py:2687: plus reduce using rule 67 (factor -> func_call .) + yacc.py:2687: minus reduce using rule 67 (factor -> func_call .) + yacc.py:2687: less reduce using rule 67 (factor -> func_call .) + yacc.py:2687: lesseq reduce using rule 67 (factor -> func_call .) + yacc.py:2687: equal reduce using rule 67 (factor -> func_call .) + yacc.py:2687: semi reduce using rule 67 (factor -> func_call .) + yacc.py:2687: cpar reduce using rule 67 (factor -> func_call .) + yacc.py:2687: of reduce using rule 67 (factor -> func_call .) + yacc.py:2687: then reduce using rule 67 (factor -> func_call .) + yacc.py:2687: loop reduce using rule 67 (factor -> func_call .) + yacc.py:2687: comma reduce using rule 67 (factor -> func_call .) + yacc.py:2687: in reduce using rule 67 (factor -> func_call .) + yacc.py:2687: else reduce using rule 67 (factor -> func_call .) + yacc.py:2687: pool reduce using rule 67 (factor -> func_call .) + yacc.py:2687: ccur reduce using rule 67 (factor -> func_call .) + yacc.py:2687: fi reduce using rule 67 (factor -> func_call .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 79 yacc.py:2563: - yacc.py:2565: (65) term -> isvoid . base_call - yacc.py:2565: (70) term -> isvoid . error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 126 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: id shift and go to state 127 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 + yacc.py:2565: (63) factor -> atom . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 63 (factor -> atom .) + yacc.py:2687: dot reduce using rule 63 (factor -> atom .) + yacc.py:2687: star reduce using rule 63 (factor -> atom .) + yacc.py:2687: div reduce using rule 63 (factor -> atom .) + yacc.py:2687: plus reduce using rule 63 (factor -> atom .) + yacc.py:2687: minus reduce using rule 63 (factor -> atom .) + yacc.py:2687: less reduce using rule 63 (factor -> atom .) + yacc.py:2687: lesseq reduce using rule 63 (factor -> atom .) + yacc.py:2687: equal reduce using rule 63 (factor -> atom .) + yacc.py:2687: semi reduce using rule 63 (factor -> atom .) + yacc.py:2687: cpar reduce using rule 63 (factor -> atom .) + yacc.py:2687: of reduce using rule 63 (factor -> atom .) + yacc.py:2687: then reduce using rule 63 (factor -> atom .) + yacc.py:2687: loop reduce using rule 63 (factor -> atom .) + yacc.py:2687: comma reduce using rule 63 (factor -> atom .) + yacc.py:2687: in reduce using rule 63 (factor -> atom .) + yacc.py:2687: else reduce using rule 63 (factor -> atom .) + yacc.py:2687: pool reduce using rule 63 (factor -> atom .) + yacc.py:2687: ccur reduce using rule 63 (factor -> atom .) + yacc.py:2687: fi reduce using rule 63 (factor -> atom .) yacc.py:2689: - yacc.py:2714: base_call shift and go to state 125 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 80 yacc.py:2563: - yacc.py:2565: (66) term -> nox . base_call - yacc.py:2565: (71) term -> nox . error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 129 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: id shift and go to state 127 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: base_call shift and go to state 128 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (64) factor -> opar . expr cpar + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 123 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 81 yacc.py:2563: - yacc.py:2565: (72) base_call -> factor . arroba type dot func_call - yacc.py:2565: (73) base_call -> factor . - yacc.py:2565: (75) base_call -> factor . arroba error dot func_call - yacc.py:2565: (81) factor -> factor . dot func_call - yacc.py:2566: - yacc.py:2609: ! shift/reduce conflict for arroba resolved as shift - yacc.py:2666: ! shift/reduce conflict for dot resolved as shift - yacc.py:2687: arroba shift and go to state 130 - yacc.py:2687: star reduce using rule 73 (base_call -> factor .) - yacc.py:2687: div reduce using rule 73 (base_call -> factor .) - yacc.py:2687: plus reduce using rule 73 (base_call -> factor .) - yacc.py:2687: minus reduce using rule 73 (base_call -> factor .) - yacc.py:2687: less reduce using rule 73 (base_call -> factor .) - yacc.py:2687: lesseq reduce using rule 73 (base_call -> factor .) - yacc.py:2687: equal reduce using rule 73 (base_call -> factor .) - yacc.py:2687: semi reduce using rule 73 (base_call -> factor .) - yacc.py:2687: cpar reduce using rule 73 (base_call -> factor .) - yacc.py:2687: error reduce using rule 73 (base_call -> factor .) - yacc.py:2687: of reduce using rule 73 (base_call -> factor .) - yacc.py:2687: then reduce using rule 73 (base_call -> factor .) - yacc.py:2687: loop reduce using rule 73 (base_call -> factor .) - yacc.py:2687: comma reduce using rule 73 (base_call -> factor .) - yacc.py:2687: in reduce using rule 73 (base_call -> factor .) - yacc.py:2687: else reduce using rule 73 (base_call -> factor .) - yacc.py:2687: pool reduce using rule 73 (base_call -> factor .) - yacc.py:2687: ccur reduce using rule 73 (base_call -> factor .) - yacc.py:2687: fi reduce using rule 73 (base_call -> factor .) - yacc.py:2687: dot shift and go to state 131 - yacc.py:2689: - yacc.py:2696: ! arroba [ reduce using rule 73 (base_call -> factor .) ] - yacc.py:2696: ! dot [ reduce using rule 73 (base_call -> factor .) ] - yacc.py:2700: + yacc.py:2565: (66) factor -> not . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 124 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 82 yacc.py:2563: - yacc.py:2565: (83) factor -> func_call . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 83 (factor -> func_call .) - yacc.py:2687: dot reduce using rule 83 (factor -> func_call .) - yacc.py:2687: star reduce using rule 83 (factor -> func_call .) - yacc.py:2687: div reduce using rule 83 (factor -> func_call .) - yacc.py:2687: plus reduce using rule 83 (factor -> func_call .) - yacc.py:2687: minus reduce using rule 83 (factor -> func_call .) - yacc.py:2687: less reduce using rule 83 (factor -> func_call .) - yacc.py:2687: lesseq reduce using rule 83 (factor -> func_call .) - yacc.py:2687: equal reduce using rule 83 (factor -> func_call .) - yacc.py:2687: semi reduce using rule 83 (factor -> func_call .) - yacc.py:2687: cpar reduce using rule 83 (factor -> func_call .) - yacc.py:2687: error reduce using rule 83 (factor -> func_call .) - yacc.py:2687: of reduce using rule 83 (factor -> func_call .) - yacc.py:2687: then reduce using rule 83 (factor -> func_call .) - yacc.py:2687: loop reduce using rule 83 (factor -> func_call .) - yacc.py:2687: comma reduce using rule 83 (factor -> func_call .) - yacc.py:2687: in reduce using rule 83 (factor -> func_call .) - yacc.py:2687: else reduce using rule 83 (factor -> func_call .) - yacc.py:2687: pool reduce using rule 83 (factor -> func_call .) - yacc.py:2687: ccur reduce using rule 83 (factor -> func_call .) - yacc.py:2687: fi reduce using rule 83 (factor -> func_call .) + yacc.py:2565: (68) factor -> isvoid . base_call + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 yacc.py:2689: + yacc.py:2714: base_call shift and go to state 125 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 83 yacc.py:2563: - yacc.py:2565: (76) factor -> atom . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 76 (factor -> atom .) - yacc.py:2687: dot reduce using rule 76 (factor -> atom .) - yacc.py:2687: star reduce using rule 76 (factor -> atom .) - yacc.py:2687: div reduce using rule 76 (factor -> atom .) - yacc.py:2687: plus reduce using rule 76 (factor -> atom .) - yacc.py:2687: minus reduce using rule 76 (factor -> atom .) - yacc.py:2687: less reduce using rule 76 (factor -> atom .) - yacc.py:2687: lesseq reduce using rule 76 (factor -> atom .) - yacc.py:2687: equal reduce using rule 76 (factor -> atom .) - yacc.py:2687: semi reduce using rule 76 (factor -> atom .) - yacc.py:2687: cpar reduce using rule 76 (factor -> atom .) - yacc.py:2687: error reduce using rule 76 (factor -> atom .) - yacc.py:2687: of reduce using rule 76 (factor -> atom .) - yacc.py:2687: then reduce using rule 76 (factor -> atom .) - yacc.py:2687: loop reduce using rule 76 (factor -> atom .) - yacc.py:2687: comma reduce using rule 76 (factor -> atom .) - yacc.py:2687: in reduce using rule 76 (factor -> atom .) - yacc.py:2687: else reduce using rule 76 (factor -> atom .) - yacc.py:2687: pool reduce using rule 76 (factor -> atom .) - yacc.py:2687: ccur reduce using rule 76 (factor -> atom .) - yacc.py:2687: fi reduce using rule 76 (factor -> atom .) - yacc.py:2689: + yacc.py:2565: (69) factor -> nox . base_call + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 127 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 84 yacc.py:2563: - yacc.py:2565: (77) factor -> opar . expr cpar - yacc.py:2565: (78) factor -> opar . expr error - yacc.py:2565: (80) factor -> opar . error cpar - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 133 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 + yacc.py:2565: (70) factor -> let . let_list in expr + yacc.py:2565: (36) let_list -> . let_assign + yacc.py:2565: (37) let_list -> . let_assign comma let_list + yacc.py:2565: (38) let_assign -> . param larrow expr + yacc.py:2565: (39) let_assign -> . param + yacc.py:2565: (35) param -> . id colon type + yacc.py:2566: + yacc.py:2687: id shift and go to state 46 yacc.py:2689: - yacc.py:2714: expr shift and go to state 132 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2714: let_list shift and go to state 128 + yacc.py:2714: let_assign shift and go to state 129 + yacc.py:2714: param shift and go to state 130 yacc.py:2561: yacc.py:2562:state 85 yacc.py:2563: - yacc.py:2565: (82) factor -> not . expr - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: error shift and go to state 72 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 134 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (71) factor -> case . expr of cases_list esac + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 131 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 86 yacc.py:2563: - yacc.py:2565: (84) factor -> let . let_list in expr - yacc.py:2565: (85) factor -> let . error in expr - yacc.py:2565: (86) factor -> let . let_list in error - yacc.py:2565: (87) factor -> let . let_list error expr - yacc.py:2565: (38) let_list -> . let_assign - yacc.py:2565: (39) let_list -> . let_assign comma let_list - yacc.py:2565: (40) let_list -> . error let_list - yacc.py:2565: (41) let_list -> . error - yacc.py:2565: (42) let_assign -> . param larrow expr - yacc.py:2565: (43) let_assign -> . param - yacc.py:2565: (37) param -> . id colon type - yacc.py:2566: - yacc.py:2687: error shift and go to state 136 - yacc.py:2687: id shift and go to state 47 + yacc.py:2565: (72) factor -> if . expr then expr else expr fi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 yacc.py:2689: - yacc.py:2714: let_list shift and go to state 135 - yacc.py:2714: let_assign shift and go to state 137 - yacc.py:2714: param shift and go to state 138 + yacc.py:2714: expr shift and go to state 132 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 87 yacc.py:2563: - yacc.py:2565: (88) factor -> case . expr of cases_list esac - yacc.py:2565: (89) factor -> case . error of cases_list esac - yacc.py:2565: (90) factor -> case . expr of error esac - yacc.py:2565: (91) factor -> case . expr error cases_list esac - yacc.py:2565: (92) factor -> case . expr of cases_list error - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 140 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 139 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (73) factor -> while . expr loop expr pool + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 133 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 88 yacc.py:2563: - yacc.py:2565: (93) factor -> if . expr then expr else expr fi - yacc.py:2565: (94) factor -> if . error then expr else expr fi - yacc.py:2565: (95) factor -> if . expr then error else expr fi - yacc.py:2565: (96) factor -> if . expr then expr else error fi - yacc.py:2565: (97) factor -> if . expr error expr else expr fi - yacc.py:2565: (98) factor -> if . expr then expr error error expr fi - yacc.py:2565: (99) factor -> if . expr then expr error expr fi - yacc.py:2565: (100) factor -> if . expr then expr else expr error - yacc.py:2565: (101) factor -> if . error fi - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 142 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 141 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (74) atom -> num . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 74 (atom -> num .) + yacc.py:2687: dot reduce using rule 74 (atom -> num .) + yacc.py:2687: star reduce using rule 74 (atom -> num .) + yacc.py:2687: div reduce using rule 74 (atom -> num .) + yacc.py:2687: plus reduce using rule 74 (atom -> num .) + yacc.py:2687: minus reduce using rule 74 (atom -> num .) + yacc.py:2687: less reduce using rule 74 (atom -> num .) + yacc.py:2687: lesseq reduce using rule 74 (atom -> num .) + yacc.py:2687: equal reduce using rule 74 (atom -> num .) + yacc.py:2687: semi reduce using rule 74 (atom -> num .) + yacc.py:2687: cpar reduce using rule 74 (atom -> num .) + yacc.py:2687: of reduce using rule 74 (atom -> num .) + yacc.py:2687: then reduce using rule 74 (atom -> num .) + yacc.py:2687: loop reduce using rule 74 (atom -> num .) + yacc.py:2687: comma reduce using rule 74 (atom -> num .) + yacc.py:2687: in reduce using rule 74 (atom -> num .) + yacc.py:2687: else reduce using rule 74 (atom -> num .) + yacc.py:2687: pool reduce using rule 74 (atom -> num .) + yacc.py:2687: ccur reduce using rule 74 (atom -> num .) + yacc.py:2687: fi reduce using rule 74 (atom -> num .) + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 89 yacc.py:2563: - yacc.py:2565: (102) factor -> while . expr loop expr pool - yacc.py:2565: (103) factor -> while . error loop expr pool - yacc.py:2565: (104) factor -> while . expr loop error pool - yacc.py:2565: (105) factor -> while . expr loop expr error - yacc.py:2565: (106) factor -> while . expr error expr loop expr pool - yacc.py:2565: (107) factor -> while . expr error expr pool - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 144 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 143 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (76) atom -> new . type + yacc.py:2566: + yacc.py:2687: type shift and go to state 134 + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 90 yacc.py:2563: - yacc.py:2565: (108) atom -> num . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 108 (atom -> num .) - yacc.py:2687: dot reduce using rule 108 (atom -> num .) - yacc.py:2687: star reduce using rule 108 (atom -> num .) - yacc.py:2687: div reduce using rule 108 (atom -> num .) - yacc.py:2687: plus reduce using rule 108 (atom -> num .) - yacc.py:2687: minus reduce using rule 108 (atom -> num .) - yacc.py:2687: less reduce using rule 108 (atom -> num .) - yacc.py:2687: lesseq reduce using rule 108 (atom -> num .) - yacc.py:2687: equal reduce using rule 108 (atom -> num .) - yacc.py:2687: semi reduce using rule 108 (atom -> num .) - yacc.py:2687: cpar reduce using rule 108 (atom -> num .) - yacc.py:2687: error reduce using rule 108 (atom -> num .) - yacc.py:2687: of reduce using rule 108 (atom -> num .) - yacc.py:2687: then reduce using rule 108 (atom -> num .) - yacc.py:2687: loop reduce using rule 108 (atom -> num .) - yacc.py:2687: comma reduce using rule 108 (atom -> num .) - yacc.py:2687: in reduce using rule 108 (atom -> num .) - yacc.py:2687: else reduce using rule 108 (atom -> num .) - yacc.py:2687: pool reduce using rule 108 (atom -> num .) - yacc.py:2687: ccur reduce using rule 108 (atom -> num .) - yacc.py:2687: fi reduce using rule 108 (atom -> num .) - yacc.py:2689: + yacc.py:2565: (77) atom -> ocur . block ccur + yacc.py:2565: (79) atom -> ocur . error ccur + yacc.py:2565: (80) atom -> ocur . block error + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 136 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: block shift and go to state 135 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 91 yacc.py:2563: - yacc.py:2565: (110) atom -> new . type - yacc.py:2565: (111) atom -> new . error - yacc.py:2566: - yacc.py:2687: type shift and go to state 145 - yacc.py:2687: error shift and go to state 146 + yacc.py:2565: (81) atom -> true . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 81 (atom -> true .) + yacc.py:2687: dot reduce using rule 81 (atom -> true .) + yacc.py:2687: star reduce using rule 81 (atom -> true .) + yacc.py:2687: div reduce using rule 81 (atom -> true .) + yacc.py:2687: plus reduce using rule 81 (atom -> true .) + yacc.py:2687: minus reduce using rule 81 (atom -> true .) + yacc.py:2687: less reduce using rule 81 (atom -> true .) + yacc.py:2687: lesseq reduce using rule 81 (atom -> true .) + yacc.py:2687: equal reduce using rule 81 (atom -> true .) + yacc.py:2687: semi reduce using rule 81 (atom -> true .) + yacc.py:2687: cpar reduce using rule 81 (atom -> true .) + yacc.py:2687: of reduce using rule 81 (atom -> true .) + yacc.py:2687: then reduce using rule 81 (atom -> true .) + yacc.py:2687: loop reduce using rule 81 (atom -> true .) + yacc.py:2687: comma reduce using rule 81 (atom -> true .) + yacc.py:2687: in reduce using rule 81 (atom -> true .) + yacc.py:2687: else reduce using rule 81 (atom -> true .) + yacc.py:2687: pool reduce using rule 81 (atom -> true .) + yacc.py:2687: ccur reduce using rule 81 (atom -> true .) + yacc.py:2687: fi reduce using rule 81 (atom -> true .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 92 yacc.py:2563: - yacc.py:2565: (112) atom -> ocur . block ccur - yacc.py:2565: (114) atom -> ocur . error ccur - yacc.py:2565: (115) atom -> ocur . block error - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 148 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: block shift and go to state 147 - yacc.py:2714: expr shift and go to state 149 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (82) atom -> false . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 82 (atom -> false .) + yacc.py:2687: dot reduce using rule 82 (atom -> false .) + yacc.py:2687: star reduce using rule 82 (atom -> false .) + yacc.py:2687: div reduce using rule 82 (atom -> false .) + yacc.py:2687: plus reduce using rule 82 (atom -> false .) + yacc.py:2687: minus reduce using rule 82 (atom -> false .) + yacc.py:2687: less reduce using rule 82 (atom -> false .) + yacc.py:2687: lesseq reduce using rule 82 (atom -> false .) + yacc.py:2687: equal reduce using rule 82 (atom -> false .) + yacc.py:2687: semi reduce using rule 82 (atom -> false .) + yacc.py:2687: cpar reduce using rule 82 (atom -> false .) + yacc.py:2687: of reduce using rule 82 (atom -> false .) + yacc.py:2687: then reduce using rule 82 (atom -> false .) + yacc.py:2687: loop reduce using rule 82 (atom -> false .) + yacc.py:2687: comma reduce using rule 82 (atom -> false .) + yacc.py:2687: in reduce using rule 82 (atom -> false .) + yacc.py:2687: else reduce using rule 82 (atom -> false .) + yacc.py:2687: pool reduce using rule 82 (atom -> false .) + yacc.py:2687: ccur reduce using rule 82 (atom -> false .) + yacc.py:2687: fi reduce using rule 82 (atom -> false .) + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 93 yacc.py:2563: - yacc.py:2565: (116) atom -> true . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 116 (atom -> true .) - yacc.py:2687: dot reduce using rule 116 (atom -> true .) - yacc.py:2687: star reduce using rule 116 (atom -> true .) - yacc.py:2687: div reduce using rule 116 (atom -> true .) - yacc.py:2687: plus reduce using rule 116 (atom -> true .) - yacc.py:2687: minus reduce using rule 116 (atom -> true .) - yacc.py:2687: less reduce using rule 116 (atom -> true .) - yacc.py:2687: lesseq reduce using rule 116 (atom -> true .) - yacc.py:2687: equal reduce using rule 116 (atom -> true .) - yacc.py:2687: semi reduce using rule 116 (atom -> true .) - yacc.py:2687: cpar reduce using rule 116 (atom -> true .) - yacc.py:2687: error reduce using rule 116 (atom -> true .) - yacc.py:2687: of reduce using rule 116 (atom -> true .) - yacc.py:2687: then reduce using rule 116 (atom -> true .) - yacc.py:2687: loop reduce using rule 116 (atom -> true .) - yacc.py:2687: comma reduce using rule 116 (atom -> true .) - yacc.py:2687: in reduce using rule 116 (atom -> true .) - yacc.py:2687: else reduce using rule 116 (atom -> true .) - yacc.py:2687: pool reduce using rule 116 (atom -> true .) - yacc.py:2687: ccur reduce using rule 116 (atom -> true .) - yacc.py:2687: fi reduce using rule 116 (atom -> true .) + yacc.py:2565: (83) atom -> string . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 83 (atom -> string .) + yacc.py:2687: dot reduce using rule 83 (atom -> string .) + yacc.py:2687: star reduce using rule 83 (atom -> string .) + yacc.py:2687: div reduce using rule 83 (atom -> string .) + yacc.py:2687: plus reduce using rule 83 (atom -> string .) + yacc.py:2687: minus reduce using rule 83 (atom -> string .) + yacc.py:2687: less reduce using rule 83 (atom -> string .) + yacc.py:2687: lesseq reduce using rule 83 (atom -> string .) + yacc.py:2687: equal reduce using rule 83 (atom -> string .) + yacc.py:2687: semi reduce using rule 83 (atom -> string .) + yacc.py:2687: cpar reduce using rule 83 (atom -> string .) + yacc.py:2687: of reduce using rule 83 (atom -> string .) + yacc.py:2687: then reduce using rule 83 (atom -> string .) + yacc.py:2687: loop reduce using rule 83 (atom -> string .) + yacc.py:2687: comma reduce using rule 83 (atom -> string .) + yacc.py:2687: in reduce using rule 83 (atom -> string .) + yacc.py:2687: else reduce using rule 83 (atom -> string .) + yacc.py:2687: pool reduce using rule 83 (atom -> string .) + yacc.py:2687: ccur reduce using rule 83 (atom -> string .) + yacc.py:2687: fi reduce using rule 83 (atom -> string .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 94 yacc.py:2563: - yacc.py:2565: (117) atom -> false . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 117 (atom -> false .) - yacc.py:2687: dot reduce using rule 117 (atom -> false .) - yacc.py:2687: star reduce using rule 117 (atom -> false .) - yacc.py:2687: div reduce using rule 117 (atom -> false .) - yacc.py:2687: plus reduce using rule 117 (atom -> false .) - yacc.py:2687: minus reduce using rule 117 (atom -> false .) - yacc.py:2687: less reduce using rule 117 (atom -> false .) - yacc.py:2687: lesseq reduce using rule 117 (atom -> false .) - yacc.py:2687: equal reduce using rule 117 (atom -> false .) - yacc.py:2687: semi reduce using rule 117 (atom -> false .) - yacc.py:2687: cpar reduce using rule 117 (atom -> false .) - yacc.py:2687: error reduce using rule 117 (atom -> false .) - yacc.py:2687: of reduce using rule 117 (atom -> false .) - yacc.py:2687: then reduce using rule 117 (atom -> false .) - yacc.py:2687: loop reduce using rule 117 (atom -> false .) - yacc.py:2687: comma reduce using rule 117 (atom -> false .) - yacc.py:2687: in reduce using rule 117 (atom -> false .) - yacc.py:2687: else reduce using rule 117 (atom -> false .) - yacc.py:2687: pool reduce using rule 117 (atom -> false .) - yacc.py:2687: ccur reduce using rule 117 (atom -> false .) - yacc.py:2687: fi reduce using rule 117 (atom -> false .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 95 - yacc.py:2563: - yacc.py:2565: (118) atom -> string . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 118 (atom -> string .) - yacc.py:2687: dot reduce using rule 118 (atom -> string .) - yacc.py:2687: star reduce using rule 118 (atom -> string .) - yacc.py:2687: div reduce using rule 118 (atom -> string .) - yacc.py:2687: plus reduce using rule 118 (atom -> string .) - yacc.py:2687: minus reduce using rule 118 (atom -> string .) - yacc.py:2687: less reduce using rule 118 (atom -> string .) - yacc.py:2687: lesseq reduce using rule 118 (atom -> string .) - yacc.py:2687: equal reduce using rule 118 (atom -> string .) - yacc.py:2687: semi reduce using rule 118 (atom -> string .) - yacc.py:2687: cpar reduce using rule 118 (atom -> string .) - yacc.py:2687: error reduce using rule 118 (atom -> string .) - yacc.py:2687: of reduce using rule 118 (atom -> string .) - yacc.py:2687: then reduce using rule 118 (atom -> string .) - yacc.py:2687: loop reduce using rule 118 (atom -> string .) - yacc.py:2687: comma reduce using rule 118 (atom -> string .) - yacc.py:2687: in reduce using rule 118 (atom -> string .) - yacc.py:2687: else reduce using rule 118 (atom -> string .) - yacc.py:2687: pool reduce using rule 118 (atom -> string .) - yacc.py:2687: ccur reduce using rule 118 (atom -> string .) - yacc.py:2687: fi reduce using rule 118 (atom -> string .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 96 - yacc.py:2563: - yacc.py:2565: (34) param_list -> error comma param_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 34 (param_list -> error comma param_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 97 - yacc.py:2563: yacc.py:2565: (26) def_func -> error opar formals cpar colon . type ocur expr ccur yacc.py:2566: - yacc.py:2687: type shift and go to state 150 + yacc.py:2687: type shift and go to state 137 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 98 + yacc.py:2562:state 95 yacc.py:2563: yacc.py:2565: (33) param_list -> param comma param_list . yacc.py:2566: yacc.py:2687: cpar reduce using rule 33 (param_list -> param comma param_list .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 99 - yacc.py:2563: - yacc.py:2565: (35) param_list -> param comma error . - yacc.py:2565: (34) param_list -> error . comma param_list - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 35 (param_list -> param comma error .) - yacc.py:2687: comma shift and go to state 60 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 100 + yacc.py:2562:state 96 yacc.py:2563: - yacc.py:2565: (37) param -> id colon type . + yacc.py:2565: (35) param -> id colon type . yacc.py:2566: - yacc.py:2687: comma reduce using rule 37 (param -> id colon type .) - yacc.py:2687: cpar reduce using rule 37 (param -> id colon type .) - yacc.py:2687: larrow reduce using rule 37 (param -> id colon type .) - yacc.py:2687: in reduce using rule 37 (param -> id colon type .) - yacc.py:2687: error reduce using rule 37 (param -> id colon type .) + yacc.py:2687: comma reduce using rule 35 (param -> id colon type .) + yacc.py:2687: cpar reduce using rule 35 (param -> id colon type .) + yacc.py:2687: larrow reduce using rule 35 (param -> id colon type .) + yacc.py:2687: in reduce using rule 35 (param -> id colon type .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 101 + yacc.py:2562:state 97 yacc.py:2563: yacc.py:2565: (19) def_attr -> id colon type larrow expr . yacc.py:2566: yacc.py:2687: semi reduce using rule 19 (def_attr -> id colon type larrow expr .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 102 + yacc.py:2562:state 98 yacc.py:2563: yacc.py:2565: (24) def_attr -> id colon type larrow error . - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar yacc.py:2566: yacc.py:2687: semi reduce using rule 24 (def_attr -> id colon type larrow error .) - yacc.py:2687: arroba shift and go to state 112 - yacc.py:2687: opar shift and go to state 115 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: error shift and go to state 111 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: expr shift and go to state 113 - yacc.py:2714: block shift and go to state 114 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: - yacc.py:2562:state 103 + yacc.py:2562:state 99 yacc.py:2563: yacc.py:2565: (23) def_attr -> id colon error larrow expr . yacc.py:2566: yacc.py:2687: semi reduce using rule 23 (def_attr -> id colon error larrow expr .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 104 + yacc.py:2562:state 100 yacc.py:2563: yacc.py:2565: (25) def_func -> id opar formals cpar colon . type ocur expr ccur yacc.py:2565: (28) def_func -> id opar formals cpar colon . error ocur expr ccur yacc.py:2565: (29) def_func -> id opar formals cpar colon . type ocur error ccur yacc.py:2566: - yacc.py:2687: type shift and go to state 151 - yacc.py:2687: error shift and go to state 152 + yacc.py:2687: type shift and go to state 138 + yacc.py:2687: error shift and go to state 139 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 105 + yacc.py:2562:state 101 yacc.py:2563: yacc.py:2565: (27) def_func -> id opar error cpar colon . type ocur expr ccur yacc.py:2566: - yacc.py:2687: type shift and go to state 153 + yacc.py:2687: type shift and go to state 140 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 106 + yacc.py:2562:state 102 yacc.py:2563: yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list ccur semi . yacc.py:2566: @@ -2890,7 +2374,7 @@ yacc.py:2687: $end reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 107 + yacc.py:2562:state 103 yacc.py:2563: yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list ccur error . yacc.py:2566: @@ -2899,7 +2383,7 @@ yacc.py:2687: $end reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 108 + yacc.py:2562:state 104 yacc.py:2563: yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list ccur semi . yacc.py:2566: @@ -2908,7 +2392,7 @@ yacc.py:2687: $end reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 109 + yacc.py:2562:state 105 yacc.py:2563: yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list ccur semi . yacc.py:2566: @@ -2917,7 +2401,7 @@ yacc.py:2687: $end reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 110 + yacc.py:2562:state 106 yacc.py:2563: yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list ccur semi . yacc.py:2566: @@ -2926,8336 +2410,11467 @@ yacc.py:2687: $end reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 111 + yacc.py:2562:state 107 yacc.py:2563: - yacc.py:2565: (121) block -> error . block - yacc.py:2565: (122) block -> error . semi - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: semi shift and go to state 155 - yacc.py:2687: arroba shift and go to state 112 - yacc.py:2687: opar shift and go to state 115 - yacc.py:2687: error shift and go to state 111 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: block shift and go to state 154 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: expr shift and go to state 113 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (86) block -> error . block + yacc.py:2565: (87) block -> error . semi + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: semi shift and go to state 142 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: block shift and go to state 141 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: - yacc.py:2562:state 112 + yacc.py:2562:state 108 yacc.py:2563: - yacc.py:2565: (74) base_call -> error arroba . type dot func_call + yacc.py:2565: (61) base_call -> error arroba . type dot func_call yacc.py:2566: - yacc.py:2687: type shift and go to state 156 + yacc.py:2687: type shift and go to state 143 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 113 + yacc.py:2562:state 109 yacc.py:2563: - yacc.py:2565: (79) factor -> error expr . cpar - yacc.py:2565: (119) block -> expr . semi - yacc.py:2565: (120) block -> expr . semi block + yacc.py:2565: (78) atom -> error block . ccur yacc.py:2566: - yacc.py:2687: cpar shift and go to state 157 - yacc.py:2687: semi shift and go to state 158 + yacc.py:2687: ccur shift and go to state 144 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 114 + yacc.py:2562:state 110 + yacc.py:2563: + yacc.py:2565: (90) func_call -> error opar . args cpar + yacc.py:2565: (64) factor -> opar . expr cpar + yacc.py:2565: (91) args -> . arg_list + yacc.py:2565: (92) args -> . arg_list_empty + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (96) arg_list_empty -> . epsilon + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 145 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: args shift and go to state 146 + yacc.py:2714: expr shift and go to state 147 + yacc.py:2714: arg_list shift and go to state 148 + yacc.py:2714: arg_list_empty shift and go to state 149 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: epsilon shift and go to state 150 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 111 yacc.py:2563: - yacc.py:2565: (113) atom -> error block . ccur + yacc.py:2565: (84) block -> expr . semi + yacc.py:2565: (85) block -> expr . semi block yacc.py:2566: - yacc.py:2687: ccur shift and go to state 159 + yacc.py:2687: semi shift and go to state 151 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 115 + yacc.py:2562:state 112 yacc.py:2563: - yacc.py:2565: (125) func_call -> error opar . args cpar - yacc.py:2565: (77) factor -> opar . expr cpar - yacc.py:2565: (78) factor -> opar . expr error - yacc.py:2565: (80) factor -> opar . error cpar - yacc.py:2565: (126) args -> . arg_list - yacc.py:2565: (127) args -> . arg_list_empty - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (128) arg_list -> . expr - yacc.py:2565: (129) arg_list -> . expr comma arg_list - yacc.py:2565: (130) arg_list -> . error arg_list - yacc.py:2565: (131) arg_list_empty -> . epsilon - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error + yacc.py:2565: (45) expr -> id larrow . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 152 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 113 + yacc.py:2563: + yacc.py:2565: (88) func_call -> id opar . args cpar + yacc.py:2565: (89) func_call -> id opar . error cpar + yacc.py:2565: (91) args -> . arg_list + yacc.py:2565: (92) args -> . arg_list_empty + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (96) arg_list_empty -> . epsilon + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 160 - yacc.py:2687: id shift and go to state 74 + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 154 + yacc.py:2687: id shift and go to state 72 yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: args shift and go to state 161 - yacc.py:2714: expr shift and go to state 162 - yacc.py:2714: arg_list shift and go to state 163 - yacc.py:2714: arg_list_empty shift and go to state 164 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: epsilon shift and go to state 165 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: args shift and go to state 153 + yacc.py:2714: arg_list shift and go to state 148 + yacc.py:2714: arg_list_empty shift and go to state 149 + yacc.py:2714: expr shift and go to state 155 + yacc.py:2714: epsilon shift and go to state 150 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 114 + yacc.py:2563: + yacc.py:2565: (47) comp -> comp less . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: op shift and go to state 156 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 115 + yacc.py:2563: + yacc.py:2565: (48) comp -> comp lesseq . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: op shift and go to state 157 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 116 yacc.py:2563: - yacc.py:2565: (49) expr -> id larrow . expr - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: error shift and go to state 72 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 166 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (49) comp -> comp equal . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: op shift and go to state 158 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 117 yacc.py:2563: - yacc.py:2565: (123) func_call -> id opar . args cpar - yacc.py:2565: (124) func_call -> id opar . error cpar - yacc.py:2565: (126) args -> . arg_list - yacc.py:2565: (127) args -> . arg_list_empty - yacc.py:2565: (128) arg_list -> . expr - yacc.py:2565: (129) arg_list -> . expr comma arg_list - yacc.py:2565: (130) arg_list -> . error arg_list - yacc.py:2565: (131) arg_list_empty -> . epsilon - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 168 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: args shift and go to state 167 - yacc.py:2714: arg_list shift and go to state 163 - yacc.py:2714: arg_list_empty shift and go to state 164 - yacc.py:2714: expr shift and go to state 169 - yacc.py:2714: epsilon shift and go to state 165 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (51) op -> op plus . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: term shift and go to state 159 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 118 yacc.py:2563: - yacc.py:2565: (51) comp -> comp less . op - yacc.py:2565: (55) comp -> comp less . error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 171 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: id shift and go to state 127 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: op shift and go to state 170 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (52) op -> op minus . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: term shift and go to state 160 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 119 yacc.py:2563: - yacc.py:2565: (52) comp -> comp lesseq . op - yacc.py:2565: (56) comp -> comp lesseq . error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 173 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: id shift and go to state 127 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: op shift and go to state 172 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (54) term -> term star . base_call + yacc.py:2565: (57) term -> term star . error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 162 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 161 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 120 yacc.py:2563: - yacc.py:2565: (53) comp -> comp equal . op - yacc.py:2565: (57) comp -> comp equal . error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 175 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: id shift and go to state 127 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: op shift and go to state 174 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (55) term -> term div . base_call + yacc.py:2565: (58) term -> term div . error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 164 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 163 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 121 yacc.py:2563: - yacc.py:2565: (58) op -> op plus . term - yacc.py:2565: (61) op -> op plus . error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 177 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: id shift and go to state 127 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: term shift and go to state 176 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (59) base_call -> factor arroba . type dot func_call + yacc.py:2565: (62) base_call -> factor arroba . error dot func_call + yacc.py:2566: + yacc.py:2687: type shift and go to state 165 + yacc.py:2687: error shift and go to state 166 + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 122 yacc.py:2563: - yacc.py:2565: (59) op -> op minus . term - yacc.py:2565: (62) op -> op minus . error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 179 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: id shift and go to state 127 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: term shift and go to state 178 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (65) factor -> factor dot . func_call + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 168 + yacc.py:2687: error shift and go to state 169 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 167 yacc.py:2561: yacc.py:2562:state 123 yacc.py:2563: - yacc.py:2565: (63) term -> term star . base_call - yacc.py:2565: (68) term -> term star . error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 181 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: id shift and go to state 127 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: base_call shift and go to state 180 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (64) factor -> opar expr . cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 170 + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 124 yacc.py:2563: - yacc.py:2565: (64) term -> term div . base_call - yacc.py:2565: (69) term -> term div . error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 183 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: id shift and go to state 127 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: base_call shift and go to state 182 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (66) factor -> not expr . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 66 (factor -> not expr .) + yacc.py:2687: dot reduce using rule 66 (factor -> not expr .) + yacc.py:2687: star reduce using rule 66 (factor -> not expr .) + yacc.py:2687: div reduce using rule 66 (factor -> not expr .) + yacc.py:2687: plus reduce using rule 66 (factor -> not expr .) + yacc.py:2687: minus reduce using rule 66 (factor -> not expr .) + yacc.py:2687: less reduce using rule 66 (factor -> not expr .) + yacc.py:2687: lesseq reduce using rule 66 (factor -> not expr .) + yacc.py:2687: equal reduce using rule 66 (factor -> not expr .) + yacc.py:2687: semi reduce using rule 66 (factor -> not expr .) + yacc.py:2687: cpar reduce using rule 66 (factor -> not expr .) + yacc.py:2687: of reduce using rule 66 (factor -> not expr .) + yacc.py:2687: then reduce using rule 66 (factor -> not expr .) + yacc.py:2687: loop reduce using rule 66 (factor -> not expr .) + yacc.py:2687: comma reduce using rule 66 (factor -> not expr .) + yacc.py:2687: in reduce using rule 66 (factor -> not expr .) + yacc.py:2687: else reduce using rule 66 (factor -> not expr .) + yacc.py:2687: pool reduce using rule 66 (factor -> not expr .) + yacc.py:2687: ccur reduce using rule 66 (factor -> not expr .) + yacc.py:2687: fi reduce using rule 66 (factor -> not expr .) + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 125 yacc.py:2563: - yacc.py:2565: (65) term -> isvoid base_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 65 (term -> isvoid base_call .) - yacc.py:2687: div reduce using rule 65 (term -> isvoid base_call .) - yacc.py:2687: plus reduce using rule 65 (term -> isvoid base_call .) - yacc.py:2687: minus reduce using rule 65 (term -> isvoid base_call .) - yacc.py:2687: less reduce using rule 65 (term -> isvoid base_call .) - yacc.py:2687: lesseq reduce using rule 65 (term -> isvoid base_call .) - yacc.py:2687: equal reduce using rule 65 (term -> isvoid base_call .) - yacc.py:2687: semi reduce using rule 65 (term -> isvoid base_call .) - yacc.py:2687: cpar reduce using rule 65 (term -> isvoid base_call .) - yacc.py:2687: error reduce using rule 65 (term -> isvoid base_call .) - yacc.py:2687: arroba reduce using rule 65 (term -> isvoid base_call .) - yacc.py:2687: dot reduce using rule 65 (term -> isvoid base_call .) - yacc.py:2687: of reduce using rule 65 (term -> isvoid base_call .) - yacc.py:2687: then reduce using rule 65 (term -> isvoid base_call .) - yacc.py:2687: loop reduce using rule 65 (term -> isvoid base_call .) - yacc.py:2687: comma reduce using rule 65 (term -> isvoid base_call .) - yacc.py:2687: in reduce using rule 65 (term -> isvoid base_call .) - yacc.py:2687: else reduce using rule 65 (term -> isvoid base_call .) - yacc.py:2687: pool reduce using rule 65 (term -> isvoid base_call .) - yacc.py:2687: ccur reduce using rule 65 (term -> isvoid base_call .) - yacc.py:2687: fi reduce using rule 65 (term -> isvoid base_call .) + yacc.py:2565: (68) factor -> isvoid base_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: dot reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: star reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: div reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: plus reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: minus reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: less reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: lesseq reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: equal reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: semi reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: cpar reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: of reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: then reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: loop reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: comma reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: in reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: else reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: pool reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: ccur reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: fi reduce using rule 68 (factor -> isvoid base_call .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 126 yacc.py:2563: - yacc.py:2565: (70) term -> isvoid error . - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift - yacc.py:2666: ! shift/reduce conflict for error resolved as shift - yacc.py:2687: star reduce using rule 70 (term -> isvoid error .) - yacc.py:2687: div reduce using rule 70 (term -> isvoid error .) - yacc.py:2687: plus reduce using rule 70 (term -> isvoid error .) - yacc.py:2687: minus reduce using rule 70 (term -> isvoid error .) - yacc.py:2687: less reduce using rule 70 (term -> isvoid error .) - yacc.py:2687: lesseq reduce using rule 70 (term -> isvoid error .) - yacc.py:2687: equal reduce using rule 70 (term -> isvoid error .) - yacc.py:2687: semi reduce using rule 70 (term -> isvoid error .) - yacc.py:2687: cpar reduce using rule 70 (term -> isvoid error .) - yacc.py:2687: dot reduce using rule 70 (term -> isvoid error .) - yacc.py:2687: of reduce using rule 70 (term -> isvoid error .) - yacc.py:2687: then reduce using rule 70 (term -> isvoid error .) - yacc.py:2687: loop reduce using rule 70 (term -> isvoid error .) - yacc.py:2687: comma reduce using rule 70 (term -> isvoid error .) - yacc.py:2687: in reduce using rule 70 (term -> isvoid error .) - yacc.py:2687: else reduce using rule 70 (term -> isvoid error .) - yacc.py:2687: pool reduce using rule 70 (term -> isvoid error .) - yacc.py:2687: ccur reduce using rule 70 (term -> isvoid error .) - yacc.py:2687: fi reduce using rule 70 (term -> isvoid error .) - yacc.py:2687: arroba shift and go to state 112 - yacc.py:2687: opar shift and go to state 115 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: error shift and go to state 111 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2696: ! error [ reduce using rule 70 (term -> isvoid error .) ] - yacc.py:2696: ! arroba [ reduce using rule 70 (term -> isvoid error .) ] - yacc.py:2700: - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: expr shift and go to state 113 - yacc.py:2714: block shift and go to state 114 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (75) atom -> id . + yacc.py:2565: (88) func_call -> id . opar args cpar + yacc.py:2565: (89) func_call -> id . opar error cpar + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 75 (atom -> id .) + yacc.py:2687: dot reduce using rule 75 (atom -> id .) + yacc.py:2687: star reduce using rule 75 (atom -> id .) + yacc.py:2687: div reduce using rule 75 (atom -> id .) + yacc.py:2687: plus reduce using rule 75 (atom -> id .) + yacc.py:2687: minus reduce using rule 75 (atom -> id .) + yacc.py:2687: less reduce using rule 75 (atom -> id .) + yacc.py:2687: lesseq reduce using rule 75 (atom -> id .) + yacc.py:2687: equal reduce using rule 75 (atom -> id .) + yacc.py:2687: semi reduce using rule 75 (atom -> id .) + yacc.py:2687: cpar reduce using rule 75 (atom -> id .) + yacc.py:2687: of reduce using rule 75 (atom -> id .) + yacc.py:2687: then reduce using rule 75 (atom -> id .) + yacc.py:2687: loop reduce using rule 75 (atom -> id .) + yacc.py:2687: comma reduce using rule 75 (atom -> id .) + yacc.py:2687: in reduce using rule 75 (atom -> id .) + yacc.py:2687: else reduce using rule 75 (atom -> id .) + yacc.py:2687: pool reduce using rule 75 (atom -> id .) + yacc.py:2687: ccur reduce using rule 75 (atom -> id .) + yacc.py:2687: fi reduce using rule 75 (atom -> id .) + yacc.py:2687: opar shift and go to state 113 + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 127 yacc.py:2563: - yacc.py:2565: (109) atom -> id . - yacc.py:2565: (123) func_call -> id . opar args cpar - yacc.py:2565: (124) func_call -> id . opar error cpar - yacc.py:2566: - yacc.py:2687: star reduce using rule 109 (atom -> id .) - yacc.py:2687: div reduce using rule 109 (atom -> id .) - yacc.py:2687: plus reduce using rule 109 (atom -> id .) - yacc.py:2687: minus reduce using rule 109 (atom -> id .) - yacc.py:2687: less reduce using rule 109 (atom -> id .) - yacc.py:2687: lesseq reduce using rule 109 (atom -> id .) - yacc.py:2687: equal reduce using rule 109 (atom -> id .) - yacc.py:2687: semi reduce using rule 109 (atom -> id .) - yacc.py:2687: cpar reduce using rule 109 (atom -> id .) - yacc.py:2687: error reduce using rule 109 (atom -> id .) - yacc.py:2687: arroba reduce using rule 109 (atom -> id .) - yacc.py:2687: dot reduce using rule 109 (atom -> id .) - yacc.py:2687: of reduce using rule 109 (atom -> id .) - yacc.py:2687: then reduce using rule 109 (atom -> id .) - yacc.py:2687: loop reduce using rule 109 (atom -> id .) - yacc.py:2687: comma reduce using rule 109 (atom -> id .) - yacc.py:2687: in reduce using rule 109 (atom -> id .) - yacc.py:2687: else reduce using rule 109 (atom -> id .) - yacc.py:2687: pool reduce using rule 109 (atom -> id .) - yacc.py:2687: ccur reduce using rule 109 (atom -> id .) - yacc.py:2687: fi reduce using rule 109 (atom -> id .) - yacc.py:2687: opar shift and go to state 117 + yacc.py:2565: (69) factor -> nox base_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: dot reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: star reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: div reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: plus reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: minus reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: less reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: lesseq reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: equal reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: semi reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: cpar reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: of reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: then reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: loop reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: comma reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: in reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: else reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: pool reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: ccur reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: fi reduce using rule 69 (factor -> nox base_call .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 128 yacc.py:2563: - yacc.py:2565: (66) term -> nox base_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 66 (term -> nox base_call .) - yacc.py:2687: div reduce using rule 66 (term -> nox base_call .) - yacc.py:2687: plus reduce using rule 66 (term -> nox base_call .) - yacc.py:2687: minus reduce using rule 66 (term -> nox base_call .) - yacc.py:2687: less reduce using rule 66 (term -> nox base_call .) - yacc.py:2687: lesseq reduce using rule 66 (term -> nox base_call .) - yacc.py:2687: equal reduce using rule 66 (term -> nox base_call .) - yacc.py:2687: semi reduce using rule 66 (term -> nox base_call .) - yacc.py:2687: cpar reduce using rule 66 (term -> nox base_call .) - yacc.py:2687: error reduce using rule 66 (term -> nox base_call .) - yacc.py:2687: arroba reduce using rule 66 (term -> nox base_call .) - yacc.py:2687: dot reduce using rule 66 (term -> nox base_call .) - yacc.py:2687: of reduce using rule 66 (term -> nox base_call .) - yacc.py:2687: then reduce using rule 66 (term -> nox base_call .) - yacc.py:2687: loop reduce using rule 66 (term -> nox base_call .) - yacc.py:2687: comma reduce using rule 66 (term -> nox base_call .) - yacc.py:2687: in reduce using rule 66 (term -> nox base_call .) - yacc.py:2687: else reduce using rule 66 (term -> nox base_call .) - yacc.py:2687: pool reduce using rule 66 (term -> nox base_call .) - yacc.py:2687: ccur reduce using rule 66 (term -> nox base_call .) - yacc.py:2687: fi reduce using rule 66 (term -> nox base_call .) + yacc.py:2565: (70) factor -> let let_list . in expr + yacc.py:2566: + yacc.py:2687: in shift and go to state 171 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 129 yacc.py:2563: - yacc.py:2565: (71) term -> nox error . - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2565: (36) let_list -> let_assign . + yacc.py:2565: (37) let_list -> let_assign . comma let_list yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift - yacc.py:2666: ! shift/reduce conflict for error resolved as shift - yacc.py:2687: star reduce using rule 71 (term -> nox error .) - yacc.py:2687: div reduce using rule 71 (term -> nox error .) - yacc.py:2687: plus reduce using rule 71 (term -> nox error .) - yacc.py:2687: minus reduce using rule 71 (term -> nox error .) - yacc.py:2687: less reduce using rule 71 (term -> nox error .) - yacc.py:2687: lesseq reduce using rule 71 (term -> nox error .) - yacc.py:2687: equal reduce using rule 71 (term -> nox error .) - yacc.py:2687: semi reduce using rule 71 (term -> nox error .) - yacc.py:2687: cpar reduce using rule 71 (term -> nox error .) - yacc.py:2687: dot reduce using rule 71 (term -> nox error .) - yacc.py:2687: of reduce using rule 71 (term -> nox error .) - yacc.py:2687: then reduce using rule 71 (term -> nox error .) - yacc.py:2687: loop reduce using rule 71 (term -> nox error .) - yacc.py:2687: comma reduce using rule 71 (term -> nox error .) - yacc.py:2687: in reduce using rule 71 (term -> nox error .) - yacc.py:2687: else reduce using rule 71 (term -> nox error .) - yacc.py:2687: pool reduce using rule 71 (term -> nox error .) - yacc.py:2687: ccur reduce using rule 71 (term -> nox error .) - yacc.py:2687: fi reduce using rule 71 (term -> nox error .) - yacc.py:2687: arroba shift and go to state 112 - yacc.py:2687: opar shift and go to state 115 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: error shift and go to state 111 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2696: ! error [ reduce using rule 71 (term -> nox error .) ] - yacc.py:2696: ! arroba [ reduce using rule 71 (term -> nox error .) ] - yacc.py:2700: - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: expr shift and go to state 113 - yacc.py:2714: block shift and go to state 114 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2687: in reduce using rule 36 (let_list -> let_assign .) + yacc.py:2687: comma shift and go to state 172 + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 130 yacc.py:2563: - yacc.py:2565: (72) base_call -> factor arroba . type dot func_call - yacc.py:2565: (75) base_call -> factor arroba . error dot func_call + yacc.py:2565: (38) let_assign -> param . larrow expr + yacc.py:2565: (39) let_assign -> param . yacc.py:2566: - yacc.py:2687: type shift and go to state 184 - yacc.py:2687: error shift and go to state 185 + yacc.py:2687: larrow shift and go to state 173 + yacc.py:2687: comma reduce using rule 39 (let_assign -> param .) + yacc.py:2687: in reduce using rule 39 (let_assign -> param .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 131 yacc.py:2563: - yacc.py:2565: (81) factor -> factor dot . func_call - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2565: (71) factor -> case expr . of cases_list esac yacc.py:2566: - yacc.py:2687: id shift and go to state 187 - yacc.py:2687: error shift and go to state 188 + yacc.py:2687: of shift and go to state 174 yacc.py:2689: - yacc.py:2714: func_call shift and go to state 186 yacc.py:2561: yacc.py:2562:state 132 yacc.py:2563: - yacc.py:2565: (77) factor -> opar expr . cpar - yacc.py:2565: (78) factor -> opar expr . error + yacc.py:2565: (72) factor -> if expr . then expr else expr fi yacc.py:2566: - yacc.py:2687: cpar shift and go to state 189 - yacc.py:2687: error shift and go to state 190 + yacc.py:2687: then shift and go to state 175 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 133 yacc.py:2563: - yacc.py:2565: (80) factor -> opar error . cpar - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2565: (73) factor -> while expr . loop expr pool yacc.py:2566: - yacc.py:2687: cpar shift and go to state 191 - yacc.py:2687: arroba shift and go to state 112 - yacc.py:2687: opar shift and go to state 115 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: error shift and go to state 111 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: expr shift and go to state 113 - yacc.py:2714: block shift and go to state 114 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2687: loop shift and go to state 176 + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 134 yacc.py:2563: - yacc.py:2565: (82) factor -> not expr . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 82 (factor -> not expr .) - yacc.py:2687: dot reduce using rule 82 (factor -> not expr .) - yacc.py:2687: star reduce using rule 82 (factor -> not expr .) - yacc.py:2687: div reduce using rule 82 (factor -> not expr .) - yacc.py:2687: plus reduce using rule 82 (factor -> not expr .) - yacc.py:2687: minus reduce using rule 82 (factor -> not expr .) - yacc.py:2687: less reduce using rule 82 (factor -> not expr .) - yacc.py:2687: lesseq reduce using rule 82 (factor -> not expr .) - yacc.py:2687: equal reduce using rule 82 (factor -> not expr .) - yacc.py:2687: semi reduce using rule 82 (factor -> not expr .) - yacc.py:2687: cpar reduce using rule 82 (factor -> not expr .) - yacc.py:2687: error reduce using rule 82 (factor -> not expr .) - yacc.py:2687: of reduce using rule 82 (factor -> not expr .) - yacc.py:2687: then reduce using rule 82 (factor -> not expr .) - yacc.py:2687: loop reduce using rule 82 (factor -> not expr .) - yacc.py:2687: comma reduce using rule 82 (factor -> not expr .) - yacc.py:2687: in reduce using rule 82 (factor -> not expr .) - yacc.py:2687: else reduce using rule 82 (factor -> not expr .) - yacc.py:2687: pool reduce using rule 82 (factor -> not expr .) - yacc.py:2687: ccur reduce using rule 82 (factor -> not expr .) - yacc.py:2687: fi reduce using rule 82 (factor -> not expr .) + yacc.py:2565: (76) atom -> new type . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 76 (atom -> new type .) + yacc.py:2687: dot reduce using rule 76 (atom -> new type .) + yacc.py:2687: star reduce using rule 76 (atom -> new type .) + yacc.py:2687: div reduce using rule 76 (atom -> new type .) + yacc.py:2687: plus reduce using rule 76 (atom -> new type .) + yacc.py:2687: minus reduce using rule 76 (atom -> new type .) + yacc.py:2687: less reduce using rule 76 (atom -> new type .) + yacc.py:2687: lesseq reduce using rule 76 (atom -> new type .) + yacc.py:2687: equal reduce using rule 76 (atom -> new type .) + yacc.py:2687: semi reduce using rule 76 (atom -> new type .) + yacc.py:2687: cpar reduce using rule 76 (atom -> new type .) + yacc.py:2687: of reduce using rule 76 (atom -> new type .) + yacc.py:2687: then reduce using rule 76 (atom -> new type .) + yacc.py:2687: loop reduce using rule 76 (atom -> new type .) + yacc.py:2687: comma reduce using rule 76 (atom -> new type .) + yacc.py:2687: in reduce using rule 76 (atom -> new type .) + yacc.py:2687: else reduce using rule 76 (atom -> new type .) + yacc.py:2687: pool reduce using rule 76 (atom -> new type .) + yacc.py:2687: ccur reduce using rule 76 (atom -> new type .) + yacc.py:2687: fi reduce using rule 76 (atom -> new type .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 135 yacc.py:2563: - yacc.py:2565: (84) factor -> let let_list . in expr - yacc.py:2565: (86) factor -> let let_list . in error - yacc.py:2565: (87) factor -> let let_list . error expr + yacc.py:2565: (77) atom -> ocur block . ccur + yacc.py:2565: (80) atom -> ocur block . error yacc.py:2566: - yacc.py:2687: in shift and go to state 192 - yacc.py:2687: error shift and go to state 193 + yacc.py:2687: ccur shift and go to state 177 + yacc.py:2687: error shift and go to state 178 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 136 yacc.py:2563: - yacc.py:2565: (85) factor -> let error . in expr - yacc.py:2565: (40) let_list -> error . let_list - yacc.py:2565: (41) let_list -> error . - yacc.py:2565: (38) let_list -> . let_assign - yacc.py:2565: (39) let_list -> . let_assign comma let_list - yacc.py:2565: (40) let_list -> . error let_list - yacc.py:2565: (41) let_list -> . error - yacc.py:2565: (42) let_assign -> . param larrow expr - yacc.py:2565: (43) let_assign -> . param - yacc.py:2565: (37) param -> . id colon type - yacc.py:2566: - yacc.py:2609: ! shift/reduce conflict for in resolved as shift - yacc.py:2666: ! shift/reduce conflict for error resolved as shift - yacc.py:2687: in shift and go to state 195 - yacc.py:2687: error shift and go to state 194 - yacc.py:2687: id shift and go to state 47 - yacc.py:2689: - yacc.py:2696: ! in [ reduce using rule 41 (let_list -> error .) ] - yacc.py:2696: ! error [ reduce using rule 41 (let_list -> error .) ] - yacc.py:2700: - yacc.py:2714: let_list shift and go to state 196 - yacc.py:2714: let_assign shift and go to state 137 - yacc.py:2714: param shift and go to state 138 + yacc.py:2565: (79) atom -> ocur error . ccur + yacc.py:2565: (86) block -> error . block + yacc.py:2565: (87) block -> error . semi + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 179 + yacc.py:2687: semi shift and go to state 142 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: block shift and go to state 141 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 137 yacc.py:2563: - yacc.py:2565: (38) let_list -> let_assign . - yacc.py:2565: (39) let_list -> let_assign . comma let_list + yacc.py:2565: (26) def_func -> error opar formals cpar colon type . ocur expr ccur yacc.py:2566: - yacc.py:2687: in reduce using rule 38 (let_list -> let_assign .) - yacc.py:2687: error reduce using rule 38 (let_list -> let_assign .) - yacc.py:2687: comma shift and go to state 197 + yacc.py:2687: ocur shift and go to state 180 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 138 yacc.py:2563: - yacc.py:2565: (42) let_assign -> param . larrow expr - yacc.py:2565: (43) let_assign -> param . + yacc.py:2565: (25) def_func -> id opar formals cpar colon type . ocur expr ccur + yacc.py:2565: (29) def_func -> id opar formals cpar colon type . ocur error ccur yacc.py:2566: - yacc.py:2687: larrow shift and go to state 198 - yacc.py:2687: comma reduce using rule 43 (let_assign -> param .) - yacc.py:2687: in reduce using rule 43 (let_assign -> param .) - yacc.py:2687: error reduce using rule 43 (let_assign -> param .) + yacc.py:2687: ocur shift and go to state 181 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 139 yacc.py:2563: - yacc.py:2565: (88) factor -> case expr . of cases_list esac - yacc.py:2565: (90) factor -> case expr . of error esac - yacc.py:2565: (91) factor -> case expr . error cases_list esac - yacc.py:2565: (92) factor -> case expr . of cases_list error + yacc.py:2565: (28) def_func -> id opar formals cpar colon error . ocur expr ccur yacc.py:2566: - yacc.py:2687: of shift and go to state 199 - yacc.py:2687: error shift and go to state 200 + yacc.py:2687: ocur shift and go to state 182 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 140 yacc.py:2563: - yacc.py:2565: (89) factor -> case error . of cases_list esac - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: of shift and go to state 201 - yacc.py:2687: arroba shift and go to state 112 - yacc.py:2687: opar shift and go to state 115 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: error shift and go to state 111 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: expr shift and go to state 113 - yacc.py:2714: block shift and go to state 114 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (27) def_func -> id opar error cpar colon type . ocur expr ccur + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 183 + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 141 yacc.py:2563: - yacc.py:2565: (93) factor -> if expr . then expr else expr fi - yacc.py:2565: (95) factor -> if expr . then error else expr fi - yacc.py:2565: (96) factor -> if expr . then expr else error fi - yacc.py:2565: (97) factor -> if expr . error expr else expr fi - yacc.py:2565: (98) factor -> if expr . then expr error error expr fi - yacc.py:2565: (99) factor -> if expr . then expr error expr fi - yacc.py:2565: (100) factor -> if expr . then expr else expr error + yacc.py:2565: (86) block -> error block . + yacc.py:2565: (78) atom -> error block . ccur yacc.py:2566: - yacc.py:2687: then shift and go to state 202 - yacc.py:2687: error shift and go to state 203 + yacc.py:2666: ! shift/reduce conflict for ccur resolved as shift + yacc.py:2687: error reduce using rule 86 (block -> error block .) + yacc.py:2687: ccur shift and go to state 144 yacc.py:2689: + yacc.py:2696: ! ccur [ reduce using rule 86 (block -> error block .) ] + yacc.py:2700: yacc.py:2561: yacc.py:2562:state 142 yacc.py:2563: - yacc.py:2565: (94) factor -> if error . then expr else expr fi - yacc.py:2565: (101) factor -> if error . fi - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: then shift and go to state 204 - yacc.py:2687: fi shift and go to state 205 - yacc.py:2687: arroba shift and go to state 112 - yacc.py:2687: opar shift and go to state 115 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: error shift and go to state 111 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 113 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: block shift and go to state 114 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (87) block -> error semi . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 87 (block -> error semi .) + yacc.py:2687: error reduce using rule 87 (block -> error semi .) + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 143 yacc.py:2563: - yacc.py:2565: (102) factor -> while expr . loop expr pool - yacc.py:2565: (104) factor -> while expr . loop error pool - yacc.py:2565: (105) factor -> while expr . loop expr error - yacc.py:2565: (106) factor -> while expr . error expr loop expr pool - yacc.py:2565: (107) factor -> while expr . error expr pool + yacc.py:2565: (61) base_call -> error arroba type . dot func_call yacc.py:2566: - yacc.py:2687: loop shift and go to state 206 - yacc.py:2687: error shift and go to state 207 + yacc.py:2687: dot shift and go to state 184 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 144 yacc.py:2563: - yacc.py:2565: (103) factor -> while error . loop expr pool - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: loop shift and go to state 208 - yacc.py:2687: arroba shift and go to state 112 - yacc.py:2687: opar shift and go to state 115 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: error shift and go to state 111 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 113 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: block shift and go to state 114 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (78) atom -> error block ccur . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: dot reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: star reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: div reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: plus reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: minus reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: less reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: lesseq reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: equal reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: semi reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: cpar reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: of reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: then reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: loop reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: comma reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: in reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: else reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: pool reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: ccur reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: fi reduce using rule 78 (atom -> error block ccur .) + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 145 yacc.py:2563: - yacc.py:2565: (110) atom -> new type . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 110 (atom -> new type .) - yacc.py:2687: dot reduce using rule 110 (atom -> new type .) - yacc.py:2687: star reduce using rule 110 (atom -> new type .) - yacc.py:2687: div reduce using rule 110 (atom -> new type .) - yacc.py:2687: plus reduce using rule 110 (atom -> new type .) - yacc.py:2687: minus reduce using rule 110 (atom -> new type .) - yacc.py:2687: less reduce using rule 110 (atom -> new type .) - yacc.py:2687: lesseq reduce using rule 110 (atom -> new type .) - yacc.py:2687: equal reduce using rule 110 (atom -> new type .) - yacc.py:2687: semi reduce using rule 110 (atom -> new type .) - yacc.py:2687: cpar reduce using rule 110 (atom -> new type .) - yacc.py:2687: error reduce using rule 110 (atom -> new type .) - yacc.py:2687: of reduce using rule 110 (atom -> new type .) - yacc.py:2687: then reduce using rule 110 (atom -> new type .) - yacc.py:2687: loop reduce using rule 110 (atom -> new type .) - yacc.py:2687: comma reduce using rule 110 (atom -> new type .) - yacc.py:2687: in reduce using rule 110 (atom -> new type .) - yacc.py:2687: else reduce using rule 110 (atom -> new type .) - yacc.py:2687: pool reduce using rule 110 (atom -> new type .) - yacc.py:2687: ccur reduce using rule 110 (atom -> new type .) - yacc.py:2687: fi reduce using rule 110 (atom -> new type .) - yacc.py:2689: + yacc.py:2565: (95) arg_list -> error . arg_list + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 185 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: arg_list shift and go to state 186 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 187 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 146 yacc.py:2563: - yacc.py:2565: (111) atom -> new error . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 111 (atom -> new error .) - yacc.py:2687: dot reduce using rule 111 (atom -> new error .) - yacc.py:2687: star reduce using rule 111 (atom -> new error .) - yacc.py:2687: div reduce using rule 111 (atom -> new error .) - yacc.py:2687: plus reduce using rule 111 (atom -> new error .) - yacc.py:2687: minus reduce using rule 111 (atom -> new error .) - yacc.py:2687: less reduce using rule 111 (atom -> new error .) - yacc.py:2687: lesseq reduce using rule 111 (atom -> new error .) - yacc.py:2687: equal reduce using rule 111 (atom -> new error .) - yacc.py:2687: semi reduce using rule 111 (atom -> new error .) - yacc.py:2687: cpar reduce using rule 111 (atom -> new error .) - yacc.py:2687: error reduce using rule 111 (atom -> new error .) - yacc.py:2687: of reduce using rule 111 (atom -> new error .) - yacc.py:2687: then reduce using rule 111 (atom -> new error .) - yacc.py:2687: loop reduce using rule 111 (atom -> new error .) - yacc.py:2687: comma reduce using rule 111 (atom -> new error .) - yacc.py:2687: in reduce using rule 111 (atom -> new error .) - yacc.py:2687: else reduce using rule 111 (atom -> new error .) - yacc.py:2687: pool reduce using rule 111 (atom -> new error .) - yacc.py:2687: ccur reduce using rule 111 (atom -> new error .) - yacc.py:2687: fi reduce using rule 111 (atom -> new error .) + yacc.py:2565: (90) func_call -> error opar args . cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 188 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 147 yacc.py:2563: - yacc.py:2565: (112) atom -> ocur block . ccur - yacc.py:2565: (115) atom -> ocur block . error + yacc.py:2565: (64) factor -> opar expr . cpar + yacc.py:2565: (93) arg_list -> expr . + yacc.py:2565: (94) arg_list -> expr . comma arg_list yacc.py:2566: - yacc.py:2687: ccur shift and go to state 209 - yacc.py:2687: error shift and go to state 210 + yacc.py:2609: ! shift/reduce conflict for cpar resolved as shift + yacc.py:2687: cpar shift and go to state 170 + yacc.py:2687: comma shift and go to state 189 yacc.py:2689: + yacc.py:2696: ! cpar [ reduce using rule 93 (arg_list -> expr .) ] + yacc.py:2700: yacc.py:2561: yacc.py:2562:state 148 yacc.py:2563: - yacc.py:2565: (114) atom -> ocur error . ccur - yacc.py:2565: (121) block -> error . block - yacc.py:2565: (122) block -> error . semi - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 211 - yacc.py:2687: semi shift and go to state 155 - yacc.py:2687: arroba shift and go to state 112 - yacc.py:2687: opar shift and go to state 115 - yacc.py:2687: error shift and go to state 111 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: block shift and go to state 154 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: expr shift and go to state 113 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (91) args -> arg_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 91 (args -> arg_list .) + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 149 yacc.py:2563: - yacc.py:2565: (119) block -> expr . semi - yacc.py:2565: (120) block -> expr . semi block + yacc.py:2565: (92) args -> arg_list_empty . yacc.py:2566: - yacc.py:2687: semi shift and go to state 158 + yacc.py:2687: cpar reduce using rule 92 (args -> arg_list_empty .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 150 yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon type . ocur expr ccur + yacc.py:2565: (96) arg_list_empty -> epsilon . yacc.py:2566: - yacc.py:2687: ocur shift and go to state 212 + yacc.py:2687: cpar reduce using rule 96 (arg_list_empty -> epsilon .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 151 yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon type . ocur expr ccur - yacc.py:2565: (29) def_func -> id opar formals cpar colon type . ocur error ccur + yacc.py:2565: (84) block -> expr semi . + yacc.py:2565: (85) block -> expr semi . block + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar yacc.py:2566: - yacc.py:2687: ocur shift and go to state 213 - yacc.py:2689: + yacc.py:2666: ! shift/reduce conflict for error resolved as shift + yacc.py:2687: ccur reduce using rule 84 (block -> expr semi .) + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2696: ! error [ reduce using rule 84 (block -> expr semi .) ] + yacc.py:2700: + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: block shift and go to state 190 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 152 yacc.py:2563: - yacc.py:2565: (28) def_func -> id opar formals cpar colon error . ocur expr ccur - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 214 + yacc.py:2565: (45) expr -> id larrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: cpar reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: arroba reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: dot reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: star reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: div reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: plus reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: minus reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: less reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: lesseq reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: equal reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: of reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: then reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: loop reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: comma reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: in reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: else reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: pool reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: ccur reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: fi reduce using rule 45 (expr -> id larrow expr .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 153 yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon type . ocur expr ccur + yacc.py:2565: (88) func_call -> id opar args . cpar yacc.py:2566: - yacc.py:2687: ocur shift and go to state 215 + yacc.py:2687: cpar shift and go to state 191 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 154 yacc.py:2563: - yacc.py:2565: (121) block -> error block . - yacc.py:2565: (113) atom -> error block . ccur - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for ccur resolved as shift - yacc.py:2687: error reduce using rule 121 (block -> error block .) - yacc.py:2687: ccur shift and go to state 159 - yacc.py:2689: - yacc.py:2696: ! ccur [ reduce using rule 121 (block -> error block .) ] - yacc.py:2700: + yacc.py:2565: (89) func_call -> id opar error . cpar + yacc.py:2565: (95) arg_list -> error . arg_list + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 192 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 185 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: arg_list shift and go to state 186 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 187 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 155 yacc.py:2563: - yacc.py:2565: (122) block -> error semi . + yacc.py:2565: (93) arg_list -> expr . + yacc.py:2565: (94) arg_list -> expr . comma arg_list yacc.py:2566: - yacc.py:2687: ccur reduce using rule 122 (block -> error semi .) - yacc.py:2687: error reduce using rule 122 (block -> error semi .) + yacc.py:2687: cpar reduce using rule 93 (arg_list -> expr .) + yacc.py:2687: comma shift and go to state 189 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 156 yacc.py:2563: - yacc.py:2565: (74) base_call -> error arroba type . dot func_call + yacc.py:2565: (47) comp -> comp less op . + yacc.py:2565: (51) op -> op . plus term + yacc.py:2565: (52) op -> op . minus term yacc.py:2566: - yacc.py:2687: dot shift and go to state 216 - yacc.py:2689: + yacc.py:2666: ! shift/reduce conflict for plus resolved as shift + yacc.py:2666: ! shift/reduce conflict for minus resolved as shift + yacc.py:2687: less reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: lesseq reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: equal reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: semi reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: cpar reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: arroba reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: dot reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: star reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: div reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: of reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: then reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: loop reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: comma reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: in reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: else reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: pool reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: ccur reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: fi reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: plus shift and go to state 117 + yacc.py:2687: minus shift and go to state 118 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 47 (comp -> comp less op .) ] + yacc.py:2696: ! minus [ reduce using rule 47 (comp -> comp less op .) ] + yacc.py:2700: yacc.py:2561: yacc.py:2562:state 157 yacc.py:2563: - yacc.py:2565: (79) factor -> error expr cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 79 (factor -> error expr cpar .) - yacc.py:2687: dot reduce using rule 79 (factor -> error expr cpar .) - yacc.py:2687: star reduce using rule 79 (factor -> error expr cpar .) - yacc.py:2687: div reduce using rule 79 (factor -> error expr cpar .) - yacc.py:2687: plus reduce using rule 79 (factor -> error expr cpar .) - yacc.py:2687: minus reduce using rule 79 (factor -> error expr cpar .) - yacc.py:2687: less reduce using rule 79 (factor -> error expr cpar .) - yacc.py:2687: lesseq reduce using rule 79 (factor -> error expr cpar .) - yacc.py:2687: equal reduce using rule 79 (factor -> error expr cpar .) - yacc.py:2687: semi reduce using rule 79 (factor -> error expr cpar .) - yacc.py:2687: cpar reduce using rule 79 (factor -> error expr cpar .) - yacc.py:2687: error reduce using rule 79 (factor -> error expr cpar .) - yacc.py:2687: of reduce using rule 79 (factor -> error expr cpar .) - yacc.py:2687: then reduce using rule 79 (factor -> error expr cpar .) - yacc.py:2687: loop reduce using rule 79 (factor -> error expr cpar .) - yacc.py:2687: comma reduce using rule 79 (factor -> error expr cpar .) - yacc.py:2687: in reduce using rule 79 (factor -> error expr cpar .) - yacc.py:2687: else reduce using rule 79 (factor -> error expr cpar .) - yacc.py:2687: pool reduce using rule 79 (factor -> error expr cpar .) - yacc.py:2687: ccur reduce using rule 79 (factor -> error expr cpar .) - yacc.py:2687: fi reduce using rule 79 (factor -> error expr cpar .) - yacc.py:2689: + yacc.py:2565: (48) comp -> comp lesseq op . + yacc.py:2565: (51) op -> op . plus term + yacc.py:2565: (52) op -> op . minus term + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for plus resolved as shift + yacc.py:2666: ! shift/reduce conflict for minus resolved as shift + yacc.py:2687: less reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: lesseq reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: equal reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: semi reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: cpar reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: arroba reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: dot reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: star reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: div reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: of reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: then reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: loop reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: comma reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: in reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: else reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: pool reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: ccur reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: fi reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: plus shift and go to state 117 + yacc.py:2687: minus shift and go to state 118 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 48 (comp -> comp lesseq op .) ] + yacc.py:2696: ! minus [ reduce using rule 48 (comp -> comp lesseq op .) ] + yacc.py:2700: yacc.py:2561: yacc.py:2562:state 158 yacc.py:2563: - yacc.py:2565: (119) block -> expr semi . - yacc.py:2565: (120) block -> expr semi . block - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2565: (49) comp -> comp equal op . + yacc.py:2565: (51) op -> op . plus term + yacc.py:2565: (52) op -> op . minus term yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for error resolved as shift - yacc.py:2687: ccur reduce using rule 119 (block -> expr semi .) - yacc.py:2687: error shift and go to state 111 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2696: ! error [ reduce using rule 119 (block -> expr semi .) ] + yacc.py:2666: ! shift/reduce conflict for plus resolved as shift + yacc.py:2666: ! shift/reduce conflict for minus resolved as shift + yacc.py:2687: less reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: lesseq reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: equal reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: semi reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: cpar reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: arroba reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: dot reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: star reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: div reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: of reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: then reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: loop reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: comma reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: in reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: else reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: pool reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: ccur reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: fi reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: plus shift and go to state 117 + yacc.py:2687: minus shift and go to state 118 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 49 (comp -> comp equal op .) ] + yacc.py:2696: ! minus [ reduce using rule 49 (comp -> comp equal op .) ] yacc.py:2700: - yacc.py:2714: expr shift and go to state 149 - yacc.py:2714: block shift and go to state 217 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 159 yacc.py:2563: - yacc.py:2565: (113) atom -> error block ccur . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 113 (atom -> error block ccur .) - yacc.py:2687: dot reduce using rule 113 (atom -> error block ccur .) - yacc.py:2687: star reduce using rule 113 (atom -> error block ccur .) - yacc.py:2687: div reduce using rule 113 (atom -> error block ccur .) - yacc.py:2687: plus reduce using rule 113 (atom -> error block ccur .) - yacc.py:2687: minus reduce using rule 113 (atom -> error block ccur .) - yacc.py:2687: less reduce using rule 113 (atom -> error block ccur .) - yacc.py:2687: lesseq reduce using rule 113 (atom -> error block ccur .) - yacc.py:2687: equal reduce using rule 113 (atom -> error block ccur .) - yacc.py:2687: semi reduce using rule 113 (atom -> error block ccur .) - yacc.py:2687: cpar reduce using rule 113 (atom -> error block ccur .) - yacc.py:2687: error reduce using rule 113 (atom -> error block ccur .) - yacc.py:2687: of reduce using rule 113 (atom -> error block ccur .) - yacc.py:2687: then reduce using rule 113 (atom -> error block ccur .) - yacc.py:2687: loop reduce using rule 113 (atom -> error block ccur .) - yacc.py:2687: comma reduce using rule 113 (atom -> error block ccur .) - yacc.py:2687: in reduce using rule 113 (atom -> error block ccur .) - yacc.py:2687: else reduce using rule 113 (atom -> error block ccur .) - yacc.py:2687: pool reduce using rule 113 (atom -> error block ccur .) - yacc.py:2687: ccur reduce using rule 113 (atom -> error block ccur .) - yacc.py:2687: fi reduce using rule 113 (atom -> error block ccur .) - yacc.py:2689: + yacc.py:2565: (51) op -> op plus term . + yacc.py:2565: (54) term -> term . star base_call + yacc.py:2565: (55) term -> term . div base_call + yacc.py:2565: (57) term -> term . star error + yacc.py:2565: (58) term -> term . div error + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for star resolved as shift + yacc.py:2666: ! shift/reduce conflict for div resolved as shift + yacc.py:2687: plus reduce using rule 51 (op -> op plus term .) + yacc.py:2687: minus reduce using rule 51 (op -> op plus term .) + yacc.py:2687: less reduce using rule 51 (op -> op plus term .) + yacc.py:2687: lesseq reduce using rule 51 (op -> op plus term .) + yacc.py:2687: equal reduce using rule 51 (op -> op plus term .) + yacc.py:2687: semi reduce using rule 51 (op -> op plus term .) + yacc.py:2687: cpar reduce using rule 51 (op -> op plus term .) + yacc.py:2687: arroba reduce using rule 51 (op -> op plus term .) + yacc.py:2687: dot reduce using rule 51 (op -> op plus term .) + yacc.py:2687: of reduce using rule 51 (op -> op plus term .) + yacc.py:2687: then reduce using rule 51 (op -> op plus term .) + yacc.py:2687: loop reduce using rule 51 (op -> op plus term .) + yacc.py:2687: comma reduce using rule 51 (op -> op plus term .) + yacc.py:2687: in reduce using rule 51 (op -> op plus term .) + yacc.py:2687: else reduce using rule 51 (op -> op plus term .) + yacc.py:2687: pool reduce using rule 51 (op -> op plus term .) + yacc.py:2687: ccur reduce using rule 51 (op -> op plus term .) + yacc.py:2687: fi reduce using rule 51 (op -> op plus term .) + yacc.py:2687: star shift and go to state 119 + yacc.py:2687: div shift and go to state 120 + yacc.py:2689: + yacc.py:2696: ! star [ reduce using rule 51 (op -> op plus term .) ] + yacc.py:2696: ! div [ reduce using rule 51 (op -> op plus term .) ] + yacc.py:2700: yacc.py:2561: yacc.py:2562:state 160 yacc.py:2563: - yacc.py:2565: (80) factor -> opar error . cpar - yacc.py:2565: (130) arg_list -> error . arg_list - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (128) arg_list -> . expr - yacc.py:2565: (129) arg_list -> . expr comma arg_list - yacc.py:2565: (130) arg_list -> . error arg_list - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2565: (52) op -> op minus term . + yacc.py:2565: (54) term -> term . star base_call + yacc.py:2565: (55) term -> term . div base_call + yacc.py:2565: (57) term -> term . star error + yacc.py:2565: (58) term -> term . div error yacc.py:2566: - yacc.py:2687: cpar shift and go to state 191 - yacc.py:2687: arroba shift and go to state 112 - yacc.py:2687: opar shift and go to state 115 - yacc.py:2687: error shift and go to state 218 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: arg_list shift and go to state 219 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: expr shift and go to state 220 - yacc.py:2714: block shift and go to state 114 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2666: ! shift/reduce conflict for star resolved as shift + yacc.py:2666: ! shift/reduce conflict for div resolved as shift + yacc.py:2687: plus reduce using rule 52 (op -> op minus term .) + yacc.py:2687: minus reduce using rule 52 (op -> op minus term .) + yacc.py:2687: less reduce using rule 52 (op -> op minus term .) + yacc.py:2687: lesseq reduce using rule 52 (op -> op minus term .) + yacc.py:2687: equal reduce using rule 52 (op -> op minus term .) + yacc.py:2687: semi reduce using rule 52 (op -> op minus term .) + yacc.py:2687: cpar reduce using rule 52 (op -> op minus term .) + yacc.py:2687: arroba reduce using rule 52 (op -> op minus term .) + yacc.py:2687: dot reduce using rule 52 (op -> op minus term .) + yacc.py:2687: of reduce using rule 52 (op -> op minus term .) + yacc.py:2687: then reduce using rule 52 (op -> op minus term .) + yacc.py:2687: loop reduce using rule 52 (op -> op minus term .) + yacc.py:2687: comma reduce using rule 52 (op -> op minus term .) + yacc.py:2687: in reduce using rule 52 (op -> op minus term .) + yacc.py:2687: else reduce using rule 52 (op -> op minus term .) + yacc.py:2687: pool reduce using rule 52 (op -> op minus term .) + yacc.py:2687: ccur reduce using rule 52 (op -> op minus term .) + yacc.py:2687: fi reduce using rule 52 (op -> op minus term .) + yacc.py:2687: star shift and go to state 119 + yacc.py:2687: div shift and go to state 120 + yacc.py:2689: + yacc.py:2696: ! star [ reduce using rule 52 (op -> op minus term .) ] + yacc.py:2696: ! div [ reduce using rule 52 (op -> op minus term .) ] + yacc.py:2700: yacc.py:2561: yacc.py:2562:state 161 yacc.py:2563: - yacc.py:2565: (125) func_call -> error opar args . cpar - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 221 + yacc.py:2565: (54) term -> term star base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: div reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: plus reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: minus reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: less reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: lesseq reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: equal reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: semi reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: cpar reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: arroba reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: dot reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: of reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: then reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: loop reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: comma reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: in reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: else reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: pool reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: ccur reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: fi reduce using rule 54 (term -> term star base_call .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 162 yacc.py:2563: - yacc.py:2565: (77) factor -> opar expr . cpar - yacc.py:2565: (78) factor -> opar expr . error - yacc.py:2565: (128) arg_list -> expr . - yacc.py:2565: (129) arg_list -> expr . comma arg_list + yacc.py:2565: (57) term -> term star error . + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar yacc.py:2566: - yacc.py:2609: ! shift/reduce conflict for cpar resolved as shift - yacc.py:2687: cpar shift and go to state 189 - yacc.py:2687: error shift and go to state 190 - yacc.py:2687: comma shift and go to state 222 - yacc.py:2689: - yacc.py:2696: ! cpar [ reduce using rule 128 (arg_list -> expr .) ] + yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2687: star reduce using rule 57 (term -> term star error .) + yacc.py:2687: div reduce using rule 57 (term -> term star error .) + yacc.py:2687: plus reduce using rule 57 (term -> term star error .) + yacc.py:2687: minus reduce using rule 57 (term -> term star error .) + yacc.py:2687: less reduce using rule 57 (term -> term star error .) + yacc.py:2687: lesseq reduce using rule 57 (term -> term star error .) + yacc.py:2687: equal reduce using rule 57 (term -> term star error .) + yacc.py:2687: semi reduce using rule 57 (term -> term star error .) + yacc.py:2687: cpar reduce using rule 57 (term -> term star error .) + yacc.py:2687: dot reduce using rule 57 (term -> term star error .) + yacc.py:2687: of reduce using rule 57 (term -> term star error .) + yacc.py:2687: then reduce using rule 57 (term -> term star error .) + yacc.py:2687: loop reduce using rule 57 (term -> term star error .) + yacc.py:2687: comma reduce using rule 57 (term -> term star error .) + yacc.py:2687: in reduce using rule 57 (term -> term star error .) + yacc.py:2687: else reduce using rule 57 (term -> term star error .) + yacc.py:2687: pool reduce using rule 57 (term -> term star error .) + yacc.py:2687: ccur reduce using rule 57 (term -> term star error .) + yacc.py:2687: fi reduce using rule 57 (term -> term star error .) + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2696: ! arroba [ reduce using rule 57 (term -> term star error .) ] yacc.py:2700: + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 163 yacc.py:2563: - yacc.py:2565: (126) args -> arg_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 126 (args -> arg_list .) + yacc.py:2565: (55) term -> term div base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: div reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: plus reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: minus reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: less reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: lesseq reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: equal reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: semi reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: cpar reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: arroba reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: dot reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: of reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: then reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: loop reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: comma reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: in reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: else reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: pool reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: ccur reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: fi reduce using rule 55 (term -> term div base_call .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 164 yacc.py:2563: - yacc.py:2565: (127) args -> arg_list_empty . + yacc.py:2565: (58) term -> term div error . + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar yacc.py:2566: - yacc.py:2687: cpar reduce using rule 127 (args -> arg_list_empty .) - yacc.py:2689: + yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2687: star reduce using rule 58 (term -> term div error .) + yacc.py:2687: div reduce using rule 58 (term -> term div error .) + yacc.py:2687: plus reduce using rule 58 (term -> term div error .) + yacc.py:2687: minus reduce using rule 58 (term -> term div error .) + yacc.py:2687: less reduce using rule 58 (term -> term div error .) + yacc.py:2687: lesseq reduce using rule 58 (term -> term div error .) + yacc.py:2687: equal reduce using rule 58 (term -> term div error .) + yacc.py:2687: semi reduce using rule 58 (term -> term div error .) + yacc.py:2687: cpar reduce using rule 58 (term -> term div error .) + yacc.py:2687: dot reduce using rule 58 (term -> term div error .) + yacc.py:2687: of reduce using rule 58 (term -> term div error .) + yacc.py:2687: then reduce using rule 58 (term -> term div error .) + yacc.py:2687: loop reduce using rule 58 (term -> term div error .) + yacc.py:2687: comma reduce using rule 58 (term -> term div error .) + yacc.py:2687: in reduce using rule 58 (term -> term div error .) + yacc.py:2687: else reduce using rule 58 (term -> term div error .) + yacc.py:2687: pool reduce using rule 58 (term -> term div error .) + yacc.py:2687: ccur reduce using rule 58 (term -> term div error .) + yacc.py:2687: fi reduce using rule 58 (term -> term div error .) + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2696: ! arroba [ reduce using rule 58 (term -> term div error .) ] + yacc.py:2700: + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 165 yacc.py:2563: - yacc.py:2565: (131) arg_list_empty -> epsilon . + yacc.py:2565: (59) base_call -> factor arroba type . dot func_call yacc.py:2566: - yacc.py:2687: cpar reduce using rule 131 (arg_list_empty -> epsilon .) + yacc.py:2687: dot shift and go to state 193 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 166 yacc.py:2563: - yacc.py:2565: (49) expr -> id larrow expr . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 49 (expr -> id larrow expr .) - yacc.py:2687: cpar reduce using rule 49 (expr -> id larrow expr .) - yacc.py:2687: error reduce using rule 49 (expr -> id larrow expr .) - yacc.py:2687: star reduce using rule 49 (expr -> id larrow expr .) - yacc.py:2687: div reduce using rule 49 (expr -> id larrow expr .) - yacc.py:2687: plus reduce using rule 49 (expr -> id larrow expr .) - yacc.py:2687: minus reduce using rule 49 (expr -> id larrow expr .) - yacc.py:2687: less reduce using rule 49 (expr -> id larrow expr .) - yacc.py:2687: lesseq reduce using rule 49 (expr -> id larrow expr .) - yacc.py:2687: equal reduce using rule 49 (expr -> id larrow expr .) - yacc.py:2687: arroba reduce using rule 49 (expr -> id larrow expr .) - yacc.py:2687: dot reduce using rule 49 (expr -> id larrow expr .) - yacc.py:2687: of reduce using rule 49 (expr -> id larrow expr .) - yacc.py:2687: then reduce using rule 49 (expr -> id larrow expr .) - yacc.py:2687: loop reduce using rule 49 (expr -> id larrow expr .) - yacc.py:2687: comma reduce using rule 49 (expr -> id larrow expr .) - yacc.py:2687: in reduce using rule 49 (expr -> id larrow expr .) - yacc.py:2687: else reduce using rule 49 (expr -> id larrow expr .) - yacc.py:2687: pool reduce using rule 49 (expr -> id larrow expr .) - yacc.py:2687: ccur reduce using rule 49 (expr -> id larrow expr .) - yacc.py:2687: fi reduce using rule 49 (expr -> id larrow expr .) + yacc.py:2565: (62) base_call -> factor arroba error . dot func_call + yacc.py:2566: + yacc.py:2687: dot shift and go to state 194 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 167 yacc.py:2563: - yacc.py:2565: (123) func_call -> id opar args . cpar - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 223 + yacc.py:2565: (65) factor -> factor dot func_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: dot reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: star reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: div reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: plus reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: minus reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: less reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: lesseq reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: equal reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: semi reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: cpar reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: of reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: then reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: loop reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: comma reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: in reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: else reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: pool reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: ccur reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: fi reduce using rule 65 (factor -> factor dot func_call .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 168 yacc.py:2563: - yacc.py:2565: (124) func_call -> id opar error . cpar - yacc.py:2565: (130) arg_list -> error . arg_list - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (128) arg_list -> . expr - yacc.py:2565: (129) arg_list -> . expr comma arg_list - yacc.py:2565: (130) arg_list -> . error arg_list - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 224 - yacc.py:2687: arroba shift and go to state 112 - yacc.py:2687: opar shift and go to state 115 - yacc.py:2687: error shift and go to state 218 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: arg_list shift and go to state 219 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: expr shift and go to state 220 - yacc.py:2714: block shift and go to state 114 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (88) func_call -> id . opar args cpar + yacc.py:2565: (89) func_call -> id . opar error cpar + yacc.py:2566: + yacc.py:2687: opar shift and go to state 113 + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 169 yacc.py:2563: - yacc.py:2565: (128) arg_list -> expr . - yacc.py:2565: (129) arg_list -> expr . comma arg_list + yacc.py:2565: (90) func_call -> error . opar args cpar yacc.py:2566: - yacc.py:2687: cpar reduce using rule 128 (arg_list -> expr .) - yacc.py:2687: comma shift and go to state 222 + yacc.py:2687: opar shift and go to state 195 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 170 yacc.py:2563: - yacc.py:2565: (51) comp -> comp less op . - yacc.py:2565: (58) op -> op . plus term - yacc.py:2565: (59) op -> op . minus term - yacc.py:2565: (61) op -> op . plus error - yacc.py:2565: (62) op -> op . minus error - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for plus resolved as shift - yacc.py:2666: ! shift/reduce conflict for minus resolved as shift - yacc.py:2687: less reduce using rule 51 (comp -> comp less op .) - yacc.py:2687: lesseq reduce using rule 51 (comp -> comp less op .) - yacc.py:2687: equal reduce using rule 51 (comp -> comp less op .) - yacc.py:2687: semi reduce using rule 51 (comp -> comp less op .) - yacc.py:2687: cpar reduce using rule 51 (comp -> comp less op .) - yacc.py:2687: error reduce using rule 51 (comp -> comp less op .) - yacc.py:2687: star reduce using rule 51 (comp -> comp less op .) - yacc.py:2687: div reduce using rule 51 (comp -> comp less op .) - yacc.py:2687: arroba reduce using rule 51 (comp -> comp less op .) - yacc.py:2687: dot reduce using rule 51 (comp -> comp less op .) - yacc.py:2687: of reduce using rule 51 (comp -> comp less op .) - yacc.py:2687: then reduce using rule 51 (comp -> comp less op .) - yacc.py:2687: loop reduce using rule 51 (comp -> comp less op .) - yacc.py:2687: comma reduce using rule 51 (comp -> comp less op .) - yacc.py:2687: in reduce using rule 51 (comp -> comp less op .) - yacc.py:2687: else reduce using rule 51 (comp -> comp less op .) - yacc.py:2687: pool reduce using rule 51 (comp -> comp less op .) - yacc.py:2687: ccur reduce using rule 51 (comp -> comp less op .) - yacc.py:2687: fi reduce using rule 51 (comp -> comp less op .) - yacc.py:2687: plus shift and go to state 121 - yacc.py:2687: minus shift and go to state 122 - yacc.py:2689: - yacc.py:2696: ! plus [ reduce using rule 51 (comp -> comp less op .) ] - yacc.py:2696: ! minus [ reduce using rule 51 (comp -> comp less op .) ] - yacc.py:2700: + yacc.py:2565: (64) factor -> opar expr cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: dot reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: star reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: div reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: plus reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: minus reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: less reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: lesseq reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: equal reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: semi reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: cpar reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: of reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: then reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: loop reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: comma reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: in reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: else reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: pool reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: ccur reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: fi reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 171 yacc.py:2563: - yacc.py:2565: (55) comp -> comp less error . - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift - yacc.py:2666: ! shift/reduce conflict for error resolved as shift - yacc.py:2687: less reduce using rule 55 (comp -> comp less error .) - yacc.py:2687: lesseq reduce using rule 55 (comp -> comp less error .) - yacc.py:2687: equal reduce using rule 55 (comp -> comp less error .) - yacc.py:2687: semi reduce using rule 55 (comp -> comp less error .) - yacc.py:2687: cpar reduce using rule 55 (comp -> comp less error .) - yacc.py:2687: star reduce using rule 55 (comp -> comp less error .) - yacc.py:2687: div reduce using rule 55 (comp -> comp less error .) - yacc.py:2687: plus reduce using rule 55 (comp -> comp less error .) - yacc.py:2687: minus reduce using rule 55 (comp -> comp less error .) - yacc.py:2687: dot reduce using rule 55 (comp -> comp less error .) - yacc.py:2687: of reduce using rule 55 (comp -> comp less error .) - yacc.py:2687: then reduce using rule 55 (comp -> comp less error .) - yacc.py:2687: loop reduce using rule 55 (comp -> comp less error .) - yacc.py:2687: comma reduce using rule 55 (comp -> comp less error .) - yacc.py:2687: in reduce using rule 55 (comp -> comp less error .) - yacc.py:2687: else reduce using rule 55 (comp -> comp less error .) - yacc.py:2687: pool reduce using rule 55 (comp -> comp less error .) - yacc.py:2687: ccur reduce using rule 55 (comp -> comp less error .) - yacc.py:2687: fi reduce using rule 55 (comp -> comp less error .) - yacc.py:2687: arroba shift and go to state 112 - yacc.py:2687: opar shift and go to state 115 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: error shift and go to state 111 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2696: ! error [ reduce using rule 55 (comp -> comp less error .) ] - yacc.py:2696: ! arroba [ reduce using rule 55 (comp -> comp less error .) ] - yacc.py:2700: - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: expr shift and go to state 113 - yacc.py:2714: block shift and go to state 114 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (70) factor -> let let_list in . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 196 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 172 yacc.py:2563: - yacc.py:2565: (52) comp -> comp lesseq op . - yacc.py:2565: (58) op -> op . plus term - yacc.py:2565: (59) op -> op . minus term - yacc.py:2565: (61) op -> op . plus error - yacc.py:2565: (62) op -> op . minus error + yacc.py:2565: (37) let_list -> let_assign comma . let_list + yacc.py:2565: (36) let_list -> . let_assign + yacc.py:2565: (37) let_list -> . let_assign comma let_list + yacc.py:2565: (38) let_assign -> . param larrow expr + yacc.py:2565: (39) let_assign -> . param + yacc.py:2565: (35) param -> . id colon type yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for plus resolved as shift - yacc.py:2666: ! shift/reduce conflict for minus resolved as shift - yacc.py:2687: less reduce using rule 52 (comp -> comp lesseq op .) - yacc.py:2687: lesseq reduce using rule 52 (comp -> comp lesseq op .) - yacc.py:2687: equal reduce using rule 52 (comp -> comp lesseq op .) - yacc.py:2687: semi reduce using rule 52 (comp -> comp lesseq op .) - yacc.py:2687: cpar reduce using rule 52 (comp -> comp lesseq op .) - yacc.py:2687: error reduce using rule 52 (comp -> comp lesseq op .) - yacc.py:2687: star reduce using rule 52 (comp -> comp lesseq op .) - yacc.py:2687: div reduce using rule 52 (comp -> comp lesseq op .) - yacc.py:2687: arroba reduce using rule 52 (comp -> comp lesseq op .) - yacc.py:2687: dot reduce using rule 52 (comp -> comp lesseq op .) - yacc.py:2687: of reduce using rule 52 (comp -> comp lesseq op .) - yacc.py:2687: then reduce using rule 52 (comp -> comp lesseq op .) - yacc.py:2687: loop reduce using rule 52 (comp -> comp lesseq op .) - yacc.py:2687: comma reduce using rule 52 (comp -> comp lesseq op .) - yacc.py:2687: in reduce using rule 52 (comp -> comp lesseq op .) - yacc.py:2687: else reduce using rule 52 (comp -> comp lesseq op .) - yacc.py:2687: pool reduce using rule 52 (comp -> comp lesseq op .) - yacc.py:2687: ccur reduce using rule 52 (comp -> comp lesseq op .) - yacc.py:2687: fi reduce using rule 52 (comp -> comp lesseq op .) - yacc.py:2687: plus shift and go to state 121 - yacc.py:2687: minus shift and go to state 122 - yacc.py:2689: - yacc.py:2696: ! plus [ reduce using rule 52 (comp -> comp lesseq op .) ] - yacc.py:2696: ! minus [ reduce using rule 52 (comp -> comp lesseq op .) ] - yacc.py:2700: + yacc.py:2687: id shift and go to state 46 + yacc.py:2689: + yacc.py:2714: let_assign shift and go to state 129 + yacc.py:2714: let_list shift and go to state 197 + yacc.py:2714: param shift and go to state 130 yacc.py:2561: yacc.py:2562:state 173 yacc.py:2563: - yacc.py:2565: (56) comp -> comp lesseq error . - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift - yacc.py:2666: ! shift/reduce conflict for error resolved as shift - yacc.py:2687: less reduce using rule 56 (comp -> comp lesseq error .) - yacc.py:2687: lesseq reduce using rule 56 (comp -> comp lesseq error .) - yacc.py:2687: equal reduce using rule 56 (comp -> comp lesseq error .) - yacc.py:2687: semi reduce using rule 56 (comp -> comp lesseq error .) - yacc.py:2687: cpar reduce using rule 56 (comp -> comp lesseq error .) - yacc.py:2687: star reduce using rule 56 (comp -> comp lesseq error .) - yacc.py:2687: div reduce using rule 56 (comp -> comp lesseq error .) - yacc.py:2687: plus reduce using rule 56 (comp -> comp lesseq error .) - yacc.py:2687: minus reduce using rule 56 (comp -> comp lesseq error .) - yacc.py:2687: dot reduce using rule 56 (comp -> comp lesseq error .) - yacc.py:2687: of reduce using rule 56 (comp -> comp lesseq error .) - yacc.py:2687: then reduce using rule 56 (comp -> comp lesseq error .) - yacc.py:2687: loop reduce using rule 56 (comp -> comp lesseq error .) - yacc.py:2687: comma reduce using rule 56 (comp -> comp lesseq error .) - yacc.py:2687: in reduce using rule 56 (comp -> comp lesseq error .) - yacc.py:2687: else reduce using rule 56 (comp -> comp lesseq error .) - yacc.py:2687: pool reduce using rule 56 (comp -> comp lesseq error .) - yacc.py:2687: ccur reduce using rule 56 (comp -> comp lesseq error .) - yacc.py:2687: fi reduce using rule 56 (comp -> comp lesseq error .) - yacc.py:2687: arroba shift and go to state 112 - yacc.py:2687: opar shift and go to state 115 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: error shift and go to state 111 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2696: ! error [ reduce using rule 56 (comp -> comp lesseq error .) ] - yacc.py:2696: ! arroba [ reduce using rule 56 (comp -> comp lesseq error .) ] - yacc.py:2700: - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: expr shift and go to state 113 - yacc.py:2714: block shift and go to state 114 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (38) let_assign -> param larrow . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 198 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 174 yacc.py:2563: - yacc.py:2565: (53) comp -> comp equal op . - yacc.py:2565: (58) op -> op . plus term - yacc.py:2565: (59) op -> op . minus term - yacc.py:2565: (61) op -> op . plus error - yacc.py:2565: (62) op -> op . minus error + yacc.py:2565: (71) factor -> case expr of . cases_list esac + yacc.py:2565: (40) cases_list -> . casep semi + yacc.py:2565: (41) cases_list -> . casep semi cases_list + yacc.py:2565: (42) cases_list -> . error cases_list + yacc.py:2565: (43) cases_list -> . error semi + yacc.py:2565: (44) casep -> . id colon type rarrow expr yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for plus resolved as shift - yacc.py:2666: ! shift/reduce conflict for minus resolved as shift - yacc.py:2687: less reduce using rule 53 (comp -> comp equal op .) - yacc.py:2687: lesseq reduce using rule 53 (comp -> comp equal op .) - yacc.py:2687: equal reduce using rule 53 (comp -> comp equal op .) - yacc.py:2687: semi reduce using rule 53 (comp -> comp equal op .) - yacc.py:2687: cpar reduce using rule 53 (comp -> comp equal op .) - yacc.py:2687: error reduce using rule 53 (comp -> comp equal op .) - yacc.py:2687: star reduce using rule 53 (comp -> comp equal op .) - yacc.py:2687: div reduce using rule 53 (comp -> comp equal op .) - yacc.py:2687: arroba reduce using rule 53 (comp -> comp equal op .) - yacc.py:2687: dot reduce using rule 53 (comp -> comp equal op .) - yacc.py:2687: of reduce using rule 53 (comp -> comp equal op .) - yacc.py:2687: then reduce using rule 53 (comp -> comp equal op .) - yacc.py:2687: loop reduce using rule 53 (comp -> comp equal op .) - yacc.py:2687: comma reduce using rule 53 (comp -> comp equal op .) - yacc.py:2687: in reduce using rule 53 (comp -> comp equal op .) - yacc.py:2687: else reduce using rule 53 (comp -> comp equal op .) - yacc.py:2687: pool reduce using rule 53 (comp -> comp equal op .) - yacc.py:2687: ccur reduce using rule 53 (comp -> comp equal op .) - yacc.py:2687: fi reduce using rule 53 (comp -> comp equal op .) - yacc.py:2687: plus shift and go to state 121 - yacc.py:2687: minus shift and go to state 122 - yacc.py:2689: - yacc.py:2696: ! plus [ reduce using rule 53 (comp -> comp equal op .) ] - yacc.py:2696: ! minus [ reduce using rule 53 (comp -> comp equal op .) ] - yacc.py:2700: + yacc.py:2687: error shift and go to state 201 + yacc.py:2687: id shift and go to state 202 + yacc.py:2689: + yacc.py:2714: cases_list shift and go to state 199 + yacc.py:2714: casep shift and go to state 200 yacc.py:2561: yacc.py:2562:state 175 yacc.py:2563: - yacc.py:2565: (57) comp -> comp equal error . - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift - yacc.py:2666: ! shift/reduce conflict for error resolved as shift - yacc.py:2687: less reduce using rule 57 (comp -> comp equal error .) - yacc.py:2687: lesseq reduce using rule 57 (comp -> comp equal error .) - yacc.py:2687: equal reduce using rule 57 (comp -> comp equal error .) - yacc.py:2687: semi reduce using rule 57 (comp -> comp equal error .) - yacc.py:2687: cpar reduce using rule 57 (comp -> comp equal error .) - yacc.py:2687: star reduce using rule 57 (comp -> comp equal error .) - yacc.py:2687: div reduce using rule 57 (comp -> comp equal error .) - yacc.py:2687: plus reduce using rule 57 (comp -> comp equal error .) - yacc.py:2687: minus reduce using rule 57 (comp -> comp equal error .) - yacc.py:2687: dot reduce using rule 57 (comp -> comp equal error .) - yacc.py:2687: of reduce using rule 57 (comp -> comp equal error .) - yacc.py:2687: then reduce using rule 57 (comp -> comp equal error .) - yacc.py:2687: loop reduce using rule 57 (comp -> comp equal error .) - yacc.py:2687: comma reduce using rule 57 (comp -> comp equal error .) - yacc.py:2687: in reduce using rule 57 (comp -> comp equal error .) - yacc.py:2687: else reduce using rule 57 (comp -> comp equal error .) - yacc.py:2687: pool reduce using rule 57 (comp -> comp equal error .) - yacc.py:2687: ccur reduce using rule 57 (comp -> comp equal error .) - yacc.py:2687: fi reduce using rule 57 (comp -> comp equal error .) - yacc.py:2687: arroba shift and go to state 112 - yacc.py:2687: opar shift and go to state 115 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: error shift and go to state 111 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2696: ! error [ reduce using rule 57 (comp -> comp equal error .) ] - yacc.py:2696: ! arroba [ reduce using rule 57 (comp -> comp equal error .) ] - yacc.py:2700: - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: expr shift and go to state 113 - yacc.py:2714: block shift and go to state 114 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (72) factor -> if expr then . expr else expr fi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 203 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 176 yacc.py:2563: - yacc.py:2565: (58) op -> op plus term . - yacc.py:2565: (63) term -> term . star base_call - yacc.py:2565: (64) term -> term . div base_call - yacc.py:2565: (68) term -> term . star error - yacc.py:2565: (69) term -> term . div error - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for star resolved as shift - yacc.py:2666: ! shift/reduce conflict for div resolved as shift - yacc.py:2687: plus reduce using rule 58 (op -> op plus term .) - yacc.py:2687: minus reduce using rule 58 (op -> op plus term .) - yacc.py:2687: less reduce using rule 58 (op -> op plus term .) - yacc.py:2687: lesseq reduce using rule 58 (op -> op plus term .) - yacc.py:2687: equal reduce using rule 58 (op -> op plus term .) - yacc.py:2687: semi reduce using rule 58 (op -> op plus term .) - yacc.py:2687: cpar reduce using rule 58 (op -> op plus term .) - yacc.py:2687: error reduce using rule 58 (op -> op plus term .) - yacc.py:2687: arroba reduce using rule 58 (op -> op plus term .) - yacc.py:2687: dot reduce using rule 58 (op -> op plus term .) - yacc.py:2687: of reduce using rule 58 (op -> op plus term .) - yacc.py:2687: then reduce using rule 58 (op -> op plus term .) - yacc.py:2687: loop reduce using rule 58 (op -> op plus term .) - yacc.py:2687: comma reduce using rule 58 (op -> op plus term .) - yacc.py:2687: in reduce using rule 58 (op -> op plus term .) - yacc.py:2687: else reduce using rule 58 (op -> op plus term .) - yacc.py:2687: pool reduce using rule 58 (op -> op plus term .) - yacc.py:2687: ccur reduce using rule 58 (op -> op plus term .) - yacc.py:2687: fi reduce using rule 58 (op -> op plus term .) - yacc.py:2687: star shift and go to state 123 - yacc.py:2687: div shift and go to state 124 - yacc.py:2689: - yacc.py:2696: ! star [ reduce using rule 58 (op -> op plus term .) ] - yacc.py:2696: ! div [ reduce using rule 58 (op -> op plus term .) ] - yacc.py:2700: + yacc.py:2565: (73) factor -> while expr loop . expr pool + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 204 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 177 yacc.py:2563: - yacc.py:2565: (61) op -> op plus error . - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift - yacc.py:2666: ! shift/reduce conflict for error resolved as shift - yacc.py:2687: plus reduce using rule 61 (op -> op plus error .) - yacc.py:2687: minus reduce using rule 61 (op -> op plus error .) - yacc.py:2687: less reduce using rule 61 (op -> op plus error .) - yacc.py:2687: lesseq reduce using rule 61 (op -> op plus error .) - yacc.py:2687: equal reduce using rule 61 (op -> op plus error .) - yacc.py:2687: semi reduce using rule 61 (op -> op plus error .) - yacc.py:2687: cpar reduce using rule 61 (op -> op plus error .) - yacc.py:2687: star reduce using rule 61 (op -> op plus error .) - yacc.py:2687: div reduce using rule 61 (op -> op plus error .) - yacc.py:2687: dot reduce using rule 61 (op -> op plus error .) - yacc.py:2687: of reduce using rule 61 (op -> op plus error .) - yacc.py:2687: then reduce using rule 61 (op -> op plus error .) - yacc.py:2687: loop reduce using rule 61 (op -> op plus error .) - yacc.py:2687: comma reduce using rule 61 (op -> op plus error .) - yacc.py:2687: in reduce using rule 61 (op -> op plus error .) - yacc.py:2687: else reduce using rule 61 (op -> op plus error .) - yacc.py:2687: pool reduce using rule 61 (op -> op plus error .) - yacc.py:2687: ccur reduce using rule 61 (op -> op plus error .) - yacc.py:2687: fi reduce using rule 61 (op -> op plus error .) - yacc.py:2687: arroba shift and go to state 112 - yacc.py:2687: opar shift and go to state 115 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: error shift and go to state 111 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2696: ! error [ reduce using rule 61 (op -> op plus error .) ] - yacc.py:2696: ! arroba [ reduce using rule 61 (op -> op plus error .) ] - yacc.py:2700: - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: expr shift and go to state 113 - yacc.py:2714: block shift and go to state 114 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (77) atom -> ocur block ccur . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: dot reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: star reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: div reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: plus reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: minus reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: less reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: lesseq reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: equal reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: semi reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: cpar reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: of reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: then reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: loop reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: comma reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: in reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: else reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: pool reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: ccur reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: fi reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 178 yacc.py:2563: - yacc.py:2565: (59) op -> op minus term . - yacc.py:2565: (63) term -> term . star base_call - yacc.py:2565: (64) term -> term . div base_call - yacc.py:2565: (68) term -> term . star error - yacc.py:2565: (69) term -> term . div error - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for star resolved as shift - yacc.py:2666: ! shift/reduce conflict for div resolved as shift - yacc.py:2687: plus reduce using rule 59 (op -> op minus term .) - yacc.py:2687: minus reduce using rule 59 (op -> op minus term .) - yacc.py:2687: less reduce using rule 59 (op -> op minus term .) - yacc.py:2687: lesseq reduce using rule 59 (op -> op minus term .) - yacc.py:2687: equal reduce using rule 59 (op -> op minus term .) - yacc.py:2687: semi reduce using rule 59 (op -> op minus term .) - yacc.py:2687: cpar reduce using rule 59 (op -> op minus term .) - yacc.py:2687: error reduce using rule 59 (op -> op minus term .) - yacc.py:2687: arroba reduce using rule 59 (op -> op minus term .) - yacc.py:2687: dot reduce using rule 59 (op -> op minus term .) - yacc.py:2687: of reduce using rule 59 (op -> op minus term .) - yacc.py:2687: then reduce using rule 59 (op -> op minus term .) - yacc.py:2687: loop reduce using rule 59 (op -> op minus term .) - yacc.py:2687: comma reduce using rule 59 (op -> op minus term .) - yacc.py:2687: in reduce using rule 59 (op -> op minus term .) - yacc.py:2687: else reduce using rule 59 (op -> op minus term .) - yacc.py:2687: pool reduce using rule 59 (op -> op minus term .) - yacc.py:2687: ccur reduce using rule 59 (op -> op minus term .) - yacc.py:2687: fi reduce using rule 59 (op -> op minus term .) - yacc.py:2687: star shift and go to state 123 - yacc.py:2687: div shift and go to state 124 - yacc.py:2689: - yacc.py:2696: ! star [ reduce using rule 59 (op -> op minus term .) ] - yacc.py:2696: ! div [ reduce using rule 59 (op -> op minus term .) ] - yacc.py:2700: + yacc.py:2565: (80) atom -> ocur block error . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: dot reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: star reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: div reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: plus reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: minus reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: less reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: lesseq reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: equal reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: semi reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: cpar reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: of reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: then reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: loop reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: comma reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: in reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: else reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: pool reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: ccur reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: fi reduce using rule 80 (atom -> ocur block error .) + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 179 yacc.py:2563: - yacc.py:2565: (62) op -> op minus error . - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift - yacc.py:2666: ! shift/reduce conflict for error resolved as shift - yacc.py:2687: plus reduce using rule 62 (op -> op minus error .) - yacc.py:2687: minus reduce using rule 62 (op -> op minus error .) - yacc.py:2687: less reduce using rule 62 (op -> op minus error .) - yacc.py:2687: lesseq reduce using rule 62 (op -> op minus error .) - yacc.py:2687: equal reduce using rule 62 (op -> op minus error .) - yacc.py:2687: semi reduce using rule 62 (op -> op minus error .) - yacc.py:2687: cpar reduce using rule 62 (op -> op minus error .) - yacc.py:2687: star reduce using rule 62 (op -> op minus error .) - yacc.py:2687: div reduce using rule 62 (op -> op minus error .) - yacc.py:2687: dot reduce using rule 62 (op -> op minus error .) - yacc.py:2687: of reduce using rule 62 (op -> op minus error .) - yacc.py:2687: then reduce using rule 62 (op -> op minus error .) - yacc.py:2687: loop reduce using rule 62 (op -> op minus error .) - yacc.py:2687: comma reduce using rule 62 (op -> op minus error .) - yacc.py:2687: in reduce using rule 62 (op -> op minus error .) - yacc.py:2687: else reduce using rule 62 (op -> op minus error .) - yacc.py:2687: pool reduce using rule 62 (op -> op minus error .) - yacc.py:2687: ccur reduce using rule 62 (op -> op minus error .) - yacc.py:2687: fi reduce using rule 62 (op -> op minus error .) - yacc.py:2687: arroba shift and go to state 112 - yacc.py:2687: opar shift and go to state 115 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: error shift and go to state 111 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2696: ! error [ reduce using rule 62 (op -> op minus error .) ] - yacc.py:2696: ! arroba [ reduce using rule 62 (op -> op minus error .) ] - yacc.py:2700: - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: expr shift and go to state 113 - yacc.py:2714: block shift and go to state 114 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (79) atom -> ocur error ccur . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: dot reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: star reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: div reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: plus reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: minus reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: less reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: lesseq reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: equal reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: semi reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: cpar reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: of reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: then reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: loop reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: comma reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: in reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: else reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: pool reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: ccur reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: fi reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 180 yacc.py:2563: - yacc.py:2565: (63) term -> term star base_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 63 (term -> term star base_call .) - yacc.py:2687: div reduce using rule 63 (term -> term star base_call .) - yacc.py:2687: plus reduce using rule 63 (term -> term star base_call .) - yacc.py:2687: minus reduce using rule 63 (term -> term star base_call .) - yacc.py:2687: less reduce using rule 63 (term -> term star base_call .) - yacc.py:2687: lesseq reduce using rule 63 (term -> term star base_call .) - yacc.py:2687: equal reduce using rule 63 (term -> term star base_call .) - yacc.py:2687: semi reduce using rule 63 (term -> term star base_call .) - yacc.py:2687: cpar reduce using rule 63 (term -> term star base_call .) - yacc.py:2687: error reduce using rule 63 (term -> term star base_call .) - yacc.py:2687: arroba reduce using rule 63 (term -> term star base_call .) - yacc.py:2687: dot reduce using rule 63 (term -> term star base_call .) - yacc.py:2687: of reduce using rule 63 (term -> term star base_call .) - yacc.py:2687: then reduce using rule 63 (term -> term star base_call .) - yacc.py:2687: loop reduce using rule 63 (term -> term star base_call .) - yacc.py:2687: comma reduce using rule 63 (term -> term star base_call .) - yacc.py:2687: in reduce using rule 63 (term -> term star base_call .) - yacc.py:2687: else reduce using rule 63 (term -> term star base_call .) - yacc.py:2687: pool reduce using rule 63 (term -> term star base_call .) - yacc.py:2687: ccur reduce using rule 63 (term -> term star base_call .) - yacc.py:2687: fi reduce using rule 63 (term -> term star base_call .) - yacc.py:2689: + yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur . expr ccur + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 205 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 181 yacc.py:2563: - yacc.py:2565: (68) term -> term star error . - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur . expr ccur + yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur . error ccur + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift - yacc.py:2666: ! shift/reduce conflict for error resolved as shift - yacc.py:2687: star reduce using rule 68 (term -> term star error .) - yacc.py:2687: div reduce using rule 68 (term -> term star error .) - yacc.py:2687: plus reduce using rule 68 (term -> term star error .) - yacc.py:2687: minus reduce using rule 68 (term -> term star error .) - yacc.py:2687: less reduce using rule 68 (term -> term star error .) - yacc.py:2687: lesseq reduce using rule 68 (term -> term star error .) - yacc.py:2687: equal reduce using rule 68 (term -> term star error .) - yacc.py:2687: semi reduce using rule 68 (term -> term star error .) - yacc.py:2687: cpar reduce using rule 68 (term -> term star error .) - yacc.py:2687: dot reduce using rule 68 (term -> term star error .) - yacc.py:2687: of reduce using rule 68 (term -> term star error .) - yacc.py:2687: then reduce using rule 68 (term -> term star error .) - yacc.py:2687: loop reduce using rule 68 (term -> term star error .) - yacc.py:2687: comma reduce using rule 68 (term -> term star error .) - yacc.py:2687: in reduce using rule 68 (term -> term star error .) - yacc.py:2687: else reduce using rule 68 (term -> term star error .) - yacc.py:2687: pool reduce using rule 68 (term -> term star error .) - yacc.py:2687: ccur reduce using rule 68 (term -> term star error .) - yacc.py:2687: fi reduce using rule 68 (term -> term star error .) - yacc.py:2687: arroba shift and go to state 112 - yacc.py:2687: opar shift and go to state 115 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: error shift and go to state 111 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2696: ! error [ reduce using rule 68 (term -> term star error .) ] - yacc.py:2696: ! arroba [ reduce using rule 68 (term -> term star error .) ] - yacc.py:2700: - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: expr shift and go to state 113 - yacc.py:2714: block shift and go to state 114 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2687: error shift and go to state 207 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 206 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 182 yacc.py:2563: - yacc.py:2565: (64) term -> term div base_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 64 (term -> term div base_call .) - yacc.py:2687: div reduce using rule 64 (term -> term div base_call .) - yacc.py:2687: plus reduce using rule 64 (term -> term div base_call .) - yacc.py:2687: minus reduce using rule 64 (term -> term div base_call .) - yacc.py:2687: less reduce using rule 64 (term -> term div base_call .) - yacc.py:2687: lesseq reduce using rule 64 (term -> term div base_call .) - yacc.py:2687: equal reduce using rule 64 (term -> term div base_call .) - yacc.py:2687: semi reduce using rule 64 (term -> term div base_call .) - yacc.py:2687: cpar reduce using rule 64 (term -> term div base_call .) - yacc.py:2687: error reduce using rule 64 (term -> term div base_call .) - yacc.py:2687: arroba reduce using rule 64 (term -> term div base_call .) - yacc.py:2687: dot reduce using rule 64 (term -> term div base_call .) - yacc.py:2687: of reduce using rule 64 (term -> term div base_call .) - yacc.py:2687: then reduce using rule 64 (term -> term div base_call .) - yacc.py:2687: loop reduce using rule 64 (term -> term div base_call .) - yacc.py:2687: comma reduce using rule 64 (term -> term div base_call .) - yacc.py:2687: in reduce using rule 64 (term -> term div base_call .) - yacc.py:2687: else reduce using rule 64 (term -> term div base_call .) - yacc.py:2687: pool reduce using rule 64 (term -> term div base_call .) - yacc.py:2687: ccur reduce using rule 64 (term -> term div base_call .) - yacc.py:2687: fi reduce using rule 64 (term -> term div base_call .) - yacc.py:2689: + yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur . expr ccur + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 208 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 183 yacc.py:2563: - yacc.py:2565: (69) term -> term div error . - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift - yacc.py:2666: ! shift/reduce conflict for error resolved as shift - yacc.py:2687: star reduce using rule 69 (term -> term div error .) - yacc.py:2687: div reduce using rule 69 (term -> term div error .) - yacc.py:2687: plus reduce using rule 69 (term -> term div error .) - yacc.py:2687: minus reduce using rule 69 (term -> term div error .) - yacc.py:2687: less reduce using rule 69 (term -> term div error .) - yacc.py:2687: lesseq reduce using rule 69 (term -> term div error .) - yacc.py:2687: equal reduce using rule 69 (term -> term div error .) - yacc.py:2687: semi reduce using rule 69 (term -> term div error .) - yacc.py:2687: cpar reduce using rule 69 (term -> term div error .) - yacc.py:2687: dot reduce using rule 69 (term -> term div error .) - yacc.py:2687: of reduce using rule 69 (term -> term div error .) - yacc.py:2687: then reduce using rule 69 (term -> term div error .) - yacc.py:2687: loop reduce using rule 69 (term -> term div error .) - yacc.py:2687: comma reduce using rule 69 (term -> term div error .) - yacc.py:2687: in reduce using rule 69 (term -> term div error .) - yacc.py:2687: else reduce using rule 69 (term -> term div error .) - yacc.py:2687: pool reduce using rule 69 (term -> term div error .) - yacc.py:2687: ccur reduce using rule 69 (term -> term div error .) - yacc.py:2687: fi reduce using rule 69 (term -> term div error .) - yacc.py:2687: arroba shift and go to state 112 - yacc.py:2687: opar shift and go to state 115 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: error shift and go to state 111 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2696: ! error [ reduce using rule 69 (term -> term div error .) ] - yacc.py:2696: ! arroba [ reduce using rule 69 (term -> term div error .) ] - yacc.py:2700: - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: expr shift and go to state 113 - yacc.py:2714: block shift and go to state 114 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur . expr ccur + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 209 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 184 yacc.py:2563: - yacc.py:2565: (72) base_call -> factor arroba type . dot func_call + yacc.py:2565: (61) base_call -> error arroba type dot . func_call + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar yacc.py:2566: - yacc.py:2687: dot shift and go to state 225 + yacc.py:2687: id shift and go to state 168 + yacc.py:2687: error shift and go to state 169 yacc.py:2689: + yacc.py:2714: func_call shift and go to state 210 yacc.py:2561: yacc.py:2562:state 185 yacc.py:2563: - yacc.py:2565: (75) base_call -> factor arroba error . dot func_call - yacc.py:2566: - yacc.py:2687: dot shift and go to state 226 - yacc.py:2689: + yacc.py:2565: (95) arg_list -> error . arg_list + yacc.py:2565: (86) block -> error . block + yacc.py:2565: (87) block -> error . semi + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: semi shift and go to state 142 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 185 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: arg_list shift and go to state 186 + yacc.py:2714: block shift and go to state 141 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: expr shift and go to state 187 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 186 yacc.py:2563: - yacc.py:2565: (81) factor -> factor dot func_call . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 81 (factor -> factor dot func_call .) - yacc.py:2687: dot reduce using rule 81 (factor -> factor dot func_call .) - yacc.py:2687: star reduce using rule 81 (factor -> factor dot func_call .) - yacc.py:2687: div reduce using rule 81 (factor -> factor dot func_call .) - yacc.py:2687: plus reduce using rule 81 (factor -> factor dot func_call .) - yacc.py:2687: minus reduce using rule 81 (factor -> factor dot func_call .) - yacc.py:2687: less reduce using rule 81 (factor -> factor dot func_call .) - yacc.py:2687: lesseq reduce using rule 81 (factor -> factor dot func_call .) - yacc.py:2687: equal reduce using rule 81 (factor -> factor dot func_call .) - yacc.py:2687: semi reduce using rule 81 (factor -> factor dot func_call .) - yacc.py:2687: cpar reduce using rule 81 (factor -> factor dot func_call .) - yacc.py:2687: error reduce using rule 81 (factor -> factor dot func_call .) - yacc.py:2687: of reduce using rule 81 (factor -> factor dot func_call .) - yacc.py:2687: then reduce using rule 81 (factor -> factor dot func_call .) - yacc.py:2687: loop reduce using rule 81 (factor -> factor dot func_call .) - yacc.py:2687: comma reduce using rule 81 (factor -> factor dot func_call .) - yacc.py:2687: in reduce using rule 81 (factor -> factor dot func_call .) - yacc.py:2687: else reduce using rule 81 (factor -> factor dot func_call .) - yacc.py:2687: pool reduce using rule 81 (factor -> factor dot func_call .) - yacc.py:2687: ccur reduce using rule 81 (factor -> factor dot func_call .) - yacc.py:2687: fi reduce using rule 81 (factor -> factor dot func_call .) + yacc.py:2565: (95) arg_list -> error arg_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 95 (arg_list -> error arg_list .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 187 yacc.py:2563: - yacc.py:2565: (123) func_call -> id . opar args cpar - yacc.py:2565: (124) func_call -> id . opar error cpar + yacc.py:2565: (93) arg_list -> expr . + yacc.py:2565: (94) arg_list -> expr . comma arg_list + yacc.py:2565: (84) block -> expr . semi + yacc.py:2565: (85) block -> expr . semi block yacc.py:2566: - yacc.py:2687: opar shift and go to state 117 + yacc.py:2687: cpar reduce using rule 93 (arg_list -> expr .) + yacc.py:2687: comma shift and go to state 189 + yacc.py:2687: semi shift and go to state 151 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 188 yacc.py:2563: - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2566: - yacc.py:2687: opar shift and go to state 227 + yacc.py:2565: (90) func_call -> error opar args cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: dot reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: star reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: div reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: plus reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: minus reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: less reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: lesseq reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: equal reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: semi reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: cpar reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: of reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: then reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: loop reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: comma reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: in reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: else reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: pool reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: ccur reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: fi reduce using rule 90 (func_call -> error opar args cpar .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 189 yacc.py:2563: - yacc.py:2565: (77) factor -> opar expr cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: dot reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: star reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: div reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: plus reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: minus reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: less reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: lesseq reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: equal reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: semi reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: cpar reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: error reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: of reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: then reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: loop reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: comma reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: in reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: else reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: pool reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: ccur reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2687: fi reduce using rule 77 (factor -> opar expr cpar .) - yacc.py:2689: + yacc.py:2565: (94) arg_list -> expr comma . arg_list + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 145 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 155 + yacc.py:2714: arg_list shift and go to state 211 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 190 yacc.py:2563: - yacc.py:2565: (78) factor -> opar expr error . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 78 (factor -> opar expr error .) - yacc.py:2687: dot reduce using rule 78 (factor -> opar expr error .) - yacc.py:2687: star reduce using rule 78 (factor -> opar expr error .) - yacc.py:2687: div reduce using rule 78 (factor -> opar expr error .) - yacc.py:2687: plus reduce using rule 78 (factor -> opar expr error .) - yacc.py:2687: minus reduce using rule 78 (factor -> opar expr error .) - yacc.py:2687: less reduce using rule 78 (factor -> opar expr error .) - yacc.py:2687: lesseq reduce using rule 78 (factor -> opar expr error .) - yacc.py:2687: equal reduce using rule 78 (factor -> opar expr error .) - yacc.py:2687: semi reduce using rule 78 (factor -> opar expr error .) - yacc.py:2687: cpar reduce using rule 78 (factor -> opar expr error .) - yacc.py:2687: error reduce using rule 78 (factor -> opar expr error .) - yacc.py:2687: of reduce using rule 78 (factor -> opar expr error .) - yacc.py:2687: then reduce using rule 78 (factor -> opar expr error .) - yacc.py:2687: loop reduce using rule 78 (factor -> opar expr error .) - yacc.py:2687: comma reduce using rule 78 (factor -> opar expr error .) - yacc.py:2687: in reduce using rule 78 (factor -> opar expr error .) - yacc.py:2687: else reduce using rule 78 (factor -> opar expr error .) - yacc.py:2687: pool reduce using rule 78 (factor -> opar expr error .) - yacc.py:2687: ccur reduce using rule 78 (factor -> opar expr error .) - yacc.py:2687: fi reduce using rule 78 (factor -> opar expr error .) + yacc.py:2565: (85) block -> expr semi block . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 85 (block -> expr semi block .) + yacc.py:2687: error reduce using rule 85 (block -> expr semi block .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 191 yacc.py:2563: - yacc.py:2565: (80) factor -> opar error cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 80 (factor -> opar error cpar .) - yacc.py:2687: dot reduce using rule 80 (factor -> opar error cpar .) - yacc.py:2687: star reduce using rule 80 (factor -> opar error cpar .) - yacc.py:2687: div reduce using rule 80 (factor -> opar error cpar .) - yacc.py:2687: plus reduce using rule 80 (factor -> opar error cpar .) - yacc.py:2687: minus reduce using rule 80 (factor -> opar error cpar .) - yacc.py:2687: less reduce using rule 80 (factor -> opar error cpar .) - yacc.py:2687: lesseq reduce using rule 80 (factor -> opar error cpar .) - yacc.py:2687: equal reduce using rule 80 (factor -> opar error cpar .) - yacc.py:2687: semi reduce using rule 80 (factor -> opar error cpar .) - yacc.py:2687: cpar reduce using rule 80 (factor -> opar error cpar .) - yacc.py:2687: error reduce using rule 80 (factor -> opar error cpar .) - yacc.py:2687: of reduce using rule 80 (factor -> opar error cpar .) - yacc.py:2687: then reduce using rule 80 (factor -> opar error cpar .) - yacc.py:2687: loop reduce using rule 80 (factor -> opar error cpar .) - yacc.py:2687: comma reduce using rule 80 (factor -> opar error cpar .) - yacc.py:2687: in reduce using rule 80 (factor -> opar error cpar .) - yacc.py:2687: else reduce using rule 80 (factor -> opar error cpar .) - yacc.py:2687: pool reduce using rule 80 (factor -> opar error cpar .) - yacc.py:2687: ccur reduce using rule 80 (factor -> opar error cpar .) - yacc.py:2687: fi reduce using rule 80 (factor -> opar error cpar .) + yacc.py:2565: (88) func_call -> id opar args cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: dot reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: star reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: div reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: plus reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: minus reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: less reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: lesseq reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: equal reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: semi reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: cpar reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: of reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: then reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: loop reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: comma reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: in reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: else reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: pool reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: ccur reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: fi reduce using rule 88 (func_call -> id opar args cpar .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 192 yacc.py:2563: - yacc.py:2565: (84) factor -> let let_list in . expr - yacc.py:2565: (86) factor -> let let_list in . error - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 229 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 + yacc.py:2565: (89) func_call -> id opar error cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: dot reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: star reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: div reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: plus reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: minus reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: less reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: lesseq reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: equal reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: semi reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: cpar reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: of reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: then reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: loop reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: comma reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: in reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: else reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: pool reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: ccur reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: fi reduce using rule 89 (func_call -> id opar error cpar .) yacc.py:2689: - yacc.py:2714: expr shift and go to state 228 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 yacc.py:2561: yacc.py:2562:state 193 yacc.py:2563: - yacc.py:2565: (87) factor -> let let_list error . expr - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: error shift and go to state 72 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 230 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (59) base_call -> factor arroba type dot . func_call + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 168 + yacc.py:2687: error shift and go to state 169 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 212 yacc.py:2561: yacc.py:2562:state 194 yacc.py:2563: - yacc.py:2565: (40) let_list -> error . let_list - yacc.py:2565: (41) let_list -> error . - yacc.py:2565: (38) let_list -> . let_assign - yacc.py:2565: (39) let_list -> . let_assign comma let_list - yacc.py:2565: (40) let_list -> . error let_list - yacc.py:2565: (41) let_list -> . error - yacc.py:2565: (42) let_assign -> . param larrow expr - yacc.py:2565: (43) let_assign -> . param - yacc.py:2565: (37) param -> . id colon type + yacc.py:2565: (62) base_call -> factor arroba error dot . func_call + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for error resolved as shift - yacc.py:2687: in reduce using rule 41 (let_list -> error .) - yacc.py:2687: error shift and go to state 194 - yacc.py:2687: id shift and go to state 47 + yacc.py:2687: id shift and go to state 168 + yacc.py:2687: error shift and go to state 169 yacc.py:2689: - yacc.py:2696: ! error [ reduce using rule 41 (let_list -> error .) ] - yacc.py:2700: - yacc.py:2714: let_list shift and go to state 196 - yacc.py:2714: let_assign shift and go to state 137 - yacc.py:2714: param shift and go to state 138 + yacc.py:2714: func_call shift and go to state 213 yacc.py:2561: yacc.py:2562:state 195 yacc.py:2563: - yacc.py:2565: (85) factor -> let error in . expr - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: error shift and go to state 72 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 231 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (90) func_call -> error opar . args cpar + yacc.py:2565: (91) args -> . arg_list + yacc.py:2565: (92) args -> . arg_list_empty + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (96) arg_list_empty -> . epsilon + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 145 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: args shift and go to state 146 + yacc.py:2714: arg_list shift and go to state 148 + yacc.py:2714: arg_list_empty shift and go to state 149 + yacc.py:2714: expr shift and go to state 155 + yacc.py:2714: epsilon shift and go to state 150 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 196 yacc.py:2563: - yacc.py:2565: (40) let_list -> error let_list . - yacc.py:2566: - yacc.py:2687: in reduce using rule 40 (let_list -> error let_list .) - yacc.py:2687: error reduce using rule 40 (let_list -> error let_list .) + yacc.py:2565: (70) factor -> let let_list in expr . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: dot reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: star reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: div reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: plus reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: minus reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: less reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: lesseq reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: equal reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: semi reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: cpar reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: of reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: then reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: loop reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: comma reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: in reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: else reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: pool reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: ccur reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: fi reduce using rule 70 (factor -> let let_list in expr .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 197 yacc.py:2563: - yacc.py:2565: (39) let_list -> let_assign comma . let_list - yacc.py:2565: (38) let_list -> . let_assign - yacc.py:2565: (39) let_list -> . let_assign comma let_list - yacc.py:2565: (40) let_list -> . error let_list - yacc.py:2565: (41) let_list -> . error - yacc.py:2565: (42) let_assign -> . param larrow expr - yacc.py:2565: (43) let_assign -> . param - yacc.py:2565: (37) param -> . id colon type + yacc.py:2565: (37) let_list -> let_assign comma let_list . yacc.py:2566: - yacc.py:2687: error shift and go to state 194 - yacc.py:2687: id shift and go to state 47 + yacc.py:2687: in reduce using rule 37 (let_list -> let_assign comma let_list .) yacc.py:2689: - yacc.py:2714: let_assign shift and go to state 137 - yacc.py:2714: let_list shift and go to state 232 - yacc.py:2714: param shift and go to state 138 yacc.py:2561: yacc.py:2562:state 198 yacc.py:2563: - yacc.py:2565: (42) let_assign -> param larrow . expr - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: error shift and go to state 72 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 233 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (38) let_assign -> param larrow expr . + yacc.py:2566: + yacc.py:2687: comma reduce using rule 38 (let_assign -> param larrow expr .) + yacc.py:2687: in reduce using rule 38 (let_assign -> param larrow expr .) + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 199 yacc.py:2563: - yacc.py:2565: (88) factor -> case expr of . cases_list esac - yacc.py:2565: (90) factor -> case expr of . error esac - yacc.py:2565: (92) factor -> case expr of . cases_list error - yacc.py:2565: (44) cases_list -> . casep semi - yacc.py:2565: (45) cases_list -> . casep semi cases_list - yacc.py:2565: (46) cases_list -> . error cases_list - yacc.py:2565: (47) cases_list -> . error semi - yacc.py:2565: (48) casep -> . id colon type rarrow expr + yacc.py:2565: (71) factor -> case expr of cases_list . esac yacc.py:2566: - yacc.py:2687: error shift and go to state 235 - yacc.py:2687: id shift and go to state 237 + yacc.py:2687: esac shift and go to state 214 yacc.py:2689: - yacc.py:2714: cases_list shift and go to state 234 - yacc.py:2714: casep shift and go to state 236 yacc.py:2561: yacc.py:2562:state 200 yacc.py:2563: - yacc.py:2565: (91) factor -> case expr error . cases_list esac - yacc.py:2565: (44) cases_list -> . casep semi - yacc.py:2565: (45) cases_list -> . casep semi cases_list - yacc.py:2565: (46) cases_list -> . error cases_list - yacc.py:2565: (47) cases_list -> . error semi - yacc.py:2565: (48) casep -> . id colon type rarrow expr + yacc.py:2565: (40) cases_list -> casep . semi + yacc.py:2565: (41) cases_list -> casep . semi cases_list yacc.py:2566: - yacc.py:2687: error shift and go to state 238 - yacc.py:2687: id shift and go to state 237 + yacc.py:2687: semi shift and go to state 215 yacc.py:2689: - yacc.py:2714: cases_list shift and go to state 239 - yacc.py:2714: casep shift and go to state 236 yacc.py:2561: yacc.py:2562:state 201 yacc.py:2563: - yacc.py:2565: (89) factor -> case error of . cases_list esac - yacc.py:2565: (44) cases_list -> . casep semi - yacc.py:2565: (45) cases_list -> . casep semi cases_list - yacc.py:2565: (46) cases_list -> . error cases_list - yacc.py:2565: (47) cases_list -> . error semi - yacc.py:2565: (48) casep -> . id colon type rarrow expr + yacc.py:2565: (42) cases_list -> error . cases_list + yacc.py:2565: (43) cases_list -> error . semi + yacc.py:2565: (40) cases_list -> . casep semi + yacc.py:2565: (41) cases_list -> . casep semi cases_list + yacc.py:2565: (42) cases_list -> . error cases_list + yacc.py:2565: (43) cases_list -> . error semi + yacc.py:2565: (44) casep -> . id colon type rarrow expr yacc.py:2566: - yacc.py:2687: error shift and go to state 238 - yacc.py:2687: id shift and go to state 237 + yacc.py:2687: semi shift and go to state 217 + yacc.py:2687: error shift and go to state 201 + yacc.py:2687: id shift and go to state 202 yacc.py:2689: - yacc.py:2714: cases_list shift and go to state 240 - yacc.py:2714: casep shift and go to state 236 + yacc.py:2714: cases_list shift and go to state 216 + yacc.py:2714: casep shift and go to state 200 yacc.py:2561: yacc.py:2562:state 202 yacc.py:2563: - yacc.py:2565: (93) factor -> if expr then . expr else expr fi - yacc.py:2565: (95) factor -> if expr then . error else expr fi - yacc.py:2565: (96) factor -> if expr then . expr else error fi - yacc.py:2565: (98) factor -> if expr then . expr error error expr fi - yacc.py:2565: (99) factor -> if expr then . expr error expr fi - yacc.py:2565: (100) factor -> if expr then . expr else expr error - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 242 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 241 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (44) casep -> id . colon type rarrow expr + yacc.py:2566: + yacc.py:2687: colon shift and go to state 218 + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 203 yacc.py:2563: - yacc.py:2565: (97) factor -> if expr error . expr else expr fi - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: error shift and go to state 72 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 243 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (72) factor -> if expr then expr . else expr fi + yacc.py:2566: + yacc.py:2687: else shift and go to state 219 + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 204 yacc.py:2563: - yacc.py:2565: (94) factor -> if error then . expr else expr fi - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: error shift and go to state 72 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 244 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (73) factor -> while expr loop expr . pool + yacc.py:2566: + yacc.py:2687: pool shift and go to state 220 + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 205 yacc.py:2563: - yacc.py:2565: (101) factor -> if error fi . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 101 (factor -> if error fi .) - yacc.py:2687: dot reduce using rule 101 (factor -> if error fi .) - yacc.py:2687: star reduce using rule 101 (factor -> if error fi .) - yacc.py:2687: div reduce using rule 101 (factor -> if error fi .) - yacc.py:2687: plus reduce using rule 101 (factor -> if error fi .) - yacc.py:2687: minus reduce using rule 101 (factor -> if error fi .) - yacc.py:2687: less reduce using rule 101 (factor -> if error fi .) - yacc.py:2687: lesseq reduce using rule 101 (factor -> if error fi .) - yacc.py:2687: equal reduce using rule 101 (factor -> if error fi .) - yacc.py:2687: semi reduce using rule 101 (factor -> if error fi .) - yacc.py:2687: cpar reduce using rule 101 (factor -> if error fi .) - yacc.py:2687: error reduce using rule 101 (factor -> if error fi .) - yacc.py:2687: of reduce using rule 101 (factor -> if error fi .) - yacc.py:2687: then reduce using rule 101 (factor -> if error fi .) - yacc.py:2687: loop reduce using rule 101 (factor -> if error fi .) - yacc.py:2687: comma reduce using rule 101 (factor -> if error fi .) - yacc.py:2687: in reduce using rule 101 (factor -> if error fi .) - yacc.py:2687: else reduce using rule 101 (factor -> if error fi .) - yacc.py:2687: pool reduce using rule 101 (factor -> if error fi .) - yacc.py:2687: ccur reduce using rule 101 (factor -> if error fi .) - yacc.py:2687: fi reduce using rule 101 (factor -> if error fi .) + yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 221 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 206 yacc.py:2563: - yacc.py:2565: (102) factor -> while expr loop . expr pool - yacc.py:2565: (104) factor -> while expr loop . error pool - yacc.py:2565: (105) factor -> while expr loop . expr error - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 246 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 245 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 222 + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 207 yacc.py:2563: - yacc.py:2565: (106) factor -> while expr error . expr loop expr pool - yacc.py:2565: (107) factor -> while expr error . expr pool - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: error shift and go to state 72 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 247 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur error . ccur + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 223 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 208 yacc.py:2563: - yacc.py:2565: (103) factor -> while error loop . expr pool - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: error shift and go to state 72 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 248 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 224 + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 209 yacc.py:2563: - yacc.py:2565: (112) atom -> ocur block ccur . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 112 (atom -> ocur block ccur .) - yacc.py:2687: dot reduce using rule 112 (atom -> ocur block ccur .) - yacc.py:2687: star reduce using rule 112 (atom -> ocur block ccur .) - yacc.py:2687: div reduce using rule 112 (atom -> ocur block ccur .) - yacc.py:2687: plus reduce using rule 112 (atom -> ocur block ccur .) - yacc.py:2687: minus reduce using rule 112 (atom -> ocur block ccur .) - yacc.py:2687: less reduce using rule 112 (atom -> ocur block ccur .) - yacc.py:2687: lesseq reduce using rule 112 (atom -> ocur block ccur .) - yacc.py:2687: equal reduce using rule 112 (atom -> ocur block ccur .) - yacc.py:2687: semi reduce using rule 112 (atom -> ocur block ccur .) - yacc.py:2687: cpar reduce using rule 112 (atom -> ocur block ccur .) - yacc.py:2687: error reduce using rule 112 (atom -> ocur block ccur .) - yacc.py:2687: of reduce using rule 112 (atom -> ocur block ccur .) - yacc.py:2687: then reduce using rule 112 (atom -> ocur block ccur .) - yacc.py:2687: loop reduce using rule 112 (atom -> ocur block ccur .) - yacc.py:2687: comma reduce using rule 112 (atom -> ocur block ccur .) - yacc.py:2687: in reduce using rule 112 (atom -> ocur block ccur .) - yacc.py:2687: else reduce using rule 112 (atom -> ocur block ccur .) - yacc.py:2687: pool reduce using rule 112 (atom -> ocur block ccur .) - yacc.py:2687: ccur reduce using rule 112 (atom -> ocur block ccur .) - yacc.py:2687: fi reduce using rule 112 (atom -> ocur block ccur .) + yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 225 yacc.py:2689: yacc.py:2561: yacc.py:2562:state 210 yacc.py:2563: - yacc.py:2565: (115) atom -> ocur block error . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 115 (atom -> ocur block error .) - yacc.py:2687: dot reduce using rule 115 (atom -> ocur block error .) - yacc.py:2687: star reduce using rule 115 (atom -> ocur block error .) - yacc.py:2687: div reduce using rule 115 (atom -> ocur block error .) - yacc.py:2687: plus reduce using rule 115 (atom -> ocur block error .) - yacc.py:2687: minus reduce using rule 115 (atom -> ocur block error .) - yacc.py:2687: less reduce using rule 115 (atom -> ocur block error .) - yacc.py:2687: lesseq reduce using rule 115 (atom -> ocur block error .) - yacc.py:2687: equal reduce using rule 115 (atom -> ocur block error .) - yacc.py:2687: semi reduce using rule 115 (atom -> ocur block error .) - yacc.py:2687: cpar reduce using rule 115 (atom -> ocur block error .) - yacc.py:2687: error reduce using rule 115 (atom -> ocur block error .) - yacc.py:2687: of reduce using rule 115 (atom -> ocur block error .) - yacc.py:2687: then reduce using rule 115 (atom -> ocur block error .) - yacc.py:2687: loop reduce using rule 115 (atom -> ocur block error .) - yacc.py:2687: comma reduce using rule 115 (atom -> ocur block error .) - yacc.py:2687: in reduce using rule 115 (atom -> ocur block error .) - yacc.py:2687: else reduce using rule 115 (atom -> ocur block error .) - yacc.py:2687: pool reduce using rule 115 (atom -> ocur block error .) - yacc.py:2687: ccur reduce using rule 115 (atom -> ocur block error .) - yacc.py:2687: fi reduce using rule 115 (atom -> ocur block error .) + yacc.py:2565: (61) base_call -> error arroba type dot func_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: div reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: plus reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: minus reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: less reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: lesseq reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: equal reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: semi reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: cpar reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: arroba reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: dot reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: of reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: then reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: loop reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: comma reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: in reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: else reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: pool reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: ccur reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: fi reduce using rule 61 (base_call -> error arroba type dot func_call .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 211 yacc.py:2563: - yacc.py:2565: (114) atom -> ocur error ccur . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 114 (atom -> ocur error ccur .) - yacc.py:2687: dot reduce using rule 114 (atom -> ocur error ccur .) - yacc.py:2687: star reduce using rule 114 (atom -> ocur error ccur .) - yacc.py:2687: div reduce using rule 114 (atom -> ocur error ccur .) - yacc.py:2687: plus reduce using rule 114 (atom -> ocur error ccur .) - yacc.py:2687: minus reduce using rule 114 (atom -> ocur error ccur .) - yacc.py:2687: less reduce using rule 114 (atom -> ocur error ccur .) - yacc.py:2687: lesseq reduce using rule 114 (atom -> ocur error ccur .) - yacc.py:2687: equal reduce using rule 114 (atom -> ocur error ccur .) - yacc.py:2687: semi reduce using rule 114 (atom -> ocur error ccur .) - yacc.py:2687: cpar reduce using rule 114 (atom -> ocur error ccur .) - yacc.py:2687: error reduce using rule 114 (atom -> ocur error ccur .) - yacc.py:2687: of reduce using rule 114 (atom -> ocur error ccur .) - yacc.py:2687: then reduce using rule 114 (atom -> ocur error ccur .) - yacc.py:2687: loop reduce using rule 114 (atom -> ocur error ccur .) - yacc.py:2687: comma reduce using rule 114 (atom -> ocur error ccur .) - yacc.py:2687: in reduce using rule 114 (atom -> ocur error ccur .) - yacc.py:2687: else reduce using rule 114 (atom -> ocur error ccur .) - yacc.py:2687: pool reduce using rule 114 (atom -> ocur error ccur .) - yacc.py:2687: ccur reduce using rule 114 (atom -> ocur error ccur .) - yacc.py:2687: fi reduce using rule 114 (atom -> ocur error ccur .) + yacc.py:2565: (94) arg_list -> expr comma arg_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 94 (arg_list -> expr comma arg_list .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 212 yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur . expr ccur - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: error shift and go to state 72 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 249 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (59) base_call -> factor arroba type dot func_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: div reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: plus reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: minus reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: less reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: lesseq reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: equal reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: semi reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: cpar reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: arroba reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: dot reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: of reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: then reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: loop reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: comma reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: in reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: else reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: pool reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: ccur reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: fi reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 213 yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur . expr ccur - yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur . error ccur - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 251 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 250 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (62) base_call -> factor arroba error dot func_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: div reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: plus reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: minus reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: less reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: lesseq reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: equal reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: semi reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: cpar reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: arroba reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: dot reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: of reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: then reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: loop reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: comma reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: in reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: else reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: pool reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: ccur reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: fi reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 214 yacc.py:2563: - yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur . expr ccur - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: error shift and go to state 72 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 252 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (71) factor -> case expr of cases_list esac . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: dot reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: star reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: div reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: plus reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: minus reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: less reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: lesseq reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: equal reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: semi reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: cpar reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: of reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: then reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: loop reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: comma reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: in reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: else reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: pool reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: ccur reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: fi reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 215 yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur . expr ccur - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: error shift and go to state 72 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 253 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (40) cases_list -> casep semi . + yacc.py:2565: (41) cases_list -> casep semi . cases_list + yacc.py:2565: (40) cases_list -> . casep semi + yacc.py:2565: (41) cases_list -> . casep semi cases_list + yacc.py:2565: (42) cases_list -> . error cases_list + yacc.py:2565: (43) cases_list -> . error semi + yacc.py:2565: (44) casep -> . id colon type rarrow expr + yacc.py:2566: + yacc.py:2687: esac reduce using rule 40 (cases_list -> casep semi .) + yacc.py:2687: error shift and go to state 201 + yacc.py:2687: id shift and go to state 202 + yacc.py:2689: + yacc.py:2714: casep shift and go to state 200 + yacc.py:2714: cases_list shift and go to state 226 yacc.py:2561: yacc.py:2562:state 216 yacc.py:2563: - yacc.py:2565: (74) base_call -> error arroba type dot . func_call - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2565: (42) cases_list -> error cases_list . yacc.py:2566: - yacc.py:2687: id shift and go to state 187 - yacc.py:2687: error shift and go to state 188 + yacc.py:2687: esac reduce using rule 42 (cases_list -> error cases_list .) yacc.py:2689: - yacc.py:2714: func_call shift and go to state 254 yacc.py:2561: yacc.py:2562:state 217 yacc.py:2563: - yacc.py:2565: (120) block -> expr semi block . + yacc.py:2565: (43) cases_list -> error semi . yacc.py:2566: - yacc.py:2687: ccur reduce using rule 120 (block -> expr semi block .) - yacc.py:2687: error reduce using rule 120 (block -> expr semi block .) + yacc.py:2687: esac reduce using rule 43 (cases_list -> error semi .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 218 yacc.py:2563: - yacc.py:2565: (130) arg_list -> error . arg_list - yacc.py:2565: (121) block -> error . block - yacc.py:2565: (122) block -> error . semi - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (128) arg_list -> . expr - yacc.py:2565: (129) arg_list -> . expr comma arg_list - yacc.py:2565: (130) arg_list -> . error arg_list - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: semi shift and go to state 155 - yacc.py:2687: arroba shift and go to state 112 - yacc.py:2687: opar shift and go to state 115 - yacc.py:2687: error shift and go to state 218 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: arg_list shift and go to state 219 - yacc.py:2714: block shift and go to state 154 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: expr shift and go to state 220 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (44) casep -> id colon . type rarrow expr + yacc.py:2566: + yacc.py:2687: type shift and go to state 227 + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 219 yacc.py:2563: - yacc.py:2565: (130) arg_list -> error arg_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 130 (arg_list -> error arg_list .) + yacc.py:2565: (72) factor -> if expr then expr else . expr fi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 yacc.py:2689: + yacc.py:2714: expr shift and go to state 228 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: yacc.py:2562:state 220 yacc.py:2563: - yacc.py:2565: (79) factor -> error expr . cpar - yacc.py:2565: (128) arg_list -> expr . - yacc.py:2565: (129) arg_list -> expr . comma arg_list - yacc.py:2565: (119) block -> expr . semi - yacc.py:2565: (120) block -> expr . semi block - yacc.py:2566: - yacc.py:2609: ! shift/reduce conflict for cpar resolved as shift - yacc.py:2687: cpar shift and go to state 157 - yacc.py:2687: comma shift and go to state 222 - yacc.py:2687: semi shift and go to state 158 + yacc.py:2565: (73) factor -> while expr loop expr pool . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: dot reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: star reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: div reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: plus reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: minus reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: less reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: lesseq reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: equal reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: semi reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: cpar reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: of reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: then reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: loop reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: comma reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: in reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: else reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: pool reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: ccur reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: fi reduce using rule 73 (factor -> while expr loop expr pool .) yacc.py:2689: - yacc.py:2696: ! cpar [ reduce using rule 128 (arg_list -> expr .) ] - yacc.py:2700: yacc.py:2561: yacc.py:2562:state 221 yacc.py:2563: - yacc.py:2565: (125) func_call -> error opar args cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 125 (func_call -> error opar args cpar .) - yacc.py:2687: dot reduce using rule 125 (func_call -> error opar args cpar .) - yacc.py:2687: star reduce using rule 125 (func_call -> error opar args cpar .) - yacc.py:2687: div reduce using rule 125 (func_call -> error opar args cpar .) - yacc.py:2687: plus reduce using rule 125 (func_call -> error opar args cpar .) - yacc.py:2687: minus reduce using rule 125 (func_call -> error opar args cpar .) - yacc.py:2687: less reduce using rule 125 (func_call -> error opar args cpar .) - yacc.py:2687: lesseq reduce using rule 125 (func_call -> error opar args cpar .) - yacc.py:2687: equal reduce using rule 125 (func_call -> error opar args cpar .) - yacc.py:2687: semi reduce using rule 125 (func_call -> error opar args cpar .) - yacc.py:2687: cpar reduce using rule 125 (func_call -> error opar args cpar .) - yacc.py:2687: error reduce using rule 125 (func_call -> error opar args cpar .) - yacc.py:2687: of reduce using rule 125 (func_call -> error opar args cpar .) - yacc.py:2687: then reduce using rule 125 (func_call -> error opar args cpar .) - yacc.py:2687: loop reduce using rule 125 (func_call -> error opar args cpar .) - yacc.py:2687: comma reduce using rule 125 (func_call -> error opar args cpar .) - yacc.py:2687: in reduce using rule 125 (func_call -> error opar args cpar .) - yacc.py:2687: else reduce using rule 125 (func_call -> error opar args cpar .) - yacc.py:2687: pool reduce using rule 125 (func_call -> error opar args cpar .) - yacc.py:2687: ccur reduce using rule 125 (func_call -> error opar args cpar .) - yacc.py:2687: fi reduce using rule 125 (func_call -> error opar args cpar .) + yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 26 (def_func -> error opar formals cpar colon type ocur expr ccur .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 222 yacc.py:2563: - yacc.py:2565: (129) arg_list -> expr comma . arg_list - yacc.py:2565: (128) arg_list -> . expr - yacc.py:2565: (129) arg_list -> . expr comma arg_list - yacc.py:2565: (130) arg_list -> . error arg_list - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 256 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 169 - yacc.py:2714: arg_list shift and go to state 255 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 + yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 25 (def_func -> id opar formals cpar colon type ocur expr ccur .) + yacc.py:2689: yacc.py:2561: yacc.py:2562:state 223 yacc.py:2563: - yacc.py:2565: (123) func_call -> id opar args cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 123 (func_call -> id opar args cpar .) - yacc.py:2687: dot reduce using rule 123 (func_call -> id opar args cpar .) - yacc.py:2687: star reduce using rule 123 (func_call -> id opar args cpar .) - yacc.py:2687: div reduce using rule 123 (func_call -> id opar args cpar .) - yacc.py:2687: plus reduce using rule 123 (func_call -> id opar args cpar .) - yacc.py:2687: minus reduce using rule 123 (func_call -> id opar args cpar .) - yacc.py:2687: less reduce using rule 123 (func_call -> id opar args cpar .) - yacc.py:2687: lesseq reduce using rule 123 (func_call -> id opar args cpar .) - yacc.py:2687: equal reduce using rule 123 (func_call -> id opar args cpar .) - yacc.py:2687: semi reduce using rule 123 (func_call -> id opar args cpar .) - yacc.py:2687: cpar reduce using rule 123 (func_call -> id opar args cpar .) - yacc.py:2687: error reduce using rule 123 (func_call -> id opar args cpar .) - yacc.py:2687: of reduce using rule 123 (func_call -> id opar args cpar .) - yacc.py:2687: then reduce using rule 123 (func_call -> id opar args cpar .) - yacc.py:2687: loop reduce using rule 123 (func_call -> id opar args cpar .) - yacc.py:2687: comma reduce using rule 123 (func_call -> id opar args cpar .) - yacc.py:2687: in reduce using rule 123 (func_call -> id opar args cpar .) - yacc.py:2687: else reduce using rule 123 (func_call -> id opar args cpar .) - yacc.py:2687: pool reduce using rule 123 (func_call -> id opar args cpar .) - yacc.py:2687: ccur reduce using rule 123 (func_call -> id opar args cpar .) - yacc.py:2687: fi reduce using rule 123 (func_call -> id opar args cpar .) + yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur error ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 29 (def_func -> id opar formals cpar colon type ocur error ccur .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 224 yacc.py:2563: - yacc.py:2565: (124) func_call -> id opar error cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 124 (func_call -> id opar error cpar .) - yacc.py:2687: dot reduce using rule 124 (func_call -> id opar error cpar .) - yacc.py:2687: star reduce using rule 124 (func_call -> id opar error cpar .) - yacc.py:2687: div reduce using rule 124 (func_call -> id opar error cpar .) - yacc.py:2687: plus reduce using rule 124 (func_call -> id opar error cpar .) - yacc.py:2687: minus reduce using rule 124 (func_call -> id opar error cpar .) - yacc.py:2687: less reduce using rule 124 (func_call -> id opar error cpar .) - yacc.py:2687: lesseq reduce using rule 124 (func_call -> id opar error cpar .) - yacc.py:2687: equal reduce using rule 124 (func_call -> id opar error cpar .) - yacc.py:2687: semi reduce using rule 124 (func_call -> id opar error cpar .) - yacc.py:2687: cpar reduce using rule 124 (func_call -> id opar error cpar .) - yacc.py:2687: error reduce using rule 124 (func_call -> id opar error cpar .) - yacc.py:2687: of reduce using rule 124 (func_call -> id opar error cpar .) - yacc.py:2687: then reduce using rule 124 (func_call -> id opar error cpar .) - yacc.py:2687: loop reduce using rule 124 (func_call -> id opar error cpar .) - yacc.py:2687: comma reduce using rule 124 (func_call -> id opar error cpar .) - yacc.py:2687: in reduce using rule 124 (func_call -> id opar error cpar .) - yacc.py:2687: else reduce using rule 124 (func_call -> id opar error cpar .) - yacc.py:2687: pool reduce using rule 124 (func_call -> id opar error cpar .) - yacc.py:2687: ccur reduce using rule 124 (func_call -> id opar error cpar .) - yacc.py:2687: fi reduce using rule 124 (func_call -> id opar error cpar .) + yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 28 (def_func -> id opar formals cpar colon error ocur expr ccur .) yacc.py:2689: yacc.py:2561: yacc.py:2562:state 225 yacc.py:2563: - yacc.py:2565: (72) base_call -> factor arroba type dot . func_call - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur expr ccur . yacc.py:2566: - yacc.py:2687: id shift and go to state 187 - yacc.py:2687: error shift and go to state 188 + yacc.py:2687: semi reduce using rule 27 (def_func -> id opar error cpar colon type ocur expr ccur .) yacc.py:2689: - yacc.py:2714: func_call shift and go to state 257 yacc.py:2561: yacc.py:2562:state 226 yacc.py:2563: - yacc.py:2565: (75) base_call -> factor arroba error dot . func_call - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar + yacc.py:2565: (41) cases_list -> casep semi cases_list . yacc.py:2566: - yacc.py:2687: id shift and go to state 187 - yacc.py:2687: error shift and go to state 188 + yacc.py:2687: esac reduce using rule 41 (cases_list -> casep semi cases_list .) yacc.py:2689: - yacc.py:2714: func_call shift and go to state 258 yacc.py:2561: yacc.py:2562:state 227 yacc.py:2563: - yacc.py:2565: (125) func_call -> error opar . args cpar - yacc.py:2565: (126) args -> . arg_list - yacc.py:2565: (127) args -> . arg_list_empty - yacc.py:2565: (128) arg_list -> . expr - yacc.py:2565: (129) arg_list -> . expr comma arg_list - yacc.py:2565: (130) arg_list -> . error arg_list - yacc.py:2565: (131) arg_list_empty -> . epsilon - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 256 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: args shift and go to state 161 - yacc.py:2714: arg_list shift and go to state 163 - yacc.py:2714: arg_list_empty shift and go to state 164 - yacc.py:2714: expr shift and go to state 169 - yacc.py:2714: epsilon shift and go to state 165 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 - yacc.py:2561: - yacc.py:2562:state 228 - yacc.py:2563: - yacc.py:2565: (84) factor -> let let_list in expr . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 84 (factor -> let let_list in expr .) - yacc.py:2687: dot reduce using rule 84 (factor -> let let_list in expr .) - yacc.py:2687: star reduce using rule 84 (factor -> let let_list in expr .) - yacc.py:2687: div reduce using rule 84 (factor -> let let_list in expr .) - yacc.py:2687: plus reduce using rule 84 (factor -> let let_list in expr .) - yacc.py:2687: minus reduce using rule 84 (factor -> let let_list in expr .) - yacc.py:2687: less reduce using rule 84 (factor -> let let_list in expr .) - yacc.py:2687: lesseq reduce using rule 84 (factor -> let let_list in expr .) - yacc.py:2687: equal reduce using rule 84 (factor -> let let_list in expr .) - yacc.py:2687: semi reduce using rule 84 (factor -> let let_list in expr .) - yacc.py:2687: cpar reduce using rule 84 (factor -> let let_list in expr .) - yacc.py:2687: error reduce using rule 84 (factor -> let let_list in expr .) - yacc.py:2687: of reduce using rule 84 (factor -> let let_list in expr .) - yacc.py:2687: then reduce using rule 84 (factor -> let let_list in expr .) - yacc.py:2687: loop reduce using rule 84 (factor -> let let_list in expr .) - yacc.py:2687: comma reduce using rule 84 (factor -> let let_list in expr .) - yacc.py:2687: in reduce using rule 84 (factor -> let let_list in expr .) - yacc.py:2687: else reduce using rule 84 (factor -> let let_list in expr .) - yacc.py:2687: pool reduce using rule 84 (factor -> let let_list in expr .) - yacc.py:2687: ccur reduce using rule 84 (factor -> let let_list in expr .) - yacc.py:2687: fi reduce using rule 84 (factor -> let let_list in expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 229 - yacc.py:2563: - yacc.py:2565: (86) factor -> let let_list in error . - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift - yacc.py:2666: ! shift/reduce conflict for error resolved as shift - yacc.py:2687: dot reduce using rule 86 (factor -> let let_list in error .) - yacc.py:2687: star reduce using rule 86 (factor -> let let_list in error .) - yacc.py:2687: div reduce using rule 86 (factor -> let let_list in error .) - yacc.py:2687: plus reduce using rule 86 (factor -> let let_list in error .) - yacc.py:2687: minus reduce using rule 86 (factor -> let let_list in error .) - yacc.py:2687: less reduce using rule 86 (factor -> let let_list in error .) - yacc.py:2687: lesseq reduce using rule 86 (factor -> let let_list in error .) - yacc.py:2687: equal reduce using rule 86 (factor -> let let_list in error .) - yacc.py:2687: semi reduce using rule 86 (factor -> let let_list in error .) - yacc.py:2687: cpar reduce using rule 86 (factor -> let let_list in error .) - yacc.py:2687: of reduce using rule 86 (factor -> let let_list in error .) - yacc.py:2687: then reduce using rule 86 (factor -> let let_list in error .) - yacc.py:2687: loop reduce using rule 86 (factor -> let let_list in error .) - yacc.py:2687: comma reduce using rule 86 (factor -> let let_list in error .) - yacc.py:2687: in reduce using rule 86 (factor -> let let_list in error .) - yacc.py:2687: else reduce using rule 86 (factor -> let let_list in error .) - yacc.py:2687: pool reduce using rule 86 (factor -> let let_list in error .) - yacc.py:2687: ccur reduce using rule 86 (factor -> let let_list in error .) - yacc.py:2687: fi reduce using rule 86 (factor -> let let_list in error .) - yacc.py:2687: arroba shift and go to state 112 - yacc.py:2687: opar shift and go to state 115 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: error shift and go to state 111 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2696: ! arroba [ reduce using rule 86 (factor -> let let_list in error .) ] - yacc.py:2696: ! error [ reduce using rule 86 (factor -> let let_list in error .) ] - yacc.py:2700: - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: expr shift and go to state 113 - yacc.py:2714: block shift and go to state 114 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: atom shift and go to state 83 - yacc.py:2561: - yacc.py:2562:state 230 - yacc.py:2563: - yacc.py:2565: (87) factor -> let let_list error expr . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 87 (factor -> let let_list error expr .) - yacc.py:2687: dot reduce using rule 87 (factor -> let let_list error expr .) - yacc.py:2687: star reduce using rule 87 (factor -> let let_list error expr .) - yacc.py:2687: div reduce using rule 87 (factor -> let let_list error expr .) - yacc.py:2687: plus reduce using rule 87 (factor -> let let_list error expr .) - yacc.py:2687: minus reduce using rule 87 (factor -> let let_list error expr .) - yacc.py:2687: less reduce using rule 87 (factor -> let let_list error expr .) - yacc.py:2687: lesseq reduce using rule 87 (factor -> let let_list error expr .) - yacc.py:2687: equal reduce using rule 87 (factor -> let let_list error expr .) - yacc.py:2687: semi reduce using rule 87 (factor -> let let_list error expr .) - yacc.py:2687: cpar reduce using rule 87 (factor -> let let_list error expr .) - yacc.py:2687: error reduce using rule 87 (factor -> let let_list error expr .) - yacc.py:2687: of reduce using rule 87 (factor -> let let_list error expr .) - yacc.py:2687: then reduce using rule 87 (factor -> let let_list error expr .) - yacc.py:2687: loop reduce using rule 87 (factor -> let let_list error expr .) - yacc.py:2687: comma reduce using rule 87 (factor -> let let_list error expr .) - yacc.py:2687: in reduce using rule 87 (factor -> let let_list error expr .) - yacc.py:2687: else reduce using rule 87 (factor -> let let_list error expr .) - yacc.py:2687: pool reduce using rule 87 (factor -> let let_list error expr .) - yacc.py:2687: ccur reduce using rule 87 (factor -> let let_list error expr .) - yacc.py:2687: fi reduce using rule 87 (factor -> let let_list error expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 231 - yacc.py:2563: - yacc.py:2565: (85) factor -> let error in expr . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 85 (factor -> let error in expr .) - yacc.py:2687: dot reduce using rule 85 (factor -> let error in expr .) - yacc.py:2687: star reduce using rule 85 (factor -> let error in expr .) - yacc.py:2687: div reduce using rule 85 (factor -> let error in expr .) - yacc.py:2687: plus reduce using rule 85 (factor -> let error in expr .) - yacc.py:2687: minus reduce using rule 85 (factor -> let error in expr .) - yacc.py:2687: less reduce using rule 85 (factor -> let error in expr .) - yacc.py:2687: lesseq reduce using rule 85 (factor -> let error in expr .) - yacc.py:2687: equal reduce using rule 85 (factor -> let error in expr .) - yacc.py:2687: semi reduce using rule 85 (factor -> let error in expr .) - yacc.py:2687: cpar reduce using rule 85 (factor -> let error in expr .) - yacc.py:2687: error reduce using rule 85 (factor -> let error in expr .) - yacc.py:2687: of reduce using rule 85 (factor -> let error in expr .) - yacc.py:2687: then reduce using rule 85 (factor -> let error in expr .) - yacc.py:2687: loop reduce using rule 85 (factor -> let error in expr .) - yacc.py:2687: comma reduce using rule 85 (factor -> let error in expr .) - yacc.py:2687: in reduce using rule 85 (factor -> let error in expr .) - yacc.py:2687: else reduce using rule 85 (factor -> let error in expr .) - yacc.py:2687: pool reduce using rule 85 (factor -> let error in expr .) - yacc.py:2687: ccur reduce using rule 85 (factor -> let error in expr .) - yacc.py:2687: fi reduce using rule 85 (factor -> let error in expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 232 - yacc.py:2563: - yacc.py:2565: (39) let_list -> let_assign comma let_list . - yacc.py:2566: - yacc.py:2687: in reduce using rule 39 (let_list -> let_assign comma let_list .) - yacc.py:2687: error reduce using rule 39 (let_list -> let_assign comma let_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 233 - yacc.py:2563: - yacc.py:2565: (42) let_assign -> param larrow expr . - yacc.py:2566: - yacc.py:2687: comma reduce using rule 42 (let_assign -> param larrow expr .) - yacc.py:2687: in reduce using rule 42 (let_assign -> param larrow expr .) - yacc.py:2687: error reduce using rule 42 (let_assign -> param larrow expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 234 - yacc.py:2563: - yacc.py:2565: (88) factor -> case expr of cases_list . esac - yacc.py:2565: (92) factor -> case expr of cases_list . error - yacc.py:2566: - yacc.py:2687: esac shift and go to state 259 - yacc.py:2687: error shift and go to state 260 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 235 - yacc.py:2563: - yacc.py:2565: (90) factor -> case expr of error . esac - yacc.py:2565: (46) cases_list -> error . cases_list - yacc.py:2565: (47) cases_list -> error . semi - yacc.py:2565: (44) cases_list -> . casep semi - yacc.py:2565: (45) cases_list -> . casep semi cases_list - yacc.py:2565: (46) cases_list -> . error cases_list - yacc.py:2565: (47) cases_list -> . error semi - yacc.py:2565: (48) casep -> . id colon type rarrow expr - yacc.py:2566: - yacc.py:2687: esac shift and go to state 261 - yacc.py:2687: semi shift and go to state 263 - yacc.py:2687: error shift and go to state 238 - yacc.py:2687: id shift and go to state 237 - yacc.py:2689: - yacc.py:2714: cases_list shift and go to state 262 - yacc.py:2714: casep shift and go to state 236 - yacc.py:2561: - yacc.py:2562:state 236 - yacc.py:2563: - yacc.py:2565: (44) cases_list -> casep . semi - yacc.py:2565: (45) cases_list -> casep . semi cases_list - yacc.py:2566: - yacc.py:2687: semi shift and go to state 264 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 237 - yacc.py:2563: - yacc.py:2565: (48) casep -> id . colon type rarrow expr - yacc.py:2566: - yacc.py:2687: colon shift and go to state 265 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 238 - yacc.py:2563: - yacc.py:2565: (46) cases_list -> error . cases_list - yacc.py:2565: (47) cases_list -> error . semi - yacc.py:2565: (44) cases_list -> . casep semi - yacc.py:2565: (45) cases_list -> . casep semi cases_list - yacc.py:2565: (46) cases_list -> . error cases_list - yacc.py:2565: (47) cases_list -> . error semi - yacc.py:2565: (48) casep -> . id colon type rarrow expr - yacc.py:2566: - yacc.py:2687: semi shift and go to state 263 - yacc.py:2687: error shift and go to state 238 - yacc.py:2687: id shift and go to state 237 - yacc.py:2689: - yacc.py:2714: cases_list shift and go to state 262 - yacc.py:2714: casep shift and go to state 236 - yacc.py:2561: - yacc.py:2562:state 239 - yacc.py:2563: - yacc.py:2565: (91) factor -> case expr error cases_list . esac - yacc.py:2566: - yacc.py:2687: esac shift and go to state 266 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 240 - yacc.py:2563: - yacc.py:2565: (89) factor -> case error of cases_list . esac - yacc.py:2566: - yacc.py:2687: esac shift and go to state 267 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 241 - yacc.py:2563: - yacc.py:2565: (93) factor -> if expr then expr . else expr fi - yacc.py:2565: (96) factor -> if expr then expr . else error fi - yacc.py:2565: (98) factor -> if expr then expr . error error expr fi - yacc.py:2565: (99) factor -> if expr then expr . error expr fi - yacc.py:2565: (100) factor -> if expr then expr . else expr error - yacc.py:2566: - yacc.py:2687: else shift and go to state 268 - yacc.py:2687: error shift and go to state 269 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 242 - yacc.py:2563: - yacc.py:2565: (95) factor -> if expr then error . else expr fi - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: else shift and go to state 270 - yacc.py:2687: arroba shift and go to state 112 - yacc.py:2687: opar shift and go to state 115 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: error shift and go to state 111 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 113 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: block shift and go to state 114 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: atom shift and go to state 83 - yacc.py:2561: - yacc.py:2562:state 243 - yacc.py:2563: - yacc.py:2565: (97) factor -> if expr error expr . else expr fi - yacc.py:2566: - yacc.py:2687: else shift and go to state 271 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 244 - yacc.py:2563: - yacc.py:2565: (94) factor -> if error then expr . else expr fi - yacc.py:2566: - yacc.py:2687: else shift and go to state 272 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 245 - yacc.py:2563: - yacc.py:2565: (102) factor -> while expr loop expr . pool - yacc.py:2565: (105) factor -> while expr loop expr . error - yacc.py:2566: - yacc.py:2687: pool shift and go to state 273 - yacc.py:2687: error shift and go to state 274 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 246 - yacc.py:2563: - yacc.py:2565: (104) factor -> while expr loop error . pool - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: pool shift and go to state 275 - yacc.py:2687: arroba shift and go to state 112 - yacc.py:2687: opar shift and go to state 115 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: error shift and go to state 111 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 113 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: block shift and go to state 114 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: atom shift and go to state 83 - yacc.py:2561: - yacc.py:2562:state 247 - yacc.py:2563: - yacc.py:2565: (106) factor -> while expr error expr . loop expr pool - yacc.py:2565: (107) factor -> while expr error expr . pool - yacc.py:2566: - yacc.py:2687: loop shift and go to state 276 - yacc.py:2687: pool shift and go to state 277 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 248 - yacc.py:2563: - yacc.py:2565: (103) factor -> while error loop expr . pool - yacc.py:2566: - yacc.py:2687: pool shift and go to state 278 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 249 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur expr . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 279 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 250 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur expr . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 280 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 251 - yacc.py:2563: - yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur error . ccur - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 281 - yacc.py:2687: arroba shift and go to state 112 - yacc.py:2687: opar shift and go to state 115 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: error shift and go to state 111 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: expr shift and go to state 113 - yacc.py:2714: block shift and go to state 114 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: atom shift and go to state 83 - yacc.py:2561: - yacc.py:2562:state 252 - yacc.py:2563: - yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur expr . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 282 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 253 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur expr . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 283 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 254 - yacc.py:2563: - yacc.py:2565: (74) base_call -> error arroba type dot func_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 74 (base_call -> error arroba type dot func_call .) - yacc.py:2687: div reduce using rule 74 (base_call -> error arroba type dot func_call .) - yacc.py:2687: plus reduce using rule 74 (base_call -> error arroba type dot func_call .) - yacc.py:2687: minus reduce using rule 74 (base_call -> error arroba type dot func_call .) - yacc.py:2687: less reduce using rule 74 (base_call -> error arroba type dot func_call .) - yacc.py:2687: lesseq reduce using rule 74 (base_call -> error arroba type dot func_call .) - yacc.py:2687: equal reduce using rule 74 (base_call -> error arroba type dot func_call .) - yacc.py:2687: semi reduce using rule 74 (base_call -> error arroba type dot func_call .) - yacc.py:2687: cpar reduce using rule 74 (base_call -> error arroba type dot func_call .) - yacc.py:2687: error reduce using rule 74 (base_call -> error arroba type dot func_call .) - yacc.py:2687: arroba reduce using rule 74 (base_call -> error arroba type dot func_call .) - yacc.py:2687: dot reduce using rule 74 (base_call -> error arroba type dot func_call .) - yacc.py:2687: of reduce using rule 74 (base_call -> error arroba type dot func_call .) - yacc.py:2687: then reduce using rule 74 (base_call -> error arroba type dot func_call .) - yacc.py:2687: loop reduce using rule 74 (base_call -> error arroba type dot func_call .) - yacc.py:2687: comma reduce using rule 74 (base_call -> error arroba type dot func_call .) - yacc.py:2687: in reduce using rule 74 (base_call -> error arroba type dot func_call .) - yacc.py:2687: else reduce using rule 74 (base_call -> error arroba type dot func_call .) - yacc.py:2687: pool reduce using rule 74 (base_call -> error arroba type dot func_call .) - yacc.py:2687: ccur reduce using rule 74 (base_call -> error arroba type dot func_call .) - yacc.py:2687: fi reduce using rule 74 (base_call -> error arroba type dot func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 255 - yacc.py:2563: - yacc.py:2565: (129) arg_list -> expr comma arg_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 129 (arg_list -> expr comma arg_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 256 - yacc.py:2563: - yacc.py:2565: (130) arg_list -> error . arg_list - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (128) arg_list -> . expr - yacc.py:2565: (129) arg_list -> . expr comma arg_list - yacc.py:2565: (130) arg_list -> . error arg_list - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: arroba shift and go to state 112 - yacc.py:2687: opar shift and go to state 115 - yacc.py:2687: error shift and go to state 218 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: arg_list shift and go to state 219 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: expr shift and go to state 220 - yacc.py:2714: block shift and go to state 114 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: atom shift and go to state 83 - yacc.py:2561: - yacc.py:2562:state 257 - yacc.py:2563: - yacc.py:2565: (72) base_call -> factor arroba type dot func_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 72 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: div reduce using rule 72 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: plus reduce using rule 72 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: minus reduce using rule 72 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: less reduce using rule 72 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: lesseq reduce using rule 72 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: equal reduce using rule 72 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: semi reduce using rule 72 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: cpar reduce using rule 72 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: error reduce using rule 72 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: arroba reduce using rule 72 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: dot reduce using rule 72 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: of reduce using rule 72 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: then reduce using rule 72 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: loop reduce using rule 72 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: comma reduce using rule 72 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: in reduce using rule 72 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: else reduce using rule 72 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: pool reduce using rule 72 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: ccur reduce using rule 72 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: fi reduce using rule 72 (base_call -> factor arroba type dot func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 258 - yacc.py:2563: - yacc.py:2565: (75) base_call -> factor arroba error dot func_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 75 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: div reduce using rule 75 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: plus reduce using rule 75 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: minus reduce using rule 75 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: less reduce using rule 75 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: lesseq reduce using rule 75 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: equal reduce using rule 75 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: semi reduce using rule 75 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: cpar reduce using rule 75 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: error reduce using rule 75 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: arroba reduce using rule 75 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: dot reduce using rule 75 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: of reduce using rule 75 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: then reduce using rule 75 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: loop reduce using rule 75 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: comma reduce using rule 75 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: in reduce using rule 75 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: else reduce using rule 75 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: pool reduce using rule 75 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: ccur reduce using rule 75 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: fi reduce using rule 75 (base_call -> factor arroba error dot func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 259 - yacc.py:2563: - yacc.py:2565: (88) factor -> case expr of cases_list esac . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 88 (factor -> case expr of cases_list esac .) - yacc.py:2687: dot reduce using rule 88 (factor -> case expr of cases_list esac .) - yacc.py:2687: star reduce using rule 88 (factor -> case expr of cases_list esac .) - yacc.py:2687: div reduce using rule 88 (factor -> case expr of cases_list esac .) - yacc.py:2687: plus reduce using rule 88 (factor -> case expr of cases_list esac .) - yacc.py:2687: minus reduce using rule 88 (factor -> case expr of cases_list esac .) - yacc.py:2687: less reduce using rule 88 (factor -> case expr of cases_list esac .) - yacc.py:2687: lesseq reduce using rule 88 (factor -> case expr of cases_list esac .) - yacc.py:2687: equal reduce using rule 88 (factor -> case expr of cases_list esac .) - yacc.py:2687: semi reduce using rule 88 (factor -> case expr of cases_list esac .) - yacc.py:2687: cpar reduce using rule 88 (factor -> case expr of cases_list esac .) - yacc.py:2687: error reduce using rule 88 (factor -> case expr of cases_list esac .) - yacc.py:2687: of reduce using rule 88 (factor -> case expr of cases_list esac .) - yacc.py:2687: then reduce using rule 88 (factor -> case expr of cases_list esac .) - yacc.py:2687: loop reduce using rule 88 (factor -> case expr of cases_list esac .) - yacc.py:2687: comma reduce using rule 88 (factor -> case expr of cases_list esac .) - yacc.py:2687: in reduce using rule 88 (factor -> case expr of cases_list esac .) - yacc.py:2687: else reduce using rule 88 (factor -> case expr of cases_list esac .) - yacc.py:2687: pool reduce using rule 88 (factor -> case expr of cases_list esac .) - yacc.py:2687: ccur reduce using rule 88 (factor -> case expr of cases_list esac .) - yacc.py:2687: fi reduce using rule 88 (factor -> case expr of cases_list esac .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 260 - yacc.py:2563: - yacc.py:2565: (92) factor -> case expr of cases_list error . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 92 (factor -> case expr of cases_list error .) - yacc.py:2687: dot reduce using rule 92 (factor -> case expr of cases_list error .) - yacc.py:2687: star reduce using rule 92 (factor -> case expr of cases_list error .) - yacc.py:2687: div reduce using rule 92 (factor -> case expr of cases_list error .) - yacc.py:2687: plus reduce using rule 92 (factor -> case expr of cases_list error .) - yacc.py:2687: minus reduce using rule 92 (factor -> case expr of cases_list error .) - yacc.py:2687: less reduce using rule 92 (factor -> case expr of cases_list error .) - yacc.py:2687: lesseq reduce using rule 92 (factor -> case expr of cases_list error .) - yacc.py:2687: equal reduce using rule 92 (factor -> case expr of cases_list error .) - yacc.py:2687: semi reduce using rule 92 (factor -> case expr of cases_list error .) - yacc.py:2687: cpar reduce using rule 92 (factor -> case expr of cases_list error .) - yacc.py:2687: error reduce using rule 92 (factor -> case expr of cases_list error .) - yacc.py:2687: of reduce using rule 92 (factor -> case expr of cases_list error .) - yacc.py:2687: then reduce using rule 92 (factor -> case expr of cases_list error .) - yacc.py:2687: loop reduce using rule 92 (factor -> case expr of cases_list error .) - yacc.py:2687: comma reduce using rule 92 (factor -> case expr of cases_list error .) - yacc.py:2687: in reduce using rule 92 (factor -> case expr of cases_list error .) - yacc.py:2687: else reduce using rule 92 (factor -> case expr of cases_list error .) - yacc.py:2687: pool reduce using rule 92 (factor -> case expr of cases_list error .) - yacc.py:2687: ccur reduce using rule 92 (factor -> case expr of cases_list error .) - yacc.py:2687: fi reduce using rule 92 (factor -> case expr of cases_list error .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 261 - yacc.py:2563: - yacc.py:2565: (90) factor -> case expr of error esac . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 90 (factor -> case expr of error esac .) - yacc.py:2687: dot reduce using rule 90 (factor -> case expr of error esac .) - yacc.py:2687: star reduce using rule 90 (factor -> case expr of error esac .) - yacc.py:2687: div reduce using rule 90 (factor -> case expr of error esac .) - yacc.py:2687: plus reduce using rule 90 (factor -> case expr of error esac .) - yacc.py:2687: minus reduce using rule 90 (factor -> case expr of error esac .) - yacc.py:2687: less reduce using rule 90 (factor -> case expr of error esac .) - yacc.py:2687: lesseq reduce using rule 90 (factor -> case expr of error esac .) - yacc.py:2687: equal reduce using rule 90 (factor -> case expr of error esac .) - yacc.py:2687: semi reduce using rule 90 (factor -> case expr of error esac .) - yacc.py:2687: cpar reduce using rule 90 (factor -> case expr of error esac .) - yacc.py:2687: error reduce using rule 90 (factor -> case expr of error esac .) - yacc.py:2687: of reduce using rule 90 (factor -> case expr of error esac .) - yacc.py:2687: then reduce using rule 90 (factor -> case expr of error esac .) - yacc.py:2687: loop reduce using rule 90 (factor -> case expr of error esac .) - yacc.py:2687: comma reduce using rule 90 (factor -> case expr of error esac .) - yacc.py:2687: in reduce using rule 90 (factor -> case expr of error esac .) - yacc.py:2687: else reduce using rule 90 (factor -> case expr of error esac .) - yacc.py:2687: pool reduce using rule 90 (factor -> case expr of error esac .) - yacc.py:2687: ccur reduce using rule 90 (factor -> case expr of error esac .) - yacc.py:2687: fi reduce using rule 90 (factor -> case expr of error esac .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 262 - yacc.py:2563: - yacc.py:2565: (46) cases_list -> error cases_list . - yacc.py:2566: - yacc.py:2687: esac reduce using rule 46 (cases_list -> error cases_list .) - yacc.py:2687: error reduce using rule 46 (cases_list -> error cases_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 263 - yacc.py:2563: - yacc.py:2565: (47) cases_list -> error semi . - yacc.py:2566: - yacc.py:2687: esac reduce using rule 47 (cases_list -> error semi .) - yacc.py:2687: error reduce using rule 47 (cases_list -> error semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 264 - yacc.py:2563: - yacc.py:2565: (44) cases_list -> casep semi . - yacc.py:2565: (45) cases_list -> casep semi . cases_list - yacc.py:2565: (44) cases_list -> . casep semi - yacc.py:2565: (45) cases_list -> . casep semi cases_list - yacc.py:2565: (46) cases_list -> . error cases_list - yacc.py:2565: (47) cases_list -> . error semi - yacc.py:2565: (48) casep -> . id colon type rarrow expr - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for error resolved as shift - yacc.py:2687: esac reduce using rule 44 (cases_list -> casep semi .) - yacc.py:2687: error shift and go to state 238 - yacc.py:2687: id shift and go to state 237 - yacc.py:2689: - yacc.py:2696: ! error [ reduce using rule 44 (cases_list -> casep semi .) ] - yacc.py:2700: - yacc.py:2714: casep shift and go to state 236 - yacc.py:2714: cases_list shift and go to state 284 - yacc.py:2561: - yacc.py:2562:state 265 - yacc.py:2563: - yacc.py:2565: (48) casep -> id colon . type rarrow expr - yacc.py:2566: - yacc.py:2687: type shift and go to state 285 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 266 - yacc.py:2563: - yacc.py:2565: (91) factor -> case expr error cases_list esac . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 91 (factor -> case expr error cases_list esac .) - yacc.py:2687: dot reduce using rule 91 (factor -> case expr error cases_list esac .) - yacc.py:2687: star reduce using rule 91 (factor -> case expr error cases_list esac .) - yacc.py:2687: div reduce using rule 91 (factor -> case expr error cases_list esac .) - yacc.py:2687: plus reduce using rule 91 (factor -> case expr error cases_list esac .) - yacc.py:2687: minus reduce using rule 91 (factor -> case expr error cases_list esac .) - yacc.py:2687: less reduce using rule 91 (factor -> case expr error cases_list esac .) - yacc.py:2687: lesseq reduce using rule 91 (factor -> case expr error cases_list esac .) - yacc.py:2687: equal reduce using rule 91 (factor -> case expr error cases_list esac .) - yacc.py:2687: semi reduce using rule 91 (factor -> case expr error cases_list esac .) - yacc.py:2687: cpar reduce using rule 91 (factor -> case expr error cases_list esac .) - yacc.py:2687: error reduce using rule 91 (factor -> case expr error cases_list esac .) - yacc.py:2687: of reduce using rule 91 (factor -> case expr error cases_list esac .) - yacc.py:2687: then reduce using rule 91 (factor -> case expr error cases_list esac .) - yacc.py:2687: loop reduce using rule 91 (factor -> case expr error cases_list esac .) - yacc.py:2687: comma reduce using rule 91 (factor -> case expr error cases_list esac .) - yacc.py:2687: in reduce using rule 91 (factor -> case expr error cases_list esac .) - yacc.py:2687: else reduce using rule 91 (factor -> case expr error cases_list esac .) - yacc.py:2687: pool reduce using rule 91 (factor -> case expr error cases_list esac .) - yacc.py:2687: ccur reduce using rule 91 (factor -> case expr error cases_list esac .) - yacc.py:2687: fi reduce using rule 91 (factor -> case expr error cases_list esac .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 267 - yacc.py:2563: - yacc.py:2565: (89) factor -> case error of cases_list esac . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 89 (factor -> case error of cases_list esac .) - yacc.py:2687: dot reduce using rule 89 (factor -> case error of cases_list esac .) - yacc.py:2687: star reduce using rule 89 (factor -> case error of cases_list esac .) - yacc.py:2687: div reduce using rule 89 (factor -> case error of cases_list esac .) - yacc.py:2687: plus reduce using rule 89 (factor -> case error of cases_list esac .) - yacc.py:2687: minus reduce using rule 89 (factor -> case error of cases_list esac .) - yacc.py:2687: less reduce using rule 89 (factor -> case error of cases_list esac .) - yacc.py:2687: lesseq reduce using rule 89 (factor -> case error of cases_list esac .) - yacc.py:2687: equal reduce using rule 89 (factor -> case error of cases_list esac .) - yacc.py:2687: semi reduce using rule 89 (factor -> case error of cases_list esac .) - yacc.py:2687: cpar reduce using rule 89 (factor -> case error of cases_list esac .) - yacc.py:2687: error reduce using rule 89 (factor -> case error of cases_list esac .) - yacc.py:2687: of reduce using rule 89 (factor -> case error of cases_list esac .) - yacc.py:2687: then reduce using rule 89 (factor -> case error of cases_list esac .) - yacc.py:2687: loop reduce using rule 89 (factor -> case error of cases_list esac .) - yacc.py:2687: comma reduce using rule 89 (factor -> case error of cases_list esac .) - yacc.py:2687: in reduce using rule 89 (factor -> case error of cases_list esac .) - yacc.py:2687: else reduce using rule 89 (factor -> case error of cases_list esac .) - yacc.py:2687: pool reduce using rule 89 (factor -> case error of cases_list esac .) - yacc.py:2687: ccur reduce using rule 89 (factor -> case error of cases_list esac .) - yacc.py:2687: fi reduce using rule 89 (factor -> case error of cases_list esac .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 268 - yacc.py:2563: - yacc.py:2565: (93) factor -> if expr then expr else . expr fi - yacc.py:2565: (96) factor -> if expr then expr else . error fi - yacc.py:2565: (100) factor -> if expr then expr else . expr error - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 287 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 286 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 - yacc.py:2561: - yacc.py:2562:state 269 - yacc.py:2563: - yacc.py:2565: (98) factor -> if expr then expr error . error expr fi - yacc.py:2565: (99) factor -> if expr then expr error . expr fi - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 289 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 288 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 - yacc.py:2561: - yacc.py:2562:state 270 - yacc.py:2563: - yacc.py:2565: (95) factor -> if expr then error else . expr fi - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: error shift and go to state 72 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 290 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 - yacc.py:2561: - yacc.py:2562:state 271 - yacc.py:2563: - yacc.py:2565: (97) factor -> if expr error expr else . expr fi - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: error shift and go to state 72 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 291 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 - yacc.py:2561: - yacc.py:2562:state 272 - yacc.py:2563: - yacc.py:2565: (94) factor -> if error then expr else . expr fi - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: error shift and go to state 72 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 292 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 - yacc.py:2561: - yacc.py:2562:state 273 - yacc.py:2563: - yacc.py:2565: (102) factor -> while expr loop expr pool . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 102 (factor -> while expr loop expr pool .) - yacc.py:2687: dot reduce using rule 102 (factor -> while expr loop expr pool .) - yacc.py:2687: star reduce using rule 102 (factor -> while expr loop expr pool .) - yacc.py:2687: div reduce using rule 102 (factor -> while expr loop expr pool .) - yacc.py:2687: plus reduce using rule 102 (factor -> while expr loop expr pool .) - yacc.py:2687: minus reduce using rule 102 (factor -> while expr loop expr pool .) - yacc.py:2687: less reduce using rule 102 (factor -> while expr loop expr pool .) - yacc.py:2687: lesseq reduce using rule 102 (factor -> while expr loop expr pool .) - yacc.py:2687: equal reduce using rule 102 (factor -> while expr loop expr pool .) - yacc.py:2687: semi reduce using rule 102 (factor -> while expr loop expr pool .) - yacc.py:2687: cpar reduce using rule 102 (factor -> while expr loop expr pool .) - yacc.py:2687: error reduce using rule 102 (factor -> while expr loop expr pool .) - yacc.py:2687: of reduce using rule 102 (factor -> while expr loop expr pool .) - yacc.py:2687: then reduce using rule 102 (factor -> while expr loop expr pool .) - yacc.py:2687: loop reduce using rule 102 (factor -> while expr loop expr pool .) - yacc.py:2687: comma reduce using rule 102 (factor -> while expr loop expr pool .) - yacc.py:2687: in reduce using rule 102 (factor -> while expr loop expr pool .) - yacc.py:2687: else reduce using rule 102 (factor -> while expr loop expr pool .) - yacc.py:2687: pool reduce using rule 102 (factor -> while expr loop expr pool .) - yacc.py:2687: ccur reduce using rule 102 (factor -> while expr loop expr pool .) - yacc.py:2687: fi reduce using rule 102 (factor -> while expr loop expr pool .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 274 - yacc.py:2563: - yacc.py:2565: (105) factor -> while expr loop expr error . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 105 (factor -> while expr loop expr error .) - yacc.py:2687: dot reduce using rule 105 (factor -> while expr loop expr error .) - yacc.py:2687: star reduce using rule 105 (factor -> while expr loop expr error .) - yacc.py:2687: div reduce using rule 105 (factor -> while expr loop expr error .) - yacc.py:2687: plus reduce using rule 105 (factor -> while expr loop expr error .) - yacc.py:2687: minus reduce using rule 105 (factor -> while expr loop expr error .) - yacc.py:2687: less reduce using rule 105 (factor -> while expr loop expr error .) - yacc.py:2687: lesseq reduce using rule 105 (factor -> while expr loop expr error .) - yacc.py:2687: equal reduce using rule 105 (factor -> while expr loop expr error .) - yacc.py:2687: semi reduce using rule 105 (factor -> while expr loop expr error .) - yacc.py:2687: cpar reduce using rule 105 (factor -> while expr loop expr error .) - yacc.py:2687: error reduce using rule 105 (factor -> while expr loop expr error .) - yacc.py:2687: of reduce using rule 105 (factor -> while expr loop expr error .) - yacc.py:2687: then reduce using rule 105 (factor -> while expr loop expr error .) - yacc.py:2687: loop reduce using rule 105 (factor -> while expr loop expr error .) - yacc.py:2687: comma reduce using rule 105 (factor -> while expr loop expr error .) - yacc.py:2687: in reduce using rule 105 (factor -> while expr loop expr error .) - yacc.py:2687: else reduce using rule 105 (factor -> while expr loop expr error .) - yacc.py:2687: pool reduce using rule 105 (factor -> while expr loop expr error .) - yacc.py:2687: ccur reduce using rule 105 (factor -> while expr loop expr error .) - yacc.py:2687: fi reduce using rule 105 (factor -> while expr loop expr error .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 275 - yacc.py:2563: - yacc.py:2565: (104) factor -> while expr loop error pool . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 104 (factor -> while expr loop error pool .) - yacc.py:2687: dot reduce using rule 104 (factor -> while expr loop error pool .) - yacc.py:2687: star reduce using rule 104 (factor -> while expr loop error pool .) - yacc.py:2687: div reduce using rule 104 (factor -> while expr loop error pool .) - yacc.py:2687: plus reduce using rule 104 (factor -> while expr loop error pool .) - yacc.py:2687: minus reduce using rule 104 (factor -> while expr loop error pool .) - yacc.py:2687: less reduce using rule 104 (factor -> while expr loop error pool .) - yacc.py:2687: lesseq reduce using rule 104 (factor -> while expr loop error pool .) - yacc.py:2687: equal reduce using rule 104 (factor -> while expr loop error pool .) - yacc.py:2687: semi reduce using rule 104 (factor -> while expr loop error pool .) - yacc.py:2687: cpar reduce using rule 104 (factor -> while expr loop error pool .) - yacc.py:2687: error reduce using rule 104 (factor -> while expr loop error pool .) - yacc.py:2687: of reduce using rule 104 (factor -> while expr loop error pool .) - yacc.py:2687: then reduce using rule 104 (factor -> while expr loop error pool .) - yacc.py:2687: loop reduce using rule 104 (factor -> while expr loop error pool .) - yacc.py:2687: comma reduce using rule 104 (factor -> while expr loop error pool .) - yacc.py:2687: in reduce using rule 104 (factor -> while expr loop error pool .) - yacc.py:2687: else reduce using rule 104 (factor -> while expr loop error pool .) - yacc.py:2687: pool reduce using rule 104 (factor -> while expr loop error pool .) - yacc.py:2687: ccur reduce using rule 104 (factor -> while expr loop error pool .) - yacc.py:2687: fi reduce using rule 104 (factor -> while expr loop error pool .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 276 - yacc.py:2563: - yacc.py:2565: (106) factor -> while expr error expr loop . expr pool - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: error shift and go to state 72 - yacc.py:2687: opar shift and go to state 84 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 293 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: atom shift and go to state 83 - yacc.py:2561: - yacc.py:2562:state 277 - yacc.py:2563: - yacc.py:2565: (107) factor -> while expr error expr pool . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 107 (factor -> while expr error expr pool .) - yacc.py:2687: dot reduce using rule 107 (factor -> while expr error expr pool .) - yacc.py:2687: star reduce using rule 107 (factor -> while expr error expr pool .) - yacc.py:2687: div reduce using rule 107 (factor -> while expr error expr pool .) - yacc.py:2687: plus reduce using rule 107 (factor -> while expr error expr pool .) - yacc.py:2687: minus reduce using rule 107 (factor -> while expr error expr pool .) - yacc.py:2687: less reduce using rule 107 (factor -> while expr error expr pool .) - yacc.py:2687: lesseq reduce using rule 107 (factor -> while expr error expr pool .) - yacc.py:2687: equal reduce using rule 107 (factor -> while expr error expr pool .) - yacc.py:2687: semi reduce using rule 107 (factor -> while expr error expr pool .) - yacc.py:2687: cpar reduce using rule 107 (factor -> while expr error expr pool .) - yacc.py:2687: error reduce using rule 107 (factor -> while expr error expr pool .) - yacc.py:2687: of reduce using rule 107 (factor -> while expr error expr pool .) - yacc.py:2687: then reduce using rule 107 (factor -> while expr error expr pool .) - yacc.py:2687: loop reduce using rule 107 (factor -> while expr error expr pool .) - yacc.py:2687: comma reduce using rule 107 (factor -> while expr error expr pool .) - yacc.py:2687: in reduce using rule 107 (factor -> while expr error expr pool .) - yacc.py:2687: else reduce using rule 107 (factor -> while expr error expr pool .) - yacc.py:2687: pool reduce using rule 107 (factor -> while expr error expr pool .) - yacc.py:2687: ccur reduce using rule 107 (factor -> while expr error expr pool .) - yacc.py:2687: fi reduce using rule 107 (factor -> while expr error expr pool .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 278 - yacc.py:2563: - yacc.py:2565: (103) factor -> while error loop expr pool . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 103 (factor -> while error loop expr pool .) - yacc.py:2687: dot reduce using rule 103 (factor -> while error loop expr pool .) - yacc.py:2687: star reduce using rule 103 (factor -> while error loop expr pool .) - yacc.py:2687: div reduce using rule 103 (factor -> while error loop expr pool .) - yacc.py:2687: plus reduce using rule 103 (factor -> while error loop expr pool .) - yacc.py:2687: minus reduce using rule 103 (factor -> while error loop expr pool .) - yacc.py:2687: less reduce using rule 103 (factor -> while error loop expr pool .) - yacc.py:2687: lesseq reduce using rule 103 (factor -> while error loop expr pool .) - yacc.py:2687: equal reduce using rule 103 (factor -> while error loop expr pool .) - yacc.py:2687: semi reduce using rule 103 (factor -> while error loop expr pool .) - yacc.py:2687: cpar reduce using rule 103 (factor -> while error loop expr pool .) - yacc.py:2687: error reduce using rule 103 (factor -> while error loop expr pool .) - yacc.py:2687: of reduce using rule 103 (factor -> while error loop expr pool .) - yacc.py:2687: then reduce using rule 103 (factor -> while error loop expr pool .) - yacc.py:2687: loop reduce using rule 103 (factor -> while error loop expr pool .) - yacc.py:2687: comma reduce using rule 103 (factor -> while error loop expr pool .) - yacc.py:2687: in reduce using rule 103 (factor -> while error loop expr pool .) - yacc.py:2687: else reduce using rule 103 (factor -> while error loop expr pool .) - yacc.py:2687: pool reduce using rule 103 (factor -> while error loop expr pool .) - yacc.py:2687: ccur reduce using rule 103 (factor -> while error loop expr pool .) - yacc.py:2687: fi reduce using rule 103 (factor -> while error loop expr pool .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 279 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur expr ccur . + yacc.py:2565: (44) casep -> id colon type . rarrow expr yacc.py:2566: - yacc.py:2687: semi reduce using rule 26 (def_func -> error opar formals cpar colon type ocur expr ccur .) + yacc.py:2687: rarrow shift and go to state 229 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 280 + yacc.py:2562:state 228 yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur expr ccur . + yacc.py:2565: (72) factor -> if expr then expr else expr . fi yacc.py:2566: - yacc.py:2687: semi reduce using rule 25 (def_func -> id opar formals cpar colon type ocur expr ccur .) + yacc.py:2687: fi shift and go to state 230 yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 281 + yacc.py:2562:state 229 yacc.py:2563: - yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur error ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 29 (def_func -> id opar formals cpar colon type ocur error ccur .) + yacc.py:2565: (44) casep -> id colon type rarrow . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 yacc.py:2689: + yacc.py:2714: expr shift and go to state 231 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 yacc.py:2561: - yacc.py:2562:state 282 + yacc.py:2562:state 230 yacc.py:2563: - yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur expr ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 28 (def_func -> id opar formals cpar colon error ocur expr ccur .) + yacc.py:2565: (72) factor -> if expr then expr else expr fi . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: dot reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: star reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: div reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: plus reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: minus reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: less reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: lesseq reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: equal reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: semi reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: cpar reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: of reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: then reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: loop reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: comma reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: in reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: else reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: pool reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: ccur reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: fi reduce using rule 72 (factor -> if expr then expr else expr fi .) yacc.py:2689: yacc.py:2561: - yacc.py:2562:state 283 + yacc.py:2562:state 231 yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur expr ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 27 (def_func -> id opar error cpar colon type ocur expr ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 284 - yacc.py:2563: - yacc.py:2565: (45) cases_list -> casep semi cases_list . - yacc.py:2566: - yacc.py:2687: esac reduce using rule 45 (cases_list -> casep semi cases_list .) - yacc.py:2687: error reduce using rule 45 (cases_list -> casep semi cases_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 285 - yacc.py:2563: - yacc.py:2565: (48) casep -> id colon type . rarrow expr - yacc.py:2566: - yacc.py:2687: rarrow shift and go to state 294 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 286 - yacc.py:2563: - yacc.py:2565: (93) factor -> if expr then expr else expr . fi - yacc.py:2565: (100) factor -> if expr then expr else expr . error - yacc.py:2566: - yacc.py:2687: fi shift and go to state 295 - yacc.py:2687: error shift and go to state 296 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 287 - yacc.py:2563: - yacc.py:2565: (96) factor -> if expr then expr else error . fi - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call - yacc.py:2565: (65) term -> . isvoid base_call - yacc.py:2565: (66) term -> . nox base_call - yacc.py:2565: (67) term -> . base_call - yacc.py:2565: (68) term -> . term star error - yacc.py:2565: (69) term -> . term div error - yacc.py:2565: (70) term -> . isvoid error - yacc.py:2565: (71) term -> . nox error - yacc.py:2565: (72) base_call -> . factor arroba type dot func_call - yacc.py:2565: (73) base_call -> . factor - yacc.py:2565: (74) base_call -> . error arroba type dot func_call - yacc.py:2565: (75) base_call -> . factor arroba error dot func_call - yacc.py:2565: (76) factor -> . atom - yacc.py:2565: (77) factor -> . opar expr cpar - yacc.py:2565: (78) factor -> . opar expr error - yacc.py:2565: (79) factor -> . error expr cpar - yacc.py:2565: (80) factor -> . opar error cpar - yacc.py:2565: (81) factor -> . factor dot func_call - yacc.py:2565: (82) factor -> . not expr - yacc.py:2565: (83) factor -> . func_call - yacc.py:2565: (84) factor -> . let let_list in expr - yacc.py:2565: (85) factor -> . let error in expr - yacc.py:2565: (86) factor -> . let let_list in error - yacc.py:2565: (87) factor -> . let let_list error expr - yacc.py:2565: (88) factor -> . case expr of cases_list esac - yacc.py:2565: (89) factor -> . case error of cases_list esac - yacc.py:2565: (90) factor -> . case expr of error esac - yacc.py:2565: (91) factor -> . case expr error cases_list esac - yacc.py:2565: (92) factor -> . case expr of cases_list error - yacc.py:2565: (93) factor -> . if expr then expr else expr fi - yacc.py:2565: (94) factor -> . if error then expr else expr fi - yacc.py:2565: (95) factor -> . if expr then error else expr fi - yacc.py:2565: (96) factor -> . if expr then expr else error fi - yacc.py:2565: (97) factor -> . if expr error expr else expr fi - yacc.py:2565: (98) factor -> . if expr then expr error error expr fi - yacc.py:2565: (99) factor -> . if expr then expr error expr fi - yacc.py:2565: (100) factor -> . if expr then expr else expr error - yacc.py:2565: (101) factor -> . if error fi - yacc.py:2565: (102) factor -> . while expr loop expr pool - yacc.py:2565: (103) factor -> . while error loop expr pool - yacc.py:2565: (104) factor -> . while expr loop error pool - yacc.py:2565: (105) factor -> . while expr loop expr error - yacc.py:2565: (106) factor -> . while expr error expr loop expr pool - yacc.py:2565: (107) factor -> . while expr error expr pool - yacc.py:2565: (108) atom -> . num - yacc.py:2565: (109) atom -> . id - yacc.py:2565: (110) atom -> . new type - yacc.py:2565: (111) atom -> . new error - yacc.py:2565: (112) atom -> . ocur block ccur - yacc.py:2565: (113) atom -> . error block ccur - yacc.py:2565: (114) atom -> . ocur error ccur - yacc.py:2565: (115) atom -> . ocur block error - yacc.py:2565: (116) atom -> . true - yacc.py:2565: (117) atom -> . false - yacc.py:2565: (118) atom -> . string - yacc.py:2565: (123) func_call -> . id opar args cpar - yacc.py:2565: (124) func_call -> . id opar error cpar - yacc.py:2565: (125) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: fi shift and go to state 297 - yacc.py:2687: arroba shift and go to state 112 - yacc.py:2687: opar shift and go to state 115 - yacc.py:2687: id shift and go to state 74 - yacc.py:2687: error shift and go to state 111 - yacc.py:2687: isvoid shift and go to state 79 - yacc.py:2687: nox shift and go to state 80 - yacc.py:2687: not shift and go to state 85 - yacc.py:2687: let shift and go to state 86 - yacc.py:2687: case shift and go to state 87 - yacc.py:2687: if shift and go to state 88 - yacc.py:2687: while shift and go to state 89 - yacc.py:2687: num shift and go to state 90 - yacc.py:2687: new shift and go to state 91 - yacc.py:2687: ocur shift and go to state 92 - yacc.py:2687: true shift and go to state 93 - yacc.py:2687: false shift and go to state 94 - yacc.py:2687: string shift and go to state 95 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 113 - yacc.py:2714: func_call shift and go to state 82 - yacc.py:2714: block shift and go to state 114 - yacc.py:2714: comp shift and go to state 75 - yacc.py:2714: op shift and go to state 76 - yacc.py:2714: term shift and go to state 77 - yacc.py:2714: base_call shift and go to state 78 - yacc.py:2714: factor shift and go to state 81 - yacc.py:2714: atom shift and go to state 83 - yacc.py:2561: - yacc.py:2562:state 288 - yacc.py:2563: - yacc.py:2565: (99) factor -> if expr then expr error expr . fi - yacc.py:2566: - yacc.py:2687: fi shift and go to state 298 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 289 - yacc.py:2563: - yacc.py:2565: (98) factor -> if expr then expr error error . expr fi - yacc.py:2565: (74) base_call -> error . arroba type dot func_call - yacc.py:2565: (79) factor -> error . expr cpar - yacc.py:2565: (113) atom -> error . block ccur - yacc.py:2565: (125) func_call -> error . opar args cpar - yacc.py:2565: (49) expr -> . id larrow expr - yacc.py:2565: (50) expr -> . comp - yacc.py:2565: (119) block -> . expr semi - yacc.py:2565: (120) block -> . expr semi block - yacc.py:2565: (121) block -> . error block - yacc.py:2565: (122) block -> . error semi - yacc.py:2565: (51) comp -> . comp less op - yacc.py:2565: (52) comp -> . comp lesseq op - yacc.py:2565: (53) comp -> . comp equal op - yacc.py:2565: (54) comp -> . op - yacc.py:2565: (55) comp -> . comp less error - yacc.py:2565: (56) comp -> . comp lesseq error - yacc.py:2565: (57) comp -> . comp equal error - yacc.py:2565: (58) op -> . op plus term - yacc.py:2565: (59) op -> . op minus term - yacc.py:2565: (60) op -> . term - yacc.py:2565: (61) op -> . op plus error - yacc.py:2565: (62) op -> . op minus error - yacc.py:2565: (63) term -> . term star base_call - yacc.py:2565: (64) term -> . term div base_call + yacc.py:2565: (44) casep -> id colon type rarrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 44 (casep -> id colon type rarrow expr .) + yacc.py:2689: + yacc.py:3447:24 shift/reduce conflicts + yacc.py:3457: + yacc.py:3458:Conflicts: + yacc.py:3459: + yacc.py:3462:shift/reduce conflict for less in state 73 resolved as shift + yacc.py:3462:shift/reduce conflict for lesseq in state 73 resolved as shift + yacc.py:3462:shift/reduce conflict for equal in state 73 resolved as shift + yacc.py:3462:shift/reduce conflict for plus in state 74 resolved as shift + yacc.py:3462:shift/reduce conflict for minus in state 74 resolved as shift + yacc.py:3462:shift/reduce conflict for star in state 75 resolved as shift + yacc.py:3462:shift/reduce conflict for div in state 75 resolved as shift + yacc.py:3462:shift/reduce conflict for arroba in state 77 resolved as shift + yacc.py:3462:shift/reduce conflict for dot in state 77 resolved as shift + yacc.py:3462:shift/reduce conflict for ccur in state 141 resolved as shift + yacc.py:3462:shift/reduce conflict for cpar in state 147 resolved as shift + yacc.py:3462:shift/reduce conflict for error in state 151 resolved as shift + yacc.py:3462:shift/reduce conflict for plus in state 156 resolved as shift + yacc.py:3462:shift/reduce conflict for minus in state 156 resolved as shift + yacc.py:3462:shift/reduce conflict for plus in state 157 resolved as shift + yacc.py:3462:shift/reduce conflict for minus in state 157 resolved as shift + yacc.py:3462:shift/reduce conflict for plus in state 158 resolved as shift + yacc.py:3462:shift/reduce conflict for minus in state 158 resolved as shift + yacc.py:3462:shift/reduce conflict for star in state 159 resolved as shift + yacc.py:3462:shift/reduce conflict for div in state 159 resolved as shift + yacc.py:3462:shift/reduce conflict for star in state 160 resolved as shift + yacc.py:3462:shift/reduce conflict for div in state 160 resolved as shift + yacc.py:3462:shift/reduce conflict for arroba in state 162 resolved as shift + yacc.py:3462:shift/reduce conflict for arroba in state 164 resolved as shift + yacc.py:3488:Couldn't create 'parsetab'. [Errno 2] No such file or directory: 'src/output_parser/parsetab.py' + yacc.py: 362:PLY: PARSE DEBUG START + yacc.py: 410: + yacc.py: 411:State : 0 + yacc.py: 435:Stack : . LexToken(class,'class',3,63) + yacc.py: 445:Action : Shift and goto state 5 + yacc.py: 410: + yacc.py: 411:State : 5 + yacc.py: 435:Stack : class . LexToken(type,'Main',3,69) + yacc.py: 445:Action : Shift and goto state 8 + yacc.py: 410: + yacc.py: 411:State : 8 + yacc.py: 435:Stack : class type . LexToken(ocur,'{',3,74) + yacc.py: 445:Action : Shift and goto state 10 + yacc.py: 410: + yacc.py: 411:State : 10 + yacc.py: 435:Stack : class type ocur . LexToken(id,'main',4,80) + yacc.py: 445:Action : Shift and goto state 19 + yacc.py: 410: + yacc.py: 411:State : 19 + yacc.py: 435:Stack : class type ocur id . LexToken(opar,'(',4,84) + yacc.py: 445:Action : Shift and goto state 32 + yacc.py: 410: + yacc.py: 411:State : 32 + yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',4,85) + yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',4,85) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',4,85) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',4,85) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : class type ocur id opar formals cpar . LexToken(colon,':',4,86) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon . LexToken(type,'Object',4,88) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type . LexToken(ocur,'{',4,95) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur . LexToken(opar,'(',5,105) + yacc.py: 445:Action : Shift and goto state 80 + yacc.py: 410: + yacc.py: 411:State : 80 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar . LexToken(new,'new',5,106) + yacc.py: 445:Action : Shift and goto state 89 + yacc.py: 410: + yacc.py: 411:State : 89 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new . LexToken(type,'Alpha',5,110) + yacc.py: 445:Action : Shift and goto state 134 + yacc.py: 410: + yacc.py: 411:State : 134 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',5,115) + yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar epsilon . LexToken(cpar,')',5,123) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar arg_list_empty . LexToken(cpar,')',5,123) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args . LexToken(cpar,')',5,123) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args cpar . LexToken(ccur,'}',6,129) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['print','(',[],')'] and goto state 167 + yacc.py: 506:Result : (('print', [])) + yacc.py: 410: + yacc.py: 411:State : 167 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot func_call . LexToken(ccur,'}',6,129) + yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',('print', [])] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 16 + yacc.py: 430:Defaulted state 16: Reduce using 14 + yacc.py: 435:Stack : class type ocur def_func semi epsilon . LexToken(ccur,'}',7,132) + yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 48 + yacc.py: 430:Defaulted state 48: Reduce using 16 + yacc.py: 435:Stack : class type ocur def_func semi feature_list . LexToken(ccur,'}',7,132) + yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['test1',':','Object'] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class class type ocur def_attr semi id opar epsilon . LexToken(cpar,')',12,186) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class class type ocur def_attr semi id opar param_list_empty . LexToken(cpar,')',12,186) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type ocur def_attr semi id opar formals . LexToken(cpar,')',12,186) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type ocur def_attr semi id opar formals cpar . LexToken(colon,':',12,187) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type ocur def_attr semi id opar formals cpar colon . LexToken(type,'Int',12,189) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type ocur def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',12,193) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type ocur def_attr semi id opar formals cpar colon type ocur . LexToken(num,2.0,13,203) + yacc.py: 445:Action : Shift and goto state 88 + yacc.py: 410: + yacc.py: 411:State : 88 + yacc.py: 435:Stack : def_class class type ocur def_attr semi id opar formals cpar colon type ocur num . LexToken(plus,'+',13,205) + yacc.py: 471:Action : Reduce rule [atom -> num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( string] with ['1'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 + yacc.py: 506:Result : ( id colon type] with ['a',':','Alpha'] and goto state 44 + yacc.py: 506:Result : (('a', 'Alpha')) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi id opar param . LexToken(comma,',',20,287) + yacc.py: 445:Action : Shift and goto state 60 + yacc.py: 410: + yacc.py: 411:State : 60 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi id opar param comma . LexToken(id,'b',20,289) + yacc.py: 445:Action : Shift and goto state 46 + yacc.py: 410: + yacc.py: 411:State : 46 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi id opar param comma id . LexToken(colon,':',20,290) + yacc.py: 445:Action : Shift and goto state 61 + yacc.py: 410: + yacc.py: 411:State : 61 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi id opar param comma id colon . LexToken(type,'Int',20,292) + yacc.py: 445:Action : Shift and goto state 96 + yacc.py: 410: + yacc.py: 411:State : 96 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi id opar param comma id colon type . LexToken(cpar,')',20,295) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['b',':','Int'] and goto state 44 + yacc.py: 506:Result : (('b', 'Int')) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi id opar param comma param . LexToken(cpar,')',20,295) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [('b', 'Int')] and goto state 95 + yacc.py: 506:Result : ([('b', 'Int')]) + yacc.py: 410: + yacc.py: 411:State : 95 + yacc.py: 430:Defaulted state 95: Reduce using 33 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi id opar param comma param_list . LexToken(cpar,')',20,295) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [('a', 'Alpha'),',',[('b', 'Int')]] and goto state 42 + yacc.py: 506:Result : ([('a', 'Alpha'), ('b', 'Int')]) + yacc.py: 410: + yacc.py: 411:State : 42 + yacc.py: 430:Defaulted state 42: Reduce using 30 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi id opar param_list . LexToken(cpar,')',20,295) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([('a', 'Alpha'), ('b', 'Int')]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi id opar formals . LexToken(cpar,')',20,295) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi id opar formals cpar . LexToken(colon,':',20,296) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi id opar formals cpar colon . LexToken(type,'Int',20,298) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',20,302) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi id opar formals cpar colon type ocur . LexToken(num,2.0,21,312) + yacc.py: 445:Action : Shift and goto state 88 + yacc.py: 410: + yacc.py: 411:State : 88 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi id opar formals cpar colon type ocur num . LexToken(plus,'+',21,314) + yacc.py: 471:Action : Reduce rule [atom -> num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',24,339) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',24,339) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',24,339) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi id opar formals cpar . LexToken(colon,':',24,340) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi id opar formals cpar colon . LexToken(type,'String',24,342) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',24,349) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi id opar formals cpar colon type ocur . LexToken(string,'2 + 2',25,365) + yacc.py: 445:Action : Shift and goto state 93 + yacc.py: 410: + yacc.py: 411:State : 93 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi id opar formals cpar colon type ocur string . LexToken(ccur,'}',26,371) + yacc.py: 471:Action : Reduce rule [atom -> string] with ['2 + 2'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','String','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['x',':','Int'] and goto state 44 + yacc.py: 506:Result : (('x', 'Int')) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar param . LexToken(comma,',',28,394) + yacc.py: 445:Action : Shift and goto state 60 + yacc.py: 410: + yacc.py: 411:State : 60 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar param comma . LexToken(id,'y',28,396) + yacc.py: 445:Action : Shift and goto state 46 + yacc.py: 410: + yacc.py: 411:State : 46 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar param comma id . LexToken(colon,':',28,397) + yacc.py: 445:Action : Shift and goto state 61 + yacc.py: 410: + yacc.py: 411:State : 61 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar param comma id colon . LexToken(type,'Int',28,399) + yacc.py: 445:Action : Shift and goto state 96 + yacc.py: 410: + yacc.py: 411:State : 96 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar param comma id colon type . LexToken(cpar,')',28,402) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['y',':','Int'] and goto state 44 + yacc.py: 506:Result : (('y', 'Int')) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar param comma param . LexToken(cpar,')',28,402) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [('y', 'Int')] and goto state 95 + yacc.py: 506:Result : ([('y', 'Int')]) + yacc.py: 410: + yacc.py: 411:State : 95 + yacc.py: 430:Defaulted state 95: Reduce using 33 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar param comma param_list . LexToken(cpar,')',28,402) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [('x', 'Int'),',',[('y', 'Int')]] and goto state 42 + yacc.py: 506:Result : ([('x', 'Int'), ('y', 'Int')]) + yacc.py: 410: + yacc.py: 411:State : 42 + yacc.py: 430:Defaulted state 42: Reduce using 30 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',28,402) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([('x', 'Int'), ('y', 'Int')]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',28,402) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',28,403) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'Test',28,405) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',28,410) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'self',29,420) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',30,429) + yacc.py: 471:Action : Reduce rule [atom -> id] with ['self'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',,')',':','Test','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['a',':','String'] and goto state 44 + yacc.py: 506:Result : (('a', 'String')) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param . LexToken(comma,',',32,455) + yacc.py: 445:Action : Shift and goto state 60 + yacc.py: 410: + yacc.py: 411:State : 60 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma . LexToken(id,'b',32,457) + yacc.py: 445:Action : Shift and goto state 46 + yacc.py: 410: + yacc.py: 411:State : 46 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma id . LexToken(colon,':',32,458) + yacc.py: 445:Action : Shift and goto state 61 + yacc.py: 410: + yacc.py: 411:State : 61 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma id colon . LexToken(type,'String',32,460) + yacc.py: 445:Action : Shift and goto state 96 + yacc.py: 410: + yacc.py: 411:State : 96 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma id colon type . LexToken(cpar,')',32,466) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['b',':','String'] and goto state 44 + yacc.py: 506:Result : (('b', 'String')) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param . LexToken(cpar,')',32,466) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [('b', 'String')] and goto state 95 + yacc.py: 506:Result : ([('b', 'String')]) + yacc.py: 410: + yacc.py: 411:State : 95 + yacc.py: 430:Defaulted state 95: Reduce using 33 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param_list . LexToken(cpar,')',32,466) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [('a', 'String'),',',] and goto state 42 + yacc.py: 506:Result : ([('a', 'String'), ('b', 'String')]) + yacc.py: 410: + yacc.py: 411:State : 42 + yacc.py: 430:Defaulted state 42: Reduce using 30 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',32,466) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([('a', 'String'), ('b', 'String')]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',32,466) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',32,467) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'IO',32,469) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',32,472) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(if,'If',33,482) + yacc.py: 445:Action : Shift and goto state 86 + yacc.py: 410: + yacc.py: 411:State : 86 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if . LexToken(id,'a',33,485) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if id . LexToken(dot,'.',33,486) + yacc.py: 471:Action : Reduce rule [atom -> id] with ['a'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if factor dot id opar epsilon . LexToken(cpar,')',33,494) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if factor dot id opar arg_list_empty . LexToken(cpar,')',33,494) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if factor dot id opar args . LexToken(cpar,')',33,494) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if factor dot id opar args cpar . LexToken(less,'<',33,496) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['length','(',[],')'] and goto state 167 + yacc.py: 506:Result : (('length', [])) + yacc.py: 410: + yacc.py: 411:State : 167 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if factor dot func_call . LexToken(less,'<',33,496) + yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',('length', [])] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( id] with ['b'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if comp less factor dot id opar epsilon . LexToken(cpar,')',33,507) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if comp less factor dot id opar arg_list_empty . LexToken(cpar,')',33,507) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if comp less factor dot id opar args . LexToken(cpar,')',33,507) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if comp less factor dot id opar args cpar . LexToken(then,'THeN',33,509) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['length','(',[],')'] and goto state 167 + yacc.py: 506:Result : (('length', [])) + yacc.py: 410: + yacc.py: 411:State : 167 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if comp less factor dot func_call . LexToken(then,'THeN',33,509) + yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',('length', [])] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 156 + yacc.py: 506:Result : ( comp less op] with [,'<',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( new type] with ['new','IO'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( string] with ['La cadena "'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( id] with ['b'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 + yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( string] with [] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 + yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 + yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( string] with ['".'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 + yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 167 + yacc.py: 506:Result : (('out_string', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if factor dot id opar epsilon . LexToken(cpar,')',36,674) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if factor dot id opar arg_list_empty . LexToken(cpar,')',36,674) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if factor dot id opar args . LexToken(cpar,')',36,674) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if factor dot id opar args cpar . LexToken(equal,'=',36,676) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['length','(',[],')'] and goto state 167 + yacc.py: 506:Result : (('length', [])) + yacc.py: 410: + yacc.py: 411:State : 167 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if factor dot func_call . LexToken(equal,'=',36,676) + yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',('length', [])] and goto state 77 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( id] with ['b'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if comp equal factor dot id opar epsilon . LexToken(cpar,')',36,687) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if comp equal factor dot id opar arg_list_empty . LexToken(cpar,')',36,687) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if comp equal factor dot id opar args . LexToken(cpar,')',36,687) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if comp equal factor dot id opar args cpar . LexToken(then,'THeN',36,689) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['length','(',[],')'] and goto state 167 + yacc.py: 506:Result : (('length', [])) + yacc.py: 410: + yacc.py: 411:State : 167 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if comp equal factor dot func_call . LexToken(then,'THeN',36,689) + yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',('length', [])] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( new type] with ['new','IO'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( string] with ['La cadena "'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 + yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( string] with [] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 + yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( id] with ['b'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 + yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( string] with ['".'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 + yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 167 + yacc.py: 506:Result : (('out_string', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( new type] with ['new','IO'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( string] with ['La cadena "'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 + yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( string] with [] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 + yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( id] with ['b'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 + yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( string] with ['".'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 + yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 167 + yacc.py: 506:Result : (('out_string', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'THeN',,'ElsE',,'fI'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( if expr then expr else expr fi] with ['If',,'THeN',,'eLSe',,'Fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing5','(',,')',':','IO','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['a',':','Int'] and goto state 44 + yacc.py: 506:Result : (('a', 'Int')) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar param . LexToken(cpar,')',44,1016) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [('a', 'Int')] and goto state 42 + yacc.py: 506:Result : ([('a', 'Int')]) + yacc.py: 410: + yacc.py: 411:State : 42 + yacc.py: 430:Defaulted state 42: Reduce using 30 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',44,1016) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [[('a', 'Int')]] and goto state 51 + yacc.py: 506:Result : ([('a', 'Int')]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',44,1016) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',44,1017) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'IO',44,1019) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',44,1022) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(let,'let',45,1032) + yacc.py: 445:Action : Shift and goto state 84 + yacc.py: 410: + yacc.py: 411:State : 84 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur let . LexToken(id,'count',45,1036) + yacc.py: 445:Action : Shift and goto state 46 + yacc.py: 410: + yacc.py: 411:State : 46 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur let id . LexToken(colon,':',45,1041) + yacc.py: 445:Action : Shift and goto state 61 + yacc.py: 410: + yacc.py: 411:State : 61 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur let id colon . LexToken(type,'Int',45,1043) + yacc.py: 445:Action : Shift and goto state 96 + yacc.py: 410: + yacc.py: 411:State : 96 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur let id colon type . LexToken(larrow,'<-',45,1047) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['count',':','Int'] and goto state 130 + yacc.py: 506:Result : (('count', 'Int')) + yacc.py: 410: + yacc.py: 411:State : 130 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur let param . LexToken(larrow,'<-',45,1047) + yacc.py: 445:Action : Shift and goto state 173 + yacc.py: 410: + yacc.py: 411:State : 173 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur let param larrow . LexToken(num,0.0,45,1050) + yacc.py: 445:Action : Shift and goto state 88 + yacc.py: 410: + yacc.py: 411:State : 88 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur let param larrow num . LexToken(comma,',',45,1051) + yacc.py: 471:Action : Reduce rule [atom -> num] with [0.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 + yacc.py: 506:Result : ( id colon type] with ['pow',':','Int'] and goto state 130 + yacc.py: 506:Result : (('pow', 'Int')) + yacc.py: 410: + yacc.py: 411:State : 130 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur let let_assign comma param . LexToken(in,'in',46,1071) + yacc.py: 471:Action : Reduce rule [let_assign -> param] with [('pow', 'Int')] and goto state 129 + yacc.py: 506:Result : ( let_assign] with [] and goto state 197 + yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 + yacc.py: 506:Result : ([ num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['pow','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['pow'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 156 + yacc.py: 506:Result : ( comp less op] with [,'<',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 133 + yacc.py: 506:Result : ( id] with ['count'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['pow'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 161 + yacc.py: 506:Result : ( term star base_call] with [,'*',] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['pow','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 204 + yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( new type] with ['new','IO'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( string] with [] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 167 + yacc.py: 506:Result : (('out_string', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_int','(',,')'] and goto state 167 + yacc.py: 506:Result : (('out_int', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( string] with [' es '] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 167 + yacc.py: 506:Result : (('out_string', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( id] with ['count'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_int','(',,')'] and goto state 167 + yacc.py: 506:Result : (('out_int', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 196 + yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing6','(',[('a', 'Int')],')',':','IO','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',60,1438) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',60,1438) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',60,1438) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',60,1439) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'Object',60,1441) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',60,1448) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(case,'case',61,1458) + yacc.py: 445:Action : Shift and goto state 85 + yacc.py: 410: + yacc.py: 411:State : 85 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur case . LexToken(num,2.0,61,1463) + yacc.py: 445:Action : Shift and goto state 88 + yacc.py: 410: + yacc.py: 411:State : 88 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur case num . LexToken(plus,'+',61,1465) + yacc.py: 471:Action : Reduce rule [atom -> num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 131 + yacc.py: 506:Result : (',62,1491) + yacc.py: 445:Action : Shift and goto state 229 + yacc.py: 410: + yacc.py: 411:State : 229 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur case expr of id colon type rarrow . LexToken(new,'new',62,1494) + yacc.py: 445:Action : Shift and goto state 89 + yacc.py: 410: + yacc.py: 411:State : 89 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur case expr of id colon type rarrow new . LexToken(type,'IO',62,1498) + yacc.py: 445:Action : Shift and goto state 134 + yacc.py: 410: + yacc.py: 411:State : 134 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur case expr of id colon type rarrow new type . LexToken(dot,'.',62,1500) + yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','IO'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( string] with ['Es un entero!'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 167 + yacc.py: 506:Result : (('out_string', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 231 + yacc.py: 506:Result : ( id colon type rarrow expr] with ['x',':','Int','=>',] and goto state 200 + yacc.py: 506:Result : (',63,1552) + yacc.py: 445:Action : Shift and goto state 229 + yacc.py: 410: + yacc.py: 411:State : 229 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur case expr of casep semi id colon type rarrow . LexToken(new,'new',63,1555) + yacc.py: 445:Action : Shift and goto state 89 + yacc.py: 410: + yacc.py: 411:State : 89 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur case expr of casep semi id colon type rarrow new . LexToken(type,'IO',63,1559) + yacc.py: 445:Action : Shift and goto state 134 + yacc.py: 410: + yacc.py: 411:State : 134 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur case expr of casep semi id colon type rarrow new type . LexToken(dot,'.',63,1561) + yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','IO'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( string] with [] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 167 + yacc.py: 506:Result : (('out_string', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 231 + yacc.py: 506:Result : ( id colon type rarrow expr] with ['y',':','String','=>',] and goto state 200 + yacc.py: 506:Result : (',64,1613) + yacc.py: 445:Action : Shift and goto state 229 + yacc.py: 410: + yacc.py: 411:State : 229 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur case expr of casep semi casep semi id colon type rarrow . LexToken(new,'new',64,1616) + yacc.py: 445:Action : Shift and goto state 89 + yacc.py: 410: + yacc.py: 411:State : 89 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur case expr of casep semi casep semi id colon type rarrow new . LexToken(type,'IO',64,1620) + yacc.py: 445:Action : Shift and goto state 134 + yacc.py: 410: + yacc.py: 411:State : 134 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur case expr of casep semi casep semi id colon type rarrow new type . LexToken(dot,'.',64,1622) + yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','IO'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( string] with [] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 167 + yacc.py: 506:Result : (('out_string', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 231 + yacc.py: 506:Result : ( id colon type rarrow expr] with ['z',':','Bool','=>',] and goto state 200 + yacc.py: 506:Result : ( casep semi] with [,';'] and goto state 226 + yacc.py: 506:Result : ([ casep semi cases_list] with [,';',] and goto state 226 + yacc.py: 506:Result : ([ casep semi cases_list] with [,';',] and goto state 199 + yacc.py: 506:Result : ([ case expr of cases_list esac] with ['case',,'of',,'esac'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing7','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['a',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( id colon type] with ['x',':','Int'] and goto state 44 + yacc.py: 506:Result : (('x', 'Int')) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar param . LexToken(comma,',',70,1712) + yacc.py: 445:Action : Shift and goto state 60 + yacc.py: 410: + yacc.py: 411:State : 60 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar param comma . LexToken(id,'y',70,1714) + yacc.py: 445:Action : Shift and goto state 46 + yacc.py: 410: + yacc.py: 411:State : 46 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar param comma id . LexToken(colon,':',70,1715) + yacc.py: 445:Action : Shift and goto state 61 + yacc.py: 410: + yacc.py: 411:State : 61 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar param comma id colon . LexToken(type,'Int',70,1717) + yacc.py: 445:Action : Shift and goto state 96 + yacc.py: 410: + yacc.py: 411:State : 96 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar param comma id colon type . LexToken(cpar,')',70,1720) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['y',':','Int'] and goto state 44 + yacc.py: 506:Result : (('y', 'Int')) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar param comma param . LexToken(cpar,')',70,1720) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [('y', 'Int')] and goto state 95 + yacc.py: 506:Result : ([('y', 'Int')]) + yacc.py: 410: + yacc.py: 411:State : 95 + yacc.py: 430:Defaulted state 95: Reduce using 33 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar param comma param_list . LexToken(cpar,')',70,1720) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [('x', 'Int'),',',[('y', 'Int')]] and goto state 42 + yacc.py: 506:Result : ([('x', 'Int'), ('y', 'Int')]) + yacc.py: 410: + yacc.py: 411:State : 42 + yacc.py: 430:Defaulted state 42: Reduce using 30 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar param_list . LexToken(cpar,')',70,1720) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([('x', 'Int'), ('y', 'Int')]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals . LexToken(cpar,')',70,1720) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar . LexToken(colon,':',70,1721) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon . LexToken(type,'Bool',70,1723) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',70,1728) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur . LexToken(let,'let',71,1738) + yacc.py: 445:Action : Shift and goto state 84 + yacc.py: 410: + yacc.py: 411:State : 84 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let . LexToken(id,'z',71,1742) + yacc.py: 445:Action : Shift and goto state 46 + yacc.py: 410: + yacc.py: 411:State : 46 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let id . LexToken(colon,':',71,1743) + yacc.py: 445:Action : Shift and goto state 61 + yacc.py: 410: + yacc.py: 411:State : 61 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon . LexToken(type,'Int',71,1745) + yacc.py: 445:Action : Shift and goto state 96 + yacc.py: 410: + yacc.py: 411:State : 96 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon type . LexToken(larrow,'<-',71,1749) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['z',':','Int'] and goto state 130 + yacc.py: 506:Result : (('z', 'Int')) + yacc.py: 410: + yacc.py: 411:State : 130 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let param . LexToken(larrow,'<-',71,1749) + yacc.py: 445:Action : Shift and goto state 173 + yacc.py: 410: + yacc.py: 411:State : 173 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let param larrow . LexToken(num,3.0,71,1752) + yacc.py: 445:Action : Shift and goto state 88 + yacc.py: 410: + yacc.py: 411:State : 88 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let param larrow num . LexToken(comma,',',71,1753) + yacc.py: 471:Action : Reduce rule [atom -> num] with [3.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [('z', 'Int'),'<-',] and goto state 129 + yacc.py: 506:Result : ( id colon type] with ['w',':','Int'] and goto state 130 + yacc.py: 506:Result : (('w', 'Int')) + yacc.py: 410: + yacc.py: 411:State : 130 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param . LexToken(larrow,'<-',71,1762) + yacc.py: 445:Action : Shift and goto state 173 + yacc.py: 410: + yacc.py: 411:State : 173 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow . LexToken(num,4.0,71,1765) + yacc.py: 445:Action : Shift and goto state 88 + yacc.py: 410: + yacc.py: 411:State : 88 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow num . LexToken(in,'in',72,1775) + yacc.py: 471:Action : Reduce rule [atom -> num] with [4.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [('w', 'Int'),'<-',] and goto state 129 + yacc.py: 506:Result : ( let_assign] with [] and goto state 197 + yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 + yacc.py: 506:Result : ([ num] with [3.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( id] with ['x'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( id] with ['w'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 163 + yacc.py: 506:Result : ( term div base_call] with [,'/',] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( new type] with ['new','Int'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 161 + yacc.py: 506:Result : ( term star base_call] with [,'*',] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( id] with ['y'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 160 + yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 + yacc.py: 506:Result : ( ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( false] with ['faLSe'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 124 + yacc.py: 506:Result : ( not expr] with ['not',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( id] with ['z'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 127 + yacc.py: 506:Result : ( nox base_call] with ['~',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 157 + yacc.py: 506:Result : ( string] with ['hey'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_list in isvoid opar op minus opar opar opar if expr then expr else comp lesseq op plus factor dot id opar epsilon . LexToken(cpar,')',72,1876) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_list in isvoid opar op minus opar opar opar if expr then expr else comp lesseq op plus factor dot id opar arg_list_empty . LexToken(cpar,')',72,1876) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_list in isvoid opar op minus opar opar opar if expr then expr else comp lesseq op plus factor dot id opar args . LexToken(cpar,')',72,1876) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_list in isvoid opar op minus opar opar opar if expr then expr else comp lesseq op plus factor dot id opar args cpar . LexToken(fi,'fi',72,1878) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['length','(',[],')'] and goto state 167 + yacc.py: 506:Result : (('length', [])) + yacc.py: 410: + yacc.py: 411:State : 167 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_list in isvoid opar op minus opar opar opar if expr then expr else comp lesseq op plus factor dot func_call . LexToken(fi,'fi',72,1878) + yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',('length', [])] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 157 + yacc.py: 506:Result : ( comp lesseq op] with [,'<=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 163 + yacc.py: 506:Result : ( term div base_call] with [,'/',] and goto state 75 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 161 + yacc.py: 506:Result : ( term star base_call] with [,'*',] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 161 + yacc.py: 506:Result : ( term star base_call] with [,'*',] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 160 + yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 125 + yacc.py: 506:Result : ( isvoid base_call] with ['isvoid',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 196 + yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing8','(',,')',':','Bool','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 16 + yacc.py: 430:Defaulted state 16: Reduce using 14 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi def_func semi epsilon . LexToken(ccur,'}',74,1912) + yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 48 + yacc.py: 430:Defaulted state 48: Reduce using 16 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi def_func semi feature_list . LexToken(ccur,'}',74,1912) + yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur error] with ['class','Test','{',,'}',] and goto state 3 + yacc.py: 506:Result : ( new type] with ['new','Test'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test1',':','Test','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar epsilon . LexToken(cpar,')',79,1985) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar param_list_empty . LexToken(cpar,')',79,1985) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals . LexToken(cpar,')',79,1985) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar . LexToken(colon,':',79,1986) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar colon . LexToken(type,'Test',79,1988) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',79,1993) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar colon type ocur . LexToken(id,'test1',80,2003) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar colon type ocur id . LexToken(dot,'.',80,2008) + yacc.py: 471:Action : Reduce rule [atom -> id] with ['test1'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing4','(',,')'] and goto state 167 + yacc.py: 506:Result : (('testing4', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing4','(',,')'] and goto state 167 + yacc.py: 506:Result : (('testing4', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [8.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [8.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [13.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing4','(',,')'] and goto state 167 + yacc.py: 506:Result : (('testing4', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Test','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['x',':','Int'] and goto state 44 + yacc.py: 506:Result : (('x', 'Int')) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi id opar param . LexToken(comma,',',83,2106) + yacc.py: 445:Action : Shift and goto state 60 + yacc.py: 410: + yacc.py: 411:State : 60 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi id opar param comma . LexToken(id,'y',83,2108) + yacc.py: 445:Action : Shift and goto state 46 + yacc.py: 410: + yacc.py: 411:State : 46 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi id opar param comma id . LexToken(colon,':',83,2109) + yacc.py: 445:Action : Shift and goto state 61 + yacc.py: 410: + yacc.py: 411:State : 61 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi id opar param comma id colon . LexToken(type,'Int',83,2111) + yacc.py: 445:Action : Shift and goto state 96 + yacc.py: 410: + yacc.py: 411:State : 96 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi id opar param comma id colon type . LexToken(cpar,')',83,2114) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['y',':','Int'] and goto state 44 + yacc.py: 506:Result : (('y', 'Int')) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi id opar param comma param . LexToken(cpar,')',83,2114) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [('y', 'Int')] and goto state 95 + yacc.py: 506:Result : ([('y', 'Int')]) + yacc.py: 410: + yacc.py: 411:State : 95 + yacc.py: 430:Defaulted state 95: Reduce using 33 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi id opar param comma param_list . LexToken(cpar,')',83,2114) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [('x', 'Int'),',',[('y', 'Int')]] and goto state 42 + yacc.py: 506:Result : ([('x', 'Int'), ('y', 'Int')]) + yacc.py: 410: + yacc.py: 411:State : 42 + yacc.py: 430:Defaulted state 42: Reduce using 30 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi id opar param_list . LexToken(cpar,')',83,2114) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([('x', 'Int'), ('y', 'Int')]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi id opar formals . LexToken(cpar,')',83,2114) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi id opar formals cpar . LexToken(colon,':',83,2115) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi id opar formals cpar colon . LexToken(type,'Test2',83,2117) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',83,2123) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'self',84,2133) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',85,2142) + yacc.py: 471:Action : Reduce rule [atom -> id] with ['self'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Test2','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',87,2159) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',87,2159) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',87,2159) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',87,2160) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'Test2',87,2162) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',87,2168) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'testing2',88,2178) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(opar,'(',88,2186) + yacc.py: 445:Action : Shift and goto state 113 + yacc.py: 410: + yacc.py: 411:State : 113 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id opar . LexToken(num,1.0,88,2187) + yacc.py: 445:Action : Shift and goto state 88 + yacc.py: 410: + yacc.py: 411:State : 88 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id opar num . LexToken(plus,'+',88,2189) + yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 78 + yacc.py: 506:Result : (('testing2', [ func_call] with [] and goto state 77 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 167 + yacc.py: 506:Result : (('testing2', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [8.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( true] with ['true'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( false] with ['fALSE'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 167 + yacc.py: 506:Result : (('testing2', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Test2','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',91,2275) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',91,2275) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',91,2275) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',91,2276) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'Object',91,2278) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',91,2285) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'test1',92,2295) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(arroba,'@',92,2300) + yacc.py: 471:Action : Reduce rule [atom -> id] with ['test1'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur factor arroba type dot id opar epsilon . LexToken(cpar,')',92,2313) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur factor arroba type dot id opar arg_list_empty . LexToken(cpar,')',92,2313) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur factor arroba type dot id opar args . LexToken(cpar,')',92,2313) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur factor arroba type dot id opar args cpar . LexToken(ccur,'}',93,2319) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['copy','(',[],')'] and goto state 212 + yacc.py: 506:Result : (('copy', [])) + yacc.py: 410: + yacc.py: 411:State : 212 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur factor arroba type dot func_call . LexToken(ccur,'}',93,2319) + yacc.py: 471:Action : Reduce rule [base_call -> factor arroba type dot func_call] with [,'@','Object','.',('copy', [])] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 16 + yacc.py: 430:Defaulted state 16: Reduce using 14 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',94,2322) + yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 48 + yacc.py: 430:Defaulted state 48: Reduce using 16 + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',94,2322) + yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Test2','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class def_class def_class class type inherits type ocur id opar epsilon . LexToken(cpar,')',97,2362) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class def_class def_class class type inherits type ocur id opar param_list_empty . LexToken(cpar,')',97,2362) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class def_class def_class class type inherits type ocur id opar formals . LexToken(cpar,')',97,2362) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class def_class def_class class type inherits type ocur id opar formals cpar . LexToken(colon,':',97,2364) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class def_class def_class class type inherits type ocur id opar formals cpar colon . LexToken(type,'Object',97,2366) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class def_class def_class class type inherits type ocur id opar formals cpar colon type . LexToken(ocur,'{',97,2373) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class def_class def_class class type inherits type ocur id opar formals cpar colon type ocur . LexToken(id,'out_string',98,2383) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class def_class def_class class type inherits type ocur id opar formals cpar colon type ocur id . LexToken(opar,'(',98,2393) + yacc.py: 445:Action : Shift and goto state 113 + yacc.py: 410: + yacc.py: 411:State : 113 + yacc.py: 435:Stack : def_class def_class def_class class type inherits type ocur id opar formals cpar colon type ocur id opar . LexToken(string,'reached!!\n',98,2406) + yacc.py: 445:Action : Shift and goto state 93 + yacc.py: 410: + yacc.py: 411:State : 93 + yacc.py: 435:Stack : def_class def_class def_class class type inherits type ocur id opar formals cpar colon type ocur id opar string . LexToken(cpar,')',98,2407) + yacc.py: 471:Action : Reduce rule [atom -> string] with ['reached!!\n'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : (('out_string', [ func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 16 + yacc.py: 430:Defaulted state 16: Reduce using 14 + yacc.py: 435:Stack : def_class def_class def_class class type inherits type ocur def_func semi epsilon . LexToken(ccur,'}',100,2416) + yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 48 + yacc.py: 430:Defaulted state 48: Reduce using 16 + yacc.py: 435:Stack : def_class def_class def_class class type inherits type ocur def_func semi feature_list . LexToken(ccur,'}',100,2416) + yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 + yacc.py: 506:Result : ([ ([ param_list_empty','formals',1,'p_formals','parser.py',90), ('param_list -> param','param_list',1,'p_param_list','parser.py',96), ('param_list -> param comma param_list','param_list',3,'p_param_list','parser.py',97), - ('param_list -> error comma param_list','param_list',3,'p_param_list_error','parser.py',101), - ('param_list -> param comma error','param_list',3,'p_param_list_error','parser.py',102), - ('param_list_empty -> epsilon','param_list_empty',1,'p_param_list_empty','parser.py',107), - ('param -> id colon type','param',3,'p_param','parser.py',111), - ('let_list -> let_assign','let_list',1,'p_let_list','parser.py',116), - ('let_list -> let_assign comma let_list','let_list',3,'p_let_list','parser.py',117), - ('let_list -> error let_list','let_list',2,'p_let_list_error','parser.py',121), - ('let_list -> error','let_list',1,'p_let_list_error','parser.py',122), - ('let_assign -> param larrow expr','let_assign',3,'p_let_assign','parser.py',126), - ('let_assign -> param','let_assign',1,'p_let_assign','parser.py',127), - ('cases_list -> casep semi','cases_list',2,'p_cases_list','parser.py',135), - ('cases_list -> casep semi cases_list','cases_list',3,'p_cases_list','parser.py',136), - ('cases_list -> error cases_list','cases_list',2,'p_cases_list_error','parser.py',140), - ('cases_list -> error semi','cases_list',2,'p_cases_list_error','parser.py',141), - ('casep -> id colon type rarrow expr','casep',5,'p_case','parser.py',145), - ('expr -> id larrow expr','expr',3,'p_expr','parser.py',150), - ('expr -> comp','expr',1,'p_expr','parser.py',151), - ('comp -> comp less op','comp',3,'p_comp','parser.py',159), - ('comp -> comp lesseq op','comp',3,'p_comp','parser.py',160), - ('comp -> comp equal op','comp',3,'p_comp','parser.py',161), - ('comp -> op','comp',1,'p_comp','parser.py',162), - ('comp -> comp less error','comp',3,'p_comp_error','parser.py',174), - ('comp -> comp lesseq error','comp',3,'p_comp_error','parser.py',175), - ('comp -> comp equal error','comp',3,'p_comp_error','parser.py',176), - ('op -> op plus term','op',3,'p_op','parser.py',181), - ('op -> op minus term','op',3,'p_op','parser.py',182), - ('op -> term','op',1,'p_op','parser.py',183), - ('op -> op plus error','op',3,'p_op_error','parser.py',193), - ('op -> op minus error','op',3,'p_op_error','parser.py',194), - ('term -> term star base_call','term',3,'p_term','parser.py',199), - ('term -> term div base_call','term',3,'p_term','parser.py',200), - ('term -> isvoid base_call','term',2,'p_term','parser.py',201), - ('term -> nox base_call','term',2,'p_term','parser.py',202), - ('term -> base_call','term',1,'p_term','parser.py',203), - ('term -> term star error','term',3,'p_term_error','parser.py',216), - ('term -> term div error','term',3,'p_term_error','parser.py',217), - ('term -> isvoid error','term',2,'p_term_error','parser.py',218), - ('term -> nox error','term',2,'p_term_error','parser.py',219), - ('base_call -> factor arroba type dot func_call','base_call',5,'p_base_call','parser.py',226), - ('base_call -> factor','base_call',1,'p_base_call','parser.py',227), - ('base_call -> error arroba type dot func_call','base_call',5,'p_base_call_error','parser.py',234), - ('base_call -> factor arroba error dot func_call','base_call',5,'p_base_call_error','parser.py',235), - ('factor -> atom','factor',1,'p_factor1','parser.py',240), - ('factor -> opar expr cpar','factor',3,'p_factor1','parser.py',241), - ('factor -> opar expr error','factor',3,'p_factor1_error','parser.py',245), - ('factor -> error expr cpar','factor',3,'p_factor1_error','parser.py',246), - ('factor -> opar error cpar','factor',3,'p_factor1_error','parser.py',247), - ('factor -> factor dot func_call','factor',3,'p_factor2','parser.py',252), - ('factor -> not expr','factor',2,'p_factor2','parser.py',253), - ('factor -> func_call','factor',1,'p_factor2','parser.py',254), - ('factor -> let let_list in expr','factor',4,'p_expr_let','parser.py',264), - ('factor -> let error in expr','factor',4,'p_expr_let_error','parser.py',268), - ('factor -> let let_list in error','factor',4,'p_expr_let_error','parser.py',269), - ('factor -> let let_list error expr','factor',4,'p_expr_let_error','parser.py',270), - ('factor -> case expr of cases_list esac','factor',5,'p_expr_case','parser.py',275), - ('factor -> case error of cases_list esac','factor',5,'p_expr_case_error','parser.py',279), - ('factor -> case expr of error esac','factor',5,'p_expr_case_error','parser.py',280), - ('factor -> case expr error cases_list esac','factor',5,'p_expr_case_error','parser.py',281), - ('factor -> case expr of cases_list error','factor',5,'p_expr_case_error','parser.py',282), - ('factor -> if expr then expr else expr fi','factor',7,'p_expr_if','parser.py',287), - ('factor -> if error then expr else expr fi','factor',7,'p_expr_if_error','parser.py',291), - ('factor -> if expr then error else expr fi','factor',7,'p_expr_if_error','parser.py',292), - ('factor -> if expr then expr else error fi','factor',7,'p_expr_if_error','parser.py',293), - ('factor -> if expr error expr else expr fi','factor',7,'p_expr_if_error','parser.py',294), - ('factor -> if expr then expr error error expr fi','factor',8,'p_expr_if_error','parser.py',295), - ('factor -> if expr then expr error expr fi','factor',7,'p_expr_if_error','parser.py',296), - ('factor -> if expr then expr else expr error','factor',7,'p_expr_if_error','parser.py',297), - ('factor -> if error fi','factor',3,'p_expr_if_error','parser.py',298), - ('factor -> while expr loop expr pool','factor',5,'p_expr_while','parser.py',303), - ('factor -> while error loop expr pool','factor',5,'p_expr_while_error','parser.py',308), - ('factor -> while expr loop error pool','factor',5,'p_expr_while_error','parser.py',309), - ('factor -> while expr loop expr error','factor',5,'p_expr_while_error','parser.py',310), - ('factor -> while expr error expr loop expr pool','factor',7,'p_expr_while_error','parser.py',311), - ('factor -> while expr error expr pool','factor',5,'p_expr_while_error','parser.py',312), - ('atom -> num','atom',1,'p_atom_num','parser.py',317), - ('atom -> id','atom',1,'p_atom_id','parser.py',321), - ('atom -> new type','atom',2,'p_atom_new','parser.py',325), - ('atom -> new error','atom',2,'p_atom_new_error','parser.py',329), - ('atom -> ocur block ccur','atom',3,'p_atom_block','parser.py',333), - ('atom -> error block ccur','atom',3,'p_atom_block_error','parser.py',337), - ('atom -> ocur error ccur','atom',3,'p_atom_block_error','parser.py',338), - ('atom -> ocur block error','atom',3,'p_atom_block_error','parser.py',339), - ('atom -> true','atom',1,'p_atom_boolean','parser.py',343), - ('atom -> false','atom',1,'p_atom_boolean','parser.py',344), - ('atom -> string','atom',1,'p_atom_string','parser.py',348), - ('block -> expr semi','block',2,'p_block','parser.py',353), - ('block -> expr semi block','block',3,'p_block','parser.py',354), - ('block -> error block','block',2,'p_block_error','parser.py',358), - ('block -> error semi','block',2,'p_block_error','parser.py',359), - ('func_call -> id opar args cpar','func_call',4,'p_func_call','parser.py',364), - ('func_call -> id opar error cpar','func_call',4,'p_func_call_error','parser.py',368), - ('func_call -> error opar args cpar','func_call',4,'p_func_call_error','parser.py',369), - ('args -> arg_list','args',1,'p_args','parser.py',374), - ('args -> arg_list_empty','args',1,'p_args','parser.py',375), - ('arg_list -> expr','arg_list',1,'p_arg_list','parser.py',381), - ('arg_list -> expr comma arg_list','arg_list',3,'p_arg_list','parser.py',382), - ('arg_list -> error arg_list','arg_list',2,'p_arg_list_error','parser.py',389), - ('arg_list_empty -> epsilon','arg_list_empty',1,'p_arg_list_empty','parser.py',393), + ('param_list_empty -> epsilon','param_list_empty',1,'p_param_list_empty','parser.py',106), + ('param -> id colon type','param',3,'p_param','parser.py',110), + ('let_list -> let_assign','let_list',1,'p_let_list','parser.py',115), + ('let_list -> let_assign comma let_list','let_list',3,'p_let_list','parser.py',116), + ('let_assign -> param larrow expr','let_assign',3,'p_let_assign','parser.py',125), + ('let_assign -> param','let_assign',1,'p_let_assign','parser.py',126), + ('cases_list -> casep semi','cases_list',2,'p_cases_list','parser.py',134), + ('cases_list -> casep semi cases_list','cases_list',3,'p_cases_list','parser.py',135), + ('cases_list -> error cases_list','cases_list',2,'p_cases_list_error','parser.py',139), + ('cases_list -> error semi','cases_list',2,'p_cases_list_error','parser.py',140), + ('casep -> id colon type rarrow expr','casep',5,'p_case','parser.py',144), + ('expr -> id larrow expr','expr',3,'p_expr','parser.py',149), + ('expr -> comp','expr',1,'p_expr','parser.py',150), + ('comp -> comp less op','comp',3,'p_comp','parser.py',158), + ('comp -> comp lesseq op','comp',3,'p_comp','parser.py',159), + ('comp -> comp equal op','comp',3,'p_comp','parser.py',160), + ('comp -> op','comp',1,'p_comp','parser.py',161), + ('op -> op plus term','op',3,'p_op','parser.py',180), + ('op -> op minus term','op',3,'p_op','parser.py',181), + ('op -> term','op',1,'p_op','parser.py',182), + ('term -> term star base_call','term',3,'p_term','parser.py',197), + ('term -> term div base_call','term',3,'p_term','parser.py',198), + ('term -> base_call','term',1,'p_term','parser.py',199), + ('term -> term star error','term',3,'p_term_error','parser.py',209), + ('term -> term div error','term',3,'p_term_error','parser.py',210), + ('base_call -> factor arroba type dot func_call','base_call',5,'p_base_call','parser.py',215), + ('base_call -> factor','base_call',1,'p_base_call','parser.py',216), + ('base_call -> error arroba type dot func_call','base_call',5,'p_base_call_error','parser.py',223), + ('base_call -> factor arroba error dot func_call','base_call',5,'p_base_call_error','parser.py',224), + ('factor -> atom','factor',1,'p_factor1','parser.py',229), + ('factor -> opar expr cpar','factor',3,'p_factor1','parser.py',230), + ('factor -> factor dot func_call','factor',3,'p_factor2','parser.py',234), + ('factor -> not expr','factor',2,'p_factor2','parser.py',235), + ('factor -> func_call','factor',1,'p_factor2','parser.py',236), + ('factor -> isvoid base_call','factor',2,'p_factor3','parser.py',245), + ('factor -> nox base_call','factor',2,'p_factor3','parser.py',246), + ('factor -> let let_list in expr','factor',4,'p_expr_let','parser.py',255), + ('factor -> case expr of cases_list esac','factor',5,'p_expr_case','parser.py',267), + ('factor -> if expr then expr else expr fi','factor',7,'p_expr_if','parser.py',279), + ('factor -> while expr loop expr pool','factor',5,'p_expr_while','parser.py',293), + ('atom -> num','atom',1,'p_atom_num','parser.py',306), + ('atom -> id','atom',1,'p_atom_id','parser.py',310), + ('atom -> new type','atom',2,'p_atom_new','parser.py',314), + ('atom -> ocur block ccur','atom',3,'p_atom_block','parser.py',318), + ('atom -> error block ccur','atom',3,'p_atom_block_error','parser.py',322), + ('atom -> ocur error ccur','atom',3,'p_atom_block_error','parser.py',323), + ('atom -> ocur block error','atom',3,'p_atom_block_error','parser.py',324), + ('atom -> true','atom',1,'p_atom_boolean','parser.py',328), + ('atom -> false','atom',1,'p_atom_boolean','parser.py',329), + ('atom -> string','atom',1,'p_atom_string','parser.py',333), + ('block -> expr semi','block',2,'p_block','parser.py',338), + ('block -> expr semi block','block',3,'p_block','parser.py',339), + ('block -> error block','block',2,'p_block_error','parser.py',343), + ('block -> error semi','block',2,'p_block_error','parser.py',344), + ('func_call -> id opar args cpar','func_call',4,'p_func_call','parser.py',349), + ('func_call -> id opar error cpar','func_call',4,'p_func_call_error','parser.py',353), + ('func_call -> error opar args cpar','func_call',4,'p_func_call_error','parser.py',354), + ('args -> arg_list','args',1,'p_args','parser.py',359), + ('args -> arg_list_empty','args',1,'p_args','parser.py',360), + ('arg_list -> expr','arg_list',1,'p_arg_list','parser.py',366), + ('arg_list -> expr comma arg_list','arg_list',3,'p_arg_list','parser.py',367), + ('arg_list -> error arg_list','arg_list',2,'p_arg_list_error','parser.py',374), + ('arg_list_empty -> epsilon','arg_list_empty',1,'p_arg_list_empty','parser.py',378), ] diff --git a/src/parser.py b/src/parser.py index 5b6b7225..ea0a4d43 100644 --- a/src/parser.py +++ b/src/parser.py @@ -97,10 +97,9 @@ def p_param_list(self, p): | param comma param_list''' p[0] = [p[1]] if len(p) == 2 else [p[1]] + p[3] - def p_param_list_error(self, p): - '''param_list : error comma param_list - | param comma error''' - p[0] = [ErrorNode()] + # def p_param_list_error(self, p): + # '''param_list : error comma param_list''' + # p[0] = [ErrorNode()] def p_param_list_empty(self, p): @@ -117,10 +116,10 @@ def p_let_list(self, p): | let_assign comma let_list''' p[0] = [p[1]] if len(p) == 2 else [p[1]] + p[3] - def p_let_list_error(self, p): - '''let_list : error let_list - | error''' - p[0] = [ErrorNode()] + # def p_let_list_error(self, p): + # '''let_list : error let_list + # | error''' + # p[0] = [ErrorNode()] def p_let_assign(self, p): '''let_assign : param larrow expr @@ -170,11 +169,11 @@ def p_comp(self, p): p[0] = EqualNode(p[1], p[3]) - def p_comp_error(self, p): - '''comp : comp less error - | comp lesseq error - | comp equal error''' - p[0] = ErrorNode() + # def p_comp_error(self, p): + # '''comp : comp less error + # | comp lesseq error + # | comp equal error''' + # p[0] = ErrorNode() def p_op(self, p): @@ -187,40 +186,30 @@ def p_op(self, p): p[0] = PlusNode(p[1], p[3]) elif p[2] == '-': p[0] = MinusNode(p[1], p[3]) - - - def p_op_error(self, p): - '''op : op plus error - | op minus error''' - p[0] = ErrorNode() + + # def p_op_error(self, p): + # '''op : op plus error + # | op minus error''' + # p[0] = ErrorNode() def p_term(self, p): '''term : term star base_call | term div base_call - | isvoid base_call - | nox base_call | base_call''' if len(p) == 2: p[0] = p[1] - elif p[1] == 'isvoid': - p[0] = IsVoidNode(p[2]) - elif p[1] == '~': - p[0] = BinaryNotNode(p[2]) elif p[2] == '*': p[0] = StarNode(p[1], p[3]) elif p[2] == '/': p[0] = DivNode(p[1], p[3]) + def p_term_error(self, p): '''term : term star error - | term div error - | isvoid error - | nox error''' - if len(p) == 2: - p[0] = ErrorNode() - else: - p[0] = ErrorNode() + | term div error''' + p[0] = ErrorNode() + def p_base_call(self, p): '''base_call : factor arroba type dot func_call @@ -240,14 +229,7 @@ def p_factor1(self, p): '''factor : atom | opar expr cpar''' p[0] = p[1] if len(p) == 2 else p[2] - - def p_factor1_error(self, p): - '''factor : opar expr error - | error expr cpar - | opar error cpar''' - p[0] = ErrorNode() - - + def p_factor2(self, p): '''factor : factor dot func_call | not expr @@ -259,44 +241,52 @@ def p_factor2(self, p): else: p[0] = CallNode(p[1], *p[3]) + def p_factor3(self, p): + '''factor : isvoid base_call + | nox base_call + ''' + if p[1] == 'isvoid': + p[0] = IsVoidNode(p[2]) + else: + p[0] = BinaryNotNode(p[2]) + def p_expr_let(self, p): 'factor : let let_list in expr' p[0] = LetNode(p[2], p[4]) - def p_expr_let_error(self, p): - '''factor : let error in expr - | let let_list in error - | let let_list error expr''' - p[0] = ErrorNode() + + # def p_expr_let_error(self, p): + # '''factor : let error in expr + # | let let_list in error + # | let let_list error expr''' + # p[0] = ErrorNode() def p_expr_case(self, p): 'factor : case expr of cases_list esac' p[0] = CaseNode(p[2], p[4]) - def p_expr_case_error(self, p): - '''factor : case error of cases_list esac - | case expr of error esac - | case expr error cases_list esac - | case expr of cases_list error''' - p[0] = ErrorNode() + # def p_expr_case_error(self, p): + # '''factor : case error of cases_list esac + # | case expr of error esac + # | case expr error cases_list esac + # | case expr of cases_list error''' + # p[0] = ErrorNode() def p_expr_if(self, p): 'factor : if expr then expr else expr fi' p[0] = ConditionalNode(p[2], p[4], p[6]) - def p_expr_if_error(self, p): - '''factor : if error then expr else expr fi - | if expr then error else expr fi - | if expr then expr else error fi - | if expr error expr else expr fi - | if expr then expr error error expr fi - | if expr then expr error expr fi - | if expr then expr else expr error - | if error fi''' - p[0] = ErrorNode() + # def p_expr_if_error(self, p): + # '''factor : if error then expr else expr fi + # | if expr then error else expr fi + # | if expr then expr else error fi + # | if expr error expr else expr fi + # | if expr then expr error expr fi + # | if expr then expr else expr error''' + # p[0] = ErrorNode() def p_expr_while(self, p): @@ -304,13 +294,12 @@ def p_expr_while(self, p): p[0] = WhileNode(p[2], p[4]) - def p_expr_while_error(self, p): - '''factor : while error loop expr pool - | while expr loop error pool - | while expr loop expr error - | while expr error expr loop expr pool - | while expr error expr pool''' - p[0] = ErrorNode() + # def p_expr_while_error(self, p): + # '''factor : while error loop expr pool + # | while expr loop error pool + # | while expr loop expr error + # | while expr error expr pool''' + # p[0] = ErrorNode() def p_atom_num(self, p): @@ -325,10 +314,6 @@ def p_atom_new(self, p): 'atom : new type' p[0] = InstantiateNode(p[2]) - def p_atom_new_error(self, p): - 'atom : new error' - p[0] = ErrorNode() - def p_atom_block(self, p): 'atom : ocur block ccur' p[0] = BlockNode(p[2]) @@ -412,31 +397,8 @@ def print_error(self, tok): - if __name__ == "__main__": - s = '''class Main inherits IO { - main() : Object { - { - out_string("Enter number of numbers to multiply\n"); - out_int(prod(in_int())); - out_string("\n"); - } - }; - - prod(i : Int) : Int { - let y : Int <- 1 in { - while (not (i = 0) ) loop { - out_string("Enter Number: "); - y <- y * in_int(Main : Int); -- the parser correctly catches the error here - i <- i - 1; - } - pool; - y; - } - }; -}; - -''' + s = '''''' # Parser() parser = CoolParser() result = parser.parse(s) diff --git a/src/tools/__pycache__/errors.cpython-37.pyc b/src/tools/__pycache__/errors.cpython-37.pyc index 4913345ec136b13aac0ac09b880f882e65a7e7b1..8177bc52f79b325606f1fc4f57059b9c9fa1cc1f 100644 GIT binary patch delta 352 zcmX@D{9l>ZiI= z%FIhwNY2kINzBYER>&*O$x%qoNGwWBE=et#{D)I%G6%Z~qvm8?cJ0Z_1w<$3vfK0C z;`R&m@re%(3G(!FpUlW9KlwB}Cl?>kLJme2CKkrYci1-yMDYbz0u4P|gB~i`jq#*f^#l zh0Vvff*B{9@To9*PqyP(%c=;JbDI2tM|AQ>KB>*}yrPVgV+2$f!zM@aHBEL9WDyPk znZN-v0qCeArOluCvKSeaC(CmwGp0;#6xc7T43v)sDMYxOg%J#yij*hE3Mx)+78C*M Qm@KHz$tS=CgnRtMMe2V zR+9sH6c~*rf96OOl>;i&1>#~hs16pUBDu-Z91fFLa;{{QpFB}OnbBr)IaeO5JWzr8 zRsc#k0&y|SQWl`aAY7yXG)QuDFs~@%WM3W?#?Z;V zd`*0cK&Ad5YV+0xqGE!;s eL_tMHxykDUB_?0w5}tfdP=b?JfC~uu1h@g@qCVyfM6~GV-X9=*72Pskn5z27oNE$(6 m5O{P1P3Dr8wYcd#N_)d>Y^YSBx}I>kLvE-x{7e}#y$kf7HOqnUSSV}4jQg2QE&p5?e4ruZ% zww%no)V%y#%mw+ynyerza?*;FKr*Z#mGMQ&Kz5M|kXXr3qz9T8 delta 111 zcmX@l_?D5=iIUP{a%r0ux`GfUJq3dUgtqhd1WyJLl&X z8KDIhX)-%nVNe delta 60 zcmZ3*yq=lYiIw(0?9ePR%j)ynq>pSP?7UZPnrskF8 z7b~QsDuDQzIf==chd1X Date: Wed, 26 Feb 2020 19:20:48 -0700 Subject: [PATCH 16/60] Fixing last case --- src/__pycache__/parser.cpython-37.pyc | Bin 13889 -> 13887 bytes src/main.py | 12 +- src/output_parser/parselog.txt | 3870 +++++++++---------- src/tools/__pycache__/errors.cpython-37.pyc | Bin 4607 -> 4605 bytes src/utils/__pycache__/logger.cpython-37.pyc | Bin 426 -> 424 bytes 5 files changed, 1945 insertions(+), 1937 deletions(-) diff --git a/src/__pycache__/parser.cpython-37.pyc b/src/__pycache__/parser.cpython-37.pyc index 10a9aa953c3353620fda6899a6853b90191d0e8e..d29d452da23ef613f42bb63744d90c25a893aa39 100644 GIT binary patch delta 131 zcmX?@vp;nzea2gxlZ==d-GYF!w^+*(b4pW- zSb*%JU=R@sB0_+KCQA_~kh;ZOlAm1^1`-Vi5gc%W8^j9SyxQ1@ku4I;p8VJ3C1cFw H=cZ8rbjcuI delta 134 zcmdm=b1;Y7iI ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',4,85) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',4,85) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',4,85) @@ -6192,37 +6192,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',5,115) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar epsilon . LexToken(cpar,')',5,123) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar arg_list_empty . LexToken(cpar,')',5,123) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args . LexToken(cpar,')',5,123) @@ -6269,37 +6269,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args cpar . LexToken(ccur,'}',6,129) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['print','(',[],')'] and goto state 167 - yacc.py: 506:Result : (('print', [])) + yacc.py: 506:Result : (('print', [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot func_call . LexToken(ccur,'}',6,129) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',('print', [])] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',('print', [])] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : class type ocur def_func semi epsilon . LexToken(ccur,'}',7,132) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : class type ocur def_func semi feature_list . LexToken(ccur,'}',7,132) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 14 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['test1',':','Object'] and goto state 17 - yacc.py: 506:Result : ( ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi id opar epsilon . LexToken(cpar,')',12,186) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi id opar param_list_empty . LexToken(cpar,')',12,186) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi id opar formals . LexToken(cpar,')',12,186) @@ -6426,27 +6426,27 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi id opar formals cpar colon type ocur num . LexToken(plus,'+',13,205) yacc.py: 471:Action : Reduce rule [atom -> num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( string] with ['1'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 + yacc.py: 506:Result : ( id colon type] with ['a',':','Alpha'] and goto state 44 - yacc.py: 506:Result : (('a', 'Alpha')) + yacc.py: 506:Result : (('a', 'Alpha')) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi id opar param . LexToken(comma,',',20,287) @@ -6679,24 +6679,24 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi id opar param comma id colon type . LexToken(cpar,')',20,295) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['b',':','Int'] and goto state 44 - yacc.py: 506:Result : (('b', 'Int')) + yacc.py: 506:Result : (('b', 'Int')) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi id opar param comma param . LexToken(cpar,')',20,295) yacc.py: 471:Action : Reduce rule [param_list -> param] with [('b', 'Int')] and goto state 95 - yacc.py: 506:Result : ([('b', 'Int')]) + yacc.py: 506:Result : ([('b', 'Int')]) yacc.py: 410: yacc.py: 411:State : 95 yacc.py: 430:Defaulted state 95: Reduce using 33 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi id opar param comma param_list . LexToken(cpar,')',20,295) yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [('a', 'Alpha'),',',[('b', 'Int')]] and goto state 42 - yacc.py: 506:Result : ([('a', 'Alpha'), ('b', 'Int')]) + yacc.py: 506:Result : ([('a', 'Alpha'), ('b', 'Int')]) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi id opar param_list . LexToken(cpar,')',20,295) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([('a', 'Alpha'), ('b', 'Int')]) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([('a', 'Alpha'), ('b', 'Int')]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi id opar formals . LexToken(cpar,')',20,295) @@ -6721,27 +6721,27 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi id opar formals cpar colon type ocur num . LexToken(plus,'+',21,314) yacc.py: 471:Action : Reduce rule [atom -> num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',24,339) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',24,339) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',24,339) @@ -6848,37 +6848,37 @@ yacc.py: 411:State : 93 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi id opar formals cpar colon type ocur string . LexToken(ccur,'}',26,371) yacc.py: 471:Action : Reduce rule [atom -> string] with ['2 + 2'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','String','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','String','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['x',':','Int'] and goto state 44 - yacc.py: 506:Result : (('x', 'Int')) + yacc.py: 506:Result : (('x', 'Int')) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar param . LexToken(comma,',',28,394) @@ -6938,24 +6938,24 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar param comma id colon type . LexToken(cpar,')',28,402) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['y',':','Int'] and goto state 44 - yacc.py: 506:Result : (('y', 'Int')) + yacc.py: 506:Result : (('y', 'Int')) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar param comma param . LexToken(cpar,')',28,402) yacc.py: 471:Action : Reduce rule [param_list -> param] with [('y', 'Int')] and goto state 95 - yacc.py: 506:Result : ([('y', 'Int')]) + yacc.py: 506:Result : ([('y', 'Int')]) yacc.py: 410: yacc.py: 411:State : 95 yacc.py: 430:Defaulted state 95: Reduce using 33 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar param comma param_list . LexToken(cpar,')',28,402) yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [('x', 'Int'),',',[('y', 'Int')]] and goto state 42 - yacc.py: 506:Result : ([('x', 'Int'), ('y', 'Int')]) + yacc.py: 506:Result : ([('x', 'Int'), ('y', 'Int')]) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',28,402) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([('x', 'Int'), ('y', 'Int')]) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([('x', 'Int'), ('y', 'Int')]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',28,402) @@ -6980,37 +6980,37 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',30,429) yacc.py: 471:Action : Reduce rule [atom -> id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',,')',':','Test','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',,')',':','Test','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['a',':','String'] and goto state 44 - yacc.py: 506:Result : (('a', 'String')) + yacc.py: 506:Result : (('a', 'String')) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param . LexToken(comma,',',32,455) @@ -7070,24 +7070,24 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma id colon type . LexToken(cpar,')',32,466) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['b',':','String'] and goto state 44 - yacc.py: 506:Result : (('b', 'String')) + yacc.py: 506:Result : (('b', 'String')) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param . LexToken(cpar,')',32,466) yacc.py: 471:Action : Reduce rule [param_list -> param] with [('b', 'String')] and goto state 95 - yacc.py: 506:Result : ([('b', 'String')]) + yacc.py: 506:Result : ([('b', 'String')]) yacc.py: 410: yacc.py: 411:State : 95 yacc.py: 430:Defaulted state 95: Reduce using 33 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param_list . LexToken(cpar,')',32,466) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [('a', 'String'),',',] and goto state 42 - yacc.py: 506:Result : ([('a', 'String'), ('b', 'String')]) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [('a', 'String'),',',] and goto state 42 + yacc.py: 506:Result : ([('a', 'String'), ('b', 'String')]) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',32,466) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([('a', 'String'), ('b', 'String')]) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([('a', 'String'), ('b', 'String')]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',32,466) @@ -7116,12 +7116,12 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if id . LexToken(dot,'.',33,486) yacc.py: 471:Action : Reduce rule [atom -> id] with ['a'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if factor dot id opar epsilon . LexToken(cpar,')',33,494) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if factor dot id opar arg_list_empty . LexToken(cpar,')',33,494) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if factor dot id opar args . LexToken(cpar,')',33,494) @@ -7159,32 +7159,32 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if factor dot id opar args cpar . LexToken(less,'<',33,496) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['length','(',[],')'] and goto state 167 - yacc.py: 506:Result : (('length', [])) + yacc.py: 506:Result : (('length', [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if factor dot func_call . LexToken(less,'<',33,496) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',('length', [])] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',('length', [])] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( id] with ['b'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if comp less factor dot id opar epsilon . LexToken(cpar,')',33,507) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if comp less factor dot id opar arg_list_empty . LexToken(cpar,')',33,507) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if comp less factor dot id opar args . LexToken(cpar,')',33,507) @@ -7240,37 +7240,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if comp less factor dot id opar args cpar . LexToken(then,'THeN',33,509) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['length','(',[],')'] and goto state 167 - yacc.py: 506:Result : (('length', [])) + yacc.py: 506:Result : (('length', [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if comp less factor dot func_call . LexToken(then,'THeN',33,509) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',('length', [])] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',('length', [])] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 156 - yacc.py: 506:Result : ( term] with [] and goto state 156 + yacc.py: 506:Result : ( comp less op] with [,'<',] and goto state 73 - yacc.py: 506:Result : ( comp less op] with [,'<',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( new type] with ['new','IO'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( string] with ['La cadena "'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( id] with ['b'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 - yacc.py: 506:Result : (('concat', [ id opar args cpar] with ['concat','(',,')'] and goto state 167 + yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( string] with [] and goto state 79 - yacc.py: 506:Result : ( string] with [] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 - yacc.py: 506:Result : (('concat', [ id opar args cpar] with ['concat','(',,')'] and goto state 167 + yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 - yacc.py: 506:Result : (('concat', [ id opar args cpar] with ['concat','(',,')'] and goto state 167 + yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( string] with ['".'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 - yacc.py: 506:Result : (('concat', [ id opar args cpar] with ['concat','(',,')'] and goto state 167 + yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 167 - yacc.py: 506:Result : (('out_string', [ id opar args cpar] with ['out_string','(',,')'] and goto state 167 + yacc.py: 506:Result : (('out_string', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if factor dot id opar epsilon . LexToken(cpar,')',36,674) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if factor dot id opar arg_list_empty . LexToken(cpar,')',36,674) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if factor dot id opar args . LexToken(cpar,')',36,674) @@ -7757,32 +7757,32 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if factor dot id opar args cpar . LexToken(equal,'=',36,676) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['length','(',[],')'] and goto state 167 - yacc.py: 506:Result : (('length', [])) + yacc.py: 506:Result : (('length', [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if factor dot func_call . LexToken(equal,'=',36,676) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',('length', [])] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',('length', [])] and goto state 77 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( id] with ['b'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if comp equal factor dot id opar epsilon . LexToken(cpar,')',36,687) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if comp equal factor dot id opar arg_list_empty . LexToken(cpar,')',36,687) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if comp equal factor dot id opar args . LexToken(cpar,')',36,687) @@ -7838,37 +7838,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if comp equal factor dot id opar args cpar . LexToken(then,'THeN',36,689) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['length','(',[],')'] and goto state 167 - yacc.py: 506:Result : (('length', [])) + yacc.py: 506:Result : (('length', [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if comp equal factor dot func_call . LexToken(then,'THeN',36,689) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',('length', [])] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',('length', [])] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( new type] with ['new','IO'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( string] with ['La cadena "'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 - yacc.py: 506:Result : (('concat', [ id opar args cpar] with ['concat','(',,')'] and goto state 167 + yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( string] with [] and goto state 79 - yacc.py: 506:Result : ( string] with [] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 - yacc.py: 506:Result : (('concat', [ id opar args cpar] with ['concat','(',,')'] and goto state 167 + yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( id] with ['b'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 - yacc.py: 506:Result : (('concat', [ id opar args cpar] with ['concat','(',,')'] and goto state 167 + yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( string] with ['".'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 - yacc.py: 506:Result : (('concat', [ id opar args cpar] with ['concat','(',,')'] and goto state 167 + yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 167 - yacc.py: 506:Result : (('out_string', [ id opar args cpar] with ['out_string','(',,')'] and goto state 167 + yacc.py: 506:Result : (('out_string', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( new type] with ['new','IO'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( string] with ['La cadena "'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 - yacc.py: 506:Result : (('concat', [ id opar args cpar] with ['concat','(',,')'] and goto state 167 + yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( string] with [] and goto state 79 - yacc.py: 506:Result : ( string] with [] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 - yacc.py: 506:Result : (('concat', [ id opar args cpar] with ['concat','(',,')'] and goto state 167 + yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( id] with ['b'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 - yacc.py: 506:Result : (('concat', [ id opar args cpar] with ['concat','(',,')'] and goto state 167 + yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( string] with ['".'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 - yacc.py: 506:Result : (('concat', [ id opar args cpar] with ['concat','(',,')'] and goto state 167 + yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 167 - yacc.py: 506:Result : (('out_string', [ id opar args cpar] with ['out_string','(',,')'] and goto state 167 + yacc.py: 506:Result : (('out_string', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'THeN',,'ElsE',,'fI'] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'THeN',,'ElsE',,'fI'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( if expr then expr else expr fi] with ['If',,'THeN',,'eLSe',,'Fi'] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['If',,'THeN',,'eLSe',,'Fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing5','(',,')',':','IO','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing5','(',,')',':','IO','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['a',':','Int'] and goto state 44 - yacc.py: 506:Result : (('a', 'Int')) + yacc.py: 506:Result : (('a', 'Int')) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar param . LexToken(cpar,')',44,1016) yacc.py: 471:Action : Reduce rule [param_list -> param] with [('a', 'Int')] and goto state 42 - yacc.py: 506:Result : ([('a', 'Int')]) + yacc.py: 506:Result : ([('a', 'Int')]) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',44,1016) yacc.py: 471:Action : Reduce rule [formals -> param_list] with [[('a', 'Int')]] and goto state 51 - yacc.py: 506:Result : ([('a', 'Int')]) + yacc.py: 506:Result : ([('a', 'Int')]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',44,1016) @@ -8877,7 +8877,7 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur let id colon type . LexToken(larrow,'<-',45,1047) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['count',':','Int'] and goto state 130 - yacc.py: 506:Result : (('count', 'Int')) + yacc.py: 506:Result : (('count', 'Int')) yacc.py: 410: yacc.py: 411:State : 130 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur let param . LexToken(larrow,'<-',45,1047) @@ -8890,42 +8890,42 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur let param larrow num . LexToken(comma,',',45,1051) yacc.py: 471:Action : Reduce rule [atom -> num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 - yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 + yacc.py: 506:Result : ( id colon type] with ['pow',':','Int'] and goto state 130 - yacc.py: 506:Result : (('pow', 'Int')) + yacc.py: 506:Result : (('pow', 'Int')) yacc.py: 410: yacc.py: 411:State : 130 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur let let_assign comma param . LexToken(in,'in',46,1071) yacc.py: 471:Action : Reduce rule [let_assign -> param] with [('pow', 'Int')] and goto state 129 - yacc.py: 506:Result : ( ( let_assign] with [] and goto state 197 - yacc.py: 506:Result : ([ let_assign] with [] and goto state 197 + yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 - yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 + yacc.py: 506:Result : ([ num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['pow','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['pow','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['pow'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 156 - yacc.py: 506:Result : ( term] with [] and goto state 156 + yacc.py: 506:Result : ( comp less op] with [,'<',] and goto state 73 - yacc.py: 506:Result : ( comp less op] with [,'<',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 133 - yacc.py: 506:Result : ( comp] with [] and goto state 133 + yacc.py: 506:Result : ( id] with ['count'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['pow'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 161 - yacc.py: 506:Result : ( factor] with [] and goto state 161 + yacc.py: 506:Result : ( term star base_call] with [,'*',] and goto state 75 - yacc.py: 506:Result : ( term star base_call] with [,'*',] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['pow','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['pow','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 204 - yacc.py: 506:Result : ( comp] with [] and goto state 204 + yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 - yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( new type] with ['new','IO'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( string] with [] and goto state 79 - yacc.py: 506:Result : ( string] with [] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 167 - yacc.py: 506:Result : (('out_string', [ id opar args cpar] with ['out_string','(',,')'] and goto state 167 + yacc.py: 506:Result : (('out_string', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_int','(',,')'] and goto state 167 - yacc.py: 506:Result : (('out_int', [ id opar args cpar] with ['out_int','(',,')'] and goto state 167 + yacc.py: 506:Result : (('out_int', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( string] with [' es '] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 167 - yacc.py: 506:Result : (('out_string', [ id opar args cpar] with ['out_string','(',,')'] and goto state 167 + yacc.py: 506:Result : (('out_string', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( id] with ['count'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_int','(',,')'] and goto state 167 - yacc.py: 506:Result : (('out_int', [ id opar args cpar] with ['out_int','(',,')'] and goto state 167 + yacc.py: 506:Result : (('out_int', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 196 - yacc.py: 506:Result : ( comp] with [] and goto state 196 + yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing6','(',[('a', 'Int')],')',':','IO','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing6','(',[('a', 'Int')],')',':','IO','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',60,1438) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',60,1438) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',60,1438) @@ -9878,27 +9878,27 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur case num . LexToken(plus,'+',61,1465) yacc.py: 471:Action : Reduce rule [atom -> num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 131 - yacc.py: 506:Result : ( comp] with [] and goto state 131 + yacc.py: 506:Result : ( new type] with ['new','IO'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( string] with ['Es un entero!'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 167 - yacc.py: 506:Result : (('out_string', [ id opar args cpar] with ['out_string','(',,')'] and goto state 167 + yacc.py: 506:Result : (('out_string', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 231 - yacc.py: 506:Result : ( comp] with [] and goto state 231 + yacc.py: 506:Result : ( id colon type rarrow expr] with ['x',':','Int','=>',] and goto state 200 - yacc.py: 506:Result : ( id colon type rarrow expr] with ['x',':','Int','=>',] and goto state 200 + yacc.py: 506:Result : ( new type] with ['new','IO'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( string] with [] and goto state 79 - yacc.py: 506:Result : ( string] with [] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 167 - yacc.py: 506:Result : (('out_string', [ id opar args cpar] with ['out_string','(',,')'] and goto state 167 + yacc.py: 506:Result : (('out_string', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 231 - yacc.py: 506:Result : ( comp] with [] and goto state 231 + yacc.py: 506:Result : ( id colon type rarrow expr] with ['y',':','String','=>',] and goto state 200 - yacc.py: 506:Result : ( id colon type rarrow expr] with ['y',':','String','=>',] and goto state 200 + yacc.py: 506:Result : ( new type] with ['new','IO'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( string] with [] and goto state 79 - yacc.py: 506:Result : ( string] with [] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 167 - yacc.py: 506:Result : (('out_string', [ id opar args cpar] with ['out_string','(',,')'] and goto state 167 + yacc.py: 506:Result : (('out_string', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 231 - yacc.py: 506:Result : ( comp] with [] and goto state 231 + yacc.py: 506:Result : ( id colon type rarrow expr] with ['z',':','Bool','=>',] and goto state 200 - yacc.py: 506:Result : ( id colon type rarrow expr] with ['z',':','Bool','=>',] and goto state 200 + yacc.py: 506:Result : ( casep semi] with [,';'] and goto state 226 - yacc.py: 506:Result : ([ casep semi] with [,';'] and goto state 226 + yacc.py: 506:Result : ([ casep semi cases_list] with [,';',] and goto state 226 - yacc.py: 506:Result : ([ casep semi cases_list] with [,';',] and goto state 226 + yacc.py: 506:Result : ([ casep semi cases_list] with [,';',] and goto state 199 - yacc.py: 506:Result : ([ casep semi cases_list] with [,';',] and goto state 199 + yacc.py: 506:Result : ([ case expr of cases_list esac] with ['case',,'of',,'esac'] and goto state 77 - yacc.py: 506:Result : ( case expr of cases_list esac] with ['case',,'of',,'esac'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing7','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing7','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['a',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['a',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( id colon type] with ['x',':','Int'] and goto state 44 - yacc.py: 506:Result : (('x', 'Int')) + yacc.py: 506:Result : (('x', 'Int')) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar param . LexToken(comma,',',70,1712) @@ -10556,24 +10556,24 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar param comma id colon type . LexToken(cpar,')',70,1720) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['y',':','Int'] and goto state 44 - yacc.py: 506:Result : (('y', 'Int')) + yacc.py: 506:Result : (('y', 'Int')) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar param comma param . LexToken(cpar,')',70,1720) yacc.py: 471:Action : Reduce rule [param_list -> param] with [('y', 'Int')] and goto state 95 - yacc.py: 506:Result : ([('y', 'Int')]) + yacc.py: 506:Result : ([('y', 'Int')]) yacc.py: 410: yacc.py: 411:State : 95 yacc.py: 430:Defaulted state 95: Reduce using 33 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar param comma param_list . LexToken(cpar,')',70,1720) yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [('x', 'Int'),',',[('y', 'Int')]] and goto state 42 - yacc.py: 506:Result : ([('x', 'Int'), ('y', 'Int')]) + yacc.py: 506:Result : ([('x', 'Int'), ('y', 'Int')]) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar param_list . LexToken(cpar,')',70,1720) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([('x', 'Int'), ('y', 'Int')]) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([('x', 'Int'), ('y', 'Int')]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals . LexToken(cpar,')',70,1720) @@ -10610,7 +10610,7 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon type . LexToken(larrow,'<-',71,1749) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['z',':','Int'] and goto state 130 - yacc.py: 506:Result : (('z', 'Int')) + yacc.py: 506:Result : (('z', 'Int')) yacc.py: 410: yacc.py: 411:State : 130 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let param . LexToken(larrow,'<-',71,1749) @@ -10623,42 +10623,42 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let param larrow num . LexToken(comma,',',71,1753) yacc.py: 471:Action : Reduce rule [atom -> num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [('z', 'Int'),'<-',] and goto state 129 - yacc.py: 506:Result : ( param larrow expr] with [('z', 'Int'),'<-',] and goto state 129 + yacc.py: 506:Result : ( id colon type] with ['w',':','Int'] and goto state 130 - yacc.py: 506:Result : (('w', 'Int')) + yacc.py: 506:Result : (('w', 'Int')) yacc.py: 410: yacc.py: 411:State : 130 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param . LexToken(larrow,'<-',71,1762) @@ -10692,53 +10692,53 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow num . LexToken(in,'in',72,1775) yacc.py: 471:Action : Reduce rule [atom -> num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [('w', 'Int'),'<-',] and goto state 129 - yacc.py: 506:Result : ( param larrow expr] with [('w', 'Int'),'<-',] and goto state 129 + yacc.py: 506:Result : ( let_assign] with [] and goto state 197 - yacc.py: 506:Result : ([ let_assign] with [] and goto state 197 + yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 - yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 + yacc.py: 506:Result : ([ num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( id] with ['x'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( id] with ['w'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 163 - yacc.py: 506:Result : ( factor] with [] and goto state 163 + yacc.py: 506:Result : ( term div base_call] with [,'/',] and goto state 75 - yacc.py: 506:Result : ( term div base_call] with [,'/',] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( new type] with ['new','Int'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 161 - yacc.py: 506:Result : ( factor] with [] and goto state 161 + yacc.py: 506:Result : ( term star base_call] with [,'*',] and goto state 159 - yacc.py: 506:Result : ( term star base_call] with [,'*',] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( id] with ['y'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 160 - yacc.py: 506:Result : ( base_call] with [] and goto state 160 + yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 - yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 + yacc.py: 506:Result : ( ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( false] with ['faLSe'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 124 - yacc.py: 506:Result : ( comp] with [] and goto state 124 + yacc.py: 506:Result : ( not expr] with ['not',] and goto state 77 - yacc.py: 506:Result : ( not expr] with ['not',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( id] with ['z'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 127 - yacc.py: 506:Result : ( factor] with [] and goto state 127 + yacc.py: 506:Result : ( nox base_call] with ['~',] and goto state 77 - yacc.py: 506:Result : ( nox base_call] with ['~',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 157 - yacc.py: 506:Result : ( term] with [] and goto state 157 + yacc.py: 506:Result : ( string] with ['hey'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_list in isvoid opar op minus opar opar opar if expr then expr else comp lesseq op plus factor dot id opar epsilon . LexToken(cpar,')',72,1876) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_list in isvoid opar op minus opar opar opar if expr then expr else comp lesseq op plus factor dot id opar arg_list_empty . LexToken(cpar,')',72,1876) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_list in isvoid opar op minus opar opar opar if expr then expr else comp lesseq op plus factor dot id opar args . LexToken(cpar,')',72,1876) @@ -11291,37 +11291,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_list in isvoid opar op minus opar opar opar if expr then expr else comp lesseq op plus factor dot id opar args cpar . LexToken(fi,'fi',72,1878) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['length','(',[],')'] and goto state 167 - yacc.py: 506:Result : (('length', [])) + yacc.py: 506:Result : (('length', [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_list in isvoid opar op minus opar opar opar if expr then expr else comp lesseq op plus factor dot func_call . LexToken(fi,'fi',72,1878) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',('length', [])] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',('length', [])] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 157 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 157 + yacc.py: 506:Result : ( comp lesseq op] with [,'<=',] and goto state 73 - yacc.py: 506:Result : ( comp lesseq op] with [,'<=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 163 - yacc.py: 506:Result : ( factor] with [] and goto state 163 + yacc.py: 506:Result : ( term div base_call] with [,'/',] and goto state 75 - yacc.py: 506:Result : ( term div base_call] with [,'/',] and goto state 75 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 161 - yacc.py: 506:Result : ( factor] with [] and goto state 161 + yacc.py: 506:Result : ( term star base_call] with [,'*',] and goto state 75 - yacc.py: 506:Result : ( term star base_call] with [,'*',] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 161 - yacc.py: 506:Result : ( factor] with [] and goto state 161 + yacc.py: 506:Result : ( term star base_call] with [,'*',] and goto state 75 - yacc.py: 506:Result : ( term star base_call] with [,'*',] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 160 - yacc.py: 506:Result : ( base_call] with [] and goto state 160 + yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 - yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 125 - yacc.py: 506:Result : ( factor] with [] and goto state 125 + yacc.py: 506:Result : ( isvoid base_call] with ['isvoid',] and goto state 77 - yacc.py: 506:Result : ( isvoid base_call] with ['isvoid',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 196 - yacc.py: 506:Result : ( comp] with [] and goto state 196 + yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing8','(',,')',':','Bool','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing8','(',,')',':','Bool','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi def_func semi epsilon . LexToken(ccur,'}',74,1912) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi def_func semi feature_list . LexToken(ccur,'}',74,1912) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur error] with ['class','Test','{',,'}',] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur error] with ['class','Test','{',,'}',] and goto state 3 + yacc.py: 506:Result : ( new type] with ['new','Test'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test1',':','Test','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test1',':','Test','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar epsilon . LexToken(cpar,')',79,1985) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar param_list_empty . LexToken(cpar,')',79,1985) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals . LexToken(cpar,')',79,1985) @@ -12045,12 +12045,12 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar colon type ocur id . LexToken(dot,'.',80,2008) yacc.py: 471:Action : Reduce rule [atom -> id] with ['test1'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing4','(',,')'] and goto state 167 - yacc.py: 506:Result : (('testing4', [ id opar args cpar] with ['testing4','(',,')'] and goto state 167 + yacc.py: 506:Result : (('testing4', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing4','(',,')'] and goto state 167 - yacc.py: 506:Result : (('testing4', [ id opar args cpar] with ['testing4','(',,')'] and goto state 167 + yacc.py: 506:Result : (('testing4', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [8.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [8.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [13.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing4','(',,')'] and goto state 167 - yacc.py: 506:Result : (('testing4', [ id opar args cpar] with ['testing4','(',,')'] and goto state 167 + yacc.py: 506:Result : (('testing4', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Test','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Test','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['x',':','Int'] and goto state 44 - yacc.py: 506:Result : (('x', 'Int')) + yacc.py: 506:Result : (('x', 'Int')) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi id opar param . LexToken(comma,',',83,2106) @@ -12708,24 +12708,24 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi id opar param comma id colon type . LexToken(cpar,')',83,2114) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['y',':','Int'] and goto state 44 - yacc.py: 506:Result : (('y', 'Int')) + yacc.py: 506:Result : (('y', 'Int')) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi id opar param comma param . LexToken(cpar,')',83,2114) yacc.py: 471:Action : Reduce rule [param_list -> param] with [('y', 'Int')] and goto state 95 - yacc.py: 506:Result : ([('y', 'Int')]) + yacc.py: 506:Result : ([('y', 'Int')]) yacc.py: 410: yacc.py: 411:State : 95 yacc.py: 430:Defaulted state 95: Reduce using 33 yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi id opar param comma param_list . LexToken(cpar,')',83,2114) yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [('x', 'Int'),',',[('y', 'Int')]] and goto state 42 - yacc.py: 506:Result : ([('x', 'Int'), ('y', 'Int')]) + yacc.py: 506:Result : ([('x', 'Int'), ('y', 'Int')]) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi id opar param_list . LexToken(cpar,')',83,2114) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([('x', 'Int'), ('y', 'Int')]) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([('x', 'Int'), ('y', 'Int')]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi id opar formals . LexToken(cpar,')',83,2114) @@ -12750,37 +12750,37 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',85,2142) yacc.py: 471:Action : Reduce rule [atom -> id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Test2','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Test2','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',87,2159) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',87,2159) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',87,2159) @@ -12852,27 +12852,27 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id opar num . LexToken(plus,'+',88,2189) yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 78 - yacc.py: 506:Result : (('testing2', [ id opar args cpar] with ['testing2','(',,')'] and goto state 78 + yacc.py: 506:Result : (('testing2', [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 167 - yacc.py: 506:Result : (('testing2', [ id opar args cpar] with ['testing2','(',,')'] and goto state 167 + yacc.py: 506:Result : (('testing2', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [8.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( true] with ['true'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( false] with ['fALSE'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 167 - yacc.py: 506:Result : (('testing2', [ id opar args cpar] with ['testing2','(',,')'] and goto state 167 + yacc.py: 506:Result : (('testing2', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Test2','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Test2','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',91,2275) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',91,2275) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',91,2275) @@ -13493,12 +13493,12 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(arroba,'@',92,2300) yacc.py: 471:Action : Reduce rule [atom -> id] with ['test1'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur factor arroba type dot id opar epsilon . LexToken(cpar,')',92,2313) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur factor arroba type dot id opar arg_list_empty . LexToken(cpar,')',92,2313) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur factor arroba type dot id opar args . LexToken(cpar,')',92,2313) @@ -13544,32 +13544,32 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur factor arroba type dot id opar args cpar . LexToken(ccur,'}',93,2319) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['copy','(',[],')'] and goto state 212 - yacc.py: 506:Result : (('copy', [])) + yacc.py: 506:Result : (('copy', [])) yacc.py: 410: yacc.py: 411:State : 212 yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur factor arroba type dot func_call . LexToken(ccur,'}',93,2319) - yacc.py: 471:Action : Reduce rule [base_call -> factor arroba type dot func_call] with [,'@','Object','.',('copy', [])] and goto state 76 - yacc.py: 506:Result : ( factor arroba type dot func_call] with [,'@','Object','.',('copy', [])] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',94,2322) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',94,2322) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Test2','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','Test2','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class def_class def_class class type inherits type ocur id opar epsilon . LexToken(cpar,')',97,2362) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class def_class def_class class type inherits type ocur id opar param_list_empty . LexToken(cpar,')',97,2362) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class def_class class type inherits type ocur id opar formals . LexToken(cpar,')',97,2362) @@ -13715,48 +13715,48 @@ yacc.py: 411:State : 93 yacc.py: 435:Stack : def_class def_class def_class class type inherits type ocur id opar formals cpar colon type ocur id opar string . LexToken(cpar,')',98,2407) yacc.py: 471:Action : Reduce rule [atom -> string] with ['reached!!\n'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : (('out_string', [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : (('out_string', [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class def_class def_class class type inherits type ocur def_func semi epsilon . LexToken(ccur,'}',100,2416) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class def_class def_class class type inherits type ocur def_func semi feature_list . LexToken(ccur,'}',100,2416) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 53 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ([ class_list] with [] and goto state 1 + yacc.py: 506:Result : ([ ([ ([p#0Rqts?;4q-;dTa)!URaq5)TJdiIV-0}>pJEKDp+Me>s+IUFW0=UmCC0Mt5( zRRJhvF*%%5bF(0~6(ge}*t~q6bwHLJuOy@5W(!_D#>oL(DwDhTn#GlXssn(ym;*?F zO$3@+q_kOuKZ|j)H;>BXO#%m4m4R~6lNmY08I>pZ3(81I0{KNCw-hOW2t^P9GN?#- I@=-wx06_vVo&W#< diff --git a/src/utils/__pycache__/logger.cpython-37.pyc b/src/utils/__pycache__/logger.cpython-37.pyc index eb1d4b0c455604caae6cfa93222698de94b54f13..d045e8e9cf197d348fe4b120fd87b1ac5f887f20 100644 GIT binary patch delta 30 kcmZ3*yn>nAiI Date: Thu, 27 Feb 2020 14:49:11 -0700 Subject: [PATCH 17/60] Adding names to Readme --- doc/Readme.md | 4 +- requirements.txt | 1 + src/__pycache__/base_parser.cpython-37.pyc | Bin 1032 -> 1022 bytes src/__pycache__/logger.cpython-37.pyc | Bin 0 -> 418 bytes src/base_parser.py | 2 +- src/{utils => }/logger.py | 0 src/output_parser/parselog.txt | 10468 +++++++++---------- 7 files changed, 4770 insertions(+), 5705 deletions(-) create mode 100644 src/__pycache__/logger.cpython-37.pyc rename src/{utils => }/logger.py (100%) diff --git a/doc/Readme.md b/doc/Readme.md index 92220fc6..5c2d6c9d 100644 --- a/doc/Readme.md +++ b/doc/Readme.md @@ -5,8 +5,8 @@ **Nombre** | **Grupo** | **Github** --|--|-- Loraine Monteagudo García | C411 | [@lorainemg](https://github.com/lorainemg) -Amanda Marrero Santos | C411 | [@github_user](https://github.com/) -Manuel Fernández Arias | C411 | [@github_user](https://github.com/) +Amanda Marrero Santos | C411 | [@amymsantos42](https://github.com/amymsantos42) +Manuel Fernández Arias | C411 | [@nolyfdezarias](https://github.com/nolyfdezarias) ## Readme diff --git a/requirements.txt b/requirements.txt index c250faba..f23029c8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ pytest pytest-ordering +ply diff --git a/src/__pycache__/base_parser.cpython-37.pyc b/src/__pycache__/base_parser.cpython-37.pyc index 1336524db7df5f62e5ea9311ba7ea854da558bbb..858c48ca974c050e7dcd47ebe8f4faefae221a0a 100644 GIT binary patch delta 39 tcmeC+_{Yxc#LLUY00b+|BI0s4^4@1;Oql$Z(RZ^QQyC*8+vMHMz5vah3g-X- delta 50 zcmeyz-oe4^#LLUY00gJfL*t4!^4@1;Oqu+a(U(O*!%%ax6;l}_J5OmzW=^r*Bf<rKYpRVZAX< z1>{i%?vbZX>kX0SkW07Ak!PS(lz^*TOIHNEg3!)?`-WwbgSN-A$fDA9f+~(q(mc_I zRN79UjAvY%2*J*Cq|(@z`8Z8<<#IR}T?bp(aEk&cw28t`QtaZ*YxsF&8Spe>LW()_ z+TDI{*zK&a(>u9h;ZVg>5D^Q*(GBaClKDRKWj4XT6fBlfG~>Ul+4kBVQ$>uUR;yZ* cxpvO*?x}!t1NW&t1cy3?V_4Lp20q951#dfcK>z>% literal 0 HcmV?d00001 diff --git a/src/base_parser.py b/src/base_parser.py index 47562516..b0023cd5 100644 --- a/src/base_parser.py +++ b/src/base_parser.py @@ -2,7 +2,7 @@ import os import ply.yacc as yacc -from utils.logger import log +from logger import log from lexer import CoolLexer from tools.tokens import tokens diff --git a/src/utils/logger.py b/src/logger.py similarity index 100% rename from src/utils/logger.py rename to src/logger.py diff --git a/src/output_parser/parselog.txt b/src/output_parser/parselog.txt index 090b0cb1..d1e48183 100644 --- a/src/output_parser/parselog.txt +++ b/src/output_parser/parselog.txt @@ -6125,7752 +6125,6816 @@ yacc.py: 362:PLY: PARSE DEBUG START yacc.py: 410: yacc.py: 411:State : 0 - yacc.py: 435:Stack : . LexToken(class,'class',3,63) + yacc.py: 435:Stack : . LexToken(class,'class',13,377) yacc.py: 445:Action : Shift and goto state 5 yacc.py: 410: yacc.py: 411:State : 5 - yacc.py: 435:Stack : class . LexToken(type,'Main',3,69) + yacc.py: 435:Stack : class . LexToken(type,'A2I',13,383) yacc.py: 445:Action : Shift and goto state 8 yacc.py: 410: yacc.py: 411:State : 8 - yacc.py: 435:Stack : class type . LexToken(ocur,'{',3,74) + yacc.py: 435:Stack : class type . LexToken(ocur,'{',13,387) yacc.py: 445:Action : Shift and goto state 10 yacc.py: 410: yacc.py: 411:State : 10 - yacc.py: 435:Stack : class type ocur . LexToken(id,'main',4,80) + yacc.py: 435:Stack : class type ocur . LexToken(id,'c2i',15,395) yacc.py: 445:Action : Shift and goto state 19 yacc.py: 410: yacc.py: 411:State : 19 - yacc.py: 435:Stack : class type ocur id . LexToken(opar,'(',4,84) + yacc.py: 435:Stack : class type ocur id . LexToken(opar,'(',15,398) yacc.py: 445:Action : Shift and goto state 32 yacc.py: 410: yacc.py: 411:State : 32 - yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',4,85) - yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',4,85) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',4,85) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 435:Stack : class type ocur id opar . LexToken(id,'char',15,399) + yacc.py: 445:Action : Shift and goto state 46 + yacc.py: 410: + yacc.py: 411:State : 46 + yacc.py: 435:Stack : class type ocur id opar id . LexToken(colon,':',15,404) + yacc.py: 445:Action : Shift and goto state 61 + yacc.py: 410: + yacc.py: 411:State : 61 + yacc.py: 435:Stack : class type ocur id opar id colon . LexToken(type,'String',15,406) + yacc.py: 445:Action : Shift and goto state 96 + yacc.py: 410: + yacc.py: 411:State : 96 + yacc.py: 435:Stack : class type ocur id opar id colon type . LexToken(cpar,')',15,412) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['char',':','String'] and goto state 44 + yacc.py: 506:Result : (('char', 'String')) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : class type ocur id opar param . LexToken(cpar,')',15,412) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 + yacc.py: 506:Result : ([('char', 'String')]) + yacc.py: 410: + yacc.py: 411:State : 42 + yacc.py: 430:Defaulted state 42: Reduce using 30 + yacc.py: 435:Stack : class type ocur id opar param_list . LexToken(cpar,')',15,412) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([('char', 'String')]) yacc.py: 410: yacc.py: 411:State : 51 - yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',4,85) + yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',15,412) yacc.py: 445:Action : Shift and goto state 64 yacc.py: 410: yacc.py: 411:State : 64 - yacc.py: 435:Stack : class type ocur id opar formals cpar . LexToken(colon,':',4,86) + yacc.py: 435:Stack : class type ocur id opar formals cpar . LexToken(colon,':',15,414) yacc.py: 445:Action : Shift and goto state 100 yacc.py: 410: yacc.py: 411:State : 100 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon . LexToken(type,'Object',4,88) + yacc.py: 435:Stack : class type ocur id opar formals cpar colon . LexToken(type,'Int',15,416) yacc.py: 445:Action : Shift and goto state 138 yacc.py: 410: yacc.py: 411:State : 138 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type . LexToken(ocur,'{',4,95) + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type . LexToken(ocur,'{',15,420) yacc.py: 445:Action : Shift and goto state 181 yacc.py: 410: yacc.py: 411:State : 181 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur . LexToken(opar,'(',5,105) - yacc.py: 445:Action : Shift and goto state 80 - yacc.py: 410: - yacc.py: 411:State : 80 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar . LexToken(new,'new',5,106) - yacc.py: 445:Action : Shift and goto state 89 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur . LexToken(if,'if',16,423) + yacc.py: 445:Action : Shift and goto state 86 yacc.py: 410: - yacc.py: 411:State : 89 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new . LexToken(type,'Alpha',5,110) - yacc.py: 445:Action : Shift and goto state 134 + yacc.py: 411:State : 86 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if . LexToken(id,'char',16,426) + yacc.py: 445:Action : Shift and goto state 72 yacc.py: 410: - yacc.py: 411:State : 134 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',5,115) - yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( string] with ['0'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 411:State : 158 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if comp equal op . LexToken(then,'then',16,437) + yacc.py: 471:Action : Reduce rule [comp -> comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 411:State : 73 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if comp . LexToken(then,'then',16,437) + yacc.py: 471:Action : Reduce rule [expr -> comp] with [] and goto state 132 + yacc.py: 506:Result : ( arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 411:State : 132 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if expr . LexToken(then,'then',16,437) + yacc.py: 445:Action : Shift and goto state 175 yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args . LexToken(cpar,')',5,123) - yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 411:State : 175 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if expr then . LexToken(num,0.0,16,442) + yacc.py: 445:Action : Shift and goto state 88 yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args cpar . LexToken(ccur,'}',6,129) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['print','(',[],')'] and goto state 167 - yacc.py: 506:Result : (('print', [])) + yacc.py: 411:State : 88 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if expr then num . LexToken(else,'else',16,444) + yacc.py: 471:Action : Reduce rule [atom -> num] with [0.0] and goto state 79 + yacc.py: 506:Result : ( factor dot func_call] with [,'.',('print', [])] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 16 - yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : class type ocur def_func semi epsilon . LexToken(ccur,'}',7,132) - yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 48 - yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : class type ocur def_func semi feature_list . LexToken(ccur,'}',7,132) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 14 - yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( ( id colon type] with ['test1',':','Object'] and goto state 17 - yacc.py: 506:Result : ( string] with ['1'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class class type ocur def_attr semi id opar epsilon . LexToken(cpar,')',12,186) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class class type ocur def_attr semi id opar param_list_empty . LexToken(cpar,')',12,186) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 411:State : 77 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if expr then expr else if comp equal factor . LexToken(then,'then',17,464) + yacc.py: 471:Action : Reduce rule [base_call -> factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( string] with ['2'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( string] with ['1'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 - yacc.py: 506:Result : ( string] with ['3'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( id colon type] with ['a',':','Alpha'] and goto state 44 - yacc.py: 506:Result : (('a', 'Alpha')) + yacc.py: 411:State : 158 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if comp equal op . LexToken(then,'then',19,525) + yacc.py: 471:Action : Reduce rule [comp -> comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 + yacc.py: 506:Result : ( id colon type] with ['b',':','Int'] and goto state 44 - yacc.py: 506:Result : (('b', 'Int')) + yacc.py: 411:State : 79 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then atom . LexToken(else,'else',19,532) + yacc.py: 471:Action : Reduce rule [factor -> atom] with [] and goto state 77 + yacc.py: 506:Result : ( param] with [('b', 'Int')] and goto state 95 - yacc.py: 506:Result : ([('b', 'Int')]) + yacc.py: 411:State : 77 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then factor . LexToken(else,'else',19,532) + yacc.py: 471:Action : Reduce rule [base_call -> factor] with [] and goto state 76 + yacc.py: 506:Result : ( param comma param_list] with [('a', 'Alpha'),',',[('b', 'Int')]] and goto state 42 - yacc.py: 506:Result : ([('a', 'Alpha'), ('b', 'Int')]) + yacc.py: 411:State : 76 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then base_call . LexToken(else,'else',19,532) + yacc.py: 471:Action : Reduce rule [term -> base_call] with [] and goto state 75 + yacc.py: 506:Result : ( param_list] with [] and goto state 51 - yacc.py: 506:Result : ([('a', 'Alpha'), ('b', 'Int')]) + yacc.py: 411:State : 75 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then term . LexToken(else,'else',19,532) + yacc.py: 471:Action : Reduce rule [op -> term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( string] with ['4'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',24,339) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',24,339) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',24,339) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi id opar formals cpar . LexToken(colon,':',24,340) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi id opar formals cpar colon . LexToken(type,'String',24,342) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',24,349) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi id opar formals cpar colon type ocur . LexToken(string,'2 + 2',25,365) - yacc.py: 445:Action : Shift and goto state 93 - yacc.py: 410: - yacc.py: 411:State : 93 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi id opar formals cpar colon type ocur string . LexToken(ccur,'}',26,371) - yacc.py: 471:Action : Reduce rule [atom -> string] with ['2 + 2'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','String','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id colon type] with ['x',':','Int'] and goto state 44 - yacc.py: 506:Result : (('x', 'Int')) - yacc.py: 410: - yacc.py: 411:State : 44 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar param . LexToken(comma,',',28,394) - yacc.py: 445:Action : Shift and goto state 60 - yacc.py: 410: - yacc.py: 411:State : 60 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar param comma . LexToken(id,'y',28,396) - yacc.py: 445:Action : Shift and goto state 46 - yacc.py: 410: - yacc.py: 411:State : 46 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar param comma id . LexToken(colon,':',28,397) - yacc.py: 445:Action : Shift and goto state 61 - yacc.py: 410: - yacc.py: 411:State : 61 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar param comma id colon . LexToken(type,'Int',28,399) - yacc.py: 445:Action : Shift and goto state 96 - yacc.py: 410: - yacc.py: 411:State : 96 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar param comma id colon type . LexToken(cpar,')',28,402) - yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['y',':','Int'] and goto state 44 - yacc.py: 506:Result : (('y', 'Int')) - yacc.py: 410: - yacc.py: 411:State : 44 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar param comma param . LexToken(cpar,')',28,402) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [('y', 'Int')] and goto state 95 - yacc.py: 506:Result : ([('y', 'Int')]) - yacc.py: 410: - yacc.py: 411:State : 95 - yacc.py: 430:Defaulted state 95: Reduce using 33 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar param comma param_list . LexToken(cpar,')',28,402) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [('x', 'Int'),',',[('y', 'Int')]] and goto state 42 - yacc.py: 506:Result : ([('x', 'Int'), ('y', 'Int')]) - yacc.py: 410: - yacc.py: 411:State : 42 - yacc.py: 430:Defaulted state 42: Reduce using 30 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',28,402) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([('x', 'Int'), ('y', 'Int')]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',28,402) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',28,403) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'Test',28,405) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',28,410) - yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 411:State : 132 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr . LexToken(then,'then',20,559) + yacc.py: 445:Action : Shift and goto state 175 yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'self',29,420) - yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 411:State : 175 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then . LexToken(num,4.0,20,564) + yacc.py: 445:Action : Shift and goto state 88 yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',30,429) - yacc.py: 471:Action : Reduce rule [atom -> id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( num] with [4.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',,')',':','Test','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id colon type] with ['a',':','String'] and goto state 44 - yacc.py: 506:Result : (('a', 'String')) - yacc.py: 410: - yacc.py: 411:State : 44 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param . LexToken(comma,',',32,455) - yacc.py: 445:Action : Shift and goto state 60 - yacc.py: 410: - yacc.py: 411:State : 60 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma . LexToken(id,'b',32,457) - yacc.py: 445:Action : Shift and goto state 46 - yacc.py: 410: - yacc.py: 411:State : 46 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma id . LexToken(colon,':',32,458) - yacc.py: 445:Action : Shift and goto state 61 - yacc.py: 410: - yacc.py: 411:State : 61 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma id colon . LexToken(type,'String',32,460) - yacc.py: 445:Action : Shift and goto state 96 - yacc.py: 410: - yacc.py: 411:State : 96 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma id colon type . LexToken(cpar,')',32,466) - yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['b',':','String'] and goto state 44 - yacc.py: 506:Result : (('b', 'String')) - yacc.py: 410: - yacc.py: 411:State : 44 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param . LexToken(cpar,')',32,466) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [('b', 'String')] and goto state 95 - yacc.py: 506:Result : ([('b', 'String')]) - yacc.py: 410: - yacc.py: 411:State : 95 - yacc.py: 430:Defaulted state 95: Reduce using 33 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param_list . LexToken(cpar,')',32,466) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [('a', 'String'),',',] and goto state 42 - yacc.py: 506:Result : ([('a', 'String'), ('b', 'String')]) + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then comp . LexToken(else,'else',20,566) + yacc.py: 471:Action : Reduce rule [expr -> comp] with [] and goto state 203 + yacc.py: 506:Result : ( param_list] with [] and goto state 51 - yacc.py: 506:Result : ([('a', 'String'), ('b', 'String')]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',32,466) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',32,467) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'IO',32,469) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',32,472) - yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 411:State : 203 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr . LexToken(else,'else',20,566) + yacc.py: 445:Action : Shift and goto state 219 yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(if,'If',33,482) + yacc.py: 411:State : 219 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else . LexToken(if,'if',21,579) yacc.py: 445:Action : Shift and goto state 86 yacc.py: 410: yacc.py: 411:State : 86 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if . LexToken(id,'a',33,485) + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if . LexToken(id,'char',21,582) yacc.py: 445:Action : Shift and goto state 72 yacc.py: 410: yacc.py: 411:State : 72 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if id . LexToken(dot,'.',33,486) - yacc.py: 471:Action : Reduce rule [atom -> id] with ['a'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 150 - yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if factor dot id opar epsilon . LexToken(cpar,')',33,494) - yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 149 - yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if factor dot id opar arg_list_empty . LexToken(cpar,')',33,494) - yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if factor dot id opar args . LexToken(cpar,')',33,494) - yacc.py: 445:Action : Shift and goto state 191 - yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if factor dot id opar args cpar . LexToken(less,'<',33,496) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['length','(',[],')'] and goto state 167 - yacc.py: 506:Result : (('length', [])) - yacc.py: 410: - yacc.py: 411:State : 167 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if factor dot func_call . LexToken(less,'<',33,496) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',('length', [])] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( id] with ['b'] and goto state 79 - yacc.py: 506:Result : ( string] with ['5'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 150 - yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if comp less factor dot id opar epsilon . LexToken(cpar,')',33,507) - yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 149 - yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if comp less factor dot id opar arg_list_empty . LexToken(cpar,')',33,507) - yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if comp less factor dot id opar args . LexToken(cpar,')',33,507) - yacc.py: 445:Action : Shift and goto state 191 - yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if comp less factor dot id opar args cpar . LexToken(then,'THeN',33,509) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['length','(',[],')'] and goto state 167 - yacc.py: 506:Result : (('length', [])) - yacc.py: 410: - yacc.py: 411:State : 167 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if comp less factor dot func_call . LexToken(then,'THeN',33,509) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',('length', [])] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 156 - yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( comp less op] with [,'<',] and goto state 73 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( new type] with ['new','IO'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( string] with ['La cadena "'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( id] with ['b'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 - yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( string] with [] and goto state 79 - yacc.py: 506:Result : ( num] with [5.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 - yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 - yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( string] with ['".'] and goto state 79 - yacc.py: 506:Result : ( string] with ['6'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 - yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ comp] with [] and goto state 132 + yacc.py: 506:Result : ( arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 167 - yacc.py: 506:Result : (('out_string', [ num] with [6.0] and goto state 79 + yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 150 - yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if factor dot id opar epsilon . LexToken(cpar,')',36,674) - yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 149 - yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if factor dot id opar arg_list_empty . LexToken(cpar,')',36,674) - yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if factor dot id opar args . LexToken(cpar,')',36,674) - yacc.py: 445:Action : Shift and goto state 191 - yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if factor dot id opar args cpar . LexToken(equal,'=',36,676) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['length','(',[],')'] and goto state 167 - yacc.py: 506:Result : (('length', [])) - yacc.py: 410: - yacc.py: 411:State : 167 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if factor dot func_call . LexToken(equal,'=',36,676) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',('length', [])] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( id] with ['b'] and goto state 79 - yacc.py: 506:Result : ( string] with ['7'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 150 - yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if comp equal factor dot id opar epsilon . LexToken(cpar,')',36,687) - yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 149 - yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if comp equal factor dot id opar arg_list_empty . LexToken(cpar,')',36,687) - yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if comp equal factor dot id opar args . LexToken(cpar,')',36,687) - yacc.py: 445:Action : Shift and goto state 191 - yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if comp equal factor dot id opar args cpar . LexToken(then,'THeN',36,689) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['length','(',[],')'] and goto state 167 - yacc.py: 506:Result : (('length', [])) - yacc.py: 410: - yacc.py: 411:State : 167 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if comp equal factor dot func_call . LexToken(then,'THeN',36,689) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',('length', [])] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( new type] with ['new','IO'] and goto state 79 - yacc.py: 506:Result : ( num] with [7.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( string] with ['La cadena "'] and goto state 79 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ string] with ['8'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( id opar args cpar] with ['concat','(',,')'] and goto state 167 - yacc.py: 506:Result : (('concat', [ factor] with [] and goto state 76 + yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( string] with [] and goto state 79 - yacc.py: 506:Result : ( num] with [8.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ comp] with [] and goto state 203 + yacc.py: 506:Result : ( arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 - yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( id] with ['b'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 - yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( string] with ['".'] and goto state 79 - yacc.py: 506:Result : ( string] with ['9'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ comp] with [] and goto state 132 + yacc.py: 506:Result : ( arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['concat','(',,')'] and goto state 167 - yacc.py: 506:Result : (('concat', [ num] with [9.0] and goto state 79 + yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else ocur id opar epsilon . LexToken(cpar,')',26,757) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else ocur id opar arg_list_empty . LexToken(cpar,')',26,757) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then factor dot id opar args . LexToken(cpar,')',37,817) + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else ocur id opar args . LexToken(cpar,')',26,757) yacc.py: 445:Action : Shift and goto state 191 yacc.py: 410: yacc.py: 411:State : 191 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then factor dot id opar args cpar . LexToken(else,'ElsE',38,831) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['out_string','(',,')'] and goto state 167 - yacc.py: 506:Result : (('out_string', [ id opar args cpar] with ['abort','(',[],')'] and goto state 78 + yacc.py: 506:Result : (('abort', [])) yacc.py: 410: - yacc.py: 411:State : 167 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then factor dot func_call . LexToken(else,'ElsE',38,831) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( func_call] with [('abort', [])] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( new type] with ['new','IO'] and goto state 79 - yacc.py: 506:Result : ( num] with [0.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( string] with ['La cadena "'] and goto state 79 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ id] with ['a'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ comp] with [] and goto state 228 + yacc.py: 506:Result : ( id opar args cpar] with ['concat','(',,')'] and goto state 167 - yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( string] with [] and goto state 79 - yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ comp] with [] and goto state 228 + yacc.py: 506:Result : ( id opar args cpar] with ['concat','(',,')'] and goto state 167 - yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( id] with ['b'] and goto state 79 - yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ comp] with [] and goto state 228 + yacc.py: 506:Result : ( id opar args cpar] with ['concat','(',,')'] and goto state 167 - yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( string] with ['".'] and goto state 79 - yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ comp] with [] and goto state 228 + yacc.py: 506:Result : ( id opar args cpar] with ['concat','(',,')'] and goto state 167 - yacc.py: 506:Result : (('concat', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ comp] with [] and goto state 228 + yacc.py: 506:Result : ( id opar args cpar] with ['out_string','(',,')'] and goto state 167 - yacc.py: 506:Result : (('out_string', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'THeN',,'ElsE',,'fI'] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( if expr then expr else expr fi] with ['If',,'THeN',,'eLSe',,'Fi'] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing5','(',,')',':','IO','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['c2i','(',,')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['a',':','Int'] and goto state 44 - yacc.py: 506:Result : (('a', 'Int')) + yacc.py: 435:Stack : class type ocur def_func semi id opar id colon type . LexToken(cpar,')',33,910) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['i',':','Int'] and goto state 44 + yacc.py: 506:Result : (('i', 'Int')) yacc.py: 410: yacc.py: 411:State : 44 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar param . LexToken(cpar,')',44,1016) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [('a', 'Int')] and goto state 42 - yacc.py: 506:Result : ([('a', 'Int')]) + yacc.py: 435:Stack : class type ocur def_func semi id opar param . LexToken(cpar,')',33,910) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [('i', 'Int')] and goto state 42 + yacc.py: 506:Result : ([('i', 'Int')]) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',44,1016) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [[('a', 'Int')]] and goto state 51 - yacc.py: 506:Result : ([('a', 'Int')]) + yacc.py: 435:Stack : class type ocur def_func semi id opar param_list . LexToken(cpar,')',33,910) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [[('i', 'Int')]] and goto state 51 + yacc.py: 506:Result : ([('i', 'Int')]) yacc.py: 410: yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',44,1016) + yacc.py: 435:Stack : class type ocur def_func semi id opar formals . LexToken(cpar,')',33,910) yacc.py: 445:Action : Shift and goto state 64 yacc.py: 410: yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',44,1017) + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar . LexToken(colon,':',33,912) yacc.py: 445:Action : Shift and goto state 100 yacc.py: 410: yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'IO',44,1019) + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon . LexToken(type,'String',33,914) yacc.py: 445:Action : Shift and goto state 138 yacc.py: 410: yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',44,1022) + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type . LexToken(ocur,'{',33,921) yacc.py: 445:Action : Shift and goto state 181 yacc.py: 410: yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(let,'let',45,1032) - yacc.py: 445:Action : Shift and goto state 84 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur . LexToken(if,'if',34,924) + yacc.py: 445:Action : Shift and goto state 86 yacc.py: 410: - yacc.py: 411:State : 84 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur let . LexToken(id,'count',45,1036) - yacc.py: 445:Action : Shift and goto state 46 + yacc.py: 411:State : 86 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur if . LexToken(id,'i',34,927) + yacc.py: 445:Action : Shift and goto state 72 yacc.py: 410: - yacc.py: 411:State : 46 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur let id . LexToken(colon,':',45,1041) - yacc.py: 445:Action : Shift and goto state 61 + yacc.py: 411:State : 72 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur if id . LexToken(equal,'=',34,929) + yacc.py: 471:Action : Reduce rule [atom -> id] with ['i'] and goto state 79 + yacc.py: 506:Result : ( id colon type] with ['count',':','Int'] and goto state 130 - yacc.py: 506:Result : (('count', 'Int')) + yacc.py: 411:State : 77 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur if factor . LexToken(equal,'=',34,929) + yacc.py: 471:Action : Reduce rule [base_call -> factor] with [] and goto state 76 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 - yacc.py: 506:Result : ( string] with ['0'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( id colon type] with ['pow',':','Int'] and goto state 130 - yacc.py: 506:Result : (('pow', 'Int')) + yacc.py: 411:State : 76 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur if expr then base_call . LexToken(else,'else',34,942) + yacc.py: 471:Action : Reduce rule [term -> base_call] with [] and goto state 75 + yacc.py: 506:Result : ( param] with [('pow', 'Int')] and goto state 129 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( let_assign] with [] and goto state 197 - yacc.py: 506:Result : ([ op] with [] and goto state 73 + yacc.py: 506:Result : ( let_assign comma let_list] with [,',',] and goto state 128 - yacc.py: 506:Result : ([ comp] with [] and goto state 203 + yacc.py: 506:Result : ( ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( string] with ['1'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( id larrow expr] with ['pow','<-',] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( id] with ['pow'] and goto state 79 - yacc.py: 506:Result : ( string] with ['2'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 156 - yacc.py: 506:Result : ( comp less op] with [,'<',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 133 - yacc.py: 506:Result : ( id] with ['count'] and goto state 79 - yacc.py: 506:Result : ( num] with [3.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( string] with ['3'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( id] with ['pow'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( num] with [4.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 161 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( term star base_call] with [,'*',] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( id larrow expr] with ['pow','<-',] and goto state 111 - yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ comp] with [] and goto state 132 + yacc.py: 506:Result : ( expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( string] with ['4'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 204 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( new type] with ['new','IO'] and goto state 79 - yacc.py: 506:Result : ( num] with [5.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( string] with [] and goto state 79 - yacc.py: 506:Result : ( string] with ['5'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 167 - yacc.py: 506:Result : (('out_string', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ num] with [6.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( id opar args cpar] with ['out_int','(',,')'] and goto state 167 - yacc.py: 506:Result : (('out_int', [ factor] with [] and goto state 76 + yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( string] with [' es '] and goto state 79 - yacc.py: 506:Result : ( string] with ['6'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 167 - yacc.py: 506:Result : (('out_string', [ ( factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( id] with ['count'] and goto state 79 - yacc.py: 506:Result : ( num] with [7.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ comp] with [] and goto state 132 + yacc.py: 506:Result : ( arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['out_int','(',,')'] and goto state 167 - yacc.py: 506:Result : (('out_int', [ string] with ['7'] and goto state 79 + yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 196 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 - yacc.py: 506:Result : ( num] with [8.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing6','(',[('a', 'Int')],')',':','IO','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( string] with ['8'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',60,1438) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',60,1438) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 411:State : 76 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then base_call . LexToken(else,'else',42,1134) + yacc.py: 471:Action : Reduce rule [term -> base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( num] with [9.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 131 - yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( string] with ['9'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : (',62,1491) - yacc.py: 445:Action : Shift and goto state 229 + yacc.py: 411:State : 77 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then factor . LexToken(else,'else',43,1158) + yacc.py: 471:Action : Reduce rule [base_call -> factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( new type] with ['new','IO'] and goto state 79 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) yacc.py: 410: - yacc.py: 411:State : 93 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur case expr of id colon type rarrow factor dot id opar string . LexToken(cpar,')',62,1527) - yacc.py: 471:Action : Reduce rule [atom -> string] with ['Es un entero!'] and goto state 79 - yacc.py: 506:Result : ( epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) yacc.py: 410: - yacc.py: 411:State : 79 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur case expr of id colon type rarrow factor dot id opar atom . LexToken(cpar,')',62,1527) - yacc.py: 471:Action : Reduce rule [factor -> atom] with [] and goto state 77 - yacc.py: 506:Result : ( arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else ocur id opar args . LexToken(cpar,')',44,1172) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else ocur id opar args cpar . LexToken(semi,';',44,1173) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['abort','(',[],')'] and goto state 78 + yacc.py: 506:Result : (('abort', [])) + yacc.py: 410: + yacc.py: 411:State : 78 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else ocur func_call . LexToken(semi,';',44,1173) + yacc.py: 471:Action : Reduce rule [factor -> func_call] with [('abort', [])] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ comp] with [] and goto state 111 + yacc.py: 506:Result : ( arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 167 - yacc.py: 506:Result : (('out_string', [ string] with [''] and goto state 79 + yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 231 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id colon type rarrow expr] with ['x',':','Int','=>',] and goto state 200 - yacc.py: 506:Result : (',63,1552) - yacc.py: 445:Action : Shift and goto state 229 + yacc.py: 411:State : 151 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else ocur expr semi expr semi . LexToken(ccur,'}',44,1179) + yacc.py: 471:Action : Reduce rule [block -> expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ new type] with ['new','IO'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( string] with [] and goto state 79 - yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ comp] with [] and goto state 228 + yacc.py: 506:Result : ( id opar args cpar] with ['out_string','(',,')'] and goto state 167 - yacc.py: 506:Result : (('out_string', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 231 - yacc.py: 506:Result : ( id colon type rarrow expr] with ['y',':','String','=>',] and goto state 200 - yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : (',64,1613) - yacc.py: 445:Action : Shift and goto state 229 + yacc.py: 411:State : 75 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else term . LexToken(fi,'fi',45,1245) + yacc.py: 471:Action : Reduce rule [op -> term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( new type] with ['new','IO'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( string] with [] and goto state 79 - yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ comp] with [] and goto state 228 + yacc.py: 506:Result : ( id opar args cpar] with ['out_string','(',,')'] and goto state 167 - yacc.py: 506:Result : (('out_string', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 231 - yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( id colon type rarrow expr] with ['z',':','Bool','=>',] and goto state 200 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( casep semi] with [,';'] and goto state 226 - yacc.py: 506:Result : ([ term] with [] and goto state 74 + yacc.py: 506:Result : ( casep semi cases_list] with [,';',] and goto state 226 - yacc.py: 506:Result : ([ op] with [] and goto state 73 + yacc.py: 506:Result : ( casep semi cases_list] with [,';',] and goto state 199 - yacc.py: 506:Result : ([ comp] with [] and goto state 228 + yacc.py: 506:Result : ( case expr of cases_list esac] with ['case',,'of',,'esac'] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing7','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id colon type larrow expr] with ['a',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['i2c','(',[('i', 'Int')],')',':','String','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['x',':','Int'] and goto state 44 - yacc.py: 506:Result : (('x', 'Int')) - yacc.py: 410: - yacc.py: 411:State : 44 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar param . LexToken(comma,',',70,1712) - yacc.py: 445:Action : Shift and goto state 60 - yacc.py: 410: - yacc.py: 411:State : 60 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar param comma . LexToken(id,'y',70,1714) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar . LexToken(id,'s',56,1569) yacc.py: 445:Action : Shift and goto state 46 yacc.py: 410: yacc.py: 411:State : 46 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar param comma id . LexToken(colon,':',70,1715) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar id . LexToken(colon,':',56,1571) yacc.py: 445:Action : Shift and goto state 61 yacc.py: 410: yacc.py: 411:State : 61 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar param comma id colon . LexToken(type,'Int',70,1717) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar id colon . LexToken(type,'String',56,1573) yacc.py: 445:Action : Shift and goto state 96 yacc.py: 410: yacc.py: 411:State : 96 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar param comma id colon type . LexToken(cpar,')',70,1720) - yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['y',':','Int'] and goto state 44 - yacc.py: 506:Result : (('y', 'Int')) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar id colon type . LexToken(cpar,')',56,1579) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['s',':','String'] and goto state 44 + yacc.py: 506:Result : (('s', 'String')) yacc.py: 410: yacc.py: 411:State : 44 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar param comma param . LexToken(cpar,')',70,1720) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [('y', 'Int')] and goto state 95 - yacc.py: 506:Result : ([('y', 'Int')]) - yacc.py: 410: - yacc.py: 411:State : 95 - yacc.py: 430:Defaulted state 95: Reduce using 33 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar param comma param_list . LexToken(cpar,')',70,1720) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [('x', 'Int'),',',[('y', 'Int')]] and goto state 42 - yacc.py: 506:Result : ([('x', 'Int'), ('y', 'Int')]) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar param . LexToken(cpar,')',56,1579) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [('s', 'String')] and goto state 42 + yacc.py: 506:Result : ([('s', 'String')]) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar param_list . LexToken(cpar,')',70,1720) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([('x', 'Int'), ('y', 'Int')]) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar param_list . LexToken(cpar,')',56,1579) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([('s', 'String')]) yacc.py: 410: yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals . LexToken(cpar,')',70,1720) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals . LexToken(cpar,')',56,1579) yacc.py: 445:Action : Shift and goto state 64 yacc.py: 410: yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar . LexToken(colon,':',70,1721) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar . LexToken(colon,':',56,1581) yacc.py: 445:Action : Shift and goto state 100 yacc.py: 410: yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon . LexToken(type,'Bool',70,1723) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon . LexToken(type,'Int',56,1583) yacc.py: 445:Action : Shift and goto state 138 yacc.py: 410: yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',70,1728) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',56,1587) yacc.py: 445:Action : Shift and goto state 181 yacc.py: 410: yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur . LexToken(let,'let',71,1738) - yacc.py: 445:Action : Shift and goto state 84 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(if,'if',57,1597) + yacc.py: 445:Action : Shift and goto state 86 yacc.py: 410: - yacc.py: 411:State : 84 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let . LexToken(id,'z',71,1742) - yacc.py: 445:Action : Shift and goto state 46 + yacc.py: 411:State : 86 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if . LexToken(id,'s',57,1600) + yacc.py: 445:Action : Shift and goto state 72 yacc.py: 410: - yacc.py: 411:State : 46 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let id . LexToken(colon,':',71,1743) - yacc.py: 445:Action : Shift and goto state 61 + yacc.py: 411:State : 72 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if id . LexToken(dot,'.',57,1601) + yacc.py: 471:Action : Reduce rule [atom -> id] with ['s'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( id colon type] with ['z',':','Int'] and goto state 130 - yacc.py: 506:Result : (('z', 'Int')) + yacc.py: 411:State : 77 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if factor . LexToken(dot,'.',57,1601) + yacc.py: 445:Action : Shift and goto state 122 yacc.py: 410: - yacc.py: 411:State : 130 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let param . LexToken(larrow,'<-',71,1749) - yacc.py: 445:Action : Shift and goto state 173 + yacc.py: 411:State : 122 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if factor dot . LexToken(id,'length',57,1602) + yacc.py: 445:Action : Shift and goto state 168 yacc.py: 410: - yacc.py: 411:State : 173 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let param larrow . LexToken(num,3.0,71,1752) - yacc.py: 445:Action : Shift and goto state 88 + yacc.py: 411:State : 168 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if factor dot id . LexToken(opar,'(',57,1608) + yacc.py: 445:Action : Shift and goto state 113 yacc.py: 410: - yacc.py: 411:State : 88 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let param larrow num . LexToken(comma,',',71,1753) - yacc.py: 471:Action : Reduce rule [atom -> num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) yacc.py: 410: - yacc.py: 411:State : 79 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let param larrow atom . LexToken(comma,',',71,1753) - yacc.py: 471:Action : Reduce rule [factor -> atom] with [] and goto state 77 - yacc.py: 506:Result : ( epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if factor dot id opar arg_list_empty . LexToken(cpar,')',57,1609) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if factor dot id opar args . LexToken(cpar,')',57,1609) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if factor dot id opar args cpar . LexToken(equal,'=',57,1611) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['length','(',[],')'] and goto state 167 + yacc.py: 506:Result : (('length', [])) + yacc.py: 410: + yacc.py: 411:State : 167 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if factor dot func_call . LexToken(equal,'=',57,1611) + yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',('length', [])] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( param larrow expr] with [('z', 'Int'),'<-',] and goto state 129 - yacc.py: 506:Result : ( id colon type] with ['w',':','Int'] and goto state 130 - yacc.py: 506:Result : (('w', 'Int')) - yacc.py: 410: - yacc.py: 411:State : 130 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param . LexToken(larrow,'<-',71,1762) - yacc.py: 445:Action : Shift and goto state 173 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if comp . LexToken(equal,'=',57,1611) + yacc.py: 445:Action : Shift and goto state 116 yacc.py: 410: - yacc.py: 411:State : 173 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow . LexToken(num,4.0,71,1765) + yacc.py: 411:State : 116 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if comp equal . LexToken(num,0.0,57,1613) yacc.py: 445:Action : Shift and goto state 88 yacc.py: 410: yacc.py: 411:State : 88 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow num . LexToken(in,'in',72,1775) - yacc.py: 471:Action : Reduce rule [atom -> num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( num] with [0.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( param larrow expr] with [('w', 'Int'),'<-',] and goto state 129 - yacc.py: 506:Result : ( let_assign] with [] and goto state 197 - yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 - yacc.py: 506:Result : ([ comp] with [] and goto state 132 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( num] with [0.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( id] with ['x'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( id] with ['w'] and goto state 79 - yacc.py: 506:Result : ( id] with ['s'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 163 - yacc.py: 506:Result : ( term div base_call] with [,'/',] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( new type] with ['new','Int'] and goto state 79 - yacc.py: 506:Result : ( num] with [0.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 161 - yacc.py: 506:Result : ( term star base_call] with [,'*',] and goto state 159 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( id] with ['y'] and goto state 79 - yacc.py: 506:Result : ( num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 160 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ (,')'] and goto state 167 + yacc.py: 506:Result : (('substr', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( false] with ['faLSe'] and goto state 79 - yacc.py: 506:Result : ( string] with ['-'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 124 - yacc.py: 506:Result : ( not expr] with ['not',] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( id] with ['z'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 127 - yacc.py: 506:Result : ( id] with ['s'] and goto state 79 + yacc.py: 506:Result : ( nox base_call] with ['~',] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( term] with [] and goto state 157 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( string] with ['hey'] and goto state 79 - yacc.py: 506:Result : ( id] with ['s'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_list in isvoid opar op minus opar opar opar if expr then expr else comp lesseq op plus factor dot id opar epsilon . LexToken(cpar,')',72,1876) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then nox id opar factor dot id opar expr comma factor dot id opar epsilon . LexToken(cpar,')',58,1685) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_list in isvoid opar op minus opar opar opar if expr then expr else comp lesseq op plus factor dot id opar arg_list_empty . LexToken(cpar,')',72,1876) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then nox id opar factor dot id opar expr comma factor dot id opar arg_list_empty . LexToken(cpar,')',58,1685) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_list in isvoid opar op minus opar opar opar if expr then expr else comp lesseq op plus factor dot id opar args . LexToken(cpar,')',72,1876) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then nox id opar factor dot id opar expr comma factor dot id opar args . LexToken(cpar,')',58,1685) yacc.py: 445:Action : Shift and goto state 191 yacc.py: 410: yacc.py: 411:State : 191 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_list in isvoid opar op minus opar opar opar if expr then expr else comp lesseq op plus factor dot id opar args cpar . LexToken(fi,'fi',72,1878) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then nox id opar factor dot id opar expr comma factor dot id opar args cpar . LexToken(minus,'-',58,1686) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['length','(',[],')'] and goto state 167 - yacc.py: 506:Result : (('length', [])) + yacc.py: 506:Result : (('length', [])) yacc.py: 410: yacc.py: 411:State : 167 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_list in isvoid opar op minus opar opar opar if expr then expr else comp lesseq op plus factor dot func_call . LexToken(fi,'fi',72,1878) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',('length', [])] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 157 - yacc.py: 506:Result : ( comp lesseq op] with [,'<=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',('length', [])] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 - yacc.py: 506:Result : ( num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 160 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 + yacc.py: 506:Result : ([ opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['substr','(',,')'] and goto state 167 + yacc.py: 506:Result : (('substr', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ base_call] with [] and goto state 75 - yacc.py: 506:Result : ( arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['a2i_aux','(',,')'] and goto state 78 + yacc.py: 506:Result : (('a2i_aux', [ func_call] with [] and goto state 77 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( factor] with [] and goto state 127 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( nox base_call] with ['~',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( factor] with [] and goto state 163 - yacc.py: 506:Result : ( term div base_call] with [,'/',] and goto state 75 - yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( id] with ['s'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( num] with [0.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 161 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( term star base_call] with [,'*',] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 161 - yacc.py: 506:Result : ( term star base_call] with [,'*',] and goto state 75 - yacc.py: 506:Result : ( expr] with [] and goto state 211 + yacc.py: 506:Result : ([ term] with [] and goto state 74 - yacc.py: 506:Result : ( expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ op] with [] and goto state 73 - yacc.py: 506:Result : ( arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ comp] with [] and goto state 123 - yacc.py: 506:Result : (,')'] and goto state 167 + yacc.py: 506:Result : (('substr', [ opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : (] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 160 - yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 125 - yacc.py: 506:Result : ( isvoid base_call] with ['isvoid',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 196 - yacc.py: 506:Result : ( string] with ['+'] and goto state 79 + yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing8','(',,')',':','Bool','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 16 - yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi def_func semi epsilon . LexToken(ccur,'}',74,1912) - yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 48 - yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_func semi def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi def_func semi def_func semi def_attr semi def_func semi feature_list . LexToken(ccur,'}',74,1912) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ class type ocur feature_list ccur error] with ['class','Test','{',,'}',] and goto state 3 - yacc.py: 506:Result : ( id] with ['s'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( new type] with ['new','Test'] and goto state 79 - yacc.py: 506:Result : ( num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test1',':','Test','<-',] and goto state 17 - yacc.py: 506:Result : ( id] with ['s'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar epsilon . LexToken(cpar,')',79,1985) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar param_list_empty . LexToken(cpar,')',79,1985) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 411:State : 77 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then id opar factor dot id opar expr comma factor . LexToken(dot,'.',59,1752) + yacc.py: 445:Action : Shift and goto state 122 yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals . LexToken(cpar,')',79,1985) - yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 411:State : 122 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then id opar factor dot id opar expr comma factor dot . LexToken(id,'length',59,1753) + yacc.py: 445:Action : Shift and goto state 168 yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar . LexToken(colon,':',79,1986) - yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 411:State : 168 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then id opar factor dot id opar expr comma factor dot id . LexToken(opar,'(',59,1759) + yacc.py: 445:Action : Shift and goto state 113 yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar colon . LexToken(type,'Test',79,1988) - yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 411:State : 113 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then id opar factor dot id opar expr comma factor dot id opar . LexToken(cpar,')',59,1760) + yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 150 + yacc.py: 548:Result : (None) yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',79,1993) - yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then id opar factor dot id opar expr comma factor dot id opar epsilon . LexToken(cpar,')',59,1760) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar colon type ocur . LexToken(id,'test1',80,2003) - yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then id opar factor dot id opar expr comma factor dot id opar arg_list_empty . LexToken(cpar,')',59,1760) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar colon type ocur id . LexToken(dot,'.',80,2008) - yacc.py: 471:Action : Reduce rule [atom -> id] with ['test1'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( id opar args cpar] with ['length','(',[],')'] and goto state 167 + yacc.py: 506:Result : (('length', [])) + yacc.py: 410: + yacc.py: 411:State : 167 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then id opar factor dot id opar expr comma factor dot func_call . LexToken(minus,'-',59,1761) + yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',('length', [])] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 160 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( expr] with [] and goto state 211 + yacc.py: 506:Result : ([ atom] with [] and goto state 77 - yacc.py: 506:Result : ( expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['substr','(',,')'] and goto state 167 + yacc.py: 506:Result : (('substr', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( id opar args cpar] with ['a2i_aux','(',,')'] and goto state 78 + yacc.py: 506:Result : (('a2i_aux', [ func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( id] with ['s'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing4','(',,')'] and goto state 167 - yacc.py: 506:Result : (('testing4', [ id opar args cpar] with ['a2i_aux','(',,')'] and goto state 78 + yacc.py: 506:Result : (('a2i_aux', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['a2i','(',,')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id colon type] with ['s',':','String'] and goto state 44 + yacc.py: 506:Result : (('s', 'String')) yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar colon type ocur factor dot id opar args . LexToken(cpar,')',80,2053) - yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 411:State : 44 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar param . LexToken(cpar,')',68,1965) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [('s', 'String')] and goto state 42 + yacc.py: 506:Result : ([('s', 'String')]) yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar colon type ocur factor dot id opar args cpar . LexToken(dot,'.',80,2054) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['testing4','(',,')'] and goto state 167 - yacc.py: 506:Result : (('testing4', [ param_list] with [] and goto state 51 + yacc.py: 506:Result : ([('s', 'String')]) yacc.py: 410: - yacc.py: 411:State : 167 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar colon type ocur factor dot func_call . LexToken(dot,'.',80,2054) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( id colon type] with ['int',':','Int'] and goto state 130 + yacc.py: 506:Result : (('int', 'Int')) yacc.py: 410: - yacc.py: 411:State : 74 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar colon type ocur factor dot id opar op . LexToken(plus,'+',80,2066) - yacc.py: 445:Action : Shift and goto state 117 + yacc.py: 411:State : 130 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let param . LexToken(larrow,'<-',69,1991) + yacc.py: 445:Action : Shift and goto state 173 yacc.py: 410: - yacc.py: 411:State : 117 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar colon type ocur factor dot id opar op plus . LexToken(num,8.0,80,2068) + yacc.py: 411:State : 173 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let param larrow . LexToken(num,0.0,69,1994) yacc.py: 445:Action : Shift and goto state 88 yacc.py: 410: yacc.py: 411:State : 88 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar colon type ocur factor dot id opar op plus num . LexToken(comma,',',80,2069) - yacc.py: 471:Action : Reduce rule [atom -> num] with [8.0] and goto state 79 - yacc.py: 506:Result : ( num] with [0.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [('int', 'Int'),'<-',] and goto state 129 + yacc.py: 506:Result : ( let_assign] with [] and goto state 128 + yacc.py: 506:Result : ([ num] with [8.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [13.0] and goto state 79 - yacc.py: 506:Result : ( id colon type] with ['j',':','Int'] and goto state 130 + yacc.py: 506:Result : (('j', 'Int')) yacc.py: 410: - yacc.py: 411:State : 79 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar colon type ocur factor dot id opar expr comma op plus atom . LexToken(cpar,')',80,2077) - yacc.py: 471:Action : Reduce rule [factor -> atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( id] with ['s'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ ] with [] and goto state 150 + yacc.py: 548:Result : (None) yacc.py: 410: - yacc.py: 411:State : 211 - yacc.py: 430:Defaulted state 211: Reduce using 94 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar colon type ocur factor dot id opar expr comma arg_list . LexToken(cpar,')',80,2077) - yacc.py: 471:Action : Reduce rule [arg_list -> expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) yacc.py: 410: - yacc.py: 411:State : 148 - yacc.py: 430:Defaulted state 148: Reduce using 91 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar colon type ocur factor dot id opar arg_list . LexToken(cpar,')',80,2077) - yacc.py: 471:Action : Reduce rule [args -> arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar colon type ocur factor dot id opar args . LexToken(cpar,')',80,2077) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let let_list in ocur opar let param larrow factor dot id opar args . LexToken(cpar,')',71,2054) yacc.py: 445:Action : Shift and goto state 191 yacc.py: 410: yacc.py: 411:State : 191 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar colon type ocur factor dot id opar args cpar . LexToken(ccur,'}',81,2083) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['testing4','(',,')'] and goto state 167 - yacc.py: 506:Result : (('testing4', [ id opar args cpar] with ['length','(',[],')'] and goto state 167 + yacc.py: 506:Result : (('length', [])) yacc.py: 410: yacc.py: 411:State : 167 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar colon type ocur factor dot func_call . LexToken(ccur,'}',81,2083) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',('length', [])] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [('j', 'Int'),'<-',] and goto state 129 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Test','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( let_assign] with [] and goto state 128 + yacc.py: 506:Result : ([ id colon type] with ['x',':','Int'] and goto state 44 - yacc.py: 506:Result : (('x', 'Int')) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let let_list in ocur opar let let_list in opar let id colon type . LexToken(larrow,'<-',72,2083) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['i',':','Int'] and goto state 130 + yacc.py: 506:Result : (('i', 'Int')) yacc.py: 410: - yacc.py: 411:State : 44 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi id opar param . LexToken(comma,',',83,2106) - yacc.py: 445:Action : Shift and goto state 60 + yacc.py: 411:State : 130 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let let_list in ocur opar let let_list in opar let param . LexToken(larrow,'<-',72,2083) + yacc.py: 445:Action : Shift and goto state 173 yacc.py: 410: - yacc.py: 411:State : 60 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi id opar param comma . LexToken(id,'y',83,2108) - yacc.py: 445:Action : Shift and goto state 46 + yacc.py: 411:State : 173 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let let_list in ocur opar let let_list in opar let param larrow . LexToken(num,0.0,72,2086) + yacc.py: 445:Action : Shift and goto state 88 yacc.py: 410: - yacc.py: 411:State : 46 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi id opar param comma id . LexToken(colon,':',83,2109) - yacc.py: 445:Action : Shift and goto state 61 + yacc.py: 411:State : 88 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let let_list in ocur opar let let_list in opar let param larrow num . LexToken(in,'in',72,2088) + yacc.py: 471:Action : Reduce rule [atom -> num] with [0.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( id colon type] with ['y',':','Int'] and goto state 44 - yacc.py: 506:Result : (('y', 'Int')) + yacc.py: 411:State : 77 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let let_list in ocur opar let let_list in opar let param larrow factor . LexToken(in,'in',72,2088) + yacc.py: 471:Action : Reduce rule [base_call -> factor] with [] and goto state 76 + yacc.py: 506:Result : ( param] with [('y', 'Int')] and goto state 95 - yacc.py: 506:Result : ([('y', 'Int')]) + yacc.py: 411:State : 76 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let let_list in ocur opar let let_list in opar let param larrow base_call . LexToken(in,'in',72,2088) + yacc.py: 471:Action : Reduce rule [term -> base_call] with [] and goto state 75 + yacc.py: 506:Result : ( param comma param_list] with [('x', 'Int'),',',[('y', 'Int')]] and goto state 42 - yacc.py: 506:Result : ([('x', 'Int'), ('y', 'Int')]) + yacc.py: 411:State : 75 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let let_list in ocur opar let let_list in opar let param larrow term . LexToken(in,'in',72,2088) + yacc.py: 471:Action : Reduce rule [op -> term] with [] and goto state 74 + yacc.py: 506:Result : ( param_list] with [] and goto state 51 - yacc.py: 506:Result : ([('x', 'Int'), ('y', 'Int')]) + yacc.py: 411:State : 74 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let let_list in ocur opar let let_list in opar let param larrow op . LexToken(in,'in',72,2088) + yacc.py: 471:Action : Reduce rule [comp -> op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [('i', 'Int'),'<-',] and goto state 129 + yacc.py: 506:Result : ( let_assign] with [] and goto state 128 + yacc.py: 506:Result : ([ id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( id] with ['i'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Test2','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id] with ['j'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',87,2159) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',87,2159) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 411:State : 75 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let let_list in ocur opar let let_list in opar let let_list in while comp less term . LexToken(loop,'loop',73,2109) + yacc.py: 471:Action : Reduce rule [op -> term] with [] and goto state 156 + yacc.py: 506:Result : ( comp less op] with [,'<',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 133 + yacc.py: 506:Result : ( id] with ['int'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( num] with [10.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 161 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term star base_call] with [,'*',] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( id] with ['s'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( id] with ['i'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( expr] with [] and goto state 211 + yacc.py: 506:Result : ([ atom] with [] and goto state 77 - yacc.py: 506:Result : ( expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['substr','(',,')'] and goto state 167 + yacc.py: 506:Result : (('substr', [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 78 - yacc.py: 506:Result : (('testing2', [ id opar args cpar] with ['c2i','(',,')'] and goto state 78 + yacc.py: 506:Result : (('c2i', [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['int','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['i'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['i','<-',] and goto state 111 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 204 + yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( comp] with [] and goto state 196 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ comp] with [] and goto state 123 + yacc.py: 506:Result : ( arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 167 - yacc.py: 506:Result : (('testing2', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( comp] with [] and goto state 196 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( num] with [8.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( true] with ['true'] and goto state 79 - yacc.py: 506:Result : ( id] with ['int'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ false] with ['fALSE'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 196 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ let let_list in expr] with ['let',,'in',] and goto state 77 + yacc.py: 506:Result : ( expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ factor] with [] and goto state 76 + yacc.py: 506:Result : ( arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( id opar args cpar] with ['testing2','(',,')'] and goto state 167 - yacc.py: 506:Result : (('testing2', [ op] with [] and goto state 73 + yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Test2','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['a2i_aux','(',,')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',91,2275) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',91,2275) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar . LexToken(id,'i',90,2373) + yacc.py: 445:Action : Shift and goto state 46 + yacc.py: 410: + yacc.py: 411:State : 46 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar id . LexToken(colon,':',90,2375) + yacc.py: 445:Action : Shift and goto state 61 + yacc.py: 410: + yacc.py: 411:State : 61 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar id colon . LexToken(type,'Int',90,2377) + yacc.py: 445:Action : Shift and goto state 96 + yacc.py: 410: + yacc.py: 411:State : 96 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar id colon type . LexToken(cpar,')',90,2380) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['i',':','Int'] and goto state 44 + yacc.py: 506:Result : (('i', 'Int')) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar param . LexToken(cpar,')',90,2380) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [('i', 'Int')] and goto state 42 + yacc.py: 506:Result : ([('i', 'Int')]) + yacc.py: 410: + yacc.py: 411:State : 42 + yacc.py: 430:Defaulted state 42: Reduce using 30 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',90,2380) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [[('i', 'Int')]] and goto state 51 + yacc.py: 506:Result : ([('i', 'Int')]) yacc.py: 410: yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',91,2275) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',90,2380) yacc.py: 445:Action : Shift and goto state 64 yacc.py: 410: yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',91,2276) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',90,2382) yacc.py: 445:Action : Shift and goto state 100 yacc.py: 410: yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'Object',91,2278) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'String',90,2384) yacc.py: 445:Action : Shift and goto state 138 yacc.py: 410: yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',91,2285) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',90,2391) yacc.py: 445:Action : Shift and goto state 181 yacc.py: 410: yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'test1',92,2295) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(if,'if',91,2394) + yacc.py: 445:Action : Shift and goto state 86 + yacc.py: 410: + yacc.py: 411:State : 86 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if . LexToken(id,'i',91,2397) yacc.py: 445:Action : Shift and goto state 72 yacc.py: 410: yacc.py: 411:State : 72 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(arroba,'@',92,2300) - yacc.py: 471:Action : Reduce rule [atom -> id] with ['test1'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 411:State : 116 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if comp equal . LexToken(num,0.0,91,2401) + yacc.py: 445:Action : Shift and goto state 88 yacc.py: 410: - yacc.py: 411:State : 150 - yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur factor arroba type dot id opar epsilon . LexToken(cpar,')',92,2313) - yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 411:State : 88 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if comp equal num . LexToken(then,'then',91,2403) + yacc.py: 471:Action : Reduce rule [atom -> num] with [0.0] and goto state 79 + yacc.py: 506:Result : ( arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 411:State : 79 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if comp equal atom . LexToken(then,'then',91,2403) + yacc.py: 471:Action : Reduce rule [factor -> atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( id opar args cpar] with ['copy','(',[],')'] and goto state 212 - yacc.py: 506:Result : (('copy', [])) + yacc.py: 411:State : 76 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if comp equal base_call . LexToken(then,'then',91,2403) + yacc.py: 471:Action : Reduce rule [term -> base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( string] with ['0'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor arroba type dot func_call] with [,'@','Object','.',('copy', [])] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 16 - yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',94,2322) - yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 48 - yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',94,2322) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Test2','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( num] with [0.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class def_class def_class class type inherits type ocur id opar epsilon . LexToken(cpar,')',97,2362) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class def_class def_class class type inherits type ocur id opar param_list_empty . LexToken(cpar,')',97,2362) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 411:State : 114 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if comp less . LexToken(id,'i',92,2433) + yacc.py: 445:Action : Shift and goto state 126 yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class def_class def_class class type inherits type ocur id opar formals . LexToken(cpar,')',97,2362) - yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 411:State : 126 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if comp less id . LexToken(then,'then',92,2435) + yacc.py: 471:Action : Reduce rule [atom -> id] with ['i'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 156 + yacc.py: 506:Result : ( comp less op] with [,'<',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( string] with ['reached!!\n'] and goto state 79 - yacc.py: 506:Result : ( id] with ['i'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : (('out_string', [ id opar args cpar] with ['i2a_aux','(',,')'] and goto state 78 + yacc.py: 506:Result : (('i2a_aux', [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( string] with ['-'] and goto state 79 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 16 - yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : def_class def_class def_class class type inherits type ocur def_func semi epsilon . LexToken(ccur,'}',100,2416) - yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 48 - yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : def_class def_class def_class class type inherits type ocur def_func semi feature_list . LexToken(ccur,'}',100,2416) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 53 - yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ([ ([ atom] with [] and goto state 77 + yacc.py: 506:Result : ( id] with ['i'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( Date: Fri, 24 Apr 2020 20:30:25 -0600 Subject: [PATCH 18/60] Adding the column property to the tokens and starting the semantic analysis --- __pycache__/ast.cpython-37.pyc | Bin 0 -> 9794 bytes src/tools/ast.py => ast.py | 51 +- src/.mypy_cache/3.7/@plugins_snapshot.json | 1 + src/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 180 bytes src/__pycache__/logger.cpython-37.pyc | Bin 418 -> 418 bytes src/__pycache__/parser.cpython-37.pyc | Bin 13887 -> 14160 bytes src/__pycache__/semantic.cpython-37.pyc | Bin 0 -> 1704 bytes .../debug.txt => lexer/__init__.py} | 0 src/lexer/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 186 bytes src/lexer/__pycache__/lexer.cpython-37.pyc | Bin 0 -> 9238 bytes src/{ => lexer}/lexer.py | 219 +- src/main.py | 35 +- src/output_parser/parselog.txt | 12940 ---------------- src/parser/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 187 bytes .../__pycache__/base_parser.cpython-37.pyc | Bin 0 -> 1047 bytes src/parser/__pycache__/logger.cpython-37.pyc | Bin 0 -> 432 bytes src/parser/__pycache__/parser.cpython-37.pyc | Bin 0 -> 14135 bytes src/{ => parser}/base_parser.py | 10 +- src/{ => parser}/logger.py | 2 +- src/parser/output_parser/debug.txt | 0 src/parser/output_parser/parselog.txt | 7292 +++++++++ src/{ => parser}/output_parser/parser.out | 0 src/{ => parser}/output_parser/parsetab.py | 0 src/{ => parser}/parser.py | 62 +- src/semantic/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 189 bytes .../__pycache__/semantic.cpython-37.pyc | Bin 0 -> 1574 bytes src/semantic/__pycache__/tools.cpython-37.pyc | Bin 0 -> 14842 bytes src/semantic/semantic.py | 53 + src/semantic/tools.py | 310 + src/semantic/visitors/__init__.py | 0 .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 188 bytes .../visitors}/__pycache__/ast.cpython-37.pyc | Bin 9588 -> 9556 bytes .../autotype_visitor.cpython-37.pyc | Bin 0 -> 8393 bytes .../__pycache__/format_visitor.cpython-37.pyc | Bin 0 -> 7539 bytes .../selftype_visitor.cpython-37.pyc | Bin 0 -> 3502 bytes .../__pycache__/type_builder.cpython-37.pyc | Bin 0 -> 2812 bytes .../__pycache__/type_checker.cpython-37.pyc | Bin 0 -> 9941 bytes .../__pycache__/type_collector.cpython-37.pyc | Bin 0 -> 1690 bytes .../__pycache__/var_collector.cpython-37.pyc | Bin 0 -> 6496 bytes .../__pycache__/visitor.cpython-37.pyc | Bin 0 -> 2361 bytes src/semantic/visitors/format_visitor.py | 128 + src/semantic/visitors/selftype_visitor.py | 105 + src/semantic/visitors/type_builder.py | 86 + src/semantic/visitors/type_checker.py | 320 + src/semantic/visitors/type_collector.py | 34 + src/semantic/visitors/var_collector.py | 215 + src/semantic/visitors/visitor.py | 80 + src/test.cl | 35 + src/tools/__pycache__/errors.cpython-37.pyc | Bin 4605 -> 0 bytes src/tools/__pycache__/tokens.cpython-37.pyc | Bin 1385 -> 0 bytes src/utils/__init__.py | 1 - src/utils/__pycache__/__init__.cpython-37.pyc | Bin 207 -> 186 bytes src/utils/__pycache__/ast.cpython-37.pyc | Bin 0 -> 10386 bytes src/utils/__pycache__/errors.cpython-37.pyc | Bin 0 -> 5164 bytes src/utils/__pycache__/tokens.cpython-37.pyc | Bin 0 -> 1381 bytes src/utils/__pycache__/utils.cpython-37.pyc | Bin 362 -> 1028 bytes src/utils/ast.py | 213 + src/{tools => utils}/errors.py | 49 +- src/{tools => utils}/tokens.py | 0 src/utils/utils.py | 25 + tests/utils/utils.py | 4 + 63 files changed, 9180 insertions(+), 13090 deletions(-) create mode 100644 __pycache__/ast.cpython-37.pyc rename src/tools/ast.py => ast.py (70%) create mode 100644 src/.mypy_cache/3.7/@plugins_snapshot.json create mode 100644 src/__pycache__/__init__.cpython-37.pyc create mode 100644 src/__pycache__/semantic.cpython-37.pyc rename src/{output_parser/debug.txt => lexer/__init__.py} (100%) create mode 100644 src/lexer/__pycache__/__init__.cpython-37.pyc create mode 100644 src/lexer/__pycache__/lexer.cpython-37.pyc rename src/{ => lexer}/lexer.py (50%) delete mode 100644 src/output_parser/parselog.txt create mode 100644 src/parser/__init__.py create mode 100644 src/parser/__pycache__/__init__.cpython-37.pyc create mode 100644 src/parser/__pycache__/base_parser.cpython-37.pyc create mode 100644 src/parser/__pycache__/logger.cpython-37.pyc create mode 100644 src/parser/__pycache__/parser.cpython-37.pyc rename src/{ => parser}/base_parser.py (77%) rename src/{ => parser}/logger.py (80%) create mode 100644 src/parser/output_parser/debug.txt create mode 100644 src/parser/output_parser/parselog.txt rename src/{ => parser}/output_parser/parser.out (100%) rename src/{ => parser}/output_parser/parsetab.py (100%) rename src/{ => parser}/parser.py (87%) create mode 100644 src/semantic/__init__.py create mode 100644 src/semantic/__pycache__/__init__.cpython-37.pyc create mode 100644 src/semantic/__pycache__/semantic.cpython-37.pyc create mode 100644 src/semantic/__pycache__/tools.cpython-37.pyc create mode 100644 src/semantic/semantic.py create mode 100644 src/semantic/tools.py create mode 100644 src/semantic/visitors/__init__.py create mode 100644 src/semantic/visitors/__pycache__/__init__.cpython-37.pyc rename src/{tools => semantic/visitors}/__pycache__/ast.cpython-37.pyc (96%) create mode 100644 src/semantic/visitors/__pycache__/autotype_visitor.cpython-37.pyc create mode 100644 src/semantic/visitors/__pycache__/format_visitor.cpython-37.pyc create mode 100644 src/semantic/visitors/__pycache__/selftype_visitor.cpython-37.pyc create mode 100644 src/semantic/visitors/__pycache__/type_builder.cpython-37.pyc create mode 100644 src/semantic/visitors/__pycache__/type_checker.cpython-37.pyc create mode 100644 src/semantic/visitors/__pycache__/type_collector.cpython-37.pyc create mode 100644 src/semantic/visitors/__pycache__/var_collector.cpython-37.pyc create mode 100644 src/semantic/visitors/__pycache__/visitor.cpython-37.pyc create mode 100644 src/semantic/visitors/format_visitor.py create mode 100644 src/semantic/visitors/selftype_visitor.py create mode 100644 src/semantic/visitors/type_builder.py create mode 100644 src/semantic/visitors/type_checker.py create mode 100644 src/semantic/visitors/type_collector.py create mode 100644 src/semantic/visitors/var_collector.py create mode 100644 src/semantic/visitors/visitor.py create mode 100644 src/test.cl delete mode 100644 src/tools/__pycache__/errors.cpython-37.pyc delete mode 100644 src/tools/__pycache__/tokens.cpython-37.pyc create mode 100644 src/utils/__pycache__/ast.cpython-37.pyc create mode 100644 src/utils/__pycache__/errors.cpython-37.pyc create mode 100644 src/utils/__pycache__/tokens.cpython-37.pyc create mode 100644 src/utils/ast.py rename src/{tools => utils}/errors.py (78%) rename src/{tools => utils}/tokens.py (100%) diff --git a/__pycache__/ast.cpython-37.pyc b/__pycache__/ast.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0b2567d28de9fb26532cc8a8c0b4acaa95716c20 GIT binary patch literal 9794 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 literal 0 HcmV?d00001 diff --git a/src/__pycache__/logger.cpython-37.pyc b/src/__pycache__/logger.cpython-37.pyc index f87ccca36e69303708bb3eaf6d28eab3c118f5a2..aa403062fda46b7a964cb29f32214e6b022d9f80 100644 GIT binary patch delta 95 zcmZ3)yoj0GiIef6zU$u2~^+%)R07%Q6yBM&-NZ?pq;~AsvE4LH?W_~$KTfD9qH)VlC~le*D8_BDY&W&DvBT^J zmCB)@P!#bam5z|02Lyrxs3Ia533{laq6#4)Pz8v?9;#e8^uQq(t}t(%SV=Y$b*24w z_1^58?|n1x&92J#^0v{sI;+60e~w-~KN9}Hb{BoO^2gW6mCn5-#D~)}lY%5`)@Y$1 zk0*(eq3hi)IvZ-Cw{fdqLh+h$QkW*m*;pZ+k+5b`GV%ot&3z>hD_zI8To7Brq>4RA zH2@fx?~b_EU@)$jR*l9t%!$Xw*hi{RM2jemW-tk;sEBenjor+a7Tv-kW>3?jLcVpI z#|-`)rVh(;L?rbrNZb*XlZtXYlaiApsb&j#Ag-AeIh$hqjXc*aZOBt{?5oBGW~Fd- zCo)*+MeCQ`tb;W#A33=_myWHBSx($+SRS`(W}|M<4>5RPW)PD$^0FUORk9;3(!@sW zmQ=d-Ao9{Ro1=82)`naz&alHf$}+~ysoycd5(r`@iG+$8}LA1Ngx%IaNPdH zd_MJ%R7yYEUgHy(Xt=|bGSv7Ra?{gYcH;_o_h03H_QU=}gO?Fy842Z#asqubY^MWu zZ+k`Cn1s0Ey<+E1oO1ljIK`WKjht>Y{mxvo&Ss?`XrMafR_e>NKbKD=x+ejXUFc5dzx+SlQrwxBD7n%Pt7w>v&I=Fubl!j-=3{a0KxXP0@LnkjpNd8F z8A{*H?et!%jkBFeVth4~*bL zAavQjh0bQ4F=>SUHSmZBW+%-69)K1AAAp~B54NEIJw4bgb%CJ=pdVlmUefiq776XEuR*=Z~J5}D&3kN*n3QF3x&lWTP z?!9ua`FXzI`IZ%K!ZMFsK`yf7u(5gGyYUt7u{#@6R!G=tAmnLV$hVfkxZYv)Qt+vb z>+VDQUCLykHOw;kvGp2N6%8&{^}S<>o9|Q36j|!)Cq1q}Sm)MG8S5p6)HXgj^H24B z*)?h3MEC!_s=*SlxA8`{f+nGRH$%@-!>3Vo8$?eYLqig9{>vQXPTFp(Q3k6<-pZ5O5 zbws+ZGR!J!w;Nc$?HgfrSA6C=H~Z(Fv&>fVLGJ}tnCbh56>jk_vcli}39=}*lf(Va zK9t-rQ7Wohx~RoxkMRQixPPa9q9x#PBMcX|UMEimcIdm#20UQ*iJIAbTFde5-U%$Q z^xju4akE+urgRs-1;c)nY+0o~UMg{mlo;5fA6Xe_TOaL|hIy!f z@v@sj)$m-pFq^|N2&Mq`0_>rn$oe~6m9)}P{1iy{0n~iL$^x*9!W(qHs7AWz7Lb*G zUvNy&!Y9&L&Eer0oG)sJau}CzT#1nzn>Kq};h+=14bTSQ0q6kmlE|2EydRbU00kfj zFaR(NFai((fWe2y0HOdffXx6~$h%{izyVkS$925*2z2tm8Gh=sWH367EMy^?LMd`L U+G%+hrkQwSK~s|%$)XY62W=;)SO5S3 diff --git a/src/__pycache__/semantic.cpython-37.pyc b/src/__pycache__/semantic.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9d5da7082c918708521ac586f32e8ff7d686540f GIT binary patch literal 1704 zcmbVMOK;Oa5Z?9Md9?>xam1;aW{*AAkQa{}&& zUqFxi2Y!jKoH%jsiP??a)IqHf8|`FX`_1gEXEw{_0)qAX#^)CYDndV*kSzh2d$7Zo zKpf;?f_!XY%y@wazG#V@7m4J{mdtsHD86c`oR^8_>z2-Wg%tdvRph)%N`BcY1Ft#y zCuCKeLJQT3zaR>#;iSA3P`?}Pd!ZKv6cokwN#ETZc*Jp;SZ1Ob5aQYw?B*NSe#h-I z8-pldJ`;qQmP?NEs?vU!o`cw!#fGK9mSCH(!vwSuT>B$j`868h2*<#Wgjo0{#OM^X zvG7(LiQprEMZnBkWZn^q(|Sp1DW(!DW6Y6yCFYMDrp_^xJVvaZj&Cu}>^jeE_F`sV@Uf7?DR3P1KX4xB zaEcs9`wyJ2Ih^VGmpCqpc`aiUV~C(0N$|myw}(bOx2on&v)M4)kG3CF+s~dhTGgDn zULUFrN&_0M4>dFBMec`aeHx=)-Q0WByniV~eW<4x)#qnePw?SzaVko6e`7aGWoLIf zhx+j5w12D7+~NuUgYU*(d*>40scO`#=EH{hoq-*`_$`2l(kMGzh|AB zsP?!*R0JhujYVO=AgVAT1F30=*bSpZad}NG-OhTNmcg8;uf{E($lL({$1R@7Aq)E* z(QDv#c4+vn<8=)ZkP~BRdG*#>V|9hmm9^VjMyC5mMU-UBBClJbST!l9cG6*XetGmv}u_hk&621Yr$JunSm$t?^%h za|K*UWoBizOjE!mF3qOimrG+jIuCKSYctk7FK9p)kN9Bhq#|YW*}9e)Bba!dv}C;I zlXKiOsV;k^sdH&*`MX%xGsrFsQhqjz$lh*Z4q>R~%HuypYR9QW1FY| literal 0 HcmV?d00001 diff --git a/src/output_parser/debug.txt b/src/lexer/__init__.py similarity index 100% rename from src/output_parser/debug.txt rename to src/lexer/__init__.py diff --git a/src/lexer/__pycache__/__init__.cpython-37.pyc b/src/lexer/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..57363a52c768e2618d45cd0ceab53e43cac75de4 GIT binary patch literal 186 zcmZ?b<>g`kf|RnhI1v39M8E(ekl_Ht#VkM~g&~+hlhJP_LlHtk;bN$Zu;@A#mS|qIf?r5@u432CMEg$&d&PI`MCv|IjKeZ$@%#? yy2((Uu91O}fqrpOvVKl#1yC|RJ~J<~BtBlRpz;=nO>TZlX-=vg$nwuX%m4t8+%3HT literal 0 HcmV?d00001 diff --git a/src/lexer/__pycache__/lexer.cpython-37.pyc b/src/lexer/__pycache__/lexer.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b23a9954f83a56a696e81fe91cf838a0f7013a4c GIT binary patch literal 9238 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 kFiwWncnYR0d6chna!whBgXYwMPo+<#<0y}d! 0: error_text = LexicographicError.EOF_COMMENT - line = t.lineno - column = find_column(self.lexer, t) - self.errors.append(LexicographicError(error_text, line, column)) + self.errors.append(LexicographicError(error_text, t.lineno, t.column)) #Strings def t_strings(self,t): @@ -63,6 +73,8 @@ def t_strings(self,t): def t_strings_end(self,t): r'\"' + self._update_column(t) + if t.lexer.backslash : t.lexer.myString += '"' t.lexer.backslash = False @@ -75,22 +87,25 @@ def t_strings_end(self,t): def t_strings_newline(self,t): r'\n' t.lexer.lineno += 1 + self._update_column(t) + + t.lexer.linestart = t.lexer.lexpos + if not t.lexer.backslash: error_text = LexicographicError.UNDETERMINATED_STRING - line = t.lineno - column = find_column(self.lexer, t) - self.errors.append(LexicographicError(error_text, line, column)) + self.errors.append(LexicographicError(error_text, t.lineno, t.column)) t.lexer.begin('INITIAL') def t_strings_nill(self,t): r'\0' error_text = LexicographicError.NULL_STRING - line = t.lineno - column = find_column(self.lexer, t) - self.errors.append(LexicographicError(error_text, line, column)) + self._update_column(t) + + self.errors.append(LexicographicError(error_text, t.lineno, t.column)) def t_strings_consume(self,t): r'[^\n]' + self._update_column(t) if t.lexer.backslash : if t.value == 'b': @@ -124,48 +139,130 @@ def t_strings_error(self,t): t_strings_ignore = '' def t_strings_eof(self,t): + self._update_column(t) + error_text = LexicographicError.EOF_STRING - line = t.lineno - column = find_column(self.lexer, t) - self.errors.append(LexicographicError(error_text, line, column)) - + self.errors.append(LexicographicError(error_text, t.lineno, t.column)) - # Regular expressions for simple tokens - # t_ignore_COMMENT = r'--.* | \*(.)*\*' - # A string containing ignored characters t_ignore = ' \t\f\r\t\v' - t_semi = r';' - t_colon = r':' - t_comma = r',' - t_dot = r'\.' - t_opar = r'\(' - t_cpar = r'\)' - t_ocur = r'\{' - t_ccur = r'\}' - t_larrow = r'<-' - t_arroba = r'@' - t_rarrow = r'=>' - t_nox = r'~' - t_equal = r'=' - t_plus = r'\+' - t_of = r'of' - t_minus = r'-' - t_star = r'\*' - t_div = r'/' - t_less = r'<' - t_lesseq = r'<=' - t_inherits = r'inherits' + def t_semi(self, t): + r';' + self._update_column(t) + return t + + def t_colon(self, t): + r':' + self._update_column(t) + return t + + def t_comma(self, t): + r',' + self._update_column(t) + return t + + def t_dot(self, t): + r'\.' + self._update_column(t) + return t + + def t_opar(self, t): + r'\(' + self._update_column(t) + return t + + def t_cpar(self, t): + r'\)' + self._update_column(t) + return t + + def t_ocur(self, t): + r'\{' + self._update_column(t) + return t + + def t_ccur(self, t): + r'\}' + self._update_column(t) + return t + + def t_larrow(self, t): + r'<-' + self._update_column(t) + return t + + def t_arroba(self, t): + r'@' + self._update_column(t) + return t + + def t_rarrow(self, t): + r'=>' + self._update_column(t) + return t + + def t_nox(self, t): + r'~' + self._update_column(t) + return + + def t_equal(self, t): + r'=' + self._update_column(t) + return t + + def t_plus(self, t): + r'\+' + self._update_column(t) + return t + + def t_of(self, t): + r'of' + self._update_column(t) + return t + + def t_minus(self, t): + r'-' + self._update_column(t) + return t + + def t_star(self, t): + r'\*' + self._update_column(t) + return t + + def t_div(self, t): + r'/' + self._update_column(t) + return t + + def t_lesseq(self, t): + r'<=' + self._update_column(t) + return t + + def t_less(self, t): + r'<' + self._update_column(t) + return t + + + def t_inherits(self, t): + r'inherits' + self._update_column(t) + return t def t_type(self, t): r'[A-Z][a-zA-Z_0-9]*' t.type = self.reserved.get(t.value.lower(), 'type') + self._update_column(t) return t # Check for reserved words: def t_id(self, t): r'[a-z][a-zA-Z_0-9]*' t.type = self.reserved.get(t.value.lower(), 'id') + self._update_column(t) return t @@ -173,37 +270,51 @@ def t_id(self, t): def t_num(self, t): r'\d+(\.\d+)? ' t.value = float(t.value) + self._update_column(t) return t - def t_comment(self, t): - r'--.*($|\n)' - t.lexer.lineno += 1 - pass - # Define a rule so we can track line numbers def t_newline(self, t): r'\n+' t.lexer.lineno += len(t.value) + self._update_column(t) + # t.column = t.lexer.lexpos - t.lexer.linestart + t.lexer.linestart = t.lexer.lexpos # Error handling rule def t_error(self, t): + self._update_column(t) error_text = LexicographicError.UNKNOWN_TOKEN % t.value[0] - line = t.lineno - column = find_column(self.lexer, t) - self.errors.append(LexicographicError(error_text, line, column)) + self.errors.append(LexicographicError(error_text, t.lineno, t.column)) t.lexer.skip(1) #t.lexer.skip(len(t.value)) - def tokenize_text(self, text): + def tokenize_text(self, text: str) -> list: self.lexer.input(text) tokens = [] for tok in self.lexer: - col = find_column(self.lexer, tok) - tokens.append(Token(tok.type, tok.value, tok.lineno, col)) + tokens.append(Token(tok.type, tok.value, tok.lineno, tok.column)) self.lexer.lineno = 1 + self.lexer.linestart = 0 return tokens + def _check_empty_line(self, tokens: list): + if len(tokens) == 0: + error_text = SyntaticError.ERROR % 'EOF' + print(SyntaticError(error_text, 0, 0)) + raise Exception() + + + def run(self, text: str): + tokens = self.tokenize_text(text) + if self.errors: + for error in self.errors: + print(error) + raise Exception() + + self._check_empty_line(tokens) + return tokens if __name__ == "__main__": lexer = CoolLexer() diff --git a/src/main.py b/src/main.py index df1169c4..a6e4eea7 100644 --- a/src/main.py +++ b/src/main.py @@ -1,37 +1,36 @@ +import sys from pprint import pprint -from lexer import CoolLexer -from parser import CoolParser -from tools.errors import CompilerError, SyntaticError -import sys, os +from lexer.lexer import CoolLexer +from parser.parser import CoolParser +from semantic.semantic import run_pipeline +from utils.errors import CompilerError, SyntaticError + input_ = sys.argv[1] -# input_ = f'tests/parser/program1.cl' +# input_ = f'//media/loly/02485E43485E359F/_Escuela/__UH/4to/CC/Compiler/cool-compiler-2020/tests/parser/program1.cl' # output_ = args.output try: with open(input_) as f: - data = f.read() + text = f.read() lexer = CoolLexer() - tokens = lexer.tokenize_text(data) - if lexer.errors: - for error in lexer.errors: - print(error) - raise Exception() - - if len(tokens) == 0: - error_text = SyntaticError.ERROR % 'EOF' - print(SyntaticError(error_text, 0, 0)) - raise Exception() + # tokens = lexer.tokenize_text(text) + # if lexer.errors: + # for error in lexer.errors: + # print(error) + # raise Exception() + tokens = lexer.run(text) parser = CoolParser(lexer) - ast = parser.parse(data, debug=True) + ast = parser.parse(text, debug=True) if parser.errors: raise Exception() - # print(ast) + + # run_pipeline(ast) except FileNotFoundError: error_text = CompilerError.UNKNOWN_FILE % input_ diff --git a/src/output_parser/parselog.txt b/src/output_parser/parselog.txt deleted file mode 100644 index d1e48183..00000000 --- a/src/output_parser/parselog.txt +++ /dev/null @@ -1,12940 +0,0 @@ - yacc.py:3317:Created by PLY version 3.11 (http://www.dabeaz.com/ply) - yacc.py:3377: - yacc.py:3378:Grammar - yacc.py:3379: - yacc.py:3381:Rule 0 S' -> program - yacc.py:3381:Rule 1 program -> class_list - yacc.py:3381:Rule 2 epsilon -> - yacc.py:3381:Rule 3 class_list -> def_class class_list - yacc.py:3381:Rule 4 class_list -> def_class - yacc.py:3381:Rule 5 class_list -> error class_list - yacc.py:3381:Rule 6 def_class -> class type ocur feature_list ccur semi - yacc.py:3381:Rule 7 def_class -> class type inherits type ocur feature_list ccur semi - yacc.py:3381:Rule 8 def_class -> class error ocur feature_list ccur semi - yacc.py:3381:Rule 9 def_class -> class type ocur feature_list ccur error - yacc.py:3381:Rule 10 def_class -> class error inherits type ocur feature_list ccur semi - yacc.py:3381:Rule 11 def_class -> class error inherits error ocur feature_list ccur semi - yacc.py:3381:Rule 12 def_class -> class type inherits error ocur feature_list ccur semi - yacc.py:3381:Rule 13 def_class -> class type inherits type ocur feature_list ccur error - yacc.py:3381:Rule 14 feature_list -> epsilon - yacc.py:3381:Rule 15 feature_list -> def_attr semi feature_list - yacc.py:3381:Rule 16 feature_list -> def_func semi feature_list - yacc.py:3381:Rule 17 feature_list -> error feature_list - yacc.py:3381:Rule 18 def_attr -> id colon type - yacc.py:3381:Rule 19 def_attr -> id colon type larrow expr - yacc.py:3381:Rule 20 def_attr -> error colon type - yacc.py:3381:Rule 21 def_attr -> id colon error - yacc.py:3381:Rule 22 def_attr -> error colon type larrow expr - yacc.py:3381:Rule 23 def_attr -> id colon error larrow expr - yacc.py:3381:Rule 24 def_attr -> id colon type larrow error - yacc.py:3381:Rule 25 def_func -> id opar formals cpar colon type ocur expr ccur - yacc.py:3381:Rule 26 def_func -> error opar formals cpar colon type ocur expr ccur - yacc.py:3381:Rule 27 def_func -> id opar error cpar colon type ocur expr ccur - yacc.py:3381:Rule 28 def_func -> id opar formals cpar colon error ocur expr ccur - yacc.py:3381:Rule 29 def_func -> id opar formals cpar colon type ocur error ccur - yacc.py:3381:Rule 30 formals -> param_list - yacc.py:3381:Rule 31 formals -> param_list_empty - yacc.py:3381:Rule 32 param_list -> param - yacc.py:3381:Rule 33 param_list -> param comma param_list - yacc.py:3381:Rule 34 param_list_empty -> epsilon - yacc.py:3381:Rule 35 param -> id colon type - yacc.py:3381:Rule 36 let_list -> let_assign - yacc.py:3381:Rule 37 let_list -> let_assign comma let_list - yacc.py:3381:Rule 38 let_assign -> param larrow expr - yacc.py:3381:Rule 39 let_assign -> param - yacc.py:3381:Rule 40 cases_list -> casep semi - yacc.py:3381:Rule 41 cases_list -> casep semi cases_list - yacc.py:3381:Rule 42 cases_list -> error cases_list - yacc.py:3381:Rule 43 cases_list -> error semi - yacc.py:3381:Rule 44 casep -> id colon type rarrow expr - yacc.py:3381:Rule 45 expr -> id larrow expr - yacc.py:3381:Rule 46 expr -> comp - yacc.py:3381:Rule 47 comp -> comp less op - yacc.py:3381:Rule 48 comp -> comp lesseq op - yacc.py:3381:Rule 49 comp -> comp equal op - yacc.py:3381:Rule 50 comp -> op - yacc.py:3381:Rule 51 op -> op plus term - yacc.py:3381:Rule 52 op -> op minus term - yacc.py:3381:Rule 53 op -> term - yacc.py:3381:Rule 54 term -> term star base_call - yacc.py:3381:Rule 55 term -> term div base_call - yacc.py:3381:Rule 56 term -> base_call - yacc.py:3381:Rule 57 term -> term star error - yacc.py:3381:Rule 58 term -> term div error - yacc.py:3381:Rule 59 base_call -> factor arroba type dot func_call - yacc.py:3381:Rule 60 base_call -> factor - yacc.py:3381:Rule 61 base_call -> error arroba type dot func_call - yacc.py:3381:Rule 62 base_call -> factor arroba error dot func_call - yacc.py:3381:Rule 63 factor -> atom - yacc.py:3381:Rule 64 factor -> opar expr cpar - yacc.py:3381:Rule 65 factor -> factor dot func_call - yacc.py:3381:Rule 66 factor -> not expr - yacc.py:3381:Rule 67 factor -> func_call - yacc.py:3381:Rule 68 factor -> isvoid base_call - yacc.py:3381:Rule 69 factor -> nox base_call - yacc.py:3381:Rule 70 factor -> let let_list in expr - yacc.py:3381:Rule 71 factor -> case expr of cases_list esac - yacc.py:3381:Rule 72 factor -> if expr then expr else expr fi - yacc.py:3381:Rule 73 factor -> while expr loop expr pool - yacc.py:3381:Rule 74 atom -> num - yacc.py:3381:Rule 75 atom -> id - yacc.py:3381:Rule 76 atom -> new type - yacc.py:3381:Rule 77 atom -> ocur block ccur - yacc.py:3381:Rule 78 atom -> error block ccur - yacc.py:3381:Rule 79 atom -> ocur error ccur - yacc.py:3381:Rule 80 atom -> ocur block error - yacc.py:3381:Rule 81 atom -> true - yacc.py:3381:Rule 82 atom -> false - yacc.py:3381:Rule 83 atom -> string - yacc.py:3381:Rule 84 block -> expr semi - yacc.py:3381:Rule 85 block -> expr semi block - yacc.py:3381:Rule 86 block -> error block - yacc.py:3381:Rule 87 block -> error semi - yacc.py:3381:Rule 88 func_call -> id opar args cpar - yacc.py:3381:Rule 89 func_call -> id opar error cpar - yacc.py:3381:Rule 90 func_call -> error opar args cpar - yacc.py:3381:Rule 91 args -> arg_list - yacc.py:3381:Rule 92 args -> arg_list_empty - yacc.py:3381:Rule 93 arg_list -> expr - yacc.py:3381:Rule 94 arg_list -> expr comma arg_list - yacc.py:3381:Rule 95 arg_list -> error arg_list - yacc.py:3381:Rule 96 arg_list_empty -> epsilon - yacc.py:3399: - yacc.py:3400:Terminals, with rules where they appear - yacc.py:3401: - yacc.py:3405:arroba : 59 61 62 - yacc.py:3405:case : 71 - yacc.py:3405:ccur : 6 7 8 9 10 11 12 13 25 26 27 28 29 77 78 79 - yacc.py:3405:class : 6 7 8 9 10 11 12 13 - yacc.py:3405:colon : 18 19 20 21 22 23 24 25 26 27 28 29 35 44 - yacc.py:3405:comma : 33 37 94 - yacc.py:3405:cpar : 25 26 27 28 29 64 88 89 90 - yacc.py:3405:div : 55 58 - yacc.py:3405:dot : 59 61 62 65 - yacc.py:3405:else : 72 - yacc.py:3405:equal : 49 - yacc.py:3405:error : 5 8 9 10 11 11 12 13 17 20 21 22 23 24 26 27 28 29 42 43 57 58 61 62 78 79 80 86 87 89 90 95 - yacc.py:3405:esac : 71 - yacc.py:3405:false : 82 - yacc.py:3405:fi : 72 - yacc.py:3405:id : 18 19 21 23 24 25 27 28 29 35 44 45 75 88 89 - yacc.py:3405:if : 72 - yacc.py:3405:in : 70 - yacc.py:3405:inherits : 7 10 11 12 13 - yacc.py:3405:isvoid : 68 - yacc.py:3405:larrow : 19 22 23 24 38 45 - yacc.py:3405:less : 47 - yacc.py:3405:lesseq : 48 - yacc.py:3405:let : 70 - yacc.py:3405:loop : 73 - yacc.py:3405:minus : 52 - yacc.py:3405:new : 76 - yacc.py:3405:not : 66 - yacc.py:3405:nox : 69 - yacc.py:3405:num : 74 - yacc.py:3405:ocur : 6 7 8 9 10 11 12 13 25 26 27 28 29 77 79 80 - yacc.py:3405:of : 71 - yacc.py:3405:opar : 25 26 27 28 29 64 88 89 90 - yacc.py:3405:plus : 51 - yacc.py:3405:pool : 73 - yacc.py:3405:rarrow : 44 - yacc.py:3405:semi : 6 7 8 10 11 12 15 16 40 41 43 84 85 87 - yacc.py:3405:star : 54 57 - yacc.py:3405:string : 83 - yacc.py:3405:then : 72 - yacc.py:3405:true : 81 - yacc.py:3405:type : 6 7 7 9 10 12 13 13 18 19 20 22 24 25 26 27 29 35 44 59 61 76 - yacc.py:3405:while : 73 - yacc.py:3407: - yacc.py:3408:Nonterminals, with rules where they appear - yacc.py:3409: - yacc.py:3413:arg_list : 91 94 95 - yacc.py:3413:arg_list_empty : 92 - yacc.py:3413:args : 88 90 - yacc.py:3413:atom : 63 - yacc.py:3413:base_call : 54 55 56 68 69 - yacc.py:3413:block : 77 78 80 85 86 - yacc.py:3413:casep : 40 41 - yacc.py:3413:cases_list : 41 42 71 - yacc.py:3413:class_list : 1 3 5 - yacc.py:3413:comp : 46 47 48 49 - yacc.py:3413:def_attr : 15 - yacc.py:3413:def_class : 3 4 - yacc.py:3413:def_func : 16 - yacc.py:3413:epsilon : 14 34 96 - yacc.py:3413:expr : 19 22 23 25 26 27 28 38 44 45 64 66 70 71 72 72 72 73 73 84 85 93 94 - yacc.py:3413:factor : 59 60 62 65 - yacc.py:3413:feature_list : 6 7 8 9 10 11 12 13 15 16 17 - yacc.py:3413:formals : 25 26 28 29 - yacc.py:3413:func_call : 59 61 62 65 67 - yacc.py:3413:let_assign : 36 37 - yacc.py:3413:let_list : 37 70 - yacc.py:3413:op : 47 48 49 50 51 52 - yacc.py:3413:param : 32 33 38 39 - yacc.py:3413:param_list : 30 33 - yacc.py:3413:param_list_empty : 31 - yacc.py:3413:program : 0 - yacc.py:3413:term : 51 52 53 54 55 57 58 - yacc.py:3414: - yacc.py:3436:Generating LALR tables - yacc.py:2543:Parsing method: LALR - yacc.py:2561: - yacc.py:2562:state 0 - yacc.py:2563: - yacc.py:2565: (0) S' -> . program - yacc.py:2565: (1) program -> . class_list - yacc.py:2565: (3) class_list -> . def_class class_list - yacc.py:2565: (4) class_list -> . def_class - yacc.py:2565: (5) class_list -> . error class_list - yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi - yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi - yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi - yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error - yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi - yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: error shift and go to state 4 - yacc.py:2687: class shift and go to state 5 - yacc.py:2689: - yacc.py:2714: program shift and go to state 1 - yacc.py:2714: class_list shift and go to state 2 - yacc.py:2714: def_class shift and go to state 3 - yacc.py:2561: - yacc.py:2562:state 1 - yacc.py:2563: - yacc.py:2565: (0) S' -> program . - yacc.py:2566: - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 2 - yacc.py:2563: - yacc.py:2565: (1) program -> class_list . - yacc.py:2566: - yacc.py:2687: $end reduce using rule 1 (program -> class_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 3 - yacc.py:2563: - yacc.py:2565: (3) class_list -> def_class . class_list - yacc.py:2565: (4) class_list -> def_class . - yacc.py:2565: (3) class_list -> . def_class class_list - yacc.py:2565: (4) class_list -> . def_class - yacc.py:2565: (5) class_list -> . error class_list - yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi - yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi - yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi - yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error - yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi - yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: $end reduce using rule 4 (class_list -> def_class .) - yacc.py:2687: error shift and go to state 4 - yacc.py:2687: class shift and go to state 5 - yacc.py:2689: - yacc.py:2714: def_class shift and go to state 3 - yacc.py:2714: class_list shift and go to state 6 - yacc.py:2561: - yacc.py:2562:state 4 - yacc.py:2563: - yacc.py:2565: (5) class_list -> error . class_list - yacc.py:2565: (3) class_list -> . def_class class_list - yacc.py:2565: (4) class_list -> . def_class - yacc.py:2565: (5) class_list -> . error class_list - yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi - yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi - yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi - yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error - yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi - yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: error shift and go to state 4 - yacc.py:2687: class shift and go to state 5 - yacc.py:2689: - yacc.py:2714: class_list shift and go to state 7 - yacc.py:2714: def_class shift and go to state 3 - yacc.py:2561: - yacc.py:2562:state 5 - yacc.py:2563: - yacc.py:2565: (6) def_class -> class . type ocur feature_list ccur semi - yacc.py:2565: (7) def_class -> class . type inherits type ocur feature_list ccur semi - yacc.py:2565: (8) def_class -> class . error ocur feature_list ccur semi - yacc.py:2565: (9) def_class -> class . type ocur feature_list ccur error - yacc.py:2565: (10) def_class -> class . error inherits type ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> class . error inherits error ocur feature_list ccur semi - yacc.py:2565: (12) def_class -> class . type inherits error ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> class . type inherits type ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: type shift and go to state 8 - yacc.py:2687: error shift and go to state 9 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 6 - yacc.py:2563: - yacc.py:2565: (3) class_list -> def_class class_list . - yacc.py:2566: - yacc.py:2687: $end reduce using rule 3 (class_list -> def_class class_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 7 - yacc.py:2563: - yacc.py:2565: (5) class_list -> error class_list . - yacc.py:2566: - yacc.py:2687: $end reduce using rule 5 (class_list -> error class_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 8 - yacc.py:2563: - yacc.py:2565: (6) def_class -> class type . ocur feature_list ccur semi - yacc.py:2565: (7) def_class -> class type . inherits type ocur feature_list ccur semi - yacc.py:2565: (9) def_class -> class type . ocur feature_list ccur error - yacc.py:2565: (12) def_class -> class type . inherits error ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> class type . inherits type ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 10 - yacc.py:2687: inherits shift and go to state 11 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 9 - yacc.py:2563: - yacc.py:2565: (8) def_class -> class error . ocur feature_list ccur semi - yacc.py:2565: (10) def_class -> class error . inherits type ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> class error . inherits error ocur feature_list ccur semi - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 12 - yacc.py:2687: inherits shift and go to state 13 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 10 - yacc.py:2563: - yacc.py:2565: (6) def_class -> class type ocur . feature_list ccur semi - yacc.py:2565: (9) def_class -> class type ocur . feature_list ccur error - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 14 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 11 - yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits . type ocur feature_list ccur semi - yacc.py:2565: (12) def_class -> class type inherits . error ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> class type inherits . type ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: type shift and go to state 20 - yacc.py:2687: error shift and go to state 21 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 12 - yacc.py:2563: - yacc.py:2565: (8) def_class -> class error ocur . feature_list ccur semi - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 22 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 13 - yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits . type ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> class error inherits . error ocur feature_list ccur semi - yacc.py:2566: - yacc.py:2687: type shift and go to state 24 - yacc.py:2687: error shift and go to state 23 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 14 - yacc.py:2563: - yacc.py:2565: (6) def_class -> class type ocur feature_list . ccur semi - yacc.py:2565: (9) def_class -> class type ocur feature_list . ccur error - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 25 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 15 - yacc.py:2563: - yacc.py:2565: (17) feature_list -> error . feature_list - yacc.py:2565: (20) def_attr -> error . colon type - yacc.py:2565: (22) def_attr -> error . colon type larrow expr - yacc.py:2565: (26) def_func -> error . opar formals cpar colon type ocur expr ccur - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: colon shift and go to state 27 - yacc.py:2687: opar shift and go to state 28 - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 26 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 16 - yacc.py:2563: - yacc.py:2565: (14) feature_list -> epsilon . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 14 (feature_list -> epsilon .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 17 - yacc.py:2563: - yacc.py:2565: (15) feature_list -> def_attr . semi feature_list - yacc.py:2566: - yacc.py:2687: semi shift and go to state 29 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 18 - yacc.py:2563: - yacc.py:2565: (16) feature_list -> def_func . semi feature_list - yacc.py:2566: - yacc.py:2687: semi shift and go to state 30 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 19 - yacc.py:2563: - yacc.py:2565: (18) def_attr -> id . colon type - yacc.py:2565: (19) def_attr -> id . colon type larrow expr - yacc.py:2565: (21) def_attr -> id . colon error - yacc.py:2565: (23) def_attr -> id . colon error larrow expr - yacc.py:2565: (24) def_attr -> id . colon type larrow error - yacc.py:2565: (25) def_func -> id . opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> id . opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> id . opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> id . opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: colon shift and go to state 31 - yacc.py:2687: opar shift and go to state 32 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 20 - yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits type . ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> class type inherits type . ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 33 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 21 - yacc.py:2563: - yacc.py:2565: (12) def_class -> class type inherits error . ocur feature_list ccur semi - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 34 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 22 - yacc.py:2563: - yacc.py:2565: (8) def_class -> class error ocur feature_list . ccur semi - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 35 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 23 - yacc.py:2563: - yacc.py:2565: (11) def_class -> class error inherits error . ocur feature_list ccur semi - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 36 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 24 - yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits type . ocur feature_list ccur semi - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 37 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 25 - yacc.py:2563: - yacc.py:2565: (6) def_class -> class type ocur feature_list ccur . semi - yacc.py:2565: (9) def_class -> class type ocur feature_list ccur . error - yacc.py:2566: - yacc.py:2687: semi shift and go to state 38 - yacc.py:2687: error shift and go to state 39 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 26 - yacc.py:2563: - yacc.py:2565: (17) feature_list -> error feature_list . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 17 (feature_list -> error feature_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 27 - yacc.py:2563: - yacc.py:2565: (20) def_attr -> error colon . type - yacc.py:2565: (22) def_attr -> error colon . type larrow expr - yacc.py:2566: - yacc.py:2687: type shift and go to state 40 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 28 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar . formals cpar colon type ocur expr ccur - yacc.py:2565: (30) formals -> . param_list - yacc.py:2565: (31) formals -> . param_list_empty - yacc.py:2565: (32) param_list -> . param - yacc.py:2565: (33) param_list -> . param comma param_list - yacc.py:2565: (34) param_list_empty -> . epsilon - yacc.py:2565: (35) param -> . id colon type - yacc.py:2565: (2) epsilon -> . - yacc.py:2566: - yacc.py:2687: id shift and go to state 46 - yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2689: - yacc.py:2714: formals shift and go to state 41 - yacc.py:2714: param_list shift and go to state 42 - yacc.py:2714: param_list_empty shift and go to state 43 - yacc.py:2714: param shift and go to state 44 - yacc.py:2714: epsilon shift and go to state 45 - yacc.py:2561: - yacc.py:2562:state 29 - yacc.py:2563: - yacc.py:2565: (15) feature_list -> def_attr semi . feature_list - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: feature_list shift and go to state 47 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 30 - yacc.py:2563: - yacc.py:2565: (16) feature_list -> def_func semi . feature_list - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2714: feature_list shift and go to state 48 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2561: - yacc.py:2562:state 31 - yacc.py:2563: - yacc.py:2565: (18) def_attr -> id colon . type - yacc.py:2565: (19) def_attr -> id colon . type larrow expr - yacc.py:2565: (21) def_attr -> id colon . error - yacc.py:2565: (23) def_attr -> id colon . error larrow expr - yacc.py:2565: (24) def_attr -> id colon . type larrow error - yacc.py:2566: - yacc.py:2687: type shift and go to state 49 - yacc.py:2687: error shift and go to state 50 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 32 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar . formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> id opar . error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> id opar . formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> id opar . formals cpar colon type ocur error ccur - yacc.py:2565: (30) formals -> . param_list - yacc.py:2565: (31) formals -> . param_list_empty - yacc.py:2565: (32) param_list -> . param - yacc.py:2565: (33) param_list -> . param comma param_list - yacc.py:2565: (34) param_list_empty -> . epsilon - yacc.py:2565: (35) param -> . id colon type - yacc.py:2565: (2) epsilon -> . - yacc.py:2566: - yacc.py:2687: error shift and go to state 52 - yacc.py:2687: id shift and go to state 46 - yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2689: - yacc.py:2714: formals shift and go to state 51 - yacc.py:2714: param_list shift and go to state 42 - yacc.py:2714: param_list_empty shift and go to state 43 - yacc.py:2714: param shift and go to state 44 - yacc.py:2714: epsilon shift and go to state 45 - yacc.py:2561: - yacc.py:2562:state 33 - yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits type ocur . feature_list ccur semi - yacc.py:2565: (13) def_class -> class type inherits type ocur . feature_list ccur error - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 53 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 34 - yacc.py:2563: - yacc.py:2565: (12) def_class -> class type inherits error ocur . feature_list ccur semi - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 54 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 35 - yacc.py:2563: - yacc.py:2565: (8) def_class -> class error ocur feature_list ccur . semi - yacc.py:2566: - yacc.py:2687: semi shift and go to state 55 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 36 - yacc.py:2563: - yacc.py:2565: (11) def_class -> class error inherits error ocur . feature_list ccur semi - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 56 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 37 - yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits type ocur . feature_list ccur semi - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 57 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 38 - yacc.py:2563: - yacc.py:2565: (6) def_class -> class type ocur feature_list ccur semi . - yacc.py:2566: - yacc.py:2687: error reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 39 - yacc.py:2563: - yacc.py:2565: (9) def_class -> class type ocur feature_list ccur error . - yacc.py:2566: - yacc.py:2687: error reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) - yacc.py:2687: class reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) - yacc.py:2687: $end reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 40 - yacc.py:2563: - yacc.py:2565: (20) def_attr -> error colon type . - yacc.py:2565: (22) def_attr -> error colon type . larrow expr - yacc.py:2566: - yacc.py:2687: semi reduce using rule 20 (def_attr -> error colon type .) - yacc.py:2687: larrow shift and go to state 58 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 41 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals . cpar colon type ocur expr ccur - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 59 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 42 - yacc.py:2563: - yacc.py:2565: (30) formals -> param_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 30 (formals -> param_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 43 - yacc.py:2563: - yacc.py:2565: (31) formals -> param_list_empty . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 31 (formals -> param_list_empty .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 44 - yacc.py:2563: - yacc.py:2565: (32) param_list -> param . - yacc.py:2565: (33) param_list -> param . comma param_list - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 32 (param_list -> param .) - yacc.py:2687: comma shift and go to state 60 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 45 - yacc.py:2563: - yacc.py:2565: (34) param_list_empty -> epsilon . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 34 (param_list_empty -> epsilon .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 46 - yacc.py:2563: - yacc.py:2565: (35) param -> id . colon type - yacc.py:2566: - yacc.py:2687: colon shift and go to state 61 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 47 - yacc.py:2563: - yacc.py:2565: (15) feature_list -> def_attr semi feature_list . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 15 (feature_list -> def_attr semi feature_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 48 - yacc.py:2563: - yacc.py:2565: (16) feature_list -> def_func semi feature_list . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 16 (feature_list -> def_func semi feature_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 49 - yacc.py:2563: - yacc.py:2565: (18) def_attr -> id colon type . - yacc.py:2565: (19) def_attr -> id colon type . larrow expr - yacc.py:2565: (24) def_attr -> id colon type . larrow error - yacc.py:2566: - yacc.py:2687: semi reduce using rule 18 (def_attr -> id colon type .) - yacc.py:2687: larrow shift and go to state 62 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 50 - yacc.py:2563: - yacc.py:2565: (21) def_attr -> id colon error . - yacc.py:2565: (23) def_attr -> id colon error . larrow expr - yacc.py:2566: - yacc.py:2687: semi reduce using rule 21 (def_attr -> id colon error .) - yacc.py:2687: larrow shift and go to state 63 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 51 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals . cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> id opar formals . cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> id opar formals . cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 64 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 52 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error . cpar colon type ocur expr ccur - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 65 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 53 - yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list . ccur semi - yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list . ccur error - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 66 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 54 - yacc.py:2563: - yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list . ccur semi - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 67 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 55 - yacc.py:2563: - yacc.py:2565: (8) def_class -> class error ocur feature_list ccur semi . - yacc.py:2566: - yacc.py:2687: error reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 56 - yacc.py:2563: - yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list . ccur semi - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 68 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 57 - yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list . ccur semi - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 69 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 58 - yacc.py:2563: - yacc.py:2565: (22) def_attr -> error colon type larrow . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 71 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 59 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar . colon type ocur expr ccur - yacc.py:2566: - yacc.py:2687: colon shift and go to state 94 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 60 - yacc.py:2563: - yacc.py:2565: (33) param_list -> param comma . param_list - yacc.py:2565: (32) param_list -> . param - yacc.py:2565: (33) param_list -> . param comma param_list - yacc.py:2565: (35) param -> . id colon type - yacc.py:2566: - yacc.py:2687: id shift and go to state 46 - yacc.py:2689: - yacc.py:2714: param shift and go to state 44 - yacc.py:2714: param_list shift and go to state 95 - yacc.py:2561: - yacc.py:2562:state 61 - yacc.py:2563: - yacc.py:2565: (35) param -> id colon . type - yacc.py:2566: - yacc.py:2687: type shift and go to state 96 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 62 - yacc.py:2563: - yacc.py:2565: (19) def_attr -> id colon type larrow . expr - yacc.py:2565: (24) def_attr -> id colon type larrow . error - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 98 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 97 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 63 - yacc.py:2563: - yacc.py:2565: (23) def_attr -> id colon error larrow . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 99 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 64 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar . colon type ocur expr ccur - yacc.py:2565: (28) def_func -> id opar formals cpar . colon error ocur expr ccur - yacc.py:2565: (29) def_func -> id opar formals cpar . colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: colon shift and go to state 100 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 65 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar . colon type ocur expr ccur - yacc.py:2566: - yacc.py:2687: colon shift and go to state 101 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 66 - yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list ccur . semi - yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list ccur . error - yacc.py:2566: - yacc.py:2687: semi shift and go to state 102 - yacc.py:2687: error shift and go to state 103 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 67 - yacc.py:2563: - yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list ccur . semi - yacc.py:2566: - yacc.py:2687: semi shift and go to state 104 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 68 - yacc.py:2563: - yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list ccur . semi - yacc.py:2566: - yacc.py:2687: semi shift and go to state 105 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 69 - yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list ccur . semi - yacc.py:2566: - yacc.py:2687: semi shift and go to state 106 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 70 - yacc.py:2563: - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 71 - yacc.py:2563: - yacc.py:2565: (22) def_attr -> error colon type larrow expr . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 22 (def_attr -> error colon type larrow expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 72 - yacc.py:2563: - yacc.py:2565: (45) expr -> id . larrow expr - yacc.py:2565: (75) atom -> id . - yacc.py:2565: (88) func_call -> id . opar args cpar - yacc.py:2565: (89) func_call -> id . opar error cpar - yacc.py:2566: - yacc.py:2687: larrow shift and go to state 112 - yacc.py:2687: arroba reduce using rule 75 (atom -> id .) - yacc.py:2687: dot reduce using rule 75 (atom -> id .) - yacc.py:2687: star reduce using rule 75 (atom -> id .) - yacc.py:2687: div reduce using rule 75 (atom -> id .) - yacc.py:2687: plus reduce using rule 75 (atom -> id .) - yacc.py:2687: minus reduce using rule 75 (atom -> id .) - yacc.py:2687: less reduce using rule 75 (atom -> id .) - yacc.py:2687: lesseq reduce using rule 75 (atom -> id .) - yacc.py:2687: equal reduce using rule 75 (atom -> id .) - yacc.py:2687: semi reduce using rule 75 (atom -> id .) - yacc.py:2687: cpar reduce using rule 75 (atom -> id .) - yacc.py:2687: of reduce using rule 75 (atom -> id .) - yacc.py:2687: then reduce using rule 75 (atom -> id .) - yacc.py:2687: loop reduce using rule 75 (atom -> id .) - yacc.py:2687: comma reduce using rule 75 (atom -> id .) - yacc.py:2687: in reduce using rule 75 (atom -> id .) - yacc.py:2687: else reduce using rule 75 (atom -> id .) - yacc.py:2687: pool reduce using rule 75 (atom -> id .) - yacc.py:2687: ccur reduce using rule 75 (atom -> id .) - yacc.py:2687: fi reduce using rule 75 (atom -> id .) - yacc.py:2687: opar shift and go to state 113 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 73 - yacc.py:2563: - yacc.py:2565: (46) expr -> comp . - yacc.py:2565: (47) comp -> comp . less op - yacc.py:2565: (48) comp -> comp . lesseq op - yacc.py:2565: (49) comp -> comp . equal op - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for less resolved as shift - yacc.py:2666: ! shift/reduce conflict for lesseq resolved as shift - yacc.py:2666: ! shift/reduce conflict for equal resolved as shift - yacc.py:2687: semi reduce using rule 46 (expr -> comp .) - yacc.py:2687: cpar reduce using rule 46 (expr -> comp .) - yacc.py:2687: arroba reduce using rule 46 (expr -> comp .) - yacc.py:2687: dot reduce using rule 46 (expr -> comp .) - yacc.py:2687: star reduce using rule 46 (expr -> comp .) - yacc.py:2687: div reduce using rule 46 (expr -> comp .) - yacc.py:2687: plus reduce using rule 46 (expr -> comp .) - yacc.py:2687: minus reduce using rule 46 (expr -> comp .) - yacc.py:2687: of reduce using rule 46 (expr -> comp .) - yacc.py:2687: then reduce using rule 46 (expr -> comp .) - yacc.py:2687: loop reduce using rule 46 (expr -> comp .) - yacc.py:2687: comma reduce using rule 46 (expr -> comp .) - yacc.py:2687: in reduce using rule 46 (expr -> comp .) - yacc.py:2687: else reduce using rule 46 (expr -> comp .) - yacc.py:2687: pool reduce using rule 46 (expr -> comp .) - yacc.py:2687: ccur reduce using rule 46 (expr -> comp .) - yacc.py:2687: fi reduce using rule 46 (expr -> comp .) - yacc.py:2687: less shift and go to state 114 - yacc.py:2687: lesseq shift and go to state 115 - yacc.py:2687: equal shift and go to state 116 - yacc.py:2689: - yacc.py:2696: ! less [ reduce using rule 46 (expr -> comp .) ] - yacc.py:2696: ! lesseq [ reduce using rule 46 (expr -> comp .) ] - yacc.py:2696: ! equal [ reduce using rule 46 (expr -> comp .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 74 - yacc.py:2563: - yacc.py:2565: (50) comp -> op . - yacc.py:2565: (51) op -> op . plus term - yacc.py:2565: (52) op -> op . minus term - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for plus resolved as shift - yacc.py:2666: ! shift/reduce conflict for minus resolved as shift - yacc.py:2687: less reduce using rule 50 (comp -> op .) - yacc.py:2687: lesseq reduce using rule 50 (comp -> op .) - yacc.py:2687: equal reduce using rule 50 (comp -> op .) - yacc.py:2687: semi reduce using rule 50 (comp -> op .) - yacc.py:2687: cpar reduce using rule 50 (comp -> op .) - yacc.py:2687: arroba reduce using rule 50 (comp -> op .) - yacc.py:2687: dot reduce using rule 50 (comp -> op .) - yacc.py:2687: star reduce using rule 50 (comp -> op .) - yacc.py:2687: div reduce using rule 50 (comp -> op .) - yacc.py:2687: of reduce using rule 50 (comp -> op .) - yacc.py:2687: then reduce using rule 50 (comp -> op .) - yacc.py:2687: loop reduce using rule 50 (comp -> op .) - yacc.py:2687: comma reduce using rule 50 (comp -> op .) - yacc.py:2687: in reduce using rule 50 (comp -> op .) - yacc.py:2687: else reduce using rule 50 (comp -> op .) - yacc.py:2687: pool reduce using rule 50 (comp -> op .) - yacc.py:2687: ccur reduce using rule 50 (comp -> op .) - yacc.py:2687: fi reduce using rule 50 (comp -> op .) - yacc.py:2687: plus shift and go to state 117 - yacc.py:2687: minus shift and go to state 118 - yacc.py:2689: - yacc.py:2696: ! plus [ reduce using rule 50 (comp -> op .) ] - yacc.py:2696: ! minus [ reduce using rule 50 (comp -> op .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 75 - yacc.py:2563: - yacc.py:2565: (53) op -> term . - yacc.py:2565: (54) term -> term . star base_call - yacc.py:2565: (55) term -> term . div base_call - yacc.py:2565: (57) term -> term . star error - yacc.py:2565: (58) term -> term . div error - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for star resolved as shift - yacc.py:2666: ! shift/reduce conflict for div resolved as shift - yacc.py:2687: plus reduce using rule 53 (op -> term .) - yacc.py:2687: minus reduce using rule 53 (op -> term .) - yacc.py:2687: less reduce using rule 53 (op -> term .) - yacc.py:2687: lesseq reduce using rule 53 (op -> term .) - yacc.py:2687: equal reduce using rule 53 (op -> term .) - yacc.py:2687: semi reduce using rule 53 (op -> term .) - yacc.py:2687: cpar reduce using rule 53 (op -> term .) - yacc.py:2687: arroba reduce using rule 53 (op -> term .) - yacc.py:2687: dot reduce using rule 53 (op -> term .) - yacc.py:2687: of reduce using rule 53 (op -> term .) - yacc.py:2687: then reduce using rule 53 (op -> term .) - yacc.py:2687: loop reduce using rule 53 (op -> term .) - yacc.py:2687: comma reduce using rule 53 (op -> term .) - yacc.py:2687: in reduce using rule 53 (op -> term .) - yacc.py:2687: else reduce using rule 53 (op -> term .) - yacc.py:2687: pool reduce using rule 53 (op -> term .) - yacc.py:2687: ccur reduce using rule 53 (op -> term .) - yacc.py:2687: fi reduce using rule 53 (op -> term .) - yacc.py:2687: star shift and go to state 119 - yacc.py:2687: div shift and go to state 120 - yacc.py:2689: - yacc.py:2696: ! star [ reduce using rule 53 (op -> term .) ] - yacc.py:2696: ! div [ reduce using rule 53 (op -> term .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 76 - yacc.py:2563: - yacc.py:2565: (56) term -> base_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 56 (term -> base_call .) - yacc.py:2687: div reduce using rule 56 (term -> base_call .) - yacc.py:2687: plus reduce using rule 56 (term -> base_call .) - yacc.py:2687: minus reduce using rule 56 (term -> base_call .) - yacc.py:2687: less reduce using rule 56 (term -> base_call .) - yacc.py:2687: lesseq reduce using rule 56 (term -> base_call .) - yacc.py:2687: equal reduce using rule 56 (term -> base_call .) - yacc.py:2687: semi reduce using rule 56 (term -> base_call .) - yacc.py:2687: cpar reduce using rule 56 (term -> base_call .) - yacc.py:2687: arroba reduce using rule 56 (term -> base_call .) - yacc.py:2687: dot reduce using rule 56 (term -> base_call .) - yacc.py:2687: of reduce using rule 56 (term -> base_call .) - yacc.py:2687: then reduce using rule 56 (term -> base_call .) - yacc.py:2687: loop reduce using rule 56 (term -> base_call .) - yacc.py:2687: comma reduce using rule 56 (term -> base_call .) - yacc.py:2687: in reduce using rule 56 (term -> base_call .) - yacc.py:2687: else reduce using rule 56 (term -> base_call .) - yacc.py:2687: pool reduce using rule 56 (term -> base_call .) - yacc.py:2687: ccur reduce using rule 56 (term -> base_call .) - yacc.py:2687: fi reduce using rule 56 (term -> base_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 77 - yacc.py:2563: - yacc.py:2565: (59) base_call -> factor . arroba type dot func_call - yacc.py:2565: (60) base_call -> factor . - yacc.py:2565: (62) base_call -> factor . arroba error dot func_call - yacc.py:2565: (65) factor -> factor . dot func_call - yacc.py:2566: - yacc.py:2609: ! shift/reduce conflict for arroba resolved as shift - yacc.py:2666: ! shift/reduce conflict for dot resolved as shift - yacc.py:2687: arroba shift and go to state 121 - yacc.py:2687: star reduce using rule 60 (base_call -> factor .) - yacc.py:2687: div reduce using rule 60 (base_call -> factor .) - yacc.py:2687: plus reduce using rule 60 (base_call -> factor .) - yacc.py:2687: minus reduce using rule 60 (base_call -> factor .) - yacc.py:2687: less reduce using rule 60 (base_call -> factor .) - yacc.py:2687: lesseq reduce using rule 60 (base_call -> factor .) - yacc.py:2687: equal reduce using rule 60 (base_call -> factor .) - yacc.py:2687: semi reduce using rule 60 (base_call -> factor .) - yacc.py:2687: cpar reduce using rule 60 (base_call -> factor .) - yacc.py:2687: of reduce using rule 60 (base_call -> factor .) - yacc.py:2687: then reduce using rule 60 (base_call -> factor .) - yacc.py:2687: loop reduce using rule 60 (base_call -> factor .) - yacc.py:2687: comma reduce using rule 60 (base_call -> factor .) - yacc.py:2687: in reduce using rule 60 (base_call -> factor .) - yacc.py:2687: else reduce using rule 60 (base_call -> factor .) - yacc.py:2687: pool reduce using rule 60 (base_call -> factor .) - yacc.py:2687: ccur reduce using rule 60 (base_call -> factor .) - yacc.py:2687: fi reduce using rule 60 (base_call -> factor .) - yacc.py:2687: dot shift and go to state 122 - yacc.py:2689: - yacc.py:2696: ! arroba [ reduce using rule 60 (base_call -> factor .) ] - yacc.py:2696: ! dot [ reduce using rule 60 (base_call -> factor .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 78 - yacc.py:2563: - yacc.py:2565: (67) factor -> func_call . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 67 (factor -> func_call .) - yacc.py:2687: dot reduce using rule 67 (factor -> func_call .) - yacc.py:2687: star reduce using rule 67 (factor -> func_call .) - yacc.py:2687: div reduce using rule 67 (factor -> func_call .) - yacc.py:2687: plus reduce using rule 67 (factor -> func_call .) - yacc.py:2687: minus reduce using rule 67 (factor -> func_call .) - yacc.py:2687: less reduce using rule 67 (factor -> func_call .) - yacc.py:2687: lesseq reduce using rule 67 (factor -> func_call .) - yacc.py:2687: equal reduce using rule 67 (factor -> func_call .) - yacc.py:2687: semi reduce using rule 67 (factor -> func_call .) - yacc.py:2687: cpar reduce using rule 67 (factor -> func_call .) - yacc.py:2687: of reduce using rule 67 (factor -> func_call .) - yacc.py:2687: then reduce using rule 67 (factor -> func_call .) - yacc.py:2687: loop reduce using rule 67 (factor -> func_call .) - yacc.py:2687: comma reduce using rule 67 (factor -> func_call .) - yacc.py:2687: in reduce using rule 67 (factor -> func_call .) - yacc.py:2687: else reduce using rule 67 (factor -> func_call .) - yacc.py:2687: pool reduce using rule 67 (factor -> func_call .) - yacc.py:2687: ccur reduce using rule 67 (factor -> func_call .) - yacc.py:2687: fi reduce using rule 67 (factor -> func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 79 - yacc.py:2563: - yacc.py:2565: (63) factor -> atom . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 63 (factor -> atom .) - yacc.py:2687: dot reduce using rule 63 (factor -> atom .) - yacc.py:2687: star reduce using rule 63 (factor -> atom .) - yacc.py:2687: div reduce using rule 63 (factor -> atom .) - yacc.py:2687: plus reduce using rule 63 (factor -> atom .) - yacc.py:2687: minus reduce using rule 63 (factor -> atom .) - yacc.py:2687: less reduce using rule 63 (factor -> atom .) - yacc.py:2687: lesseq reduce using rule 63 (factor -> atom .) - yacc.py:2687: equal reduce using rule 63 (factor -> atom .) - yacc.py:2687: semi reduce using rule 63 (factor -> atom .) - yacc.py:2687: cpar reduce using rule 63 (factor -> atom .) - yacc.py:2687: of reduce using rule 63 (factor -> atom .) - yacc.py:2687: then reduce using rule 63 (factor -> atom .) - yacc.py:2687: loop reduce using rule 63 (factor -> atom .) - yacc.py:2687: comma reduce using rule 63 (factor -> atom .) - yacc.py:2687: in reduce using rule 63 (factor -> atom .) - yacc.py:2687: else reduce using rule 63 (factor -> atom .) - yacc.py:2687: pool reduce using rule 63 (factor -> atom .) - yacc.py:2687: ccur reduce using rule 63 (factor -> atom .) - yacc.py:2687: fi reduce using rule 63 (factor -> atom .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 80 - yacc.py:2563: - yacc.py:2565: (64) factor -> opar . expr cpar - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 123 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 81 - yacc.py:2563: - yacc.py:2565: (66) factor -> not . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 124 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 82 - yacc.py:2563: - yacc.py:2565: (68) factor -> isvoid . base_call - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: base_call shift and go to state 125 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 83 - yacc.py:2563: - yacc.py:2565: (69) factor -> nox . base_call - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: base_call shift and go to state 127 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 84 - yacc.py:2563: - yacc.py:2565: (70) factor -> let . let_list in expr - yacc.py:2565: (36) let_list -> . let_assign - yacc.py:2565: (37) let_list -> . let_assign comma let_list - yacc.py:2565: (38) let_assign -> . param larrow expr - yacc.py:2565: (39) let_assign -> . param - yacc.py:2565: (35) param -> . id colon type - yacc.py:2566: - yacc.py:2687: id shift and go to state 46 - yacc.py:2689: - yacc.py:2714: let_list shift and go to state 128 - yacc.py:2714: let_assign shift and go to state 129 - yacc.py:2714: param shift and go to state 130 - yacc.py:2561: - yacc.py:2562:state 85 - yacc.py:2563: - yacc.py:2565: (71) factor -> case . expr of cases_list esac - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 131 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 86 - yacc.py:2563: - yacc.py:2565: (72) factor -> if . expr then expr else expr fi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 132 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 87 - yacc.py:2563: - yacc.py:2565: (73) factor -> while . expr loop expr pool - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 133 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 88 - yacc.py:2563: - yacc.py:2565: (74) atom -> num . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 74 (atom -> num .) - yacc.py:2687: dot reduce using rule 74 (atom -> num .) - yacc.py:2687: star reduce using rule 74 (atom -> num .) - yacc.py:2687: div reduce using rule 74 (atom -> num .) - yacc.py:2687: plus reduce using rule 74 (atom -> num .) - yacc.py:2687: minus reduce using rule 74 (atom -> num .) - yacc.py:2687: less reduce using rule 74 (atom -> num .) - yacc.py:2687: lesseq reduce using rule 74 (atom -> num .) - yacc.py:2687: equal reduce using rule 74 (atom -> num .) - yacc.py:2687: semi reduce using rule 74 (atom -> num .) - yacc.py:2687: cpar reduce using rule 74 (atom -> num .) - yacc.py:2687: of reduce using rule 74 (atom -> num .) - yacc.py:2687: then reduce using rule 74 (atom -> num .) - yacc.py:2687: loop reduce using rule 74 (atom -> num .) - yacc.py:2687: comma reduce using rule 74 (atom -> num .) - yacc.py:2687: in reduce using rule 74 (atom -> num .) - yacc.py:2687: else reduce using rule 74 (atom -> num .) - yacc.py:2687: pool reduce using rule 74 (atom -> num .) - yacc.py:2687: ccur reduce using rule 74 (atom -> num .) - yacc.py:2687: fi reduce using rule 74 (atom -> num .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 89 - yacc.py:2563: - yacc.py:2565: (76) atom -> new . type - yacc.py:2566: - yacc.py:2687: type shift and go to state 134 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 90 - yacc.py:2563: - yacc.py:2565: (77) atom -> ocur . block ccur - yacc.py:2565: (79) atom -> ocur . error ccur - yacc.py:2565: (80) atom -> ocur . block error - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 136 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: block shift and go to state 135 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 91 - yacc.py:2563: - yacc.py:2565: (81) atom -> true . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 81 (atom -> true .) - yacc.py:2687: dot reduce using rule 81 (atom -> true .) - yacc.py:2687: star reduce using rule 81 (atom -> true .) - yacc.py:2687: div reduce using rule 81 (atom -> true .) - yacc.py:2687: plus reduce using rule 81 (atom -> true .) - yacc.py:2687: minus reduce using rule 81 (atom -> true .) - yacc.py:2687: less reduce using rule 81 (atom -> true .) - yacc.py:2687: lesseq reduce using rule 81 (atom -> true .) - yacc.py:2687: equal reduce using rule 81 (atom -> true .) - yacc.py:2687: semi reduce using rule 81 (atom -> true .) - yacc.py:2687: cpar reduce using rule 81 (atom -> true .) - yacc.py:2687: of reduce using rule 81 (atom -> true .) - yacc.py:2687: then reduce using rule 81 (atom -> true .) - yacc.py:2687: loop reduce using rule 81 (atom -> true .) - yacc.py:2687: comma reduce using rule 81 (atom -> true .) - yacc.py:2687: in reduce using rule 81 (atom -> true .) - yacc.py:2687: else reduce using rule 81 (atom -> true .) - yacc.py:2687: pool reduce using rule 81 (atom -> true .) - yacc.py:2687: ccur reduce using rule 81 (atom -> true .) - yacc.py:2687: fi reduce using rule 81 (atom -> true .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 92 - yacc.py:2563: - yacc.py:2565: (82) atom -> false . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 82 (atom -> false .) - yacc.py:2687: dot reduce using rule 82 (atom -> false .) - yacc.py:2687: star reduce using rule 82 (atom -> false .) - yacc.py:2687: div reduce using rule 82 (atom -> false .) - yacc.py:2687: plus reduce using rule 82 (atom -> false .) - yacc.py:2687: minus reduce using rule 82 (atom -> false .) - yacc.py:2687: less reduce using rule 82 (atom -> false .) - yacc.py:2687: lesseq reduce using rule 82 (atom -> false .) - yacc.py:2687: equal reduce using rule 82 (atom -> false .) - yacc.py:2687: semi reduce using rule 82 (atom -> false .) - yacc.py:2687: cpar reduce using rule 82 (atom -> false .) - yacc.py:2687: of reduce using rule 82 (atom -> false .) - yacc.py:2687: then reduce using rule 82 (atom -> false .) - yacc.py:2687: loop reduce using rule 82 (atom -> false .) - yacc.py:2687: comma reduce using rule 82 (atom -> false .) - yacc.py:2687: in reduce using rule 82 (atom -> false .) - yacc.py:2687: else reduce using rule 82 (atom -> false .) - yacc.py:2687: pool reduce using rule 82 (atom -> false .) - yacc.py:2687: ccur reduce using rule 82 (atom -> false .) - yacc.py:2687: fi reduce using rule 82 (atom -> false .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 93 - yacc.py:2563: - yacc.py:2565: (83) atom -> string . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 83 (atom -> string .) - yacc.py:2687: dot reduce using rule 83 (atom -> string .) - yacc.py:2687: star reduce using rule 83 (atom -> string .) - yacc.py:2687: div reduce using rule 83 (atom -> string .) - yacc.py:2687: plus reduce using rule 83 (atom -> string .) - yacc.py:2687: minus reduce using rule 83 (atom -> string .) - yacc.py:2687: less reduce using rule 83 (atom -> string .) - yacc.py:2687: lesseq reduce using rule 83 (atom -> string .) - yacc.py:2687: equal reduce using rule 83 (atom -> string .) - yacc.py:2687: semi reduce using rule 83 (atom -> string .) - yacc.py:2687: cpar reduce using rule 83 (atom -> string .) - yacc.py:2687: of reduce using rule 83 (atom -> string .) - yacc.py:2687: then reduce using rule 83 (atom -> string .) - yacc.py:2687: loop reduce using rule 83 (atom -> string .) - yacc.py:2687: comma reduce using rule 83 (atom -> string .) - yacc.py:2687: in reduce using rule 83 (atom -> string .) - yacc.py:2687: else reduce using rule 83 (atom -> string .) - yacc.py:2687: pool reduce using rule 83 (atom -> string .) - yacc.py:2687: ccur reduce using rule 83 (atom -> string .) - yacc.py:2687: fi reduce using rule 83 (atom -> string .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 94 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon . type ocur expr ccur - yacc.py:2566: - yacc.py:2687: type shift and go to state 137 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 95 - yacc.py:2563: - yacc.py:2565: (33) param_list -> param comma param_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 33 (param_list -> param comma param_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 96 - yacc.py:2563: - yacc.py:2565: (35) param -> id colon type . - yacc.py:2566: - yacc.py:2687: comma reduce using rule 35 (param -> id colon type .) - yacc.py:2687: cpar reduce using rule 35 (param -> id colon type .) - yacc.py:2687: larrow reduce using rule 35 (param -> id colon type .) - yacc.py:2687: in reduce using rule 35 (param -> id colon type .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 97 - yacc.py:2563: - yacc.py:2565: (19) def_attr -> id colon type larrow expr . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 19 (def_attr -> id colon type larrow expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 98 - yacc.py:2563: - yacc.py:2565: (24) def_attr -> id colon type larrow error . - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: semi reduce using rule 24 (def_attr -> id colon type larrow error .) - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 99 - yacc.py:2563: - yacc.py:2565: (23) def_attr -> id colon error larrow expr . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 23 (def_attr -> id colon error larrow expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 100 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon . type ocur expr ccur - yacc.py:2565: (28) def_func -> id opar formals cpar colon . error ocur expr ccur - yacc.py:2565: (29) def_func -> id opar formals cpar colon . type ocur error ccur - yacc.py:2566: - yacc.py:2687: type shift and go to state 138 - yacc.py:2687: error shift and go to state 139 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 101 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon . type ocur expr ccur - yacc.py:2566: - yacc.py:2687: type shift and go to state 140 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 102 - yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list ccur semi . - yacc.py:2566: - yacc.py:2687: error reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 103 - yacc.py:2563: - yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list ccur error . - yacc.py:2566: - yacc.py:2687: error reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) - yacc.py:2687: class reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) - yacc.py:2687: $end reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 104 - yacc.py:2563: - yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list ccur semi . - yacc.py:2566: - yacc.py:2687: error reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 105 - yacc.py:2563: - yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list ccur semi . - yacc.py:2566: - yacc.py:2687: error reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 106 - yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list ccur semi . - yacc.py:2566: - yacc.py:2687: error reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 107 - yacc.py:2563: - yacc.py:2565: (86) block -> error . block - yacc.py:2565: (87) block -> error . semi - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: semi shift and go to state 142 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: block shift and go to state 141 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 108 - yacc.py:2563: - yacc.py:2565: (61) base_call -> error arroba . type dot func_call - yacc.py:2566: - yacc.py:2687: type shift and go to state 143 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 109 - yacc.py:2563: - yacc.py:2565: (78) atom -> error block . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 144 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 110 - yacc.py:2563: - yacc.py:2565: (90) func_call -> error opar . args cpar - yacc.py:2565: (64) factor -> opar . expr cpar - yacc.py:2565: (91) args -> . arg_list - yacc.py:2565: (92) args -> . arg_list_empty - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (96) arg_list_empty -> . epsilon - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 145 - yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: args shift and go to state 146 - yacc.py:2714: expr shift and go to state 147 - yacc.py:2714: arg_list shift and go to state 148 - yacc.py:2714: arg_list_empty shift and go to state 149 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: epsilon shift and go to state 150 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 111 - yacc.py:2563: - yacc.py:2565: (84) block -> expr . semi - yacc.py:2565: (85) block -> expr . semi block - yacc.py:2566: - yacc.py:2687: semi shift and go to state 151 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 112 - yacc.py:2563: - yacc.py:2565: (45) expr -> id larrow . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 152 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 113 - yacc.py:2563: - yacc.py:2565: (88) func_call -> id opar . args cpar - yacc.py:2565: (89) func_call -> id opar . error cpar - yacc.py:2565: (91) args -> . arg_list - yacc.py:2565: (92) args -> . arg_list_empty - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (96) arg_list_empty -> . epsilon - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 154 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: args shift and go to state 153 - yacc.py:2714: arg_list shift and go to state 148 - yacc.py:2714: arg_list_empty shift and go to state 149 - yacc.py:2714: expr shift and go to state 155 - yacc.py:2714: epsilon shift and go to state 150 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 114 - yacc.py:2563: - yacc.py:2565: (47) comp -> comp less . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: op shift and go to state 156 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 115 - yacc.py:2563: - yacc.py:2565: (48) comp -> comp lesseq . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: op shift and go to state 157 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 116 - yacc.py:2563: - yacc.py:2565: (49) comp -> comp equal . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: op shift and go to state 158 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 117 - yacc.py:2563: - yacc.py:2565: (51) op -> op plus . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: term shift and go to state 159 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 118 - yacc.py:2563: - yacc.py:2565: (52) op -> op minus . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: term shift and go to state 160 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 119 - yacc.py:2563: - yacc.py:2565: (54) term -> term star . base_call - yacc.py:2565: (57) term -> term star . error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 162 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: base_call shift and go to state 161 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 120 - yacc.py:2563: - yacc.py:2565: (55) term -> term div . base_call - yacc.py:2565: (58) term -> term div . error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 164 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: base_call shift and go to state 163 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 121 - yacc.py:2563: - yacc.py:2565: (59) base_call -> factor arroba . type dot func_call - yacc.py:2565: (62) base_call -> factor arroba . error dot func_call - yacc.py:2566: - yacc.py:2687: type shift and go to state 165 - yacc.py:2687: error shift and go to state 166 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 122 - yacc.py:2563: - yacc.py:2565: (65) factor -> factor dot . func_call - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 168 - yacc.py:2687: error shift and go to state 169 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 167 - yacc.py:2561: - yacc.py:2562:state 123 - yacc.py:2563: - yacc.py:2565: (64) factor -> opar expr . cpar - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 170 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 124 - yacc.py:2563: - yacc.py:2565: (66) factor -> not expr . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 66 (factor -> not expr .) - yacc.py:2687: dot reduce using rule 66 (factor -> not expr .) - yacc.py:2687: star reduce using rule 66 (factor -> not expr .) - yacc.py:2687: div reduce using rule 66 (factor -> not expr .) - yacc.py:2687: plus reduce using rule 66 (factor -> not expr .) - yacc.py:2687: minus reduce using rule 66 (factor -> not expr .) - yacc.py:2687: less reduce using rule 66 (factor -> not expr .) - yacc.py:2687: lesseq reduce using rule 66 (factor -> not expr .) - yacc.py:2687: equal reduce using rule 66 (factor -> not expr .) - yacc.py:2687: semi reduce using rule 66 (factor -> not expr .) - yacc.py:2687: cpar reduce using rule 66 (factor -> not expr .) - yacc.py:2687: of reduce using rule 66 (factor -> not expr .) - yacc.py:2687: then reduce using rule 66 (factor -> not expr .) - yacc.py:2687: loop reduce using rule 66 (factor -> not expr .) - yacc.py:2687: comma reduce using rule 66 (factor -> not expr .) - yacc.py:2687: in reduce using rule 66 (factor -> not expr .) - yacc.py:2687: else reduce using rule 66 (factor -> not expr .) - yacc.py:2687: pool reduce using rule 66 (factor -> not expr .) - yacc.py:2687: ccur reduce using rule 66 (factor -> not expr .) - yacc.py:2687: fi reduce using rule 66 (factor -> not expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 125 - yacc.py:2563: - yacc.py:2565: (68) factor -> isvoid base_call . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: dot reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: star reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: div reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: plus reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: minus reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: less reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: lesseq reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: equal reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: semi reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: cpar reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: of reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: then reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: loop reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: comma reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: in reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: else reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: pool reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: ccur reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: fi reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 126 - yacc.py:2563: - yacc.py:2565: (75) atom -> id . - yacc.py:2565: (88) func_call -> id . opar args cpar - yacc.py:2565: (89) func_call -> id . opar error cpar - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 75 (atom -> id .) - yacc.py:2687: dot reduce using rule 75 (atom -> id .) - yacc.py:2687: star reduce using rule 75 (atom -> id .) - yacc.py:2687: div reduce using rule 75 (atom -> id .) - yacc.py:2687: plus reduce using rule 75 (atom -> id .) - yacc.py:2687: minus reduce using rule 75 (atom -> id .) - yacc.py:2687: less reduce using rule 75 (atom -> id .) - yacc.py:2687: lesseq reduce using rule 75 (atom -> id .) - yacc.py:2687: equal reduce using rule 75 (atom -> id .) - yacc.py:2687: semi reduce using rule 75 (atom -> id .) - yacc.py:2687: cpar reduce using rule 75 (atom -> id .) - yacc.py:2687: of reduce using rule 75 (atom -> id .) - yacc.py:2687: then reduce using rule 75 (atom -> id .) - yacc.py:2687: loop reduce using rule 75 (atom -> id .) - yacc.py:2687: comma reduce using rule 75 (atom -> id .) - yacc.py:2687: in reduce using rule 75 (atom -> id .) - yacc.py:2687: else reduce using rule 75 (atom -> id .) - yacc.py:2687: pool reduce using rule 75 (atom -> id .) - yacc.py:2687: ccur reduce using rule 75 (atom -> id .) - yacc.py:2687: fi reduce using rule 75 (atom -> id .) - yacc.py:2687: opar shift and go to state 113 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 127 - yacc.py:2563: - yacc.py:2565: (69) factor -> nox base_call . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: dot reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: star reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: div reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: plus reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: minus reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: less reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: lesseq reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: equal reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: semi reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: cpar reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: of reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: then reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: loop reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: comma reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: in reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: else reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: pool reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: ccur reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: fi reduce using rule 69 (factor -> nox base_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 128 - yacc.py:2563: - yacc.py:2565: (70) factor -> let let_list . in expr - yacc.py:2566: - yacc.py:2687: in shift and go to state 171 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 129 - yacc.py:2563: - yacc.py:2565: (36) let_list -> let_assign . - yacc.py:2565: (37) let_list -> let_assign . comma let_list - yacc.py:2566: - yacc.py:2687: in reduce using rule 36 (let_list -> let_assign .) - yacc.py:2687: comma shift and go to state 172 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 130 - yacc.py:2563: - yacc.py:2565: (38) let_assign -> param . larrow expr - yacc.py:2565: (39) let_assign -> param . - yacc.py:2566: - yacc.py:2687: larrow shift and go to state 173 - yacc.py:2687: comma reduce using rule 39 (let_assign -> param .) - yacc.py:2687: in reduce using rule 39 (let_assign -> param .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 131 - yacc.py:2563: - yacc.py:2565: (71) factor -> case expr . of cases_list esac - yacc.py:2566: - yacc.py:2687: of shift and go to state 174 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 132 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr . then expr else expr fi - yacc.py:2566: - yacc.py:2687: then shift and go to state 175 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 133 - yacc.py:2563: - yacc.py:2565: (73) factor -> while expr . loop expr pool - yacc.py:2566: - yacc.py:2687: loop shift and go to state 176 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 134 - yacc.py:2563: - yacc.py:2565: (76) atom -> new type . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 76 (atom -> new type .) - yacc.py:2687: dot reduce using rule 76 (atom -> new type .) - yacc.py:2687: star reduce using rule 76 (atom -> new type .) - yacc.py:2687: div reduce using rule 76 (atom -> new type .) - yacc.py:2687: plus reduce using rule 76 (atom -> new type .) - yacc.py:2687: minus reduce using rule 76 (atom -> new type .) - yacc.py:2687: less reduce using rule 76 (atom -> new type .) - yacc.py:2687: lesseq reduce using rule 76 (atom -> new type .) - yacc.py:2687: equal reduce using rule 76 (atom -> new type .) - yacc.py:2687: semi reduce using rule 76 (atom -> new type .) - yacc.py:2687: cpar reduce using rule 76 (atom -> new type .) - yacc.py:2687: of reduce using rule 76 (atom -> new type .) - yacc.py:2687: then reduce using rule 76 (atom -> new type .) - yacc.py:2687: loop reduce using rule 76 (atom -> new type .) - yacc.py:2687: comma reduce using rule 76 (atom -> new type .) - yacc.py:2687: in reduce using rule 76 (atom -> new type .) - yacc.py:2687: else reduce using rule 76 (atom -> new type .) - yacc.py:2687: pool reduce using rule 76 (atom -> new type .) - yacc.py:2687: ccur reduce using rule 76 (atom -> new type .) - yacc.py:2687: fi reduce using rule 76 (atom -> new type .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 135 - yacc.py:2563: - yacc.py:2565: (77) atom -> ocur block . ccur - yacc.py:2565: (80) atom -> ocur block . error - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 177 - yacc.py:2687: error shift and go to state 178 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 136 - yacc.py:2563: - yacc.py:2565: (79) atom -> ocur error . ccur - yacc.py:2565: (86) block -> error . block - yacc.py:2565: (87) block -> error . semi - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 179 - yacc.py:2687: semi shift and go to state 142 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: block shift and go to state 141 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 137 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon type . ocur expr ccur - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 180 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 138 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon type . ocur expr ccur - yacc.py:2565: (29) def_func -> id opar formals cpar colon type . ocur error ccur - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 181 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 139 - yacc.py:2563: - yacc.py:2565: (28) def_func -> id opar formals cpar colon error . ocur expr ccur - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 182 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 140 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon type . ocur expr ccur - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 183 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 141 - yacc.py:2563: - yacc.py:2565: (86) block -> error block . - yacc.py:2565: (78) atom -> error block . ccur - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for ccur resolved as shift - yacc.py:2687: error reduce using rule 86 (block -> error block .) - yacc.py:2687: ccur shift and go to state 144 - yacc.py:2689: - yacc.py:2696: ! ccur [ reduce using rule 86 (block -> error block .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 142 - yacc.py:2563: - yacc.py:2565: (87) block -> error semi . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 87 (block -> error semi .) - yacc.py:2687: error reduce using rule 87 (block -> error semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 143 - yacc.py:2563: - yacc.py:2565: (61) base_call -> error arroba type . dot func_call - yacc.py:2566: - yacc.py:2687: dot shift and go to state 184 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 144 - yacc.py:2563: - yacc.py:2565: (78) atom -> error block ccur . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: dot reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: star reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: div reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: plus reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: minus reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: less reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: lesseq reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: equal reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: semi reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: cpar reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: of reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: then reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: loop reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: comma reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: in reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: else reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: pool reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: ccur reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: fi reduce using rule 78 (atom -> error block ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 145 - yacc.py:2563: - yacc.py:2565: (95) arg_list -> error . arg_list - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 185 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: arg_list shift and go to state 186 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 187 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 146 - yacc.py:2563: - yacc.py:2565: (90) func_call -> error opar args . cpar - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 188 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 147 - yacc.py:2563: - yacc.py:2565: (64) factor -> opar expr . cpar - yacc.py:2565: (93) arg_list -> expr . - yacc.py:2565: (94) arg_list -> expr . comma arg_list - yacc.py:2566: - yacc.py:2609: ! shift/reduce conflict for cpar resolved as shift - yacc.py:2687: cpar shift and go to state 170 - yacc.py:2687: comma shift and go to state 189 - yacc.py:2689: - yacc.py:2696: ! cpar [ reduce using rule 93 (arg_list -> expr .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 148 - yacc.py:2563: - yacc.py:2565: (91) args -> arg_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 91 (args -> arg_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 149 - yacc.py:2563: - yacc.py:2565: (92) args -> arg_list_empty . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 92 (args -> arg_list_empty .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 150 - yacc.py:2563: - yacc.py:2565: (96) arg_list_empty -> epsilon . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 96 (arg_list_empty -> epsilon .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 151 - yacc.py:2563: - yacc.py:2565: (84) block -> expr semi . - yacc.py:2565: (85) block -> expr semi . block - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for error resolved as shift - yacc.py:2687: ccur reduce using rule 84 (block -> expr semi .) - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2696: ! error [ reduce using rule 84 (block -> expr semi .) ] - yacc.py:2700: - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: block shift and go to state 190 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 152 - yacc.py:2563: - yacc.py:2565: (45) expr -> id larrow expr . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: cpar reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: arroba reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: dot reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: star reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: div reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: plus reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: minus reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: less reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: lesseq reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: equal reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: of reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: then reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: loop reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: comma reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: in reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: else reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: pool reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: ccur reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: fi reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 153 - yacc.py:2563: - yacc.py:2565: (88) func_call -> id opar args . cpar - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 191 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 154 - yacc.py:2563: - yacc.py:2565: (89) func_call -> id opar error . cpar - yacc.py:2565: (95) arg_list -> error . arg_list - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 192 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 185 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: arg_list shift and go to state 186 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 187 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 155 - yacc.py:2563: - yacc.py:2565: (93) arg_list -> expr . - yacc.py:2565: (94) arg_list -> expr . comma arg_list - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 93 (arg_list -> expr .) - yacc.py:2687: comma shift and go to state 189 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 156 - yacc.py:2563: - yacc.py:2565: (47) comp -> comp less op . - yacc.py:2565: (51) op -> op . plus term - yacc.py:2565: (52) op -> op . minus term - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for plus resolved as shift - yacc.py:2666: ! shift/reduce conflict for minus resolved as shift - yacc.py:2687: less reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: lesseq reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: equal reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: semi reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: cpar reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: arroba reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: dot reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: star reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: div reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: of reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: then reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: loop reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: comma reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: in reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: else reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: pool reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: ccur reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: fi reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: plus shift and go to state 117 - yacc.py:2687: minus shift and go to state 118 - yacc.py:2689: - yacc.py:2696: ! plus [ reduce using rule 47 (comp -> comp less op .) ] - yacc.py:2696: ! minus [ reduce using rule 47 (comp -> comp less op .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 157 - yacc.py:2563: - yacc.py:2565: (48) comp -> comp lesseq op . - yacc.py:2565: (51) op -> op . plus term - yacc.py:2565: (52) op -> op . minus term - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for plus resolved as shift - yacc.py:2666: ! shift/reduce conflict for minus resolved as shift - yacc.py:2687: less reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: lesseq reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: equal reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: semi reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: cpar reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: arroba reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: dot reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: star reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: div reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: of reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: then reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: loop reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: comma reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: in reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: else reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: pool reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: ccur reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: fi reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: plus shift and go to state 117 - yacc.py:2687: minus shift and go to state 118 - yacc.py:2689: - yacc.py:2696: ! plus [ reduce using rule 48 (comp -> comp lesseq op .) ] - yacc.py:2696: ! minus [ reduce using rule 48 (comp -> comp lesseq op .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 158 - yacc.py:2563: - yacc.py:2565: (49) comp -> comp equal op . - yacc.py:2565: (51) op -> op . plus term - yacc.py:2565: (52) op -> op . minus term - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for plus resolved as shift - yacc.py:2666: ! shift/reduce conflict for minus resolved as shift - yacc.py:2687: less reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: lesseq reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: equal reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: semi reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: cpar reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: arroba reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: dot reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: star reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: div reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: of reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: then reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: loop reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: comma reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: in reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: else reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: pool reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: ccur reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: fi reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: plus shift and go to state 117 - yacc.py:2687: minus shift and go to state 118 - yacc.py:2689: - yacc.py:2696: ! plus [ reduce using rule 49 (comp -> comp equal op .) ] - yacc.py:2696: ! minus [ reduce using rule 49 (comp -> comp equal op .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 159 - yacc.py:2563: - yacc.py:2565: (51) op -> op plus term . - yacc.py:2565: (54) term -> term . star base_call - yacc.py:2565: (55) term -> term . div base_call - yacc.py:2565: (57) term -> term . star error - yacc.py:2565: (58) term -> term . div error - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for star resolved as shift - yacc.py:2666: ! shift/reduce conflict for div resolved as shift - yacc.py:2687: plus reduce using rule 51 (op -> op plus term .) - yacc.py:2687: minus reduce using rule 51 (op -> op plus term .) - yacc.py:2687: less reduce using rule 51 (op -> op plus term .) - yacc.py:2687: lesseq reduce using rule 51 (op -> op plus term .) - yacc.py:2687: equal reduce using rule 51 (op -> op plus term .) - yacc.py:2687: semi reduce using rule 51 (op -> op plus term .) - yacc.py:2687: cpar reduce using rule 51 (op -> op plus term .) - yacc.py:2687: arroba reduce using rule 51 (op -> op plus term .) - yacc.py:2687: dot reduce using rule 51 (op -> op plus term .) - yacc.py:2687: of reduce using rule 51 (op -> op plus term .) - yacc.py:2687: then reduce using rule 51 (op -> op plus term .) - yacc.py:2687: loop reduce using rule 51 (op -> op plus term .) - yacc.py:2687: comma reduce using rule 51 (op -> op plus term .) - yacc.py:2687: in reduce using rule 51 (op -> op plus term .) - yacc.py:2687: else reduce using rule 51 (op -> op plus term .) - yacc.py:2687: pool reduce using rule 51 (op -> op plus term .) - yacc.py:2687: ccur reduce using rule 51 (op -> op plus term .) - yacc.py:2687: fi reduce using rule 51 (op -> op plus term .) - yacc.py:2687: star shift and go to state 119 - yacc.py:2687: div shift and go to state 120 - yacc.py:2689: - yacc.py:2696: ! star [ reduce using rule 51 (op -> op plus term .) ] - yacc.py:2696: ! div [ reduce using rule 51 (op -> op plus term .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 160 - yacc.py:2563: - yacc.py:2565: (52) op -> op minus term . - yacc.py:2565: (54) term -> term . star base_call - yacc.py:2565: (55) term -> term . div base_call - yacc.py:2565: (57) term -> term . star error - yacc.py:2565: (58) term -> term . div error - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for star resolved as shift - yacc.py:2666: ! shift/reduce conflict for div resolved as shift - yacc.py:2687: plus reduce using rule 52 (op -> op minus term .) - yacc.py:2687: minus reduce using rule 52 (op -> op minus term .) - yacc.py:2687: less reduce using rule 52 (op -> op minus term .) - yacc.py:2687: lesseq reduce using rule 52 (op -> op minus term .) - yacc.py:2687: equal reduce using rule 52 (op -> op minus term .) - yacc.py:2687: semi reduce using rule 52 (op -> op minus term .) - yacc.py:2687: cpar reduce using rule 52 (op -> op minus term .) - yacc.py:2687: arroba reduce using rule 52 (op -> op minus term .) - yacc.py:2687: dot reduce using rule 52 (op -> op minus term .) - yacc.py:2687: of reduce using rule 52 (op -> op minus term .) - yacc.py:2687: then reduce using rule 52 (op -> op minus term .) - yacc.py:2687: loop reduce using rule 52 (op -> op minus term .) - yacc.py:2687: comma reduce using rule 52 (op -> op minus term .) - yacc.py:2687: in reduce using rule 52 (op -> op minus term .) - yacc.py:2687: else reduce using rule 52 (op -> op minus term .) - yacc.py:2687: pool reduce using rule 52 (op -> op minus term .) - yacc.py:2687: ccur reduce using rule 52 (op -> op minus term .) - yacc.py:2687: fi reduce using rule 52 (op -> op minus term .) - yacc.py:2687: star shift and go to state 119 - yacc.py:2687: div shift and go to state 120 - yacc.py:2689: - yacc.py:2696: ! star [ reduce using rule 52 (op -> op minus term .) ] - yacc.py:2696: ! div [ reduce using rule 52 (op -> op minus term .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 161 - yacc.py:2563: - yacc.py:2565: (54) term -> term star base_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: div reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: plus reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: minus reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: less reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: lesseq reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: equal reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: semi reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: cpar reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: arroba reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: dot reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: of reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: then reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: loop reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: comma reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: in reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: else reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: pool reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: ccur reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: fi reduce using rule 54 (term -> term star base_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 162 - yacc.py:2563: - yacc.py:2565: (57) term -> term star error . - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift - yacc.py:2687: star reduce using rule 57 (term -> term star error .) - yacc.py:2687: div reduce using rule 57 (term -> term star error .) - yacc.py:2687: plus reduce using rule 57 (term -> term star error .) - yacc.py:2687: minus reduce using rule 57 (term -> term star error .) - yacc.py:2687: less reduce using rule 57 (term -> term star error .) - yacc.py:2687: lesseq reduce using rule 57 (term -> term star error .) - yacc.py:2687: equal reduce using rule 57 (term -> term star error .) - yacc.py:2687: semi reduce using rule 57 (term -> term star error .) - yacc.py:2687: cpar reduce using rule 57 (term -> term star error .) - yacc.py:2687: dot reduce using rule 57 (term -> term star error .) - yacc.py:2687: of reduce using rule 57 (term -> term star error .) - yacc.py:2687: then reduce using rule 57 (term -> term star error .) - yacc.py:2687: loop reduce using rule 57 (term -> term star error .) - yacc.py:2687: comma reduce using rule 57 (term -> term star error .) - yacc.py:2687: in reduce using rule 57 (term -> term star error .) - yacc.py:2687: else reduce using rule 57 (term -> term star error .) - yacc.py:2687: pool reduce using rule 57 (term -> term star error .) - yacc.py:2687: ccur reduce using rule 57 (term -> term star error .) - yacc.py:2687: fi reduce using rule 57 (term -> term star error .) - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2696: ! arroba [ reduce using rule 57 (term -> term star error .) ] - yacc.py:2700: - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 163 - yacc.py:2563: - yacc.py:2565: (55) term -> term div base_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: div reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: plus reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: minus reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: less reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: lesseq reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: equal reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: semi reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: cpar reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: arroba reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: dot reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: of reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: then reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: loop reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: comma reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: in reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: else reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: pool reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: ccur reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: fi reduce using rule 55 (term -> term div base_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 164 - yacc.py:2563: - yacc.py:2565: (58) term -> term div error . - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift - yacc.py:2687: star reduce using rule 58 (term -> term div error .) - yacc.py:2687: div reduce using rule 58 (term -> term div error .) - yacc.py:2687: plus reduce using rule 58 (term -> term div error .) - yacc.py:2687: minus reduce using rule 58 (term -> term div error .) - yacc.py:2687: less reduce using rule 58 (term -> term div error .) - yacc.py:2687: lesseq reduce using rule 58 (term -> term div error .) - yacc.py:2687: equal reduce using rule 58 (term -> term div error .) - yacc.py:2687: semi reduce using rule 58 (term -> term div error .) - yacc.py:2687: cpar reduce using rule 58 (term -> term div error .) - yacc.py:2687: dot reduce using rule 58 (term -> term div error .) - yacc.py:2687: of reduce using rule 58 (term -> term div error .) - yacc.py:2687: then reduce using rule 58 (term -> term div error .) - yacc.py:2687: loop reduce using rule 58 (term -> term div error .) - yacc.py:2687: comma reduce using rule 58 (term -> term div error .) - yacc.py:2687: in reduce using rule 58 (term -> term div error .) - yacc.py:2687: else reduce using rule 58 (term -> term div error .) - yacc.py:2687: pool reduce using rule 58 (term -> term div error .) - yacc.py:2687: ccur reduce using rule 58 (term -> term div error .) - yacc.py:2687: fi reduce using rule 58 (term -> term div error .) - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2696: ! arroba [ reduce using rule 58 (term -> term div error .) ] - yacc.py:2700: - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 165 - yacc.py:2563: - yacc.py:2565: (59) base_call -> factor arroba type . dot func_call - yacc.py:2566: - yacc.py:2687: dot shift and go to state 193 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 166 - yacc.py:2563: - yacc.py:2565: (62) base_call -> factor arroba error . dot func_call - yacc.py:2566: - yacc.py:2687: dot shift and go to state 194 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 167 - yacc.py:2563: - yacc.py:2565: (65) factor -> factor dot func_call . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: dot reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: star reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: div reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: plus reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: minus reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: less reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: lesseq reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: equal reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: semi reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: cpar reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: of reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: then reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: loop reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: comma reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: in reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: else reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: pool reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: ccur reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: fi reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 168 - yacc.py:2563: - yacc.py:2565: (88) func_call -> id . opar args cpar - yacc.py:2565: (89) func_call -> id . opar error cpar - yacc.py:2566: - yacc.py:2687: opar shift and go to state 113 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 169 - yacc.py:2563: - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2566: - yacc.py:2687: opar shift and go to state 195 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 170 - yacc.py:2563: - yacc.py:2565: (64) factor -> opar expr cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: dot reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: star reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: div reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: plus reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: minus reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: less reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: lesseq reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: equal reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: semi reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: cpar reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: of reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: then reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: loop reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: comma reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: in reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: else reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: pool reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: ccur reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: fi reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 171 - yacc.py:2563: - yacc.py:2565: (70) factor -> let let_list in . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 196 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 172 - yacc.py:2563: - yacc.py:2565: (37) let_list -> let_assign comma . let_list - yacc.py:2565: (36) let_list -> . let_assign - yacc.py:2565: (37) let_list -> . let_assign comma let_list - yacc.py:2565: (38) let_assign -> . param larrow expr - yacc.py:2565: (39) let_assign -> . param - yacc.py:2565: (35) param -> . id colon type - yacc.py:2566: - yacc.py:2687: id shift and go to state 46 - yacc.py:2689: - yacc.py:2714: let_assign shift and go to state 129 - yacc.py:2714: let_list shift and go to state 197 - yacc.py:2714: param shift and go to state 130 - yacc.py:2561: - yacc.py:2562:state 173 - yacc.py:2563: - yacc.py:2565: (38) let_assign -> param larrow . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 198 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 174 - yacc.py:2563: - yacc.py:2565: (71) factor -> case expr of . cases_list esac - yacc.py:2565: (40) cases_list -> . casep semi - yacc.py:2565: (41) cases_list -> . casep semi cases_list - yacc.py:2565: (42) cases_list -> . error cases_list - yacc.py:2565: (43) cases_list -> . error semi - yacc.py:2565: (44) casep -> . id colon type rarrow expr - yacc.py:2566: - yacc.py:2687: error shift and go to state 201 - yacc.py:2687: id shift and go to state 202 - yacc.py:2689: - yacc.py:2714: cases_list shift and go to state 199 - yacc.py:2714: casep shift and go to state 200 - yacc.py:2561: - yacc.py:2562:state 175 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr then . expr else expr fi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 203 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 176 - yacc.py:2563: - yacc.py:2565: (73) factor -> while expr loop . expr pool - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 204 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 177 - yacc.py:2563: - yacc.py:2565: (77) atom -> ocur block ccur . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: dot reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: star reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: div reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: plus reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: minus reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: less reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: lesseq reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: equal reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: semi reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: cpar reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: of reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: then reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: loop reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: comma reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: in reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: else reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: pool reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: ccur reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: fi reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 178 - yacc.py:2563: - yacc.py:2565: (80) atom -> ocur block error . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: dot reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: star reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: div reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: plus reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: minus reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: less reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: lesseq reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: equal reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: semi reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: cpar reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: of reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: then reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: loop reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: comma reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: in reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: else reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: pool reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: ccur reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: fi reduce using rule 80 (atom -> ocur block error .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 179 - yacc.py:2563: - yacc.py:2565: (79) atom -> ocur error ccur . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: dot reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: star reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: div reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: plus reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: minus reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: less reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: lesseq reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: equal reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: semi reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: cpar reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: of reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: then reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: loop reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: comma reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: in reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: else reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: pool reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: ccur reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: fi reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 180 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur . expr ccur - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 205 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 181 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur . expr ccur - yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur . error ccur - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 207 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 206 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 182 - yacc.py:2563: - yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur . expr ccur - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 208 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 183 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur . expr ccur - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 209 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 184 - yacc.py:2563: - yacc.py:2565: (61) base_call -> error arroba type dot . func_call - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 168 - yacc.py:2687: error shift and go to state 169 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 210 - yacc.py:2561: - yacc.py:2562:state 185 - yacc.py:2563: - yacc.py:2565: (95) arg_list -> error . arg_list - yacc.py:2565: (86) block -> error . block - yacc.py:2565: (87) block -> error . semi - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: semi shift and go to state 142 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 185 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: arg_list shift and go to state 186 - yacc.py:2714: block shift and go to state 141 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: expr shift and go to state 187 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 186 - yacc.py:2563: - yacc.py:2565: (95) arg_list -> error arg_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 95 (arg_list -> error arg_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 187 - yacc.py:2563: - yacc.py:2565: (93) arg_list -> expr . - yacc.py:2565: (94) arg_list -> expr . comma arg_list - yacc.py:2565: (84) block -> expr . semi - yacc.py:2565: (85) block -> expr . semi block - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 93 (arg_list -> expr .) - yacc.py:2687: comma shift and go to state 189 - yacc.py:2687: semi shift and go to state 151 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 188 - yacc.py:2563: - yacc.py:2565: (90) func_call -> error opar args cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: dot reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: star reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: div reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: plus reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: minus reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: less reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: lesseq reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: equal reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: semi reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: cpar reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: of reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: then reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: loop reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: comma reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: in reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: else reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: pool reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: ccur reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: fi reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 189 - yacc.py:2563: - yacc.py:2565: (94) arg_list -> expr comma . arg_list - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 145 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 155 - yacc.py:2714: arg_list shift and go to state 211 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 190 - yacc.py:2563: - yacc.py:2565: (85) block -> expr semi block . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 85 (block -> expr semi block .) - yacc.py:2687: error reduce using rule 85 (block -> expr semi block .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 191 - yacc.py:2563: - yacc.py:2565: (88) func_call -> id opar args cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: dot reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: star reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: div reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: plus reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: minus reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: less reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: lesseq reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: equal reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: semi reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: cpar reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: of reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: then reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: loop reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: comma reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: in reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: else reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: pool reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: ccur reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: fi reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 192 - yacc.py:2563: - yacc.py:2565: (89) func_call -> id opar error cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: dot reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: star reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: div reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: plus reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: minus reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: less reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: lesseq reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: equal reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: semi reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: cpar reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: of reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: then reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: loop reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: comma reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: in reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: else reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: pool reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: ccur reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: fi reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 193 - yacc.py:2563: - yacc.py:2565: (59) base_call -> factor arroba type dot . func_call - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 168 - yacc.py:2687: error shift and go to state 169 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 212 - yacc.py:2561: - yacc.py:2562:state 194 - yacc.py:2563: - yacc.py:2565: (62) base_call -> factor arroba error dot . func_call - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 168 - yacc.py:2687: error shift and go to state 169 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 213 - yacc.py:2561: - yacc.py:2562:state 195 - yacc.py:2563: - yacc.py:2565: (90) func_call -> error opar . args cpar - yacc.py:2565: (91) args -> . arg_list - yacc.py:2565: (92) args -> . arg_list_empty - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (96) arg_list_empty -> . epsilon - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 145 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: args shift and go to state 146 - yacc.py:2714: arg_list shift and go to state 148 - yacc.py:2714: arg_list_empty shift and go to state 149 - yacc.py:2714: expr shift and go to state 155 - yacc.py:2714: epsilon shift and go to state 150 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 196 - yacc.py:2563: - yacc.py:2565: (70) factor -> let let_list in expr . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: dot reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: star reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: div reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: plus reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: minus reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: less reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: lesseq reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: equal reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: semi reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: cpar reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: of reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: then reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: loop reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: comma reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: in reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: else reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: pool reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: ccur reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: fi reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 197 - yacc.py:2563: - yacc.py:2565: (37) let_list -> let_assign comma let_list . - yacc.py:2566: - yacc.py:2687: in reduce using rule 37 (let_list -> let_assign comma let_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 198 - yacc.py:2563: - yacc.py:2565: (38) let_assign -> param larrow expr . - yacc.py:2566: - yacc.py:2687: comma reduce using rule 38 (let_assign -> param larrow expr .) - yacc.py:2687: in reduce using rule 38 (let_assign -> param larrow expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 199 - yacc.py:2563: - yacc.py:2565: (71) factor -> case expr of cases_list . esac - yacc.py:2566: - yacc.py:2687: esac shift and go to state 214 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 200 - yacc.py:2563: - yacc.py:2565: (40) cases_list -> casep . semi - yacc.py:2565: (41) cases_list -> casep . semi cases_list - yacc.py:2566: - yacc.py:2687: semi shift and go to state 215 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 201 - yacc.py:2563: - yacc.py:2565: (42) cases_list -> error . cases_list - yacc.py:2565: (43) cases_list -> error . semi - yacc.py:2565: (40) cases_list -> . casep semi - yacc.py:2565: (41) cases_list -> . casep semi cases_list - yacc.py:2565: (42) cases_list -> . error cases_list - yacc.py:2565: (43) cases_list -> . error semi - yacc.py:2565: (44) casep -> . id colon type rarrow expr - yacc.py:2566: - yacc.py:2687: semi shift and go to state 217 - yacc.py:2687: error shift and go to state 201 - yacc.py:2687: id shift and go to state 202 - yacc.py:2689: - yacc.py:2714: cases_list shift and go to state 216 - yacc.py:2714: casep shift and go to state 200 - yacc.py:2561: - yacc.py:2562:state 202 - yacc.py:2563: - yacc.py:2565: (44) casep -> id . colon type rarrow expr - yacc.py:2566: - yacc.py:2687: colon shift and go to state 218 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 203 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr then expr . else expr fi - yacc.py:2566: - yacc.py:2687: else shift and go to state 219 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 204 - yacc.py:2563: - yacc.py:2565: (73) factor -> while expr loop expr . pool - yacc.py:2566: - yacc.py:2687: pool shift and go to state 220 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 205 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur expr . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 221 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 206 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur expr . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 222 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 207 - yacc.py:2563: - yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur error . ccur - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 223 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 208 - yacc.py:2563: - yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur expr . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 224 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 209 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur expr . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 225 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 210 - yacc.py:2563: - yacc.py:2565: (61) base_call -> error arroba type dot func_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: div reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: plus reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: minus reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: less reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: lesseq reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: equal reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: semi reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: cpar reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: arroba reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: dot reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: of reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: then reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: loop reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: comma reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: in reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: else reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: pool reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: ccur reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: fi reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 211 - yacc.py:2563: - yacc.py:2565: (94) arg_list -> expr comma arg_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 94 (arg_list -> expr comma arg_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 212 - yacc.py:2563: - yacc.py:2565: (59) base_call -> factor arroba type dot func_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: div reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: plus reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: minus reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: less reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: lesseq reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: equal reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: semi reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: cpar reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: arroba reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: dot reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: of reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: then reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: loop reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: comma reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: in reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: else reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: pool reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: ccur reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: fi reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 213 - yacc.py:2563: - yacc.py:2565: (62) base_call -> factor arroba error dot func_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: div reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: plus reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: minus reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: less reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: lesseq reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: equal reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: semi reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: cpar reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: arroba reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: dot reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: of reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: then reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: loop reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: comma reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: in reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: else reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: pool reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: ccur reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: fi reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 214 - yacc.py:2563: - yacc.py:2565: (71) factor -> case expr of cases_list esac . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: dot reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: star reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: div reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: plus reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: minus reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: less reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: lesseq reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: equal reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: semi reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: cpar reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: of reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: then reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: loop reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: comma reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: in reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: else reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: pool reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: ccur reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: fi reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 215 - yacc.py:2563: - yacc.py:2565: (40) cases_list -> casep semi . - yacc.py:2565: (41) cases_list -> casep semi . cases_list - yacc.py:2565: (40) cases_list -> . casep semi - yacc.py:2565: (41) cases_list -> . casep semi cases_list - yacc.py:2565: (42) cases_list -> . error cases_list - yacc.py:2565: (43) cases_list -> . error semi - yacc.py:2565: (44) casep -> . id colon type rarrow expr - yacc.py:2566: - yacc.py:2687: esac reduce using rule 40 (cases_list -> casep semi .) - yacc.py:2687: error shift and go to state 201 - yacc.py:2687: id shift and go to state 202 - yacc.py:2689: - yacc.py:2714: casep shift and go to state 200 - yacc.py:2714: cases_list shift and go to state 226 - yacc.py:2561: - yacc.py:2562:state 216 - yacc.py:2563: - yacc.py:2565: (42) cases_list -> error cases_list . - yacc.py:2566: - yacc.py:2687: esac reduce using rule 42 (cases_list -> error cases_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 217 - yacc.py:2563: - yacc.py:2565: (43) cases_list -> error semi . - yacc.py:2566: - yacc.py:2687: esac reduce using rule 43 (cases_list -> error semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 218 - yacc.py:2563: - yacc.py:2565: (44) casep -> id colon . type rarrow expr - yacc.py:2566: - yacc.py:2687: type shift and go to state 227 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 219 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr then expr else . expr fi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 228 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 220 - yacc.py:2563: - yacc.py:2565: (73) factor -> while expr loop expr pool . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: dot reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: star reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: div reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: plus reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: minus reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: less reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: lesseq reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: equal reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: semi reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: cpar reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: of reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: then reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: loop reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: comma reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: in reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: else reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: pool reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: ccur reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: fi reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 221 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur expr ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 26 (def_func -> error opar formals cpar colon type ocur expr ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 222 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur expr ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 25 (def_func -> id opar formals cpar colon type ocur expr ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 223 - yacc.py:2563: - yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur error ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 29 (def_func -> id opar formals cpar colon type ocur error ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 224 - yacc.py:2563: - yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur expr ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 28 (def_func -> id opar formals cpar colon error ocur expr ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 225 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur expr ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 27 (def_func -> id opar error cpar colon type ocur expr ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 226 - yacc.py:2563: - yacc.py:2565: (41) cases_list -> casep semi cases_list . - yacc.py:2566: - yacc.py:2687: esac reduce using rule 41 (cases_list -> casep semi cases_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 227 - yacc.py:2563: - yacc.py:2565: (44) casep -> id colon type . rarrow expr - yacc.py:2566: - yacc.py:2687: rarrow shift and go to state 229 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 228 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr then expr else expr . fi - yacc.py:2566: - yacc.py:2687: fi shift and go to state 230 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 229 - yacc.py:2563: - yacc.py:2565: (44) casep -> id colon type rarrow . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 231 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 230 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr then expr else expr fi . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: dot reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: star reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: div reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: plus reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: minus reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: less reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: lesseq reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: equal reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: semi reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: cpar reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: of reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: then reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: loop reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: comma reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: in reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: else reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: pool reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: ccur reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: fi reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 231 - yacc.py:2563: - yacc.py:2565: (44) casep -> id colon type rarrow expr . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 44 (casep -> id colon type rarrow expr .) - yacc.py:2689: - yacc.py:3447:24 shift/reduce conflicts - yacc.py:3457: - yacc.py:3458:Conflicts: - yacc.py:3459: - yacc.py:3462:shift/reduce conflict for less in state 73 resolved as shift - yacc.py:3462:shift/reduce conflict for lesseq in state 73 resolved as shift - yacc.py:3462:shift/reduce conflict for equal in state 73 resolved as shift - yacc.py:3462:shift/reduce conflict for plus in state 74 resolved as shift - yacc.py:3462:shift/reduce conflict for minus in state 74 resolved as shift - yacc.py:3462:shift/reduce conflict for star in state 75 resolved as shift - yacc.py:3462:shift/reduce conflict for div in state 75 resolved as shift - yacc.py:3462:shift/reduce conflict for arroba in state 77 resolved as shift - yacc.py:3462:shift/reduce conflict for dot in state 77 resolved as shift - yacc.py:3462:shift/reduce conflict for ccur in state 141 resolved as shift - yacc.py:3462:shift/reduce conflict for cpar in state 147 resolved as shift - yacc.py:3462:shift/reduce conflict for error in state 151 resolved as shift - yacc.py:3462:shift/reduce conflict for plus in state 156 resolved as shift - yacc.py:3462:shift/reduce conflict for minus in state 156 resolved as shift - yacc.py:3462:shift/reduce conflict for plus in state 157 resolved as shift - yacc.py:3462:shift/reduce conflict for minus in state 157 resolved as shift - yacc.py:3462:shift/reduce conflict for plus in state 158 resolved as shift - yacc.py:3462:shift/reduce conflict for minus in state 158 resolved as shift - yacc.py:3462:shift/reduce conflict for star in state 159 resolved as shift - yacc.py:3462:shift/reduce conflict for div in state 159 resolved as shift - yacc.py:3462:shift/reduce conflict for star in state 160 resolved as shift - yacc.py:3462:shift/reduce conflict for div in state 160 resolved as shift - yacc.py:3462:shift/reduce conflict for arroba in state 162 resolved as shift - yacc.py:3462:shift/reduce conflict for arroba in state 164 resolved as shift - yacc.py:3488:Couldn't create 'parsetab'. [Errno 2] No such file or directory: 'src/output_parser/parsetab.py' - yacc.py: 362:PLY: PARSE DEBUG START - yacc.py: 410: - yacc.py: 411:State : 0 - yacc.py: 435:Stack : . LexToken(class,'class',13,377) - yacc.py: 445:Action : Shift and goto state 5 - yacc.py: 410: - yacc.py: 411:State : 5 - yacc.py: 435:Stack : class . LexToken(type,'A2I',13,383) - yacc.py: 445:Action : Shift and goto state 8 - yacc.py: 410: - yacc.py: 411:State : 8 - yacc.py: 435:Stack : class type . LexToken(ocur,'{',13,387) - yacc.py: 445:Action : Shift and goto state 10 - yacc.py: 410: - yacc.py: 411:State : 10 - yacc.py: 435:Stack : class type ocur . LexToken(id,'c2i',15,395) - yacc.py: 445:Action : Shift and goto state 19 - yacc.py: 410: - yacc.py: 411:State : 19 - yacc.py: 435:Stack : class type ocur id . LexToken(opar,'(',15,398) - yacc.py: 445:Action : Shift and goto state 32 - yacc.py: 410: - yacc.py: 411:State : 32 - yacc.py: 435:Stack : class type ocur id opar . LexToken(id,'char',15,399) - yacc.py: 445:Action : Shift and goto state 46 - yacc.py: 410: - yacc.py: 411:State : 46 - yacc.py: 435:Stack : class type ocur id opar id . LexToken(colon,':',15,404) - yacc.py: 445:Action : Shift and goto state 61 - yacc.py: 410: - yacc.py: 411:State : 61 - yacc.py: 435:Stack : class type ocur id opar id colon . LexToken(type,'String',15,406) - yacc.py: 445:Action : Shift and goto state 96 - yacc.py: 410: - yacc.py: 411:State : 96 - yacc.py: 435:Stack : class type ocur id opar id colon type . LexToken(cpar,')',15,412) - yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['char',':','String'] and goto state 44 - yacc.py: 506:Result : (('char', 'String')) - yacc.py: 410: - yacc.py: 411:State : 44 - yacc.py: 435:Stack : class type ocur id opar param . LexToken(cpar,')',15,412) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 - yacc.py: 506:Result : ([('char', 'String')]) - yacc.py: 410: - yacc.py: 411:State : 42 - yacc.py: 430:Defaulted state 42: Reduce using 30 - yacc.py: 435:Stack : class type ocur id opar param_list . LexToken(cpar,')',15,412) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([('char', 'String')]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',15,412) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : class type ocur id opar formals cpar . LexToken(colon,':',15,414) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon . LexToken(type,'Int',15,416) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type . LexToken(ocur,'{',15,420) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur . LexToken(if,'if',16,423) - yacc.py: 445:Action : Shift and goto state 86 - yacc.py: 410: - yacc.py: 411:State : 86 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if . LexToken(id,'char',16,426) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if id . LexToken(equal,'=',16,431) - yacc.py: 471:Action : Reduce rule [atom -> id] with ['char'] and goto state 79 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( string] with ['0'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( string] with ['1'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( string] with ['2'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( string] with ['3'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( string] with ['4'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( string] with ['5'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( string] with ['6'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( num] with [6.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( string] with ['7'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( num] with [7.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( string] with ['8'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( num] with [8.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( string] with ['9'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( num] with [9.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 150 - yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else ocur id opar epsilon . LexToken(cpar,')',26,757) - yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 149 - yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else ocur id opar arg_list_empty . LexToken(cpar,')',26,757) - yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else ocur id opar args . LexToken(cpar,')',26,757) - yacc.py: 445:Action : Shift and goto state 191 - yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else ocur id opar args cpar . LexToken(semi,';',26,758) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['abort','(',[],')'] and goto state 78 - yacc.py: 506:Result : (('abort', [])) - yacc.py: 410: - yacc.py: 411:State : 78 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else ocur func_call . LexToken(semi,';',26,758) - yacc.py: 471:Action : Reduce rule [factor -> func_call] with [('abort', [])] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['c2i','(',,')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id colon type] with ['i',':','Int'] and goto state 44 - yacc.py: 506:Result : (('i', 'Int')) - yacc.py: 410: - yacc.py: 411:State : 44 - yacc.py: 435:Stack : class type ocur def_func semi id opar param . LexToken(cpar,')',33,910) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [('i', 'Int')] and goto state 42 - yacc.py: 506:Result : ([('i', 'Int')]) - yacc.py: 410: - yacc.py: 411:State : 42 - yacc.py: 430:Defaulted state 42: Reduce using 30 - yacc.py: 435:Stack : class type ocur def_func semi id opar param_list . LexToken(cpar,')',33,910) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [[('i', 'Int')]] and goto state 51 - yacc.py: 506:Result : ([('i', 'Int')]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : class type ocur def_func semi id opar formals . LexToken(cpar,')',33,910) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar . LexToken(colon,':',33,912) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon . LexToken(type,'String',33,914) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type . LexToken(ocur,'{',33,921) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur . LexToken(if,'if',34,924) - yacc.py: 445:Action : Shift and goto state 86 - yacc.py: 410: - yacc.py: 411:State : 86 - yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur if . LexToken(id,'i',34,927) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur if id . LexToken(equal,'=',34,929) - yacc.py: 471:Action : Reduce rule [atom -> id] with ['i'] and goto state 79 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( string] with ['0'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( string] with ['1'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( string] with ['2'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( string] with ['3'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( string] with ['4'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( string] with ['5'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [6.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( string] with ['6'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [7.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( string] with ['7'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [8.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( string] with ['8'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [9.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( string] with ['9'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 150 - yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else ocur id opar epsilon . LexToken(cpar,')',44,1172) - yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 149 - yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else ocur id opar arg_list_empty . LexToken(cpar,')',44,1172) - yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else ocur id opar args . LexToken(cpar,')',44,1172) - yacc.py: 445:Action : Shift and goto state 191 - yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else ocur id opar args cpar . LexToken(semi,';',44,1173) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['abort','(',[],')'] and goto state 78 - yacc.py: 506:Result : (('abort', [])) - yacc.py: 410: - yacc.py: 411:State : 78 - yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else if expr then expr else ocur func_call . LexToken(semi,';',44,1173) - yacc.py: 471:Action : Reduce rule [factor -> func_call] with [('abort', [])] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( string] with [''] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['i2c','(',[('i', 'Int')],')',':','String','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id colon type] with ['s',':','String'] and goto state 44 - yacc.py: 506:Result : (('s', 'String')) - yacc.py: 410: - yacc.py: 411:State : 44 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar param . LexToken(cpar,')',56,1579) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [('s', 'String')] and goto state 42 - yacc.py: 506:Result : ([('s', 'String')]) - yacc.py: 410: - yacc.py: 411:State : 42 - yacc.py: 430:Defaulted state 42: Reduce using 30 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar param_list . LexToken(cpar,')',56,1579) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([('s', 'String')]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals . LexToken(cpar,')',56,1579) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar . LexToken(colon,':',56,1581) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon . LexToken(type,'Int',56,1583) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',56,1587) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(if,'if',57,1597) - yacc.py: 445:Action : Shift and goto state 86 - yacc.py: 410: - yacc.py: 411:State : 86 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if . LexToken(id,'s',57,1600) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if id . LexToken(dot,'.',57,1601) - yacc.py: 471:Action : Reduce rule [atom -> id] with ['s'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 150 - yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if factor dot id opar epsilon . LexToken(cpar,')',57,1609) - yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 149 - yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if factor dot id opar arg_list_empty . LexToken(cpar,')',57,1609) - yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if factor dot id opar args . LexToken(cpar,')',57,1609) - yacc.py: 445:Action : Shift and goto state 191 - yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if factor dot id opar args cpar . LexToken(equal,'=',57,1611) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['length','(',[],')'] and goto state 167 - yacc.py: 506:Result : (('length', [])) - yacc.py: 410: - yacc.py: 411:State : 167 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if factor dot func_call . LexToken(equal,'=',57,1611) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',('length', [])] and goto state 77 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( id] with ['s'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([,')'] and goto state 167 - yacc.py: 506:Result : (('substr', [] and goto state 77 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( string] with ['-'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( id] with ['s'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( id] with ['s'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 150 - yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then nox id opar factor dot id opar expr comma factor dot id opar epsilon . LexToken(cpar,')',58,1685) - yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 149 - yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then nox id opar factor dot id opar expr comma factor dot id opar arg_list_empty . LexToken(cpar,')',58,1685) - yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then nox id opar factor dot id opar expr comma factor dot id opar args . LexToken(cpar,')',58,1685) - yacc.py: 445:Action : Shift and goto state 191 - yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then nox id opar factor dot id opar expr comma factor dot id opar args cpar . LexToken(minus,'-',58,1686) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['length','(',[],')'] and goto state 167 - yacc.py: 506:Result : (('length', [])) - yacc.py: 410: - yacc.py: 411:State : 167 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then nox id opar factor dot id opar expr comma factor dot func_call . LexToken(minus,'-',58,1686) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',('length', [])] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 160 - yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['substr','(',,')'] and goto state 167 - yacc.py: 506:Result : (('substr', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['a2i_aux','(',,')'] and goto state 78 - yacc.py: 506:Result : (('a2i_aux', [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 127 - yacc.py: 506:Result : ( nox base_call] with ['~',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( id] with ['s'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([,')'] and goto state 167 - yacc.py: 506:Result : (('substr', [] and goto state 77 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( string] with ['+'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( id] with ['s'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( id] with ['s'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 150 - yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then id opar factor dot id opar expr comma factor dot id opar epsilon . LexToken(cpar,')',59,1760) - yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 149 - yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then id opar factor dot id opar expr comma factor dot id opar arg_list_empty . LexToken(cpar,')',59,1760) - yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then id opar factor dot id opar expr comma factor dot id opar args . LexToken(cpar,')',59,1760) - yacc.py: 445:Action : Shift and goto state 191 - yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then id opar factor dot id opar expr comma factor dot id opar args cpar . LexToken(minus,'-',59,1761) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['length','(',[],')'] and goto state 167 - yacc.py: 506:Result : (('length', [])) - yacc.py: 410: - yacc.py: 411:State : 167 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur if expr then expr else if expr then expr else if expr then id opar factor dot id opar expr comma factor dot func_call . LexToken(minus,'-',59,1761) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',('length', [])] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 160 - yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['substr','(',,')'] and goto state 167 - yacc.py: 506:Result : (('substr', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['a2i_aux','(',,')'] and goto state 78 - yacc.py: 506:Result : (('a2i_aux', [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( id] with ['s'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['a2i_aux','(',,')'] and goto state 78 - yacc.py: 506:Result : (('a2i_aux', [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['a2i','(',,')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id colon type] with ['s',':','String'] and goto state 44 - yacc.py: 506:Result : (('s', 'String')) - yacc.py: 410: - yacc.py: 411:State : 44 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar param . LexToken(cpar,')',68,1965) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [('s', 'String')] and goto state 42 - yacc.py: 506:Result : ([('s', 'String')]) - yacc.py: 410: - yacc.py: 411:State : 42 - yacc.py: 430:Defaulted state 42: Reduce using 30 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',68,1965) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([('s', 'String')]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',68,1965) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',68,1967) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'Int',68,1969) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',68,1973) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(opar,'(',69,1976) - yacc.py: 445:Action : Shift and goto state 80 - yacc.py: 410: - yacc.py: 411:State : 80 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar . LexToken(let,'let',69,1977) - yacc.py: 445:Action : Shift and goto state 84 - yacc.py: 410: - yacc.py: 411:State : 84 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let . LexToken(id,'int',69,1981) - yacc.py: 445:Action : Shift and goto state 46 - yacc.py: 410: - yacc.py: 411:State : 46 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let id . LexToken(colon,':',69,1985) - yacc.py: 445:Action : Shift and goto state 61 - yacc.py: 410: - yacc.py: 411:State : 61 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let id colon . LexToken(type,'Int',69,1987) - yacc.py: 445:Action : Shift and goto state 96 - yacc.py: 410: - yacc.py: 411:State : 96 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let id colon type . LexToken(larrow,'<-',69,1991) - yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['int',':','Int'] and goto state 130 - yacc.py: 506:Result : (('int', 'Int')) - yacc.py: 410: - yacc.py: 411:State : 130 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let param . LexToken(larrow,'<-',69,1991) - yacc.py: 445:Action : Shift and goto state 173 - yacc.py: 410: - yacc.py: 411:State : 173 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let param larrow . LexToken(num,0.0,69,1994) - yacc.py: 445:Action : Shift and goto state 88 - yacc.py: 410: - yacc.py: 411:State : 88 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let param larrow num . LexToken(in,'in',69,1996) - yacc.py: 471:Action : Reduce rule [atom -> num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( param larrow expr] with [('int', 'Int'),'<-',] and goto state 129 - yacc.py: 506:Result : ( let_assign] with [] and goto state 128 - yacc.py: 506:Result : ([ id colon type] with ['j',':','Int'] and goto state 130 - yacc.py: 506:Result : (('j', 'Int')) - yacc.py: 410: - yacc.py: 411:State : 130 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let let_list in ocur opar let param . LexToken(larrow,'<-',71,2042) - yacc.py: 445:Action : Shift and goto state 173 - yacc.py: 410: - yacc.py: 411:State : 173 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let let_list in ocur opar let param larrow . LexToken(id,'s',71,2045) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let let_list in ocur opar let param larrow id . LexToken(dot,'.',71,2046) - yacc.py: 471:Action : Reduce rule [atom -> id] with ['s'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 150 - yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let let_list in ocur opar let param larrow factor dot id opar epsilon . LexToken(cpar,')',71,2054) - yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 149 - yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let let_list in ocur opar let param larrow factor dot id opar arg_list_empty . LexToken(cpar,')',71,2054) - yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let let_list in ocur opar let param larrow factor dot id opar args . LexToken(cpar,')',71,2054) - yacc.py: 445:Action : Shift and goto state 191 - yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let let_list in ocur opar let param larrow factor dot id opar args cpar . LexToken(in,'in',71,2056) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['length','(',[],')'] and goto state 167 - yacc.py: 506:Result : (('length', [])) - yacc.py: 410: - yacc.py: 411:State : 167 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let let_list in ocur opar let param larrow factor dot func_call . LexToken(in,'in',71,2056) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',('length', [])] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( param larrow expr] with [('j', 'Int'),'<-',] and goto state 129 - yacc.py: 506:Result : ( let_assign] with [] and goto state 128 - yacc.py: 506:Result : ([ id colon type] with ['i',':','Int'] and goto state 130 - yacc.py: 506:Result : (('i', 'Int')) - yacc.py: 410: - yacc.py: 411:State : 130 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let let_list in ocur opar let let_list in opar let param . LexToken(larrow,'<-',72,2083) - yacc.py: 445:Action : Shift and goto state 173 - yacc.py: 410: - yacc.py: 411:State : 173 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let let_list in ocur opar let let_list in opar let param larrow . LexToken(num,0.0,72,2086) - yacc.py: 445:Action : Shift and goto state 88 - yacc.py: 410: - yacc.py: 411:State : 88 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar let let_list in ocur opar let let_list in opar let param larrow num . LexToken(in,'in',72,2088) - yacc.py: 471:Action : Reduce rule [atom -> num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( param larrow expr] with [('i', 'Int'),'<-',] and goto state 129 - yacc.py: 506:Result : ( let_assign] with [] and goto state 128 - yacc.py: 506:Result : ([ id] with ['i'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( id] with ['j'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 156 - yacc.py: 506:Result : ( comp less op] with [,'<',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 133 - yacc.py: 506:Result : ( id] with ['int'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( num] with [10.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 161 - yacc.py: 506:Result : ( term star base_call] with [,'*',] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( id] with ['s'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( id] with ['i'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['substr','(',,')'] and goto state 167 - yacc.py: 506:Result : (('substr', [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['c2i','(',,')'] and goto state 78 - yacc.py: 506:Result : (('c2i', [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( id larrow expr] with ['int','<-',] and goto state 111 - yacc.py: 506:Result : ( id] with ['i'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( id larrow expr] with ['i','<-',] and goto state 111 - yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 204 - yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 196 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 196 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( id] with ['int'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 196 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['a2i_aux','(',,')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id colon type] with ['i',':','Int'] and goto state 44 - yacc.py: 506:Result : (('i', 'Int')) - yacc.py: 410: - yacc.py: 411:State : 44 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar param . LexToken(cpar,')',90,2380) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [('i', 'Int')] and goto state 42 - yacc.py: 506:Result : ([('i', 'Int')]) - yacc.py: 410: - yacc.py: 411:State : 42 - yacc.py: 430:Defaulted state 42: Reduce using 30 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',90,2380) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [[('i', 'Int')]] and goto state 51 - yacc.py: 506:Result : ([('i', 'Int')]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',90,2380) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',90,2382) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'String',90,2384) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',90,2391) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(if,'if',91,2394) - yacc.py: 445:Action : Shift and goto state 86 - yacc.py: 410: - yacc.py: 411:State : 86 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if . LexToken(id,'i',91,2397) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur if id . LexToken(equal,'=',91,2399) - yacc.py: 471:Action : Reduce rule [atom -> id] with ['i'] and goto state 79 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( string] with ['0'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( id] with ['i'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 156 - yacc.py: 506:Result : ( comp less op] with [,'<',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( id] with ['i'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['i2a_aux','(',,')'] and goto state 78 - yacc.py: 506:Result : (('i2a_aux', [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( string] with ['-'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( id] with ['i'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : (g`kf|#tk;bN$Zu;@A#mS|qIf?r5@u432CMEg$&d&PI`MCv|IjKeZ$@%#? zy2((Uu91O}fqrpOvVK8gQ87?9K0Y%qvm`!Vub}c4hfQvNN@-529mw|2K+FIDz0NKp literal 0 HcmV?d00001 diff --git a/src/parser/__pycache__/base_parser.cpython-37.pyc b/src/parser/__pycache__/base_parser.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c4a93cf6f5706c9be708f4de569fbc81a14fb736 GIT binary patch literal 1047 zcmZuwPjAyO6t|tkO-suL47hOMngh+WKN3g?O;jr!P&Em`AqT81HdTt#1ly5lDW^@` z_CfeczH-`E;KZ}jO&qZGetvdd-@o7M>(OX{V6pE%Km7<0`t2?^3-0IyM1KU}h+~N= zoMG&AB1uO48B}2w`nNzv70syEL)ok1EcW{C@7^FDae9e3y&zeillLg;U4w6wU`tK? zMJ)9U)IipAIQo;imhZ$jp$cbnvu?9`3NHd>m?Oxf#|aNEaTf5{$G}<0G5GIWdX_6K z)T|&|5AKXXCLsC*V1re>!OPH~3$#HDa|}pK02pur7@BAiaky{Lg7DB#LwR&X;Y*Jr z2tsG;y~amL>((@_Vcl(NdyT5+DzC0F#7U@)w8@pRw5oY4h3$9dyi_)>8&g*0TG*J2 z^L7qBu(438R<0Yd3c-Pmq-%$Alqpw+rQSl@aFrK@a;>qni=7Y~Y9T+XyYTo6sRwZU znWvTDWuD4fuG0O3qvyw`M~4m%k6%nvcB+e3$UJ52!`t-8)ahiBPU@;DrBG=BY&zy;-wegMhv~VT3 z<<1Dilk@}>Pl_V|FUST6S_F&0gq&OjKtM2?!oWnnaY>|hz+T-0uu+$u>w)i15~%x5 zrw$%DaDC~(WvLzmIMJ@(2vf2iZgcdW5)1=6O(Iv|GOq+$ kslVgLW84jiE5N(_UvwM4?2>-v22&3KhB(GUGQ_aSUlWw^ZvX%Q literal 0 HcmV?d00001 diff --git a/src/parser/__pycache__/logger.cpython-37.pyc b/src/parser/__pycache__/logger.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8cbb798af7cfabaab0adc05a3782dd17219c23a2 GIT binary patch literal 432 zcmXv~Jx{|h5Veyu4WJ4}R)(TxXkGdt6@(CKC@>%v)TIMe8egLzC$8dz(z3JhAIiYM zU-HVtUtr?Wmb32NJ^7yf?0%)POE5lP-yRPsA>Rf04;!0HOw~i+gi}FAn@UF%=*svY zBNNDzg<0YTH@U@2?-nIMRyOXHIej3m{ex<9zdV}xse+WrJe%d&c+1vB$gq*UWSY*G z$JN?25|H>YxF=0@R;`IBfke6;j(rSD`60N&7jxOWT zVU&d0kV@MjWWk(kvw*#cucE+{$utUe>1xm)-sl}1xI+P?+CneR;Sk;blL^ByQkM|JWxRn!e`_0@RoHl$vlsFGM?dEQWi)l>cN)PTg_IJsWf2Q iFDNWR+L$f0bB^|N0T%{ds}2wx>KKk;QHvV59ODl*q<#kg literal 0 HcmV?d00001 diff --git a/src/parser/__pycache__/parser.cpython-37.pyc b/src/parser/__pycache__/parser.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..76e737508ffea4f6ff5e4deb860e8fb481f8bde1 GIT binary patch literal 14135 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 Yp60M} program + yacc.py:3381:Rule 1 program -> class_list + yacc.py:3381:Rule 2 epsilon -> + yacc.py:3381:Rule 3 class_list -> def_class class_list + yacc.py:3381:Rule 4 class_list -> def_class + yacc.py:3381:Rule 5 class_list -> error class_list + yacc.py:3381:Rule 6 def_class -> class type ocur feature_list ccur semi + yacc.py:3381:Rule 7 def_class -> class type inherits type ocur feature_list ccur semi + yacc.py:3381:Rule 8 def_class -> class error ocur feature_list ccur semi + yacc.py:3381:Rule 9 def_class -> class type ocur feature_list ccur error + yacc.py:3381:Rule 10 def_class -> class error inherits type ocur feature_list ccur semi + yacc.py:3381:Rule 11 def_class -> class error inherits error ocur feature_list ccur semi + yacc.py:3381:Rule 12 def_class -> class type inherits error ocur feature_list ccur semi + yacc.py:3381:Rule 13 def_class -> class type inherits type ocur feature_list ccur error + yacc.py:3381:Rule 14 feature_list -> epsilon + yacc.py:3381:Rule 15 feature_list -> def_attr semi feature_list + yacc.py:3381:Rule 16 feature_list -> def_func semi feature_list + yacc.py:3381:Rule 17 feature_list -> error feature_list + yacc.py:3381:Rule 18 def_attr -> id colon type + yacc.py:3381:Rule 19 def_attr -> id colon type larrow expr + yacc.py:3381:Rule 20 def_attr -> error colon type + yacc.py:3381:Rule 21 def_attr -> id colon error + yacc.py:3381:Rule 22 def_attr -> error colon type larrow expr + yacc.py:3381:Rule 23 def_attr -> id colon error larrow expr + yacc.py:3381:Rule 24 def_attr -> id colon type larrow error + yacc.py:3381:Rule 25 def_func -> id opar formals cpar colon type ocur expr ccur + yacc.py:3381:Rule 26 def_func -> error opar formals cpar colon type ocur expr ccur + yacc.py:3381:Rule 27 def_func -> id opar error cpar colon type ocur expr ccur + yacc.py:3381:Rule 28 def_func -> id opar formals cpar colon error ocur expr ccur + yacc.py:3381:Rule 29 def_func -> id opar formals cpar colon type ocur error ccur + yacc.py:3381:Rule 30 formals -> param_list + yacc.py:3381:Rule 31 formals -> param_list_empty + yacc.py:3381:Rule 32 param_list -> param + yacc.py:3381:Rule 33 param_list -> param comma param_list + yacc.py:3381:Rule 34 param_list_empty -> epsilon + yacc.py:3381:Rule 35 param -> id colon type + yacc.py:3381:Rule 36 let_list -> let_assign + yacc.py:3381:Rule 37 let_list -> let_assign comma let_list + yacc.py:3381:Rule 38 let_assign -> param larrow expr + yacc.py:3381:Rule 39 let_assign -> param + yacc.py:3381:Rule 40 cases_list -> casep semi + yacc.py:3381:Rule 41 cases_list -> casep semi cases_list + yacc.py:3381:Rule 42 cases_list -> error cases_list + yacc.py:3381:Rule 43 cases_list -> error semi + yacc.py:3381:Rule 44 casep -> id colon type rarrow expr + yacc.py:3381:Rule 45 expr -> id larrow expr + yacc.py:3381:Rule 46 expr -> comp + yacc.py:3381:Rule 47 comp -> comp less op + yacc.py:3381:Rule 48 comp -> comp lesseq op + yacc.py:3381:Rule 49 comp -> comp equal op + yacc.py:3381:Rule 50 comp -> op + yacc.py:3381:Rule 51 op -> op plus term + yacc.py:3381:Rule 52 op -> op minus term + yacc.py:3381:Rule 53 op -> term + yacc.py:3381:Rule 54 term -> term star base_call + yacc.py:3381:Rule 55 term -> term div base_call + yacc.py:3381:Rule 56 term -> base_call + yacc.py:3381:Rule 57 term -> term star error + yacc.py:3381:Rule 58 term -> term div error + yacc.py:3381:Rule 59 base_call -> factor arroba type dot func_call + yacc.py:3381:Rule 60 base_call -> factor + yacc.py:3381:Rule 61 base_call -> error arroba type dot func_call + yacc.py:3381:Rule 62 base_call -> factor arroba error dot func_call + yacc.py:3381:Rule 63 factor -> atom + yacc.py:3381:Rule 64 factor -> opar expr cpar + yacc.py:3381:Rule 65 factor -> factor dot func_call + yacc.py:3381:Rule 66 factor -> not expr + yacc.py:3381:Rule 67 factor -> func_call + yacc.py:3381:Rule 68 factor -> isvoid base_call + yacc.py:3381:Rule 69 factor -> nox base_call + yacc.py:3381:Rule 70 factor -> let let_list in expr + yacc.py:3381:Rule 71 factor -> case expr of cases_list esac + yacc.py:3381:Rule 72 factor -> if expr then expr else expr fi + yacc.py:3381:Rule 73 factor -> while expr loop expr pool + yacc.py:3381:Rule 74 atom -> num + yacc.py:3381:Rule 75 atom -> id + yacc.py:3381:Rule 76 atom -> new type + yacc.py:3381:Rule 77 atom -> ocur block ccur + yacc.py:3381:Rule 78 atom -> error block ccur + yacc.py:3381:Rule 79 atom -> ocur error ccur + yacc.py:3381:Rule 80 atom -> ocur block error + yacc.py:3381:Rule 81 atom -> true + yacc.py:3381:Rule 82 atom -> false + yacc.py:3381:Rule 83 atom -> string + yacc.py:3381:Rule 84 block -> expr semi + yacc.py:3381:Rule 85 block -> expr semi block + yacc.py:3381:Rule 86 block -> error block + yacc.py:3381:Rule 87 block -> error semi + yacc.py:3381:Rule 88 func_call -> id opar args cpar + yacc.py:3381:Rule 89 func_call -> id opar error cpar + yacc.py:3381:Rule 90 func_call -> error opar args cpar + yacc.py:3381:Rule 91 args -> arg_list + yacc.py:3381:Rule 92 args -> arg_list_empty + yacc.py:3381:Rule 93 arg_list -> expr + yacc.py:3381:Rule 94 arg_list -> expr comma arg_list + yacc.py:3381:Rule 95 arg_list -> error arg_list + yacc.py:3381:Rule 96 arg_list_empty -> epsilon + yacc.py:3399: + yacc.py:3400:Terminals, with rules where they appear + yacc.py:3401: + yacc.py:3405:arroba : 59 61 62 + yacc.py:3405:case : 71 + yacc.py:3405:ccur : 6 7 8 9 10 11 12 13 25 26 27 28 29 77 78 79 + yacc.py:3405:class : 6 7 8 9 10 11 12 13 + yacc.py:3405:colon : 18 19 20 21 22 23 24 25 26 27 28 29 35 44 + yacc.py:3405:comma : 33 37 94 + yacc.py:3405:cpar : 25 26 27 28 29 64 88 89 90 + yacc.py:3405:div : 55 58 + yacc.py:3405:dot : 59 61 62 65 + yacc.py:3405:else : 72 + yacc.py:3405:equal : 49 + yacc.py:3405:error : 5 8 9 10 11 11 12 13 17 20 21 22 23 24 26 27 28 29 42 43 57 58 61 62 78 79 80 86 87 89 90 95 + yacc.py:3405:esac : 71 + yacc.py:3405:false : 82 + yacc.py:3405:fi : 72 + yacc.py:3405:id : 18 19 21 23 24 25 27 28 29 35 44 45 75 88 89 + yacc.py:3405:if : 72 + yacc.py:3405:in : 70 + yacc.py:3405:inherits : 7 10 11 12 13 + yacc.py:3405:isvoid : 68 + yacc.py:3405:larrow : 19 22 23 24 38 45 + yacc.py:3405:less : 47 + yacc.py:3405:lesseq : 48 + yacc.py:3405:let : 70 + yacc.py:3405:loop : 73 + yacc.py:3405:minus : 52 + yacc.py:3405:new : 76 + yacc.py:3405:not : 66 + yacc.py:3405:nox : 69 + yacc.py:3405:num : 74 + yacc.py:3405:ocur : 6 7 8 9 10 11 12 13 25 26 27 28 29 77 79 80 + yacc.py:3405:of : 71 + yacc.py:3405:opar : 25 26 27 28 29 64 88 89 90 + yacc.py:3405:plus : 51 + yacc.py:3405:pool : 73 + yacc.py:3405:rarrow : 44 + yacc.py:3405:semi : 6 7 8 10 11 12 15 16 40 41 43 84 85 87 + yacc.py:3405:star : 54 57 + yacc.py:3405:string : 83 + yacc.py:3405:then : 72 + yacc.py:3405:true : 81 + yacc.py:3405:type : 6 7 7 9 10 12 13 13 18 19 20 22 24 25 26 27 29 35 44 59 61 76 + yacc.py:3405:while : 73 + yacc.py:3407: + yacc.py:3408:Nonterminals, with rules where they appear + yacc.py:3409: + yacc.py:3413:arg_list : 91 94 95 + yacc.py:3413:arg_list_empty : 92 + yacc.py:3413:args : 88 90 + yacc.py:3413:atom : 63 + yacc.py:3413:base_call : 54 55 56 68 69 + yacc.py:3413:block : 77 78 80 85 86 + yacc.py:3413:casep : 40 41 + yacc.py:3413:cases_list : 41 42 71 + yacc.py:3413:class_list : 1 3 5 + yacc.py:3413:comp : 46 47 48 49 + yacc.py:3413:def_attr : 15 + yacc.py:3413:def_class : 3 4 + yacc.py:3413:def_func : 16 + yacc.py:3413:epsilon : 14 34 96 + yacc.py:3413:expr : 19 22 23 25 26 27 28 38 44 45 64 66 70 71 72 72 72 73 73 84 85 93 94 + yacc.py:3413:factor : 59 60 62 65 + yacc.py:3413:feature_list : 6 7 8 9 10 11 12 13 15 16 17 + yacc.py:3413:formals : 25 26 28 29 + yacc.py:3413:func_call : 59 61 62 65 67 + yacc.py:3413:let_assign : 36 37 + yacc.py:3413:let_list : 37 70 + yacc.py:3413:op : 47 48 49 50 51 52 + yacc.py:3413:param : 32 33 38 39 + yacc.py:3413:param_list : 30 33 + yacc.py:3413:param_list_empty : 31 + yacc.py:3413:program : 0 + yacc.py:3413:term : 51 52 53 54 55 57 58 + yacc.py:3414: + yacc.py:3436:Generating LALR tables + yacc.py:2543:Parsing method: LALR + yacc.py:2561: + yacc.py:2562:state 0 + yacc.py:2563: + yacc.py:2565: (0) S' -> . program + yacc.py:2565: (1) program -> . class_list + yacc.py:2565: (3) class_list -> . def_class class_list + yacc.py:2565: (4) class_list -> . def_class + yacc.py:2565: (5) class_list -> . error class_list + yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi + yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi + yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error + yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi + yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: error shift and go to state 4 + yacc.py:2687: class shift and go to state 5 + yacc.py:2689: + yacc.py:2714: program shift and go to state 1 + yacc.py:2714: class_list shift and go to state 2 + yacc.py:2714: def_class shift and go to state 3 + yacc.py:2561: + yacc.py:2562:state 1 + yacc.py:2563: + yacc.py:2565: (0) S' -> program . + yacc.py:2566: + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 2 + yacc.py:2563: + yacc.py:2565: (1) program -> class_list . + yacc.py:2566: + yacc.py:2687: $end reduce using rule 1 (program -> class_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 3 + yacc.py:2563: + yacc.py:2565: (3) class_list -> def_class . class_list + yacc.py:2565: (4) class_list -> def_class . + yacc.py:2565: (3) class_list -> . def_class class_list + yacc.py:2565: (4) class_list -> . def_class + yacc.py:2565: (5) class_list -> . error class_list + yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi + yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi + yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error + yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi + yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: $end reduce using rule 4 (class_list -> def_class .) + yacc.py:2687: error shift and go to state 4 + yacc.py:2687: class shift and go to state 5 + yacc.py:2689: + yacc.py:2714: def_class shift and go to state 3 + yacc.py:2714: class_list shift and go to state 6 + yacc.py:2561: + yacc.py:2562:state 4 + yacc.py:2563: + yacc.py:2565: (5) class_list -> error . class_list + yacc.py:2565: (3) class_list -> . def_class class_list + yacc.py:2565: (4) class_list -> . def_class + yacc.py:2565: (5) class_list -> . error class_list + yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi + yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi + yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error + yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi + yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: error shift and go to state 4 + yacc.py:2687: class shift and go to state 5 + yacc.py:2689: + yacc.py:2714: class_list shift and go to state 7 + yacc.py:2714: def_class shift and go to state 3 + yacc.py:2561: + yacc.py:2562:state 5 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class . type ocur feature_list ccur semi + yacc.py:2565: (7) def_class -> class . type inherits type ocur feature_list ccur semi + yacc.py:2565: (8) def_class -> class . error ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> class . type ocur feature_list ccur error + yacc.py:2565: (10) def_class -> class . error inherits type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> class . error inherits error ocur feature_list ccur semi + yacc.py:2565: (12) def_class -> class . type inherits error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> class . type inherits type ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: type shift and go to state 8 + yacc.py:2687: error shift and go to state 9 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 6 + yacc.py:2563: + yacc.py:2565: (3) class_list -> def_class class_list . + yacc.py:2566: + yacc.py:2687: $end reduce using rule 3 (class_list -> def_class class_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 7 + yacc.py:2563: + yacc.py:2565: (5) class_list -> error class_list . + yacc.py:2566: + yacc.py:2687: $end reduce using rule 5 (class_list -> error class_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 8 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class type . ocur feature_list ccur semi + yacc.py:2565: (7) def_class -> class type . inherits type ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> class type . ocur feature_list ccur error + yacc.py:2565: (12) def_class -> class type . inherits error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> class type . inherits type ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 10 + yacc.py:2687: inherits shift and go to state 11 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 9 + yacc.py:2563: + yacc.py:2565: (8) def_class -> class error . ocur feature_list ccur semi + yacc.py:2565: (10) def_class -> class error . inherits type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> class error . inherits error ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 12 + yacc.py:2687: inherits shift and go to state 13 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 10 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class type ocur . feature_list ccur semi + yacc.py:2565: (9) def_class -> class type ocur . feature_list ccur error + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 14 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 11 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits . type ocur feature_list ccur semi + yacc.py:2565: (12) def_class -> class type inherits . error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> class type inherits . type ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: type shift and go to state 20 + yacc.py:2687: error shift and go to state 21 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 12 + yacc.py:2563: + yacc.py:2565: (8) def_class -> class error ocur . feature_list ccur semi + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 22 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 13 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits . type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> class error inherits . error ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: type shift and go to state 24 + yacc.py:2687: error shift and go to state 23 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 14 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class type ocur feature_list . ccur semi + yacc.py:2565: (9) def_class -> class type ocur feature_list . ccur error + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 25 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 15 + yacc.py:2563: + yacc.py:2565: (17) feature_list -> error . feature_list + yacc.py:2565: (20) def_attr -> error . colon type + yacc.py:2565: (22) def_attr -> error . colon type larrow expr + yacc.py:2565: (26) def_func -> error . opar formals cpar colon type ocur expr ccur + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: colon shift and go to state 27 + yacc.py:2687: opar shift and go to state 28 + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 26 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 16 + yacc.py:2563: + yacc.py:2565: (14) feature_list -> epsilon . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 14 (feature_list -> epsilon .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 17 + yacc.py:2563: + yacc.py:2565: (15) feature_list -> def_attr . semi feature_list + yacc.py:2566: + yacc.py:2687: semi shift and go to state 29 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 18 + yacc.py:2563: + yacc.py:2565: (16) feature_list -> def_func . semi feature_list + yacc.py:2566: + yacc.py:2687: semi shift and go to state 30 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 19 + yacc.py:2563: + yacc.py:2565: (18) def_attr -> id . colon type + yacc.py:2565: (19) def_attr -> id . colon type larrow expr + yacc.py:2565: (21) def_attr -> id . colon error + yacc.py:2565: (23) def_attr -> id . colon error larrow expr + yacc.py:2565: (24) def_attr -> id . colon type larrow error + yacc.py:2565: (25) def_func -> id . opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> id . opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> id . opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> id . opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: colon shift and go to state 31 + yacc.py:2687: opar shift and go to state 32 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 20 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits type . ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> class type inherits type . ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 33 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 21 + yacc.py:2563: + yacc.py:2565: (12) def_class -> class type inherits error . ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 34 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 22 + yacc.py:2563: + yacc.py:2565: (8) def_class -> class error ocur feature_list . ccur semi + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 35 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 23 + yacc.py:2563: + yacc.py:2565: (11) def_class -> class error inherits error . ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 36 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 24 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits type . ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 37 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 25 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class type ocur feature_list ccur . semi + yacc.py:2565: (9) def_class -> class type ocur feature_list ccur . error + yacc.py:2566: + yacc.py:2687: semi shift and go to state 38 + yacc.py:2687: error shift and go to state 39 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 26 + yacc.py:2563: + yacc.py:2565: (17) feature_list -> error feature_list . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 17 (feature_list -> error feature_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 27 + yacc.py:2563: + yacc.py:2565: (20) def_attr -> error colon . type + yacc.py:2565: (22) def_attr -> error colon . type larrow expr + yacc.py:2566: + yacc.py:2687: type shift and go to state 40 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 28 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar . formals cpar colon type ocur expr ccur + yacc.py:2565: (30) formals -> . param_list + yacc.py:2565: (31) formals -> . param_list_empty + yacc.py:2565: (32) param_list -> . param + yacc.py:2565: (33) param_list -> . param comma param_list + yacc.py:2565: (34) param_list_empty -> . epsilon + yacc.py:2565: (35) param -> . id colon type + yacc.py:2565: (2) epsilon -> . + yacc.py:2566: + yacc.py:2687: id shift and go to state 46 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2689: + yacc.py:2714: formals shift and go to state 41 + yacc.py:2714: param_list shift and go to state 42 + yacc.py:2714: param_list_empty shift and go to state 43 + yacc.py:2714: param shift and go to state 44 + yacc.py:2714: epsilon shift and go to state 45 + yacc.py:2561: + yacc.py:2562:state 29 + yacc.py:2563: + yacc.py:2565: (15) feature_list -> def_attr semi . feature_list + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: feature_list shift and go to state 47 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 30 + yacc.py:2563: + yacc.py:2565: (16) feature_list -> def_func semi . feature_list + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2714: feature_list shift and go to state 48 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2561: + yacc.py:2562:state 31 + yacc.py:2563: + yacc.py:2565: (18) def_attr -> id colon . type + yacc.py:2565: (19) def_attr -> id colon . type larrow expr + yacc.py:2565: (21) def_attr -> id colon . error + yacc.py:2565: (23) def_attr -> id colon . error larrow expr + yacc.py:2565: (24) def_attr -> id colon . type larrow error + yacc.py:2566: + yacc.py:2687: type shift and go to state 49 + yacc.py:2687: error shift and go to state 50 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 32 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar . formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> id opar . error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> id opar . formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> id opar . formals cpar colon type ocur error ccur + yacc.py:2565: (30) formals -> . param_list + yacc.py:2565: (31) formals -> . param_list_empty + yacc.py:2565: (32) param_list -> . param + yacc.py:2565: (33) param_list -> . param comma param_list + yacc.py:2565: (34) param_list_empty -> . epsilon + yacc.py:2565: (35) param -> . id colon type + yacc.py:2565: (2) epsilon -> . + yacc.py:2566: + yacc.py:2687: error shift and go to state 52 + yacc.py:2687: id shift and go to state 46 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2689: + yacc.py:2714: formals shift and go to state 51 + yacc.py:2714: param_list shift and go to state 42 + yacc.py:2714: param_list_empty shift and go to state 43 + yacc.py:2714: param shift and go to state 44 + yacc.py:2714: epsilon shift and go to state 45 + yacc.py:2561: + yacc.py:2562:state 33 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits type ocur . feature_list ccur semi + yacc.py:2565: (13) def_class -> class type inherits type ocur . feature_list ccur error + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 53 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 34 + yacc.py:2563: + yacc.py:2565: (12) def_class -> class type inherits error ocur . feature_list ccur semi + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 54 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 35 + yacc.py:2563: + yacc.py:2565: (8) def_class -> class error ocur feature_list ccur . semi + yacc.py:2566: + yacc.py:2687: semi shift and go to state 55 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 36 + yacc.py:2563: + yacc.py:2565: (11) def_class -> class error inherits error ocur . feature_list ccur semi + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 56 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 37 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits type ocur . feature_list ccur semi + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 57 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 38 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class type ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 39 + yacc.py:2563: + yacc.py:2565: (9) def_class -> class type ocur feature_list ccur error . + yacc.py:2566: + yacc.py:2687: error reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) + yacc.py:2687: class reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) + yacc.py:2687: $end reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 40 + yacc.py:2563: + yacc.py:2565: (20) def_attr -> error colon type . + yacc.py:2565: (22) def_attr -> error colon type . larrow expr + yacc.py:2566: + yacc.py:2687: semi reduce using rule 20 (def_attr -> error colon type .) + yacc.py:2687: larrow shift and go to state 58 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 41 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals . cpar colon type ocur expr ccur + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 59 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 42 + yacc.py:2563: + yacc.py:2565: (30) formals -> param_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 30 (formals -> param_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 43 + yacc.py:2563: + yacc.py:2565: (31) formals -> param_list_empty . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 31 (formals -> param_list_empty .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 44 + yacc.py:2563: + yacc.py:2565: (32) param_list -> param . + yacc.py:2565: (33) param_list -> param . comma param_list + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 32 (param_list -> param .) + yacc.py:2687: comma shift and go to state 60 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 45 + yacc.py:2563: + yacc.py:2565: (34) param_list_empty -> epsilon . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 34 (param_list_empty -> epsilon .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 46 + yacc.py:2563: + yacc.py:2565: (35) param -> id . colon type + yacc.py:2566: + yacc.py:2687: colon shift and go to state 61 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 47 + yacc.py:2563: + yacc.py:2565: (15) feature_list -> def_attr semi feature_list . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 15 (feature_list -> def_attr semi feature_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 48 + yacc.py:2563: + yacc.py:2565: (16) feature_list -> def_func semi feature_list . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 16 (feature_list -> def_func semi feature_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 49 + yacc.py:2563: + yacc.py:2565: (18) def_attr -> id colon type . + yacc.py:2565: (19) def_attr -> id colon type . larrow expr + yacc.py:2565: (24) def_attr -> id colon type . larrow error + yacc.py:2566: + yacc.py:2687: semi reduce using rule 18 (def_attr -> id colon type .) + yacc.py:2687: larrow shift and go to state 62 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 50 + yacc.py:2563: + yacc.py:2565: (21) def_attr -> id colon error . + yacc.py:2565: (23) def_attr -> id colon error . larrow expr + yacc.py:2566: + yacc.py:2687: semi reduce using rule 21 (def_attr -> id colon error .) + yacc.py:2687: larrow shift and go to state 63 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 51 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals . cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> id opar formals . cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> id opar formals . cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 64 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 52 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error . cpar colon type ocur expr ccur + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 65 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 53 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list . ccur semi + yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list . ccur error + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 66 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 54 + yacc.py:2563: + yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list . ccur semi + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 67 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 55 + yacc.py:2563: + yacc.py:2565: (8) def_class -> class error ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 56 + yacc.py:2563: + yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list . ccur semi + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 68 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 57 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list . ccur semi + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 69 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 58 + yacc.py:2563: + yacc.py:2565: (22) def_attr -> error colon type larrow . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 71 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 59 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar . colon type ocur expr ccur + yacc.py:2566: + yacc.py:2687: colon shift and go to state 94 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 60 + yacc.py:2563: + yacc.py:2565: (33) param_list -> param comma . param_list + yacc.py:2565: (32) param_list -> . param + yacc.py:2565: (33) param_list -> . param comma param_list + yacc.py:2565: (35) param -> . id colon type + yacc.py:2566: + yacc.py:2687: id shift and go to state 46 + yacc.py:2689: + yacc.py:2714: param shift and go to state 44 + yacc.py:2714: param_list shift and go to state 95 + yacc.py:2561: + yacc.py:2562:state 61 + yacc.py:2563: + yacc.py:2565: (35) param -> id colon . type + yacc.py:2566: + yacc.py:2687: type shift and go to state 96 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 62 + yacc.py:2563: + yacc.py:2565: (19) def_attr -> id colon type larrow . expr + yacc.py:2565: (24) def_attr -> id colon type larrow . error + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 98 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 97 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 63 + yacc.py:2563: + yacc.py:2565: (23) def_attr -> id colon error larrow . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 99 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 64 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar . colon type ocur expr ccur + yacc.py:2565: (28) def_func -> id opar formals cpar . colon error ocur expr ccur + yacc.py:2565: (29) def_func -> id opar formals cpar . colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: colon shift and go to state 100 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 65 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar . colon type ocur expr ccur + yacc.py:2566: + yacc.py:2687: colon shift and go to state 101 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 66 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list ccur . semi + yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list ccur . error + yacc.py:2566: + yacc.py:2687: semi shift and go to state 102 + yacc.py:2687: error shift and go to state 103 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 67 + yacc.py:2563: + yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list ccur . semi + yacc.py:2566: + yacc.py:2687: semi shift and go to state 104 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 68 + yacc.py:2563: + yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list ccur . semi + yacc.py:2566: + yacc.py:2687: semi shift and go to state 105 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 69 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list ccur . semi + yacc.py:2566: + yacc.py:2687: semi shift and go to state 106 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 70 + yacc.py:2563: + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 71 + yacc.py:2563: + yacc.py:2565: (22) def_attr -> error colon type larrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 22 (def_attr -> error colon type larrow expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 72 + yacc.py:2563: + yacc.py:2565: (45) expr -> id . larrow expr + yacc.py:2565: (75) atom -> id . + yacc.py:2565: (88) func_call -> id . opar args cpar + yacc.py:2565: (89) func_call -> id . opar error cpar + yacc.py:2566: + yacc.py:2687: larrow shift and go to state 112 + yacc.py:2687: arroba reduce using rule 75 (atom -> id .) + yacc.py:2687: dot reduce using rule 75 (atom -> id .) + yacc.py:2687: star reduce using rule 75 (atom -> id .) + yacc.py:2687: div reduce using rule 75 (atom -> id .) + yacc.py:2687: plus reduce using rule 75 (atom -> id .) + yacc.py:2687: minus reduce using rule 75 (atom -> id .) + yacc.py:2687: less reduce using rule 75 (atom -> id .) + yacc.py:2687: lesseq reduce using rule 75 (atom -> id .) + yacc.py:2687: equal reduce using rule 75 (atom -> id .) + yacc.py:2687: semi reduce using rule 75 (atom -> id .) + yacc.py:2687: cpar reduce using rule 75 (atom -> id .) + yacc.py:2687: of reduce using rule 75 (atom -> id .) + yacc.py:2687: then reduce using rule 75 (atom -> id .) + yacc.py:2687: loop reduce using rule 75 (atom -> id .) + yacc.py:2687: comma reduce using rule 75 (atom -> id .) + yacc.py:2687: in reduce using rule 75 (atom -> id .) + yacc.py:2687: else reduce using rule 75 (atom -> id .) + yacc.py:2687: pool reduce using rule 75 (atom -> id .) + yacc.py:2687: ccur reduce using rule 75 (atom -> id .) + yacc.py:2687: fi reduce using rule 75 (atom -> id .) + yacc.py:2687: opar shift and go to state 113 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 73 + yacc.py:2563: + yacc.py:2565: (46) expr -> comp . + yacc.py:2565: (47) comp -> comp . less op + yacc.py:2565: (48) comp -> comp . lesseq op + yacc.py:2565: (49) comp -> comp . equal op + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for less resolved as shift + yacc.py:2666: ! shift/reduce conflict for lesseq resolved as shift + yacc.py:2666: ! shift/reduce conflict for equal resolved as shift + yacc.py:2687: semi reduce using rule 46 (expr -> comp .) + yacc.py:2687: cpar reduce using rule 46 (expr -> comp .) + yacc.py:2687: arroba reduce using rule 46 (expr -> comp .) + yacc.py:2687: dot reduce using rule 46 (expr -> comp .) + yacc.py:2687: star reduce using rule 46 (expr -> comp .) + yacc.py:2687: div reduce using rule 46 (expr -> comp .) + yacc.py:2687: plus reduce using rule 46 (expr -> comp .) + yacc.py:2687: minus reduce using rule 46 (expr -> comp .) + yacc.py:2687: of reduce using rule 46 (expr -> comp .) + yacc.py:2687: then reduce using rule 46 (expr -> comp .) + yacc.py:2687: loop reduce using rule 46 (expr -> comp .) + yacc.py:2687: comma reduce using rule 46 (expr -> comp .) + yacc.py:2687: in reduce using rule 46 (expr -> comp .) + yacc.py:2687: else reduce using rule 46 (expr -> comp .) + yacc.py:2687: pool reduce using rule 46 (expr -> comp .) + yacc.py:2687: ccur reduce using rule 46 (expr -> comp .) + yacc.py:2687: fi reduce using rule 46 (expr -> comp .) + yacc.py:2687: less shift and go to state 114 + yacc.py:2687: lesseq shift and go to state 115 + yacc.py:2687: equal shift and go to state 116 + yacc.py:2689: + yacc.py:2696: ! less [ reduce using rule 46 (expr -> comp .) ] + yacc.py:2696: ! lesseq [ reduce using rule 46 (expr -> comp .) ] + yacc.py:2696: ! equal [ reduce using rule 46 (expr -> comp .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 74 + yacc.py:2563: + yacc.py:2565: (50) comp -> op . + yacc.py:2565: (51) op -> op . plus term + yacc.py:2565: (52) op -> op . minus term + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for plus resolved as shift + yacc.py:2666: ! shift/reduce conflict for minus resolved as shift + yacc.py:2687: less reduce using rule 50 (comp -> op .) + yacc.py:2687: lesseq reduce using rule 50 (comp -> op .) + yacc.py:2687: equal reduce using rule 50 (comp -> op .) + yacc.py:2687: semi reduce using rule 50 (comp -> op .) + yacc.py:2687: cpar reduce using rule 50 (comp -> op .) + yacc.py:2687: arroba reduce using rule 50 (comp -> op .) + yacc.py:2687: dot reduce using rule 50 (comp -> op .) + yacc.py:2687: star reduce using rule 50 (comp -> op .) + yacc.py:2687: div reduce using rule 50 (comp -> op .) + yacc.py:2687: of reduce using rule 50 (comp -> op .) + yacc.py:2687: then reduce using rule 50 (comp -> op .) + yacc.py:2687: loop reduce using rule 50 (comp -> op .) + yacc.py:2687: comma reduce using rule 50 (comp -> op .) + yacc.py:2687: in reduce using rule 50 (comp -> op .) + yacc.py:2687: else reduce using rule 50 (comp -> op .) + yacc.py:2687: pool reduce using rule 50 (comp -> op .) + yacc.py:2687: ccur reduce using rule 50 (comp -> op .) + yacc.py:2687: fi reduce using rule 50 (comp -> op .) + yacc.py:2687: plus shift and go to state 117 + yacc.py:2687: minus shift and go to state 118 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 50 (comp -> op .) ] + yacc.py:2696: ! minus [ reduce using rule 50 (comp -> op .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 75 + yacc.py:2563: + yacc.py:2565: (53) op -> term . + yacc.py:2565: (54) term -> term . star base_call + yacc.py:2565: (55) term -> term . div base_call + yacc.py:2565: (57) term -> term . star error + yacc.py:2565: (58) term -> term . div error + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for star resolved as shift + yacc.py:2666: ! shift/reduce conflict for div resolved as shift + yacc.py:2687: plus reduce using rule 53 (op -> term .) + yacc.py:2687: minus reduce using rule 53 (op -> term .) + yacc.py:2687: less reduce using rule 53 (op -> term .) + yacc.py:2687: lesseq reduce using rule 53 (op -> term .) + yacc.py:2687: equal reduce using rule 53 (op -> term .) + yacc.py:2687: semi reduce using rule 53 (op -> term .) + yacc.py:2687: cpar reduce using rule 53 (op -> term .) + yacc.py:2687: arroba reduce using rule 53 (op -> term .) + yacc.py:2687: dot reduce using rule 53 (op -> term .) + yacc.py:2687: of reduce using rule 53 (op -> term .) + yacc.py:2687: then reduce using rule 53 (op -> term .) + yacc.py:2687: loop reduce using rule 53 (op -> term .) + yacc.py:2687: comma reduce using rule 53 (op -> term .) + yacc.py:2687: in reduce using rule 53 (op -> term .) + yacc.py:2687: else reduce using rule 53 (op -> term .) + yacc.py:2687: pool reduce using rule 53 (op -> term .) + yacc.py:2687: ccur reduce using rule 53 (op -> term .) + yacc.py:2687: fi reduce using rule 53 (op -> term .) + yacc.py:2687: star shift and go to state 119 + yacc.py:2687: div shift and go to state 120 + yacc.py:2689: + yacc.py:2696: ! star [ reduce using rule 53 (op -> term .) ] + yacc.py:2696: ! div [ reduce using rule 53 (op -> term .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 76 + yacc.py:2563: + yacc.py:2565: (56) term -> base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 56 (term -> base_call .) + yacc.py:2687: div reduce using rule 56 (term -> base_call .) + yacc.py:2687: plus reduce using rule 56 (term -> base_call .) + yacc.py:2687: minus reduce using rule 56 (term -> base_call .) + yacc.py:2687: less reduce using rule 56 (term -> base_call .) + yacc.py:2687: lesseq reduce using rule 56 (term -> base_call .) + yacc.py:2687: equal reduce using rule 56 (term -> base_call .) + yacc.py:2687: semi reduce using rule 56 (term -> base_call .) + yacc.py:2687: cpar reduce using rule 56 (term -> base_call .) + yacc.py:2687: arroba reduce using rule 56 (term -> base_call .) + yacc.py:2687: dot reduce using rule 56 (term -> base_call .) + yacc.py:2687: of reduce using rule 56 (term -> base_call .) + yacc.py:2687: then reduce using rule 56 (term -> base_call .) + yacc.py:2687: loop reduce using rule 56 (term -> base_call .) + yacc.py:2687: comma reduce using rule 56 (term -> base_call .) + yacc.py:2687: in reduce using rule 56 (term -> base_call .) + yacc.py:2687: else reduce using rule 56 (term -> base_call .) + yacc.py:2687: pool reduce using rule 56 (term -> base_call .) + yacc.py:2687: ccur reduce using rule 56 (term -> base_call .) + yacc.py:2687: fi reduce using rule 56 (term -> base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 77 + yacc.py:2563: + yacc.py:2565: (59) base_call -> factor . arroba type dot func_call + yacc.py:2565: (60) base_call -> factor . + yacc.py:2565: (62) base_call -> factor . arroba error dot func_call + yacc.py:2565: (65) factor -> factor . dot func_call + yacc.py:2566: + yacc.py:2609: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2666: ! shift/reduce conflict for dot resolved as shift + yacc.py:2687: arroba shift and go to state 121 + yacc.py:2687: star reduce using rule 60 (base_call -> factor .) + yacc.py:2687: div reduce using rule 60 (base_call -> factor .) + yacc.py:2687: plus reduce using rule 60 (base_call -> factor .) + yacc.py:2687: minus reduce using rule 60 (base_call -> factor .) + yacc.py:2687: less reduce using rule 60 (base_call -> factor .) + yacc.py:2687: lesseq reduce using rule 60 (base_call -> factor .) + yacc.py:2687: equal reduce using rule 60 (base_call -> factor .) + yacc.py:2687: semi reduce using rule 60 (base_call -> factor .) + yacc.py:2687: cpar reduce using rule 60 (base_call -> factor .) + yacc.py:2687: of reduce using rule 60 (base_call -> factor .) + yacc.py:2687: then reduce using rule 60 (base_call -> factor .) + yacc.py:2687: loop reduce using rule 60 (base_call -> factor .) + yacc.py:2687: comma reduce using rule 60 (base_call -> factor .) + yacc.py:2687: in reduce using rule 60 (base_call -> factor .) + yacc.py:2687: else reduce using rule 60 (base_call -> factor .) + yacc.py:2687: pool reduce using rule 60 (base_call -> factor .) + yacc.py:2687: ccur reduce using rule 60 (base_call -> factor .) + yacc.py:2687: fi reduce using rule 60 (base_call -> factor .) + yacc.py:2687: dot shift and go to state 122 + yacc.py:2689: + yacc.py:2696: ! arroba [ reduce using rule 60 (base_call -> factor .) ] + yacc.py:2696: ! dot [ reduce using rule 60 (base_call -> factor .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 78 + yacc.py:2563: + yacc.py:2565: (67) factor -> func_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 67 (factor -> func_call .) + yacc.py:2687: dot reduce using rule 67 (factor -> func_call .) + yacc.py:2687: star reduce using rule 67 (factor -> func_call .) + yacc.py:2687: div reduce using rule 67 (factor -> func_call .) + yacc.py:2687: plus reduce using rule 67 (factor -> func_call .) + yacc.py:2687: minus reduce using rule 67 (factor -> func_call .) + yacc.py:2687: less reduce using rule 67 (factor -> func_call .) + yacc.py:2687: lesseq reduce using rule 67 (factor -> func_call .) + yacc.py:2687: equal reduce using rule 67 (factor -> func_call .) + yacc.py:2687: semi reduce using rule 67 (factor -> func_call .) + yacc.py:2687: cpar reduce using rule 67 (factor -> func_call .) + yacc.py:2687: of reduce using rule 67 (factor -> func_call .) + yacc.py:2687: then reduce using rule 67 (factor -> func_call .) + yacc.py:2687: loop reduce using rule 67 (factor -> func_call .) + yacc.py:2687: comma reduce using rule 67 (factor -> func_call .) + yacc.py:2687: in reduce using rule 67 (factor -> func_call .) + yacc.py:2687: else reduce using rule 67 (factor -> func_call .) + yacc.py:2687: pool reduce using rule 67 (factor -> func_call .) + yacc.py:2687: ccur reduce using rule 67 (factor -> func_call .) + yacc.py:2687: fi reduce using rule 67 (factor -> func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 79 + yacc.py:2563: + yacc.py:2565: (63) factor -> atom . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 63 (factor -> atom .) + yacc.py:2687: dot reduce using rule 63 (factor -> atom .) + yacc.py:2687: star reduce using rule 63 (factor -> atom .) + yacc.py:2687: div reduce using rule 63 (factor -> atom .) + yacc.py:2687: plus reduce using rule 63 (factor -> atom .) + yacc.py:2687: minus reduce using rule 63 (factor -> atom .) + yacc.py:2687: less reduce using rule 63 (factor -> atom .) + yacc.py:2687: lesseq reduce using rule 63 (factor -> atom .) + yacc.py:2687: equal reduce using rule 63 (factor -> atom .) + yacc.py:2687: semi reduce using rule 63 (factor -> atom .) + yacc.py:2687: cpar reduce using rule 63 (factor -> atom .) + yacc.py:2687: of reduce using rule 63 (factor -> atom .) + yacc.py:2687: then reduce using rule 63 (factor -> atom .) + yacc.py:2687: loop reduce using rule 63 (factor -> atom .) + yacc.py:2687: comma reduce using rule 63 (factor -> atom .) + yacc.py:2687: in reduce using rule 63 (factor -> atom .) + yacc.py:2687: else reduce using rule 63 (factor -> atom .) + yacc.py:2687: pool reduce using rule 63 (factor -> atom .) + yacc.py:2687: ccur reduce using rule 63 (factor -> atom .) + yacc.py:2687: fi reduce using rule 63 (factor -> atom .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 80 + yacc.py:2563: + yacc.py:2565: (64) factor -> opar . expr cpar + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 123 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 81 + yacc.py:2563: + yacc.py:2565: (66) factor -> not . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 124 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 82 + yacc.py:2563: + yacc.py:2565: (68) factor -> isvoid . base_call + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 125 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 83 + yacc.py:2563: + yacc.py:2565: (69) factor -> nox . base_call + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 127 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 84 + yacc.py:2563: + yacc.py:2565: (70) factor -> let . let_list in expr + yacc.py:2565: (36) let_list -> . let_assign + yacc.py:2565: (37) let_list -> . let_assign comma let_list + yacc.py:2565: (38) let_assign -> . param larrow expr + yacc.py:2565: (39) let_assign -> . param + yacc.py:2565: (35) param -> . id colon type + yacc.py:2566: + yacc.py:2687: id shift and go to state 46 + yacc.py:2689: + yacc.py:2714: let_list shift and go to state 128 + yacc.py:2714: let_assign shift and go to state 129 + yacc.py:2714: param shift and go to state 130 + yacc.py:2561: + yacc.py:2562:state 85 + yacc.py:2563: + yacc.py:2565: (71) factor -> case . expr of cases_list esac + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 131 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 86 + yacc.py:2563: + yacc.py:2565: (72) factor -> if . expr then expr else expr fi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 132 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 87 + yacc.py:2563: + yacc.py:2565: (73) factor -> while . expr loop expr pool + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 133 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 88 + yacc.py:2563: + yacc.py:2565: (74) atom -> num . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 74 (atom -> num .) + yacc.py:2687: dot reduce using rule 74 (atom -> num .) + yacc.py:2687: star reduce using rule 74 (atom -> num .) + yacc.py:2687: div reduce using rule 74 (atom -> num .) + yacc.py:2687: plus reduce using rule 74 (atom -> num .) + yacc.py:2687: minus reduce using rule 74 (atom -> num .) + yacc.py:2687: less reduce using rule 74 (atom -> num .) + yacc.py:2687: lesseq reduce using rule 74 (atom -> num .) + yacc.py:2687: equal reduce using rule 74 (atom -> num .) + yacc.py:2687: semi reduce using rule 74 (atom -> num .) + yacc.py:2687: cpar reduce using rule 74 (atom -> num .) + yacc.py:2687: of reduce using rule 74 (atom -> num .) + yacc.py:2687: then reduce using rule 74 (atom -> num .) + yacc.py:2687: loop reduce using rule 74 (atom -> num .) + yacc.py:2687: comma reduce using rule 74 (atom -> num .) + yacc.py:2687: in reduce using rule 74 (atom -> num .) + yacc.py:2687: else reduce using rule 74 (atom -> num .) + yacc.py:2687: pool reduce using rule 74 (atom -> num .) + yacc.py:2687: ccur reduce using rule 74 (atom -> num .) + yacc.py:2687: fi reduce using rule 74 (atom -> num .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 89 + yacc.py:2563: + yacc.py:2565: (76) atom -> new . type + yacc.py:2566: + yacc.py:2687: type shift and go to state 134 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 90 + yacc.py:2563: + yacc.py:2565: (77) atom -> ocur . block ccur + yacc.py:2565: (79) atom -> ocur . error ccur + yacc.py:2565: (80) atom -> ocur . block error + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 136 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: block shift and go to state 135 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 91 + yacc.py:2563: + yacc.py:2565: (81) atom -> true . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 81 (atom -> true .) + yacc.py:2687: dot reduce using rule 81 (atom -> true .) + yacc.py:2687: star reduce using rule 81 (atom -> true .) + yacc.py:2687: div reduce using rule 81 (atom -> true .) + yacc.py:2687: plus reduce using rule 81 (atom -> true .) + yacc.py:2687: minus reduce using rule 81 (atom -> true .) + yacc.py:2687: less reduce using rule 81 (atom -> true .) + yacc.py:2687: lesseq reduce using rule 81 (atom -> true .) + yacc.py:2687: equal reduce using rule 81 (atom -> true .) + yacc.py:2687: semi reduce using rule 81 (atom -> true .) + yacc.py:2687: cpar reduce using rule 81 (atom -> true .) + yacc.py:2687: of reduce using rule 81 (atom -> true .) + yacc.py:2687: then reduce using rule 81 (atom -> true .) + yacc.py:2687: loop reduce using rule 81 (atom -> true .) + yacc.py:2687: comma reduce using rule 81 (atom -> true .) + yacc.py:2687: in reduce using rule 81 (atom -> true .) + yacc.py:2687: else reduce using rule 81 (atom -> true .) + yacc.py:2687: pool reduce using rule 81 (atom -> true .) + yacc.py:2687: ccur reduce using rule 81 (atom -> true .) + yacc.py:2687: fi reduce using rule 81 (atom -> true .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 92 + yacc.py:2563: + yacc.py:2565: (82) atom -> false . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 82 (atom -> false .) + yacc.py:2687: dot reduce using rule 82 (atom -> false .) + yacc.py:2687: star reduce using rule 82 (atom -> false .) + yacc.py:2687: div reduce using rule 82 (atom -> false .) + yacc.py:2687: plus reduce using rule 82 (atom -> false .) + yacc.py:2687: minus reduce using rule 82 (atom -> false .) + yacc.py:2687: less reduce using rule 82 (atom -> false .) + yacc.py:2687: lesseq reduce using rule 82 (atom -> false .) + yacc.py:2687: equal reduce using rule 82 (atom -> false .) + yacc.py:2687: semi reduce using rule 82 (atom -> false .) + yacc.py:2687: cpar reduce using rule 82 (atom -> false .) + yacc.py:2687: of reduce using rule 82 (atom -> false .) + yacc.py:2687: then reduce using rule 82 (atom -> false .) + yacc.py:2687: loop reduce using rule 82 (atom -> false .) + yacc.py:2687: comma reduce using rule 82 (atom -> false .) + yacc.py:2687: in reduce using rule 82 (atom -> false .) + yacc.py:2687: else reduce using rule 82 (atom -> false .) + yacc.py:2687: pool reduce using rule 82 (atom -> false .) + yacc.py:2687: ccur reduce using rule 82 (atom -> false .) + yacc.py:2687: fi reduce using rule 82 (atom -> false .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 93 + yacc.py:2563: + yacc.py:2565: (83) atom -> string . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 83 (atom -> string .) + yacc.py:2687: dot reduce using rule 83 (atom -> string .) + yacc.py:2687: star reduce using rule 83 (atom -> string .) + yacc.py:2687: div reduce using rule 83 (atom -> string .) + yacc.py:2687: plus reduce using rule 83 (atom -> string .) + yacc.py:2687: minus reduce using rule 83 (atom -> string .) + yacc.py:2687: less reduce using rule 83 (atom -> string .) + yacc.py:2687: lesseq reduce using rule 83 (atom -> string .) + yacc.py:2687: equal reduce using rule 83 (atom -> string .) + yacc.py:2687: semi reduce using rule 83 (atom -> string .) + yacc.py:2687: cpar reduce using rule 83 (atom -> string .) + yacc.py:2687: of reduce using rule 83 (atom -> string .) + yacc.py:2687: then reduce using rule 83 (atom -> string .) + yacc.py:2687: loop reduce using rule 83 (atom -> string .) + yacc.py:2687: comma reduce using rule 83 (atom -> string .) + yacc.py:2687: in reduce using rule 83 (atom -> string .) + yacc.py:2687: else reduce using rule 83 (atom -> string .) + yacc.py:2687: pool reduce using rule 83 (atom -> string .) + yacc.py:2687: ccur reduce using rule 83 (atom -> string .) + yacc.py:2687: fi reduce using rule 83 (atom -> string .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 94 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar colon . type ocur expr ccur + yacc.py:2566: + yacc.py:2687: type shift and go to state 137 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 95 + yacc.py:2563: + yacc.py:2565: (33) param_list -> param comma param_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 33 (param_list -> param comma param_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 96 + yacc.py:2563: + yacc.py:2565: (35) param -> id colon type . + yacc.py:2566: + yacc.py:2687: comma reduce using rule 35 (param -> id colon type .) + yacc.py:2687: cpar reduce using rule 35 (param -> id colon type .) + yacc.py:2687: larrow reduce using rule 35 (param -> id colon type .) + yacc.py:2687: in reduce using rule 35 (param -> id colon type .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 97 + yacc.py:2563: + yacc.py:2565: (19) def_attr -> id colon type larrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 19 (def_attr -> id colon type larrow expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 98 + yacc.py:2563: + yacc.py:2565: (24) def_attr -> id colon type larrow error . + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: semi reduce using rule 24 (def_attr -> id colon type larrow error .) + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 99 + yacc.py:2563: + yacc.py:2565: (23) def_attr -> id colon error larrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 23 (def_attr -> id colon error larrow expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 100 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar colon . type ocur expr ccur + yacc.py:2565: (28) def_func -> id opar formals cpar colon . error ocur expr ccur + yacc.py:2565: (29) def_func -> id opar formals cpar colon . type ocur error ccur + yacc.py:2566: + yacc.py:2687: type shift and go to state 138 + yacc.py:2687: error shift and go to state 139 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 101 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar colon . type ocur expr ccur + yacc.py:2566: + yacc.py:2687: type shift and go to state 140 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 102 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 103 + yacc.py:2563: + yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list ccur error . + yacc.py:2566: + yacc.py:2687: error reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) + yacc.py:2687: class reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) + yacc.py:2687: $end reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 104 + yacc.py:2563: + yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 105 + yacc.py:2563: + yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 106 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 107 + yacc.py:2563: + yacc.py:2565: (86) block -> error . block + yacc.py:2565: (87) block -> error . semi + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: semi shift and go to state 142 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: block shift and go to state 141 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 108 + yacc.py:2563: + yacc.py:2565: (61) base_call -> error arroba . type dot func_call + yacc.py:2566: + yacc.py:2687: type shift and go to state 143 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 109 + yacc.py:2563: + yacc.py:2565: (78) atom -> error block . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 144 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 110 + yacc.py:2563: + yacc.py:2565: (90) func_call -> error opar . args cpar + yacc.py:2565: (64) factor -> opar . expr cpar + yacc.py:2565: (91) args -> . arg_list + yacc.py:2565: (92) args -> . arg_list_empty + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (96) arg_list_empty -> . epsilon + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 145 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: args shift and go to state 146 + yacc.py:2714: expr shift and go to state 147 + yacc.py:2714: arg_list shift and go to state 148 + yacc.py:2714: arg_list_empty shift and go to state 149 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: epsilon shift and go to state 150 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 111 + yacc.py:2563: + yacc.py:2565: (84) block -> expr . semi + yacc.py:2565: (85) block -> expr . semi block + yacc.py:2566: + yacc.py:2687: semi shift and go to state 151 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 112 + yacc.py:2563: + yacc.py:2565: (45) expr -> id larrow . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 152 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 113 + yacc.py:2563: + yacc.py:2565: (88) func_call -> id opar . args cpar + yacc.py:2565: (89) func_call -> id opar . error cpar + yacc.py:2565: (91) args -> . arg_list + yacc.py:2565: (92) args -> . arg_list_empty + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (96) arg_list_empty -> . epsilon + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 154 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: args shift and go to state 153 + yacc.py:2714: arg_list shift and go to state 148 + yacc.py:2714: arg_list_empty shift and go to state 149 + yacc.py:2714: expr shift and go to state 155 + yacc.py:2714: epsilon shift and go to state 150 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 114 + yacc.py:2563: + yacc.py:2565: (47) comp -> comp less . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: op shift and go to state 156 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 115 + yacc.py:2563: + yacc.py:2565: (48) comp -> comp lesseq . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: op shift and go to state 157 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 116 + yacc.py:2563: + yacc.py:2565: (49) comp -> comp equal . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: op shift and go to state 158 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 117 + yacc.py:2563: + yacc.py:2565: (51) op -> op plus . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: term shift and go to state 159 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 118 + yacc.py:2563: + yacc.py:2565: (52) op -> op minus . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: term shift and go to state 160 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 119 + yacc.py:2563: + yacc.py:2565: (54) term -> term star . base_call + yacc.py:2565: (57) term -> term star . error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 162 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 161 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 120 + yacc.py:2563: + yacc.py:2565: (55) term -> term div . base_call + yacc.py:2565: (58) term -> term div . error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 164 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 163 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 121 + yacc.py:2563: + yacc.py:2565: (59) base_call -> factor arroba . type dot func_call + yacc.py:2565: (62) base_call -> factor arroba . error dot func_call + yacc.py:2566: + yacc.py:2687: type shift and go to state 165 + yacc.py:2687: error shift and go to state 166 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 122 + yacc.py:2563: + yacc.py:2565: (65) factor -> factor dot . func_call + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 168 + yacc.py:2687: error shift and go to state 169 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 167 + yacc.py:2561: + yacc.py:2562:state 123 + yacc.py:2563: + yacc.py:2565: (64) factor -> opar expr . cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 170 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 124 + yacc.py:2563: + yacc.py:2565: (66) factor -> not expr . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 66 (factor -> not expr .) + yacc.py:2687: dot reduce using rule 66 (factor -> not expr .) + yacc.py:2687: star reduce using rule 66 (factor -> not expr .) + yacc.py:2687: div reduce using rule 66 (factor -> not expr .) + yacc.py:2687: plus reduce using rule 66 (factor -> not expr .) + yacc.py:2687: minus reduce using rule 66 (factor -> not expr .) + yacc.py:2687: less reduce using rule 66 (factor -> not expr .) + yacc.py:2687: lesseq reduce using rule 66 (factor -> not expr .) + yacc.py:2687: equal reduce using rule 66 (factor -> not expr .) + yacc.py:2687: semi reduce using rule 66 (factor -> not expr .) + yacc.py:2687: cpar reduce using rule 66 (factor -> not expr .) + yacc.py:2687: of reduce using rule 66 (factor -> not expr .) + yacc.py:2687: then reduce using rule 66 (factor -> not expr .) + yacc.py:2687: loop reduce using rule 66 (factor -> not expr .) + yacc.py:2687: comma reduce using rule 66 (factor -> not expr .) + yacc.py:2687: in reduce using rule 66 (factor -> not expr .) + yacc.py:2687: else reduce using rule 66 (factor -> not expr .) + yacc.py:2687: pool reduce using rule 66 (factor -> not expr .) + yacc.py:2687: ccur reduce using rule 66 (factor -> not expr .) + yacc.py:2687: fi reduce using rule 66 (factor -> not expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 125 + yacc.py:2563: + yacc.py:2565: (68) factor -> isvoid base_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: dot reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: star reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: div reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: plus reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: minus reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: less reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: lesseq reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: equal reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: semi reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: cpar reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: of reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: then reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: loop reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: comma reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: in reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: else reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: pool reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: ccur reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: fi reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 126 + yacc.py:2563: + yacc.py:2565: (75) atom -> id . + yacc.py:2565: (88) func_call -> id . opar args cpar + yacc.py:2565: (89) func_call -> id . opar error cpar + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 75 (atom -> id .) + yacc.py:2687: dot reduce using rule 75 (atom -> id .) + yacc.py:2687: star reduce using rule 75 (atom -> id .) + yacc.py:2687: div reduce using rule 75 (atom -> id .) + yacc.py:2687: plus reduce using rule 75 (atom -> id .) + yacc.py:2687: minus reduce using rule 75 (atom -> id .) + yacc.py:2687: less reduce using rule 75 (atom -> id .) + yacc.py:2687: lesseq reduce using rule 75 (atom -> id .) + yacc.py:2687: equal reduce using rule 75 (atom -> id .) + yacc.py:2687: semi reduce using rule 75 (atom -> id .) + yacc.py:2687: cpar reduce using rule 75 (atom -> id .) + yacc.py:2687: of reduce using rule 75 (atom -> id .) + yacc.py:2687: then reduce using rule 75 (atom -> id .) + yacc.py:2687: loop reduce using rule 75 (atom -> id .) + yacc.py:2687: comma reduce using rule 75 (atom -> id .) + yacc.py:2687: in reduce using rule 75 (atom -> id .) + yacc.py:2687: else reduce using rule 75 (atom -> id .) + yacc.py:2687: pool reduce using rule 75 (atom -> id .) + yacc.py:2687: ccur reduce using rule 75 (atom -> id .) + yacc.py:2687: fi reduce using rule 75 (atom -> id .) + yacc.py:2687: opar shift and go to state 113 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 127 + yacc.py:2563: + yacc.py:2565: (69) factor -> nox base_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: dot reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: star reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: div reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: plus reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: minus reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: less reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: lesseq reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: equal reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: semi reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: cpar reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: of reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: then reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: loop reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: comma reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: in reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: else reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: pool reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: ccur reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: fi reduce using rule 69 (factor -> nox base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 128 + yacc.py:2563: + yacc.py:2565: (70) factor -> let let_list . in expr + yacc.py:2566: + yacc.py:2687: in shift and go to state 171 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 129 + yacc.py:2563: + yacc.py:2565: (36) let_list -> let_assign . + yacc.py:2565: (37) let_list -> let_assign . comma let_list + yacc.py:2566: + yacc.py:2687: in reduce using rule 36 (let_list -> let_assign .) + yacc.py:2687: comma shift and go to state 172 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 130 + yacc.py:2563: + yacc.py:2565: (38) let_assign -> param . larrow expr + yacc.py:2565: (39) let_assign -> param . + yacc.py:2566: + yacc.py:2687: larrow shift and go to state 173 + yacc.py:2687: comma reduce using rule 39 (let_assign -> param .) + yacc.py:2687: in reduce using rule 39 (let_assign -> param .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 131 + yacc.py:2563: + yacc.py:2565: (71) factor -> case expr . of cases_list esac + yacc.py:2566: + yacc.py:2687: of shift and go to state 174 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 132 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr . then expr else expr fi + yacc.py:2566: + yacc.py:2687: then shift and go to state 175 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 133 + yacc.py:2563: + yacc.py:2565: (73) factor -> while expr . loop expr pool + yacc.py:2566: + yacc.py:2687: loop shift and go to state 176 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 134 + yacc.py:2563: + yacc.py:2565: (76) atom -> new type . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 76 (atom -> new type .) + yacc.py:2687: dot reduce using rule 76 (atom -> new type .) + yacc.py:2687: star reduce using rule 76 (atom -> new type .) + yacc.py:2687: div reduce using rule 76 (atom -> new type .) + yacc.py:2687: plus reduce using rule 76 (atom -> new type .) + yacc.py:2687: minus reduce using rule 76 (atom -> new type .) + yacc.py:2687: less reduce using rule 76 (atom -> new type .) + yacc.py:2687: lesseq reduce using rule 76 (atom -> new type .) + yacc.py:2687: equal reduce using rule 76 (atom -> new type .) + yacc.py:2687: semi reduce using rule 76 (atom -> new type .) + yacc.py:2687: cpar reduce using rule 76 (atom -> new type .) + yacc.py:2687: of reduce using rule 76 (atom -> new type .) + yacc.py:2687: then reduce using rule 76 (atom -> new type .) + yacc.py:2687: loop reduce using rule 76 (atom -> new type .) + yacc.py:2687: comma reduce using rule 76 (atom -> new type .) + yacc.py:2687: in reduce using rule 76 (atom -> new type .) + yacc.py:2687: else reduce using rule 76 (atom -> new type .) + yacc.py:2687: pool reduce using rule 76 (atom -> new type .) + yacc.py:2687: ccur reduce using rule 76 (atom -> new type .) + yacc.py:2687: fi reduce using rule 76 (atom -> new type .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 135 + yacc.py:2563: + yacc.py:2565: (77) atom -> ocur block . ccur + yacc.py:2565: (80) atom -> ocur block . error + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 177 + yacc.py:2687: error shift and go to state 178 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 136 + yacc.py:2563: + yacc.py:2565: (79) atom -> ocur error . ccur + yacc.py:2565: (86) block -> error . block + yacc.py:2565: (87) block -> error . semi + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 179 + yacc.py:2687: semi shift and go to state 142 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: block shift and go to state 141 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 137 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar colon type . ocur expr ccur + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 180 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 138 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar colon type . ocur expr ccur + yacc.py:2565: (29) def_func -> id opar formals cpar colon type . ocur error ccur + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 181 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 139 + yacc.py:2563: + yacc.py:2565: (28) def_func -> id opar formals cpar colon error . ocur expr ccur + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 182 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 140 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar colon type . ocur expr ccur + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 183 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 141 + yacc.py:2563: + yacc.py:2565: (86) block -> error block . + yacc.py:2565: (78) atom -> error block . ccur + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for ccur resolved as shift + yacc.py:2687: error reduce using rule 86 (block -> error block .) + yacc.py:2687: ccur shift and go to state 144 + yacc.py:2689: + yacc.py:2696: ! ccur [ reduce using rule 86 (block -> error block .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 142 + yacc.py:2563: + yacc.py:2565: (87) block -> error semi . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 87 (block -> error semi .) + yacc.py:2687: error reduce using rule 87 (block -> error semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 143 + yacc.py:2563: + yacc.py:2565: (61) base_call -> error arroba type . dot func_call + yacc.py:2566: + yacc.py:2687: dot shift and go to state 184 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 144 + yacc.py:2563: + yacc.py:2565: (78) atom -> error block ccur . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: dot reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: star reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: div reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: plus reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: minus reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: less reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: lesseq reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: equal reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: semi reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: cpar reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: of reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: then reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: loop reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: comma reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: in reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: else reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: pool reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: ccur reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: fi reduce using rule 78 (atom -> error block ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 145 + yacc.py:2563: + yacc.py:2565: (95) arg_list -> error . arg_list + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 185 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: arg_list shift and go to state 186 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 187 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 146 + yacc.py:2563: + yacc.py:2565: (90) func_call -> error opar args . cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 188 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 147 + yacc.py:2563: + yacc.py:2565: (64) factor -> opar expr . cpar + yacc.py:2565: (93) arg_list -> expr . + yacc.py:2565: (94) arg_list -> expr . comma arg_list + yacc.py:2566: + yacc.py:2609: ! shift/reduce conflict for cpar resolved as shift + yacc.py:2687: cpar shift and go to state 170 + yacc.py:2687: comma shift and go to state 189 + yacc.py:2689: + yacc.py:2696: ! cpar [ reduce using rule 93 (arg_list -> expr .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 148 + yacc.py:2563: + yacc.py:2565: (91) args -> arg_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 91 (args -> arg_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 149 + yacc.py:2563: + yacc.py:2565: (92) args -> arg_list_empty . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 92 (args -> arg_list_empty .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 150 + yacc.py:2563: + yacc.py:2565: (96) arg_list_empty -> epsilon . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 96 (arg_list_empty -> epsilon .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 151 + yacc.py:2563: + yacc.py:2565: (84) block -> expr semi . + yacc.py:2565: (85) block -> expr semi . block + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for error resolved as shift + yacc.py:2687: ccur reduce using rule 84 (block -> expr semi .) + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2696: ! error [ reduce using rule 84 (block -> expr semi .) ] + yacc.py:2700: + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: block shift and go to state 190 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 152 + yacc.py:2563: + yacc.py:2565: (45) expr -> id larrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: cpar reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: arroba reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: dot reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: star reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: div reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: plus reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: minus reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: less reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: lesseq reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: equal reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: of reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: then reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: loop reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: comma reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: in reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: else reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: pool reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: ccur reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: fi reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 153 + yacc.py:2563: + yacc.py:2565: (88) func_call -> id opar args . cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 191 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 154 + yacc.py:2563: + yacc.py:2565: (89) func_call -> id opar error . cpar + yacc.py:2565: (95) arg_list -> error . arg_list + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 192 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 185 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: arg_list shift and go to state 186 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 187 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 155 + yacc.py:2563: + yacc.py:2565: (93) arg_list -> expr . + yacc.py:2565: (94) arg_list -> expr . comma arg_list + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 93 (arg_list -> expr .) + yacc.py:2687: comma shift and go to state 189 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 156 + yacc.py:2563: + yacc.py:2565: (47) comp -> comp less op . + yacc.py:2565: (51) op -> op . plus term + yacc.py:2565: (52) op -> op . minus term + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for plus resolved as shift + yacc.py:2666: ! shift/reduce conflict for minus resolved as shift + yacc.py:2687: less reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: lesseq reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: equal reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: semi reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: cpar reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: arroba reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: dot reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: star reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: div reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: of reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: then reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: loop reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: comma reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: in reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: else reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: pool reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: ccur reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: fi reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: plus shift and go to state 117 + yacc.py:2687: minus shift and go to state 118 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 47 (comp -> comp less op .) ] + yacc.py:2696: ! minus [ reduce using rule 47 (comp -> comp less op .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 157 + yacc.py:2563: + yacc.py:2565: (48) comp -> comp lesseq op . + yacc.py:2565: (51) op -> op . plus term + yacc.py:2565: (52) op -> op . minus term + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for plus resolved as shift + yacc.py:2666: ! shift/reduce conflict for minus resolved as shift + yacc.py:2687: less reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: lesseq reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: equal reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: semi reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: cpar reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: arroba reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: dot reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: star reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: div reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: of reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: then reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: loop reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: comma reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: in reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: else reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: pool reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: ccur reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: fi reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: plus shift and go to state 117 + yacc.py:2687: minus shift and go to state 118 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 48 (comp -> comp lesseq op .) ] + yacc.py:2696: ! minus [ reduce using rule 48 (comp -> comp lesseq op .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 158 + yacc.py:2563: + yacc.py:2565: (49) comp -> comp equal op . + yacc.py:2565: (51) op -> op . plus term + yacc.py:2565: (52) op -> op . minus term + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for plus resolved as shift + yacc.py:2666: ! shift/reduce conflict for minus resolved as shift + yacc.py:2687: less reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: lesseq reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: equal reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: semi reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: cpar reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: arroba reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: dot reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: star reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: div reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: of reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: then reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: loop reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: comma reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: in reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: else reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: pool reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: ccur reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: fi reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: plus shift and go to state 117 + yacc.py:2687: minus shift and go to state 118 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 49 (comp -> comp equal op .) ] + yacc.py:2696: ! minus [ reduce using rule 49 (comp -> comp equal op .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 159 + yacc.py:2563: + yacc.py:2565: (51) op -> op plus term . + yacc.py:2565: (54) term -> term . star base_call + yacc.py:2565: (55) term -> term . div base_call + yacc.py:2565: (57) term -> term . star error + yacc.py:2565: (58) term -> term . div error + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for star resolved as shift + yacc.py:2666: ! shift/reduce conflict for div resolved as shift + yacc.py:2687: plus reduce using rule 51 (op -> op plus term .) + yacc.py:2687: minus reduce using rule 51 (op -> op plus term .) + yacc.py:2687: less reduce using rule 51 (op -> op plus term .) + yacc.py:2687: lesseq reduce using rule 51 (op -> op plus term .) + yacc.py:2687: equal reduce using rule 51 (op -> op plus term .) + yacc.py:2687: semi reduce using rule 51 (op -> op plus term .) + yacc.py:2687: cpar reduce using rule 51 (op -> op plus term .) + yacc.py:2687: arroba reduce using rule 51 (op -> op plus term .) + yacc.py:2687: dot reduce using rule 51 (op -> op plus term .) + yacc.py:2687: of reduce using rule 51 (op -> op plus term .) + yacc.py:2687: then reduce using rule 51 (op -> op plus term .) + yacc.py:2687: loop reduce using rule 51 (op -> op plus term .) + yacc.py:2687: comma reduce using rule 51 (op -> op plus term .) + yacc.py:2687: in reduce using rule 51 (op -> op plus term .) + yacc.py:2687: else reduce using rule 51 (op -> op plus term .) + yacc.py:2687: pool reduce using rule 51 (op -> op plus term .) + yacc.py:2687: ccur reduce using rule 51 (op -> op plus term .) + yacc.py:2687: fi reduce using rule 51 (op -> op plus term .) + yacc.py:2687: star shift and go to state 119 + yacc.py:2687: div shift and go to state 120 + yacc.py:2689: + yacc.py:2696: ! star [ reduce using rule 51 (op -> op plus term .) ] + yacc.py:2696: ! div [ reduce using rule 51 (op -> op plus term .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 160 + yacc.py:2563: + yacc.py:2565: (52) op -> op minus term . + yacc.py:2565: (54) term -> term . star base_call + yacc.py:2565: (55) term -> term . div base_call + yacc.py:2565: (57) term -> term . star error + yacc.py:2565: (58) term -> term . div error + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for star resolved as shift + yacc.py:2666: ! shift/reduce conflict for div resolved as shift + yacc.py:2687: plus reduce using rule 52 (op -> op minus term .) + yacc.py:2687: minus reduce using rule 52 (op -> op minus term .) + yacc.py:2687: less reduce using rule 52 (op -> op minus term .) + yacc.py:2687: lesseq reduce using rule 52 (op -> op minus term .) + yacc.py:2687: equal reduce using rule 52 (op -> op minus term .) + yacc.py:2687: semi reduce using rule 52 (op -> op minus term .) + yacc.py:2687: cpar reduce using rule 52 (op -> op minus term .) + yacc.py:2687: arroba reduce using rule 52 (op -> op minus term .) + yacc.py:2687: dot reduce using rule 52 (op -> op minus term .) + yacc.py:2687: of reduce using rule 52 (op -> op minus term .) + yacc.py:2687: then reduce using rule 52 (op -> op minus term .) + yacc.py:2687: loop reduce using rule 52 (op -> op minus term .) + yacc.py:2687: comma reduce using rule 52 (op -> op minus term .) + yacc.py:2687: in reduce using rule 52 (op -> op minus term .) + yacc.py:2687: else reduce using rule 52 (op -> op minus term .) + yacc.py:2687: pool reduce using rule 52 (op -> op minus term .) + yacc.py:2687: ccur reduce using rule 52 (op -> op minus term .) + yacc.py:2687: fi reduce using rule 52 (op -> op minus term .) + yacc.py:2687: star shift and go to state 119 + yacc.py:2687: div shift and go to state 120 + yacc.py:2689: + yacc.py:2696: ! star [ reduce using rule 52 (op -> op minus term .) ] + yacc.py:2696: ! div [ reduce using rule 52 (op -> op minus term .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 161 + yacc.py:2563: + yacc.py:2565: (54) term -> term star base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: div reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: plus reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: minus reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: less reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: lesseq reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: equal reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: semi reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: cpar reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: arroba reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: dot reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: of reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: then reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: loop reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: comma reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: in reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: else reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: pool reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: ccur reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: fi reduce using rule 54 (term -> term star base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 162 + yacc.py:2563: + yacc.py:2565: (57) term -> term star error . + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2687: star reduce using rule 57 (term -> term star error .) + yacc.py:2687: div reduce using rule 57 (term -> term star error .) + yacc.py:2687: plus reduce using rule 57 (term -> term star error .) + yacc.py:2687: minus reduce using rule 57 (term -> term star error .) + yacc.py:2687: less reduce using rule 57 (term -> term star error .) + yacc.py:2687: lesseq reduce using rule 57 (term -> term star error .) + yacc.py:2687: equal reduce using rule 57 (term -> term star error .) + yacc.py:2687: semi reduce using rule 57 (term -> term star error .) + yacc.py:2687: cpar reduce using rule 57 (term -> term star error .) + yacc.py:2687: dot reduce using rule 57 (term -> term star error .) + yacc.py:2687: of reduce using rule 57 (term -> term star error .) + yacc.py:2687: then reduce using rule 57 (term -> term star error .) + yacc.py:2687: loop reduce using rule 57 (term -> term star error .) + yacc.py:2687: comma reduce using rule 57 (term -> term star error .) + yacc.py:2687: in reduce using rule 57 (term -> term star error .) + yacc.py:2687: else reduce using rule 57 (term -> term star error .) + yacc.py:2687: pool reduce using rule 57 (term -> term star error .) + yacc.py:2687: ccur reduce using rule 57 (term -> term star error .) + yacc.py:2687: fi reduce using rule 57 (term -> term star error .) + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2696: ! arroba [ reduce using rule 57 (term -> term star error .) ] + yacc.py:2700: + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 163 + yacc.py:2563: + yacc.py:2565: (55) term -> term div base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: div reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: plus reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: minus reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: less reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: lesseq reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: equal reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: semi reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: cpar reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: arroba reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: dot reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: of reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: then reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: loop reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: comma reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: in reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: else reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: pool reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: ccur reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: fi reduce using rule 55 (term -> term div base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 164 + yacc.py:2563: + yacc.py:2565: (58) term -> term div error . + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2687: star reduce using rule 58 (term -> term div error .) + yacc.py:2687: div reduce using rule 58 (term -> term div error .) + yacc.py:2687: plus reduce using rule 58 (term -> term div error .) + yacc.py:2687: minus reduce using rule 58 (term -> term div error .) + yacc.py:2687: less reduce using rule 58 (term -> term div error .) + yacc.py:2687: lesseq reduce using rule 58 (term -> term div error .) + yacc.py:2687: equal reduce using rule 58 (term -> term div error .) + yacc.py:2687: semi reduce using rule 58 (term -> term div error .) + yacc.py:2687: cpar reduce using rule 58 (term -> term div error .) + yacc.py:2687: dot reduce using rule 58 (term -> term div error .) + yacc.py:2687: of reduce using rule 58 (term -> term div error .) + yacc.py:2687: then reduce using rule 58 (term -> term div error .) + yacc.py:2687: loop reduce using rule 58 (term -> term div error .) + yacc.py:2687: comma reduce using rule 58 (term -> term div error .) + yacc.py:2687: in reduce using rule 58 (term -> term div error .) + yacc.py:2687: else reduce using rule 58 (term -> term div error .) + yacc.py:2687: pool reduce using rule 58 (term -> term div error .) + yacc.py:2687: ccur reduce using rule 58 (term -> term div error .) + yacc.py:2687: fi reduce using rule 58 (term -> term div error .) + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2696: ! arroba [ reduce using rule 58 (term -> term div error .) ] + yacc.py:2700: + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 165 + yacc.py:2563: + yacc.py:2565: (59) base_call -> factor arroba type . dot func_call + yacc.py:2566: + yacc.py:2687: dot shift and go to state 193 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 166 + yacc.py:2563: + yacc.py:2565: (62) base_call -> factor arroba error . dot func_call + yacc.py:2566: + yacc.py:2687: dot shift and go to state 194 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 167 + yacc.py:2563: + yacc.py:2565: (65) factor -> factor dot func_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: dot reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: star reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: div reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: plus reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: minus reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: less reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: lesseq reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: equal reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: semi reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: cpar reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: of reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: then reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: loop reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: comma reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: in reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: else reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: pool reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: ccur reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: fi reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 168 + yacc.py:2563: + yacc.py:2565: (88) func_call -> id . opar args cpar + yacc.py:2565: (89) func_call -> id . opar error cpar + yacc.py:2566: + yacc.py:2687: opar shift and go to state 113 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 169 + yacc.py:2563: + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2566: + yacc.py:2687: opar shift and go to state 195 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 170 + yacc.py:2563: + yacc.py:2565: (64) factor -> opar expr cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: dot reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: star reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: div reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: plus reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: minus reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: less reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: lesseq reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: equal reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: semi reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: cpar reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: of reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: then reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: loop reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: comma reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: in reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: else reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: pool reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: ccur reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: fi reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 171 + yacc.py:2563: + yacc.py:2565: (70) factor -> let let_list in . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 196 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 172 + yacc.py:2563: + yacc.py:2565: (37) let_list -> let_assign comma . let_list + yacc.py:2565: (36) let_list -> . let_assign + yacc.py:2565: (37) let_list -> . let_assign comma let_list + yacc.py:2565: (38) let_assign -> . param larrow expr + yacc.py:2565: (39) let_assign -> . param + yacc.py:2565: (35) param -> . id colon type + yacc.py:2566: + yacc.py:2687: id shift and go to state 46 + yacc.py:2689: + yacc.py:2714: let_assign shift and go to state 129 + yacc.py:2714: let_list shift and go to state 197 + yacc.py:2714: param shift and go to state 130 + yacc.py:2561: + yacc.py:2562:state 173 + yacc.py:2563: + yacc.py:2565: (38) let_assign -> param larrow . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 198 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 174 + yacc.py:2563: + yacc.py:2565: (71) factor -> case expr of . cases_list esac + yacc.py:2565: (40) cases_list -> . casep semi + yacc.py:2565: (41) cases_list -> . casep semi cases_list + yacc.py:2565: (42) cases_list -> . error cases_list + yacc.py:2565: (43) cases_list -> . error semi + yacc.py:2565: (44) casep -> . id colon type rarrow expr + yacc.py:2566: + yacc.py:2687: error shift and go to state 201 + yacc.py:2687: id shift and go to state 202 + yacc.py:2689: + yacc.py:2714: cases_list shift and go to state 199 + yacc.py:2714: casep shift and go to state 200 + yacc.py:2561: + yacc.py:2562:state 175 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr then . expr else expr fi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 203 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 176 + yacc.py:2563: + yacc.py:2565: (73) factor -> while expr loop . expr pool + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 204 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 177 + yacc.py:2563: + yacc.py:2565: (77) atom -> ocur block ccur . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: dot reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: star reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: div reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: plus reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: minus reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: less reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: lesseq reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: equal reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: semi reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: cpar reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: of reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: then reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: loop reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: comma reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: in reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: else reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: pool reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: ccur reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: fi reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 178 + yacc.py:2563: + yacc.py:2565: (80) atom -> ocur block error . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: dot reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: star reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: div reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: plus reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: minus reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: less reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: lesseq reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: equal reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: semi reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: cpar reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: of reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: then reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: loop reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: comma reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: in reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: else reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: pool reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: ccur reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: fi reduce using rule 80 (atom -> ocur block error .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 179 + yacc.py:2563: + yacc.py:2565: (79) atom -> ocur error ccur . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: dot reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: star reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: div reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: plus reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: minus reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: less reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: lesseq reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: equal reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: semi reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: cpar reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: of reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: then reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: loop reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: comma reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: in reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: else reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: pool reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: ccur reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: fi reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 180 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur . expr ccur + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 205 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 181 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur . expr ccur + yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur . error ccur + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 207 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 206 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 182 + yacc.py:2563: + yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur . expr ccur + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 208 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 183 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur . expr ccur + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 209 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 184 + yacc.py:2563: + yacc.py:2565: (61) base_call -> error arroba type dot . func_call + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 168 + yacc.py:2687: error shift and go to state 169 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 210 + yacc.py:2561: + yacc.py:2562:state 185 + yacc.py:2563: + yacc.py:2565: (95) arg_list -> error . arg_list + yacc.py:2565: (86) block -> error . block + yacc.py:2565: (87) block -> error . semi + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: semi shift and go to state 142 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 185 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: arg_list shift and go to state 186 + yacc.py:2714: block shift and go to state 141 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: expr shift and go to state 187 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 186 + yacc.py:2563: + yacc.py:2565: (95) arg_list -> error arg_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 95 (arg_list -> error arg_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 187 + yacc.py:2563: + yacc.py:2565: (93) arg_list -> expr . + yacc.py:2565: (94) arg_list -> expr . comma arg_list + yacc.py:2565: (84) block -> expr . semi + yacc.py:2565: (85) block -> expr . semi block + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 93 (arg_list -> expr .) + yacc.py:2687: comma shift and go to state 189 + yacc.py:2687: semi shift and go to state 151 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 188 + yacc.py:2563: + yacc.py:2565: (90) func_call -> error opar args cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: dot reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: star reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: div reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: plus reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: minus reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: less reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: lesseq reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: equal reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: semi reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: cpar reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: of reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: then reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: loop reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: comma reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: in reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: else reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: pool reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: ccur reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: fi reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 189 + yacc.py:2563: + yacc.py:2565: (94) arg_list -> expr comma . arg_list + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 145 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 155 + yacc.py:2714: arg_list shift and go to state 211 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 190 + yacc.py:2563: + yacc.py:2565: (85) block -> expr semi block . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 85 (block -> expr semi block .) + yacc.py:2687: error reduce using rule 85 (block -> expr semi block .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 191 + yacc.py:2563: + yacc.py:2565: (88) func_call -> id opar args cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: dot reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: star reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: div reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: plus reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: minus reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: less reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: lesseq reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: equal reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: semi reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: cpar reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: of reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: then reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: loop reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: comma reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: in reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: else reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: pool reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: ccur reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: fi reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 192 + yacc.py:2563: + yacc.py:2565: (89) func_call -> id opar error cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: dot reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: star reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: div reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: plus reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: minus reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: less reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: lesseq reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: equal reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: semi reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: cpar reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: of reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: then reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: loop reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: comma reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: in reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: else reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: pool reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: ccur reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: fi reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 193 + yacc.py:2563: + yacc.py:2565: (59) base_call -> factor arroba type dot . func_call + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 168 + yacc.py:2687: error shift and go to state 169 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 212 + yacc.py:2561: + yacc.py:2562:state 194 + yacc.py:2563: + yacc.py:2565: (62) base_call -> factor arroba error dot . func_call + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 168 + yacc.py:2687: error shift and go to state 169 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 213 + yacc.py:2561: + yacc.py:2562:state 195 + yacc.py:2563: + yacc.py:2565: (90) func_call -> error opar . args cpar + yacc.py:2565: (91) args -> . arg_list + yacc.py:2565: (92) args -> . arg_list_empty + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (96) arg_list_empty -> . epsilon + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 145 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: args shift and go to state 146 + yacc.py:2714: arg_list shift and go to state 148 + yacc.py:2714: arg_list_empty shift and go to state 149 + yacc.py:2714: expr shift and go to state 155 + yacc.py:2714: epsilon shift and go to state 150 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 196 + yacc.py:2563: + yacc.py:2565: (70) factor -> let let_list in expr . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: dot reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: star reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: div reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: plus reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: minus reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: less reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: lesseq reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: equal reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: semi reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: cpar reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: of reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: then reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: loop reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: comma reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: in reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: else reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: pool reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: ccur reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: fi reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 197 + yacc.py:2563: + yacc.py:2565: (37) let_list -> let_assign comma let_list . + yacc.py:2566: + yacc.py:2687: in reduce using rule 37 (let_list -> let_assign comma let_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 198 + yacc.py:2563: + yacc.py:2565: (38) let_assign -> param larrow expr . + yacc.py:2566: + yacc.py:2687: comma reduce using rule 38 (let_assign -> param larrow expr .) + yacc.py:2687: in reduce using rule 38 (let_assign -> param larrow expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 199 + yacc.py:2563: + yacc.py:2565: (71) factor -> case expr of cases_list . esac + yacc.py:2566: + yacc.py:2687: esac shift and go to state 214 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 200 + yacc.py:2563: + yacc.py:2565: (40) cases_list -> casep . semi + yacc.py:2565: (41) cases_list -> casep . semi cases_list + yacc.py:2566: + yacc.py:2687: semi shift and go to state 215 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 201 + yacc.py:2563: + yacc.py:2565: (42) cases_list -> error . cases_list + yacc.py:2565: (43) cases_list -> error . semi + yacc.py:2565: (40) cases_list -> . casep semi + yacc.py:2565: (41) cases_list -> . casep semi cases_list + yacc.py:2565: (42) cases_list -> . error cases_list + yacc.py:2565: (43) cases_list -> . error semi + yacc.py:2565: (44) casep -> . id colon type rarrow expr + yacc.py:2566: + yacc.py:2687: semi shift and go to state 217 + yacc.py:2687: error shift and go to state 201 + yacc.py:2687: id shift and go to state 202 + yacc.py:2689: + yacc.py:2714: cases_list shift and go to state 216 + yacc.py:2714: casep shift and go to state 200 + yacc.py:2561: + yacc.py:2562:state 202 + yacc.py:2563: + yacc.py:2565: (44) casep -> id . colon type rarrow expr + yacc.py:2566: + yacc.py:2687: colon shift and go to state 218 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 203 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr then expr . else expr fi + yacc.py:2566: + yacc.py:2687: else shift and go to state 219 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 204 + yacc.py:2563: + yacc.py:2565: (73) factor -> while expr loop expr . pool + yacc.py:2566: + yacc.py:2687: pool shift and go to state 220 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 205 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 221 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 206 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 222 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 207 + yacc.py:2563: + yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur error . ccur + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 223 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 208 + yacc.py:2563: + yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 224 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 209 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 225 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 210 + yacc.py:2563: + yacc.py:2565: (61) base_call -> error arroba type dot func_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: div reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: plus reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: minus reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: less reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: lesseq reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: equal reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: semi reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: cpar reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: arroba reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: dot reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: of reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: then reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: loop reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: comma reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: in reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: else reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: pool reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: ccur reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: fi reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 211 + yacc.py:2563: + yacc.py:2565: (94) arg_list -> expr comma arg_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 94 (arg_list -> expr comma arg_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 212 + yacc.py:2563: + yacc.py:2565: (59) base_call -> factor arroba type dot func_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: div reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: plus reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: minus reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: less reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: lesseq reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: equal reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: semi reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: cpar reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: arroba reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: dot reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: of reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: then reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: loop reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: comma reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: in reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: else reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: pool reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: ccur reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: fi reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 213 + yacc.py:2563: + yacc.py:2565: (62) base_call -> factor arroba error dot func_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: div reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: plus reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: minus reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: less reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: lesseq reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: equal reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: semi reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: cpar reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: arroba reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: dot reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: of reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: then reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: loop reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: comma reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: in reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: else reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: pool reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: ccur reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: fi reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 214 + yacc.py:2563: + yacc.py:2565: (71) factor -> case expr of cases_list esac . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: dot reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: star reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: div reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: plus reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: minus reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: less reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: lesseq reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: equal reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: semi reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: cpar reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: of reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: then reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: loop reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: comma reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: in reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: else reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: pool reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: ccur reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: fi reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 215 + yacc.py:2563: + yacc.py:2565: (40) cases_list -> casep semi . + yacc.py:2565: (41) cases_list -> casep semi . cases_list + yacc.py:2565: (40) cases_list -> . casep semi + yacc.py:2565: (41) cases_list -> . casep semi cases_list + yacc.py:2565: (42) cases_list -> . error cases_list + yacc.py:2565: (43) cases_list -> . error semi + yacc.py:2565: (44) casep -> . id colon type rarrow expr + yacc.py:2566: + yacc.py:2687: esac reduce using rule 40 (cases_list -> casep semi .) + yacc.py:2687: error shift and go to state 201 + yacc.py:2687: id shift and go to state 202 + yacc.py:2689: + yacc.py:2714: casep shift and go to state 200 + yacc.py:2714: cases_list shift and go to state 226 + yacc.py:2561: + yacc.py:2562:state 216 + yacc.py:2563: + yacc.py:2565: (42) cases_list -> error cases_list . + yacc.py:2566: + yacc.py:2687: esac reduce using rule 42 (cases_list -> error cases_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 217 + yacc.py:2563: + yacc.py:2565: (43) cases_list -> error semi . + yacc.py:2566: + yacc.py:2687: esac reduce using rule 43 (cases_list -> error semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 218 + yacc.py:2563: + yacc.py:2565: (44) casep -> id colon . type rarrow expr + yacc.py:2566: + yacc.py:2687: type shift and go to state 227 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 219 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr then expr else . expr fi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 228 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 220 + yacc.py:2563: + yacc.py:2565: (73) factor -> while expr loop expr pool . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: dot reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: star reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: div reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: plus reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: minus reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: less reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: lesseq reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: equal reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: semi reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: cpar reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: of reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: then reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: loop reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: comma reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: in reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: else reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: pool reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: ccur reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: fi reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 221 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 26 (def_func -> error opar formals cpar colon type ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 222 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 25 (def_func -> id opar formals cpar colon type ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 223 + yacc.py:2563: + yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur error ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 29 (def_func -> id opar formals cpar colon type ocur error ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 224 + yacc.py:2563: + yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 28 (def_func -> id opar formals cpar colon error ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 225 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 27 (def_func -> id opar error cpar colon type ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 226 + yacc.py:2563: + yacc.py:2565: (41) cases_list -> casep semi cases_list . + yacc.py:2566: + yacc.py:2687: esac reduce using rule 41 (cases_list -> casep semi cases_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 227 + yacc.py:2563: + yacc.py:2565: (44) casep -> id colon type . rarrow expr + yacc.py:2566: + yacc.py:2687: rarrow shift and go to state 229 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 228 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr then expr else expr . fi + yacc.py:2566: + yacc.py:2687: fi shift and go to state 230 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 229 + yacc.py:2563: + yacc.py:2565: (44) casep -> id colon type rarrow . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 231 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 230 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr then expr else expr fi . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: dot reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: star reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: div reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: plus reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: minus reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: less reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: lesseq reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: equal reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: semi reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: cpar reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: of reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: then reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: loop reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: comma reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: in reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: else reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: pool reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: ccur reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: fi reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 231 + yacc.py:2563: + yacc.py:2565: (44) casep -> id colon type rarrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 44 (casep -> id colon type rarrow expr .) + yacc.py:2689: + yacc.py:3447:24 shift/reduce conflicts + yacc.py:3457: + yacc.py:3458:Conflicts: + yacc.py:3459: + yacc.py:3462:shift/reduce conflict for less in state 73 resolved as shift + yacc.py:3462:shift/reduce conflict for lesseq in state 73 resolved as shift + yacc.py:3462:shift/reduce conflict for equal in state 73 resolved as shift + yacc.py:3462:shift/reduce conflict for plus in state 74 resolved as shift + yacc.py:3462:shift/reduce conflict for minus in state 74 resolved as shift + yacc.py:3462:shift/reduce conflict for star in state 75 resolved as shift + yacc.py:3462:shift/reduce conflict for div in state 75 resolved as shift + yacc.py:3462:shift/reduce conflict for arroba in state 77 resolved as shift + yacc.py:3462:shift/reduce conflict for dot in state 77 resolved as shift + yacc.py:3462:shift/reduce conflict for ccur in state 141 resolved as shift + yacc.py:3462:shift/reduce conflict for cpar in state 147 resolved as shift + yacc.py:3462:shift/reduce conflict for error in state 151 resolved as shift + yacc.py:3462:shift/reduce conflict for plus in state 156 resolved as shift + yacc.py:3462:shift/reduce conflict for minus in state 156 resolved as shift + yacc.py:3462:shift/reduce conflict for plus in state 157 resolved as shift + yacc.py:3462:shift/reduce conflict for minus in state 157 resolved as shift + yacc.py:3462:shift/reduce conflict for plus in state 158 resolved as shift + yacc.py:3462:shift/reduce conflict for minus in state 158 resolved as shift + yacc.py:3462:shift/reduce conflict for star in state 159 resolved as shift + yacc.py:3462:shift/reduce conflict for div in state 159 resolved as shift + yacc.py:3462:shift/reduce conflict for star in state 160 resolved as shift + yacc.py:3462:shift/reduce conflict for div in state 160 resolved as shift + yacc.py:3462:shift/reduce conflict for arroba in state 162 resolved as shift + yacc.py:3462:shift/reduce conflict for arroba in state 164 resolved as shift + yacc.py: 362:PLY: PARSE DEBUG START + yacc.py: 410: + yacc.py: 411:State : 0 + yacc.py: 435:Stack : . LexToken(class,'class',1,0) + yacc.py: 445:Action : Shift and goto state 5 + yacc.py: 410: + yacc.py: 411:State : 5 + yacc.py: 435:Stack : class . LexToken(type,'Main',1,6) + yacc.py: 445:Action : Shift and goto state 8 + yacc.py: 410: + yacc.py: 411:State : 8 + yacc.py: 435:Stack : class type . LexToken(inherits,'inherits',1,11) + yacc.py: 445:Action : Shift and goto state 11 + yacc.py: 410: + yacc.py: 411:State : 11 + yacc.py: 435:Stack : class type inherits . LexToken(type,'IO',1,20) + yacc.py: 445:Action : Shift and goto state 20 + yacc.py: 410: + yacc.py: 411:State : 20 + yacc.py: 435:Stack : class type inherits type . LexToken(ocur,'{',1,23) + yacc.py: 445:Action : Shift and goto state 33 + yacc.py: 410: + yacc.py: 411:State : 33 + yacc.py: 435:Stack : class type inherits type ocur . LexToken(id,'main',3,30) + yacc.py: 445:Action : Shift and goto state 19 + yacc.py: 410: + yacc.py: 411:State : 19 + yacc.py: 435:Stack : class type inherits type ocur id . LexToken(opar,'(',3,35) + yacc.py: 445:Action : Shift and goto state 32 + yacc.py: 410: + yacc.py: 411:State : 32 + yacc.py: 435:Stack : class type inherits type ocur id opar . LexToken(cpar,')',3,36) + yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : class type inherits type ocur id opar epsilon . LexToken(cpar,')',3,36) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : class type inherits type ocur id opar param_list_empty . LexToken(cpar,')',3,36) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : class type inherits type ocur id opar formals . LexToken(cpar,')',3,36) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar . LexToken(colon,':',3,38) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon . LexToken(type,'Object',3,40) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type . LexToken(ocur,'{',3,47) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur . LexToken(ocur,'{',4,57) + yacc.py: 445:Action : Shift and goto state 90 + yacc.py: 410: + yacc.py: 411:State : 90 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur . LexToken(let,'let',5,71) + yacc.py: 445:Action : Shift and goto state 84 + yacc.py: 410: + yacc.py: 411:State : 84 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let . LexToken(id,'x',5,75) + yacc.py: 445:Action : Shift and goto state 46 + yacc.py: 410: + yacc.py: 411:State : 46 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let id . LexToken(colon,':',5,76) + yacc.py: 445:Action : Shift and goto state 61 + yacc.py: 410: + yacc.py: 411:State : 61 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let id colon . LexToken(type,'A',5,77) + yacc.py: 445:Action : Shift and goto state 96 + yacc.py: 410: + yacc.py: 411:State : 96 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let id colon type . LexToken(larrow,'<-',5,79) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['x',':','A'] and goto state 130 + yacc.py: 506:Result : ((LexToken(id,'x',5,75), LexToken(type,'A ...) + yacc.py: 410: + yacc.py: 411:State : 130 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let param . LexToken(larrow,'<-',5,79) + yacc.py: 445:Action : Shift and goto state 173 + yacc.py: 410: + yacc.py: 411:State : 173 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let param larrow . LexToken(new,'new',5,82) + yacc.py: 445:Action : Shift and goto state 89 + yacc.py: 410: + yacc.py: 411:State : 89 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let param larrow new . LexToken(type,'B',5,86) + yacc.py: 445:Action : Shift and goto state 134 + yacc.py: 410: + yacc.py: 411:State : 134 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let param larrow new type . LexToken(in,'in',5,88) + yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','B'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 + yacc.py: 506:Result : ( let_assign] with [] and goto state 128 + yacc.py: 506:Result : ([ id] with ['x'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let let_list in id opar factor dot id opar epsilon . LexToken(cpar,')',5,107) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let let_list in id opar factor dot id opar arg_list_empty . LexToken(cpar,')',5,107) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let let_list in id opar factor dot id opar args . LexToken(cpar,')',5,107) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let let_list in id opar factor dot id opar args cpar . LexToken(dot,'.',5,108) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['f','(',[],')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'f',5,105), [])) + yacc.py: 410: + yacc.py: 411:State : 167 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let let_list in id opar factor dot func_call . LexToken(dot,'.',5,108) + yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let let_list in id opar factor dot id opar epsilon . LexToken(cpar,')',5,111) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let let_list in id opar factor dot id opar arg_list_empty . LexToken(cpar,')',5,111) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let let_list in id opar factor dot id opar args . LexToken(cpar,')',5,111) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let let_list in id opar factor dot id opar args cpar . LexToken(cpar,')',5,113) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['m','(',[],')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'m',5,109), [])) + yacc.py: 410: + yacc.py: 411:State : 167 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let let_list in id opar factor dot func_call . LexToken(cpar,')',5,113) + yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',5,91), [ func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 196 + yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id colon type] with ['x',':','A'] and goto state 130 + yacc.py: 506:Result : ((LexToken(id,'x',6,132), LexToken(type,' ...) + yacc.py: 410: + yacc.py: 411:State : 130 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let param . LexToken(larrow,'<-',6,136) + yacc.py: 445:Action : Shift and goto state 173 + yacc.py: 410: + yacc.py: 411:State : 173 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let param larrow . LexToken(new,'new',6,139) + yacc.py: 445:Action : Shift and goto state 89 + yacc.py: 410: + yacc.py: 411:State : 89 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let param larrow new . LexToken(type,'A',6,143) + yacc.py: 445:Action : Shift and goto state 134 + yacc.py: 410: + yacc.py: 411:State : 134 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let param larrow new type . LexToken(in,'in',6,145) + yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','A'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 + yacc.py: 506:Result : ( let_assign] with [] and goto state 128 + yacc.py: 506:Result : ([ id] with ['x'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let let_list in id opar factor dot id opar epsilon . LexToken(cpar,')',6,164) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let let_list in id opar factor dot id opar arg_list_empty . LexToken(cpar,')',6,164) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let let_list in id opar factor dot id opar args . LexToken(cpar,')',6,164) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let let_list in id opar factor dot id opar args cpar . LexToken(dot,'.',6,165) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['f','(',[],')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'f',6,162), [])) + yacc.py: 410: + yacc.py: 411:State : 167 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let let_list in id opar factor dot func_call . LexToken(dot,'.',6,165) + yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let let_list in id opar factor dot id opar epsilon . LexToken(cpar,')',6,168) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let let_list in id opar factor dot id opar arg_list_empty . LexToken(cpar,')',6,168) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let let_list in id opar factor dot id opar args . LexToken(cpar,')',6,168) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let let_list in id opar factor dot id opar args cpar . LexToken(cpar,')',6,170) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['m','(',[],')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'m',6,166), [])) + yacc.py: 410: + yacc.py: 411:State : 167 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let let_list in id opar factor dot func_call . LexToken(cpar,')',6,170) + yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',6,148), [ func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 196 + yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 16 + yacc.py: 430:Defaulted state 16: Reduce using 14 + yacc.py: 435:Stack : class type inherits type ocur def_func semi epsilon . LexToken(ccur,'}',10,199) + yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 48 + yacc.py: 430:Defaulted state 48: Reduce using 16 + yacc.py: 435:Stack : class type inherits type ocur def_func semi feature_list . LexToken(ccur,'}',10,199) + yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class class type ocur id opar epsilon . LexToken(cpar,')',13,220) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class class type ocur id opar param_list_empty . LexToken(cpar,')',13,220) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type ocur id opar formals . LexToken(cpar,')',13,220) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type ocur id opar formals cpar . LexToken(colon,':',13,222) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type ocur id opar formals cpar colon . LexToken(type,'String',13,224) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type ocur id opar formals cpar colon type . LexToken(ocur,'{',13,231) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type ocur id opar formals cpar colon type ocur . LexToken(string,'A',13,235) + yacc.py: 445:Action : Shift and goto state 93 + yacc.py: 410: + yacc.py: 411:State : 93 + yacc.py: 435:Stack : def_class class type ocur id opar formals cpar colon type ocur string . LexToken(ccur,'}',13,237) + yacc.py: 471:Action : Reduce rule [atom -> string] with ['A'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['m','(',[],')',':','String','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class class type ocur def_func semi id opar epsilon . LexToken(cpar,')',14,247) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class class type ocur def_func semi id opar param_list_empty . LexToken(cpar,')',14,247) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type ocur def_func semi id opar formals . LexToken(cpar,')',14,247) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type ocur def_func semi id opar formals cpar . LexToken(colon,':',14,249) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type ocur def_func semi id opar formals cpar colon . LexToken(type,'A',14,251) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type ocur def_func semi id opar formals cpar colon type . LexToken(ocur,'{',14,253) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type ocur def_func semi id opar formals cpar colon type ocur . LexToken(new,'new',14,255) + yacc.py: 445:Action : Shift and goto state 89 + yacc.py: 410: + yacc.py: 411:State : 89 + yacc.py: 435:Stack : def_class class type ocur def_func semi id opar formals cpar colon type ocur new . LexToken(type,'A',14,259) + yacc.py: 445:Action : Shift and goto state 134 + yacc.py: 410: + yacc.py: 411:State : 134 + yacc.py: 435:Stack : def_class class type ocur def_func semi id opar formals cpar colon type ocur new type . LexToken(ccur,'}',14,261) + yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','A'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['f','(',[],')',':','A','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 16 + yacc.py: 430:Defaulted state 16: Reduce using 14 + yacc.py: 435:Stack : def_class class type ocur def_func semi def_func semi epsilon . LexToken(ccur,'}',15,264) + yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 48 + yacc.py: 430:Defaulted state 48: Reduce using 16 + yacc.py: 435:Stack : def_class class type ocur def_func semi def_func semi feature_list . LexToken(ccur,'}',15,264) + yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','A','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur id opar epsilon . LexToken(cpar,')',18,296) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur id opar param_list_empty . LexToken(cpar,')',18,296) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur id opar formals . LexToken(cpar,')',18,296) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur id opar formals cpar . LexToken(colon,':',18,298) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur id opar formals cpar colon . LexToken(type,'String',18,300) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur id opar formals cpar colon type . LexToken(ocur,'{',18,307) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur id opar formals cpar colon type ocur . LexToken(string,'B',18,311) + yacc.py: 445:Action : Shift and goto state 93 + yacc.py: 410: + yacc.py: 411:State : 93 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur id opar formals cpar colon type ocur string . LexToken(ccur,'}',18,313) + yacc.py: 471:Action : Reduce rule [atom -> string] with ['B'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['m','(',[],')',':','String','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 16 + yacc.py: 430:Defaulted state 16: Reduce using 14 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_func semi epsilon . LexToken(ccur,'}',19,316) + yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 48 + yacc.py: 430:Defaulted state 48: Reduce using 16 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_func semi feature_list . LexToken(ccur,'}',19,316) + yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','B','inherits','A','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 + yacc.py: 506:Result : ( (g`kf{?PdI1v39M8E(ekl_Ht#VkM~g&~+hlhJP_LlHtk;bN$Zu;@A#mS|qIf?r5@u432CMEg$&d&PI`MCv|IjKeZ$@%#? zy2((Uu91O}fqrpOvVL)DZem_ZW-?GyW?p7Ve7s&kqSj=%Se*HXs`$Oiq-&7b59+)RU zVFMzV<^t{nvg6nUyx?RnU7saV)+kx}!tx{KS?WzP$}krn2FYky=b zit7RKTTy1W5e)=G1rmWwpztebBdF^W)bySkpa{jl5BQir(rEjT}o9=kVYa#ZpqNDNL2=r3_P! zS_k*T>A2N?)lG5|D7EubM$8a*v~xNsNlV zy1Q9hyA-0**D?(K%{kH%wBIjJMA7%2?hI4e-kHpy(!W3HU$55IS;Eu46BSl;bE9g$ zxFS2bZUx7Z#*ypbcHTC8*YR2g4)BRFzp(URxw^DS=f&lR>qfI0 z+C3MyjAnCp!&r&}!!!*u@Vg#%iD3r;p0hJ)Zef05-Ux|pgs$J}MBW8c?w%wC((5$4 zUf0E5$JHQmxCax5R3rlBkPM`F%>?R3;4BT#gEtb5a5A-riUYL)}r!b@XjyTrEm rU-`G$`_~*|DG-#E%XV{Qx&eknedGsD54(@)I~merQGn*b$5Z+X2OfwN literal 0 HcmV?d00001 diff --git a/src/semantic/__pycache__/tools.cpython-37.pyc b/src/semantic/__pycache__/tools.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4d9941e86bdae1cbfa53471eea61ebdd0a5d105b GIT binary patch literal 14842 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', pos) + + def conforms_to(self, other): + return True + + def bypass(self): + return True + + def __eq__(self, other): + return isinstance(other, ErrorType) + + def __ne__(self, other): + return not isinstance(other, ErrorType) + +class VoidType(Type): + def __init__(self, pos=(0, 0)): + Type.__init__(self, '', pos) + + def conforms_to(self, other): + raise Exception('Invalid type: void type.') + + def bypass(self): + return True + + def __eq__(self, other): + return isinstance(other, VoidType) + +class BoolType(Type): + def __init__(self, pos=(0, 0)): + Type.__init__(self, 'Bool', pos) + + def __eq__(self, other): + return other.name == self.name or isinstance(other, BoolType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, BoolType) + + +class IntType(Type): + def __init__(self, pos=(0, 0)): + Type.__init__(self, 'Int', pos) + + def __eq__(self, other): + return other.name == self.name or isinstance(other, IntType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, IntType) + +class StringType(Type): + def __init__(self, pos=(0, 0)): + Type.__init__(self, 'String', pos) + + def __eq__(self, other): + return other.name == self.name or isinstance(other, StringType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, StringType) + +class AutoType(Type): + def __init__(self, pos=(0, 0)): + Type.__init__(self, 'AUTO_TYPE', pos) + + def __eq__(self, other): + return other.name == self.name or isinstance(other, AutoType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, AutoType) + +class ObjectType(Type): + def __init__(self, pos=(0, 0)): + self.name = 'Object' + self.attributes = [] + self.methods = {} + self.parent = None + self.pos = pos + + + def __eq__(self, other): + return other.name == self.name or isinstance(other, ObjectType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, ObjectType) + +class Context: + def __init__(self): + self.types = {} + + def create_type(self, name:str, pos): + if name in self.types: + error_text = TypesError.TYPE_ALREADY_DEFINED % name + raise TypesError(error_text, *pos) + typex = self.types[name] = Type(name, pos) + return typex + + def get_type(self, name:str, pos): + try: + return self.types[name] + except KeyError: + error_text = TypesError.TYPE_NOT_DEFINED % name + raise TypesError(error_text, *pos) + + def __str__(self): + return '{\n\t' + '\n\t'.join(y for x in self.types.values() for y in str(x).split('\n')) + '\n}' + + def __repr__(self): + return str(self) + +class VariableInfo: + def __init__(self, name, vtype): + self.name = name + self.type = vtype + + def __str__(self): + return f'{self.name} : {self.type.name}' + + def __repr__(self): + return str(self) + +class Scope: + def __init__(self, parent=None): + self.locals = [] + self.parent = parent + self.children = [] + self.expr_dict = { } + self.functions = { } + self.index = 0 if parent is None else len(parent) + + def __len__(self): + return len(self.locals) + + def __str__(self): + res = '' + for scope in self.children: + try: + classx = scope.locals[0] + name = classx.type.name + except: + name = '1' + res += name + scope.tab_level(1, '', 1) #'\n\t' + ('\n' + '\t').join(str(local) for local in scope.locals) + '\n' + return res + + def tab_level(self, tabs, name, num): + res = ('\t' * tabs) + ('\n' + ('\t' * tabs)).join(str(local) for local in self.locals) + if self.functions: + children = '\n'.join(v.tab_level(tabs + 1, '[method] ' + k, num) for k, v in self.functions.items()) + else: + children = '\n'.join(child.tab_level(tabs + 1, num, num + 1) for child in self.children) + return "\t" * (tabs-1) + f'{name}' + "\t" * tabs + f'\n{res}\n{children}' + + def __repr__(self): + return str(self) + + def create_child(self): + child = Scope(self) + self.children.append(child) + return child + + def define_variable(self, vname, vtype): + info = VariableInfo(vname, vtype) + self.locals.append(info) + return info + + def find_variable(self, vname, index=None): + locals = self.locals if index is None else itt.islice(self.locals, index) + try: + return next(x for x in locals if x.name == vname) + except StopIteration: + return self.parent.find_variable(vname, self.index) if self.parent else None + + def get_class_scope(self): + if self.parent == None or self.parent.parent == None: + return self + return self.parent.get_class_scope() + + def is_defined(self, vname): + return self.find_variable(vname) is not None + + def is_local(self, vname): + return any(True for x in self.locals if x.name == vname) + + def define_attribute(self, attr): + self.locals.append(attr) \ No newline at end of file diff --git a/src/semantic/visitors/__init__.py b/src/semantic/visitors/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/semantic/visitors/__pycache__/__init__.cpython-37.pyc b/src/semantic/visitors/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8dc5fe5a546713a63aaf8e0f9e843fb6427753ea GIT binary patch literal 188 zcmZ?b<>g`k0uia!I1v39M8E(ekl_Ht#VkM~g&~+hlhJP_LlHtk;bN$Zu;@A#mS|qIf?r5@u432CMEg$&d&PI`MCv|IjKeZ$@%#? zy2((Uu91O}fqrpOvVK`+ab`(=5l~NNUS>&ryk0@&Ee@O9{FKt1R6CIMpMjVG0DvVf A0ssI2 literal 0 HcmV?d00001 diff --git a/src/tools/__pycache__/ast.cpython-37.pyc b/src/semantic/visitors/__pycache__/ast.cpython-37.pyc similarity index 96% rename from src/tools/__pycache__/ast.cpython-37.pyc rename to src/semantic/visitors/__pycache__/ast.cpython-37.pyc index 7bb7556c0c1388db288b63caf07bdebabd832be7..20d254f2bc0b513aa18ec2bc75d6aef8b93e533c 100644 GIT binary patch delta 48 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 QF1|t67|VDb^1>7U0#n1}TL1t6 literal 0 HcmV?d00001 diff --git a/src/semantic/visitors/__pycache__/type_builder.cpython-37.pyc b/src/semantic/visitors/__pycache__/type_builder.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..39390011aefed1de806c9afceaa797b47ec9a3e4 GIT binary patch literal 2812 zcmaJ@&u`pB6rQoYUfb*4Y|{`zD5U~~*h{2iQq?THJ20OG*+#@bu@gq28l^r-4oBf~MIOohyJ z%*b*qIoB|+IW;-1gmzSS>T;}yja%$f=2v~=G4qW*#hLQWo2+I1g*{nI%j-9T$m^%Q z?urnx$fvHPsp#Dsq(M>$tXsQVlkut-mE)G0n-kSs|0+oD$9}Gna!bjLuj8Ii1 zq?qT`PTWs}owSAF551(9#sWirwoAT@9}R=cXvq_F0du&|9A$&8^Fa0aQ|>Fi`ncj~ zL1m=-+CKLyzW$i)aitw7y1EtU+orW>Jpmt&|5+4pe3{DGM+IPIHKp7f?n|%Eb-NrDyHx~x4Q!& zf`00z6fr#@AQA*vOM-A+s)!TN`;Cc{c>R;KqrmTZ?Jy2^+l%LyE?rz%xTq5*;1mI(`pl4uxZ3tdwj0*bllC272ht(PT&n-!cI5JS{~` zLnJ6vQc!d=nC2DfPXoh5+EN~#IJ}+w+TwEQWHX9C?IAZijls@b#y8nA`?fJe^hdy8 zpL4cttc~3OVQqLDdcsS4aX%5SV->)exRtB;e8e}YL>dWg#uS@RJg8z$w_bX13J2ev z%h)FE%r_M@b)Q(Et+D=x8cQn=EV0VjP~q(1T&nL8Pc-OPM@Hc(`RU{PBjpae%lhbH z!}Qq$Q~bO8{lv0aSRSgGI@ETSGfiszk!hP2bkILg#P4Zs)6UefWL=qM!%AAqD(mE% z`m6FY`-x+PIn=h(H3kotN)P`oJ)9*EvB#_Z!+xWBrc#`D=3%*k=r@NtqCb`CBz?lS zasKf=XcqUt*a*ryp!ED)-HH>@L>L7@FDRh$8sxgSwH5UJT;KBO)_`lsN`g?xPj)`P z(YgKQl^gEz%Jr4i<(1XW-P}rGw$wG&11}wjpv1U(2xA@yVhb*GaT{|>UPPA?R$eXF z9Y=yUuqycg9a9uO$D7>XrxlAUe41^ z>Fja2mTekXEg>jrr9aY%R@==xXlrbDwzLh3!3S$!8CF4qOQq#MOUv`Him!WoScU#e zY!X!^^=l&=+I1v9HLLEUsKMf5VettU^QFz^t1XSm(vZM=Q6k<#=!*0>j}elE7Y+h( zilj#4Pjngq~!Pr0T!YKe~%(@mSj}O3gGB!=gkrWZ~U*LfI&M1gGt|t*iy8Q3-A|^CzOln z1|AM)6GgU8wTn=6-Q05BDE0>-jcwQ69(ZB#MbI@AuTf{C%ayn<6MU}yct7apwd*3@ z5MH#3s+P}mLN7^{4+@5qp1d~bcmF4(zeq=fhYmpHTu`ACRN^QbBs4SlbY)sIcvDB4 zN1HXc)L3mbb9<2X!epWNlTh$nB@09sQ9+kC#?^cwMYT@^6>C8?Nze|03V4xC>CE|w niT1em7ZEUveY_-i4WcAkF>eh7jfMNzb@A6t?Q|B#9-Cvi%pT8g4q9EFIizY2t}U>VOAe_@<&a$VvKJqBPkZTWQmNWK=IB$t_j)h{K+tRD zkWe*^o__uF`t^I?d#^_~CMGf({;c*te0lbLP5Tde>HnFi`~Xj|j>6MCy{WbIvaVCz zXd0XJYc|c6Rkq?bo7=3W(@K?7Ew}8p(&cn3Q_kqx$C_t*&P&a6_KkAZOKoT+_qUi= zE9o-ztRB?EjzCp^2gUTZA69CeR;$ylJgNqM_T2e%{M{ZF&=49xanR zvVf6=c;sX+^Fx$*Q08OGYeSURKzS{uoF1Z_ z2IX{2d3}iTIw-Hllruw=GoYM_DQAZ$XF)j|Q_c-h&Vh0+rko$5oCoE6OnGC7@&+hx z#FRIOC~t!DW=y#-M7aRUg_v@2h;k8>i!tTW5akjmmtx9WLzK5bc`K&8Jw$mMl(%C_ zsZa6VfvvqOvt%91kNw&cpA0Qk>$F3EFRYQ3(;xl9CbVTd!D$qc9%&WWI7(OvN+U8* znx2OF^tF;D2s&i0wkw3+4l87(GT(n|`QhV^Cmo+`H7J?V3jF344-pd>_fMLb#Lu_E zV$1jH)x~C~`F!#6m8*aJ;mXwysQlo=k8UkiR)X5D->fcHD)&EGyc%{EmzNipJFT61 z(-(`iPN(@kaDw07zjFD?<;6hM7K0cj7Gqcm7Kyb=P3?VQ=ecw%m3q4#Rw`+*5V$Bb z-Qj;PW(LHx(C;R#cE|IFM5SX4i;55>776dDWQshRL=lCwgIZ_D=XO;TxRn{B?FS@r z&3G|2xGGai2G1a-K~EO8@j?$T{2nTMmqMIVLywGxv2WbezL@#k=$c(C(t2iOM%IC$ zYflRg`V0a@%@_3@nZst9RZ$J=opvDI+T(iD!x@ShOj)uI`RCPTcA&RRxBVYh#_fs+ z6So0LL^I}eXqnw6(I@;9g_MT*zlqB8e55tBo(^3z4vY=W(n8}&MqJmmuBmG;ilCZ3 zD>4t@bwYa|n&*M?BlDs5nbtNQCi`-fF1qA6XhlI%Vm*^ib!W$Kdos;Vg5(U%S>?CzV&+7#}r@uHccw9+OD7j6G??GMQeWWA&a96ZzEDy{= zJSDsL@bWwt={*frWyX8gvG*^rclgs6S3@Jx_w~?xVu~Aa-J&{V0`G*gC7Glmc&}|O zH21ZAi=|`z$QqT7D>JkkWs)o!X|a@E2NTj=+6_CjA(odQ)0f#hY`!eAzCxS_LA*i5 z87j_FK{`C3*jbi^TIU={K@Nomx#b|YIg;GTBa&0S6BThVAW`uUFMS1RKpYJS3J_#@ zaMUkJ@$H-1zTP$WE~xq!^Ia>1Xu{OKA>M-#xRFJQ1tWOxfwp%cOv5OQMkX;8t82%- zZ0_|iHWhQNMg~rQWTC{+2A+UaW*aPhQS9nud7+MltVsVm<0+)ik|-H6gK(xDgw=M< zm(#a)+qIjA=C%ePK^J4;vb47RYB(aoZ!_1L^&liryN-BF0feKyxHu>`28e}g%}%Y_ z46dWnA5qFGfPD=krBV0PNoDEHrNwrIABYmYPE+tS!WLVwI03RaiK66;0)esR2|^v2 zWyClh255W#}|gk=1bNz2R;dvl<;_Bi+m3_-)LP-8a}ia)cQX&IWT$kdolZleLito0Jn< z^|n`eRu%Q?BY2brup%vgZ%42!u+L6=t0P)L1<~n65Jif56j#@l@7}q$w7GiY_DW^* zvwJHW$}q^Wu>mQ;lX;1AG{Plws{m?_3N=Nm(<)?NGQ<9|LY{d{CNVCvWk<-XD(veLi!0D%;W<7$eUt#uKZvp_7+5)^c?4KKdtI?6P zuZMZh^6ZydI0@^t8wJc!*f)u%eO>%2On>+I2U>duZej{h`JcK*|CB4h0T;2(G%Jf6 zxxE?U>OlXg9xQ|>8ncSW$W1s`{GEvTJK5)teYrDi|AgRd|KuRq{&QVy%F|A1%JNJ4 zZwW7A01)q@F6|w7*w*MNl2LzxhduxIHf)*RSh;DC z04S&7l(Z-2r;yN77?e_ZofQ=xkXYn;nSItDsGln%?0%cRw(YmcAg-^|G6aT}_Ts{K zp;3Q8X-+WmIFJM4LrK5YRv<3W%4BKENXSJ9LVY>;VEyje$CZuMkJpwq@2{^gdoruM zsB-IUgNc<%v)X>nfF-j$Id=+_^QWVd)}xO1Tzp7NkmZU$q=Jm7lpX;$aUHGTkqkAE zj`B)nx6}04Z;FqY4E)?}j{U?8N8oH_~00MBM*yB zppe)i_rlit7?mL?G#dnb@O!XGQ+UvEeq$ZCBfAG%Z2;(kzf1tJ4~I?yhYs6cwy)oj ztpJe#Feg61is~>}v{&hsBsVHE_WOz8l?YQKB9tzm41x7lN7~Owjtprmxe>MEB`R1( zVVRkOTr!YO4)U5C#IhmjJj8%8(&=LuISC~bghs*Ut4U<6G*}QUk`WCWkp{&>r6ba? zpE0bjk~9h1j}=54#MoPsAo36ei2+f9MQW&00MZfqBa{d- zBfE{z#75}IE_GjjVu?QujRqq<9HsLW(75Lyq$JI-`g+lBj*Qa8zwJE)e(McaQ9SL( z#wno6;2TF$myvX&x-Qm8N7Ub9-!Qz6+sO1+divLh#qMEda>jaO683*_9mtjLX1Z>a z?qwt3cJNJ@YfMBLc$@Udj5+3faK>-O$8992X%Z9#@r>JruKtzYgJ8bW4vfL5O=q1% z*2UOuR>d~zG*&4&2fCEJ2?Fp44`U$!{M|t;R7qw9ql2;WSzek=Hjji76p;1tjq-{>PTg7E*jNQr-dkEby!C7o}V6%UP9xP-{pD~KC z<2k7C0-sKlpoao+H@r7T+lDsZ|aE?>I63JywrHS!C5Q z<~hRx9ny&_7(gK_f*ZOqAU#kiq0$B92fTd(74typf}^&d;y~mT)j(nPaoqnSaqptg zj1is*m?=zRJ*ITO55tNVL#9^SAz=m^;^1wOf}1fK_s^Jx;YKqObNRi?xHoV+_G;_= z>;Gn*%m!}Z+uN_U(!U?G677lwN62;P>l<;xW^%kj7`n$Q{Jo_2i(}TZ`fCxIC6)@M z>ZgaMvX#$3{{Cn6%Q36bN~FrXvumg%t5M8?i#jB{I^w$ps5h>=LXPS@c=cJ%nBv~B zZsyEblNOyVA`S{rq=h8a<5+p%0w+%?>iYW1@+Kz@f})uIy;p*C;xEuTE;RcF?FqzX z^nuKs4k!^EEkC#w+(#J%PlUgwf*e{`JV5cij_TLw7+)Xej|q{<@CMf$5Z|@X4+>1cl@O($@mMzwp_PwG^BZmsdYQ;M(8X2+ZG=s1uUB4Ol71R_mbHYL>d?db9 zheyu4oDRjV&)&S8*}|2Os*gL^-=I5RVrd*^7T~S(It82-ytH)`d=ss`fPr-Nx;GC| zYKYegbbkOC=KHm-`84+ckzpU=(v&e)=vs<5KgPvAt2TFiX;Qy2fcHCMQ=zMcV4`rS z3&c>u6e$-cy85X;YkI<(0oHI`h~&2j)+l-)*ULApq@R{lOnUWNDAW8kAmLY8%jiA0 zAO|EZ>N<|+|32h7Gt4t(xJg*>FT}IbI==JfR2{rw2i7)jvG6#1*P*j?&0;ld4zS-- z0XC0IMec!tcLdAOS0}KFC)0V6*&}AcX8d>OHq$tE5yYI0_hCECd2xh zg>__M9d4B65F^(Q&%+6_;ip>QU-p*?1Nnn^=8| zN%&Ki(sm14KF9euX}n6ZGKU_O)GC2C()UCE!y$)KAVO>kH2^hRu~)JOvS@-tRv+b` zj_A-QMCagWjM`7?;FmOoZubTNkeU*ur)+UVfs{J+uSo%S7ScoblPmOD0Kbph2#4BN zLa396zzN~9)o`}V_|i1hb3@$2u@a;cCCHEx(0Cj_JWggw)WgR}N9#4@6|_rfHT|tn z+M>SwI250vMO}{0-ne^jWgT~;ch@RwcQ-3HS8lDYt=t??16Gnm7mnVD+D$ra%uGMW z9_}m&ixdcl3t`P85TC%|iiQj>~AT%tvLWfP*?Xe1joVuKS|#lb`iL#9O)|%G)EkkCkj@?cM#yQEoLO#GgJAT7 z(q)?e9U4*mv^x5^378TD_3bvTAt)!8?sB!+)ej~)E>RR$X3I6HxTDZ2W zI4txVC@$s+k}k+j)Qn(&Kk_K@s+yo)4SjA%KfpI|Rn4phpLXhAGL2WK&*W7#Z~6wl zx;b4(p1#AcL(7QX-R}H;UZ&$^0#!YURQVlUCa8uzvbs22Qb4xO4Akbhdr&LAs zKkx)(2d-XpiWW*M?-tYeors@P_|4xADy2NyQJ<9XuI4S@rPR zxHpzl{r_aK(Em>sN{{kMdx)b5WOg^KH-iN(1$kGQRxQ;alsQ#Z|3yUI+7oK4t9lCm bc)4*hknT05+xVXXF!v0K9B$a@nKSIU literal 0 HcmV?d00001 diff --git a/src/semantic/visitors/__pycache__/type_collector.cpython-37.pyc b/src/semantic/visitors/__pycache__/type_collector.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..62e0207a20eb3d5abd763ee83a6fe00e52c449c0 GIT binary patch literal 1690 zcmZuxOK;pZ5GJYjzG^$J8=&Z|mo1Q$;W$77xJ8|{(+657g`K1!&@B;*zb1;JU@K?$In+TA%CMWf50YR z!f1{`2qI`fO3Eokoq^6cD;@5XE_bcZ0iVac(&v5|@SqHNSVlZ5JG@hNdDq6c5Yyv5 zt9wPi9PokF{o;cI@)Z$*2rq~T<slE1;AA3)feD}0xj@}SHrlG4eF(1(tsXwC>%wZmHx+FyrO~%c0su#-Ahk6S5&yd zyCCP3```&=ctvF>{68rm_b%LpKLUSb{o&l-vSIpI*0?STsI^uZn^k~c9Ag;G5(q)g zNJ7piNGJw~qr(egLx{k-=cwCp0ypSr+fY&?O%(}C&zOf!RDvO)h*~K#k zn^*&kB%9+HO-@XhBzcwVB#96MGD@gVPuFe$9?gS{Th&6|z)xX?#gA)em@T3qQ@6mS zK0<*ITk#=i#ngm!*N?czl`2jVe{O?L{4Cg(^v)eOH!^vDr(i)eRY zF|fRa<$&ccEElX`VR>72hfC-S5nM4!j&GmQqiBcxG1X70C*%w6np9&JB8c$^%(c(Ti*{oU^#SrrIDvaA?(6{1(mC_)g%!?S4={uxvk z1s;g%;Z!$MGSxD{2-5@pi&UjLud7DghWVj$O|)@f`hRTOAWYO?zY!MF!8>n{-ryJW zTYkR<_l63kFL^BX%F6z{Ri6bf4l$y literal 0 HcmV?d00001 diff --git a/src/semantic/visitors/__pycache__/var_collector.cpython-37.pyc b/src/semantic/visitors/__pycache__/var_collector.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8d063d60dd8761fc5f3141517ce94d8910091573 GIT binary patch literal 6496 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 k6;{mFioHG@5LJU;F6d_NzzMdiBzLfPR7;M1& literal 0 HcmV?d00001 diff --git a/src/semantic/visitors/format_visitor.py b/src/semantic/visitors/format_visitor.py new file mode 100644 index 00000000..0ff1c4f8 --- /dev/null +++ b/src/semantic/visitors/format_visitor.py @@ -0,0 +1,128 @@ +from semantic.visitors import visitor +from utils.ast import * + +class FormatVisitor(object): + @visitor.on('node') + def visit(self, node, tabs): + ans = '\t' * tabs + f'\\__{node.__class__.__name__}' + return ans + + @visitor.when(ProgramNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ProgramNode [ ... ]' + statements = '\n'.join(self.visit(child, tabs + 1) for child in node.declarations) + return f'{ans}\n{statements}' + + @visitor.when(ClassDeclarationNode) + def visit(self, node, tabs=0): + parent = '' if node.parent is None else f": {node.parent}" + ans = '\t' * tabs + f'\\__ClassDeclarationNode: class {node.id} {parent} {{ ... }}' + features = '\n'.join(self.visit(child, tabs + 1) for child in node.features) + return f'{ans}\n{features}' + + @visitor.when(AttrDeclarationNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__AttrDeclarationNode: {node.id} : {node.type}' + return f'{ans}' + + @visitor.when(VarDeclarationNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__VarDeclarationNode: {node.id} : {node.type} = ' + expr = self.visit(node.expr, tabs + 1) + return f'{ans}\n{expr}' + + @visitor.when(AssignNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__AssignNode: {node.id} <- ' + expr = self.visit(node.expr, tabs + 1) + return f'{ans}\n{expr}' + + @visitor.when(FuncDeclarationNode) + def visit(self, node, tabs=0): + params = ', '.join(':'.join(param) for param in node.params) + ans = '\t' * tabs + f'\\__FuncDeclarationNode: {node.id}({params}) : {node.type} -> ' + body = f'{self.visit(node.body, tabs + 1)}' + # body = f'\n'#{self.visit(node.body, tabs + 1)}' #.join(self.visit(child, tabs + 1) for child in node.body) + return f'{ans}\n{body}' + + @visitor.when(BinaryNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ {node.__class__.__name__} ' + left = self.visit(node.left, tabs + 1) + right = self.visit(node.right, tabs + 1) + return f'{ans}\n{left}\n{right}' + + @visitor.when(UnaryNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__{node.__class__.__name__} ' + expr = self.visit(node.expr, tabs + 1) + return f'{ans}\n{expr}' + + @visitor.when(WhileNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__{node.__class__.__name__}: while loop pool' + cond = self.visit(node.cond, tabs + 1) + expr = self.visit(node.expr, tabs + 1) + return f'{ans}\n{cond}\n{expr}' + + @visitor.when(ConditionalNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ {node.__class__.__name__}: if then else fi' + cond = self.visit(node.cond, tabs + 1) + stm = self.visit(node.stm, tabs + 1) + else_stm = self.visit(node.else_stm, tabs + 1) + return f'{ans}\n{cond}\n{stm}\n{else_stm}' + + @visitor.when(CaseNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ {node.__class__.__name__}: case of esac' + expr = self.visit(node.expr, tabs + 1) + case_list = '\n'.join(self.visit(child, tabs + 1) for child in node.case_list) + return f'{ans}\n{expr}\n{case_list}' + + @visitor.when(OptionNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ {node.__class__.__name__}: {node.id} : {node.typex} -> ' + expr = self.visit(node.expr, tabs + 1) + return f'{ans}\n{expr}' + + @visitor.when(BlockNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ {node.__class__.__name__} ' + '{ }' + expr = '\n'.join(self.visit(child, tabs + 1) for child in node.expr_list) + return f'{ans}\n{expr}' + + @visitor.when(AtomicNode) + def visit(self, node, tabs=0): + return '\t' * tabs + f'\\__ {node.__class__.__name__}: {node.lex}' + + @visitor.when(BaseCallNode) + def visit(self, node, tabs=0): + obj = self.visit(node.obj, tabs + 1) + ans = '\t' * tabs + f'\\__BaseCallNode: @{node.type}.{node.id}(, ..., )' + args = '\n'.join(self.visit(arg, tabs + 1) for arg in node.args) + return f'{ans}\n{obj}\n{args}' + + @visitor.when(CallNode) + def visit(self, node, tabs=0): + obj = self.visit(node.obj, tabs + 1) + ans = '\t' * tabs + f'\\__CallNode: .{node.id}(, ..., )' + args = '\n'.join(self.visit(arg, tabs + 1) for arg in node.args) + return f'{ans}\n{obj}\n{args}' + + @visitor.when(StaticCallNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__StaticCallNode: {node.id}(, ..., )' + args = '\n'.join(self.visit(arg, tabs + 1) for arg in node.args) + return f'{ans}\n{args}' + + @visitor.when(InstantiateNode) + def visit(self, node, tabs=0): + return '\t' * tabs + f'\\__ InstantiateNode: new {node.lex}()' + + @visitor.when(LetNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ {node.__class__.__name__} let in ' + init_list = '\n'.join(self.visit(arg, tabs + 1) for arg in node.init_list) + expr = self.visit(node.expr, tabs + 1) + return f'{ans}\n{init_list}\n{expr}' diff --git a/src/semantic/visitors/selftype_visitor.py b/src/semantic/visitors/selftype_visitor.py new file mode 100644 index 00000000..84f6f05d --- /dev/null +++ b/src/semantic/visitors/selftype_visitor.py @@ -0,0 +1,105 @@ +from semantic.tools import * +from semantic.visitors import visitor +from utils.ast import * + +class SelfTypeVisitor(object): + def __init__(self, context:Context, errors=[]): + self.context:Context = context + self.errors = errors + self.current_type:Type = None + self.current_method:Method = None + + @visitor.on('node') + def visit(self, node, scope): + pass + + @visitor.when(ProgramNode) + def visit(self, node:ProgramNode, scope:Scope): + for declaration, child_scope in zip(node.declarations, scope.children): + self.visit(declaration, child_scope) + + + @visitor.when(ClassDeclarationNode) + def visit(self, node:ClassDeclarationNode, scope:Scope): + self.current_type = self.context.get_type(node.id, node.pos) + + fd = [feat for feat in node.features if isinstance(feat, FuncDeclarationNode)] + + for feat in node.features: + if isinstance(feat, AttrDeclarationNode): + self.visit(feat, scope) + + for feat, child_scope in zip(fd, scope.children): + self.visit(feat, child_scope) + + + @visitor.when(AttrDeclarationNode) + def visit(self, node:AttrDeclarationNode, scope:Scope): + vinfo = scope.find_variable(node.id) + if node.type == 'SELF_TYPE': + vinfo.type = self.current_type + + + @visitor.when(FuncDeclarationNode) + def visit(self, node:FuncDeclarationNode, scope:Scope): + self.current_method = self.current_type.get_method(node.id, node.pos) + + for pname, ptype in node.params: + if ptype.value == 'SELF_TYPE': + varinfo = scope.find_variable(pname) + varinfo.type = self.current_type + self.current_type.change_type(self.current_method, pname, self.current_type) + + + if node.type == 'SELF_TYPE': + self.current_method.return_type = self.current_type + + self.visit(node.body, scope) + + + @visitor.when(VarDeclarationNode) + def visit(self, node:VarDeclarationNode, scope:Scope): + varinfo = scope.find_variable(node.id) + + if node.type == 'SELF_TYPE': + varinfo.type = self.current_type + + @visitor.when(AssignNode) + def visit(self, node:AssignNode, scope:Scope): + varinfo = scope.find_variable(node.id) + + if varinfo.type.name == 'SELF_TYPE': + varinfo.type = self.current_type + + + @visitor.when(BlockNode) + def visit(self, node:BlockNode, scope:Scope): + for exp in node.expr_list: + self.visit(exp, scope) + + + @visitor.when(LetNode) + def visit(self, node:LetNode, scope:Scope): + child_scope = scope.expr_dict[node] + for init in node.init_list: + self.visit(init, child_scope) + self.visit(node.expr, child_scope) + + @visitor.when(CaseNode) + def visit(self, node:CaseNode, scope:Scope): + self.visit(node.expr, scope) + + new_scope = scope.expr_dict[node] + for case, c_scope in zip(node.case_list, new_scope.children): + self.visit(case, c_scope) + + + @visitor.when(OptionNode) + def visit(self, node:OptionNode, scope:Scope): + var_info = scope.find_variable(node.id) + self.visit(node.expr) + + if var_info.type.name == 'SELF_TYPE': + var_info.type = self.current_type + + \ No newline at end of file diff --git a/src/semantic/visitors/type_builder.py b/src/semantic/visitors/type_builder.py new file mode 100644 index 00000000..740057af --- /dev/null +++ b/src/semantic/visitors/type_builder.py @@ -0,0 +1,86 @@ +from utils.errors import SemanticError, AttributesError, TypesError, NamesError +from semantic.tools import Attribute, Method, Type +from semantic.tools import VoidType, ErrorType +from semantic.tools import Context +from semantic.visitors import visitor +from utils.ast import * + +class TypeBuilder: + def __init__(self, context:Context, errors=[]): + self.context:Context = context + self.current_type:Type = None + self.errors:list = errors + + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node:ProgramNode): + for dec in node.declarations: + self.visit(dec) + + + + @visitor.when(ClassDeclarationNode) + def visit(self, node:ClassDeclarationNode): + try: + self.current_type = self.context.get_type(node.id, node.pos) + except SemanticError as e: + self.current_type = ErrorType() + self.errors.append(e) + + if node.parent is not None: + try: + parent = self.context.get_type(node.parent, node.pos) + current = parent + while current is not None: + if current.name == self.current_type.name: + error_text = TypesError.CIRCULAR_DEPENDENCY %(parent.name, self.current_type.name) + raise TypesError(error_text, *node.pos) + current = current.parent + except SemanticError as e: + parent = ErrorType() + self.errors.append(e) + self.current_type.set_parent(parent) + + + for feature in node.features: + self.visit(feature) + + + @visitor.when(FuncDeclarationNode) + def visit(self, node:FuncDeclarationNode): + args_names = [] + args_types = [] + for name, type_ in node.params: + try: + args_names.append(name) + args_types.append(self.context.get_type(type_.value, type_.pos)) + except SemanticError as e: + args_types.append(ErrorType(type_.pos)) + self.errors.append(e) + + try: + return_type = self.context.get_type(node.type, node.type_pos) + except SemanticError as e: + return_type = ErrorType(node.type_pos) + self.errors.append(e) + + try: + self.current_type.define_method(node.id, args_names, args_types, return_type) + except SemanticError as e: + self.errors.append(e) + + @visitor.when(AttrDeclarationNode) + def visit(self, node:AttrDeclarationNode): + try: + attr_type = self.context.get_type(node.type, node.pos) + except SemanticError as e: + attr_type = ErrorType(node.type_pos) + self.errors.append(e) + + try: + self.current_type.define_attribute(node.id, attr_type, node.pos) + except SemanticError as e: + self.errors.append(e) \ No newline at end of file diff --git a/src/semantic/visitors/type_checker.py b/src/semantic/visitors/type_checker.py new file mode 100644 index 00000000..1277dc09 --- /dev/null +++ b/src/semantic/visitors/type_checker.py @@ -0,0 +1,320 @@ +from semantic.visitors import visitor +from semantic.tools import * +from utils.utils import get_common_basetype +from utils.ast import * +from utils.errors import SemanticError, AttributesError, TypesError, NamesError + + +class TypeChecker: + def __init__(self, context:Context, errors=[]): + self.context = context + self.current_type = None + self.current_method = None + self.errors = errors + + @visitor.on('node') + def visit(self, node, scope): + pass + + @visitor.when(ProgramNode) + def visit(self, node:ProgramNode, scope:Scope): + for declaration, new_scope in zip(node.declarations, scope.children): + self.visit(declaration, new_scope) + + def _get_type(self, ntype:Type, pos): + try: + return self.context.get_type(ntype, pos) + except SemanticError as e: + self.errors.append(e) + return ErrorType() + + + def _get_method(self, typex:Type, name:str, pos) -> Method: + try: + return typex.get_method(name, pos) + except SemanticError as e: + if type(typex) != ErrorType and type(typex) != AutoType: + self.errors.append(e) + return MethodError(name, [], [], ErrorType()) + + + @visitor.when(ClassDeclarationNode) + def visit(self, node:ClassDeclarationNode, scope:Scope): + self.current_type = self.context.get_type(node.id, node.pos) + + fd = [feat for feat in node.features if isinstance(feat, FuncDeclarationNode)] + + for feat in node.features: + if isinstance(feat, AttrDeclarationNode): + self.visit(feat, scope) + + for feat, child_scope in zip(fd, scope.children): + self.visit(feat, child_scope) + + + @visitor.when(AttrDeclarationNode) + def visit(self, node:AttrDeclarationNode, scope:Scope): + varinfo = scope.find_variable(node.id) + if node.expr is not None: + typex = self.visit(node.expr, scope) + if not typex.conforms_to(varinfo.type): + error_text = TypesError.INCOMPATIBLE_TYPES %(typex.name, varinfo.type.name) + self.errors.append(TypesError(error_text, node.pos)) + return ErrorType() + return typex + return self._get_type(node.type, node.type_pos) + + + + @visitor.when(FuncDeclarationNode) + def visit(self, node:FuncDeclarationNode, scope:Scope): + parent = self.current_type.parent + ptypes = [param[1] for param in node.params] + + self.current_method = method = self.current_type.get_method(node.id, node.pos) + if parent is not None: + try: + old_meth = parent.get_method(node.id, node.pos) + error_text = AttributesError.WRONG_SIGNATURE % (node.id, parent.name) + if old_meth.return_type.name != method.return_type.name: + if node.type != 'SELF_TYPE': + self.errors.append(AttributesError(error_text, *node.pos)) + elif any(type1.name != type2.name for name, type1, type2 in zip(ptypes, method.param_types, old_meth.param_types)): + if name != 'SELF_TYPE': + self.errors.append(AttributesError(error_text, *node.pos)) + except SemanticError: + pass + + result = self.visit(node.body, scope) + + if not result.conforms_to(method.return_type): + error_text = TypesError.INCOMPATIBLE_TYPES %(method.return_type.name, result.name) + self.errors.append(TypesError(error_text, *node.type_pos)) + + + @visitor.when(VarDeclarationNode) + def visit(self, node:VarDeclarationNode, scope:Scope): + + var_info = scope.find_variable(node.id) + vtype = var_info.type + + if node.expr != None: + typex = self.visit(node.expr, scope) + if not typex.conforms_to(var_info.type): + error_text = TypesError.INCOMPATIBLE_TYPES %(vtype.name, typex.name) + self.errors.append(TypesError(error_text, *node.type_pos)) + return typex + return vtype + + + @visitor.when(AssignNode) + def visit(self, node:AssignNode, scope:Scope): + vinfo = scope.find_variable(node.id) + vtype = vinfo.type + + typex = self.visit(node.expr, scope) + + if not typex.conforms_to(vtype): + error_text = TypesError.INCOMPATIBLE_TYPES %(vtype.name, typex.name) + self.errors.append(TypesError(error_text, *node.pos)) + return typex + + + def _check_args(self, meth:Method, scope:Scope, args, pos): + arg_types = [self.visit(arg, scope) for arg in args] + + if len(arg_types) > len(meth.param_types): + error_text = SemanticError.TOO_MANY_ARGUMENTS % meth.name + self.errors.append(SemanticError(error_text, *pos)) + elif len(arg_types) < len(meth.param_types): + for arg, arg_info in zip(meth.param_names[len(arg_types):], args[len(arg_types):]): + error_text = SemanticError.MISSING_PARAMETER % (arg, meth.name) + self.errors.append(SemanticError(error_text, *arg_info.pos)) + + for atype, ptype, arg_info in zip(arg_types, meth.param_types, args): + if not atype.conforms_to(ptype): + error_text = TypesError.INCOMPATIBLE_TYPES % (ptype.name, atype.name) + self.errors.append(TypesError(error_text, *arg_info.pos)) + + + @visitor.when(CallNode) + def visit(self, node:CallNode, scope:Scope): + stype = self.visit(node.obj, scope) + + meth = self._get_method(stype, node.id, node.pos) + self._check_args(meth, scope, node.args, node.pos) + return meth.return_type + + + @visitor.when(BaseCallNode) + def visit(self, node:BaseCallNode, scope:Scope): + obj = self.visit(node.obj, scope) + typex = self._get_type(node.type, node.type_pos) + + if not obj.conforms_to(typex): + error_text = TypesError.INCOMPATIBLE_TYPES % (typex.name, obj.name) + self.errors.append(TypesError(error_text, *node.type_pos)) + return ErrorType() + + meth = self._get_method(typex, node.id, node.pos) + self._check_args(meth, scope, node.args, node.pos) + return meth.return_type + + + @visitor.when(StaticCallNode) + def visit(self, node:StaticCallNode, scope:Scope): + typex = self.current_type + + meth = self._get_method(typex, node.id, node.pos) + self._check_args(meth, scope, node.args, node.pos) + return meth.return_type + + + @visitor.when(ConstantNumNode) + def visit(self, node:ConstantNumNode, scope:Scope): + return IntType(node.pos) + + + @visitor.when(ConstantBoolNode) + def visit(self, node:ConstantBoolNode, scope:Scope): + return BoolType(node.pos) + + + @visitor.when(ConstantStrNode) + def visit(self, node:ConstantStrNode, scope:Scope): + return StringType(node.pos) + + + @visitor.when(VariableNode) + def visit(self, node:VariableNode, scope:Scope): + return scope.find_variable(node.lex).type + + + @visitor.when(InstantiateNode) + def visit(self, node:InstantiateNode, scope:Scope): + return self._get_type(node.lex, node.pos) + + + @visitor.when(WhileNode) + def visit(self, node:WhileNode, scope:Scope): + cond = self.visit(node.cond, scope) + + if cond.name != 'Bool': + self.errors.append(INCORRECT_TYPE % (cond.name, 'Bool')) + return self.visit(node.expr, scope) + + + @visitor.when(IsVoidNode) + def visit(self, node:IsVoidNode, scope:Scope): + self.visit(node.expr, scope) + return BoolType() + + + @visitor.when(ConditionalNode) + def visit(self, node:ConditionalNode, scope:Scope): + cond = self.visit(node.cond, scope) + + if cond.name != 'Bool': + error_text = TypesError.INCORRECT_TYPE % (cond.name, 'Bool') + self.errors.append(TypesError(error_text, node.pos)) + + true_type = self.visit(node.stm, scope) + false_type = self.visit(node.else_stm, scope) + + if true_type.conforms_to(false_type): + return false_type + elif false_type.conforms_to(true_type): + return true_type + else: + error_text = TypesError.INCOMPATIBLE_TYPES % (false_type.name, true_type.name) + self.errors.append(TypesError(error_text, node.pos)) + return ErrorType() + + + @visitor.when(BlockNode) + def visit(self, node:BlockNode, scope:Scope): + value = None + for exp in node.expr_list: + value = self.visit(exp, scope) + return value + + + @visitor.when(LetNode) + def visit(self, node:LetNode, scope:Scope): + child_scope = scope.expr_dict[node] + for init in node.init_list: + self.visit(init, child_scope) + return self.visit(node.expr, child_scope) + + + @visitor.when(CaseNode) + def visit(self, node:CaseNode, scope:Scope): + type_expr = self.visit(node.expr, scope) + + new_scope = scope.expr_dict[node] + types = [] + var_types = [] + for case, c_scope in zip(node.case_list, new_scope.children): + t, vt = self.visit(case, c_scope) + types.append(t) + var_types.append(vt) + + for t in var_types: + if not type_expr.conforms_to(t): + error_text = TypesError.INCOMPATIBLE_TYPES % (t.name, type_expr.name) + self.errors.append(TypesError(error_text, *node.pos)) + return ErrorType() + + return get_common_basetype(types) + + + @visitor.when(OptionNode) + def visit(self, node:OptionNode, scope:Scope): + var_info = scope.find_variable(node.id) + typex = self.visit(node.expr, scope) + return typex, var_info.type + + + @visitor.when(BinaryArithNode) + def visit(self, node:BinaryArithNode, scope:Scope): + ltype = self.visit(node.left, scope) + rtype = self.visit(node.right, scope) + if ltype != rtype != IntType(): + error_text = TypesError.BOPERATION_NOT_DEFINED %('Arithmetic', ltype.name, rtype.name) + self.errors.append(TypesError(error_text, *node.pos)) + return ErrorType() + return IntType() + + + @visitor.when(BinaryLogicalNode) + def visit(self, node:BinaryLogicalNode, scope:Scope): + ltype = self.visit(node.left, scope) + rtype = self.visit(node.right, scope) + if ltype != rtype != IntType(): + error_text = TypesError.BOPERATION_NOT_DEFINED %('Logical', ltype.name, rtype.name) + self.errors.append(TypesError(error_text, *node.pos)) + return ErrorType() + + return BoolType() + + + @visitor.when(UnaryLogicalNode) + def visit(self, node:UnaryLogicalNode, scope:Scope): + ltype = self.visit(node.expr, scope) + if ltype != BoolType(): + error_text = TypesError.UOPERATION_NOT_DEFINED %('Logical', ltype.name) + self.errors.append(TypesError(error_text, *node.pos)) + return ErrorType() + + return BoolType() + + + + @visitor.when(UnaryArithNode) + def visit(self, node:UnaryArithNode, scope:Scope): + ltype = self.visit(node.expr, scope) + if ltype != IntType(): + error_text = TypesError.UOPERATION_NOT_DEFINED %('Arithmetic', ltype.name) + self.errors.append(TypesError(error_text, *node.pos)) + return ErrorType() + return IntType() \ No newline at end of file diff --git a/src/semantic/visitors/type_collector.py b/src/semantic/visitors/type_collector.py new file mode 100644 index 00000000..caa046fa --- /dev/null +++ b/src/semantic/visitors/type_collector.py @@ -0,0 +1,34 @@ +from semantic.tools import SemanticError +from semantic.tools import Attribute, Method, Type +from semantic.tools import VoidType, ErrorType, StringType, BoolType, IntType, ObjectType, AutoType +from semantic.tools import Context +from semantic.visitors import visitor +from utils.ast import * + +class TypeCollector(object): + def __init__(self, errors=[]): + self.context = None + self.errors = errors + + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node:ProgramNode): + self.context = Context() + self.context.types['String'] = StringType() + self.context.types['Int'] = IntType() + self.context.types['Object'] = ObjectType() + self.context.types['Bool'] = BoolType() + self.context.types['AUTO_TYPE'] = AutoType() + self.context.create_type('SELF_TYPE', (0, 0)) + for dec in node.declarations: + self.visit(dec) + + @visitor.when(ClassDeclarationNode) + def visit(self, node:ClassDeclarationNode): + try: + self.context.create_type(node.id, node.pos) + except SemanticError as e: + self.errors.append(e) \ No newline at end of file diff --git a/src/semantic/visitors/var_collector.py b/src/semantic/visitors/var_collector.py new file mode 100644 index 00000000..e8dc47a8 --- /dev/null +++ b/src/semantic/visitors/var_collector.py @@ -0,0 +1,215 @@ +from semantic.visitors import visitor +from semantic.tools import * +from utils.errors import SemanticError, AttributesError, TypesError, NamesError +from utils.ast import * + +class VarCollector: + def __init__(self, context=Context, errors=[]): + self.context = context + self.current_type = None + self.current_method = None + self.errors = errors + + @visitor.on('node') + def visit(self, node, scope): + pass + + @visitor.when(ProgramNode) + def visit(self, node:ProgramNode, scope:Scope=None): + scope = Scope() + for declaration in node.declarations: + self.visit(declaration, scope.create_child()) + return scope + + + def copy_scope(self, scope:Scope, parent:Type): + if parent is None: + return + for attr in parent.attributes: + if scope.find_variable(attr.name) is None: + scope.define_attribute(attr) + self.copy_scope(scope, parent.parent) + + + @visitor.when(ClassDeclarationNode) + def visit(self, node:ClassDeclarationNode, scope:Scope): + self.current_type = self._get_type(node.id, node.pos) + scope.define_variable('self', self.current_type) + + for feat in node.features: + if isinstance(feat, AttrDeclarationNode): + self.visit(feat, scope) + + self.copy_scope(scope, self.current_type.parent) + + for feat in node.features: + if isinstance(feat, FuncDeclarationNode): + self.visit(feat, scope) + + + + @visitor.when(AttrDeclarationNode) + def visit(self, node:AttrDeclarationNode, scope:Scope): + scope.define_attribute(self.current_type.get_attribute(node.id, node.pos)) + + + @visitor.when(FuncDeclarationNode) + def visit(self, node:FuncDeclarationNode, scope:Scope): + # Ver si el método está definido en el padre + parent = self.current_type.parent + pnames = [param[0] for param in node.params] + ptypes = [param[1] for param in node.params] + + self.current_method = self.current_type.get_method(node.id, node.pos) + + new_scope = scope.create_child() + scope.functions[node.id] = new_scope + + # Añadir las variables de argumento + for pname, ptype in node.params: + new_scope.define_variable(pname, self._get_type(ptype.value, ptype.pos)) + + self.visit(node.body, new_scope) + + + def _get_type(self, ntype, pos): + try: + return self.context.get_type(ntype, pos) + except SemanticError as e: + self.errors.append(e) + return ErrorType() + + + @visitor.when(VarDeclarationNode) + def visit(self, node:VarDeclarationNode, scope:Scope): + if node.id == 'self': + error_text = SemanticError.SELF_IS_READONLY + self.errors.append(SemanticError(error_text, *node.pos)) + return + + if scope.is_defined(node.id): + var = scope.find_variable(node.id) + if var.type != ErrorType(): + error_text = SemanticError.LOCAL_ALREADY_DEFINED %(node.id, self.current_method.name) + self.errors.append(SemanticError(error_text, *node.pos)) + return + + vtype = self._get_type(node.type, node.type_pos) + var_info = scope.define_variable(node.id, vtype) + + if node.expr != None: + self.visit(node.expr, scope) + + + @visitor.when(AssignNode) + def visit(self, node:AssignNode, scope:Scope): + if node.id == 'self': + error_text = SemanticError.SELF_IS_READONLY + self.errors.append(SemanticError(error_text, *node.pos)) + return + + vinfo = scope.find_variable(node.id) + if vinfo is None: + error_text = NamesError.VARIABLE_NOT_DEFINED %(node.id, self.current_method.name) + self.errors.append(NamesError(error_text, *node.pos)) + vtype = ErrorType() + scope.define_variable(node.id, vtype) + else: + vtype = vinfo.type + + self.visit(node.expr, scope) + + @visitor.when(BlockNode) + def visit(self, node:BlockNode, scope:Scope): + for exp in node.expr_list: + self.visit(exp, scope) + + + @visitor.when(LetNode) + def visit(self, node:LetNode, scope:Scope): + n_scope = scope.create_child() + scope.expr_dict[node] = n_scope + for init in node.init_list: + self.visit(init, n_scope) + + self.visit(node.expr, n_scope) + + #no necesario + @visitor.when(BinaryNode) + def visit(self, node:BinaryNode, scope:Scope): + self.visit(node.left, scope) + self.visit(node.right, scope) + + + @visitor.when(UnaryNode) + def visit(self, node:UnaryNode, scope:Scope): + self.visit(node.expr, scope) + + + @visitor.when(VariableNode) + def visit(self, node:VariableNode, scope:Scope): + if not scope.is_defined(node.lex): + error_text = NamesError.VARIABLE_NOT_DEFINED %(node.lex, self.current_method.name) + self.errors.append(NamesError(error_text, *node.pos)) + vinfo = scope.define_variable(node.lex, ErrorType(node.pos)) + else: + vinfo = scope.find_variable(node.lex) + return vinfo.type + + + @visitor.when(WhileNode) + def visit(self, node:WhileNode, scope:Scope): + self.visit(node.cond, scope) + self.visit(node.expr, scope) + + + @visitor.when(ConditionalNode) + def visit(self, node:ConditionalNode, scope:Scope): + self.visit(node.cond, scope) + self.visit(node.stm, scope) + self.visit(node.else_stm, scope) + + @visitor.when(IsVoidNode) + def visit(self, node:IsVoidNode, scope:Scope): + self.visit(node.expr, scope) + + @visitor.when(CallNode) + def visit(self, node:CallNode, scope:Scope): + self.visit(node.obj, scope) + for arg in node.args: + self.visit(arg, scope) + + + @visitor.when(BaseCallNode) + def visit(self, node:BaseCallNode, scope:Scope): + self.visit(node.obj, scope) + for arg in node.args: + self.visit(arg, scope) + + + @visitor.when(StaticCallNode) + def visit(self, node:StaticCallNode, scope:Scope): + for arg in node.args: + self.visit(arg, scope) + + + @visitor.when(CaseNode) + def visit(self, node:CaseNode, scope:Scope): + self.visit(node.expr, scope) + + new_scp = scope.create_child() + scope.expr_dict[node] = new_scp + + for case in node.case_list: + self.visit(case, new_scp.create_child()) + + + @visitor.when(OptionNode) + def visit(self, node:OptionNode, scope:Scope): + typex = self.context.get_type(node.typex, node.type_pos) + + self.visit(node.expr, scope) + scope.define_variable(node.id, typex) + + + \ No newline at end of file diff --git a/src/semantic/visitors/visitor.py b/src/semantic/visitors/visitor.py new file mode 100644 index 00000000..96484283 --- /dev/null +++ b/src/semantic/visitors/visitor.py @@ -0,0 +1,80 @@ +# The MIT License (MIT) +# +# Copyright (c) 2013 Curtis Schlak +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +import inspect + +__all__ = ['on', 'when'] + +def on(param_name): + def f(fn): + dispatcher = Dispatcher(param_name, fn) + return dispatcher + return f + + +def when(param_type): + def f(fn): + frame = inspect.currentframe().f_back + func_name = fn.func_name if 'func_name' in dir(fn) else fn.__name__ + dispatcher = frame.f_locals[func_name] + if not isinstance(dispatcher, Dispatcher): + dispatcher = dispatcher.dispatcher + dispatcher.add_target(param_type, fn) + def ff(*args, **kw): + return dispatcher(*args, **kw) + ff.dispatcher = dispatcher + return ff + return f + + +class Dispatcher(object): + def __init__(self, param_name, fn): + frame = inspect.currentframe().f_back.f_back + top_level = frame.f_locals == frame.f_globals + self.param_index = self.__argspec(fn).args.index(param_name) + self.param_name = param_name + self.targets = {} + + def __call__(self, *args, **kw): + typ = args[self.param_index].__class__ + d = self.targets.get(typ) + if d is not None: + return d(*args, **kw) + else: + issub = issubclass + t = self.targets + ks = t.keys() + ans = [t[k](*args, **kw) for k in ks if issub(typ, k)] + if len(ans) == 1: + return ans.pop() + return ans + + def add_target(self, typ, target): + self.targets[typ] = target + + @staticmethod + def __argspec(fn): + # Support for Python 3 type hints requires inspect.getfullargspec + if hasattr(inspect, 'getfullargspec'): + return inspect.getfullargspec(fn) + else: + return inspect.getargspec(fn) diff --git a/src/test.cl b/src/test.cl new file mode 100644 index 00000000..1aaf9e97 --- /dev/null +++ b/src/test.cl @@ -0,0 +1,35 @@ +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 - 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + testing2(1, 2) + }; + + testing4(): Int { + test1 <- ~(1 + 2 + 3 + 4 + 5) -- The left side must be an expression + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; +}; \ No newline at end of file diff --git a/src/tools/__pycache__/errors.cpython-37.pyc b/src/tools/__pycache__/errors.cpython-37.pyc deleted file mode 100644 index 178152b6622a5d516a0109e6102c7fa2290b3ce3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4605 zcmbtX-EQN?6(%K0mgJwc9eeAv$#%M_iwMbD#_k44i~d9_)2^^G`|i ziQl~Z`#+Wy<=-TXFAXoB;SO)m94TDk>J4t8yvds?hq9-ogXC z2*p&nV&=Y4&Q-4R+)c^M3ytTwcB8ye%>v#FyqLbjE?&A(%q3pt6+BDdD4JrHvHo&W zZUlj+OBqOqwoey5Nfq7UduSr%jq)$`TK!H{mFwKKV&$&$X!Bgb5~@+vl0rBf2$_^D z%k|yJvJ%a6eUTKMz#H~`OwdB%ohMo(UPqGFmjyIcH7Q$`G!^+O@vmu3hs2 z@2a-{`01yg=ue+e`{a|~AJ!~AbcVvSYnFBT*V@x4s5Kh3M$jL)o{%*M+j!)Rq(_hU zAMe*f>C_^0hc!X_3-<WW%a^Wyh z>Xc3h}?!IDa<(~7PJVhM6cN|ju^HPtnpFr$qorrKzkYvl`Qe3$&3GyX$M zz-O8*FT(k1CFugKC;HZ=`pEY)no5|LYWgi+xJtUd1c!KJ@5)#j?H}+Fmx2vL-1F zWB`&!SJQ1u+KAjhldO)2>PlfnThU7SwBJG3x;~*Si$#9O1 zwvT-BGv0#d$1%@!JB5)T{#>eP5{v|k$5VY8*nZJLm> za00+ICM6kkA9ou3B~{C5xwLP->-RD9uIqW;EO5<)+mTF*W=WK@)QW^#;gnD-$z}`g zae@nJ4=!CN!{gWK1K#5z5>5o?h79O1xZ4x2g^VkDr_=7FZjK+E`ZP`UUEhubXJEPO zUl3GbWcyLPrne87>l09Y02kjM$#>^H=uZ9^*{%=hh92O(w59D}`I#u2i{CHFnLnT6 zQa@M8og@6-|LM+WKwQ29qTIoslhrYRz4mk6NVZRn1HGqrj+;ikryp3|UZ-gsCCk{P z)o33d>qalBkT4!FPFt;!umFDA4Dm}{vXXRK%uK2Ko%7@wUP6K9~g8($eTh1A9cUM2tR zkroQ^QBYCe|K-iHfs~xZ&gZkaOp0?Mh3~kO&DhXqE=Lf!=dMF33z>}i?EWh^3P^y% zzZ?o=Er#g($_?FDo`^quVN2J>Tb9>`A)@S+I1i-2gJKN@iF@G-z7P)i5IbFj!JjZ^ zjKS7qV~hQ7-aqXk0-ouI?T&8MyWQrILHu6;2$}RLsk{XU_00$5V~pIT_w6hvN?BQp z3|Hn<1C*0;4@FG|&PTK0jMAGV3~*Y)!+knbSmX|ZFs`+6d?G|}=D68G!o@ktL~?%g zwE$Y_F=P8Yec6j2G;E*F8>GIkaPVfst`B5s;$Hk@H)M1qr)!4H27WaCt*gerd;6cj zf^_x8(0>5WErR|z;V?>%TNAgp9$4)Yy;JWs+lIN>G>`yKAUtd7 zR`2XY@0$0YO~x&w-Lnq#!=|AhfH`yf7chr*^o%TCK{HB_Ii$#(q>=gjq1tgCe?&3+ zJOXcUQi3;2$yzK=gGmd-)%!4eZ zqaVJ@@OF6+@6N{c9g^Y5%xLqMV-Z~j8Ocx)Nn!J=328>N*w=1!$v|HBJk=U8$_REe zlwxl&HOMK8sPO`G#?*Ls)-yBwD9z=^){AAGX##>VFe60V+ifFZqG=LmEDu#C2kwpC?=$i~lIUEflLA*c3k3JV4Qko!i9tFO4 zwHNPChp8OJ;2iM!Q*8I*-G(cjp@*Y_i-AB{K%*40Gvmn_n#?V( z%=NC`I<%TytE1Ns+D7Zl+-|iS^_Ep{QP0^VVZ765b{eOxdIvoxI!Z93ab|8DH*x5I zP$%_H{g|pUbFePU$r2E=Vf0$G_1Y=2TrYX3&YEzjnlc9G!hvr(X_f u`N=Rt(&?3^pp=_(; diff --git a/src/tools/__pycache__/tokens.cpython-37.pyc b/src/tools/__pycache__/tokens.cpython-37.pyc deleted file mode 100644 index 960ea7c160040329cbe86dec9a40c1cf310d3394..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1385 zcmai!OK;pZ5XVW0k`>46Jlw{4XY*)cwYKGKY#@E02x=tl$(J@c=nz8HaAUcYxFNN6 zyx5!bE!qO@vG;x&Ui&S4>Wmh4+(Qux{0+Grk;DIt_Pbtho?#pOz4iK7F!m2kPTDdK zo?&-W1Tf$bKnMaNh+z&AI0y4^9u}Yni*Nxh!X>y2OTR7U3_gKR;R-CnRk#M%;Rf7< zTW}lhKp*bHJ-81K;4^p#k6;B-`25YX;)?wd{K<~^GRwp78GHe&?-{Hf1-XE=A6dHY zqf!^nd7-pZJ{lHef??%@YKXn@N!9EsTeZ%|mD@KJ_)x3X3vJBEi;*$fi*{EvK04T~ zwDO`Xa0j7WQTnh^2R<-E92k71wPTeoS&o;s0U;!yILt4rcCD?NHzh`O z+UVZTu)7Bc#c~cT52yg%V}hs%&~}A@Hi9`!QR1VY%rB}bNh4}xX`5~A?j~Z&r%bYG zfaKE<8B7H-1ctBkom5cD-q|bY>SJ9ssxdws8J9*L#nMB24OjAr0+;qWj_nP^U(DV@ zbF8vjK~-eh=)-Jdu=#ZB`Q{VildUgbWb(Ny$4VEOlrMkCHd~WzZ)e-49$_umti7MC0nZ|2rVhdz#MiC-C%n@&(g?-zQk@XuhDxz6v*e%Bk@r3@`y14nSPY10+%yQW$d>qJU&DgC^5Upa_GX hCSw$9X-Q^I@k)jwkYX_LD}ADiFN=bPq2|PingA5A5!nC$ diff --git a/src/utils/__pycache__/ast.cpython-37.pyc b/src/utils/__pycache__/ast.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7ab22a42c179fd6f590097d10ec7a37ebdfda40e GIT binary patch literal 10386 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 Hz8L%q+(SXP literal 0 HcmV?d00001 diff --git a/src/utils/__pycache__/utils.cpython-37.pyc b/src/utils/__pycache__/utils.cpython-37.pyc index 7c129555203c1cef5b78f35239e10d1c95724694..1472cd1d26052e26104673798148a9544d3686a2 100644 GIT binary patch literal 1028 zcmZuv-)j>=5Z>AQkum)v!CBTczH zrO$#-zP9+}zqGGD^*@ll=*-0yDGto+&fLw;eDlqVg@qbJ`StDl``4VYpXA&K`s_KX zevC#i0V(S+!G&|qIv`x(;mL(BDtI~q4q3f=g@3YkOqnDOs)xFVsvn{$Sf5>h0Kp6B z^Gjz^o&{fJnC-MJ)D+-vb;njxc`70kSx-~CC5vVBpI3=-Rc=CccaVuu QDq93f6UkMl>Q?9f08rTQg#Z8m delta 125 zcmZqSc*Vr$#LLUY00c%`OyimvCh|!L@c?-#3@MB)3{eazOu-DA%oD?Gm|ikWoZ`rs zGVz+PwStDBrhaizvVLhvW==7L)GMgG#hsR!mlB_xpHrHf#|Si}m<41oqYz^e$Ob=6 OAU*jCvnuOnkT3w7svh_N diff --git a/src/utils/ast.py b/src/utils/ast.py new file mode 100644 index 00000000..9feaed4a --- /dev/null +++ b/src/utils/ast.py @@ -0,0 +1,213 @@ +from ply.lex import LexToken + +class Node: + pass + +class ProgramNode(Node): + def __init__(self, declarations): + self.declarations = declarations + +class DeclarationNode(Node): + pass + +class ExpressionNode(Node): + pass + +class ErrorNode(Node): + pass + +class ClassDeclarationNode(DeclarationNode): + def __init__(self, idx:LexToken, features, parent=None): + self.id = idx.value + self.pos = (idx.lineno, idx.lexpos) + if parent: + self.parent = parent.value + self.parent_pos = (parent.lineno, parent.lexpos) + else: + self.parent = None + self.pos = (0, 0) + self.features = features + +class _Param: + def __init__(self, tok): + self.value = tok.value + self.pos = (tok.lineno, tok.lexpos) + +class FuncDeclarationNode(DeclarationNode): + def __init__(self, idx:LexToken, params, return_type, body): + self.id = idx.value + self.pos = (idx.lineno, idx.lexpos) + self.params = [(pname.value, _Param(ptype)) for pname, ptype in params] + self.type = return_type.value + self.type_pos = (return_type.lineno, return_type.lexpos) + self.body = body + + +class AttrDeclarationNode(DeclarationNode): + def __init__(self, idx:LexToken, typex, expr=None): + self.id = idx.value + self.pos = (idx.lineno, idx.lexpos) + self.type = typex.value + self.type_pos = (typex.lineno, typex.lexpos) + self.expr = expr + +class VarDeclarationNode(ExpressionNode): + def __init__(self, idx:LexToken, typex, expr=None): + self.id = idx.value + self.pos = (idx.lineno, idx.lexpos) + self.type = typex.value + self.type_pos = (typex.lineno, typex.lexpos) + self.expr = expr + +class AssignNode(ExpressionNode): + def __init__(self, idx:LexToken, expr): + self.id = idx.value + self.pos = (idx.lineno, idx.lexpos) + self.expr = expr + +class CallNode(ExpressionNode): + def __init__(self, obj, idx:LexToken, args): + self.obj = obj + self.id = idx.value + self.pos = (idx.lineno, idx.lexpos) + self.args = args + +class BlockNode(ExpressionNode): + def __init__(self, expr_list, tok): + self.expr_list = expr_list + self.pos = (tok.lineno, tok.lexpos) + +class BaseCallNode(ExpressionNode): + def __init__(self, obj, typex:LexToken, idx:LexToken, args): + self.obj = obj + self.id = idx.value + self.pos = (idx.lineno, idx.lexpos) + self.args = args + self.type = typex.value + self.type_pos = (typex.lineno, typex.lexpos) + + +class StaticCallNode(ExpressionNode): + def __init__(self, idx:LexToken, args): + self.id = idx.value + self.pos = (idx.lineno, idx.lexpos) + self.args = args + + +class AtomicNode(ExpressionNode): + def __init__(self, lex): + self.lex = lex.value + self.pos = (lex.lineno, lex.lexpos) + +class BinaryNode(ExpressionNode): + def __init__(self, left, right): + self.left = left + self.right = right + self.pos = left.pos + +class BinaryLogicalNode(BinaryNode): + pass + +class BinaryArithNode(BinaryNode): + pass + +class UnaryNode(ExpressionNode): + def __init__(self, expr, tok): + self.expr = expr + self.pos = (tok.lineno, tok.lexpos) + +class UnaryLogicalNode(UnaryNode): + pass + +class UnaryArithNode(UnaryNode): + pass + +# -------- + +class WhileNode(ExpressionNode): + def __init__(self, cond, expr, tok): + self.cond = cond + self.expr = expr + self.pos = (tok.lineno, tok.lexpos) + +class ConditionalNode(ExpressionNode): + def __init__(self, cond, stm, else_stm, tok): + self.cond = cond + self.stm = stm + self.else_stm = else_stm + self.pos = (tok.lineno, tok.lexpos) + +class CaseNode(ExpressionNode): + def __init__(self, expr, case_list, tok): + self.expr = expr + self.case_list = case_list + self.pos = (tok.lineno, tok.lexpos) + + def __hash__(self): + return id(self) + +class OptionNode(ExpressionNode): + def __init__(self, idx:LexToken, typex, expr): + self.id = idx.value + self.pos = (idx.lineno, idx.lexpos) + self.typex = typex.value + self.type_pos = (typex.lineno, typex.lexpos) + self.expr = expr + + +class LetNode(ExpressionNode): + def __init__(self, init_list, expr, tok): + self.init_list = init_list + self.expr = expr + self.pos = (tok.lineno, tok.lexpos) + + def __hash__(self): + return id(self) + +class ConstantNumNode(AtomicNode): + pass + +class ConstantBoolNode(AtomicNode): + pass + +class ConstantStrNode(AtomicNode): + pass + +class VariableNode(AtomicNode): + pass + +class TypeNode(AtomicNode): + pass + +class InstantiateNode(AtomicNode): + pass + +class BinaryNotNode(UnaryArithNode): + pass + +class NotNode(UnaryLogicalNode): + pass + +class IsVoidNode(UnaryArithNode): + pass + +class PlusNode(BinaryArithNode): + pass + +class MinusNode(BinaryArithNode): + pass + +class StarNode(BinaryArithNode): + pass + +class DivNode(BinaryArithNode): + pass + +class LessNode(BinaryLogicalNode): + pass + +class LessEqNode(BinaryLogicalNode): + pass + +class EqualNode(BinaryLogicalNode): + pass \ No newline at end of file diff --git a/src/tools/errors.py b/src/utils/errors.py similarity index 78% rename from src/tools/errors.py rename to src/utils/errors.py index e8436ae5..08ed8df1 100644 --- a/src/tools/errors.py +++ b/src/utils/errors.py @@ -53,51 +53,60 @@ def error_type(self): return 'SyntacticError' -class NameError(CoolError): +class SemanticError(CoolError): + 'Otros errores semanticos' + + SELF_IS_READONLY = 'Variable "self" is read-only.' + LOCAL_ALREADY_DEFINED = 'Variable "%s" is already defined in method "%s".' + MISSING_PARAMETER = 'Missing argument "%s" in function call "%s"' + TOO_MANY_ARGUMENTS = 'Too many arguments for function call "%s"' + + @property + def error_type(self): + return 'SemanticError' + + +class NamesError(SemanticError): 'Se reporta al referenciar a un identificador en un ambito en el que no es visible' USED_BEFORE_ASSIGNMENT = 'Variable "%s" used before being assigned' + VARIABLE_NOT_DEFINED = 'Variable "%s" is not defined in "%s".' @property def error_type(self): return 'NameError' -class TypeError(CoolError): +class TypesError(SemanticError): 'Se reporta al detectar un problema de tipos' INVALID_OPERATION = 'Operation is not defined between "%s" and "%s".' INCOMPATIBLE_TYPES = 'Cannot convert "%s" into "%s".' - #? INCORRECT_TYPE = 'Incorrect type "%s" waiting "%s"' + INCORRECT_TYPE = 'Incorrect type "%s" waiting "%s"' BOPERATION_NOT_DEFINED = '%s operations are not defined between "%s" and "%s"' UOPERATION_NOT_DEFINED = '%s operations are not defined for "%s"' - + CIRCULAR_DEPENDENCY = 'Circular dependency between %s and %s' + + PARENT_ALREADY_DEFINED = 'Parent type is already set for "%s"' + TYPE_ALREADY_DEFINED = 'Type with the same name (%s) already in context.' + TYPE_NOT_DEFINED = 'Type "%s" is not defined.' + @property def error_type(self): return 'TypeError' -class AttributeError(CoolError): +class AttributesError(SemanticError): 'Se reporta cuando un atributo o método se referencia pero no está definido' - VARIABLE_NOT_DEFINED = 'Variable "%s" is not defined in "%s".' WRONG_SIGNATURE = 'Method "%s" already defined in "%s" with a different signature.' - @property - def error_type(self): - return 'AttributeError' - - -class SemanticError(CoolError): - 'Otros errores semanticos' + METHOD_ALREADY_DEFINED = 'Method "%s" is already defined in class "%s"' + METHOD_NOT_DEFINED = 'Method "%s" is not defined in "%s"' + ATTRIBUTE_ALREADY_DEFINED = 'Attribute "%s" is already defined in %s' + ATTRIBUTE_NOT_DEFINED = 'Attribute "%s" is not defined in %s' - SELF_IS_READONLY = 'Variable "self" is read-only.' - LOCAL_ALREADY_DEFINED = 'Variable "%s" is already defined in method "%s".' - CIRCULAR_DEPENDENCY = 'Circular dependency between %s and %s' - MISSING_PARAMETER = 'Missing argument "%s" in function call "%s"' - TOO_MANY_ARGUMENTS = 'Too many arguments for function call "%s"' - @property def error_type(self): - return 'SemanticError' + return 'AttributeError' \ No newline at end of file diff --git a/src/tools/tokens.py b/src/utils/tokens.py similarity index 100% rename from src/tools/tokens.py rename to src/utils/tokens.py diff --git a/src/utils/utils.py b/src/utils/utils.py index c996546e..37a5abce 100644 --- a/src/utils/utils.py +++ b/src/utils/utils.py @@ -1,3 +1,28 @@ +import itertools + + def find_column(lexer, token): line_start = lexer.lexdata.rfind('\n', 0, token.lexpos) return (token.lexpos - line_start) + +def path_to_objet(typex): + path = [] + c_type = typex + + while c_type: + path.append(c_type) + c_type = c_type.parent + + path.reverse() + return path + +def get_common_basetype(types): + paths = [path_to_objet(typex) for typex in types] + tuples = zip(*paths) + + for i, t in enumerate(tuples): + gr = itertools.groupby(t) + if len(list(gr)) > 1: + return paths[0][i-1] + + return paths[0][-1] \ No newline at end of file diff --git a/tests/utils/utils.py b/tests/utils/utils.py index 3d2a0e0c..8e70e0d7 100644 --- a/tests/utils/utils.py +++ b/tests/utils/utils.py @@ -49,6 +49,10 @@ def compare_errors(compiler_path: str, cool_file_path: str, error_file_path: str errors = fd.read().split('\n') fd.close() + print('OUTPUT') + print(compiler_output[2:]) + print('ERRORS') + print(errors) # checking the errors of compiler cmp(compiler_output[2:], errors) else: From c13c6c4535915f3ee4543006efbec010139843fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Loraine=20Monteagudo=20Garc=C3=ADa?= Date: Sun, 26 Apr 2020 17:31:22 -0600 Subject: [PATCH 19/60] Implementing self type --- src/codegen/__init__.py | 0 src/lexer/__pycache__/lexer.cpython-37.pyc | Bin 9238 -> 9204 bytes src/lexer/lexer.py | 34 +- src/main.py | 15 +- src/parser/output_parser/parselog.txt | 1210 ++++------------- src/self.cl | 9 + .../__pycache__/semantic.cpython-37.pyc | Bin 1574 -> 1414 bytes src/semantic/__pycache__/tools.cpython-37.pyc | Bin 14842 -> 5298 bytes src/semantic/__pycache__/types.cpython-37.pyc | Bin 0 -> 12058 bytes src/semantic/semantic.py | 22 +- src/semantic/tools.py | 209 +-- src/semantic/types.py | 269 ++++ .../selftype_visitor.cpython-37.pyc | Bin 3502 -> 3738 bytes .../__pycache__/type_builder.cpython-37.pyc | Bin 2812 -> 2828 bytes .../__pycache__/type_checker.cpython-37.pyc | Bin 9941 -> 10158 bytes .../__pycache__/type_collector.cpython-37.pyc | Bin 1690 -> 1501 bytes .../__pycache__/var_collector.cpython-37.pyc | Bin 6496 -> 6552 bytes src/semantic/visitors/selftype_visitor.py | 7 +- src/semantic/visitors/type_builder.py | 7 +- src/semantic/visitors/type_checker.py | 60 +- src/semantic/visitors/type_collector.py | 9 +- src/semantic/visitors/var_collector.py | 1 + src/utils/__pycache__/ast.cpython-37.pyc | Bin 10386 -> 10386 bytes src/utils/__pycache__/utils.cpython-37.pyc | Bin 1028 -> 1251 bytes src/utils/ast.py | 48 +- src/utils/utils.py | 8 +- 26 files changed, 660 insertions(+), 1248 deletions(-) create mode 100644 src/codegen/__init__.py create mode 100644 src/self.cl create mode 100644 src/semantic/__pycache__/types.cpython-37.pyc create mode 100644 src/semantic/types.py diff --git a/src/codegen/__init__.py b/src/codegen/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/lexer/__pycache__/lexer.cpython-37.pyc b/src/lexer/__pycache__/lexer.cpython-37.pyc index b23a9954f83a56a696e81fe91cf838a0f7013a4c..7f135a85c7028f1f157f08de0a7b1cda533ca52e 100644 GIT binary patch delta 699 zcmZXPO=uHA6vy}N&L)#hxA|y3Hy5;tPH9+7>;#2z99r);g&y z;DT)J=_O36D?&aZ$x=lzmmH=LJ33&j&t@H_5-SautItk4%uVddfbl-dQ&NoyUqagdgwT3f1tS}$WW0Op7Y&=8~D|? z7hRr+o%ibiZ9Ek<@N}RAckw_liSGhMSS5EE9^(Dr0z7i~_(%!X9k)jAspB%C59{cqzwwUoQU<_c;u&xZCEMV~$H_z3aZlp@low~z(U4hf&DYFo z6lh%58&{5i-AYZfV8P$4G@4e;oNH8SbLK^>ik)m4x3eE|Dp$FSGw$Xplexm(RNY+X aLsZkwUcsH+@s*sml4GdlG;rDB9Kav5i?+7_ delta 784 zcmZWmT}TvB7`@+}+1c6A*+1RYon5V6E3iZ?D5)UAki-XHDgs@19=fZz$q2KSAPa>= z_!3bc{ZNob5da%VP~ zOw(ZW99XzlC_gsmphqMxu;H+15v{}#krEbhRHQ|QI40UeJ8@iW5nG9yMAmx&D+;8& zO5nVT@1jX;Huk|s95QS;f=k9P81x=A90WLt>y4k`6jsec=f2X36}HGKa2J5E1SRf1 zB~}ES=5DuiR8~?2?`53Xsx#+j3T1=p2=xN1SyjZwM_3V)=K3u ziU?77XEO}d7vujNIaBk5Aw8QrJETW@io5pzl%tD=+8nNhyS0FuqPt=+(r1=Plyd}( z8yt^EE}8Sv;nIQG6jmD&A=jO9-7Ye`V6+3^8Xj)3us@cETWG~I_&hcO3#87%eY_Gs z0}uT?+mweTU)?0-`6|+!hh<+~Y%ahvyqrp3O%&i2+KE|sO=#gpViev|jfIoR5m=>K z3)hpQ@PXE*;S)X~{DM1MXW*M(w9+~Z-)TOLds2D$L6tMG;U`&Z41VLhRpoye4yKnu zLnU(q!gxEg7kY3tW9?^)>gLa8r2u^)W@`eDu}(g#sRqnwmm)^owm! 0: error_text = LexicographicError.EOF_COMMENT self.errors.append(LexicographicError(error_text, t.lineno, t.column)) - #Strings - def t_strings(self,t): + # Strings + t_strings_ignore = '' + + def t_strings(self, t): r'\"' t.lexer.str_start = t.lexer.lexpos t.lexer.myString = '' t.lexer.backslash = False t.lexer.begin('strings') - def t_strings_end(self,t): + def t_strings_end(self, t): r'\"' self._update_column(t) @@ -84,7 +86,7 @@ def t_strings_end(self,t): t.lexer.begin('INITIAL') return t - def t_strings_newline(self,t): + def t_strings_newline(self, t): r'\n' t.lexer.lineno += 1 self._update_column(t) @@ -96,16 +98,16 @@ def t_strings_newline(self,t): self.errors.append(LexicographicError(error_text, t.lineno, t.column)) t.lexer.begin('INITIAL') - def t_strings_nill(self,t): + def t_strings_nill(self, t): r'\0' error_text = LexicographicError.NULL_STRING self._update_column(t) self.errors.append(LexicographicError(error_text, t.lineno, t.column)) - def t_strings_consume(self,t): + def t_strings_consume(self, t): r'[^\n]' - self._update_column(t) + # self._update_column(t) if t.lexer.backslash : if t.value == 'b': @@ -133,19 +135,19 @@ def t_strings_consume(self,t): else: t.lexer.backslash = True - def t_strings_error(self,t): + def t_strings_error(self, t): pass - t_strings_ignore = '' - - def t_strings_eof(self,t): + def t_strings_eof(self, t): self._update_column(t) error_text = LexicographicError.EOF_STRING self.errors.append(LexicographicError(error_text, t.lineno, t.column)) + t_ignore = ' \t\f\r\t\v' + def t_semi(self, t): r';' self._update_column(t) @@ -277,8 +279,6 @@ def t_num(self, t): def t_newline(self, t): r'\n+' t.lexer.lineno += len(t.value) - self._update_column(t) - # t.column = t.lexer.lexpos - t.lexer.linestart t.lexer.linestart = t.lexer.lexpos # Error handling rule diff --git a/src/main.py b/src/main.py index a6e4eea7..72784a2f 100644 --- a/src/main.py +++ b/src/main.py @@ -6,8 +6,8 @@ from utils.errors import CompilerError, SyntaticError -input_ = sys.argv[1] -# input_ = f'//media/loly/02485E43485E359F/_Escuela/__UH/4to/CC/Compiler/cool-compiler-2020/tests/parser/program1.cl' +# input_ = sys.argv[1] +input_ = f'self.cl' # output_ = args.output @@ -16,12 +16,6 @@ text = f.read() lexer = CoolLexer() - - # tokens = lexer.tokenize_text(text) - # if lexer.errors: - # for error in lexer.errors: - # print(error) - # raise Exception() tokens = lexer.run(text) parser = CoolParser(lexer) @@ -30,9 +24,8 @@ if parser.errors: raise Exception() - # run_pipeline(ast) + run_pipeline(ast) except FileNotFoundError: error_text = CompilerError.UNKNOWN_FILE % input_ - print(CompilerError(error_text, 0, 0)) - \ No newline at end of file + print(CompilerError(error_text, 0, 0)) \ No newline at end of file diff --git a/src/parser/output_parser/parselog.txt b/src/parser/output_parser/parselog.txt index 62abbd7a..19569455 100644 --- a/src/parser/output_parser/parselog.txt +++ b/src/parser/output_parser/parselog.txt @@ -6128,1165 +6128,501 @@ yacc.py: 445:Action : Shift and goto state 5 yacc.py: 410: yacc.py: 411:State : 5 - yacc.py: 435:Stack : class . LexToken(type,'Main',1,6) + yacc.py: 435:Stack : class . LexToken(type,'Silly',1,6) yacc.py: 445:Action : Shift and goto state 8 yacc.py: 410: yacc.py: 411:State : 8 - yacc.py: 435:Stack : class type . LexToken(inherits,'inherits',1,11) - yacc.py: 445:Action : Shift and goto state 11 - yacc.py: 410: - yacc.py: 411:State : 11 - yacc.py: 435:Stack : class type inherits . LexToken(type,'IO',1,20) - yacc.py: 445:Action : Shift and goto state 20 - yacc.py: 410: - yacc.py: 411:State : 20 - yacc.py: 435:Stack : class type inherits type . LexToken(ocur,'{',1,23) - yacc.py: 445:Action : Shift and goto state 33 + yacc.py: 435:Stack : class type . LexToken(ocur,'{',1,12) + yacc.py: 445:Action : Shift and goto state 10 yacc.py: 410: - yacc.py: 411:State : 33 - yacc.py: 435:Stack : class type inherits type ocur . LexToken(id,'main',3,30) + yacc.py: 411:State : 10 + yacc.py: 435:Stack : class type ocur . LexToken(id,'copy',2,18) yacc.py: 445:Action : Shift and goto state 19 yacc.py: 410: yacc.py: 411:State : 19 - yacc.py: 435:Stack : class type inherits type ocur id . LexToken(opar,'(',3,35) + yacc.py: 435:Stack : class type ocur id . LexToken(opar,'(',2,22) yacc.py: 445:Action : Shift and goto state 32 yacc.py: 410: yacc.py: 411:State : 32 - yacc.py: 435:Stack : class type inherits type ocur id opar . LexToken(cpar,')',3,36) + yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',2,23) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : class type inherits type ocur id opar epsilon . LexToken(cpar,')',3,36) + yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',2,23) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : class type inherits type ocur id opar param_list_empty . LexToken(cpar,')',3,36) + yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',2,23) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 - yacc.py: 435:Stack : class type inherits type ocur id opar formals . LexToken(cpar,')',3,36) + yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',2,23) yacc.py: 445:Action : Shift and goto state 64 yacc.py: 410: yacc.py: 411:State : 64 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar . LexToken(colon,':',3,38) + yacc.py: 435:Stack : class type ocur id opar formals cpar . LexToken(colon,':',2,25) yacc.py: 445:Action : Shift and goto state 100 yacc.py: 410: yacc.py: 411:State : 100 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon . LexToken(type,'Object',3,40) + yacc.py: 435:Stack : class type ocur id opar formals cpar colon . LexToken(type,'SELF_TYPE',2,27) yacc.py: 445:Action : Shift and goto state 138 yacc.py: 410: yacc.py: 411:State : 138 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type . LexToken(ocur,'{',3,47) + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type . LexToken(ocur,'{',2,37) yacc.py: 445:Action : Shift and goto state 181 yacc.py: 410: yacc.py: 411:State : 181 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur . LexToken(ocur,'{',4,57) - yacc.py: 445:Action : Shift and goto state 90 - yacc.py: 410: - yacc.py: 411:State : 90 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur . LexToken(let,'let',5,71) - yacc.py: 445:Action : Shift and goto state 84 - yacc.py: 410: - yacc.py: 411:State : 84 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let . LexToken(id,'x',5,75) - yacc.py: 445:Action : Shift and goto state 46 - yacc.py: 410: - yacc.py: 411:State : 46 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let id . LexToken(colon,':',5,76) - yacc.py: 445:Action : Shift and goto state 61 - yacc.py: 410: - yacc.py: 411:State : 61 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let id colon . LexToken(type,'A',5,77) - yacc.py: 445:Action : Shift and goto state 96 - yacc.py: 410: - yacc.py: 411:State : 96 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let id colon type . LexToken(larrow,'<-',5,79) - yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['x',':','A'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'x',5,75), LexToken(type,'A ...) - yacc.py: 410: - yacc.py: 411:State : 130 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let param . LexToken(larrow,'<-',5,79) - yacc.py: 445:Action : Shift and goto state 173 - yacc.py: 410: - yacc.py: 411:State : 173 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let param larrow . LexToken(new,'new',5,82) - yacc.py: 445:Action : Shift and goto state 89 - yacc.py: 410: - yacc.py: 411:State : 89 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let param larrow new . LexToken(type,'B',5,86) - yacc.py: 445:Action : Shift and goto state 134 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur . LexToken(id,'self',2,39) + yacc.py: 445:Action : Shift and goto state 72 yacc.py: 410: - yacc.py: 411:State : 134 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let param larrow new type . LexToken(in,'in',5,88) - yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','B'] and goto state 79 - yacc.py: 506:Result : ( id] with ['self'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 - yacc.py: 506:Result : ( let_assign] with [] and goto state 128 - yacc.py: 506:Result : ([ id] with ['x'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 150 - yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let let_list in id opar factor dot id opar epsilon . LexToken(cpar,')',5,107) - yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 149 - yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let let_list in id opar factor dot id opar arg_list_empty . LexToken(cpar,')',5,107) - yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let let_list in id opar factor dot id opar args . LexToken(cpar,')',5,107) - yacc.py: 445:Action : Shift and goto state 191 - yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let let_list in id opar factor dot id opar args cpar . LexToken(dot,'.',5,108) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['f','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'f',5,105), [])) + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur comp . LexToken(ccur,'}',2,44) + yacc.py: 471:Action : Reduce rule [expr -> comp] with [] and goto state 206 + yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 150 - yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let let_list in id opar factor dot id opar epsilon . LexToken(cpar,')',5,111) - yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 149 - yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let let_list in id opar factor dot id opar arg_list_empty . LexToken(cpar,')',5,111) - yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let let_list in id opar factor dot id opar args . LexToken(cpar,')',5,111) - yacc.py: 445:Action : Shift and goto state 191 - yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let let_list in id opar factor dot id opar args cpar . LexToken(cpar,')',5,113) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['m','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'m',5,109), [])) - yacc.py: 410: - yacc.py: 411:State : 167 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let let_list in id opar factor dot func_call . LexToken(cpar,')',5,113) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['copy','(',[],')',':','SELF_TYPE','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) yacc.py: 410: - yacc.py: 411:State : 155 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let let_list in id opar expr . LexToken(cpar,')',5,113) - yacc.py: 471:Action : Reduce rule [arg_list -> expr] with [] and goto state 148 - yacc.py: 506:Result : ([ epsilon] with [None] and goto state 48 + yacc.py: 506:Result : ([]) yacc.py: 410: - yacc.py: 411:State : 148 - yacc.py: 430:Defaulted state 148: Reduce using 91 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur let let_list in id opar arg_list . LexToken(cpar,')',5,113) - yacc.py: 471:Action : Reduce rule [args -> arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 14 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',5,91), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','Silly','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 196 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 - yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) yacc.py: 410: - yacc.py: 411:State : 77 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur factor . LexToken(semi,';',5,114) - yacc.py: 471:Action : Reduce rule [base_call -> factor] with [] and goto state 76 - yacc.py: 506:Result : ( epsilon] with [None] and goto state 53 + yacc.py: 506:Result : ([]) yacc.py: 410: - yacc.py: 411:State : 76 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur base_call . LexToken(semi,';',5,114) - yacc.py: 471:Action : Reduce rule [term -> base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Sally','inherits','Silly','{',[],'}',';'] and goto state 3 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( id colon type] with ['x',':','A'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'x',6,132), LexToken(type,' ...) + yacc.py: 411:State : 49 + yacc.py: 435:Stack : def_class def_class class type ocur id colon type . LexToken(larrow,'<-',7,110) + yacc.py: 445:Action : Shift and goto state 62 yacc.py: 410: - yacc.py: 411:State : 130 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let param . LexToken(larrow,'<-',6,136) - yacc.py: 445:Action : Shift and goto state 173 + yacc.py: 411:State : 62 + yacc.py: 435:Stack : def_class def_class class type ocur id colon type larrow . LexToken(opar,'(',7,113) + yacc.py: 445:Action : Shift and goto state 80 yacc.py: 410: - yacc.py: 411:State : 173 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let param larrow . LexToken(new,'new',6,139) + yacc.py: 411:State : 80 + yacc.py: 435:Stack : def_class def_class class type ocur id colon type larrow opar . LexToken(new,'new',7,114) yacc.py: 445:Action : Shift and goto state 89 yacc.py: 410: yacc.py: 411:State : 89 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let param larrow new . LexToken(type,'A',6,143) + yacc.py: 435:Stack : def_class def_class class type ocur id colon type larrow opar new . LexToken(type,'Sally',7,118) yacc.py: 445:Action : Shift and goto state 134 yacc.py: 410: yacc.py: 411:State : 134 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let param larrow new type . LexToken(in,'in',6,145) - yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','A'] and goto state 79 - yacc.py: 506:Result : ( new type] with ['new','Sally'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( let_assign] with [] and goto state 128 - yacc.py: 506:Result : ([ id] with ['x'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let let_list in id opar factor dot id opar epsilon . LexToken(cpar,')',6,164) + yacc.py: 435:Stack : def_class def_class class type ocur id colon type larrow factor dot id opar epsilon . LexToken(cpar,')',7,130) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let let_list in id opar factor dot id opar arg_list_empty . LexToken(cpar,')',6,164) + yacc.py: 435:Stack : def_class def_class class type ocur id colon type larrow factor dot id opar arg_list_empty . LexToken(cpar,')',7,130) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let let_list in id opar factor dot id opar args . LexToken(cpar,')',6,164) + yacc.py: 435:Stack : def_class def_class class type ocur id colon type larrow factor dot id opar args . LexToken(cpar,')',7,130) yacc.py: 445:Action : Shift and goto state 191 yacc.py: 410: yacc.py: 411:State : 191 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let let_list in id opar factor dot id opar args cpar . LexToken(dot,'.',6,165) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['f','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'f',6,162), [])) + yacc.py: 435:Stack : def_class def_class class type ocur id colon type larrow factor dot id opar args cpar . LexToken(semi,';',7,131) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['copy','(',[],')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'copy',7,125), [])) yacc.py: 410: yacc.py: 411:State : 167 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let let_list in id opar factor dot func_call . LexToken(dot,'.',6,165) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 150 - yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let let_list in id opar factor dot id opar epsilon . LexToken(cpar,')',6,168) - yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 149 - yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let let_list in id opar factor dot id opar arg_list_empty . LexToken(cpar,')',6,168) - yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let let_list in id opar factor dot id opar args . LexToken(cpar,')',6,168) - yacc.py: 445:Action : Shift and goto state 191 - yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let let_list in id opar factor dot id opar args cpar . LexToken(cpar,')',6,170) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['m','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'m',6,166), [])) - yacc.py: 410: - yacc.py: 411:State : 167 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi let let_list in id opar factor dot func_call . LexToken(cpar,')',6,170) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',6,148), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 196 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 16 - yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : class type inherits type ocur def_func semi epsilon . LexToken(ccur,'}',10,199) - yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 48 - yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : class type inherits type ocur def_func semi feature_list . LexToken(ccur,'}',10,199) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 53 - yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Sally','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class class type ocur id opar epsilon . LexToken(cpar,')',13,220) + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar epsilon . LexToken(cpar,')',8,142) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class class type ocur id opar param_list_empty . LexToken(cpar,')',13,220) + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar param_list_empty . LexToken(cpar,')',8,142) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur id opar formals . LexToken(cpar,')',13,220) + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals . LexToken(cpar,')',8,142) yacc.py: 445:Action : Shift and goto state 64 yacc.py: 410: yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur id opar formals cpar . LexToken(colon,':',13,222) + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar . LexToken(colon,':',8,144) yacc.py: 445:Action : Shift and goto state 100 yacc.py: 410: yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur id opar formals cpar colon . LexToken(type,'String',13,224) + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar colon . LexToken(type,'Sally',8,146) yacc.py: 445:Action : Shift and goto state 138 yacc.py: 410: yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur id opar formals cpar colon type . LexToken(ocur,'{',13,231) + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',8,152) yacc.py: 445:Action : Shift and goto state 181 yacc.py: 410: yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur id opar formals cpar colon type ocur . LexToken(string,'A',13,235) - yacc.py: 445:Action : Shift and goto state 93 - yacc.py: 410: - yacc.py: 411:State : 93 - yacc.py: 435:Stack : def_class class type ocur id opar formals cpar colon type ocur string . LexToken(ccur,'}',13,237) - yacc.py: 471:Action : Reduce rule [atom -> string] with ['A'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['m','(',[],')',':','String','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class class type ocur def_func semi id opar epsilon . LexToken(cpar,')',14,247) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class class type ocur def_func semi id opar param_list_empty . LexToken(cpar,')',14,247) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur def_func semi id opar formals . LexToken(cpar,')',14,247) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur def_func semi id opar formals cpar . LexToken(colon,':',14,249) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur def_func semi id opar formals cpar colon . LexToken(type,'A',14,251) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur def_func semi id opar formals cpar colon type . LexToken(ocur,'{',14,253) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur def_func semi id opar formals cpar colon type ocur . LexToken(new,'new',14,255) + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar colon type ocur . LexToken(new,'new',8,154) yacc.py: 445:Action : Shift and goto state 89 yacc.py: 410: yacc.py: 411:State : 89 - yacc.py: 435:Stack : def_class class type ocur def_func semi id opar formals cpar colon type ocur new . LexToken(type,'A',14,259) + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi id opar formals cpar colon type ocur new . LexToken(type,'SELF_TYPE',8,158) yacc.py: 445:Action : Shift and goto state 134 yacc.py: 410: yacc.py: 411:State : 134 - yacc.py: 435:Stack : def_class class type ocur def_func semi id opar formals cpar colon type ocur new type . LexToken(ccur,'}',14,261) - yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','A'] and goto state 79 - yacc.py: 506:Result : ( new type] with ['new','SELF_TYPE'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['f','(',[],')',':','A','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Sally','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : def_class class type ocur def_func semi def_func semi epsilon . LexToken(ccur,'}',15,264) + yacc.py: 435:Stack : def_class def_class class type ocur def_attr semi def_func semi epsilon . LexToken(ccur,'}',9,171) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : def_class class type ocur def_func semi def_func semi feature_list . LexToken(ccur,'}',15,264) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 47 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','A','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur id opar epsilon . LexToken(cpar,')',18,296) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur id opar param_list_empty . LexToken(cpar,')',18,296) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur id opar formals . LexToken(cpar,')',18,296) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur id opar formals cpar . LexToken(colon,':',18,298) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur id opar formals cpar colon . LexToken(type,'String',18,300) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur id opar formals cpar colon type . LexToken(ocur,'{',18,307) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur id opar formals cpar colon type ocur . LexToken(string,'B',18,311) - yacc.py: 445:Action : Shift and goto state 93 - yacc.py: 410: - yacc.py: 411:State : 93 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur id opar formals cpar colon type ocur string . LexToken(ccur,'}',18,313) - yacc.py: 471:Action : Reduce rule [atom -> string] with ['B'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['m','(',[],')',':','String','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 16 - yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_func semi epsilon . LexToken(ccur,'}',19,316) - yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 48 - yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_func semi feature_list . LexToken(ccur,'}',19,316) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 53 - yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','B','inherits','A','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( (9KEj4lkZe6=hk3@OYtEX_=e z424GF3_uhwhIIi`4Z}i^7()sZPQ7_xy{urp3@L12niXmWTMZk; zj9PY}8Jf5a*@R*U`{X-}vX;12|3FdA0kOJ<8R`Vi$u&%pj9inaF&R(hW#*lHo5^sp z6tl_XDrQ4r4(I&5lGKV4t17nOZEdlae}F ph-I>^3n&a3IT%@hn2V7OO!9$AE;t(`1Ltvocsvlf&0koI7y%@aRKWlM delta 615 zcmZqUUdF@g#LLUY00cKLE{HoYk@q9xq>2Bv>uVUBnHU*L7*d#<89{Unluls*^I2+` zK`LrlYFHL9)i5jst4U!6$yJEeFuE|r^3}2eb+gs5g3Kw*2nU(P4lxVEOb)O(E7VN3 z8ny+K=QDEE<2G&&igBD^?QBTefljJnUkLF4#1sjzqXdv0HG#2^3B?>PusQ57bLxTa zAl4u+6ob&ij2q(b8nFL?PGbaG!Jftv%%I8RSEX-@0u-G6eSBPvAY%( zrRxG<<(*@$3>%@5|1tQJyeVo_#opVo~ z_}?1OPA8KI0)IdL^5wffH4^fN_^qv(uG}3sHDM7eaYb$Zs zMXea@Vz5iVPPgK)i^HzLqSuI#5PkH5ZcrIs-l{V3u&YJf@Bb(v!#;D?z9Kv!G>xaD z5ZBi*I^Ax%=(z#g405JvyLMojXzZ3MOso&AFdcMw7=%2reBtn$e=@v~7Z$nXcA?Q)ewbfe_lV!lCZu#SX{nI?oV%~mm%y_jx=#Gaz4 znV7&zm3CS@ z7)sCgfG6II;uH!6^xu*7f!>So`Pf2$EDWgn#NGaOQ5gPRm(gm8GdB<&xpYQGY}aC& zhE~I8V1#|L>c9-aa!c7Eyv=|(9+-ssIm|W9JQ0s_pY}?^DJV;t{}X?qm$Q2gIMTzD z;?C)8hob99OvG0t;^FB>v_*U~GM-UPX}lfIWyJByCFf|Gop5!5h^9P$ArH&#_-cg( z>z?&a_Y$N#3P(`HcJX<>wMhk2*wAR2i0|`@J7`qb+>2CRw;c<}8HY>$GK#~tGjOC{ zdzf%^02q;YMG_x`74RFdim#9x(HhChk3y~77SJHujS`(7il&mp+|Lv7_2^>He>BWI z5p9JxCI-+~7KDtJs#WG90yRcn!3%|;4nsEXjtd2Kk%%t}s|9SJ8isSQGQ!GQMmBJE z@qTn1w%s-Fper#_JfXct#9Z-LHC!Mh7K?YF1Io|ix*n7x@7IZV^-OUG`$>lEAdpep zckD8Q5sAYsc`fj&3jyP$!1i2@ohg%R(5>c1iQA?39ma>@Y&W@D06eJWjiL6!DiY`5 zU>QF3+6nEX8f~E|x-I@X^AiY)*D literal 14842 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 F{|8GXQT6}; literal 0 HcmV?d00001 diff --git a/src/semantic/semantic.py b/src/semantic/semantic.py index a6382e22..8df7cfb5 100644 --- a/src/semantic/semantic.py +++ b/src/semantic/semantic.py @@ -12,9 +12,9 @@ def run_pipeline(ast): collector = TypeCollector(errors) collector.visit(ast) context = collector.context - print('Errors:', errors) - print('Context:') - print(context) + print('Errors: [') + for error in errors: + print('\t', error) print('=============== BUILDING TYPES ================') builder = TypeBuilder(context, errors) builder.visit(ast) @@ -22,8 +22,6 @@ def run_pipeline(ast): for error in errors: print('\t', error) print(']') - print('Context:') - print(context) print('=============== VAR COLLECTOR ================') checker = VarCollector(context, errors) scope = checker.visit(ast) @@ -31,13 +29,13 @@ def run_pipeline(ast): for error in errors: print('\t', error) print(']') - print('=============== SELF TYPE ================') - checker = SelfTypeVisitor(context, errors) - checker.visit(ast, scope) - print('Errors: [') - for error in errors: - print('\t', error) - print(']') + # print('=============== SELF TYPE ================') + # checker = SelfTypeVisitor(context, errors) + # checker.visit(ast, scope) + # print('Errors: [') + # for error in errors: + # print('\t', error) + # print(']') print('=============== CHECKING TYPES ================') checker = TypeChecker(context, errors) checker.visit(ast, scope) diff --git a/src/semantic/tools.py b/src/semantic/tools.py index ebbba55a..348d0e48 100644 --- a/src/semantic/tools.py +++ b/src/semantic/tools.py @@ -1,213 +1,6 @@ import itertools as itt from utils.errors import SemanticError, AttributesError, TypesError, NamesError - -class Attribute: - def __init__(self, name, typex): - self.name = name - self.type = typex - - def __str__(self): - return f'[attrib] {self.name} : {self.type.name};' - - def __repr__(self): - return str(self) - -class Method: - def __init__(self, name, param_names, params_types, return_type): - self.name = name - self.param_names = param_names - self.param_types = params_types - self.return_type = return_type - - def __str__(self): - params = ', '.join(f'{n}:{t.name}' for n,t in zip(self.param_names, self.param_types)) - return f'[method] {self.name}({params}): {self.return_type.name};' - - def __eq__(self, other): - return other.name == self.name and \ - other.return_type == self.return_type and \ - other.param_types == self.param_types - - -class MethodError(Method): - def __init__(self, name, param_names, param_types, return_types): - super().__init__(name, param_names, param_types, return_types) - - def __str__(self): - return f'[method] {self.name} ERROR' - - -class Type: - def __init__(self, name:str, pos): - if name == 'ObjectType': - return ObjectType(pos) - self.name = name - self.attributes = [] - self.methods = {} - self.parent = ObjectType(pos) - self.pos = pos - - def set_parent(self, parent): - if type(self.parent) != ObjectType and self.parent is not None: - error_text = TypesError.PARENT_ALREADY_DEFINED % self.name - raise TypesError(error_text, *self.pos) - self.parent = parent - - def get_attribute(self, name:str, pos): - try: - return next(attr for attr in self.attributes if attr.name == name) - except StopIteration: - if self.parent is None: - error_text = AttributesError.ATTRIBUTE_NOT_DEFINED % (name, self.name) - raise AttributesError(error_text, *pos) - try: - return self.parent.get_attribute(name, pos) - except AttributesError: - error_text = AttributesError.ATTRIBUTE_NOT_DEFINED % (name, self.name) - raise AttributesError(error_text, *pos) - - def define_attribute(self, name:str, typex, pos): - try: - self.get_attribute(name, pos) - except AttributesError: - attribute = Attribute(name, typex) - self.attributes.append(attribute) - return attribute - else: - error_text = AttributesError.ATTRIBUTE_ALREADY_DEFINED %(name, self.name) - raise AttributesError(error_text, *pos) - - def get_method(self, name:str, pos): - try: - return self.methods[name] - except KeyError: - error_text = AttributesError.METHOD_NOT_DEFINED %(name, self.name) - if self.parent is None: - raise AttributesError(error_text, *pos) - try: - return self.parent.get_method(name, pos) - except AttributesError: - raise AttributesError(error_text, *pos) - - def define_method(self, name:str, param_names:list, param_types:list, return_type): - if name in self.methods: - error_text = AttributesError.METHOD_ALREADY_DEFINED % (name, self.name) - raise AttributesError(error_text, *pos) - - method = self.methods[name] = Method(name, param_names, param_types, return_type) - return method - - def change_type(self, method, nparm, newtype): - idx = method.param_names.index(nparm) - method.param_types[idx] = newtype - - - def conforms_to(self, other): - return other.bypass() or self == other or self.parent is not None and self.parent.conforms_to(other) - - def bypass(self): - return False - - def __str__(self): - output = f'type {self.name}' - parent = '' if self.parent is None else f' : {self.parent.name}' - output += parent - output += ' {' - output += '\n\t' if self.attributes or self.methods else '' - output += '\n\t'.join(str(x) for x in self.attributes) - output += '\n\t' if self.attributes else '' - output += '\n\t'.join(str(x) for x in self.methods.values()) - output += '\n' if self.methods else '' - output += '}\n' - return output - - def __repr__(self): - return str(self) - -class ErrorType(Type): - def __init__(self, pos=(0, 0)): - Type.__init__(self, '', pos) - - def conforms_to(self, other): - return True - - def bypass(self): - return True - - def __eq__(self, other): - return isinstance(other, ErrorType) - - def __ne__(self, other): - return not isinstance(other, ErrorType) - -class VoidType(Type): - def __init__(self, pos=(0, 0)): - Type.__init__(self, '', pos) - - def conforms_to(self, other): - raise Exception('Invalid type: void type.') - - def bypass(self): - return True - - def __eq__(self, other): - return isinstance(other, VoidType) - -class BoolType(Type): - def __init__(self, pos=(0, 0)): - Type.__init__(self, 'Bool', pos) - - def __eq__(self, other): - return other.name == self.name or isinstance(other, BoolType) - - def __ne__(self, other): - return other.name != self.name and not isinstance(other, BoolType) - - -class IntType(Type): - def __init__(self, pos=(0, 0)): - Type.__init__(self, 'Int', pos) - - def __eq__(self, other): - return other.name == self.name or isinstance(other, IntType) - - def __ne__(self, other): - return other.name != self.name and not isinstance(other, IntType) - -class StringType(Type): - def __init__(self, pos=(0, 0)): - Type.__init__(self, 'String', pos) - - def __eq__(self, other): - return other.name == self.name or isinstance(other, StringType) - - def __ne__(self, other): - return other.name != self.name and not isinstance(other, StringType) - -class AutoType(Type): - def __init__(self, pos=(0, 0)): - Type.__init__(self, 'AUTO_TYPE', pos) - - def __eq__(self, other): - return other.name == self.name or isinstance(other, AutoType) - - def __ne__(self, other): - return other.name != self.name and not isinstance(other, AutoType) - -class ObjectType(Type): - def __init__(self, pos=(0, 0)): - self.name = 'Object' - self.attributes = [] - self.methods = {} - self.parent = None - self.pos = pos - - - def __eq__(self, other): - return other.name == self.name or isinstance(other, ObjectType) - - def __ne__(self, other): - return other.name != self.name and not isinstance(other, ObjectType) +from semantic.types import Type class Context: def __init__(self): diff --git a/src/semantic/types.py b/src/semantic/types.py new file mode 100644 index 00000000..4aae42c3 --- /dev/null +++ b/src/semantic/types.py @@ -0,0 +1,269 @@ +from utils.errors import SemanticError, AttributesError, TypesError, NamesError + +class Attribute: + def __init__(self, name, typex): + self.name = name + self.type = typex + + def __str__(self): + return f'[attrib] {self.name} : {self.type.name};' + + def __repr__(self): + return str(self) + +class Method: + def __init__(self, name, param_names, params_types, return_type): + self.name = name + self.param_names = param_names + self.param_types = params_types + self.return_type = return_type + + def __str__(self): + params = ', '.join(f'{n}:{t.name}' for n,t in zip(self.param_names, self.param_types)) + return f'[method] {self.name}({params}): {self.return_type.name};' + + def __eq__(self, other): + return other.name == self.name and \ + other.return_type == self.return_type and \ + other.param_types == self.param_types + +class MethodError(Method): + def __init__(self, name, param_names, param_types, return_types): + super().__init__(name, param_names, param_types, return_types) + + def __str__(self): + return f'[method] {self.name} ERROR' + +class Type: + def __init__(self, name:str, pos): + if name == 'ObjectType': + return ObjectType(pos) + self.name = name + self.attributes = [] + self.methods = {} + self.parent = ObjectType(pos) + self.pos = pos + + def set_parent(self, parent): + if type(self.parent) != ObjectType and self.parent is not None: + error_text = TypesError.PARENT_ALREADY_DEFINED % self.name + raise TypesError(error_text, *self.pos) + self.parent = parent + + def get_attribute(self, name:str, pos): + try: + return next(attr for attr in self.attributes if attr.name == name) + except StopIteration: + if self.parent is None: + error_text = AttributesError.ATTRIBUTE_NOT_DEFINED % (name, self.name) + raise AttributesError(error_text, *pos) + try: + return self.parent.get_attribute(name, pos) + except AttributesError: + error_text = AttributesError.ATTRIBUTE_NOT_DEFINED % (name, self.name) + raise AttributesError(error_text, *pos) + + def define_attribute(self, name:str, typex, pos): + try: + self.get_attribute(name, pos) + except AttributesError: + attribute = Attribute(name, typex) + self.attributes.append(attribute) + return attribute + else: + error_text = AttributesError.ATTRIBUTE_ALREADY_DEFINED %(name, self.name) + raise AttributesError(error_text, *pos) + + def get_method(self, name:str, pos): + try: + return self.methods[name] + except KeyError: + error_text = AttributesError.METHOD_NOT_DEFINED %(name, self.name) + if self.parent is None: + raise AttributesError(error_text, *pos) + try: + return self.parent.get_method(name, pos) + except AttributesError: + raise AttributesError(error_text, *pos) + + def define_method(self, name:str, param_names:list, param_types:list, return_type): + if name in self.methods: + error_text = AttributesError.METHOD_ALREADY_DEFINED % (name, self.name) + raise AttributesError(error_text, *pos) + + method = self.methods[name] = Method(name, param_names, param_types, return_type) + return method + + def change_type(self, method, nparm, newtype): + idx = method.param_names.index(nparm) + method.param_types[idx] = newtype + + + def conforms_to(self, other): + return other.bypass() or self == other or self.parent is not None and self.parent.conforms_to(other) + + def bypass(self): + return False + + def __str__(self): + output = f'type {self.name}' + parent = '' if self.parent is None else f' : {self.parent.name}' + output += parent + output += ' {' + output += '\n\t' if self.attributes or self.methods else '' + output += '\n\t'.join(str(x) for x in self.attributes) + output += '\n\t' if self.attributes else '' + output += '\n\t'.join(str(x) for x in self.methods.values()) + output += '\n' if self.methods else '' + output += '}\n' + return output + + def __repr__(self): + return str(self) + +class ErrorType(Type): + def __init__(self, pos=(0, 0)): + Type.__init__(self, '', pos) + + def conforms_to(self, other): + return True + + def bypass(self): + return True + + def __eq__(self, other): + return isinstance(other, ErrorType) + + def __ne__(self, other): + return not isinstance(other, ErrorType) + +class VoidType(Type): + def __init__(self, pos=(0, 0)): + Type.__init__(self, '', pos) + + def conforms_to(self, other): + raise Exception('Invalid type: void type.') + + def bypass(self): + return True + + def __eq__(self, other): + return isinstance(other, VoidType) + +class BoolType(Type): + def __init__(self, pos=(0, 0)): + self.name = 'Bool' + self.attributes = [] + self.methods = {} + self.parent = None + self.pos = pos + + def __eq__(self, other): + return other.name == self.name or isinstance(other, BoolType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, BoolType) + + +class SelfType(Type): + def __init__(self, pos=(0, 0)): + self.name = 'Self' + self.attributes = [] + self.methods = {} + self.parent = None + self.pos = pos + + def __eq__(self, other): + return other.name == self.name or isinstance(other, SelfType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, SelfType) + + +class IntType(Type): + def __init__(self, pos=(0, 0)): + self.name = 'Int' + self.attributes = [] + self.methods = {} + self.parent = None + self.pos = pos + + def __eq__(self, other): + return other.name == self.name or isinstance(other, IntType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, IntType) + + +class StringType(Type): + def __init__(self, pos=(0, 0)): + self.name = 'String' + self.attributes = [] + self.methods = {} + self.parent = None + self.pos = pos + self.init_methods() + + def init_methods(self): + self.define_method('length', [], [], IntType()) + self.define_method('concat', ['s'], [self], self) + self.define_method('substr', ['i', 'l'], [IntType(), IntType()], self) + + def __eq__(self, other): + return other.name == self.name or isinstance(other, StringType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, StringType) + + +class ObjectType(Type): + def __init__(self, pos=(0, 0)): + self.name = 'Object' + self.attributes = [] + self.methods = {} + self.parent = None + self.pos = pos + self.init_methods() + + def init_methods(self): + self.define_method('abort', [], [], self) + self.define_method('type_name', [], [], StringType()) + self.define_method('copy', [], [], SelfType()) + + def __eq__(self, other): + return other.name == self.name or isinstance(other, ObjectType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, ObjectType) + +class AutoType(Type): + def __init__(self): + Type.__init__(self, 'AUTO_TYPE') + + def __eq__(self, other): + return other.name == self.name or isinstance(other, AutoType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, AutoType) + + +class IOType(Type): + def __init__(self, pos=(0, 0)): + self.name = 'IO' + self.attributes = [] + self.methods = {} + self.parent = ObjectType(pos) + self.pos = pos + self.init_methods() + + def init_methods(self): + self.define_method('out_string', ['x'], [StringType()], SelfType()) + self.define_method('out_int', ['x'], [IntType()], SelfType()) + self.define_method('in_string', [], [], StringType()) + self.define_method('in_int', [], [], IntType()) + + def __eq__(self, other): + return other.name == self.name or isinstance(other, IOType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, IOType) diff --git a/src/semantic/visitors/__pycache__/selftype_visitor.cpython-37.pyc b/src/semantic/visitors/__pycache__/selftype_visitor.cpython-37.pyc index 8338dc7832c38f9e8a17435229184cfec57ef2bb..66bc0b844a32909c0164455644b69e06d7d1a0b7 100644 GIT binary patch delta 1456 zcmZ`(&1)1f6rW^1cRSOM?P}H1Qf&oCrLAp|qP0j>#IHqb4|YYz?IzV(XLpv&v{Wg0 zP(-|y+(bk#f;|YHJqi8;dXk*H`Y(7gF9o~XP6zTPdCB{|Uw(PX=l(YX-kj&rtUcc71a@TDl!$u-G2VU{w!4WBf!e_sq%u_UXU*nJ7%sYFuy5 z_Vc^u^fBNnoQE_GQrI>QiO`#I!g9*LOe^UMqY3NdU(JJa0L}_viqiO2D;ZdimkB!r z)BC}+r&i4R_`?EAW$-A8LC6&lv3P*vD03v9!i!>XBsf<0J zAQ)C#>YQ4p*TRO5tt3eh>r{R*nPdGsUryT?$9|ZN7@M(9Ts}o{P zX#|cNtcMeK${GUS0shXtF)q5UG?KK^NW)4>OEGDED^#h$gTX9mpe5rx?~R=<*bY*@ zlAjZu39UnXbu^9RC}|zb`}|5FQR UM($)KqO%C{gXj+GMlN#jKjr)jV*mgE delta 1322 zcmb7E%}>-o6z{a1ZnwK#5D=7A0YhS{d?;`*aYOvT5JM!W9AFPLwH=_b+is?16)zqz z+{wh4aPp`gO#BZ#c=q7I!<;?nAK*n3b%4}B~HXw{v*k>)8=@5S%yq`@g5L^m~A9>Wv!X)M;e?5!>HxHFU zdMC^DugGGvc(Qt!^tV-u!Zh=fMsvEKy~5W;D_?NmlLBycMq7uglRSW7 z_Sbm-Vi2-ynar&;S;4pNQ% zFc;<|5m8%_P;LwEOY7)~9HegQ~ z7htcKE!+184h%^iIotzO7Y449bcB7g$4BLQ-Z6M3B@HjmLVqkvk|^b;_SW*^NN7qm bwovK21^{`;+^osU$TR|YxT#E3MyC1?{^$nH diff --git a/src/semantic/visitors/__pycache__/type_builder.cpython-37.pyc b/src/semantic/visitors/__pycache__/type_builder.cpython-37.pyc index 39390011aefed1de806c9afceaa797b47ec9a3e4..a2b31b27dab0484bb518322ebb83bb70c3be90b4 100644 GIT binary patch delta 445 zcmXX@$w~u35bc_op6OY7jAEh&4~h|S#~%Myaj4KWBPo z&hjikKJwM9opU^=!nG{Txt?3$I9oM`#*nZ3#u@UBQ^kw*J3@gL z*gFb)3Y~yPYVfaYC<%0gLx(?V^IdMF-UFb6WCTIgFj|To=@Gh%MY>ckVNY8W(+Gbs z)n3ipaEoX+fg5bAu*x#KVY-kn@^yRyiRVvzCA}OQ3$#hBri?=|Nt&hjhmnFlu9L5L zhtOH01VsXo(8;Me2q`{o*1?!pep5X(f+H?begQd~W=#M9 delta 460 zcmXw#O-my&7{~KWCevivX@{cKmK6`(WvQqj2wwKEU3@u+;!-Obp>$d0R zVY~NzVjd7j9JffD1+47`Za=qmo(z(GO0+0r3Q<$B5G-E68wGK_$0$ z_HzoytQ{ITD7gj&Mwsgn_vzn1QLRZrl|=rNuA|fDb9Xsr3O3?`OvV diff --git a/src/semantic/visitors/__pycache__/type_checker.cpython-37.pyc b/src/semantic/visitors/__pycache__/type_checker.cpython-37.pyc index 061253ccd9f88d7406a2905d759b1f2dfc6a30e3..d477bb48612fff9cd77c12eceeb25286afc94c5b 100644 GIT binary patch delta 4126 zcmb7HO>7(25#G0d+$EPwid<5p{!Cf297d@M|3pp;*Gc??)OBLZkosdb5JQtIn>2sq zw`;>HRv}uYX?tj5WpT z67&-9rMlcu3Q9vQsGao?pO@=eLoeu!a3S1?6e10yU=ZOYp`ujOH-w71B^ILh?o3RG ze)5{_7R#+hqtz^4EjhNkv2ObsPX6}(I}(Yo=jEf(2na$=Aiol5oV_l8kAxXfE-u7j zDlgF(E+>Kbic@Z_+Z5*mGQwwXSDmUGXPZh+$8FRC!u~m(W)GF+L<&CgN{jf z`co6A2u&l&0LiNZia#A5i}!KDT`9H_o@s|*h&rEv=D0vSaa-_6jqH$3$rU}RCV4_l z-V!%um{lsm4V|ug!nTTEp131!DxR_(^5h-j)LpHndrB?r$+hsBm=-owI2+kET+LJ0 z2%Lz%E50S{fXBJ!mar^%${G-PS;&)%`IsMFt2Qge+a+2pU9H=60i>ZEk3%>zfcUa~ zXPt7){7AXgTx-#WQ*>KY!^On;i)Svqvh?E0`O`0-E3RBwI=37c*@r9ZIaOs}5ZF%|*xl5cmH&sh}I)DQJ zabQ9nt|U526qb#iIE>zr7wJ57zOr7TrN(aMzW_@Y*t_}>_8?ju8}z3C=qIn)O$6uE z3VX&pMhy0vIip752o13xnTJal<#YnMOQq%pcT_*Z@8QAY1VM*R?8{eMm5l)TXYmx; zkuKtjhA0&w5cA<(VA8KJBQ`(v0&X1?jf3`8n0IE`QY_UTBU5AoKvMxcQ#1g&E@%V6 z(1atO84MDw?Gp@ZJQyGl5R<-OXb*`7Pw9n$NsplpL!6%;#|0kdgJ$VCIj*9C=~*E8 zJ>IT?w->8T_Vu{M!4AxXd6e_K3IitrM34;9acg!rKG}W^rk-F2VOs$YRClF3QVDGw+vhG{j48!n}iy3ZV@)Kr1Ao5ZQUr zmm9Wwomvm>j}*x<9xH@P^*Cgt61@gv%nN~Ma`xQ17&mS9T=IGKG_I;_GdUUQh67Er zUnCbsyFQ+e1m`c{UW@%Bd2)td*Uy_jevxANx?R3ego~Zm*?H>{`5ODFHFLyOJlTbZ z*f|BB35nSg0Ur&Tydy*6)iF7H(v}!x-3Yt`f44I2JYIJg$ug45NO3kt$d8sd5M=mB^33=X7=V}pE2q|0UC4ZH93=lC&uidQJhzdW z$t6!hUbH-TiUP?~fmf^m2bx2|UkUVmI@C$nXnJz~$!ZS73|mTPvO{$H8QkDl?7QjY z_<&w$t*&0D+5747Bd!ckD4@_HPZ9wXAy7)<3TXg^-h(1c4K|%lu0C1Dfr18=OZ+MmtyPbiQGMCf^h z3}5(ea*r5;K`-6ZM5sa}uTz5rz$-jM`cmD#6JXB$6w8D8yuABa;MN(U+n?Fpu~Zvx z#nb#|ESp^PMyyoO^`spUp2@DmDM3KwU>m)Hgx79(Z-1$}uQmSy8+U2W>}+8K6S^-$ zF;jV5tUSu*p4w%}Z{vMK)Of@)V`q;ei{N$mCX7CpG#`QfACB>ZoHs8K7H<8>qfBOEo5a2GJykEh3u z_5qJ8SPIb=lKo!JdG^ut58^#_(GNk!^@D+o$uI6nTb$>9>`t%`4u1bYk6lkve4-yq z3Pt_@$@dKV!_2uDRyh=NkT15HH1)uoWu)B$fRFggjfqo-=Af_|NvH`KsBDH3I`mO! zacEg+CNv{H0yGQ_XR+tIJH68BHRy3{K?`*nj9G4OB!u@tA;g}W%g>mO-6%EPYI%YC zn;*I5R_o3Jr`%Ji!di2a?B1Mp0?+kDSXTjGJK1PeZq@Bm@B>6}FjW~uga0_RjPySo C+0-%s delta 4108 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 B*Rucs diff --git a/src/semantic/visitors/__pycache__/type_collector.cpython-37.pyc b/src/semantic/visitors/__pycache__/type_collector.cpython-37.pyc index 62e0207a20eb3d5abd763ee83a6fe00e52c449c0..8ef96a49c9d06d360b9d2d63801d63754102fbad 100644 GIT binary patch delta 701 zcmY*W%Zk)M6s<=d)#;>tfMA1&?PkbghFQ807me*G3_6lVF`z^2DkVcDX)75~Xqknx zaU)1A1Xl`f{1LbA3;clD`3csoRx_sH=2YEN_ntcUQ}T0|Op_!+_S^pT^~uJEWXx~d z4M!YHRN)+Bz(kUY=G0*-y~@vhhdmk0A@9j>j&>0Dd2oz)AlO@)4|tfNl$}8B6q_Uy zRZ(~4Vy0B1^aP(UW;5TAiu8GMjG6vOb~ivtO4PvqR007G)?sLo@n4p0*~L1dS8<{@ z=@?7BL+@XCb#a9c*iH0!^oFd^=fR46vC3aOcxcsG6@mUvFCS&I-CO(fM|-n0QWWZj zP%_FoRo2hvub0C3osDfC-l;p-=h3~V2V$|tY}z!^ow7{GXO16pv5%E}K>nn^NGK35w-X z)cn70SoFR6R+seDzjh{un;zUGO|3@yoxeHmt#!zW3oIqnKl}?vfbOP|i4VI{wp#+G zwpNgj+CQV*>Z~QL^D;m8@6e41$k6XJ8N4-vb-kkPOwc%Y6|_1f-Km+lakJ}H!w;pn Ofi0zlM2ulE%*byfnV^IK delta 928 zcmZ8f&1=*^6rY)7lgTF8ezOLGZuuz1h;OCd@Ct%zN`bes6w+`*FMy$8`eF#?AeghkNn4@ece* zB56i)Dkw$HfHT2zM>x4FT)XGMUQN_;Pk6a6{G1D(2O`MpqMnB$v_3BQL?W`hmc@BP zG%WYBnGU%}q%Zj{kvy6G!nLD@Bo6=0E7`iFti%JLye0UmofLcOmcI z=ihuDO87=pv-&`HY4C-uU1?%bOr3&{I*WiC6F3db)ZV6Ls^h9;mlo09V*vO#uv}QT zVU_Qz?`&gfM7HSxm!9+w86`UlBf1^jAuk#q*@zs}N9+(pe3ltUq?g;uCy oS-I3Lwebpj$87!+{T-KV_>H`f!z{UlleBe5v`H`12wu+q0_TOuegFUf diff --git a/src/semantic/visitors/__pycache__/var_collector.cpython-37.pyc b/src/semantic/visitors/__pycache__/var_collector.cpython-37.pyc index 8d063d60dd8761fc5f3141517ce94d8910091573..eee423bd29b49a00c171f9535a68eadee97e989d 100644 GIT binary patch delta 2364 zcmb7G&u<%55Z+zyde@HaxQUZEEk8m7i8iPqg;Z@I4Rsr*4RUQrqM$6$mE+wc3u~|S zb`w&8s34V)fJ^kGlp7!+A%r*-F5EaEBqS~zkcu80IB?;@AApcx<}GQ=W-A3t9zD;S z`DWfX^XB>2$KQVXzd>fk$8|j_DGUm#(*MmMRnC5nSGW zyDO3H0$Y*;@u@)a^n=8XsL^4$Hl9a}1nI`@UJy+28(!Ncs1L<4uH`Xu^h5b%63s|~ zekZT4^x}wRHIaixgnn=(6mFTPO9v@mdjBg8n`5^)(QJloT^!LDVHc z-%-Ap7zEuu9zqdRFu5KCBntEZ>>Q_d@_VtHo>q^G8Cp><)DWKFR_NI~x7ljU9%NJX zEPEe6JQSE3@*12bijPRc^k;SX%KZqJ0l~8Cc3@&M&gy1hlZSBQB#2HrIR$ZGlk~Y` zz4Sfpr&GKF5|hR!n9>HGni2Cq)6=fw2Mw>;o;goI3ZM;15`OX)WXXEFZMQ6Pe?MBmE( z5@w!1$ef(T0C*`6lI01K6b30Qmlozr7b|76T3d?A4D%1`HH9nQ?9;H)lbtEy)_D+2 zd2q{Vt$E~W)Wp=xp?~FGc??kw-3gY!^TznRM)$him9U4<#I&47z*0`j2~2F-j--@G zQij?x`KVzsn#ZBPNngk>oW+co?AmJqQ;4&^5gh4$y-R<~&+yX_&Pm6JyXT$Ug**Aq zjdK_;;o9503giO(>}ZEbwfJ@6g}}xlSO`6OQcgc9;eHH-d!YAmo(K{Szalky%4fne zH$1o_N6!8u`eTnV!@J-aKw}9%Xfn-qecOc9kx2W5y1f_vCuyJaLH0*)`AMF1!drbA zMl@OXW4Z{`aTMI9&BBXQJoBrNIjMp;0oAp-UG{*5Lei(_5(9CAwxc<0} x|2O<_%BzTjZ+bY%QlUj11_DBMoa=5>rcF0JYtyx7M6mGDEF)@SUMz~5^bY~E!KwfN delta 2269 zcmb7FU1%It6yBMgpZ!fXzni2XNo#8zp|K>@#x}-mn~et7jmd^!7IfU~++;_0ca}4g zpZZ{g`k;MK%SG@(P!S3(B5DQE2Oq2tf`acCAAFTQi7!$_yyuSTZZ=b>fgEPfz2`gM z`OdxPzCZcfM8}0>G8W>0Gqq1%{CntX$AC0{_2h~3HLa-C^r9|>tdJ#FBP*e&LY88w zZ-gxMvRsT>S|McUzhk5!F@4*1ZO;MzDLwqfjd(a2MdP_N`;Wp@|x0Us^9$ZV5fs{OAmMeDEGL$A3bo1q6 z+#=;_2}+*r)Z1VI;}On{a1)X>DIxVrhRo5gsb8K>bKgE5LIFCMQt~`#2O8!pgY-@9 zr(vwbNU*56Nj%fL)F4c@Ef#J#F2ty#&&Dw);C@KcZ}lU_-O_!!$_6i{9Ufzj(SP*S zr;lJDHi#uL0dld|w>$!)xG=^|tC|8b2yBvm5V?Iyh%YmF{4`S=T%uar);qE3s_lAZ zr`DL6re8%Xdwv9*#AFYlIoKyKxbF%6@5 z3n++@Uu)=%xU)PIj9XlvwWm5a06vUpn`D0v`_C(ja{c;ePr3%^H zytz;?m$R9<#e8l}q=HFII))o!wrg5s!>$tx2GOC2RA=zBFSmFxlQT0p3|=$mvhxf1 z?3^#r5Z~ZS62Sly57tpUPD~-Y4G;nudaE>)Bp(b?r9eMS{^~PNHJQU>m;iNYk`)9& z$0WV0ndODdgm_YKmYI}1`j9ZLY9gkjSSI1=0)l=5>r+IO6O);smMV46c!p5^8c0_1Ti zK(MblLjDZK_&2QmnYm}+cl*qo4%kD@E9!N!W4h%AQ*cud zp&zK#Z>@-Dbpp{;oCdpaZl9rOp??$cX*gWz67CGB^cOmu&P=3m6^A&J`Lij6S9U6- z&f?F3v&o-|ykimQ#SO{|&d6c>t9Pe8PAzl+Tx(>2H1s*)Lrhly7`Aw{GC HDI)(1old9B diff --git a/src/semantic/visitors/selftype_visitor.py b/src/semantic/visitors/selftype_visitor.py index 84f6f05d..f198f09b 100644 --- a/src/semantic/visitors/selftype_visitor.py +++ b/src/semantic/visitors/selftype_visitor.py @@ -1,4 +1,5 @@ from semantic.tools import * +from semantic.types import Type, Method from semantic.visitors import visitor from utils.ast import * @@ -101,5 +102,7 @@ def visit(self, node:OptionNode, scope:Scope): if var_info.type.name == 'SELF_TYPE': var_info.type = self.current_type - - \ No newline at end of file + + @visitor.when(InstantiateNode) + def visit(self, node:InstantiateNode, scope:Scope): + node.lex = self.current_type.name if node.lex == 'SELF_TYPE' else node.lex \ No newline at end of file diff --git a/src/semantic/visitors/type_builder.py b/src/semantic/visitors/type_builder.py index 740057af..7d15dd4a 100644 --- a/src/semantic/visitors/type_builder.py +++ b/src/semantic/visitors/type_builder.py @@ -1,6 +1,5 @@ from utils.errors import SemanticError, AttributesError, TypesError, NamesError -from semantic.tools import Attribute, Method, Type -from semantic.tools import VoidType, ErrorType +from semantic.types import Type, VoidType, ErrorType, Attribute, Method from semantic.tools import Context from semantic.visitors import visitor from utils.ast import * @@ -19,8 +18,6 @@ def visit(self, node): def visit(self, node:ProgramNode): for dec in node.declarations: self.visit(dec) - - @visitor.when(ClassDeclarationNode) def visit(self, node:ClassDeclarationNode): @@ -32,7 +29,7 @@ def visit(self, node:ClassDeclarationNode): if node.parent is not None: try: - parent = self.context.get_type(node.parent, node.pos) + parent = self.context.get_type(node.parent, node.parent_pos) current = parent while current is not None: if current.name == self.current_type.name: diff --git a/src/semantic/visitors/type_checker.py b/src/semantic/visitors/type_checker.py index 1277dc09..aa572d2b 100644 --- a/src/semantic/visitors/type_checker.py +++ b/src/semantic/visitors/type_checker.py @@ -1,6 +1,7 @@ from semantic.visitors import visitor from semantic.tools import * -from utils.utils import get_common_basetype +from semantic.types import * +from utils.utils import get_common_basetype, get_type from utils.ast import * from utils.errors import SemanticError, AttributesError, TypesError, NamesError @@ -28,7 +29,6 @@ def _get_type(self, ntype:Type, pos): self.errors.append(e) return ErrorType() - def _get_method(self, typex:Type, name:str, pos) -> Method: try: return typex.get_method(name, pos) @@ -55,14 +55,17 @@ def visit(self, node:ClassDeclarationNode, scope:Scope): @visitor.when(AttrDeclarationNode) def visit(self, node:AttrDeclarationNode, scope:Scope): varinfo = scope.find_variable(node.id) + + vartype = get_type(varinfo.type, self.current_type) + if node.expr is not None: typex = self.visit(node.expr, scope) - if not typex.conforms_to(varinfo.type): - error_text = TypesError.INCOMPATIBLE_TYPES %(typex.name, varinfo.type.name) - self.errors.append(TypesError(error_text, node.pos)) + if not typex.conforms_to(vartype): + error_text = TypesError.INCOMPATIBLE_TYPES %(typex.name, vartype.name) + self.errors.append(TypesError(error_text, *node.pos)) return ErrorType() return typex - return self._get_type(node.type, node.type_pos) + return vartype @@ -70,25 +73,25 @@ def visit(self, node:AttrDeclarationNode, scope:Scope): def visit(self, node:FuncDeclarationNode, scope:Scope): parent = self.current_type.parent ptypes = [param[1] for param in node.params] - + self.current_method = method = self.current_type.get_method(node.id, node.pos) if parent is not None: try: old_meth = parent.get_method(node.id, node.pos) error_text = AttributesError.WRONG_SIGNATURE % (node.id, parent.name) if old_meth.return_type.name != method.return_type.name: - if node.type != 'SELF_TYPE': self.errors.append(AttributesError(error_text, *node.pos)) elif any(type1.name != type2.name for name, type1, type2 in zip(ptypes, method.param_types, old_meth.param_types)): - if name != 'SELF_TYPE': self.errors.append(AttributesError(error_text, *node.pos)) except SemanticError: pass result = self.visit(node.body, scope) - - if not result.conforms_to(method.return_type): - error_text = TypesError.INCOMPATIBLE_TYPES %(method.return_type.name, result.name) + + return_type = get_type(method.return_type, self.current_type) + + if not result.conforms_to(return_type): + error_text = TypesError.INCOMPATIBLE_TYPES %(return_type.name, result.name) self.errors.append(TypesError(error_text, *node.type_pos)) @@ -96,11 +99,11 @@ def visit(self, node:FuncDeclarationNode, scope:Scope): def visit(self, node:VarDeclarationNode, scope:Scope): var_info = scope.find_variable(node.id) - vtype = var_info.type + vtype = get_type(var_info.type, self.current_type) if node.expr != None: typex = self.visit(node.expr, scope) - if not typex.conforms_to(var_info.type): + if not typex.conforms_to(vtype): error_text = TypesError.INCOMPATIBLE_TYPES %(vtype.name, typex.name) self.errors.append(TypesError(error_text, *node.type_pos)) return typex @@ -110,7 +113,7 @@ def visit(self, node:VarDeclarationNode, scope:Scope): @visitor.when(AssignNode) def visit(self, node:AssignNode, scope:Scope): vinfo = scope.find_variable(node.id) - vtype = vinfo.type + vtype = get_type(vinfo.type, self.current_type) typex = self.visit(node.expr, scope) @@ -142,9 +145,11 @@ def visit(self, node:CallNode, scope:Scope): stype = self.visit(node.obj, scope) meth = self._get_method(stype, node.id, node.pos) - self._check_args(meth, scope, node.args, node.pos) - return meth.return_type + if not isinstance(meth, MethodError): + self._check_args(meth, scope, node.args, node.pos) + return get_type(meth.return_type, stype) + @visitor.when(BaseCallNode) def visit(self, node:BaseCallNode, scope:Scope): @@ -157,17 +162,21 @@ def visit(self, node:BaseCallNode, scope:Scope): return ErrorType() meth = self._get_method(typex, node.id, node.pos) - self._check_args(meth, scope, node.args, node.pos) - return meth.return_type - + if not isinstance(meth, MethodError): + self._check_args(meth, scope, node.args, node.pos) + + return get_type(meth.return_type, typex) + @visitor.when(StaticCallNode) def visit(self, node:StaticCallNode, scope:Scope): typex = self.current_type meth = self._get_method(typex, node.id, node.pos) - self._check_args(meth, scope, node.args, node.pos) - return meth.return_type + if not isinstance(meth, MethodError): + self._check_args(meth, scope, node.args, node.pos) + + return get_type(meth.return_type, typex) @visitor.when(ConstantNumNode) @@ -187,12 +196,13 @@ def visit(self, node:ConstantStrNode, scope:Scope): @visitor.when(VariableNode) def visit(self, node:VariableNode, scope:Scope): - return scope.find_variable(node.lex).type - + typex = scope.find_variable(node.lex).type + return get_type(typex, self.current_type) + @visitor.when(InstantiateNode) def visit(self, node:InstantiateNode, scope:Scope): - return self._get_type(node.lex, node.pos) + return get_type(self._get_type(node.lex, node.pos), self.current_type) @visitor.when(WhileNode) diff --git a/src/semantic/visitors/type_collector.py b/src/semantic/visitors/type_collector.py index caa046fa..36f0dc00 100644 --- a/src/semantic/visitors/type_collector.py +++ b/src/semantic/visitors/type_collector.py @@ -1,8 +1,7 @@ -from semantic.tools import SemanticError -from semantic.tools import Attribute, Method, Type -from semantic.tools import VoidType, ErrorType, StringType, BoolType, IntType, ObjectType, AutoType +from utils.errors import SemanticError from semantic.tools import Context from semantic.visitors import visitor +from semantic.types import * from utils.ast import * class TypeCollector(object): @@ -21,8 +20,8 @@ def visit(self, node:ProgramNode): self.context.types['Int'] = IntType() self.context.types['Object'] = ObjectType() self.context.types['Bool'] = BoolType() - self.context.types['AUTO_TYPE'] = AutoType() - self.context.create_type('SELF_TYPE', (0, 0)) + self.context.types['SELF_TYPE'] = SelfType() + # self.context.create_type('SELF_TYPE', (0, 0)) for dec in node.declarations: self.visit(dec) diff --git a/src/semantic/visitors/var_collector.py b/src/semantic/visitors/var_collector.py index e8dc47a8..9304e43c 100644 --- a/src/semantic/visitors/var_collector.py +++ b/src/semantic/visitors/var_collector.py @@ -1,5 +1,6 @@ from semantic.visitors import visitor from semantic.tools import * +from semantic.types import Type, ErrorType from utils.errors import SemanticError, AttributesError, TypesError, NamesError from utils.ast import * diff --git a/src/utils/__pycache__/ast.cpython-37.pyc b/src/utils/__pycache__/ast.cpython-37.pyc index 7ab22a42c179fd6f590097d10ec7a37ebdfda40e..12e406d0e5cb791f53d51bd99d816bff1cacf0d7 100644 GIT binary patch delta 40 ucmbOfI4O|ViISu}Nj+FF13j5@(rxv%7ERy`8C5b#hp%xj-@4Se}0gfE6Ep!=d7UGC8JAgT@F# zMiF5wLJ`YQB50|d8HA25=`vwSSF|E58^KFgU!-=mH*>;@#vTOzC(VLxATsCl{?0R* z>Y3<@N;5xuKzIK3i2mXPrykp~`Q|M?a2K14s(5YjMS!-+ATrVJ*v234hx{&<|C*m= zXR^(FnR7G0KeE;g(~Fcuv$8em$PWAT_dFOmk0=wC8AA$Ba3gGeO#a6}f50wTkn|Ra zLcT?H;kEEU$4p(DLSl;sL6Xl$yTe_|ZW4s`#Kf1wbkJ|Jlf*J5A8UQCSlqJlylHLx Yn#Nvyt4ER9N1`QsudpGMqdet(19F#G;Q#;t delta 255 zcmaFN*}@U##LLUY00cj#FOCajVqka-;=llq&)@*W#VSA|g&~D8harj~g(-!(g&~SD zg(Za*NHe9drLY5O<`l+Y22GBaK$Q%B6T7MyIVQ6*HZXEcZewiZ<^T#7feFsZLQGnW z0+Vf-HY$MxG#QHoKorw0COv~9KDaulVgcr5D4Gv48@S7Z)Uyub2%;a4>VQaBu?vk 1: return paths[0][i-1] - return paths[0][-1] \ No newline at end of file + return paths[0][-1] + +def get_type(typex:Type, current_type:Type) -> Type: + return current_type if typex == SelfType() else typex + \ No newline at end of file From d6990fd4c7a39752174608dcc5877e2074339716 Mon Sep 17 00:00:00 2001 From: Loraine Monteagudo Date: Wed, 23 Sep 2020 17:56:04 -0400 Subject: [PATCH 20/60] Starting code generation phase --- .gitignore | 280 +++ .idea/cool-compiler-2020.iml | 13 + .idea/misc.xml | 7 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + .idea/workspace.xml | 281 +++ __pycache__/ast.cpython-37.pyc | Bin 9794 -> 9794 bytes src/.mypy_cache/3.7/@plugins_snapshot.json | 1 - src/codegen/__init__.py | 10 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 661 bytes .../__pycache__/cil_ast.cpython-37.pyc | Bin 0 -> 9649 bytes .../__pycache__/pipeline.cpython-37.pyc | Bin 0 -> 639 bytes src/codegen/cil_ast.py | 179 ++ src/codegen/pipeline.py | 10 + .../base_cil_visitor.cpython-37.pyc | Bin 0 -> 5274 bytes .../cil_format_visitor.cpython-37.pyc | Bin 0 -> 5237 bytes .../__pycache__/cil_visitor.cpython-37.pyc | Bin 0 -> 10820 bytes src/codegen/visitors/base_cil_visitor.py | 127 ++ src/codegen/visitors/cil_format_visitor.py | 100 + src/codegen/visitors/cil_visitor.py | 357 ++++ src/lexer/__pycache__/__init__.cpython-37.pyc | Bin 186 -> 186 bytes src/lexer/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 163 bytes src/lexer/__pycache__/lexer.cpython-37.pyc | Bin 9204 -> 9204 bytes src/lexer/__pycache__/lexer.cpython-38.pyc | Bin 0 -> 8956 bytes src/main.py | 47 +- .../__pycache__/__init__.cpython-37.pyc | Bin 187 -> 187 bytes .../__pycache__/base_parser.cpython-37.pyc | Bin 1047 -> 1047 bytes src/parser/__pycache__/logger.cpython-37.pyc | Bin 432 -> 432 bytes src/parser/__pycache__/parser.cpython-37.pyc | Bin 14135 -> 14135 bytes src/parser/output_parser/parselog.txt | 1757 ++++++++++++++--- src/self.cl | 2 +- .../__pycache__/__init__.cpython-37.pyc | Bin 189 -> 189 bytes .../__pycache__/semantic.cpython-37.pyc | Bin 1414 -> 1419 bytes src/semantic/__pycache__/tools.cpython-37.pyc | Bin 5298 -> 6214 bytes src/semantic/__pycache__/types.cpython-37.pyc | Bin 12058 -> 12451 bytes src/semantic/semantic.py | 2 +- src/semantic/tools.py | 24 +- src/semantic/types.py | 49 +- .../__pycache__/__init__.cpython-37.pyc | Bin 188 -> 198 bytes .../__pycache__/format_visitor.cpython-37.pyc | Bin 7539 -> 7527 bytes .../selftype_visitor.cpython-37.pyc | Bin 3738 -> 3726 bytes .../__pycache__/type_builder.cpython-37.pyc | Bin 2828 -> 2816 bytes .../__pycache__/type_checker.cpython-37.pyc | Bin 10158 -> 10640 bytes .../__pycache__/type_collector.cpython-37.pyc | Bin 1501 -> 1517 bytes .../__pycache__/var_collector.cpython-37.pyc | Bin 6552 -> 7174 bytes src/semantic/visitors/format_visitor.py | 2 +- src/semantic/visitors/selftype_visitor.py | 2 +- src/semantic/visitors/type_builder.py | 2 +- src/semantic/visitors/type_checker.py | 58 +- src/semantic/visitors/type_collector.py | 3 +- src/semantic/visitors/var_collector.py | 44 +- src/test.cl | 15 +- src/utils/__pycache__/__init__.cpython-37.pyc | Bin 186 -> 186 bytes src/utils/__pycache__/ast.cpython-37.pyc | Bin 10386 -> 10775 bytes src/utils/__pycache__/errors.cpython-37.pyc | Bin 5164 -> 5164 bytes src/utils/__pycache__/tokens.cpython-37.pyc | Bin 1381 -> 1381 bytes src/utils/__pycache__/utils.cpython-37.pyc | Bin 1251 -> 1251 bytes src/utils/__pycache__/visitor.cpython-37.pyc | Bin 0 -> 2359 bytes src/utils/ast.py | 16 +- src/{semantic/visitors => utils}/visitor.py | 0 venv/Scripts/Activate.ps1 | 51 + venv/Scripts/activate | 76 + venv/Scripts/activate.bat | 45 + venv/Scripts/deactivate.bat | 21 + venv/Scripts/python.exe | Bin 0 -> 515584 bytes venv/Scripts/pythonw.exe | Bin 0 -> 515072 bytes venv/pyvenv.cfg | 3 + 67 files changed, 3223 insertions(+), 375 deletions(-) create mode 100644 .gitignore create mode 100644 .idea/cool-compiler-2020.iml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml delete mode 100644 src/.mypy_cache/3.7/@plugins_snapshot.json create mode 100644 src/codegen/__pycache__/__init__.cpython-37.pyc create mode 100644 src/codegen/__pycache__/cil_ast.cpython-37.pyc create mode 100644 src/codegen/__pycache__/pipeline.cpython-37.pyc create mode 100644 src/codegen/cil_ast.py create mode 100644 src/codegen/pipeline.py create mode 100644 src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc create mode 100644 src/codegen/visitors/__pycache__/cil_format_visitor.cpython-37.pyc create mode 100644 src/codegen/visitors/__pycache__/cil_visitor.cpython-37.pyc create mode 100644 src/codegen/visitors/base_cil_visitor.py create mode 100644 src/codegen/visitors/cil_format_visitor.py create mode 100644 src/codegen/visitors/cil_visitor.py create mode 100644 src/lexer/__pycache__/__init__.cpython-38.pyc create mode 100644 src/lexer/__pycache__/lexer.cpython-38.pyc create mode 100644 src/utils/__pycache__/visitor.cpython-37.pyc rename src/{semantic/visitors => utils}/visitor.py (100%) create mode 100644 venv/Scripts/Activate.ps1 create mode 100644 venv/Scripts/activate create mode 100644 venv/Scripts/activate.bat create mode 100644 venv/Scripts/deactivate.bat create mode 100644 venv/Scripts/python.exe create mode 100644 venv/Scripts/pythonw.exe create mode 100644 venv/pyvenv.cfg diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..f28ab696 --- /dev/null +++ b/.gitignore @@ -0,0 +1,280 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# Pycharm +.idea/ + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +.dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ diff --git a/.idea/cool-compiler-2020.iml b/.idea/cool-compiler-2020.iml new file mode 100644 index 00000000..f170c4d3 --- /dev/null +++ b/.idea/cool-compiler-2020.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..79a43659 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..42020ef6 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..94a25f7f --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 00000000..b0d290eb --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,281 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1598757080509 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - file://$PROJECT_DIR$/src/main.py - 32 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.mypy_cache/3.7/@plugins_snapshot.json b/.mypy_cache/3.7/@plugins_snapshot.json deleted file mode 100644 index 9e26dfee..00000000 --- a/.mypy_cache/3.7/@plugins_snapshot.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 52b5ba1b..27b0b96d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,23 +1,23 @@ -language: python -python: - - "3.7" -# command to install dependencies -install: - - pip install -r requirements.txt -# command to run tests -jobs: - include: - - stage: "Lexer" - name: "Lexer" - script: - - cd src - - make clean - - make - - make test TAG=lexer - - stage: "Parser" - name: "Parser" - script: - - cd src - - make clean - - make +language: python +python: + - "3.7" +# command to install dependencies +install: + - pip install -r requirements.txt +# command to run tests +jobs: + include: + - stage: "Lexer" + name: "Lexer" + script: + - cd src + - make clean + - make + - make test TAG=lexer + - stage: "Parser" + name: "Parser" + script: + - cd src + - make clean + - make - make test TAG=parser \ No newline at end of file diff --git a/LICENSE b/LICENSE index f543cdb4..ad9e4865 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,21 @@ -MIT License - -Copyright (c) 2020 School of Math and Computer Science, University of Havana - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +MIT License + +Copyright (c) 2020 School of Math and Computer Science, University of Havana + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Pipfile b/Pipfile index 6ad89606..5b7ff3c2 100644 --- a/Pipfile +++ b/Pipfile @@ -1,12 +1,12 @@ -[[source]] -name = "pypi" -url = "https://pypi.org/simple" -verify_ssl = true - -[dev-packages] - -[packages] -ply = "*" - -[requires] -python_version = "3.7" +[[source]] +name = "pypi" +url = "https://pypi.org/simple" +verify_ssl = true + +[dev-packages] + +[packages] +ply = "*" + +[requires] +python_version = "3.7" diff --git a/Pipfile.lock b/Pipfile.lock index 8b110a67..e971880a 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,29 +1,29 @@ -{ - "_meta": { - "hash": { - "sha256": "768c4b66d0ce858fbbf1b8a8998ffa9616166666555d0dc7bd1b92a9316518c8" - }, - "pipfile-spec": 6, - "requires": { - "python_version": "3.7" - }, - "sources": [ - { - "name": "pypi", - "url": "https://pypi.org/simple", - "verify_ssl": true - } - ] - }, - "default": { - "ply": { - "hashes": [ - "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", - "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce" - ], - "index": "pypi", - "version": "==3.11" - } - }, - "develop": {} -} +{ + "_meta": { + "hash": { + "sha256": "768c4b66d0ce858fbbf1b8a8998ffa9616166666555d0dc7bd1b92a9316518c8" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.7" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "ply": { + "hashes": [ + "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", + "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce" + ], + "index": "pypi", + "version": "==3.11" + } + }, + "develop": {} +} diff --git a/__pycache__/ast.cpython-37.pyc b/__pycache__/ast.cpython-37.pyc deleted file mode 100644 index 5b787eb83ea8d6054947caa70f33e6ff3a781854..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9794 zcmcIqS#R6e85Kpzmb`C?<1CYXQ8J0LPLjzcTXFU{dj>Gts*Em^XewLIr94dn_n}CN zd6+&FC{Un4fi?rQXi=a*fdT~z6zK2ZWBV`q)N?*AqHNhAH7E^U>X4V;x%cqL~D0!JC1PsUmPu@FehYbprT=;4Q!>)hXapf~SB_t24l7>>==N1^!H( z1wJcy8}K=G9{9ZA?ZBU_3&0ly?*P82E&*Q>{0Z=7bp`l};GMuFH4Qv%Pr&{z;2Bj0 zF5Bb4yMeE&S>Rc@z6bc4x(w*&z&F%Q;G2T?0pC)$fo}`m4}3@61->iz0Pvi; z2Yk;S!Tkq;@2dyE4+I|qeyAP+KN4I}j~}H9PpX0E@@QZ$VRr^l*r|C#rRLMhK)tk^ znQJI}u3);kN@dYnuqzd}uToiPsO36;4^%3zmaV#X(6x#HCw&bJ%E&|wpeRcDpW&S znlj!_L`aVX73K;VO;T;LU>4D&ju;d{X;t^4V2z;b#BE*Q=rImoZ8hG1qN|C+N9VB% zXFoXD!+?`GHs{dn>m_YF4)jVuNgpIlKuH{%GC!+zLnmMxg!Q2a8*v+(i4!GO*o-3d zr;Oxu10KaF$+{Eey5%^lHLg-pZajv*wH?6ot(6Qs%vedIOs|+I&A{6-Zn~!2o+V4$ zi%mE8+_sv_kkU1m8crdr^DyC>HT7C!AWG>m79%WL&rlv8eTf$xKEssJBY$sqbZTtq zl63a?PD$<9hTv%tx9P`jmsnwgcpSgByjWc&UX>l-#$%}6Apl=Hs%D64Y0=SK$>L1L zD+3*~dKh_#G3uuhSG}_R@9R`E#h|2bqW_H zVFtQV-M8C2bS0EFiLjJw3n|!lBs$_YVdFXG_;j*SMraK7Cqw|8h~s9Q3Z&?Rw*&TywCTGLabh)cWvgD7 zDaOZ!fim{nsaIxKOMuV1hCC(?XcZN27 zaflO(lb@+Ksy`BSOx(|n$Iw$anngV&P$cc)0b-0?rK#8RgP4TkyxaK$NT&SKv^mcd=l8 z_SEqQIJqtvMus}6w4T4r;AWWsw+6Pio1)F_O0~VPI!(*IYQ%|E8+z2l^t&4B)_s!M z1$s}RXp#xfc1kk0aZ5DGOtv?sD^>Qv<}KRwRUuBSO5b#|u~4ga6HI2^AF2y}7#%WA4a66yD zio|qBy~f;Wyr@+zZy1W|!y$?0WH@i8-lcwLAlG2F_rWy6HE-I@I?I>`%bFC60xmmr zyDnH4=PMPgiyfy@@uG%`$Q|FOef9;b->qw!6H0_x5G$=(0=t90*{WTy2d3HTf}uZU zb)h+oU*E$XNJiYXWW!z?r**CQa*ad96HFgr)41$fPcERH@yJ`t*qwC;>c}+L&n+8H;cOZU zbIVxB8umZQ{Ec%rMT2Z6dQRNd^PnqnB56e05)Gu_ZXVfW9vu#+tw8#aj)YOfD?BOO z-Uh0xQ+!FIY(JuBYIPGrRXPXHMqa_WaxJh8ZHTMb!!77t9BqcAVXcS> z?&UGq#YF;TJ{TM6qEFzy4K!KAt-LB{=d)%lM5rRBV=RDO!P zf|!glc~|GwNl>5Tu1L#UsqY*vtk5KzpEGh9%`=^4-(cA4ySGG#Tr-S^o&A_Q%3?}Z zOcI&VRYG_+(t&W&^E0+RIw@>5B$Pi%gkFHX_q6FdA#rClVmM*%9lP00iptC93|VtW z^AwlW>*lGSv(cdsj`+->2H)KUHGSw8WT7+|B_kYNI^RXu`Gyul=i`|+xfwAfR^fMv zU=HqoD`O&bn$}`-Zdtx9;j`K5sckEYS}uPXmVQZ-{v#%i%{dZq&fuFFpKVOiDgS?|@_R|#ai1>1j*a1qDm%H6@&=>%ka1Ne^!8F6f~K9bG8N>;H%!02XWK}N9Pg!wku01s8*fQhOoakr{znbHr=J=#bESSVK zldCSXU;@(244Uz(8AqD#t?71}{-F7sG}Y7WRAkncCG0`r<}P~w(sJ1Vavq`>GDk8a kru_Ae Introduzca sus datos (de todo el equipo) en la siguiente tabla: - -**Nombre** | **Grupo** | **Github** ---|--|-- -Loraine Monteagudo García | C411 | [@lorainemg](https://github.com/lorainemg) -Amanda Marrero Santos | C411 | [@amymsantos42](https://github.com/amymsantos42) -Manuel Fernández Arias | C411 | [@nolyfdezarias](https://github.com/nolyfdezarias) - -## Readme - -Modifique el contenido de este documento para documentar de forma clara y concisa los siguientes aspectos: - -- Cómo ejecutar (y compilar si es necesario) su compilador. -- Requisitos adicionales, dependencias, configuración, etc. -- Opciones adicionales que tenga su compilador. - -### Sobre los Equipos de Desarrollo - -Para desarrollar el compilador del lenguaje COOL se trabajará en equipos de 2 o 3 integrantes. El proyecto de Compilación será recogido y evaluado únicamente a través de Github. Es imprescindible tener una cuenta de Github para cada participante, y que su proyecto esté correctamente hosteado en esta plataforma. Próximamente les daremos las instrucciones mínimas necesarias para ello. - -### Sobre los Materiales a Entregar - -Para la evaluación del proyecto Ud. debe entregar un informe en formato PDF (`report.pdf`) que resuma de manera organizada y comprensible la arquitectura e implementación de su compilador. -El documento **NO** debe exceder las 5 cuartillas. -En él explicará en más detalle su solución a los problemas que, durante la implementación de cada una de las fases del proceso de compilación, hayan requerido de Ud. especial atención. - -### Estructura del reporte - -Usted es libre de estructurar su reporte escrito como más conveniente le parezca. A continuación le sugerimos algunas secciones que no deberían faltar, aunque puede mezclar, renombrar y organizarlas de la manera que mejor le parezca: - -- **Uso del compilador**: detalles sobre las opciones de líneas de comando, si tiene opciones adicionales (e.j., `--ast` genera un AST en JSON, etc.). Básicamente lo mismo que pondrá en este Readme. -- **Arquitectura del compilador**: una explicación general de la arquitectura, en cuántos módulos se divide el proyecto, cuantas fases tiene, qué tipo de gramática se utiliza, y en general, como se organiza el proyecto. Una buena imagen siempre ayuda. -- **Problemas técnicos**: detalles sobre cualquier problema teórico o técnico interesante que haya necesitado resolver de forma particular. - -## Sobre la Fecha de Entrega - -Se realizarán recogidas parciales del proyecto a lo largo del curso. En el Canal de Telegram [@matcom_cmp](https://t.me/matcom_cmp) se anunciará la fecha y requisitos de cada primera entrega. +# Documentación + +> Introduzca sus datos (de todo el equipo) en la siguiente tabla: + +**Nombre** | **Grupo** | **Github** +--|--|-- +Loraine Monteagudo García | C411 | [@lorainemg](https://github.com/lorainemg) +Amanda Marrero Santos | C411 | [@amymsantos42](https://github.com/amymsantos42) +Manuel Fernández Arias | C411 | [@nolyfdezarias](https://github.com/nolyfdezarias) + +## Readme + +Modifique el contenido de este documento para documentar de forma clara y concisa los siguientes aspectos: + +- Cómo ejecutar (y compilar si es necesario) su compilador. +- Requisitos adicionales, dependencias, configuración, etc. +- Opciones adicionales que tenga su compilador. + +### Sobre los Equipos de Desarrollo + +Para desarrollar el compilador del lenguaje COOL se trabajará en equipos de 2 o 3 integrantes. El proyecto de Compilación será recogido y evaluado únicamente a través de Github. Es imprescindible tener una cuenta de Github para cada participante, y que su proyecto esté correctamente hosteado en esta plataforma. Próximamente les daremos las instrucciones mínimas necesarias para ello. + +### Sobre los Materiales a Entregar + +Para la evaluación del proyecto Ud. debe entregar un informe en formato PDF (`report.pdf`) que resuma de manera organizada y comprensible la arquitectura e implementación de su compilador. +El documento **NO** debe exceder las 5 cuartillas. +En él explicará en más detalle su solución a los problemas que, durante la implementación de cada una de las fases del proceso de compilación, hayan requerido de Ud. especial atención. + +### Estructura del reporte + +Usted es libre de estructurar su reporte escrito como más conveniente le parezca. A continuación le sugerimos algunas secciones que no deberían faltar, aunque puede mezclar, renombrar y organizarlas de la manera que mejor le parezca: + +- **Uso del compilador**: detalles sobre las opciones de líneas de comando, si tiene opciones adicionales (e.j., `--ast` genera un AST en JSON, etc.). Básicamente lo mismo que pondrá en este Readme. +- **Arquitectura del compilador**: una explicación general de la arquitectura, en cuántos módulos se divide el proyecto, cuantas fases tiene, qué tipo de gramática se utiliza, y en general, como se organiza el proyecto. Una buena imagen siempre ayuda. +- **Problemas técnicos**: detalles sobre cualquier problema teórico o técnico interesante que haya necesitado resolver de forma particular. + +## Sobre la Fecha de Entrega + +Se realizarán recogidas parciales del proyecto a lo largo del curso. En el Canal de Telegram [@matcom_cmp](https://t.me/matcom_cmp) se anunciará la fecha y requisitos de cada primera entrega. diff --git a/requirements.txt b/requirements.txt index f23029c8..cba16ee2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -pytest -pytest-ordering -ply +pytest +pytest-ordering +ply diff --git a/src/Readme.md b/src/Readme.md index cdca282e..1200371b 100644 --- a/src/Readme.md +++ b/src/Readme.md @@ -1,78 +1,78 @@ -# COOL: Proyecto de Compilación - -La evaluación de la asignatura Complementos de Compilación, inscrita en el programa del 4to año de la Licenciatura en Ciencia de la Computación de la Facultad de Matemática y Computación de la -Universidad de La Habana, consiste este curso en la implementación de un compilador completamente -funcional para el lenguaje _COOL_. - -_COOL (Classroom Object-Oriented Language)_ es un pequeño lenguaje que puede ser implementado con un esfuerzo razonable en un semestre del curso. Aun así, _COOL_ mantiene muchas de las características de los lenguajes de programación modernos, incluyendo orientación a objetos, tipado estático y manejo automático de memoria. - -### Sobre el Lenguaje COOL - -Ud. podrá encontrar la especificación formal del lenguaje COOL en el documento _"COOL Language Reference Manual"_, que se distribuye junto con el presente texto. - -## Código Fuente - -### Compilando su proyecto - -Si es necesario compilar su proyecto, incluya todas las instrucciones necesarias en un archivo [`/src/makefile`](/src/makefile). -Durante la evaluación su proyecto se compilará ejecutando la siguiente secuencia: - -```bash -$ cd source -$ make clean -$ make -``` - -### Ejecutando su proyecto - -Incluya en un archivo [`/src/coolc.sh`](/src/coolc.sh) todas las instrucciones que hacen falta para lanzar su compilador. Recibirá como entrada un archivo con extensión `.cl` y debe generar como salida un archivo `.mips` cuyo nombre será el mismo que la entrada. - -Para lanzar el compilador, se ejecutará la siguiente instrucción: - -```bash -$ cd source -$ ./coolc.sh -``` - -### Sobre el Compilador de COOL - -El compilador de COOL se ejecutará como se ha definido anteriormente. -En caso de que no ocurran errores durante la operación del compilador, **coolc.sh** deberá terminar con código de salida 0, generar (o sobrescribir si ya existe) en la misma carpeta del archivo **.cl** procesado, y con el mismo nombre que éste, un archivo con extension **.mips** que pueda ser ejecutado con **spim**. Además, reportar a la salida estándar solamente lo siguiente: - - - - -En caso de que ocurran errores durante la operación del compilador, **coolc.sh** deberá terminar con código -de salida (exit code) 1 y reportar a la salida estándar (standard output stream) lo que sigue... - - - - _1 - ... - _n - -... donde `_i` tiene el siguiente formato: - - (,) - : - -Los campos `` y `` indican la ubicación del error en el fichero **.cl** procesado. En caso -de que la naturaleza del error sea tal que no pueda asociárselo a una línea y columna en el archivo de -código fuente, el valor de dichos campos debe ser 0. - -El campo `` será alguno entre: - -- `CompilerError`: se reporta al detectar alguna anomalía con la entrada del compilador. Por ejemplo, si el fichero a compilar no existe. -- `LexicographicError`: errores detectados por el lexer. -- `SyntacticError`: errores detectados por el parser. -- `NameError`: se reporta al referenciar un `identificador` en un ámbito en el que no es visible. -- `TypeError`: se reporta al detectar un problema de tipos. Incluye: - - incompatibilidad de tipos entre `rvalue` y `lvalue`, - - operación no definida entre objetos de ciertos tipos, y - - tipo referenciado pero no definido. -- `AttributeError`: se reporta cuando un atributo o método se referencia pero no está definido. -- `SemanticError`: cualquier otro error semántico. - -### Sobre la Implementación del Compilador de COOL - -El compilador debe estar implementado en `python`. Usted debe utilizar una herramienta generadora de analizadores -lexicográficos y sintácticos. Puede utilizar la que sea de su preferencia. +# COOL: Proyecto de Compilación + +La evaluación de la asignatura Complementos de Compilación, inscrita en el programa del 4to año de la Licenciatura en Ciencia de la Computación de la Facultad de Matemática y Computación de la +Universidad de La Habana, consiste este curso en la implementación de un compilador completamente +funcional para el lenguaje _COOL_. + +_COOL (Classroom Object-Oriented Language)_ es un pequeño lenguaje que puede ser implementado con un esfuerzo razonable en un semestre del curso. Aun así, _COOL_ mantiene muchas de las características de los lenguajes de programación modernos, incluyendo orientación a objetos, tipado estático y manejo automático de memoria. + +### Sobre el Lenguaje COOL + +Ud. podrá encontrar la especificación formal del lenguaje COOL en el documento _"COOL Language Reference Manual"_, que se distribuye junto con el presente texto. + +## Código Fuente + +### Compilando su proyecto + +Si es necesario compilar su proyecto, incluya todas las instrucciones necesarias en un archivo [`/src/makefile`](/src/makefile). +Durante la evaluación su proyecto se compilará ejecutando la siguiente secuencia: + +```bash +$ cd source +$ make clean +$ make +``` + +### Ejecutando su proyecto + +Incluya en un archivo [`/src/coolc.sh`](/src/coolc.sh) todas las instrucciones que hacen falta para lanzar su compilador. Recibirá como entrada un archivo con extensión `.cl` y debe generar como salida un archivo `.mips` cuyo nombre será el mismo que la entrada. + +Para lanzar el compilador, se ejecutará la siguiente instrucción: + +```bash +$ cd source +$ ./coolc.sh +``` + +### Sobre el Compilador de COOL + +El compilador de COOL se ejecutará como se ha definido anteriormente. +En caso de que no ocurran errores durante la operación del compilador, **coolc.sh** deberá terminar con código de salida 0, generar (o sobrescribir si ya existe) en la misma carpeta del archivo **.cl** procesado, y con el mismo nombre que éste, un archivo con extension **.mips** que pueda ser ejecutado con **spim**. Además, reportar a la salida estándar solamente lo siguiente: + + + + +En caso de que ocurran errores durante la operación del compilador, **coolc.sh** deberá terminar con código +de salida (exit code) 1 y reportar a la salida estándar (standard output stream) lo que sigue... + + + + _1 + ... + _n + +... donde `_i` tiene el siguiente formato: + + (,) - : + +Los campos `` y `` indican la ubicación del error en el fichero **.cl** procesado. En caso +de que la naturaleza del error sea tal que no pueda asociárselo a una línea y columna en el archivo de +código fuente, el valor de dichos campos debe ser 0. + +El campo `` será alguno entre: + +- `CompilerError`: se reporta al detectar alguna anomalía con la entrada del compilador. Por ejemplo, si el fichero a compilar no existe. +- `LexicographicError`: errores detectados por el lexer. +- `SyntacticError`: errores detectados por el parser. +- `NameError`: se reporta al referenciar un `identificador` en un ámbito en el que no es visible. +- `TypeError`: se reporta al detectar un problema de tipos. Incluye: + - incompatibilidad de tipos entre `rvalue` y `lvalue`, + - operación no definida entre objetos de ciertos tipos, y + - tipo referenciado pero no definido. +- `AttributeError`: se reporta cuando un atributo o método se referencia pero no está definido. +- `SemanticError`: cualquier otro error semántico. + +### Sobre la Implementación del Compilador de COOL + +El compilador debe estar implementado en `python`. Usted debe utilizar una herramienta generadora de analizadores +lexicográficos y sintácticos. Puede utilizar la que sea de su preferencia. diff --git a/src/__pycache__/__init__.cpython-37.pyc b/src/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index c87bf6daaff6a931f10c4974dad4fa63c8c0523d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 zcmZ?b<>g`k0;4UaaUl9Jh=2h`Aj1KOi&=m~3PUi1CZpdS|&PB8^Qg-Sp#Ki<3)Ja}xFA<3m04O-l0hot^ca^K%O_b5e`+lk@X) sbd#YxT_Xb{1O4KnWT4v2yv&mLc)fzkTO2mI`6;D2sdgZ1KLarX07PUfBLDyZ diff --git a/src/__pycache__/base_parser.cpython-37.pyc b/src/__pycache__/base_parser.cpython-37.pyc deleted file mode 100644 index 858c48ca974c050e7dcd47ebe8f4faefae221a0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1022 zcmZuwOK%e~5VpO$&L&D}%k#p4>mJ&z`amEdR1r0BKoJrGp*>)>YZE1Sv%z*G66Mxj z`$PJdeC5=?z=;`eT5-VEd>(rz^Y~`+W^1cQU|m1|^0kf#`Hh#`1$S}^Vm|{&BB>@d zEht5uX;!dsMs-}o;Vsfh%?lp%Sa<5QNP~X&ySGFpl3x?6rKH{hFO)N|MT zP%}FMHPX!(j_#mo^n3M7nF?)g*Iic6;6;&wN&=a5B$Lr4Eh3qQ7_^8b1^->oKa|EQ zGpg9e1D+|!0K}dGtf@)YbQU{uLDoc2NdcLQ03*o&W0y=53HLRbG8sGWxJ<4%eCbF6 zLHKC3YfY6m3pZalF%JQUzB4z?*p&4Rg&-OCiFKuMp4W|BXyv=DxttiEHgh+rCoAPs zsm>Q;Ai$@}n8qL#sfodXPc(92uwMpi@H|*pA1}+QGRTYPZS0Ks*edLnz?Dz=r=;Y-v7iYFwC|%}4e0rB3yCxqD@!KR zo7>*u!QnxU1)rBzZOYxBFMTS+WHxa^V2<`70HHgSZ#JVbWw2M(fL Yf8l)ks?G8>j-c%W^l3`_tWROHzt5)SmH+?% diff --git a/src/__pycache__/lexer.cpython-37.pyc b/src/__pycache__/lexer.cpython-37.pyc deleted file mode 100644 index c4b85ca947b7b4944f514d8a5637adc60a9eff73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5917 zcmb_g%WoUU8Q<9#mlXA|EWaO7Y{wC0OOzd@u@gJ7Bg=^$n=WD*0VZ@7G-styTJAEl zD_dga6sU9PA?>L^ukxip4+V;zdg-Y^kNpGo+Ee}oo%;J`moJxtjfuP{h>_pueB2w~ zop`CC9o;?PjlX1k(zCtM^@A_y+w7rMD*gbBv`WcH>^R);f+%sM7kTojClYIgMoKKP zTP@iLV)Q2Od0UNoxF&0@uN(DcDMN|Tk<~^Z+TgKg0R6;yrN%?FDgFypQ&x_&{7kJ14G-57EwxkHihMWpPt{jCMgRK?b*y{8AYD zV67+XV3hh1>qu=r!xJq6#M+MLYB2+3Yt+|cW8GMV7pH$$=Mdq2>@C0iP3BpsgE9*HkX4By*IEC5d?w%-W6AS~&L8F~I{VsAXF$+hT@ znmm9ld)0E&6OCHg5B=@(!sW#)?=COCL-3tiLQF#9M0wC0&lwAd3})QZPv)g%}2rVs-@Y z5y?{19oC-e5z<>S97FmpVPBJ0Cwy!Sab zYyk}%uZ)1Ch=O>3^nk{VS zrl<48(fr5&(p}x1$dKNJUML=uvFjDZ-b^20!5fX%e)#qCQu%_pE_VNok7`*LB@63` z^@@+zGL%SFH%xgY*4K^a#830N5nJ#{;PMOoxrv^=n**oy9b?CQk*Y|BzVcB{Pn{*5 z&PSFX+;*29+`qqES&<|FnIkX)kl3{rR9Td)o*0sX!qSbstvE4>>xrGlrdKUutWQ8* zxVnG?Gq+PzZU^dgbf}Q9xXXkApVG05_0+E*){$zt2AndrCc#}x^xK7AJ(Fm+B~k|X z7+cZKZTQ4i81X#3m>b1487EG2`=N4aN&ZQ#z7hGg=R>_ z`(Qt1*{b10-Nr6Le4WWN)WRKsFy)TmG8JJgm{u$B24W4s4yh)o=MF4MSWr>B4RZI` zncIn-eo~Sb>d-A`@ghqE-T+9`8f zF3AJRyn_81sa?;T5*Ym)Vb@fO&4wzr(XZIFXV)2sD|$6Zy#qIWwDERdW{Rs@*v|o4c##a+urd&N`lWn8%&7?R>>JG>wbK|Z~SC4puoqv zCQzVAm)ZLN!2Tk6p*$1+LSsIdo_DSb2|K!>a4tX#`(;vJppJW|2V+W?sk(b}2~eyT(hT z<1Z^{bnd&@X>7!}XN7kwz)>7u}XCPMW2Aj=4_0T{h z9q&g2vjglRQWYNi)Gmd&x%t_db34@_tp~al45|En*dU$BYO25VFq(KJmC05NU^S?6 zsmEqNF4>o-@hK&@*I<@~$G;M0Bn?d;OtJP2pQIcVKFJUSJEk4hR3J4FNGV~qx`C8Z z=Yc?q9acBPNK1Z6zA!BX@@Z%teN_3Z^5Bb#yYk?(uy;O-%fRFq?~A zij$5AYOViUFn=>o%SostA>3eslB-bsK`vm)oH-xl<6O6-8n-g4Sl7(tH+Ql%y8Q z5PKZS2uJFP>OtL;a03@(+&~5KYCbipZp<2OPn8<~z+n+FRYMMC;wiGzlxO!lS-MZ_ ztgnLEsdDX#kG!+PP_P z8*4!*J$Z&Esn(Pi2$Ts>Xp)x*yiec*0FDZ<6WOwzRK;-zzDFIz;V>hw+29Z|7!U?& zr`fD=cm@&1v>8Q8TF|1q((iNj*)u_x9CuhD5g_dxWeIZ ze&H$&HyZ(72@4cK>YI(H^y+(2q|Qd`eZz6t(g`*4Q=;xJfqMk*6Q~e)K!7x@PmU@> zo}@9-MJg*J%1uxp6->*q9Mj1;rl~uIlSgmFDFB{w42%>^-GrEb)L(aO?6UwZC$GLl zl5f@;f$O#lsRS11>weqXj92Hb;6~N)f_f-$fmNE~xt6~@kAhGZff+BxxJQfTmFh)G zLDTS}beW8*vqG6$l%>|2aRZwaO!c40l@AG!^(Q7>2qmVd#kItgUQH-QaRYb3s?Hw9 hvc$QTs_cj4Z`5@f6%VBNMSbj-+FcYBs@N>({{|k4?V~>1*^iHo?FjUbTM96|*e9O9pWWLXQna=PpIg6we&FC*{w!OB;R371|a#d@# b)Xq8HJr{6c;68PL;84eK42xRSz~>mh06TaY diff --git a/src/__pycache__/parser.cpython-37.pyc b/src/__pycache__/parser.cpython-37.pyc deleted file mode 100644 index 4c5d6d2bdeeba10e86a72e4e66ad66c2db257832..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14160 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 QjOm|h{I{*3XN|o6A1r@Om;e9( diff --git a/src/__pycache__/semantic.cpython-37.pyc b/src/__pycache__/semantic.cpython-37.pyc deleted file mode 100644 index 9d5da7082c918708521ac586f32e8ff7d686540f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1704 zcmbVMOK;Oa5Z?9Md9?>xam1;aW{*AAkQa{}&& zUqFxi2Y!jKoH%jsiP??a)IqHf8|`FX`_1gEXEw{_0)qAX#^)CYDndV*kSzh2d$7Zo zKpf;?f_!XY%y@wazG#V@7m4J{mdtsHD86c`oR^8_>z2-Wg%tdvRph)%N`BcY1Ft#y zCuCKeLJQT3zaR>#;iSA3P`?}Pd!ZKv6cokwN#ETZc*Jp;SZ1Ob5aQYw?B*NSe#h-I z8-pldJ`;qQmP?NEs?vU!o`cw!#fGK9mSCH(!vwSuT>B$j`868h2*<#Wgjo0{#OM^X zvG7(LiQprEMZnBkWZn^q(|Sp1DW(!DW6Y6yCFYMDrp_^xJVvaZj&Cu}>^jeE_F`sV@Uf7?DR3P1KX4xB zaEcs9`wyJ2Ih^VGmpCqpc`aiUV~C(0N$|myw}(bOx2on&v)M4)kG3CF+s~dhTGgDn zULUFrN&_0M4>dFBMec`aeHx=)-Q0WByniV~eW<4x)#qnePw?SzaVko6e`7aGWoLIf zhx+j5w12D7+~NuUgYU*(d*>40scO`#=EH{hoq-*`_$`2l(kMGzh|AB zsP?!*R0JhujYVO=AgVAT1F30=*bSpZad}NG-OhTNmcg8;uf{E($lL({$1R@7Aq)E* z(QDv#c4+vn<8=)ZkP~BRdG*#>V|9hmm9^VjMyC5mMU-UBBClJbST!l9cG6*XetGmv}u_hk&621Yr$JunSm$t?^%h za|K*UWoBizOjE!mF3qOimrG+jIuCKSYctk7FK9p)kN9Bhq#|YW*}9e)Bba!dv}C;I zlXKiOsV;k^sdH&*`MX%xGsrFsQhqjz$lh*Z4q>R~%HuypYR9QW1FY| diff --git a/src/codegen/__pycache__/__init__.cpython-37.pyc b/src/codegen/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index 20613b71121780a7a509c4770128900dc7f3fca2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 661 zcmZuv!H&}~5Vf5+yFe@P0URoE%As}D?Mi@H1Vp>A($Y%1g+mTlmE)}}IdNor5sT7O z`4G4u@iF{BuAKMN=ae_(`uhQm$>IL|@d7)*f* ztWk+`jDt@!DWg2<{7AliqZ*(Y|gFN4M9i`muL{PNBD?A2f~9{_>DKHwycTUuLH zc^gQy^h2O$1GzM54}___{OH?g>3mC_FtyC@31c+(h6|+up)?Q4JO8@fe(J=H)Jw+s+t+OB4a+i?nX*<|S{AMtitTAQ8BfN{ zSpng0(omx+E5%g1T@i!iVtna01$8W@(b|7Bt!|sLSLJw|^UTEgS1bp_jjH p@NKLcME>Bv$Q>lit?PKt^dZ(BJ}pggqvbPrc*uo4_kdQ9`~f+ztBn8v diff --git a/src/codegen/__pycache__/cil_ast.cpython-37.pyc b/src/codegen/__pycache__/cil_ast.cpython-37.pyc deleted file mode 100644 index 55c229651b426e54032a5adbe35b9ee857bb89ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9649 zcmb`NOLG(17030qBrN>Gyx(uZfQ*3w1{h=n7!SrcVew=g9zt6pWZ@2H4 zO2q`0e~o_oqkoPi68|RnO9nrxSgl{A5{dbQN~q*JtY4*8Nhy^ErH#Z_>D44Sqq5+v za0;ALBj6F?G&rvc;DT@lTvWTjyM(jgQB?w$gmd8CY79IkJOUn96W|GB1pe~iNi_wY z5-x!EsA=%DQNZycc(2+A-Y2{Zyk8vv9}pe|A5@3HhvfPa_^>(xK4O$`{ciA4bqst= zcno}8odBN@9tWRPr@*I#C%~uG8SojgHwiwg&VkPfPl3;?GPo?f2Yf+Y1YZ=M27jb3 zfiDT~1z%Pba7B0@ct%|TUlHC9o>f=DSA`FNuc_%s@YAFCVS8^VXcH`OihE#br9 zPti^!&Kcie~;GdUv?X9_sBO1orMJ{{-Y`z zhH5n`ZL_^qnVG$I^ZLVUS6N=Ye(O=C{?KZ6jdr6_uYd8la?Lg?wOXZSZfv&NhORVC zvwf-Q(WTj$*_n!^o7k<4b)!>hw%YZEWnbRh(yTgH3+*bAPYUP#-Bn`ec|OPO)Lz zy7i)KQ>P8XerYPJoYK2sN$+M6WRGYfA@N{XjtRdav9u_`8rAo;AV=5Y0q(D8LG`(C z8)z{O2UNrT%j`(}ykA_n4dOox2*>ZXmA4t>McUUQ<7$!HY@pd$PN8i!8|_yOZ8@W@j%Dkv z_^`@ZPo*_cX&RO_o1)&wVnDX=pv8vfHXdj;9jvAwKc5PwmpxNQHEtZIm_(orr-By=8itfqE}_9E#p2;+B)6i4FOfPKe5z>sU~G3!?ln{^3WcO3)c6|mWmMIDVV0NHX=5}dgBWR1XW(9+Wig;x-Dcg`$h^_rRIe_v zvWuO{C$!1H(Xo*G1lcLO^2_b66+wNr;3`(%8F^@Dg{Q4fBya42Y9Vjrp}pl-?1qjI zS{cS4g`AOxb~f^$^(um|3$VQq@qOb=qTfLgv_kK!4EB}z`+kg4#|BEhiM9< zb8XHaYcY)(sgF4LK0K3hOH5jojyL7{QC2gFjo7j)yXH;r7FFyRD0lNq-bf|#}b00-z{48gdj&2V(h^d z-Y|ufkoyEn+y+YU?b3JOZ22#2(s~xhot*n()0M=X7p!Jq%OmA3j&G~X&v7t3e%SwB zm12o=2S$HJ!=5Gf#+0AJ?%{Q!RtY7W2jtA&1G-187C#!q4Boo@`?0J$$l zW^B3yD`xb#%z342fk;U@dOc;pw&hRnO06o(79L8RL@ zdC6WUyucI$EfF_4a@@s5qqA`y;Pm@1V$khyA_Cr+RK<#eN^weoKp9?BwXN*USz^$r5|4?oAZPK!GcmH0t$P ze{Lix@DNqfoIwv#;}5KRXl^vst4b_A9>Cu3Y17k#99@rPZLGCqdK7E=?6!r>Pfe|y zWT#Jz$Ec6y6n~Hye`3YMV)W_}ON@Eg`y*|7Vvr+?QCjJ~z;~Bc$L;B3=Z6kLA6}5Z zyeG)szPiNHxrTN7Nu`?^xmNf~pZnZj#C3ym z;v3o%(fOTkGH@I#_$M&-R~qyZf*d*c{O5-EgrF5J+y=1^dKR)D@Spn9Ck&X;{T=5> zy*T>!UBrr#FN^->Tf_5!968FuGE&~{5{C`b$)lar8%k+E)@SfM=%#+_*Nzjqz)`GV zmtg82zBvR-UMioLe|L}%{JMladV&QX`^$5@GDI+i$m&ij}-{(Gd(VAV8 zW?R(ENx5YbN=QA)8TO7&{*L=!CZF;Jh{cF^r^j>n%Z`tXXYiNCuPjRb<-Bc1&fp#% P$;x>=D;N6Z+Q|GDgRa)d diff --git a/src/codegen/__pycache__/pipeline.cpython-37.pyc b/src/codegen/__pycache__/pipeline.cpython-37.pyc deleted file mode 100644 index f047031912aa6749bcdf9b30455980928d7ca7df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 639 zcmZuvK}#bs6izZT)m>ZlAbZ+F!M)6(O{o=Bba5SY6|@Dd9(r&nGf@JW$&f@@WqPVV zWJOrmzm)5q_AhwyrCX&ezVJQXd-;<0zL33I?IQyF)cAGzgc17Vl2;=T>;m)`a4AZ$ zKp7rj>|!EF<_$cEz0`j|13wMUP+0j3OcY|f9QAs~eHk4cUvSNhR8Xs3GZSA)l?{zy zD)Af@tOD=>5kPN&Gtg-aT?{VK7>~Tt`$$bsPG`rerCg(jCy a#Ll=ycg6g6Ces_izQQL%+D%l&Rq_IIy{d)) diff --git a/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc deleted file mode 100644 index e68d8bd6d0e2a48c96faa32bd20dee980f19c241..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5274 zcmb7INpsuC6-HwtNKq0k%lmGR7dkVd%l0HQ$z(FI#vZ%MMW?*X0hJmQ#D-)jAfPlr zm8GJpQYGh_V-Cq=%0A|tzmZ>nYfkeQa?1A}K!{XeCngHruhH9k-`l!*Z+^a|;dk-D zKfe3(5l#CSH6}j;#8-IJbre#QBGQJ!6+_+ChlXnmP1hV+t|h2XkL+Q?Z44dP;kFSq zhb_0ov>D9}+wMHmRCovomtzVA<-OsHS%n zZ@PkFLmO*eQ3|GYNnZ>uO)jmmz!zI;SYPzJjogt*mI3!PZ-A0e5)%VbYkM$KDu^?W z2ILEq)-cFkCNl3#+Uuppp|~W@f>)$CGYz73wG5{IuBqdw{=MBB1~T+}Q4;O+Zr#57 z*{ApK-l6i&r=LIQdH2)7D2V)?=e>B?yPGAw)z#i=GTaKIK=lSm5`8i#Tc6y%b^BH? zRResM!A21GwhLg=-WuTY$a=~zD_c9c<9T5mW}eq1m=;iI!k&6|&((pvGMP0HGy^}X z>1DJX5Mymq+Y|+kx;lz4xxGa$k#>bTh9=8h6ep;83dIuMlohD&o~hlqSmJ}WZARpN z+rE0&&Zn^}DPgkn`P!YURX%9*b{MCb8nMs6YyUIYn|PS)f2nr=>4hpIrx4e`%dkHL zk!fSGDfY!4oE$39H{t41`=fqJ`>Q4m>Z3X{&}Z(0{+m4(9*s2LSY!RI5Ii4hGy86# zFYiY(ja+zLTajvVGxmo;p;03WVpd#k`&(NhfY(;vseC3o6(M z(=1RPk2#N(Q?eUPw8Y1vEq1TeqA)wF!hynEg~L5GSb7*>t@JwNH45qX^voRVz>5$u zfPujn=p_QIbWfedis~E+U_hpayx@KY9m*@ixa$Cg`?}vcLe1zd8 z1UH5Ae?Y*qDr+R&5Fcy`6k0NXAhmsc59)m*#^Nn`qu$S*5MfBge$>?!VWzI20L@Ox zjFU4QcxHY~2J2xQAW#(ZJl^;w2Bm~MX>9jqt+r|>R!W=UxPyhDf|64*!%6HQ_b9+E zc+BUfT;Z@;EmsCIHHe~r$tn!1Tgz(QyaC}!KdMPo#+EpRd66UOV;wGJf>WdKw)`wp z;o2w*Jhl~PZQ>A3>h#ES@+RdACJ!^;&JwR0cN^Oj5kc(MM}+CoAI55Pl9XyVohuSp z!C)6m9OklveXIE-(Wg_KUabZ9@Qlg?2v`d*155rw@oNJ~dPCbc_sCDh8-QH-B$BeB zNE3>*P*_D7a^`1va;KU#(dS5|?#ZmruwH7T(8L1y-nCjm{%hKdBqR+>auNhdLUFiW z1`=9Px}BDxh!~}P)NnmtZBHijOUy1g=4f&G{T$Pjid%xP;+8yF3h)cGIV$Riia;Iw z>l_!w8>5Vi28R&WqLYw^V8x$JV&9U*rdKY_C&}fIV93D%PWnhx2D{M!|ZPTPoamnW^jO=sHDU zy#rd^rGnfgw^fjiqD=ja8W!p1l_C>7>}*H9GKQ}4QJ zKwq&^!9!`FazhF{?}Z1(Kw#__ZaD>o$xx`DVu9QYUTvuYfkqty>T`@zUr_OLDh}nG zr3vdJy4JARPcW=B4HCN}cCWuz=!2P%nfIUoQw7S23w%S%K1DHx3+!vZ)75Emgt5LZ z#>Nl&pKupIkIp@J(F4Pn=`p#dj~*PL4tgec2s>{*Lt2P8oL6io96QvY@>;`#FrUM)U5a%@HTd_xQWun^o_OtjZr zP6@?Xwj2m;`D=-SkQknuh-*8n<{93ZZ5H4V@4v>Rmv~FHJ3ySr1LV^Ek;FK9z zMiI-K&y#1FV#9Hs2EJsQv5F|hHdEp58vf|jA@@_1WVZ08bZyXd3RYx1$IH4SOl~89 zU8oIU2mapgo~Ii+Wl+z{Tb?&e2~5If^2SW67t` zV58*A{XBYU(exS-!fCcmdK?>%iO0ZW;jxz+9lO(XT8^V=PQSa9FP48~tdxIz@h!Bt za#0Ld78R7-5nY3!A7|lUCBt7LX>q%uZKrz>hSNd<{2{~tkSNNfr6r8AFiKbO_gVo2 b%S?>aNtHWa6#Dp5U<7C6vxu#2JRRddeWKF7 diff --git a/src/codegen/visitors/__pycache__/cil_format_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/cil_format_visitor.cpython-37.pyc deleted file mode 100644 index d1d2da4c3a5518e6e93d7a1fe5e6b0d237ff64ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5237 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 G{r(TgD(v_G diff --git a/src/coolc.sh b/src/coolc.sh old mode 100755 new mode 100644 diff --git a/src/lexer/__pycache__/__init__.cpython-37.pyc b/src/lexer/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index 993f601c34a275dc3f8d32142ca428f64104a813..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186 zcmZ?b<>g`kf=80e;z0Cc5CH>>K!yVl7qb9~6oz01O-8?!3`HPe1o10bKQ}ccGf_V$ zKc`aPz{teH)YZfoL>ik~y6MNe7AKdc<|OLJ$A^08o0R11J3H$;=jRq==A;(sC+Fwq y=q5vXx<&>@2KvQC$@)2|6+p@O_{_Y_lK6PNg34PQHo5sJr8%i~Aj>}kF#`a;D=q#2 diff --git a/src/lexer/__pycache__/__init__.cpython-38.pyc b/src/lexer/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index faa19c296c9625598aefe701f99baac725c6229d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 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 ND<@I+mZv6J^?w++BRl{A diff --git a/src/lexer/__pycache__/lexer.cpython-38.pyc b/src/lexer/__pycache__/lexer.cpython-38.pyc deleted file mode 100644 index 797eb3c82d9f0338c4ccf99abcc6d9dac4d48655..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8956 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 dRy>+?Gc2QSM~Y^&fzOrCl{4rX%bkX_`ak+k`= 0: - error_text = LexicographicError.EOF_COMMENT - self.errors.append(LexicographicError(error_text, t.lineno, t.column)) - - # Strings - t_strings_ignore = '' - - def t_strings(self, t): - r'\"' - t.lexer.str_start = t.lexer.lexpos - t.lexer.myString = '' - t.lexer.backslash = False - t.lexer.begin('strings') - - def t_strings_end(self, t): - r'\"' - self._update_column(t) - - if t.lexer.backslash : - t.lexer.myString += '"' - t.lexer.backslash = False - else: - t.value = t.lexer.myString - t.type = 'string' - t.lexer.begin('INITIAL') - return t - - def t_strings_newline(self, t): - r'\n' - t.lexer.lineno += 1 - self._update_column(t) - - t.lexer.linestart = t.lexer.lexpos - - if not t.lexer.backslash: - error_text = LexicographicError.UNDETERMINATED_STRING - self.errors.append(LexicographicError(error_text, t.lineno, t.column)) - t.lexer.begin('INITIAL') - - def t_strings_nill(self, t): - r'\0' - error_text = LexicographicError.NULL_STRING - self._update_column(t) - - self.errors.append(LexicographicError(error_text, t.lineno, t.column)) - - def t_strings_consume(self, t): - r'[^\n]' - # self._update_column(t) - - if t.lexer.backslash : - if t.value == 'b': - t.lexer.myString += '\b' - - elif t.value == 't': - t.lexer.myString += '\t' - - - elif t.value == 'f': - t.lexer.myString += '\f' - - - elif t.value == 'n': - t.lexer.myString += '\n' - - elif t.value == '\\': - t.lexer.myString += '\\' - else: - t.lexer.myString += t.value - t.lexer.backslash = False - else: - if t.value != '\\': - t.lexer.myString += t.value - else: - t.lexer.backslash = True - - def t_strings_error(self, t): - pass - - def t_strings_eof(self, t): - self._update_column(t) - - error_text = LexicographicError.EOF_STRING - self.errors.append(LexicographicError(error_text, t.lineno, t.column)) - - - t_ignore = ' \t\f\r\t\v' - - - def t_semi(self, t): - r';' - self._update_column(t) - return t - - def t_colon(self, t): - r':' - self._update_column(t) - return t - - def t_comma(self, t): - r',' - self._update_column(t) - return t - - def t_dot(self, t): - r'\.' - self._update_column(t) - return t - - def t_opar(self, t): - r'\(' - self._update_column(t) - return t - - def t_cpar(self, t): - r'\)' - self._update_column(t) - return t - - def t_ocur(self, t): - r'\{' - self._update_column(t) - return t - - def t_ccur(self, t): - r'\}' - self._update_column(t) - return t - - def t_larrow(self, t): - r'<-' - self._update_column(t) - return t - - def t_arroba(self, t): - r'@' - self._update_column(t) - return t - - def t_rarrow(self, t): - r'=>' - self._update_column(t) - return t - - def t_nox(self, t): - r'~' - self._update_column(t) - return - - def t_equal(self, t): - r'=' - self._update_column(t) - return t - - def t_plus(self, t): - r'\+' - self._update_column(t) - return t - - def t_of(self, t): - r'of' - self._update_column(t) - return t - - def t_minus(self, t): - r'-' - self._update_column(t) - return t - - def t_star(self, t): - r'\*' - self._update_column(t) - return t - - def t_div(self, t): - r'/' - self._update_column(t) - return t - - def t_lesseq(self, t): - r'<=' - self._update_column(t) - return t - - def t_less(self, t): - r'<' - self._update_column(t) - return t - - - def t_inherits(self, t): - r'inherits' - self._update_column(t) - return t - - def t_type(self, t): - r'[A-Z][a-zA-Z_0-9]*' - t.type = self.reserved.get(t.value.lower(), 'type') - self._update_column(t) - return t - - # Check for reserved words: - def t_id(self, t): - r'[a-z][a-zA-Z_0-9]*' - t.type = self.reserved.get(t.value.lower(), 'id') - self._update_column(t) - return t - - - # Get Numbers - def t_num(self, t): - r'\d+(\.\d+)? ' - t.value = float(t.value) - self._update_column(t) - return t - - # Define a rule so we can track line numbers - def t_newline(self, t): - r'\n+' - t.lexer.lineno += len(t.value) - t.lexer.linestart = t.lexer.lexpos - - # Error handling rule - def t_error(self, t): - self._update_column(t) - error_text = LexicographicError.UNKNOWN_TOKEN % t.value[0] - - self.errors.append(LexicographicError(error_text, t.lineno, t.column)) - t.lexer.skip(1) - #t.lexer.skip(len(t.value)) - - def tokenize_text(self, text: str) -> list: - self.lexer.input(text) - tokens = [] - for tok in self.lexer: - tokens.append(Token(tok.type, tok.value, tok.lineno, tok.column)) - self.lexer.lineno = 1 - self.lexer.linestart = 0 - return tokens - - def _check_empty_line(self, tokens: list): - if len(tokens) == 0: - error_text = SyntaticError.ERROR % 'EOF' - print(SyntaticError(error_text, 0, 0)) - raise Exception() - - - def run(self, text: str): - tokens = self.tokenize_text(text) - if self.errors: - for error in self.errors: - print(error) - raise Exception() - - self._check_empty_line(tokens) - return tokens - -if __name__ == "__main__": - lexer = CoolLexer() - - data = open('string4.cl',encoding='utf-8') - data = data.read() - res = lexer.tokenize_text(data) - #pprint(res) - pprint(lexer.errors) +import ply.lex as lex +from pprint import pprint + +from utils.tokens import tokens, reserved, Token +from utils.errors import LexicographicError, SyntaticError +from utils.utils import find_column + + +class CoolLexer: + def __init__(self, **kwargs): + self.reserved = reserved + self.tokens = tokens + self.errors = [] + self.lexer = lex.lex(module=self, **kwargs) + self.lexer.lineno = 1 + self.lexer.linestart = 0 + + def _update_column(self, t): + t.column = t.lexpos - t.lexer.linestart + 1 + + + states = ( + ('comments', 'exclusive'), + ('strings', 'exclusive') + ) + + # Comments + def t_comment(self, t): + r'--.*($|\n)' + t.lexer.lineno += 1 + t.lexer.linestart = t.lexer.lexpos + + def t_comments(self,t): + r'\(\*' + t.lexer.level = 1 + t.lexer.begin('comments') + + + def t_comments_open(self,t): + r'\(\*' + t.lexer.level += 1 + + def t_comments_close(self,t): + r'\*\)' + t.lexer.level -= 1 + + if t.lexer.level == 0: + t.lexer.begin('INITIAL') + + def t_comments_newline(self, t): + r'\n+' + t.lexer.lineno += len(t.value) + t.lexer.linestart = t.lexer.lexpos + + t_comments_ignore = ' \t\f\r\t\v' + + def t_comments_error(self, t): + t.lexer.skip(1) + + def t_comments_eof(self, t): + self._update_column(t) + if t.lexer.level > 0: + error_text = LexicographicError.EOF_COMMENT + self.errors.append(LexicographicError(error_text, t.lineno, t.column)) + + # Strings + t_strings_ignore = '' + + def t_strings(self, t): + r'\"' + t.lexer.str_start = t.lexer.lexpos + t.lexer.myString = '' + t.lexer.backslash = False + t.lexer.begin('strings') + + def t_strings_end(self, t): + r'\"' + self._update_column(t) + + if t.lexer.backslash : + t.lexer.myString += '"' + t.lexer.backslash = False + else: + t.value = t.lexer.myString + t.type = 'string' + t.lexer.begin('INITIAL') + return t + + def t_strings_newline(self, t): + r'\n' + t.lexer.lineno += 1 + self._update_column(t) + + t.lexer.linestart = t.lexer.lexpos + + if not t.lexer.backslash: + error_text = LexicographicError.UNDETERMINATED_STRING + self.errors.append(LexicographicError(error_text, t.lineno, t.column)) + t.lexer.begin('INITIAL') + + def t_strings_nill(self, t): + r'\0' + error_text = LexicographicError.NULL_STRING + self._update_column(t) + + self.errors.append(LexicographicError(error_text, t.lineno, t.column)) + + def t_strings_consume(self, t): + r'[^\n]' + # self._update_column(t) + + if t.lexer.backslash : + if t.value == 'b': + t.lexer.myString += '\b' + + elif t.value == 't': + t.lexer.myString += '\t' + + + elif t.value == 'f': + t.lexer.myString += '\f' + + + elif t.value == 'n': + t.lexer.myString += '\n' + + elif t.value == '\\': + t.lexer.myString += '\\' + else: + t.lexer.myString += t.value + t.lexer.backslash = False + else: + if t.value != '\\': + t.lexer.myString += t.value + else: + t.lexer.backslash = True + + def t_strings_error(self, t): + pass + + def t_strings_eof(self, t): + self._update_column(t) + + error_text = LexicographicError.EOF_STRING + self.errors.append(LexicographicError(error_text, t.lineno, t.column)) + + + t_ignore = ' \t\f\r\t\v' + + + def t_semi(self, t): + r';' + self._update_column(t) + return t + + def t_colon(self, t): + r':' + self._update_column(t) + return t + + def t_comma(self, t): + r',' + self._update_column(t) + return t + + def t_dot(self, t): + r'\.' + self._update_column(t) + return t + + def t_opar(self, t): + r'\(' + self._update_column(t) + return t + + def t_cpar(self, t): + r'\)' + self._update_column(t) + return t + + def t_ocur(self, t): + r'\{' + self._update_column(t) + return t + + def t_ccur(self, t): + r'\}' + self._update_column(t) + return t + + def t_larrow(self, t): + r'<-' + self._update_column(t) + return t + + def t_arroba(self, t): + r'@' + self._update_column(t) + return t + + def t_rarrow(self, t): + r'=>' + self._update_column(t) + return t + + def t_nox(self, t): + r'~' + self._update_column(t) + return + + def t_equal(self, t): + r'=' + self._update_column(t) + return t + + def t_plus(self, t): + r'\+' + self._update_column(t) + return t + + def t_of(self, t): + r'of' + self._update_column(t) + return t + + def t_minus(self, t): + r'-' + self._update_column(t) + return t + + def t_star(self, t): + r'\*' + self._update_column(t) + return t + + def t_div(self, t): + r'/' + self._update_column(t) + return t + + def t_lesseq(self, t): + r'<=' + self._update_column(t) + return t + + def t_less(self, t): + r'<' + self._update_column(t) + return t + + + def t_inherits(self, t): + r'inherits' + self._update_column(t) + return t + + def t_type(self, t): + r'[A-Z][a-zA-Z_0-9]*' + t.type = self.reserved.get(t.value.lower(), 'type') + self._update_column(t) + return t + + # Check for reserved words: + def t_id(self, t): + r'[a-z][a-zA-Z_0-9]*' + t.type = self.reserved.get(t.value.lower(), 'id') + self._update_column(t) + return t + + + # Get Numbers + def t_num(self, t): + r'\d+(\.\d+)? ' + t.value = float(t.value) + self._update_column(t) + return t + + # Define a rule so we can track line numbers + def t_newline(self, t): + r'\n+' + t.lexer.lineno += len(t.value) + t.lexer.linestart = t.lexer.lexpos + + # Error handling rule + def t_error(self, t): + self._update_column(t) + error_text = LexicographicError.UNKNOWN_TOKEN % t.value[0] + + self.errors.append(LexicographicError(error_text, t.lineno, t.column)) + t.lexer.skip(1) + #t.lexer.skip(len(t.value)) + + def tokenize_text(self, text: str) -> list: + self.lexer.input(text) + tokens = [] + for tok in self.lexer: + tokens.append(Token(tok.type, tok.value, tok.lineno, tok.column)) + self.lexer.lineno = 1 + self.lexer.linestart = 0 + return tokens + + def _check_empty_line(self, tokens: list): + if len(tokens) == 0: + error_text = SyntaticError.ERROR % 'EOF' + print(SyntaticError(error_text, 0, 0)) + raise Exception() + + + def run(self, text: str): + tokens = self.tokenize_text(text) + if self.errors: + for error in self.errors: + print(error) + raise Exception() + + self._check_empty_line(tokens) + return tokens + +if __name__ == "__main__": + lexer = CoolLexer() + + data = open('string4.cl',encoding='utf-8') + data = data.read() + res = lexer.tokenize_text(data) + #pprint(res) + pprint(lexer.errors) diff --git a/src/makefile b/src/makefile index ce7d1eca..ff40efc9 100644 --- a/src/makefile +++ b/src/makefile @@ -1,10 +1,10 @@ -.PHONY: clean - -main: - # Compiling the compiler :) - -clean: - rm -rf build/* - -test: +.PHONY: clean + +main: + # Compiling the compiler :) + +clean: + rm -rf build/* + +test: pytest ../tests -v --tb=short -m=${TAG} \ No newline at end of file diff --git a/src/parser/__pycache__/__init__.cpython-37.pyc b/src/parser/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index dc5ae81a9914795c1b4f74930a3b5a7f6a43d5d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 187 zcmZ?b<>g`kf=80e;z0Cc5CH>>K!yVl7qb9~6oz01O-8?!3`HPe1o10HKQ}ccGf_V$ zKc`aPz{teH)YZfoL>ik~y6MNe7AKdc<|OLJ$A^08o0R11J3H$;=jRq==A;(sC+Fwq z=q5vXx<&>@2KvQC$@&F}Ma4kb`1s7c%#!$cy@JYH95%W6DWy57b|Bk712F>t@b)fj diff --git a/src/parser/__pycache__/base_parser.cpython-37.pyc b/src/parser/__pycache__/base_parser.cpython-37.pyc deleted file mode 100644 index c93c1334e62a6185aec44dd76745513c55452678..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1047 zcmZuwPjAyO6t|tkO-suL3=k3rt~so!_D2E103b~=$HBmNAkFbn-#Aft+A)a#+_RB;x2{q}cn5RW*$M4Vobtjo!Jlyt7aH%hRj zrv4%pdJ1YF>lqx~ab3%I;+s%~v$xBqjh1H~|bzG>uo1W`|?@kh^ z`%b409yxG*X~AWw9s@YhuHOh#vhHtl^qvw713F0}SKuPA1Y@?xSj#5pea5~vxop3v zhv30G{3nPH=Oel5x*$GMjC%v+UXq^eH>Q+&*!~|{nn|s*cqvyyPxCI=WrMb|Axy^% mhQL#Q$B)Ob9THc7clp2QHh$SA{mKod?gR93jQgaIVUxcbl<}|t diff --git a/src/parser/__pycache__/logger.cpython-37.pyc b/src/parser/__pycache__/logger.cpython-37.pyc deleted file mode 100644 index 3fccfaaa99db8c2b971f58ebf84beff906f89169..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 432 zcmXv~Jx{|h5ViBw0IFbwk)fy=T9ErU>EK?8(?{YtKd2@Ti{ojKDae>C@@bKeHf&vljOzJouIX%X zQmIa20cntcciK?rm8ytSNTt{2*e9S=5P_#WOWOioKxlV6{@*2%gLWn|OM={UbqSA- z;xy8RRN9Fk4`*DPE7%(cDh_>_PU1-0*Ztn$R`1}zJqjSxCJH}EwvX1=@H=J+@Hk*X ziaBdE+ucsT-CAL*b9TcW1*Cy7H(Lr*=RPH%0jmJ if|W(c>eIP)FVKD=;L^Zr)d7M_UBfjjYEc81Yy1H&etrS~ diff --git a/src/parser/__pycache__/parser.cpython-37.pyc b/src/parser/__pycache__/parser.cpython-37.pyc deleted file mode 100644 index bf116194d9fc39e392895ebd8bfad8b2e34e121c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14135 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 BFEs!F diff --git a/src/semantic/__pycache__/semantic.cpython-37.pyc b/src/semantic/__pycache__/semantic.cpython-37.pyc deleted file mode 100644 index 4036cc4f89d39516ee364d11caba3054873a764d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1419 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 TRhJmRnvH$r$f{jCUaS5GIya^5 diff --git a/src/semantic/__pycache__/types.cpython-37.pyc b/src/semantic/__pycache__/types.cpython-37.pyc deleted file mode 100644 index 1589e324fd72b660c7d8ccff60cf3122823b30c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12451 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 diff --git a/src/semantic/visitors/__pycache__/__init__.cpython-37.pyc b/src/semantic/visitors/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index fa50a93bfd618d7710f963f2d8fd7b026b08ad11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 198 zcmZ?b<>g`kf=80e;z0Cc5CH>>K!yVl7qb9~6oz01O-8?!3`HPe1o10hKQ}ccGf_V$ zKc`aPz{teH)YZfoL>ik~y6MNe7AKdc<|OLJ$A^08o0R11J3H$;=jRq==A;(sC+Fwq z=q5vXx<&>@2KvQC$@;~qxruotnaTQPnZ=nU`9;M*-I;lrCGqik1(mlrY;yBcN^?@} KKo0o~#0&s4PBQQS diff --git a/src/semantic/visitors/__pycache__/ast.cpython-37.pyc b/src/semantic/visitors/__pycache__/ast.cpython-37.pyc deleted file mode 100644 index 20d254f2bc0b513aa18ec2bc75d6aef8b93e533c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9556 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 TdfeGX-Et@8d;8?OHY5NX;{ diff --git a/src/semantic/visitors/__pycache__/autotype_visitor.cpython-37.pyc b/src/semantic/visitors/__pycache__/autotype_visitor.cpython-37.pyc deleted file mode 100644 index 4b822cf7d6c9c5c519469238c4956c9ecc44e0b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8393 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 diff --git a/src/semantic/visitors/__pycache__/selftype_visitor.cpython-37.pyc b/src/semantic/visitors/__pycache__/selftype_visitor.cpython-37.pyc deleted file mode 100644 index 9ab12062b380fc372c46b54949ee20488e567378..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3726 zcmbVOPmkNi6`vWB67_Fa)^1YQaRZ}qgQ{>=3&#Omz%>%D?KXhB3A#?)2z3dXoLy6) zNO^`EuMKT3-Y<}Q4&F|C%lIDV>14*Znv=$_5kgQdb_JU*`lJ!c`S&(!g=~j}p1<3_SE>x2B z1xXK*UM1-+NH!qZs3aE_B%6?IR+8RK5^umAn`V7aru*cEuS?UD7ot2X9Xf;Y_~UcU2v$Oie14D{b1*p;9s{f`Z(=HXDsgw>!qw zz+ks1AN&5vR2#3Ko)5+{PQpQ&r!NNE*KgeXssr~qq-`^hu_jGh9({K<3U;Sxt zqsRw4JA<8kJV{ci22q};A4S#ZqwCw(w+C8911-m4RwU7&BAUibx=*lzYG!Nl!uUau zWJwVOq=hC(jMwb{<;5j)ZOxV%H_KzWU^39PG#N3tGL6-&@2D20)H)jD=_sE_J6|>k zK+IY=)YW8pCSJa?{AIhMFYGC*i#79)dl=AT{dEnUqYn%CY{aKxBwmTT?D6K`#IbYi zPT6Z`>P+2J!P&F!qZ!D)Yn+$K#I&JM8mh2J@=O~)dYYs${HQMA$i8=`gZ;W`om*{M zc5$#uH@lsV&}0`TF7i3>8pd>OP!`;RXj zyG3p47WG#`U4v@=)SU{e+O;jt)?c_qd>5)De1drY6;3fO#j({B31}W*B{>mK*?ztX?QgJE6Y-cuy1+%6wkW?xXB8KZ z?o`~nSp}3ks#)}xp;LY8KqGK$#HL>0+x-o+E_jH!Q`F68mmiVlzTK1Bm5>Kb@Un&Z zcFEt$0*Y+a@06Zwl84I-YPDDIL#U{Xo7x01JJ!e{VR|Ul2PC*k0t9849mp~bx0D1E zGCQztGwzc-e(|Qiy-601rST>TanE zIom3<+Sh7}MB~!hVLf_#iTnmfR%)$5v2$gT95hd$ z+ZZemwzB#u=M3t&BhQi-1#whEI&~M4N&OsosU$0_(N*dVsG*|qCVPD30NjvP=hG+H zQo(NX_IVl+WU6R3qf)veDqCVeUFj$+gTOR{V4TN?DfQby@a!;5D@lE)y!R@qU5W^AL|)!@jQjkl%uMS` zl^-CtQXMzm9$nnb=1v-Fy<9}E&=D8uh~C%Xa)~v~&$LbsGJ8zp4$Anqwp)K73)}H` zKn~k$eleljm+h~AZtoRE5*Ai?PHh{?bX!zJd3rSQ!soqO&qeFu>CgyIw|dv{rg@t4 z@nCFs@AeyJZFW)KDsYk3=f|kAT9GRi(a?B@MUv{$S`FLZ3Uy&>`IC{13VYxxoW{RZ Rdf_%*wJcwJL~fh=;(tlZ5H0`! diff --git a/src/semantic/visitors/__pycache__/type_builder.cpython-37.pyc b/src/semantic/visitors/__pycache__/type_builder.cpython-37.pyc deleted file mode 100644 index ef03a3861a4fc52e2fd666638bf79e8f941258dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2816 zcmaJ@&2Jk;6rY*>^m^?$X$VmWRfQ13MU6w7q9P&G)=4Q6L{&dXy8@Q2caz%P^(HfG zNUC)Yq*qW+oGO%DkhpNp(LlHiO>9CJl90wEp&m_`#}duc65Z1&>RD_gre`LWXC=00Cl#-f zIG&@%w78nMo~vX%t|fJ^u4E&gx=lVIp&43FNNDXduMyg}NVD=6tVNo-tlf%|pr3U+ zYn-QCPF=||-n~D_B2g%u+k4w%c|Ax_wWNN7;ikY*J~p z(|#81W+;B!72Pc5AkwoPjAZoaAY6tfogEwHmeuaET(=pCi6yr8dwzN+-j3wjsyuF_XW`p|`})npa- zcXiN>!w93dI>nwkh#@}sX3*Nu#2j=v&4~}_K~HlAJqrnVqU%kKPrmSidqOcpZ;xyiCEuUYxba8Fv0`?a!et50ruZhke zii4K#-?`pe$uk<(A-`mM9s}Dp3(F48^}+>~d*) zPujlU?RPWZw;=>!LPw|xzelqZ=~x;WNxh$jQ3un2556fhl@i3aOn}-?lkpi)aZHs` z6x}R*N<+m{15qen?9ue(a%!|m)ztA~n15VDEp{4&-T9pM$SV1&K7{Na00xJYk{x?v z6h@Ot7ov>=9%S9LFZk;)3&0tNB{dj67Mn6cSOhLcm`leISn!Q!T}7}68{eDHNe@@1 zJqArXL>A~9r2m0VGUK7c*C`n?N*>K;=05U72Yc(lE+WM^Ll}R|?vi_?4?Xy(gydm` z|GW3i*mDK6&LJCWxi-{yS94ui{GRK*D%e2(kn!I#w^z%xk!F+4k)e^fxv`0{X+N_c z$@dgyREGLawm~4ml`_J=%LwN%LRjO~@xgir^<2X|?=FDnDad|fXhQZIxry4RbO-i7 zItSCmIk2~)@(i$UD7EcW@CKxjBlH}3r;dR%gYE68A4+pOz*8fg;_ZVy@DAz|M?~bQ z_NO=7cRssv(_dY?v9`Xtw%)!c9RW*}^X$zi$Ob$r@wO)LrV&Txz~L@VrgYSy^s#tJ ztDJWdA&|u4UFZm7be=Y-O;0n2GCD(b>d-o!1zjDQNl#N(n;;GD53YrRG-rS`TL3vU zZFd(Ei1h7$$%gvS*n1~uKqV-Bl;j#nq{j}l-011hj6+544YJb!;7p)a4#1f}tuttw zS!lCQ)m+lEVYY&!q?q~GM2hV+?n2ujdvm34pj$~U3n+1^^!#V(c>%lv_4et|0{fTv zMB1ujP(5(Lx(0<%%dJDW*1+R(;qfWu3#HG-t38c~Q&%Ji62aeu)D@+20VF6KK|F}~ zB5IG(M^{zWRt0WEFQNG?&zIA8EHYBA-Dzm0O0 zN5HARD&;2;piT6;4)w2K&kGX7=7zCsL9|a8h1Pm1%D{_lDJSoA~K`*d! z;|ZKhX9F(W8s1}wqVG$`_mean#3;MIzcUEpVua%{vU-E3 zTRceC;f9m5?Klu(_2}|Y+EdpC{m%cC_>btAa$*B`wR61mcpW;tLIi%b%7 diff --git a/src/semantic/visitors/__pycache__/type_checker.cpython-37.pyc b/src/semantic/visitors/__pycache__/type_checker.cpython-37.pyc deleted file mode 100644 index 21b08912e85118a51e9662efdd0f0b354322c613..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10640 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 diff --git a/src/semantic/visitors/__pycache__/var_collector.cpython-37.pyc b/src/semantic/visitors/__pycache__/var_collector.cpython-37.pyc deleted file mode 100644 index 095333acc1dd04ce38ea4921cb3c5be41fdede1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7174 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 fWulTChDEJ1%>1$vN8IzKnvRNo?N7RPT zdU_a}7FUn{JuUs zvb1{_Q^rCP8q(v{B46LmiX_hT&U#k`;EtH8!%ZO!m4jA}20E}zcVNtxX!4J0f<^q_ z0%8I=wBoramSnIAwZ!O!|!r zDE%ZH(~?XXtxy9-0BRf{;i6G;z|L#iMt77auG$Iw&s}rOzkw%>`$Z5-`WK>2+p}s| zFIM~7vccPksu~12zrtz&sNMVcEiOdp@f~E;rFvePcB2(r@8x=!CdM|Cky2@Hx`2Ob zYhAGyCj-l6PpK7LHV`gPA#BhU6*@KqFmr9a^6_Ket?Cw1 zNKIs7#WZs?Oy_%WVB(hV!O)+9K|b7s5z-oM(k83X&}7b`MT9wqBv5Bj0*D&AOGAFn9GO zm`=kKLy@I#(yZbYO0Xgqu%MUsj1ZgPa`Yq!3|#|&j&Ce8S)a!(q=+oVKj3z>0)xEn zlUt-uFHlWv!pGi}VwEHrG}QePv@&MMd*fX|W%}%bkNL!(k`wQooYQl5&dU@FuD8Zr-%59n>+ zKyZ}-)i(=mpe`2Lz%EcSWI#!`D|GOHa$Aacl`$q@YZX_o5K&JG8>1>&q6%yX zLGu9W`rVaeI{?`%;8#o;r9e1zHFmsqDeXm28=yvB+E9qYLXNT&x^7d5*P}SYlNpf5 z(?Mawa)q!>Xu_tK9H!==km@%2oo1KDHA3vsKfuuF4`@&it_9pRFdzvE)7BvgWT87# k6;{mFioHG@5LJU;F6d_NzzMdiBzLfPR7;M1& diff --git a/src/utils/__pycache__/__init__.cpython-37.pyc b/src/utils/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index 3dbf7e9fad028db7c932e97f99642cca25da9693..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186 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 diff --git a/src/utils/__pycache__/errors.cpython-37.pyc b/src/utils/__pycache__/errors.cpython-37.pyc deleted file mode 100644 index 47d8ca02bed63b2f56be7e4fc2881e2420367ae5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5164 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 KD(`IUT>T$Y&aMskI&1_+#RDu};{)Tcm~#wYPj zAg>mBg&W-D7O#9*lmJ=USgUgSNL>2|)#PDuB+DWzi%Ayb3Uam%LPqW4z0h>FXw;k2 zSU?&i;GT5UdA%v(6jJH-Ir0RQ3LIcR$-^CT!-$FJh(C{817 zNTuxvig3oYiQwc{0iHFF6aP6s_<-Yjr!_4pVu^$|4pD h2d);jv$=LI@cL4~rGZ=30fIvv!!aysQ3Ic2`~mOKcvAoX diff --git a/src/utils/__pycache__/tokens.cpython-37.pyc b/src/utils/__pycache__/tokens.cpython-37.pyc deleted file mode 100644 index db8115307854e3a25cd8e99530c39b97fe3dbc57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1381 zcmai!OK;pZ5XVW0k`>46Jlxhzo2Jg&YHZ7O93Xw52x_Fs$(KG3I+Rc~+*l4JDx_q` zi@iDDqAk!~3iK=S+Hc`gXSA^69*R)lZ^$J@&irSz-;PG}4BJ1~{`&bupry%aTgJf? z>~4wx1{?wiK|lmC%s~PdU>+{Q0*qi0F2QBE0#{+_x22rHd+YR@&cVH^;p;nz2+L+dh))?(Yx2GB(9qv_H zc~KU4f>5p~eb}f&ADA%?48GFYUZqQxW6(Argaj0a*@zGm<_HPl0)a%d7YPf55n+*V ziEx>4g>aRygz&bmeDm@XHlEo?5zfu`(fOpJA5tvSqNGQSjgY-e+H z`n8YLtG>VxTirV!)m78GT)3{VcxH8gGAQTp1f+U}dI3gx)G7?PuYK$~TQx6A^y;ip z+)uE(I|#*c4lEC-0N!ANs0h#wg@87KIZRRFqaVym)s&7mteE8^#?=tz+mA%qMCgqRMv+d4gJ3HBqsavcCo0V7|>zIOJ zw!XEwwV63vW_?#_mvt1C+h~t`B4yQ7os?U6p`+w89uLoCafp56bVEtSLyatL97G^@ zr);17ik}i%juyq(5743<`ypEKdxBy_yOZF{l}WI&ItkWRPI#J%L6$**x1p!p-o+z_ z_-9zfsh^V)Gb-g{oH)t=;f5Xau+&jw=`Prd^$9$F#?nB)DKbN2uR<(G`SLbdy zQ(?BWo5rMBQ`AaIKQCo%pw~2Bkdo?kwqjE}!ag9Z6DXbMKrz{yh|jS*`uGx_#7Q{( zwu{A)Sml&GP*~Kua-EM43f(LGBba4w*mv%{;rKzQv5k5Ry_Td&rJ)97w>J5+@-iU))d_noh?fWiz(s!;+@h zVfM5>2YT6(*Iz30-tH`|zEszL8dqxbcDdcLwUWVpU;e){z2F~9O=J@5DiLx0|ZgP{ie zZS1*$l4l~bnG5v0q7p7dy{QeJ1Sm=E0$ZQRDjBMxlBuzowx5}%27LW3E~O~4Sk>x0 z-rC-I`sC%#W1^3rJbM+VFHPP`mBnfL=5@Sd>v(@Z-mlB1P*TTvU8_g=zuKeit?jMY z=sa$1q0E9#nsYazl+wIbZCO!g4G{+GpqG*7R01t3pLSpV1cfP^LC0qNY@_4)K?j$t z<5vJkk7347hd(p4@hgTFYA_sNxnb5ck{ZxtT2|H#wESIaBdHS>n|($Lm0x4N1)fya+7w53Ki6+eS`wxb%EHuU~`y( z#pFIx5qlOoK8F|V?e;Hx=FNP|FTKvcf>~gF8+5@O<{-QipGp<}ChI)mZLm$m`t$*n zN;VOYJ`N9V!qf0j_(R<0E|MvRe!IK~JcmE{seiaYdb~&+2ar#;^cwzptNO3QT~!!M zceNsXKAsyfe<*+b#moohm}pUCUKag9UgeJC2YB&)WR zIgF9%*|d8^3G0qoHfJYXuhO7( zga8g3XqwhBU$pW&ly9dOQF_#^`*_%QlY#!8E=771S+Z(mnN_yPC-j%m6t(x-zl?s) j`n>x~|M5-_SN8)O?UuD@mE5D=8?r~R#v?x(MWcTJu`C}1 diff --git a/src/utils/__pycache__/visitor.cpython-37.pyc b/src/utils/__pycache__/visitor.cpython-37.pyc deleted file mode 100644 index 0cfb64ef8520aabf7abf72cca1c83d62a93d1f53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2359 zcmah~O>f&q5Zw<_qG&m88@G*&64>E#I9$%odvEs1>S{>fdbjb<%M51k z@L_&=FnJ6^?|_j+(u{P7WRf4S4war{Z%KzqUvjwf=S0?I{VkF8)H~xHU(y#O3f{w) zq-|M|Tkp+bnkN(;a4{HsHuPsOIVW8zDXbZs(h|Sr?N5TQL!7<_#*i^7$r+o4(so2` z__U{ou}Kb76*0@Yxeevg1Mi2iijPDdAEp125Bsg7RQBRlR%FMmt?iwkA3WQ+kM{n9 zhrhJMGo6gmEN%($`>(AXQ?&N>T6@LOu$QH(l@vvGFPS~v+uqvVYH5|UMy8kP*6W_` znL=$2k1g%q#)PqqgogBFwa7Pjvm%Kz{b;kR0&qu6)#0WPgvvoHM*|&Lq+2j%OEmc> z6~PkzZ}~6*9IkvXVPeRHPDvliC#m63NIIyg+a>9Hxd+xiWhL#`O142Rh^dc>3C@__ z9g}|J0t!C~$Fw99FX(cw$UBsiK}%2|8v(I@$cYC<9-pslKzEQ z)ApCY$rPg%pvc_y^pM zR$!3VeX>FN^a9nyCVcEoDOO36K||dwK`Ud1yf@wjRHn}^_?S=pDLM7d$vHh|=ltC3 zLI=feSb9$ZlvCf-O8<;XK47X}`jh$;>R9?Opf5YcEz&`CU^-6hKfvSw()r`|DIL?X zSJE@4yfH872Be8e{LNl@FJ>yM8j@w3Tb2$Ye_m^?NBe3ORsc0#8RKjZ{Fi^5CsbRq-_Y1WUZ$giP$Mov-N6}FWr2E?+(U5bufSBO2Q*|J zARo}1z=7Z@1FCNp+CW__w1HiqWXOP$?pEmF@#MA?@hW3Xz}70RULm5wB%Z^Vx4ADb zm2%mC7I0$$7yrh68e*WU1I+7&P9Tpd@{CTP%j3+kg|+Q9sBL$YWiweto~<9oIyOdC zviu2FvLOV`1E}kFSCZ`jWV3+ZFlCei;n3CC$@- ' - 'nox', # '~' - 'equal', # '=' - 'plus', # '+' - 'minus', # '-' - 'star', # '\*' - 'div', # '/ ' - 'less', # '<' - 'lesseq', # '<=' - 'id', - 'type', - 'num', - 'string' -] + list(reserved.values()) - -class Token: - def __init__(self, lex, type_, lineno, pos): - self.lex = lex - self.type = type_ - self.lineno = lineno - self.pos = pos - - def __str__(self): - return f'{self.type}: {self.lex} ({self.lineno}, {self.pos})' - - def __repr__(self): +reserved = { + 'class': 'class', + 'else': 'else', + 'false': 'false', + 'fi': 'fi', + 'if': 'if', + 'in': 'in', + 'inherits': 'inherits', + 'isvoid': 'isvoid', + 'let': 'let', + 'loop': 'loop', + 'pool': 'pool', + 'then': 'then', + 'while': 'while', + 'case': 'case', + 'esac': 'esac', + 'new': 'new', + 'of': 'of', + 'not': 'not', + 'true': 'true' +} + +tokens = [ + 'semi', # '; ' + 'colon', # ': ' + 'comma', # ', ' + 'dot', # '. ' + 'opar', # '( ' + 'cpar', # ') ' + 'ocur', # '{' + 'ccur', # '} ' + 'larrow', # '<-' + 'arroba', # '@' + 'rarrow', # '=> ' + 'nox', # '~' + 'equal', # '=' + 'plus', # '+' + 'minus', # '-' + 'star', # '\*' + 'div', # '/ ' + 'less', # '<' + 'lesseq', # '<=' + 'id', + 'type', + 'num', + 'string' +] + list(reserved.values()) + +class Token: + def __init__(self, lex, type_, lineno, pos): + self.lex = lex + self.type = type_ + self.lineno = lineno + self.pos = pos + + def __str__(self): + return f'{self.type}: {self.lex} ({self.lineno}, {self.pos})' + + def __repr__(self): return str(self) \ No newline at end of file diff --git a/tests/.gitignore b/tests/.gitignore index 7a5c8f3a..2fc88380 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -1,456 +1,456 @@ -# File created using '.gitignore Generator' for Visual Studio Code: https://bit.ly/vscode-gig - -# Created by https://www.gitignore.io/api/visualstudiocode,linux,latex,python -# Edit at https://www.gitignore.io/?templates=visualstudiocode,linux,latex,python - -### LaTeX ### -## Core latex/pdflatex auxiliary files: -*.aux -*.lof -*.log -*.lot -*.fls -*.out -*.toc -*.fmt -*.fot -*.cb -*.cb2 -.*.lb - -## Intermediate documents: -*.dvi -*.xdv -*-converted-to.* -# these rules might exclude image files for figures etc. -# *.ps -# *.eps -# *.pdf - -## Generated if empty string is given at "Please type another file name for output:" -.pdf - -## Bibliography auxiliary files (bibtex/biblatex/biber): -*.bbl -*.bcf -*.blg -*-blx.aux -*-blx.bib -*.run.xml - -## Build tool auxiliary files: -*.fdb_latexmk -*.synctex -*.synctex(busy) -*.synctex.gz -*.synctex.gz(busy) -*.pdfsync - -## Build tool directories for auxiliary files -# latexrun -latex.out/ - -## Auxiliary and intermediate files from other packages: -# algorithms -*.alg -*.loa - -# achemso -acs-*.bib - -# amsthm -*.thm - -# beamer -*.nav -*.pre -*.snm -*.vrb - -# changes -*.soc - -# comment -*.cut - -# cprotect -*.cpt - -# elsarticle (documentclass of Elsevier journals) -*.spl - -# endnotes -*.ent - -# fixme -*.lox - -# feynmf/feynmp -*.mf -*.mp -*.t[1-9] -*.t[1-9][0-9] -*.tfm - -#(r)(e)ledmac/(r)(e)ledpar -*.end -*.?end -*.[1-9] -*.[1-9][0-9] -*.[1-9][0-9][0-9] -*.[1-9]R -*.[1-9][0-9]R -*.[1-9][0-9][0-9]R -*.eledsec[1-9] -*.eledsec[1-9]R -*.eledsec[1-9][0-9] -*.eledsec[1-9][0-9]R -*.eledsec[1-9][0-9][0-9] -*.eledsec[1-9][0-9][0-9]R - -# glossaries -*.acn -*.acr -*.glg -*.glo -*.gls -*.glsdefs - -# uncomment this for glossaries-extra (will ignore makeindex's style files!) -# *.ist - -# gnuplottex -*-gnuplottex-* - -# gregoriotex -*.gaux -*.gtex - -# htlatex -*.4ct -*.4tc -*.idv -*.lg -*.trc -*.xref - -# hyperref -*.brf - -# knitr -*-concordance.tex -# TODO Comment the next line if you want to keep your tikz graphics files -*.tikz -*-tikzDictionary - -# listings -*.lol - -# luatexja-ruby -*.ltjruby - -# makeidx -*.idx -*.ilg -*.ind - -# minitoc -*.maf -*.mlf -*.mlt -*.mtc[0-9]* -*.slf[0-9]* -*.slt[0-9]* -*.stc[0-9]* - -# minted -_minted* -*.pyg - -# morewrites -*.mw - -# nomencl -*.nlg -*.nlo -*.nls - -# pax -*.pax - -# pdfpcnotes -*.pdfpc - -# sagetex -*.sagetex.sage -*.sagetex.py -*.sagetex.scmd - -# scrwfile -*.wrt - -# sympy -*.sout -*.sympy -sympy-plots-for-*.tex/ - -# pdfcomment -*.upa -*.upb - -# pythontex -*.pytxcode -pythontex-files-*/ - -# tcolorbox -*.listing - -# thmtools -*.loe - -# TikZ & PGF -*.dpth -*.md5 -*.auxlock - -# todonotes -*.tdo - -# vhistory -*.hst -*.ver - -# easy-todo -*.lod - -# xcolor -*.xcp - -# xmpincl -*.xmpi - -# xindy -*.xdy - -# xypic precompiled matrices -*.xyc - -# endfloat -*.ttt -*.fff - -# Latexian -TSWLatexianTemp* - -## Editors: -# WinEdt -*.bak -*.sav - -# Texpad -.texpadtmp - -# LyX -*.lyx~ - -# Kile -*.backup - -# KBibTeX -*~[0-9]* - -# auto folder when using emacs and auctex -./auto/* -*.el - -# expex forward references with \gathertags -*-tags.tex - -# standalone packages -*.sta - -### LaTeX Patch ### -# glossaries -*.glstex - -### Linux ### -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* - -### Python ### -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -<<<<<<< HEAD -pip-wheel-metadata/ -share/python-wheels/ -======= ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -<<<<<<< HEAD -.nox/ -======= ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -.hypothesis/ -.pytest_cache/ - -# Translations -*.mo -*.pot - -<<<<<<< HEAD -======= -# Django stuff: -*.log -local_settings.py -db.sqlite3 - -# Flask stuff: -instance/ -.webassets-cache - ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -<<<<<<< HEAD -# pyenv -.python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -======= -# Jupyter Notebook -.ipynb_checkpoints - -# pyenv -.python-version - ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e -# celery beat schedule file -celerybeat-schedule - -# SageMath parsed files -*.sage.py - -<<<<<<< HEAD -======= -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -<<<<<<< HEAD -# Mr Developer -.mr.developer.cfg -.project -.pydevproject - -======= ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e -# mkdocs documentation -/site - -# mypy -<<<<<<< HEAD -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -### VisualStudioCode Patch ### -# Ignore all local history of files -.history - -# End of https://www.gitignore.io/api/visualstudiocode,linux,latex,python - -# Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option) - -======= -.mypy_cache/ ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +# File created using '.gitignore Generator' for Visual Studio Code: https://bit.ly/vscode-gig + +# Created by https://www.gitignore.io/api/visualstudiocode,linux,latex,python +# Edit at https://www.gitignore.io/?templates=visualstudiocode,linux,latex,python + +### LaTeX ### +## Core latex/pdflatex auxiliary files: +*.aux +*.lof +*.log +*.lot +*.fls +*.out +*.toc +*.fmt +*.fot +*.cb +*.cb2 +.*.lb + +## Intermediate documents: +*.dvi +*.xdv +*-converted-to.* +# these rules might exclude image files for figures etc. +# *.ps +# *.eps +# *.pdf + +## Generated if empty string is given at "Please type another file name for output:" +.pdf + +## Bibliography auxiliary files (bibtex/biblatex/biber): +*.bbl +*.bcf +*.blg +*-blx.aux +*-blx.bib +*.run.xml + +## Build tool auxiliary files: +*.fdb_latexmk +*.synctex +*.synctex(busy) +*.synctex.gz +*.synctex.gz(busy) +*.pdfsync + +## Build tool directories for auxiliary files +# latexrun +latex.out/ + +## Auxiliary and intermediate files from other packages: +# algorithms +*.alg +*.loa + +# achemso +acs-*.bib + +# amsthm +*.thm + +# beamer +*.nav +*.pre +*.snm +*.vrb + +# changes +*.soc + +# comment +*.cut + +# cprotect +*.cpt + +# elsarticle (documentclass of Elsevier journals) +*.spl + +# endnotes +*.ent + +# fixme +*.lox + +# feynmf/feynmp +*.mf +*.mp +*.t[1-9] +*.t[1-9][0-9] +*.tfm + +#(r)(e)ledmac/(r)(e)ledpar +*.end +*.?end +*.[1-9] +*.[1-9][0-9] +*.[1-9][0-9][0-9] +*.[1-9]R +*.[1-9][0-9]R +*.[1-9][0-9][0-9]R +*.eledsec[1-9] +*.eledsec[1-9]R +*.eledsec[1-9][0-9] +*.eledsec[1-9][0-9]R +*.eledsec[1-9][0-9][0-9] +*.eledsec[1-9][0-9][0-9]R + +# glossaries +*.acn +*.acr +*.glg +*.glo +*.gls +*.glsdefs + +# uncomment this for glossaries-extra (will ignore makeindex's style files!) +# *.ist + +# gnuplottex +*-gnuplottex-* + +# gregoriotex +*.gaux +*.gtex + +# htlatex +*.4ct +*.4tc +*.idv +*.lg +*.trc +*.xref + +# hyperref +*.brf + +# knitr +*-concordance.tex +# TODO Comment the next line if you want to keep your tikz graphics files +*.tikz +*-tikzDictionary + +# listings +*.lol + +# luatexja-ruby +*.ltjruby + +# makeidx +*.idx +*.ilg +*.ind + +# minitoc +*.maf +*.mlf +*.mlt +*.mtc[0-9]* +*.slf[0-9]* +*.slt[0-9]* +*.stc[0-9]* + +# minted +_minted* +*.pyg + +# morewrites +*.mw + +# nomencl +*.nlg +*.nlo +*.nls + +# pax +*.pax + +# pdfpcnotes +*.pdfpc + +# sagetex +*.sagetex.sage +*.sagetex.py +*.sagetex.scmd + +# scrwfile +*.wrt + +# sympy +*.sout +*.sympy +sympy-plots-for-*.tex/ + +# pdfcomment +*.upa +*.upb + +# pythontex +*.pytxcode +pythontex-files-*/ + +# tcolorbox +*.listing + +# thmtools +*.loe + +# TikZ & PGF +*.dpth +*.md5 +*.auxlock + +# todonotes +*.tdo + +# vhistory +*.hst +*.ver + +# easy-todo +*.lod + +# xcolor +*.xcp + +# xmpincl +*.xmpi + +# xindy +*.xdy + +# xypic precompiled matrices +*.xyc + +# endfloat +*.ttt +*.fff + +# Latexian +TSWLatexianTemp* + +## Editors: +# WinEdt +*.bak +*.sav + +# Texpad +.texpadtmp + +# LyX +*.lyx~ + +# Kile +*.backup + +# KBibTeX +*~[0-9]* + +# auto folder when using emacs and auctex +./auto/* +*.el + +# expex forward references with \gathertags +*-tags.tex + +# standalone packages +*.sta + +### LaTeX Patch ### +# glossaries +*.glstex + +### Linux ### +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +<<<<<<< HEAD +pip-wheel-metadata/ +share/python-wheels/ +======= +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +<<<<<<< HEAD +.nox/ +======= +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +<<<<<<< HEAD +======= +# Django stuff: +*.log +local_settings.py +db.sqlite3 + +# Flask stuff: +instance/ +.webassets-cache + +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +<<<<<<< HEAD +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +======= +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +<<<<<<< HEAD +======= +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +<<<<<<< HEAD +# Mr Developer +.mr.developer.cfg +.project +.pydevproject + +======= +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +# mkdocs documentation +/site + +# mypy +<<<<<<< HEAD +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history + +# End of https://www.gitignore.io/api/visualstudiocode,linux,latex,python + +# Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option) + +======= +.mypy_cache/ +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e diff --git a/tests/codegen/arith.cl b/tests/codegen/arith.cl old mode 100755 new mode 100644 index 0d9f5dd3..af5951cf --- a/tests/codegen/arith.cl +++ b/tests/codegen/arith.cl @@ -1,430 +1,430 @@ -(* - * A contribution from Anne Sheets (sheets@cory) - * - * Tests the arithmetic operations and various other things - *) - -class A { - - var : Int <- 0; - - value() : Int { var }; - - set_var(num : Int) : A{ - { - var <- num; - self; - } - }; - - method1(num : Int) : A { -- same - self - }; - - method2(num1 : Int, num2 : Int) : A { -- plus - (let x : Int in - { - x <- num1 + num2; - (new B).set_var(x); - } - ) - }; - - method3(num : Int) : A { -- negate - (let x : Int in - { - x <- ~num; - (new C).set_var(x); - } - ) - }; - - method4(num1 : Int, num2 : Int) : A { -- diff - if num2 < num1 then - (let x : Int in - { - x <- num1 - num2; - (new D).set_var(x); - } - ) - else - (let x : Int in - { - x <- num2 - num1; - (new D).set_var(x); - } - ) - fi - }; - - method5(num : Int) : A { -- factorial - (let x : Int <- 1 in - { - (let y : Int <- 1 in - while y <= num loop - { - x <- x * y; - y <- y + 1; - } - pool - ); - (new E).set_var(x); - } - ) - }; - -}; - -class B inherits A { -- B is a number squared - - method5(num : Int) : A { -- square - (let x : Int in - { - x <- num * num; - (new E).set_var(x); - } - ) - }; - -}; - -class C inherits B { - - method6(num : Int) : A { -- negate - (let x : Int in - { - x <- ~num; - (new A).set_var(x); - } - ) - }; - - method5(num : Int) : A { -- cube - (let x : Int in - { - x <- num * num * num; - (new E).set_var(x); - } - ) - }; - -}; - -class D inherits B { - - method7(num : Int) : Bool { -- divisible by 3 - (let x : Int <- num in - if x < 0 then method7(~x) else - if 0 = x then true else - if 1 = x then false else - if 2 = x then false else - method7(x - 3) - fi fi fi fi - ) - }; - -}; - -class E inherits D { - - method6(num : Int) : A { -- division - (let x : Int in - { - x <- num / 8; - (new A).set_var(x); - } - ) - }; - -}; - -(* The following code is from atoi.cl in ~cs164/examples *) - -(* - The class A2I provides integer-to-string and string-to-integer -conversion routines. To use these routines, either inherit them -in the class where needed, have a dummy variable bound to -something of type A2I, or simpl write (new A2I).method(argument). -*) - - -(* - c2i Converts a 1-character string to an integer. Aborts - if the string is not "0" through "9" -*) -class A2I { - - c2i(char : String) : Int { - if char = "0" then 0 else - if char = "1" then 1 else - if char = "2" then 2 else - if char = "3" then 3 else - if char = "4" then 4 else - if char = "5" then 5 else - if char = "6" then 6 else - if char = "7" then 7 else - if char = "8" then 8 else - if char = "9" then 9 else - { abort(); 0; } (* the 0 is needed to satisfy the - typchecker *) - fi fi fi fi fi fi fi fi fi fi - }; - -(* - i2c is the inverse of c2i. -*) - i2c(i : Int) : String { - if i = 0 then "0" else - if i = 1 then "1" else - if i = 2 then "2" else - if i = 3 then "3" else - if i = 4 then "4" else - if i = 5 then "5" else - if i = 6 then "6" else - if i = 7 then "7" else - if i = 8 then "8" else - if i = 9 then "9" else - { abort(); ""; } -- the "" is needed to satisfy the typchecker - fi fi fi fi fi fi fi fi fi fi - }; - -(* - a2i converts an ASCII string into an integer. The empty string -is converted to 0. Signed and unsigned strings are handled. The -method aborts if the string does not represent an integer. Very -long strings of digits produce strange answers because of arithmetic -overflow. - -*) - a2i(s : String) : Int { - if s.length() = 0 then 0 else - if s.substr(0,1) = "-" then ~a2i_aux(s.substr(1,s.length()-1)) else - if s.substr(0,1) = "+" then a2i_aux(s.substr(1,s.length()-1)) else - a2i_aux(s) - fi fi fi - }; - -(* a2i_aux converts the usigned portion of the string. As a - programming example, this method is written iteratively. *) - - - a2i_aux(s : String) : Int { - (let int : Int <- 0 in - { - (let j : Int <- s.length() in - (let i : Int <- 0 in - while i < j loop - { - int <- int * 10 + c2i(s.substr(i,1)); - i <- i + 1; - } - pool - ) - ); - int; - } - ) - }; - -(* i2a converts an integer to a string. Positive and negative - numbers are handled correctly. *) - - i2a(i : Int) : String { - if i = 0 then "0" else - if 0 < i then i2a_aux(i) else - "-".concat(i2a_aux(i * ~1)) - fi fi - }; - -(* i2a_aux is an example using recursion. *) - - i2a_aux(i : Int) : String { - if i = 0 then "" else - (let next : Int <- i / 10 in - i2a_aux(next).concat(i2c(i - next * 10)) - ) - fi - }; - -}; - -class Main inherits IO { - - char : String; - avar : A; - a_var : A; - flag : Bool <- true; - - - menu() : String { - { - out_string("\n\tTo add a number to "); - print(avar); - out_string("...enter a:\n"); - out_string("\tTo negate "); - print(avar); - out_string("...enter b:\n"); - out_string("\tTo find the difference between "); - print(avar); - out_string("and another number...enter c:\n"); - out_string("\tTo find the factorial of "); - print(avar); - out_string("...enter d:\n"); - out_string("\tTo square "); - print(avar); - out_string("...enter e:\n"); - out_string("\tTo cube "); - print(avar); - out_string("...enter f:\n"); - out_string("\tTo find out if "); - print(avar); - out_string("is a multiple of 3...enter g:\n"); - out_string("\tTo divide "); - print(avar); - out_string("by 8...enter h:\n"); - out_string("\tTo get a new number...enter j:\n"); - out_string("\tTo quit...enter q:\n\n"); - in_string(); - } - }; - - prompt() : String { - { - out_string("\n"); - out_string("Please enter a number... "); - in_string(); - } - }; - - get_int() : Int { - { - (let z : A2I <- new A2I in - (let s : String <- prompt() in - z.a2i(s) - ) - ); - } - }; - - is_even(num : Int) : Bool { - (let x : Int <- num in - if x < 0 then is_even(~x) else - if 0 = x then true else - if 1 = x then false else - is_even(x - 2) - fi fi fi - ) - }; - - class_type(var : A) : IO { - case var of - a : A => out_string("Class type is now A\n"); - b : B => out_string("Class type is now B\n"); - c : C => out_string("Class type is now C\n"); - d : D => out_string("Class type is now D\n"); - e : E => out_string("Class type is now E\n"); - o : Object => out_string("Oooops\n"); - esac - }; - - print(var : A) : IO { - (let z : A2I <- new A2I in - { - out_string(z.i2a(var.value())); - out_string(" "); - } - ) - }; - - main() : Object { - { - avar <- (new A); - while flag loop - { - -- avar <- (new A).set_var(get_int()); - out_string("number "); - print(avar); - if is_even(avar.value()) then - out_string("is even!\n") - else - out_string("is odd!\n") - fi; - -- print(avar); -- prints out answer - class_type(avar); - char <- menu(); - if char = "a" then -- add - { - a_var <- (new A).set_var(get_int()); - avar <- (new B).method2(avar.value(), a_var.value()); - } else - if char = "b" then -- negate - case avar of - c : C => avar <- c.method6(c.value()); - a : A => avar <- a.method3(a.value()); - o : Object => { - out_string("Oooops\n"); - abort(); 0; - }; - esac else - if char = "c" then -- diff - { - a_var <- (new A).set_var(get_int()); - avar <- (new D).method4(avar.value(), a_var.value()); - } else - if char = "d" then avar <- (new C)@A.method5(avar.value()) else - -- factorial - if char = "e" then avar <- (new C)@B.method5(avar.value()) else - -- square - if char = "f" then avar <- (new C)@C.method5(avar.value()) else - -- cube - if char = "g" then -- multiple of 3? - if ((new D).method7(avar.value())) - then -- avar <- (new A).method1(avar.value()) - { - out_string("number "); - print(avar); - out_string("is divisible by 3.\n"); - } - else -- avar <- (new A).set_var(0) - { - out_string("number "); - print(avar); - out_string("is not divisible by 3.\n"); - } - fi else - if char = "h" then - (let x : A in - { - x <- (new E).method6(avar.value()); - (let r : Int <- (avar.value() - (x.value() * 8)) in - { - out_string("number "); - print(avar); - out_string("is equal to "); - print(x); - out_string("times 8 with a remainder of "); - (let a : A2I <- new A2I in - { - out_string(a.i2a(r)); - out_string("\n"); - } - ); -- end let a: - } - ); -- end let r: - avar <- x; - } - ) -- end let x: - else - if char = "j" then avar <- (new A) - else - if char = "q" then flag <- false - else - avar <- (new A).method1(avar.value()) -- divide/8 - fi fi fi fi fi fi fi fi fi fi; - } - pool; - } - }; - -}; - +(* + * A contribution from Anne Sheets (sheets@cory) + * + * Tests the arithmetic operations and various other things + *) + +class A { + + var : Int <- 0; + + value() : Int { var }; + + set_var(num : Int) : A{ + { + var <- num; + self; + } + }; + + method1(num : Int) : A { -- same + self + }; + + method2(num1 : Int, num2 : Int) : A { -- plus + (let x : Int in + { + x <- num1 + num2; + (new B).set_var(x); + } + ) + }; + + method3(num : Int) : A { -- negate + (let x : Int in + { + x <- ~num; + (new C).set_var(x); + } + ) + }; + + method4(num1 : Int, num2 : Int) : A { -- diff + if num2 < num1 then + (let x : Int in + { + x <- num1 - num2; + (new D).set_var(x); + } + ) + else + (let x : Int in + { + x <- num2 - num1; + (new D).set_var(x); + } + ) + fi + }; + + method5(num : Int) : A { -- factorial + (let x : Int <- 1 in + { + (let y : Int <- 1 in + while y <= num loop + { + x <- x * y; + y <- y + 1; + } + pool + ); + (new E).set_var(x); + } + ) + }; + +}; + +class B inherits A { -- B is a number squared + + method5(num : Int) : A { -- square + (let x : Int in + { + x <- num * num; + (new E).set_var(x); + } + ) + }; + +}; + +class C inherits B { + + method6(num : Int) : A { -- negate + (let x : Int in + { + x <- ~num; + (new A).set_var(x); + } + ) + }; + + method5(num : Int) : A { -- cube + (let x : Int in + { + x <- num * num * num; + (new E).set_var(x); + } + ) + }; + +}; + +class D inherits B { + + method7(num : Int) : Bool { -- divisible by 3 + (let x : Int <- num in + if x < 0 then method7(~x) else + if 0 = x then true else + if 1 = x then false else + if 2 = x then false else + method7(x - 3) + fi fi fi fi + ) + }; + +}; + +class E inherits D { + + method6(num : Int) : A { -- division + (let x : Int in + { + x <- num / 8; + (new A).set_var(x); + } + ) + }; + +}; + +(* The following code is from atoi.cl in ~cs164/examples *) + +(* + The class A2I provides integer-to-string and string-to-integer +conversion routines. To use these routines, either inherit them +in the class where needed, have a dummy variable bound to +something of type A2I, or simpl write (new A2I).method(argument). +*) + + +(* + c2i Converts a 1-character string to an integer. Aborts + if the string is not "0" through "9" +*) +class A2I { + + c2i(char : String) : Int { + if char = "0" then 0 else + if char = "1" then 1 else + if char = "2" then 2 else + if char = "3" then 3 else + if char = "4" then 4 else + if char = "5" then 5 else + if char = "6" then 6 else + if char = "7" then 7 else + if char = "8" then 8 else + if char = "9" then 9 else + { abort(); 0; } (* the 0 is needed to satisfy the + typchecker *) + fi fi fi fi fi fi fi fi fi fi + }; + +(* + i2c is the inverse of c2i. +*) + i2c(i : Int) : String { + if i = 0 then "0" else + if i = 1 then "1" else + if i = 2 then "2" else + if i = 3 then "3" else + if i = 4 then "4" else + if i = 5 then "5" else + if i = 6 then "6" else + if i = 7 then "7" else + if i = 8 then "8" else + if i = 9 then "9" else + { abort(); ""; } -- the "" is needed to satisfy the typchecker + fi fi fi fi fi fi fi fi fi fi + }; + +(* + a2i converts an ASCII string into an integer. The empty string +is converted to 0. Signed and unsigned strings are handled. The +method aborts if the string does not represent an integer. Very +long strings of digits produce strange answers because of arithmetic +overflow. + +*) + a2i(s : String) : Int { + if s.length() = 0 then 0 else + if s.substr(0,1) = "-" then ~a2i_aux(s.substr(1,s.length()-1)) else + if s.substr(0,1) = "+" then a2i_aux(s.substr(1,s.length()-1)) else + a2i_aux(s) + fi fi fi + }; + +(* a2i_aux converts the usigned portion of the string. As a + programming example, this method is written iteratively. *) + + + a2i_aux(s : String) : Int { + (let int : Int <- 0 in + { + (let j : Int <- s.length() in + (let i : Int <- 0 in + while i < j loop + { + int <- int * 10 + c2i(s.substr(i,1)); + i <- i + 1; + } + pool + ) + ); + int; + } + ) + }; + +(* i2a converts an integer to a string. Positive and negative + numbers are handled correctly. *) + + i2a(i : Int) : String { + if i = 0 then "0" else + if 0 < i then i2a_aux(i) else + "-".concat(i2a_aux(i * ~1)) + fi fi + }; + +(* i2a_aux is an example using recursion. *) + + i2a_aux(i : Int) : String { + if i = 0 then "" else + (let next : Int <- i / 10 in + i2a_aux(next).concat(i2c(i - next * 10)) + ) + fi + }; + +}; + +class Main inherits IO { + + char : String; + avar : A; + a_var : A; + flag : Bool <- true; + + + menu() : String { + { + out_string("\n\tTo add a number to "); + print(avar); + out_string("...enter a:\n"); + out_string("\tTo negate "); + print(avar); + out_string("...enter b:\n"); + out_string("\tTo find the difference between "); + print(avar); + out_string("and another number...enter c:\n"); + out_string("\tTo find the factorial of "); + print(avar); + out_string("...enter d:\n"); + out_string("\tTo square "); + print(avar); + out_string("...enter e:\n"); + out_string("\tTo cube "); + print(avar); + out_string("...enter f:\n"); + out_string("\tTo find out if "); + print(avar); + out_string("is a multiple of 3...enter g:\n"); + out_string("\tTo divide "); + print(avar); + out_string("by 8...enter h:\n"); + out_string("\tTo get a new number...enter j:\n"); + out_string("\tTo quit...enter q:\n\n"); + in_string(); + } + }; + + prompt() : String { + { + out_string("\n"); + out_string("Please enter a number... "); + in_string(); + } + }; + + get_int() : Int { + { + (let z : A2I <- new A2I in + (let s : String <- prompt() in + z.a2i(s) + ) + ); + } + }; + + is_even(num : Int) : Bool { + (let x : Int <- num in + if x < 0 then is_even(~x) else + if 0 = x then true else + if 1 = x then false else + is_even(x - 2) + fi fi fi + ) + }; + + class_type(var : A) : IO { + case var of + a : A => out_string("Class type is now A\n"); + b : B => out_string("Class type is now B\n"); + c : C => out_string("Class type is now C\n"); + d : D => out_string("Class type is now D\n"); + e : E => out_string("Class type is now E\n"); + o : Object => out_string("Oooops\n"); + esac + }; + + print(var : A) : IO { + (let z : A2I <- new A2I in + { + out_string(z.i2a(var.value())); + out_string(" "); + } + ) + }; + + main() : Object { + { + avar <- (new A); + while flag loop + { + -- avar <- (new A).set_var(get_int()); + out_string("number "); + print(avar); + if is_even(avar.value()) then + out_string("is even!\n") + else + out_string("is odd!\n") + fi; + -- print(avar); -- prints out answer + class_type(avar); + char <- menu(); + if char = "a" then -- add + { + a_var <- (new A).set_var(get_int()); + avar <- (new B).method2(avar.value(), a_var.value()); + } else + if char = "b" then -- negate + case avar of + c : C => avar <- c.method6(c.value()); + a : A => avar <- a.method3(a.value()); + o : Object => { + out_string("Oooops\n"); + abort(); 0; + }; + esac else + if char = "c" then -- diff + { + a_var <- (new A).set_var(get_int()); + avar <- (new D).method4(avar.value(), a_var.value()); + } else + if char = "d" then avar <- (new C)@A.method5(avar.value()) else + -- factorial + if char = "e" then avar <- (new C)@B.method5(avar.value()) else + -- square + if char = "f" then avar <- (new C)@C.method5(avar.value()) else + -- cube + if char = "g" then -- multiple of 3? + if ((new D).method7(avar.value())) + then -- avar <- (new A).method1(avar.value()) + { + out_string("number "); + print(avar); + out_string("is divisible by 3.\n"); + } + else -- avar <- (new A).set_var(0) + { + out_string("number "); + print(avar); + out_string("is not divisible by 3.\n"); + } + fi else + if char = "h" then + (let x : A in + { + x <- (new E).method6(avar.value()); + (let r : Int <- (avar.value() - (x.value() * 8)) in + { + out_string("number "); + print(avar); + out_string("is equal to "); + print(x); + out_string("times 8 with a remainder of "); + (let a : A2I <- new A2I in + { + out_string(a.i2a(r)); + out_string("\n"); + } + ); -- end let a: + } + ); -- end let r: + avar <- x; + } + ) -- end let x: + else + if char = "j" then avar <- (new A) + else + if char = "q" then flag <- false + else + avar <- (new A).method1(avar.value()) -- divide/8 + fi fi fi fi fi fi fi fi fi fi; + } + pool; + } + }; + +}; + diff --git a/tests/codegen/atoi.cl b/tests/codegen/atoi.cl index fd8b2ea4..f4125a2f 100644 --- a/tests/codegen/atoi.cl +++ b/tests/codegen/atoi.cl @@ -1,121 +1,121 @@ -(* - The class A2I provides integer-to-string and string-to-integer -conversion routines. To use these routines, either inherit them -in the class where needed, have a dummy variable bound to -something of type A2I, or simpl write (new A2I).method(argument). -*) - - -(* - c2i Converts a 1-character string to an integer. Aborts - if the string is not "0" through "9" -*) -class A2I { - - c2i(char : String) : Int { - if char = "0" then 0 else - if char = "1" then 1 else - if char = "2" then 2 else - if char = "3" then 3 else - if char = "4" then 4 else - if char = "5" then 5 else - if char = "6" then 6 else - if char = "7" then 7 else - if char = "8" then 8 else - if char = "9" then 9 else - { abort(); 0; } -- the 0 is needed to satisfy the typchecker - fi fi fi fi fi fi fi fi fi fi - }; - -(* - i2c is the inverse of c2i. -*) - i2c(i : Int) : String { - if i = 0 then "0" else - if i = 1 then "1" else - if i = 2 then "2" else - if i = 3 then "3" else - if i = 4 then "4" else - if i = 5 then "5" else - if i = 6 then "6" else - if i = 7 then "7" else - if i = 8 then "8" else - if i = 9 then "9" else - { abort(); ""; } -- the "" is needed to satisfy the typchecker - fi fi fi fi fi fi fi fi fi fi - }; - -(* - a2i converts an ASCII string into an integer. The empty string -is converted to 0. Signed and unsigned strings are handled. The -method aborts if the string does not represent an integer. Very -long strings of digits produce strange answers because of arithmetic -overflow. - -*) - a2i(s : String) : Int { - if s.length() = 0 then 0 else - if s.substr(0,1) = "-" then ~a2i_aux(s.substr(1,s.length()-1)) else - if s.substr(0,1) = "+" then a2i_aux(s.substr(1,s.length()-1)) else - a2i_aux(s) - fi fi fi - }; - -(* - a2i_aux converts the usigned portion of the string. As a programming -example, this method is written iteratively. -*) - a2i_aux(s : String) : Int { - (let int : Int <- 0 in - { - (let j : Int <- s.length() in - (let i : Int <- 0 in - while i < j loop - { - int <- int * 10 + c2i(s.substr(i,1)); - i <- i + 1; - } - pool - ) - ); - int; - } - ) - }; - -(* - i2a converts an integer to a string. Positive and negative -numbers are handled correctly. -*) - i2a(i : Int) : String { - if i = 0 then "0" else - if 0 < i then i2a_aux(i) else - "-".concat(i2a_aux(i * ~1)) - fi fi - }; - -(* - i2a_aux is an example using recursion. -*) - i2a_aux(i : Int) : String { - if i = 0 then "" else - (let next : Int <- i / 10 in - i2a_aux(next).concat(i2c(i - next * 10)) - ) - fi - }; - -}; - -class Main inherits IO { - main () : Object { - let a : Int <- (new A2I).a2i("678987"), - b : String <- (new A2I).i2a(678987) in - { - out_int(a) ; - out_string(" == ") ; - out_string(b) ; - out_string("\n"); - } - } ; -} ; +(* + The class A2I provides integer-to-string and string-to-integer +conversion routines. To use these routines, either inherit them +in the class where needed, have a dummy variable bound to +something of type A2I, or simpl write (new A2I).method(argument). +*) + + +(* + c2i Converts a 1-character string to an integer. Aborts + if the string is not "0" through "9" +*) +class A2I { + + c2i(char : String) : Int { + if char = "0" then 0 else + if char = "1" then 1 else + if char = "2" then 2 else + if char = "3" then 3 else + if char = "4" then 4 else + if char = "5" then 5 else + if char = "6" then 6 else + if char = "7" then 7 else + if char = "8" then 8 else + if char = "9" then 9 else + { abort(); 0; } -- the 0 is needed to satisfy the typchecker + fi fi fi fi fi fi fi fi fi fi + }; + +(* + i2c is the inverse of c2i. +*) + i2c(i : Int) : String { + if i = 0 then "0" else + if i = 1 then "1" else + if i = 2 then "2" else + if i = 3 then "3" else + if i = 4 then "4" else + if i = 5 then "5" else + if i = 6 then "6" else + if i = 7 then "7" else + if i = 8 then "8" else + if i = 9 then "9" else + { abort(); ""; } -- the "" is needed to satisfy the typchecker + fi fi fi fi fi fi fi fi fi fi + }; + +(* + a2i converts an ASCII string into an integer. The empty string +is converted to 0. Signed and unsigned strings are handled. The +method aborts if the string does not represent an integer. Very +long strings of digits produce strange answers because of arithmetic +overflow. + +*) + a2i(s : String) : Int { + if s.length() = 0 then 0 else + if s.substr(0,1) = "-" then ~a2i_aux(s.substr(1,s.length()-1)) else + if s.substr(0,1) = "+" then a2i_aux(s.substr(1,s.length()-1)) else + a2i_aux(s) + fi fi fi + }; + +(* + a2i_aux converts the usigned portion of the string. As a programming +example, this method is written iteratively. +*) + a2i_aux(s : String) : Int { + (let int : Int <- 0 in + { + (let j : Int <- s.length() in + (let i : Int <- 0 in + while i < j loop + { + int <- int * 10 + c2i(s.substr(i,1)); + i <- i + 1; + } + pool + ) + ); + int; + } + ) + }; + +(* + i2a converts an integer to a string. Positive and negative +numbers are handled correctly. +*) + i2a(i : Int) : String { + if i = 0 then "0" else + if 0 < i then i2a_aux(i) else + "-".concat(i2a_aux(i * ~1)) + fi fi + }; + +(* + i2a_aux is an example using recursion. +*) + i2a_aux(i : Int) : String { + if i = 0 then "" else + (let next : Int <- i / 10 in + i2a_aux(next).concat(i2c(i - next * 10)) + ) + fi + }; + +}; + +class Main inherits IO { + main () : Object { + let a : Int <- (new A2I).a2i("678987"), + b : String <- (new A2I).i2a(678987) in + { + out_int(a) ; + out_string(" == ") ; + out_string(b) ; + out_string("\n"); + } + } ; +} ; diff --git a/tests/codegen/atoi2.cl b/tests/codegen/atoi2.cl index 577aa29f..47e9d0fa 100644 --- a/tests/codegen/atoi2.cl +++ b/tests/codegen/atoi2.cl @@ -1,92 +1,92 @@ -class JustThere { -- class can have no features. -}; - -class A2I { - - c2i(char : String) : Int { - if char = "0" then 0 else - if char = "1" then 1 else - if char = "2" then 2 else - if char = "3" then 3 else - if char = "4" then 4 else - if char = "5" then 5 else - if char = "6" then 6 else - if char = "7" then 7 else - if char = "8" then 8 else - if char = "9" then 9 else - { abort(); 0; } -- Here the formal list is optional. - fi fi fi fi fi fi fi fi fi fi - }; - - - i2c(i : Int) : String { - if i = 0 then "0" else - if i = 1 then "1" else - if i = 2 then "2" else - if i = 3 then "3" else - if i = 4 then "4" else - if i = 5 then "5" else - if i = 6 then "6" else - if i = 7 then "7" else - if i = 8 then "8" else - if i = 9 then "9" else - { abort(); ""; } -- demonstrates an expression block - fi fi fi fi fi fi fi fi fi fi - }; - - a2i(s : String) : Int { - if s.length() = 0 then 0 else - if s.substr(0,1) = "-" then ~a2i_aux(s.substr(1,s.length()-1)) else - if s.substr(0,1) = "+" then a2i_aux(s.substr(1,s.length()-1)) else - a2i_aux(s) - fi fi fi - }; - - a2i_aux(s : String) : Int { - (let int : Int <- 0 in - { - (let j : Int <- s.length() in - (let i : Int <- 0 in - while i < j loop - { - int <- int * 10 + c2i(s.substr(i,1)); -- demonstrates dispatch - i <- i + 1; - } - pool - ) - ); - int; - } - ) - }; - - i2a(i : Int) : String { - if i = 0 then "0" else - if 0 < i then i2a_aux(i) else - "-".concat(i2a_aux(i * ~1)) - fi fi - }; - - - i2a_aux(i : Int) : String { - if i = 0 then "" else - (let next : Int <- i / 10 in - i2a_aux(next).concat(i2c(i - next * 10)) - ) - fi - }; - -}; - -class Main inherits IO { - main () : Object { - let a : Int <- (new A2I).a2i("678987"), - b : String <- (new A2I).i2a(678987) in -- the let expression. Translated to let a: ... in let b: ... in expr. - { - out_int(a) ; - out_string(" == ") ; - out_string(b) ; - out_string("\n"); - } - } ; -} ; +class JustThere { -- class can have no features. +}; + +class A2I { + + c2i(char : String) : Int { + if char = "0" then 0 else + if char = "1" then 1 else + if char = "2" then 2 else + if char = "3" then 3 else + if char = "4" then 4 else + if char = "5" then 5 else + if char = "6" then 6 else + if char = "7" then 7 else + if char = "8" then 8 else + if char = "9" then 9 else + { abort(); 0; } -- Here the formal list is optional. + fi fi fi fi fi fi fi fi fi fi + }; + + + i2c(i : Int) : String { + if i = 0 then "0" else + if i = 1 then "1" else + if i = 2 then "2" else + if i = 3 then "3" else + if i = 4 then "4" else + if i = 5 then "5" else + if i = 6 then "6" else + if i = 7 then "7" else + if i = 8 then "8" else + if i = 9 then "9" else + { abort(); ""; } -- demonstrates an expression block + fi fi fi fi fi fi fi fi fi fi + }; + + a2i(s : String) : Int { + if s.length() = 0 then 0 else + if s.substr(0,1) = "-" then ~a2i_aux(s.substr(1,s.length()-1)) else + if s.substr(0,1) = "+" then a2i_aux(s.substr(1,s.length()-1)) else + a2i_aux(s) + fi fi fi + }; + + a2i_aux(s : String) : Int { + (let int : Int <- 0 in + { + (let j : Int <- s.length() in + (let i : Int <- 0 in + while i < j loop + { + int <- int * 10 + c2i(s.substr(i,1)); -- demonstrates dispatch + i <- i + 1; + } + pool + ) + ); + int; + } + ) + }; + + i2a(i : Int) : String { + if i = 0 then "0" else + if 0 < i then i2a_aux(i) else + "-".concat(i2a_aux(i * ~1)) + fi fi + }; + + + i2a_aux(i : Int) : String { + if i = 0 then "" else + (let next : Int <- i / 10 in + i2a_aux(next).concat(i2c(i - next * 10)) + ) + fi + }; + +}; + +class Main inherits IO { + main () : Object { + let a : Int <- (new A2I).a2i("678987"), + b : String <- (new A2I).i2a(678987) in -- the let expression. Translated to let a: ... in let b: ... in expr. + { + out_int(a) ; + out_string(" == ") ; + out_string(b) ; + out_string("\n"); + } + } ; +} ; diff --git a/tests/codegen/book_list.cl b/tests/codegen/book_list.cl old mode 100755 new mode 100644 index d39f86bb..025ea169 --- a/tests/codegen/book_list.cl +++ b/tests/codegen/book_list.cl @@ -1,132 +1,132 @@ --- example of static and dynamic type differing for a dispatch - -Class Book inherits IO { - title : String; - author : String; - - initBook(title_p : String, author_p : String) : Book { - { - title <- title_p; - author <- author_p; - self; - } - }; - - print() : Book { - { - out_string("title: ").out_string(title).out_string("\n"); - out_string("author: ").out_string(author).out_string("\n"); - self; - } - }; -}; - -Class Article inherits Book { - per_title : String; - - initArticle(title_p : String, author_p : String, - per_title_p : String) : Article { - { - initBook(title_p, author_p); - per_title <- per_title_p; - self; - } - }; - - print() : Book { - { - self@Book.print(); - out_string("periodical: ").out_string(per_title).out_string("\n"); - self; - } - }; -}; - -Class BookList inherits IO { - (* Since abort "returns" type Object, we have to add - an expression of type Bool here to satisfy the typechecker. - This code is unreachable, since abort() halts the program. - *) - isNil() : Bool { { abort(); true; } }; - - cons(hd : Book) : Cons { - (let new_cell : Cons <- new Cons in - new_cell.init(hd,self) - ) - }; - - (* Since abort "returns" type Object, we have to add - an expression of type Book here to satisfy the typechecker. - This code is unreachable, since abort() halts the program. - *) - car() : Book { { abort(); new Book; } }; - - (* Since abort "returns" type Object, we have to add - an expression of type BookList here to satisfy the typechecker. - This code is unreachable, since abort() halts the program. - *) - cdr() : BookList { { abort(); new BookList; } }; - - print_list() : Object { abort() }; -}; - -Class Cons inherits BookList { - xcar : Book; -- We keep the car and cdr in attributes. - xcdr : BookList; -- Because methods and features must have different names, - -- we use xcar and xcdr for the attributes and reserve - -- car and cdr for the features. - - isNil() : Bool { false }; - - init(hd : Book, tl : BookList) : Cons { - { - xcar <- hd; - xcdr <- tl; - self; - } - }; - - car() : Book { xcar }; - - cdr() : BookList { xcdr }; - - print_list() : Object { - { - case xcar.print() of - dummy : Book => out_string("- dynamic type was Book -\n"); - dummy : Article => out_string("- dynamic type was Article -\n"); - esac; - xcdr.print_list(); - } - }; -}; - -Class Nil inherits BookList { - isNil() : Bool { true }; - - print_list() : Object { true }; -}; - - -Class Main { - - books : BookList; - - main() : Object { - (let a_book : Book <- - (new Book).initBook("Compilers, Principles, Techniques, and Tools", - "Aho, Sethi, and Ullman") - in - (let an_article : Article <- - (new Article).initArticle("The Top 100 CD_ROMs", - "Ulanoff", - "PC Magazine") - in - { - books <- (new Nil).cons(a_book).cons(an_article); - books.print_list(); - } - ) -- end let an_article - ) -- end let a_book - }; -}; +-- example of static and dynamic type differing for a dispatch + +Class Book inherits IO { + title : String; + author : String; + + initBook(title_p : String, author_p : String) : Book { + { + title <- title_p; + author <- author_p; + self; + } + }; + + print() : Book { + { + out_string("title: ").out_string(title).out_string("\n"); + out_string("author: ").out_string(author).out_string("\n"); + self; + } + }; +}; + +Class Article inherits Book { + per_title : String; + + initArticle(title_p : String, author_p : String, + per_title_p : String) : Article { + { + initBook(title_p, author_p); + per_title <- per_title_p; + self; + } + }; + + print() : Book { + { + self@Book.print(); + out_string("periodical: ").out_string(per_title).out_string("\n"); + self; + } + }; +}; + +Class BookList inherits IO { + (* Since abort "returns" type Object, we have to add + an expression of type Bool here to satisfy the typechecker. + This code is unreachable, since abort() halts the program. + *) + isNil() : Bool { { abort(); true; } }; + + cons(hd : Book) : Cons { + (let new_cell : Cons <- new Cons in + new_cell.init(hd,self) + ) + }; + + (* Since abort "returns" type Object, we have to add + an expression of type Book here to satisfy the typechecker. + This code is unreachable, since abort() halts the program. + *) + car() : Book { { abort(); new Book; } }; + + (* Since abort "returns" type Object, we have to add + an expression of type BookList here to satisfy the typechecker. + This code is unreachable, since abort() halts the program. + *) + cdr() : BookList { { abort(); new BookList; } }; + + print_list() : Object { abort() }; +}; + +Class Cons inherits BookList { + xcar : Book; -- We keep the car and cdr in attributes. + xcdr : BookList; -- Because methods and features must have different names, + -- we use xcar and xcdr for the attributes and reserve + -- car and cdr for the features. + + isNil() : Bool { false }; + + init(hd : Book, tl : BookList) : Cons { + { + xcar <- hd; + xcdr <- tl; + self; + } + }; + + car() : Book { xcar }; + + cdr() : BookList { xcdr }; + + print_list() : Object { + { + case xcar.print() of + dummy : Book => out_string("- dynamic type was Book -\n"); + dummy : Article => out_string("- dynamic type was Article -\n"); + esac; + xcdr.print_list(); + } + }; +}; + +Class Nil inherits BookList { + isNil() : Bool { true }; + + print_list() : Object { true }; +}; + + +Class Main { + + books : BookList; + + main() : Object { + (let a_book : Book <- + (new Book).initBook("Compilers, Principles, Techniques, and Tools", + "Aho, Sethi, and Ullman") + in + (let an_article : Article <- + (new Article).initArticle("The Top 100 CD_ROMs", + "Ulanoff", + "PC Magazine") + in + { + books <- (new Nil).cons(a_book).cons(an_article); + books.print_list(); + } + ) -- end let an_article + ) -- end let a_book + }; +}; diff --git a/tests/codegen/cells.cl b/tests/codegen/cells.cl old mode 100755 new mode 100644 index bcd89149..9fd6741b --- a/tests/codegen/cells.cl +++ b/tests/codegen/cells.cl @@ -1,97 +1,97 @@ -(* models one-dimensional cellular automaton on a circle of finite radius - arrays are faked as Strings, - X's respresent live cells, dots represent dead cells, - no error checking is done *) -class CellularAutomaton inherits IO { - population_map : String; - - init(map : String) : CellularAutomaton { - { - population_map <- map; - self; - } - }; - - print() : CellularAutomaton { - { - out_string(population_map.concat("\n")); - self; - } - }; - - num_cells() : Int { - population_map.length() - }; - - cell(position : Int) : String { - population_map.substr(position, 1) - }; - - cell_left_neighbor(position : Int) : String { - if position = 0 then - cell(num_cells() - 1) - else - cell(position - 1) - fi - }; - - cell_right_neighbor(position : Int) : String { - if position = num_cells() - 1 then - cell(0) - else - cell(position + 1) - fi - }; - - (* a cell will live if exactly 1 of itself and it's immediate - neighbors are alive *) - cell_at_next_evolution(position : Int) : String { - if (if cell(position) = "X" then 1 else 0 fi - + if cell_left_neighbor(position) = "X" then 1 else 0 fi - + if cell_right_neighbor(position) = "X" then 1 else 0 fi - = 1) - then - "X" - else - "." - fi - }; - - evolve() : CellularAutomaton { - (let position : Int in - (let num : Int <- num_cells() in - (let temp : String in - { - while position < num loop - { - temp <- temp.concat(cell_at_next_evolution(position)); - position <- position + 1; - } - pool; - population_map <- temp; - self; - } - ) ) ) - }; -}; - -class Main { - cells : CellularAutomaton; - - main() : Main { - { - cells <- (new CellularAutomaton).init(" X "); - cells.print(); - (let countdown : Int <- 20 in - while 0 < countdown loop - { - cells.evolve(); - cells.print(); - countdown <- countdown - 1; - } - pool - ); - self; - } - }; -}; +(* models one-dimensional cellular automaton on a circle of finite radius + arrays are faked as Strings, + X's respresent live cells, dots represent dead cells, + no error checking is done *) +class CellularAutomaton inherits IO { + population_map : String; + + init(map : String) : CellularAutomaton { + { + population_map <- map; + self; + } + }; + + print() : CellularAutomaton { + { + out_string(population_map.concat("\n")); + self; + } + }; + + num_cells() : Int { + population_map.length() + }; + + cell(position : Int) : String { + population_map.substr(position, 1) + }; + + cell_left_neighbor(position : Int) : String { + if position = 0 then + cell(num_cells() - 1) + else + cell(position - 1) + fi + }; + + cell_right_neighbor(position : Int) : String { + if position = num_cells() - 1 then + cell(0) + else + cell(position + 1) + fi + }; + + (* a cell will live if exactly 1 of itself and it's immediate + neighbors are alive *) + cell_at_next_evolution(position : Int) : String { + if (if cell(position) = "X" then 1 else 0 fi + + if cell_left_neighbor(position) = "X" then 1 else 0 fi + + if cell_right_neighbor(position) = "X" then 1 else 0 fi + = 1) + then + "X" + else + "." + fi + }; + + evolve() : CellularAutomaton { + (let position : Int in + (let num : Int <- num_cells() in + (let temp : String in + { + while position < num loop + { + temp <- temp.concat(cell_at_next_evolution(position)); + position <- position + 1; + } + pool; + population_map <- temp; + self; + } + ) ) ) + }; +}; + +class Main { + cells : CellularAutomaton; + + main() : Main { + { + cells <- (new CellularAutomaton).init(" X "); + cells.print(); + (let countdown : Int <- 20 in + while 0 < countdown loop + { + cells.evolve(); + cells.print(); + countdown <- countdown - 1; + } + pool + ); + self; + } + }; +}; diff --git a/tests/codegen/complex.cl b/tests/codegen/complex.cl old mode 100755 new mode 100644 index 9edb6151..0b7aa44e --- a/tests/codegen/complex.cl +++ b/tests/codegen/complex.cl @@ -1,52 +1,52 @@ -class Main inherits IO { - main() : IO { - (let c : Complex <- (new Complex).init(1, 1) in - if c.reflect_X().reflect_Y() = c.reflect_0() - then out_string("=)\n") - else out_string("=(\n") - fi - ) - }; -}; - -class Complex inherits IO { - x : Int; - y : Int; - - init(a : Int, b : Int) : Complex { - { - x = a; - y = b; - self; - } - }; - - print() : Object { - if y = 0 - then out_int(x) - else out_int(x).out_string("+").out_int(y).out_string("I") - fi - }; - - reflect_0() : Complex { - { - x = ~x; - y = ~y; - self; - } - }; - - reflect_X() : Complex { - { - y = ~y; - self; - } - }; - - reflect_Y() : Complex { - { - x = ~x; - self; - } - }; -}; +class Main inherits IO { + main() : IO { + (let c : Complex <- (new Complex).init(1, 1) in + if c.reflect_X().reflect_Y() = c.reflect_0() + then out_string("=)\n") + else out_string("=(\n") + fi + ) + }; +}; + +class Complex inherits IO { + x : Int; + y : Int; + + init(a : Int, b : Int) : Complex { + { + x = a; + y = b; + self; + } + }; + + print() : Object { + if y = 0 + then out_int(x) + else out_int(x).out_string("+").out_int(y).out_string("I") + fi + }; + + reflect_0() : Complex { + { + x = ~x; + y = ~y; + self; + } + }; + + reflect_X() : Complex { + { + y = ~y; + self; + } + }; + + reflect_Y() : Complex { + { + x = ~x; + self; + } + }; +}; diff --git a/tests/codegen/fib.cl b/tests/codegen/fib.cl index ced8cee4..08ceaede 100644 --- a/tests/codegen/fib.cl +++ b/tests/codegen/fib.cl @@ -1,29 +1,29 @@ -class Main inherits IO { - -- the class has features. Only methods in this case. - main(): Object { - { - out_string("Enter n to find nth fibonacci number!\n"); - out_int(fib(in_int())); - out_string("\n"); - } - }; - - fib(i : Int) : Int { -- list of formals. And the return type of the method. - let a : Int <- 1, - b : Int <- 0, - c : Int <- 0 - in - { - while (not (i = 0)) loop -- expressions are nested. - { - c <- a + b; - i <- i - 1; - b <- a; - a <- c; - } - pool; - c; - } - }; - -}; +class Main inherits IO { + -- the class has features. Only methods in this case. + main(): Object { + { + out_string("Enter n to find nth fibonacci number!\n"); + out_int(fib(in_int())); + out_string("\n"); + } + }; + + fib(i : Int) : Int { -- list of formals. And the return type of the method. + let a : Int <- 1, + b : Int <- 0, + c : Int <- 0 + in + { + while (not (i = 0)) loop -- expressions are nested. + { + c <- a + b; + i <- i - 1; + b <- a; + a <- c; + } + pool; + c; + } + }; + +}; diff --git a/tests/codegen/graph.cl b/tests/codegen/graph.cl old mode 100755 new mode 100644 index 59e29bbf..8e511358 --- a/tests/codegen/graph.cl +++ b/tests/codegen/graph.cl @@ -1,381 +1,381 @@ -(* - * Cool program reading descriptions of weighted directed graphs - * from stdin. It builds up a graph objects with a list of vertices - * and a list of edges. Every vertice has a list of outgoing edges. - * - * INPUT FORMAT - * Every line has the form vertice successor* - * Where vertice is an int, and successor is vertice,weight - * - * An empty line or EOF terminates the input. - * - * The list of vertices and the edge list is printed out by the Main - * class. - * - * TEST - * Once compiled, the file g1.graph can be fed to the program. - * The output should look like this: - -nautilus.CS.Berkeley.EDU 53# spim -file graph.s (new Bar); - n : Foo => (new Razz); - n : Bar => n; - esac; - - b : Int <- a.doh() + g.doh() + doh() + printh(); - - doh() : Int { (let i : Int <- h in { h <- h + 2; i; } ) }; - -}; - -class Bar inherits Razz { - - c : Int <- doh(); - - d : Object <- printh(); -}; - - -class Razz inherits Foo { - - e : Bar <- case self of - n : Razz => (new Bar); - n : Bar => n; - esac; - - f : Int <- a@Bazz.doh() + g.doh() + e.doh() + doh() + printh(); - -}; - -class Bazz inherits IO { - - h : Int <- 1; - - g : Foo <- case self of - n : Bazz => (new Foo); - n : Razz => (new Bar); - n : Foo => (new Razz); - n : Bar => n; - esac; - - i : Object <- printh(); - - printh() : Int { { out_int(h); 0; } }; - - doh() : Int { (let i: Int <- h in { h <- h + 1; i; } ) }; -}; - -(* scary . . . *) -class Main { - a : Bazz <- new Bazz; - b : Foo <- new Foo; - c : Razz <- new Razz; - d : Bar <- new Bar; - - main(): String { "do nothing" }; - -}; - - - - - +(* hairy . . .*) + +class Foo inherits Bazz { + a : Razz <- case self of + n : Razz => (new Bar); + n : Foo => (new Razz); + n : Bar => n; + esac; + + b : Int <- a.doh() + g.doh() + doh() + printh(); + + doh() : Int { (let i : Int <- h in { h <- h + 2; i; } ) }; + +}; + +class Bar inherits Razz { + + c : Int <- doh(); + + d : Object <- printh(); +}; + + +class Razz inherits Foo { + + e : Bar <- case self of + n : Razz => (new Bar); + n : Bar => n; + esac; + + f : Int <- a@Bazz.doh() + g.doh() + e.doh() + doh() + printh(); + +}; + +class Bazz inherits IO { + + h : Int <- 1; + + g : Foo <- case self of + n : Bazz => (new Foo); + n : Razz => (new Bar); + n : Foo => (new Razz); + n : Bar => n; + esac; + + i : Object <- printh(); + + printh() : Int { { out_int(h); 0; } }; + + doh() : Int { (let i: Int <- h in { h <- h + 1; i; } ) }; +}; + +(* scary . . . *) +class Main { + a : Bazz <- new Bazz; + b : Foo <- new Foo; + c : Razz <- new Razz; + d : Bar <- new Bar; + + main(): String { "do nothing" }; + +}; + + + + + diff --git a/tests/codegen/hello_world.cl b/tests/codegen/hello_world.cl old mode 100755 new mode 100644 index b0a180a2..0c818f90 --- a/tests/codegen/hello_world.cl +++ b/tests/codegen/hello_world.cl @@ -1,5 +1,5 @@ -class Main inherits IO { - main(): IO { - out_string("Hello, World.\n") - }; -}; +class Main inherits IO { + main(): IO { + out_string("Hello, World.\n") + }; +}; diff --git a/tests/codegen/helloworld.cl b/tests/codegen/helloworld.cl index 41bc1d44..61d42108 100644 --- a/tests/codegen/helloworld.cl +++ b/tests/codegen/helloworld.cl @@ -1,6 +1,6 @@ -class Main { - main():IO { - new IO.out_string("Hello world!\n") - }; -}; - +class Main { + main():IO { + new IO.out_string("Hello world!\n") + }; +}; + diff --git a/tests/codegen/io.cl b/tests/codegen/io.cl old mode 100755 new mode 100644 index 42ee6854..7f0de869 --- a/tests/codegen/io.cl +++ b/tests/codegen/io.cl @@ -1,103 +1,103 @@ -(* - * The IO class is predefined and has 4 methods: - * - * out_string(s : String) : SELF_TYPE - * out_int(i : Int) : SELF_TYPE - * in_string() : String - * in_int() : Int - * - * The out operations print their argument to the terminal. The - * in_string method reads an entire line from the terminal and returns a - * string not containing the new line. The in_int method also reads - * an entire line from the terminal and returns the integer - * corresponding to the first non blank word on the line. If that - * word is not an integer, it returns 0. - * - * - * Because our language is object oriented, we need an object of type - * IO in order to call any of these methods. - * - * There are basically two ways of getting access to IO in a class C. - * - * 1) Define C to Inherit from IO. This way the IO methods become - * methods of C, and they can be called using the abbreviated - * dispatch, i.e. - * - * class C inherits IO is - * ... - * out_string("Hello world\n") - * ... - * end; - * - * 2) If your class C does not directly or indirectly inherit from - * IO, the best way to access IO is through an initialized - * attribute of type IO. - * - * class C inherits Foo is - * io : IO <- new IO; - * ... - * io.out_string("Hello world\n"); - * ... - * end; - * - * Approach 1) is most often used, in particular when you need IO - * functions in the Main class. - * - *) - - -class A { - - -- Let's assume that we don't want A to not inherit from IO. - - io : IO <- new IO; - - out_a() : Object { io.out_string("A: Hello world\n") }; - -}; - - -class B inherits A { - - -- B does not have to an extra attribute, since it inherits io from A. - - out_b() : Object { io.out_string("B: Hello world\n") }; - -}; - - -class C inherits IO { - - -- Now the IO methods are part of C. - - out_c() : Object { out_string("C: Hello world\n") }; - - -- Note that out_string(...) is just a shorthand for self.out_string(...) - -}; - - -class D inherits C { - - -- Inherits IO methods from C. - - out_d() : Object { out_string("D: Hello world\n") }; - -}; - - -class Main inherits IO { - - -- Same case as class C. - - main() : Object { - { - (new A).out_a(); - (new B).out_b(); - (new C).out_c(); - (new D).out_d(); - out_string("Done.\n"); - } - }; - -}; +(* + * The IO class is predefined and has 4 methods: + * + * out_string(s : String) : SELF_TYPE + * out_int(i : Int) : SELF_TYPE + * in_string() : String + * in_int() : Int + * + * The out operations print their argument to the terminal. The + * in_string method reads an entire line from the terminal and returns a + * string not containing the new line. The in_int method also reads + * an entire line from the terminal and returns the integer + * corresponding to the first non blank word on the line. If that + * word is not an integer, it returns 0. + * + * + * Because our language is object oriented, we need an object of type + * IO in order to call any of these methods. + * + * There are basically two ways of getting access to IO in a class C. + * + * 1) Define C to Inherit from IO. This way the IO methods become + * methods of C, and they can be called using the abbreviated + * dispatch, i.e. + * + * class C inherits IO is + * ... + * out_string("Hello world\n") + * ... + * end; + * + * 2) If your class C does not directly or indirectly inherit from + * IO, the best way to access IO is through an initialized + * attribute of type IO. + * + * class C inherits Foo is + * io : IO <- new IO; + * ... + * io.out_string("Hello world\n"); + * ... + * end; + * + * Approach 1) is most often used, in particular when you need IO + * functions in the Main class. + * + *) + + +class A { + + -- Let's assume that we don't want A to not inherit from IO. + + io : IO <- new IO; + + out_a() : Object { io.out_string("A: Hello world\n") }; + +}; + + +class B inherits A { + + -- B does not have to an extra attribute, since it inherits io from A. + + out_b() : Object { io.out_string("B: Hello world\n") }; + +}; + + +class C inherits IO { + + -- Now the IO methods are part of C. + + out_c() : Object { out_string("C: Hello world\n") }; + + -- Note that out_string(...) is just a shorthand for self.out_string(...) + +}; + + +class D inherits C { + + -- Inherits IO methods from C. + + out_d() : Object { out_string("D: Hello world\n") }; + +}; + + +class Main inherits IO { + + -- Same case as class C. + + main() : Object { + { + (new A).out_a(); + (new B).out_b(); + (new C).out_c(); + (new D).out_d(); + out_string("Done.\n"); + } + }; + +}; diff --git a/tests/codegen/life.cl b/tests/codegen/life.cl old mode 100755 new mode 100644 index 7d7a41fd..b83d9795 --- a/tests/codegen/life.cl +++ b/tests/codegen/life.cl @@ -1,436 +1,436 @@ -(* The Game of Life - Tendo Kayiira, Summer '95 - With code taken from /private/cool/class/examples/cells.cl - - This introduction was taken off the internet. It gives a brief - description of the Game Of Life. It also gives the rules by which - this particular game follows. - - Introduction - - John Conway's Game of Life is a mathematical amusement, but it - is also much more: an insight into how a system of simple - cellualar automata can create complex, odd, and often aesthetically - pleasing patterns. It is played on a cartesian grid of cells - which are either 'on' or 'off' The game gets it's name from the - similarity between the behaviour of these cells and the behaviour - of living organisms. - - The Rules - - The playfield is a cartesian grid of arbitrary size. Each cell in - this grid can be in an 'on' state or an 'off' state. On each 'turn' - (called a generation,) the state of each cell changes simultaneously - depending on it's state and the state of all cells adjacent to it. - - For 'on' cells, - If the cell has 0 or 1 neighbours which are 'on', the cell turns - 'off'. ('dies of loneliness') - If the cell has 2 or 3 neighbours which are 'on', the cell stays - 'on'. (nothing happens to that cell) - If the cell has 4, 5, 6, 7, 8, or 9 neighbours which are 'on', - the cell turns 'off'. ('dies of overcrowding') - - For 'off' cells, - If the cell has 0, 1, 2, 4, 5, 6, 7, 8, or 9 neighbours which - are 'on', the cell stays 'off'. (nothing happens to that cell) - If the cell has 3 neighbours which are 'on', the cell turns - 'on'. (3 neighbouring 'alive' cells 'give birth' to a fourth.) - - Repeat for as many generations as desired. - - *) - - -class Board inherits IO { - - rows : Int; - columns : Int; - board_size : Int; - - size_of_board(initial : String) : Int { - initial.length() - }; - - board_init(start : String) : Board { - (let size :Int <- size_of_board(start) in - { - if size = 15 then - { - rows <- 3; - columns <- 5; - board_size <- size; - } - else if size = 16 then - { - rows <- 4; - columns <- 4; - board_size <- size; - } - else if size = 20 then - { - rows <- 4; - columns <- 5; - board_size <- size; - } - else if size = 21 then - { - rows <- 3; - columns <- 7; - board_size <- size; - } - else if size = 25 then - { - rows <- 5; - columns <- 5; - board_size <- size; - } - else if size = 28 then - { - rows <- 7; - columns <- 4; - board_size <- size; - } - else -- If none of the above fit, then just give - { -- the configuration of the most common board - rows <- 5; - columns <- 5; - board_size <- size; - } - fi fi fi fi fi fi; - self; - } - ) - }; - -}; - - - -class CellularAutomaton inherits Board { - population_map : String; - - init(map : String) : CellularAutomaton { - { - population_map <- map; - board_init(map); - self; - } - }; - - - - - print() : CellularAutomaton { - - (let i : Int <- 0 in - (let num : Int <- board_size in - { - out_string("\n"); - while i < num loop - { - out_string(population_map.substr(i,columns)); - out_string("\n"); - i <- i + columns; - } - pool; - out_string("\n"); - self; - } - ) ) - }; - - num_cells() : Int { - population_map.length() - }; - - cell(position : Int) : String { - if board_size - 1 < position then - " " - else - population_map.substr(position, 1) - fi - }; - - north(position : Int): String { - if (position - columns) < 0 then - " " - else - cell(position - columns) - fi - }; - - south(position : Int): String { - if board_size < (position + columns) then - " " - else - cell(position + columns) - fi - }; - - east(position : Int): String { - if (((position + 1) /columns ) * columns) = (position + 1) then - " " - else - cell(position + 1) - fi - }; - - west(position : Int): String { - if position = 0 then - " " - else - if ((position / columns) * columns) = position then - " " - else - cell(position - 1) - fi fi - }; - - northwest(position : Int): String { - if (position - columns) < 0 then - " " - else if ((position / columns) * columns) = position then - " " - else - north(position - 1) - fi fi - }; - - northeast(position : Int): String { - if (position - columns) < 0 then - " " - else if (((position + 1) /columns ) * columns) = (position + 1) then - " " - else - north(position + 1) - fi fi - }; - - southeast(position : Int): String { - if board_size < (position + columns) then - " " - else if (((position + 1) /columns ) * columns) = (position + 1) then - " " - else - south(position + 1) - fi fi - }; - - southwest(position : Int): String { - if board_size < (position + columns) then - " " - else if ((position / columns) * columns) = position then - " " - else - south(position - 1) - fi fi - }; - - neighbors(position: Int): Int { - { - if north(position) = "X" then 1 else 0 fi - + if south(position) = "X" then 1 else 0 fi - + if east(position) = "X" then 1 else 0 fi - + if west(position) = "X" then 1 else 0 fi - + if northeast(position) = "X" then 1 else 0 fi - + if northwest(position) = "X" then 1 else 0 fi - + if southeast(position) = "X" then 1 else 0 fi - + if southwest(position) = "X" then 1 else 0 fi; - } - }; - - -(* A cell will live if 2 or 3 of it's neighbors are alive. It dies - otherwise. A cell is born if only 3 of it's neighbors are alive. *) - - cell_at_next_evolution(position : Int) : String { - - if neighbors(position) = 3 then - "X" - else - if neighbors(position) = 2 then - if cell(position) = "X" then - "X" - else - "-" - fi - else - "-" - fi fi - }; - - - evolve() : CellularAutomaton { - (let position : Int <- 0 in - (let num : Int <- num_cells() in - (let temp : String in - { - while position < num loop - { - temp <- temp.concat(cell_at_next_evolution(position)); - position <- position + 1; - } - pool; - population_map <- temp; - self; - } - ) ) ) - }; - -(* This is where the background pattern is detremined by the user. More - patterns can be added as long as whoever adds keeps the board either - 3x5, 4x5, 5x5, 3x7, 7x4, 4x4 with the row first then column. *) - option(): String { - { - (let num : Int in - { - out_string("\nPlease chose a number:\n"); - out_string("\t1: A cross\n"); - out_string("\t2: A slash from the upper left to lower right\n"); - out_string("\t3: A slash from the upper right to lower left\n"); - out_string("\t4: An X\n"); - out_string("\t5: A greater than sign \n"); - out_string("\t6: A less than sign\n"); - out_string("\t7: Two greater than signs\n"); - out_string("\t8: Two less than signs\n"); - out_string("\t9: A 'V'\n"); - out_string("\t10: An inverse 'V'\n"); - out_string("\t11: Numbers 9 and 10 combined\n"); - out_string("\t12: A full grid\n"); - out_string("\t13: A 'T'\n"); - out_string("\t14: A plus '+'\n"); - out_string("\t15: A 'W'\n"); - out_string("\t16: An 'M'\n"); - out_string("\t17: An 'E'\n"); - out_string("\t18: A '3'\n"); - out_string("\t19: An 'O'\n"); - out_string("\t20: An '8'\n"); - out_string("\t21: An 'S'\n"); - out_string("Your choice => "); - num <- in_int(); - out_string("\n"); - if num = 1 then - " XX XXXX XXXX XX " - else if num = 2 then - " X X X X X " - else if num = 3 then - "X X X X X" - else if num = 4 then - "X X X X X X X X X" - else if num = 5 then - "X X X X X " - else if num = 6 then - " X X X X X" - else if num = 7 then - "X X X XX X " - else if num = 8 then - " X XX X X X " - else if num = 9 then - "X X X X X " - else if num = 10 then - " X X X X X" - else if num = 11 then - "X X X X X X X X" - else if num = 12 then - "XXXXXXXXXXXXXXXXXXXXXXXXX" - else if num = 13 then - "XXXXX X X X X " - else if num = 14 then - " X X XXXXX X X " - else if num = 15 then - "X X X X X X X " - else if num = 16 then - " X X X X X X X" - else if num = 17 then - "XXXXX X XXXXX X XXXX" - else if num = 18 then - "XXX X X X X XXXX " - else if num = 19 then - " XX X XX X XX " - else if num = 20 then - " XX X XX X XX X XX X XX " - else if num = 21 then - " XXXX X XX X XXXX " - else - " " - fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi; - } - ); - } - }; - - - - - prompt() : Bool { - { - (let ans : String in - { - out_string("Would you like to continue with the next generation? \n"); - out_string("Please use lowercase y or n for your answer [y]: "); - ans <- in_string(); - out_string("\n"); - if ans = "n" then - false - else - true - fi; - } - ); - } - }; - - - prompt2() : Bool { - (let ans : String in - { - out_string("\n\n"); - out_string("Would you like to choose a background pattern? \n"); - out_string("Please use lowercase y or n for your answer [n]: "); - ans <- in_string(); - if ans = "y" then - true - else - false - fi; - } - ) - }; - - -}; - -class Main inherits CellularAutomaton { - cells : CellularAutomaton; - - main() : Main { - { - (let continue : Bool in - (let choice : String in - { - out_string("Welcome to the Game of Life.\n"); - out_string("There are many initial states to choose from. \n"); - while prompt2() loop - { - continue <- true; - choice <- option(); - cells <- (new CellularAutomaton).init(choice); - cells.print(); - while continue loop - if prompt() then - { - cells.evolve(); - cells.print(); - } - else - continue <- false - fi - pool; - } - pool; - self; - } ) ); } - }; -}; - +(* The Game of Life + Tendo Kayiira, Summer '95 + With code taken from /private/cool/class/examples/cells.cl + + This introduction was taken off the internet. It gives a brief + description of the Game Of Life. It also gives the rules by which + this particular game follows. + + Introduction + + John Conway's Game of Life is a mathematical amusement, but it + is also much more: an insight into how a system of simple + cellualar automata can create complex, odd, and often aesthetically + pleasing patterns. It is played on a cartesian grid of cells + which are either 'on' or 'off' The game gets it's name from the + similarity between the behaviour of these cells and the behaviour + of living organisms. + + The Rules + + The playfield is a cartesian grid of arbitrary size. Each cell in + this grid can be in an 'on' state or an 'off' state. On each 'turn' + (called a generation,) the state of each cell changes simultaneously + depending on it's state and the state of all cells adjacent to it. + + For 'on' cells, + If the cell has 0 or 1 neighbours which are 'on', the cell turns + 'off'. ('dies of loneliness') + If the cell has 2 or 3 neighbours which are 'on', the cell stays + 'on'. (nothing happens to that cell) + If the cell has 4, 5, 6, 7, 8, or 9 neighbours which are 'on', + the cell turns 'off'. ('dies of overcrowding') + + For 'off' cells, + If the cell has 0, 1, 2, 4, 5, 6, 7, 8, or 9 neighbours which + are 'on', the cell stays 'off'. (nothing happens to that cell) + If the cell has 3 neighbours which are 'on', the cell turns + 'on'. (3 neighbouring 'alive' cells 'give birth' to a fourth.) + + Repeat for as many generations as desired. + + *) + + +class Board inherits IO { + + rows : Int; + columns : Int; + board_size : Int; + + size_of_board(initial : String) : Int { + initial.length() + }; + + board_init(start : String) : Board { + (let size :Int <- size_of_board(start) in + { + if size = 15 then + { + rows <- 3; + columns <- 5; + board_size <- size; + } + else if size = 16 then + { + rows <- 4; + columns <- 4; + board_size <- size; + } + else if size = 20 then + { + rows <- 4; + columns <- 5; + board_size <- size; + } + else if size = 21 then + { + rows <- 3; + columns <- 7; + board_size <- size; + } + else if size = 25 then + { + rows <- 5; + columns <- 5; + board_size <- size; + } + else if size = 28 then + { + rows <- 7; + columns <- 4; + board_size <- size; + } + else -- If none of the above fit, then just give + { -- the configuration of the most common board + rows <- 5; + columns <- 5; + board_size <- size; + } + fi fi fi fi fi fi; + self; + } + ) + }; + +}; + + + +class CellularAutomaton inherits Board { + population_map : String; + + init(map : String) : CellularAutomaton { + { + population_map <- map; + board_init(map); + self; + } + }; + + + + + print() : CellularAutomaton { + + (let i : Int <- 0 in + (let num : Int <- board_size in + { + out_string("\n"); + while i < num loop + { + out_string(population_map.substr(i,columns)); + out_string("\n"); + i <- i + columns; + } + pool; + out_string("\n"); + self; + } + ) ) + }; + + num_cells() : Int { + population_map.length() + }; + + cell(position : Int) : String { + if board_size - 1 < position then + " " + else + population_map.substr(position, 1) + fi + }; + + north(position : Int): String { + if (position - columns) < 0 then + " " + else + cell(position - columns) + fi + }; + + south(position : Int): String { + if board_size < (position + columns) then + " " + else + cell(position + columns) + fi + }; + + east(position : Int): String { + if (((position + 1) /columns ) * columns) = (position + 1) then + " " + else + cell(position + 1) + fi + }; + + west(position : Int): String { + if position = 0 then + " " + else + if ((position / columns) * columns) = position then + " " + else + cell(position - 1) + fi fi + }; + + northwest(position : Int): String { + if (position - columns) < 0 then + " " + else if ((position / columns) * columns) = position then + " " + else + north(position - 1) + fi fi + }; + + northeast(position : Int): String { + if (position - columns) < 0 then + " " + else if (((position + 1) /columns ) * columns) = (position + 1) then + " " + else + north(position + 1) + fi fi + }; + + southeast(position : Int): String { + if board_size < (position + columns) then + " " + else if (((position + 1) /columns ) * columns) = (position + 1) then + " " + else + south(position + 1) + fi fi + }; + + southwest(position : Int): String { + if board_size < (position + columns) then + " " + else if ((position / columns) * columns) = position then + " " + else + south(position - 1) + fi fi + }; + + neighbors(position: Int): Int { + { + if north(position) = "X" then 1 else 0 fi + + if south(position) = "X" then 1 else 0 fi + + if east(position) = "X" then 1 else 0 fi + + if west(position) = "X" then 1 else 0 fi + + if northeast(position) = "X" then 1 else 0 fi + + if northwest(position) = "X" then 1 else 0 fi + + if southeast(position) = "X" then 1 else 0 fi + + if southwest(position) = "X" then 1 else 0 fi; + } + }; + + +(* A cell will live if 2 or 3 of it's neighbors are alive. It dies + otherwise. A cell is born if only 3 of it's neighbors are alive. *) + + cell_at_next_evolution(position : Int) : String { + + if neighbors(position) = 3 then + "X" + else + if neighbors(position) = 2 then + if cell(position) = "X" then + "X" + else + "-" + fi + else + "-" + fi fi + }; + + + evolve() : CellularAutomaton { + (let position : Int <- 0 in + (let num : Int <- num_cells() in + (let temp : String in + { + while position < num loop + { + temp <- temp.concat(cell_at_next_evolution(position)); + position <- position + 1; + } + pool; + population_map <- temp; + self; + } + ) ) ) + }; + +(* This is where the background pattern is detremined by the user. More + patterns can be added as long as whoever adds keeps the board either + 3x5, 4x5, 5x5, 3x7, 7x4, 4x4 with the row first then column. *) + option(): String { + { + (let num : Int in + { + out_string("\nPlease chose a number:\n"); + out_string("\t1: A cross\n"); + out_string("\t2: A slash from the upper left to lower right\n"); + out_string("\t3: A slash from the upper right to lower left\n"); + out_string("\t4: An X\n"); + out_string("\t5: A greater than sign \n"); + out_string("\t6: A less than sign\n"); + out_string("\t7: Two greater than signs\n"); + out_string("\t8: Two less than signs\n"); + out_string("\t9: A 'V'\n"); + out_string("\t10: An inverse 'V'\n"); + out_string("\t11: Numbers 9 and 10 combined\n"); + out_string("\t12: A full grid\n"); + out_string("\t13: A 'T'\n"); + out_string("\t14: A plus '+'\n"); + out_string("\t15: A 'W'\n"); + out_string("\t16: An 'M'\n"); + out_string("\t17: An 'E'\n"); + out_string("\t18: A '3'\n"); + out_string("\t19: An 'O'\n"); + out_string("\t20: An '8'\n"); + out_string("\t21: An 'S'\n"); + out_string("Your choice => "); + num <- in_int(); + out_string("\n"); + if num = 1 then + " XX XXXX XXXX XX " + else if num = 2 then + " X X X X X " + else if num = 3 then + "X X X X X" + else if num = 4 then + "X X X X X X X X X" + else if num = 5 then + "X X X X X " + else if num = 6 then + " X X X X X" + else if num = 7 then + "X X X XX X " + else if num = 8 then + " X XX X X X " + else if num = 9 then + "X X X X X " + else if num = 10 then + " X X X X X" + else if num = 11 then + "X X X X X X X X" + else if num = 12 then + "XXXXXXXXXXXXXXXXXXXXXXXXX" + else if num = 13 then + "XXXXX X X X X " + else if num = 14 then + " X X XXXXX X X " + else if num = 15 then + "X X X X X X X " + else if num = 16 then + " X X X X X X X" + else if num = 17 then + "XXXXX X XXXXX X XXXX" + else if num = 18 then + "XXX X X X X XXXX " + else if num = 19 then + " XX X XX X XX " + else if num = 20 then + " XX X XX X XX X XX X XX " + else if num = 21 then + " XXXX X XX X XXXX " + else + " " + fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi; + } + ); + } + }; + + + + + prompt() : Bool { + { + (let ans : String in + { + out_string("Would you like to continue with the next generation? \n"); + out_string("Please use lowercase y or n for your answer [y]: "); + ans <- in_string(); + out_string("\n"); + if ans = "n" then + false + else + true + fi; + } + ); + } + }; + + + prompt2() : Bool { + (let ans : String in + { + out_string("\n\n"); + out_string("Would you like to choose a background pattern? \n"); + out_string("Please use lowercase y or n for your answer [n]: "); + ans <- in_string(); + if ans = "y" then + true + else + false + fi; + } + ) + }; + + +}; + +class Main inherits CellularAutomaton { + cells : CellularAutomaton; + + main() : Main { + { + (let continue : Bool in + (let choice : String in + { + out_string("Welcome to the Game of Life.\n"); + out_string("There are many initial states to choose from. \n"); + while prompt2() loop + { + continue <- true; + choice <- option(); + cells <- (new CellularAutomaton).init(choice); + cells.print(); + while continue loop + if prompt() then + { + cells.evolve(); + cells.print(); + } + else + continue <- false + fi + pool; + } + pool; + self; + } ) ); } + }; +}; + diff --git a/tests/codegen/list.cl b/tests/codegen/list.cl index b384dac6..e8bbcb84 100644 --- a/tests/codegen/list.cl +++ b/tests/codegen/list.cl @@ -1,141 +1,141 @@ -(* - * This file shows how to implement a list data type for lists of integers. - * It makes use of INHERITANCE and DYNAMIC DISPATCH. - * - * The List class has 4 operations defined on List objects. If 'l' is - * a list, then the methods dispatched on 'l' have the following effects: - * - * isNil() : Bool Returns true if 'l' is empty, false otherwise. - * head() : Int Returns the integer at the head of 'l'. - * If 'l' is empty, execution aborts. - * tail() : List Returns the remainder of the 'l', - * i.e. without the first element. - * cons(i : Int) : List Return a new list containing i as the - * first element, followed by the - * elements in 'l'. - * - * There are 2 kinds of lists, the empty list and a non-empty - * list. We can think of the non-empty list as a specialization of - * the empty list. - * The class List defines the operations on empty list. The class - * Cons inherits from List and redefines things to handle non-empty - * lists. - *) - - -class List { - -- Define operations on empty lists. - - isNil() : Bool { true }; - - -- Since abort() has return type Object and head() has return type - -- Int, we need to have an Int as the result of the method body, - -- even though abort() never returns. - - head() : Int { { abort(); 0; } }; - - -- As for head(), the self is just to make sure the return type of - -- tail() is correct. - - tail() : List { { abort(); self; } }; - - -- When we cons and element onto the empty list we get a non-empty - -- list. The (new Cons) expression creates a new list cell of class - -- Cons, which is initialized by a dispatch to init(). - -- The result of init() is an element of class Cons, but it - -- conforms to the return type List, because Cons is a subclass of - -- List. - - cons(i : Int) : List { - (new Cons).init(i, self) - }; - -}; - - -(* - * Cons inherits all operations from List. We can reuse only the cons - * method though, because adding an element to the front of an emtpy - * list is the same as adding it to the front of a non empty - * list. All other methods have to be redefined, since the behaviour - * for them is different from the empty list. - * - * Cons needs two attributes to hold the integer of this list - * cell and to hold the rest of the list. - * - * The init() method is used by the cons() method to initialize the - * cell. - *) - -class Cons inherits List { - - car : Int; -- The element in this list cell - - cdr : List; -- The rest of the list - - isNil() : Bool { false }; - - head() : Int { car }; - - tail() : List { cdr }; - - init(i : Int, rest : List) : List { - { - car <- i; - cdr <- rest; - self; - } - }; - -}; - - - -(* - * The Main class shows how to use the List class. It creates a small - * list and then repeatedly prints out its elements and takes off the - * first element of the list. - *) - -class Main inherits IO { - - mylist : List; - - -- Print all elements of the list. Calls itself recursively with - -- the tail of the list, until the end of the list is reached. - - print_list(l : List) : Object { - if l.isNil() then out_string("\n") - else { - out_int(l.head()); - out_string(" "); - print_list(l.tail()); - } - fi - }; - - -- Note how the dynamic dispatch mechanism is responsible to end - -- the while loop. As long as mylist is bound to an object of - -- dynamic type Cons, the dispatch to isNil calls the isNil method of - -- the Cons class, which returns false. However when we reach the - -- end of the list, mylist gets bound to the object that was - -- created by the (new List) expression. This object is of dynamic type - -- List, and thus the method isNil in the List class is called and - -- returns true. - - main() : Object { - { - mylist <- new List.cons(1).cons(2).cons(3).cons(4).cons(5); - while (not mylist.isNil()) loop - { - print_list(mylist); - mylist <- mylist.tail(); - } - pool; - } - }; - -}; - - - +(* + * This file shows how to implement a list data type for lists of integers. + * It makes use of INHERITANCE and DYNAMIC DISPATCH. + * + * The List class has 4 operations defined on List objects. If 'l' is + * a list, then the methods dispatched on 'l' have the following effects: + * + * isNil() : Bool Returns true if 'l' is empty, false otherwise. + * head() : Int Returns the integer at the head of 'l'. + * If 'l' is empty, execution aborts. + * tail() : List Returns the remainder of the 'l', + * i.e. without the first element. + * cons(i : Int) : List Return a new list containing i as the + * first element, followed by the + * elements in 'l'. + * + * There are 2 kinds of lists, the empty list and a non-empty + * list. We can think of the non-empty list as a specialization of + * the empty list. + * The class List defines the operations on empty list. The class + * Cons inherits from List and redefines things to handle non-empty + * lists. + *) + + +class List { + -- Define operations on empty lists. + + isNil() : Bool { true }; + + -- Since abort() has return type Object and head() has return type + -- Int, we need to have an Int as the result of the method body, + -- even though abort() never returns. + + head() : Int { { abort(); 0; } }; + + -- As for head(), the self is just to make sure the return type of + -- tail() is correct. + + tail() : List { { abort(); self; } }; + + -- When we cons and element onto the empty list we get a non-empty + -- list. The (new Cons) expression creates a new list cell of class + -- Cons, which is initialized by a dispatch to init(). + -- The result of init() is an element of class Cons, but it + -- conforms to the return type List, because Cons is a subclass of + -- List. + + cons(i : Int) : List { + (new Cons).init(i, self) + }; + +}; + + +(* + * Cons inherits all operations from List. We can reuse only the cons + * method though, because adding an element to the front of an emtpy + * list is the same as adding it to the front of a non empty + * list. All other methods have to be redefined, since the behaviour + * for them is different from the empty list. + * + * Cons needs two attributes to hold the integer of this list + * cell and to hold the rest of the list. + * + * The init() method is used by the cons() method to initialize the + * cell. + *) + +class Cons inherits List { + + car : Int; -- The element in this list cell + + cdr : List; -- The rest of the list + + isNil() : Bool { false }; + + head() : Int { car }; + + tail() : List { cdr }; + + init(i : Int, rest : List) : List { + { + car <- i; + cdr <- rest; + self; + } + }; + +}; + + + +(* + * The Main class shows how to use the List class. It creates a small + * list and then repeatedly prints out its elements and takes off the + * first element of the list. + *) + +class Main inherits IO { + + mylist : List; + + -- Print all elements of the list. Calls itself recursively with + -- the tail of the list, until the end of the list is reached. + + print_list(l : List) : Object { + if l.isNil() then out_string("\n") + else { + out_int(l.head()); + out_string(" "); + print_list(l.tail()); + } + fi + }; + + -- Note how the dynamic dispatch mechanism is responsible to end + -- the while loop. As long as mylist is bound to an object of + -- dynamic type Cons, the dispatch to isNil calls the isNil method of + -- the Cons class, which returns false. However when we reach the + -- end of the list, mylist gets bound to the object that was + -- created by the (new List) expression. This object is of dynamic type + -- List, and thus the method isNil in the List class is called and + -- returns true. + + main() : Object { + { + mylist <- new List.cons(1).cons(2).cons(3).cons(4).cons(5); + while (not mylist.isNil()) loop + { + print_list(mylist); + mylist <- mylist.tail(); + } + pool; + } + }; + +}; + + + diff --git a/tests/codegen/new_complex.cl b/tests/codegen/new_complex.cl old mode 100755 new mode 100644 index ad7035b5..a4fe714c --- a/tests/codegen/new_complex.cl +++ b/tests/codegen/new_complex.cl @@ -1,79 +1,79 @@ -class Main inherits IO { - main() : IO { - (let c : Complex <- (new Complex).init(1, 1) in - { - -- trivially equal (see CoolAid) - if c.reflect_X() = c.reflect_0() - then out_string("=)\n") - else out_string("=(\n") - fi; - -- equal - if c.reflect_X().reflect_Y().equal(c.reflect_0()) - then out_string("=)\n") - else out_string("=(\n") - fi; - } - ) - }; -}; - -class Complex inherits IO { - x : Int; - y : Int; - - init(a : Int, b : Int) : Complex { - { - x = a; - y = b; - self; - } - }; - - print() : Object { - if y = 0 - then out_int(x) - else out_int(x).out_string("+").out_int(y).out_string("I") - fi - }; - - reflect_0() : Complex { - { - x = ~x; - y = ~y; - self; - } - }; - - reflect_X() : Complex { - { - y = ~y; - self; - } - }; - - reflect_Y() : Complex { - { - x = ~x; - self; - } - }; - - equal(d : Complex) : Bool { - if x = d.x_value() - then - if y = d.y_value() - then true - else false - fi - else false - fi - }; - - x_value() : Int { - x - }; - - y_value() : Int { - y - }; -}; +class Main inherits IO { + main() : IO { + (let c : Complex <- (new Complex).init(1, 1) in + { + -- trivially equal (see CoolAid) + if c.reflect_X() = c.reflect_0() + then out_string("=)\n") + else out_string("=(\n") + fi; + -- equal + if c.reflect_X().reflect_Y().equal(c.reflect_0()) + then out_string("=)\n") + else out_string("=(\n") + fi; + } + ) + }; +}; + +class Complex inherits IO { + x : Int; + y : Int; + + init(a : Int, b : Int) : Complex { + { + x = a; + y = b; + self; + } + }; + + print() : Object { + if y = 0 + then out_int(x) + else out_int(x).out_string("+").out_int(y).out_string("I") + fi + }; + + reflect_0() : Complex { + { + x = ~x; + y = ~y; + self; + } + }; + + reflect_X() : Complex { + { + y = ~y; + self; + } + }; + + reflect_Y() : Complex { + { + x = ~x; + self; + } + }; + + equal(d : Complex) : Bool { + if x = d.x_value() + then + if y = d.y_value() + then true + else false + fi + else false + fi + }; + + x_value() : Int { + x + }; + + y_value() : Int { + y + }; +}; diff --git a/tests/codegen/palindrome.cl b/tests/codegen/palindrome.cl old mode 100755 new mode 100644 index 6acbeb73..7f24789f --- a/tests/codegen/palindrome.cl +++ b/tests/codegen/palindrome.cl @@ -1,25 +1,25 @@ -class Main inherits IO { - pal(s : String) : Bool { - if s.length() = 0 - then true - else if s.length() = 1 - then true - else if s.substr(0, 1) = s.substr(s.length() - 1, 1) - then pal(s.substr(1, s.length() -2)) - else false - fi fi fi - }; - - i : Int; - - main() : IO { - { - i <- ~1; - out_string("enter a string\n"); - if pal(in_string()) - then out_string("that was a palindrome\n") - else out_string("that was not a palindrome\n") - fi; - } - }; -}; +class Main inherits IO { + pal(s : String) : Bool { + if s.length() = 0 + then true + else if s.length() = 1 + then true + else if s.substr(0, 1) = s.substr(s.length() - 1, 1) + then pal(s.substr(1, s.length() -2)) + else false + fi fi fi + }; + + i : Int; + + main() : IO { + { + i <- ~1; + out_string("enter a string\n"); + if pal(in_string()) + then out_string("that was a palindrome\n") + else out_string("that was not a palindrome\n") + fi; + } + }; +}; diff --git a/tests/codegen/primes.cl b/tests/codegen/primes.cl index 8b9254d5..ea953329 100644 --- a/tests/codegen/primes.cl +++ b/tests/codegen/primes.cl @@ -1,84 +1,84 @@ - -(* - * methodless-primes.cl - * - * Designed by Jesse H. Willett, jhw@cory, 11103234, with - * Istvan Siposs, isiposs@cory, 12342921. - * - * This program generates primes in order without using any methods. - * Actually, it does use three methods: those of IO to print out each - * prime, and abort() to halt the program. These methods are incidental, - * however, to the information-processing functionality of the program. We - * could regard the attribute 'out's sequential values as our output, and - * the string "halt" as our terminate signal. - * - * Naturally, using Cool this way is a real waste, basically reducing it - * to assembly without the benefit of compilation. - * - * There could even be a subroutine-like construction, in that different - * code could be in the assign fields of attributes of other classes, - * and it could be executed by calling 'new Sub', but no parameters - * could be passed to the subroutine, and it could only return itself. - * but returning itself would be useless since we couldn't call methods - * and the only operators we have are for Int and Bool, which do nothing - * interesting when we initialize them! - *) - -class Main inherits IO { - - main() : Int { -- main() is an atrophied method so we can parse. - 0 - }; - - out : Int <- -- out is our 'output'. Its values are the primes. - { - out_string("2 is trivially prime.\n"); - 2; - }; - - testee : Int <- out; -- testee is a number to be tested for primeness. - - divisor : Int; -- divisor is a number which may factor testee. - - stop : Int <- 500; -- stop is an arbitrary value limiting testee. - - m : Object <- -- m supplants the main method. - while true loop - { - - testee <- testee + 1; - divisor <- 2; - - while - if testee < divisor * divisor - then false -- can stop if divisor > sqrt(testee). - else if testee - divisor*(testee/divisor) = 0 - then false -- can stop if divisor divides testee. - else true - fi fi - loop - divisor <- divisor + 1 - pool; - - if testee < divisor * divisor -- which reason did we stop for? - then -- testee has no factors less than sqrt(testee). - { - out <- testee; -- we could think of out itself as the output. - out_int(out); - out_string(" is prime.\n"); - } - else -- the loop halted on testee/divisor = 0, testee isn't prime. - 0 -- testee isn't prime, do nothing. - fi; - - if stop <= testee then - "halt".abort() -- we could think of "halt" as SIGTERM. - else - "continue" - fi; - - } - pool; - -}; (* end of Main *) - + +(* + * methodless-primes.cl + * + * Designed by Jesse H. Willett, jhw@cory, 11103234, with + * Istvan Siposs, isiposs@cory, 12342921. + * + * This program generates primes in order without using any methods. + * Actually, it does use three methods: those of IO to print out each + * prime, and abort() to halt the program. These methods are incidental, + * however, to the information-processing functionality of the program. We + * could regard the attribute 'out's sequential values as our output, and + * the string "halt" as our terminate signal. + * + * Naturally, using Cool this way is a real waste, basically reducing it + * to assembly without the benefit of compilation. + * + * There could even be a subroutine-like construction, in that different + * code could be in the assign fields of attributes of other classes, + * and it could be executed by calling 'new Sub', but no parameters + * could be passed to the subroutine, and it could only return itself. + * but returning itself would be useless since we couldn't call methods + * and the only operators we have are for Int and Bool, which do nothing + * interesting when we initialize them! + *) + +class Main inherits IO { + + main() : Int { -- main() is an atrophied method so we can parse. + 0 + }; + + out : Int <- -- out is our 'output'. Its values are the primes. + { + out_string("2 is trivially prime.\n"); + 2; + }; + + testee : Int <- out; -- testee is a number to be tested for primeness. + + divisor : Int; -- divisor is a number which may factor testee. + + stop : Int <- 500; -- stop is an arbitrary value limiting testee. + + m : Object <- -- m supplants the main method. + while true loop + { + + testee <- testee + 1; + divisor <- 2; + + while + if testee < divisor * divisor + then false -- can stop if divisor > sqrt(testee). + else if testee - divisor*(testee/divisor) = 0 + then false -- can stop if divisor divides testee. + else true + fi fi + loop + divisor <- divisor + 1 + pool; + + if testee < divisor * divisor -- which reason did we stop for? + then -- testee has no factors less than sqrt(testee). + { + out <- testee; -- we could think of out itself as the output. + out_int(out); + out_string(" is prime.\n"); + } + else -- the loop halted on testee/divisor = 0, testee isn't prime. + 0 -- testee isn't prime, do nothing. + fi; + + if stop <= testee then + "halt".abort() -- we could think of "halt" as SIGTERM. + else + "continue" + fi; + + } + pool; + +}; (* end of Main *) + diff --git a/tests/codegen/print-cool.cl b/tests/codegen/print-cool.cl index 76194e96..8d7a336f 100644 --- a/tests/codegen/print-cool.cl +++ b/tests/codegen/print-cool.cl @@ -1,9 +1,9 @@ -class Main inherits IO { - main() : IO { - { - out_string((new Object).type_name().substr(4,1)). - out_string((isvoid self).type_name().substr(1,3)); -- demonstrates the dispatch rules. - out_string("\n"); - } - }; -}; +class Main inherits IO { + main() : IO { + { + out_string((new Object).type_name().substr(4,1)). + out_string((isvoid self).type_name().substr(1,3)); -- demonstrates the dispatch rules. + out_string("\n"); + } + }; +}; diff --git a/tests/codegen/sort-list.cl b/tests/codegen/sort-list.cl index 7cf7b20a..d49d56c4 100644 --- a/tests/codegen/sort-list.cl +++ b/tests/codegen/sort-list.cl @@ -1,146 +1,146 @@ -(* - This file presents a fairly large example of Cool programming. The -class List defines the names of standard list operations ala Scheme: -car, cdr, cons, isNil, rev, sort, rcons (add an element to the end of -the list), and print_list. In the List class most of these functions -are just stubs that abort if ever called. The classes Nil and Cons -inherit from List and define the same operations, but now as -appropriate to the empty list (for the Nil class) and for cons cells (for -the Cons class). - -The Main class puts all of this code through the following silly -test exercise: - - 1. prompt for a number N - 2. generate a list of numbers 0..N-1 - 3. reverse the list - 4. sort the list - 5. print the sorted list - -Because the sort used is a quadratic space insertion sort, sorting -moderately large lists can be quite slow. -*) - -Class List inherits IO { - (* Since abort() returns Object, we need something of - type Bool at the end of the block to satisfy the typechecker. - This code is unreachable, since abort() halts the program. *) - isNil() : Bool { { abort(); true; } }; - - cons(hd : Int) : Cons { - (let new_cell : Cons <- new Cons in - new_cell.init(hd,self) - ) - }; - - (* - Since abort "returns" type Object, we have to add - an expression of type Int here to satisfy the typechecker. - This code is, of course, unreachable. - *) - car() : Int { { abort(); new Int; } }; - - cdr() : List { { abort(); new List; } }; - - rev() : List { cdr() }; - - sort() : List { cdr() }; - - insert(i : Int) : List { cdr() }; - - rcons(i : Int) : List { cdr() }; - - print_list() : Object { abort() }; -}; - -Class Cons inherits List { - xcar : Int; -- We keep the car in cdr in attributes. - xcdr : List; - - isNil() : Bool { false }; - - init(hd : Int, tl : List) : Cons { - { - xcar <- hd; - xcdr <- tl; - self; - } - }; - - car() : Int { xcar }; - - cdr() : List { xcdr }; - - rev() : List { (xcdr.rev()).rcons(xcar) }; - - sort() : List { (xcdr.sort()).insert(xcar) }; - - insert(i : Int) : List { - if i < xcar then - (new Cons).init(i,self) - else - (new Cons).init(xcar,xcdr.insert(i)) - fi - }; - - - rcons(i : Int) : List { (new Cons).init(xcar, xcdr.rcons(i)) }; - - print_list() : Object { - { - out_int(xcar); - out_string("\n"); - xcdr.print_list(); - } - }; -}; - -Class Nil inherits List { - isNil() : Bool { true }; - - rev() : List { self }; - - sort() : List { self }; - - insert(i : Int) : List { rcons(i) }; - - rcons(i : Int) : List { (new Cons).init(i,self) }; - - print_list() : Object { true }; - -}; - - -Class Main inherits IO { - - l : List; - - (* iota maps its integer argument n into the list 0..n-1 *) - iota(i : Int) : List { - { - l <- new Nil; - (let j : Int <- 0 in - while j < i - loop - { - l <- (new Cons).init(j,l); - j <- j + 1; - } - pool - ); - l; - } - }; - - main() : Object { - { - out_string("How many numbers to sort? "); - iota(in_int()).rev().sort().print_list(); - } - }; -}; - - - - - +(* + This file presents a fairly large example of Cool programming. The +class List defines the names of standard list operations ala Scheme: +car, cdr, cons, isNil, rev, sort, rcons (add an element to the end of +the list), and print_list. In the List class most of these functions +are just stubs that abort if ever called. The classes Nil and Cons +inherit from List and define the same operations, but now as +appropriate to the empty list (for the Nil class) and for cons cells (for +the Cons class). + +The Main class puts all of this code through the following silly +test exercise: + + 1. prompt for a number N + 2. generate a list of numbers 0..N-1 + 3. reverse the list + 4. sort the list + 5. print the sorted list + +Because the sort used is a quadratic space insertion sort, sorting +moderately large lists can be quite slow. +*) + +Class List inherits IO { + (* Since abort() returns Object, we need something of + type Bool at the end of the block to satisfy the typechecker. + This code is unreachable, since abort() halts the program. *) + isNil() : Bool { { abort(); true; } }; + + cons(hd : Int) : Cons { + (let new_cell : Cons <- new Cons in + new_cell.init(hd,self) + ) + }; + + (* + Since abort "returns" type Object, we have to add + an expression of type Int here to satisfy the typechecker. + This code is, of course, unreachable. + *) + car() : Int { { abort(); new Int; } }; + + cdr() : List { { abort(); new List; } }; + + rev() : List { cdr() }; + + sort() : List { cdr() }; + + insert(i : Int) : List { cdr() }; + + rcons(i : Int) : List { cdr() }; + + print_list() : Object { abort() }; +}; + +Class Cons inherits List { + xcar : Int; -- We keep the car in cdr in attributes. + xcdr : List; + + isNil() : Bool { false }; + + init(hd : Int, tl : List) : Cons { + { + xcar <- hd; + xcdr <- tl; + self; + } + }; + + car() : Int { xcar }; + + cdr() : List { xcdr }; + + rev() : List { (xcdr.rev()).rcons(xcar) }; + + sort() : List { (xcdr.sort()).insert(xcar) }; + + insert(i : Int) : List { + if i < xcar then + (new Cons).init(i,self) + else + (new Cons).init(xcar,xcdr.insert(i)) + fi + }; + + + rcons(i : Int) : List { (new Cons).init(xcar, xcdr.rcons(i)) }; + + print_list() : Object { + { + out_int(xcar); + out_string("\n"); + xcdr.print_list(); + } + }; +}; + +Class Nil inherits List { + isNil() : Bool { true }; + + rev() : List { self }; + + sort() : List { self }; + + insert(i : Int) : List { rcons(i) }; + + rcons(i : Int) : List { (new Cons).init(i,self) }; + + print_list() : Object { true }; + +}; + + +Class Main inherits IO { + + l : List; + + (* iota maps its integer argument n into the list 0..n-1 *) + iota(i : Int) : List { + { + l <- new Nil; + (let j : Int <- 0 in + while j < i + loop + { + l <- (new Cons).init(j,l); + j <- j + 1; + } + pool + ); + l; + } + }; + + main() : Object { + { + out_string("How many numbers to sort? "); + iota(in_int()).rev().sort().print_list(); + } + }; +}; + + + + + diff --git a/tests/codegen/test.cl b/tests/codegen/test.cl old mode 100755 new mode 100644 index 9c2e0fd8..4f76ffe0 --- a/tests/codegen/test.cl +++ b/tests/codegen/test.cl @@ -1,19 +1,19 @@ -class Main inherits IO { - - main () : Object { - { - let x:A <- new B in out_string( x.f().m() ); - let x:A <- new A in out_string( x.f().m() ); - } - - }; -}; - -class A { - m () : String { "A" }; - f () : A { new A }; -}; - -class B inherits A { - m () : String { "B" }; -}; +class Main inherits IO { + + main () : Object { + { + let x:A <- new B in out_string( x.f().m() ); + let x:A <- new A in out_string( x.f().m() ); + } + + }; +}; + +class A { + m () : String { "A" }; + f () : A { new A }; +}; + +class B inherits A { + m () : String { "B" }; +}; diff --git a/tests/codegen_test.py b/tests/codegen_test.py index e2fa3423..6d864cb0 100644 --- a/tests/codegen_test.py +++ b/tests/codegen_test.py @@ -1,15 +1,15 @@ -import pytest -import os -from utils import compare_errors - -tests_dir = __file__.rpartition('/')[0] + '/codegen/' -tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] - -# @pytest.mark.lexer -# @pytest.mark.parser -# @pytest.mark.semantic -@pytest.mark.ok -@pytest.mark.run(order=4) -@pytest.mark.parametrize("cool_file", tests) -def test_codegen(compiler_path, cool_file): +import pytest +import os +from utils import compare_errors + +tests_dir = __file__.rpartition('/')[0] + '/codegen/' +tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] + +# @pytest.mark.lexer +# @pytest.mark.parser +# @pytest.mark.semantic +@pytest.mark.ok +@pytest.mark.run(order=4) +@pytest.mark.parametrize("cool_file", tests) +def test_codegen(compiler_path, cool_file): compare_errors(compiler_path, tests_dir + cool_file, None) \ No newline at end of file diff --git a/tests/conftest.py b/tests/conftest.py index 561d8baf..1f44eeb7 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,6 +1,6 @@ -import pytest -import os - -@pytest.fixture -def compiler_path(): +import pytest +import os + +@pytest.fixture +def compiler_path(): return os.path.abspath('./coolc.sh') \ No newline at end of file diff --git a/tests/lexer/mixed1_error.txt b/tests/lexer/mixed1_error.txt index a142c2ed..99af5fbd 100644 --- a/tests/lexer/mixed1_error.txt +++ b/tests/lexer/mixed1_error.txt @@ -1 +1 @@ -(2, 10) - LexicographicError: ERROR "#" +(2, 10) - LexicographicError: ERROR "#" diff --git a/tests/semantic/hello_world.cl b/tests/semantic/hello_world.cl old mode 100755 new mode 100644 index b0a180a2..0c818f90 --- a/tests/semantic/hello_world.cl +++ b/tests/semantic/hello_world.cl @@ -1,5 +1,5 @@ -class Main inherits IO { - main(): IO { - out_string("Hello, World.\n") - }; -}; +class Main inherits IO { + main(): IO { + out_string("Hello, World.\n") + }; +}; diff --git a/venv/Scripts/Activate.ps1 b/venv/Scripts/Activate.ps1 deleted file mode 100644 index a44a20ab..00000000 --- a/venv/Scripts/Activate.ps1 +++ /dev/null @@ -1,51 +0,0 @@ -function global:deactivate ([switch]$NonDestructive) { - # Revert to original values - if (Test-Path function:_OLD_VIRTUAL_PROMPT) { - copy-item function:_OLD_VIRTUAL_PROMPT function:prompt - remove-item function:_OLD_VIRTUAL_PROMPT - } - - if (Test-Path env:_OLD_VIRTUAL_PYTHONHOME) { - copy-item env:_OLD_VIRTUAL_PYTHONHOME env:PYTHONHOME - remove-item env:_OLD_VIRTUAL_PYTHONHOME - } - - if (Test-Path env:_OLD_VIRTUAL_PATH) { - copy-item env:_OLD_VIRTUAL_PATH env:PATH - remove-item env:_OLD_VIRTUAL_PATH - } - - if (Test-Path env:VIRTUAL_ENV) { - remove-item env:VIRTUAL_ENV - } - - if (!$NonDestructive) { - # Self destruct! - remove-item function:deactivate - } -} - -deactivate -nondestructive - -$env:VIRTUAL_ENV="C:\Lo&Lo\__UH\__VER\CC\Compiler\cool-compiler-2020\venv" - -if (! $env:VIRTUAL_ENV_DISABLE_PROMPT) { - # Set the prompt to include the env name - # Make sure _OLD_VIRTUAL_PROMPT is global - function global:_OLD_VIRTUAL_PROMPT {""} - copy-item function:prompt function:_OLD_VIRTUAL_PROMPT - function global:prompt { - Write-Host -NoNewline -ForegroundColor Green '(venv) ' - _OLD_VIRTUAL_PROMPT - } -} - -# Clear PYTHONHOME -if (Test-Path env:PYTHONHOME) { - copy-item env:PYTHONHOME env:_OLD_VIRTUAL_PYTHONHOME - remove-item env:PYTHONHOME -} - -# Add the venv to the PATH -copy-item env:PATH env:_OLD_VIRTUAL_PATH -$env:PATH = "$env:VIRTUAL_ENV\Scripts;$env:PATH" diff --git a/venv/Scripts/activate b/venv/Scripts/activate deleted file mode 100644 index 2257c936..00000000 --- a/venv/Scripts/activate +++ /dev/null @@ -1,76 +0,0 @@ -# This file must be used with "source bin/activate" *from bash* -# you cannot run it directly - -deactivate () { - # reset old environment variables - if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then - PATH="${_OLD_VIRTUAL_PATH:-}" - export PATH - unset _OLD_VIRTUAL_PATH - fi - if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then - PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}" - export PYTHONHOME - unset _OLD_VIRTUAL_PYTHONHOME - fi - - # This should detect bash and zsh, which have a hash command that must - # be called to get it to forget past commands. Without forgetting - # past commands the $PATH changes we made may not be respected - if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then - hash -r - fi - - if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then - PS1="${_OLD_VIRTUAL_PS1:-}" - export PS1 - unset _OLD_VIRTUAL_PS1 - fi - - unset VIRTUAL_ENV - if [ ! "$1" = "nondestructive" ] ; then - # Self destruct! - unset -f deactivate - fi -} - -# unset irrelevant variables -deactivate nondestructive - -VIRTUAL_ENV="C:\Lo&Lo\__UH\__VER\CC\Compiler\cool-compiler-2020\venv" -export VIRTUAL_ENV - -_OLD_VIRTUAL_PATH="$PATH" -PATH="$VIRTUAL_ENV/Scripts:$PATH" -export PATH - -# unset PYTHONHOME if set -# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) -# could use `if (set -u; : $PYTHONHOME) ;` in bash -if [ -n "${PYTHONHOME:-}" ] ; then - _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}" - unset PYTHONHOME -fi - -if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then - _OLD_VIRTUAL_PS1="${PS1:-}" - if [ "x(venv) " != x ] ; then - PS1="(venv) ${PS1:-}" - else - if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then - # special case for Aspen magic directories - # see http://www.zetadev.com/software/aspen/ - PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1" - else - PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1" - fi - fi - export PS1 -fi - -# This should detect bash and zsh, which have a hash command that must -# be called to get it to forget past commands. Without forgetting -# past commands the $PATH changes we made may not be respected -if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then - hash -r -fi diff --git a/venv/Scripts/activate.bat b/venv/Scripts/activate.bat deleted file mode 100644 index c947ae9d..00000000 --- a/venv/Scripts/activate.bat +++ /dev/null @@ -1,45 +0,0 @@ -@echo off - -rem This file is UTF-8 encoded, so we need to update the current code page while executing it -for /f "tokens=2 delims=:." %%a in ('"%SystemRoot%\System32\chcp.com"') do ( - set "_OLD_CODEPAGE=%%a" -) -if defined _OLD_CODEPAGE ( - "%SystemRoot%\System32\chcp.com" 65001 > nul -) - -set "VIRTUAL_ENV=C:\Lo&Lo\__UH\__VER\CC\Compiler\cool-compiler-2020\venv" - -if not defined PROMPT ( - set "PROMPT=$P$G" -) - -if defined _OLD_VIRTUAL_PROMPT ( - set "PROMPT=%_OLD_VIRTUAL_PROMPT%" -) - -if defined _OLD_VIRTUAL_PYTHONHOME ( - set "PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%" -) - -set "_OLD_VIRTUAL_PROMPT=%PROMPT%" -set "PROMPT=(venv) %PROMPT%" - -if defined PYTHONHOME ( - set "_OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME%" - set PYTHONHOME= -) - -if defined _OLD_VIRTUAL_PATH ( - set "PATH=%_OLD_VIRTUAL_PATH%" -) else ( - set "_OLD_VIRTUAL_PATH=%PATH%" -) - -set "PATH=%VIRTUAL_ENV%\Scripts;%PATH%" - -:END -if defined _OLD_CODEPAGE ( - "%SystemRoot%\System32\chcp.com" %_OLD_CODEPAGE% > nul - set "_OLD_CODEPAGE=" -) diff --git a/venv/Scripts/deactivate.bat b/venv/Scripts/deactivate.bat deleted file mode 100644 index 1205c618..00000000 --- a/venv/Scripts/deactivate.bat +++ /dev/null @@ -1,21 +0,0 @@ -@echo off - -if defined _OLD_VIRTUAL_PROMPT ( - set "PROMPT=%_OLD_VIRTUAL_PROMPT%" -) -set _OLD_VIRTUAL_PROMPT= - -if defined _OLD_VIRTUAL_PYTHONHOME ( - set "PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%" - set _OLD_VIRTUAL_PYTHONHOME= -) - -if defined _OLD_VIRTUAL_PATH ( - set "PATH=%_OLD_VIRTUAL_PATH%" -) - -set _OLD_VIRTUAL_PATH= - -set VIRTUAL_ENV= - -:END diff --git a/venv/Scripts/python.exe b/venv/Scripts/python.exe deleted file mode 100644 index 1b4f57f90933cc901c6c89e3f3fcefc29ac77e67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 515584 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�J~*0wjTZN<&T%C1%F${bfF*e&H*d$zOQk3A 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 diff --git a/venv/Scripts/pythonw.exe b/venv/Scripts/pythonw.exe deleted file mode 100644 index b0da33ac85db0f58b2a82ef615dafeccc9047332..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 515072 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ΠqJC2Sg`z( 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

cRW`G%+>K@C@xwk) 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 Date: Thu, 24 Sep 2020 17:26:39 -0400 Subject: [PATCH 22/60] Changing project structure --- doc/s-mips.pdf | Bin 0 -> 164251 bytes src/codegen/cil_ast.py | 38 + src/codegen/pipeline.py | 10 - src/codegen/visitors/base_cil_visitor.py | 9 +- src/codegen/visitors/cil_format_visitor.py | 47 +- src/codegen/visitors/cil_visitor.py | 82 +- src/cool_parser/__init__.py | 1 + src/{parser => cool_parser}/base_parser.py | 4 +- src/{parser => cool_parser}/logger.py | 2 +- .../output_parser/debug.txt | 0 .../output_parser/parselog.txt | 762 +++++++++--------- .../output_parser/parser.out | 0 .../output_parser/parsetab.py | 0 src/{parser => cool_parser}/parser.py | 2 +- src/lexer/__init__.py | 1 + src/main.py | 10 +- src/parser/__init__.py | 0 src/semantic/semantic.py | 7 +- src/semantic/visitors/__init__.py | 5 + src/semantic/visitors/type_checker.py | 4 +- src/utils/__init__.py | 1 + src/utils/errors.py | 2 +- src/utils/utils.py | 9 +- 23 files changed, 513 insertions(+), 483 deletions(-) create mode 100644 doc/s-mips.pdf delete mode 100644 src/codegen/pipeline.py create mode 100644 src/cool_parser/__init__.py rename src/{parser => cool_parser}/base_parser.py (89%) rename src/{parser => cool_parser}/logger.py (79%) rename src/{parser => cool_parser}/output_parser/debug.txt (100%) rename src/{parser => cool_parser}/output_parser/parselog.txt (93%) rename src/{parser => cool_parser}/output_parser/parser.out (100%) rename src/{parser => cool_parser}/output_parser/parsetab.py (100%) rename src/{parser => cool_parser}/parser.py (99%) delete mode 100644 src/parser/__init__.py diff --git a/doc/s-mips.pdf b/doc/s-mips.pdf new file mode 100644 index 0000000000000000000000000000000000000000..93db8793acce74172c38032a20899e0d85977921 GIT binary patch literal 164251 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Ν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

`M%jR&DKF9c?cLsI&p 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�Me&*_a+by$+KY4g{c)^ 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

Y^u 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 literal 0 HcmV?d00001 diff --git a/src/codegen/cil_ast.py b/src/codegen/cil_ast.py index 0c54b9d1..f19e35b4 100644 --- a/src/codegen/cil_ast.py +++ b/src/codegen/cil_ast.py @@ -1,23 +1,27 @@ class Node: pass + class ProgramNode(Node): def __init__(self, dottypes, dotdata, dotcode): self.dottypes = dottypes self.dotdata = dotdata self.dotcode = dotcode + class TypeNode(Node): def __init__(self, name): self.name = name self.attributes = [] self.methods = [] + class DataNode(Node): def __init__(self, vname, value): self.name = vname self.value = value + class FunctionNode(Node): def __init__(self, fname, params, localvars, instructions): self.name = fname @@ -25,51 +29,64 @@ def __init__(self, fname, params, localvars, instructions): self.localvars = localvars self.instructions = instructions + class ParamNode(Node): def __init__(self, name): self.name = name + class LocalNode(Node): def __init__(self, name): self.name = name + class InstructionNode(Node): pass + class AssignNode(InstructionNode): def __init__(self, dest, source): self.dest = dest self.source = source + class UnaryNode(InstructionNode): def __init__(self, dest, expr): self.dest = dest self.expr = expr + class NotNode(UnaryNode): pass + class BinaryNotNode(UnaryNode): pass + class IsVoidNode(UnaryNode): pass + class BinaryNode(InstructionNode): def __init__(self, dest, left, right): self.dest = dest self.left = left self.right = right + class PlusNode(BinaryNode): pass + class MinusNode(BinaryNode): pass + class StarNode(BinaryNode): pass + class DivNode(BinaryNode): pass @@ -80,100 +97,121 @@ def __init__(self, obj, attr, dest): self.attr = attr self.dest = dest + class SetAttribNode(InstructionNode): def __init__(self, obj, attr, value): self.obj = obj self.attr = attr self.value = value + class GetIndexNode(InstructionNode): pass + class SetIndexNode(InstructionNode): pass + class AllocateNode(InstructionNode): def __init__(self, itype, dest): self.type = itype self.dest = dest + class ArrayNode(InstructionNode): pass + class TypeOfNode(InstructionNode): def __init__(self, obj, dest): self.obj = obj self.dest = dest + class LabelNode(InstructionNode): def __init__(self, label): self.label = label + class GotoNode(InstructionNode): def __init__(self, label): self.label = label + class GotoIfNode(InstructionNode): def __init__(self, cond, label): self.cond = cond self.label = label + class StaticCallNode(InstructionNode): def __init__(self, function, dest): self.function = function self.dest = dest + class DynamicCallNode(InstructionNode): def __init__(self, xtype, method, dest): self.type = xtype self.method = method self.dest = dest + class ArgNode(InstructionNode): def __init__(self, name): self.name = name + class ReturnNode(InstructionNode): def __init__(self, value=None): self.value = value + class LoadNode(InstructionNode): def __init__(self, dest, msg): self.dest = dest self.msg = msg + class LengthNode(InstructionNode): def __init__(self, dest, arg): self.dest = dest self.arg = arg + class ConcatNode(InstructionNode): def __init__(self, dest, arg1, arg2): self.dest = dest self.arg1 = arg1 self.arg2 = arg2 + class PrefixNode(InstructionNode): def __init__(self, dest, word, n): self.dest = dest self.word = word self.n = n + class SubstringNode(InstructionNode): def __init__(self, dest, word, n): self.dest = dest self.word = word self.n = n + class ToStrNode(InstructionNode): def __init__(self, dest, ivalue): self.dest = dest self.ivalue = ivalue + class ReadNode(InstructionNode): def __init__(self, dest): self.dest = dest + class PrintNode(InstructionNode): def __init__(self, str_addr): self.str_addr = str_addr \ No newline at end of file diff --git a/src/codegen/pipeline.py b/src/codegen/pipeline.py deleted file mode 100644 index 577e8ac8..00000000 --- a/src/codegen/pipeline.py +++ /dev/null @@ -1,10 +0,0 @@ -from codegen.visitors.cil_visitor import COOLToCILVisitor -from codegen.visitors.cil_format_visitor import get_formatter - -def codegen_pipeline(context, ast, scope): - print('============= TRANSFORMING TO CIL =============') - cool_to_cil = COOLToCILVisitor(context) - cil_ast = cool_to_cil.visit(ast, scope) - formatter = get_formatter() - print(formatter(cil_ast)) - return ast, context, scope, cil_ast diff --git a/src/codegen/visitors/base_cil_visitor.py b/src/codegen/visitors/base_cil_visitor.py index 9702e74d..75edd2f2 100644 --- a/src/codegen/visitors/base_cil_visitor.py +++ b/src/codegen/visitors/base_cil_visitor.py @@ -1,6 +1,6 @@ from codegen.cil_ast import ParamNode, LocalNode, FunctionNode, TypeNode, DataNode from semantic.tools import VariableInfo, Scope -from semantic.types import Type +from semantic.types import Type, StringType, ObjectType, IOType from codegen import cil_ast as cil from utils.ast import BinaryNode, UnaryNode @@ -69,20 +69,20 @@ def register_data(self, value): self.dotdata.append(data_node) return data_node - def _define_binary_node(self, node:BinaryNode, scope:Scope, cil_node:cil.Node): + def _define_binary_node(self, node: BinaryNode, scope: Scope, cil_node: cil.Node): result = self.define_internal_local() left, typex = self.visit(node.left, scope) right, typex = self.visit(node.right, scope) self.register_instruction(cil_node(result, left, right)) return result, typex - def _define_unary_node(self, node:UnaryNode, scope:Scope, cil_node): + def _define_unary_node(self, node: UnaryNode, scope: Scope, cil_node): result = self.define_internal_local() expr, typex = self.visit(node.expr, scope) self.register_instruction(cil_node(result, expr)) return result, typex - def native_methods(self, typex:Type, name:str, *args): + def native_methods(self, typex: Type, name: str, *args): if typex == StringType(): return self.string_methods(name, *args) elif typex == ObjectType(): @@ -90,7 +90,6 @@ def native_methods(self, typex:Type, name:str, *args): elif typex == IOType(): return self.io_methods(name, *args) - def string_methods(self, name, *args): result = self.define_internal_local() if name == 'length': diff --git a/src/codegen/visitors/cil_format_visitor.py b/src/codegen/visitors/cil_format_visitor.py index cf076c5c..480ce678 100644 --- a/src/codegen/visitors/cil_format_visitor.py +++ b/src/codegen/visitors/cil_format_visitor.py @@ -9,7 +9,7 @@ def visit(self, node): pass @visitor.when(ProgramNode) - def visit(self, node): + def visit(self, node: ProgramNode): dottypes = '\n'.join(self.visit(t) for t in node.dottypes) dotdata = '\n'.join(self.visit(t) for t in node.dotdata) dotcode = '\n'.join(self.visit(t) for t in node.dotcode) @@ -17,14 +17,14 @@ def visit(self, node): return f'.TYPES\n{dottypes}\n\n.DATA\n{dotdata}\n\n.CODE\n{dotcode}' @visitor.when(TypeNode) - def visit(self, node): + def visit(self, node: TypeNode): attributes = '\n\t'.join(f'attribute {x}: {y}' for x, y in node.attributes) methods = '\n\t'.join(f'method {x}: {y}' for x, y in node.methods) return f'type {node.name} {{\n\t{attributes}\n\n\t{methods}\n}}' @visitor.when(FunctionNode) - def visit(self, node): + def visit(self, node: FunctionNode): params = '\n\t'.join(self.visit(x) for x in node.params) localvars = '\n\t'.join(self.visit(x) for x in node.localvars) instructions = '\n\t'.join(self.visit(x) for x in node.instructions) @@ -32,69 +32,72 @@ def visit(self, node): return f'function {node.name} {{\n\t{params}\n\n\t{localvars}\n\n\t{instructions}\n}}' @visitor.when(DataNode) - def visit(self, node): + def visit(self, node: DataNode): return f'{node.name} = "{node.value}"' @visitor.when(ParamNode) - def visit(self, node): + def visit(self, node: ParamNode): return f'PARAM {node.name}' @visitor.when(LocalNode) - def visit(self, node): + def visit(self, node: LocalNode): return f'LOCAL {node.name}' @visitor.when(AssignNode) - def visit(self, node): + def visit(self, node: AssignNode): return f'{node.dest} = {node.source}' @visitor.when(PlusNode) - def visit(self, node): + def visit(self, node: PlusNode): return f'{node.dest} = {node.left} + {node.right}' @visitor.when(MinusNode) - def visit(self, node): + def visit(self, node: MinusNode): return f'{node.dest} = {node.left} - {node.right}' @visitor.when(StarNode) - def visit(self, node): + def visit(self, node: StarNode): return f'{node.dest} = {node.left} * {node.right}' @visitor.when(DivNode) - def visit(self, node): + def visit(self, node: DivNode): return f'{node.dest} = {node.left} / {node.right}' @visitor.when(AllocateNode) - def visit(self, node): + def visit(self, node: AllocateNode): return f'{node.dest} = ALLOCATE {node.type}' @visitor.when(TypeOfNode) - def visit(self, node): - return f'{node.dest} = TYPEOF {node.type}' + def visit(self, node: TypeOfNode): + return f'{node.dest} = TYPEOF {node.obj}' @visitor.when(StaticCallNode) - def visit(self, node): + def visit(self, node: StaticCallNode): return f'{node.dest} = CALL {node.function}' + @visitor.when(LoadNode) + def visit(self, node: LoadNode): + return f'{node.dest} = LOAD {node.msg}' + @visitor.when(DynamicCallNode) - def visit(self, node): + def visit(self, node: DynamicCallNode): return f'{node.dest} = VCALL {node.type} {node.method}' @visitor.when(ArgNode) - def visit(self, node): + def visit(self, node: ArgNode): return f'ARG {node.name}' @visitor.when(ReturnNode) - def visit(self, node): + def visit(self, node: ReturnNode): return f'RETURN {node.value if node.value is not None else ""}' @visitor.when(GetAttribNode) - def visit(self, node): + def visit(self, node: GetAttribNode): return f'{node.dest} = GETATTR {node.obj} {node.attr.name}' @visitor.when(SetAttribNode) - def visit(self, node): + def visit(self, node: SetAttribNode): return f'SETATTR {node.obj} {node.attr.name} = {node.value}' - printer = PrintVisitor() - return (lambda ast: printer.visit(ast)) \ No newline at end of file + return lambda ast: printer.visit(ast) diff --git a/src/codegen/visitors/cil_visitor.py b/src/codegen/visitors/cil_visitor.py index 2fec0bea..d95643f6 100644 --- a/src/codegen/visitors/cil_visitor.py +++ b/src/codegen/visitors/cil_visitor.py @@ -6,14 +6,14 @@ from utils import visitor from utils.utils import get_type, get_common_basetype + class COOLToCILVisitor(BaseCOOLToCILVisitor): @visitor.on('node') def visit(self, node): pass - @visitor.when(ProgramNode) - def visit(self, node:ProgramNode, scope:Scope): + def visit(self, node: ProgramNode, scope: Scope): self.current_function = self.register_function('entry') instance = self.define_internal_local() result = self.define_internal_local() @@ -29,9 +29,8 @@ def visit(self, node:ProgramNode, scope:Scope): return cil.ProgramNode(self.dottypes, self.dotdata, self.dotcode) - @visitor.when(ClassDeclarationNode) - def visit(self, node:ClassDeclarationNode, scope:Scope): + def visit(self, node: ClassDeclarationNode, scope: Scope): self.current_type = self.context.get_type(node.id, node.pos) cil_type = self.register_type(node.id) @@ -46,9 +45,8 @@ def visit(self, node:ClassDeclarationNode, scope:Scope): for feature, child_scope in zip(func_declarations, scope.children): self.visit(feature, child_scope) - @visitor.when(FuncDeclarationNode) - def visit(self, node:FuncDeclarationNode, scope:Scope): + def visit(self, node: FuncDeclarationNode, scope: Scope): self.current_method = self.current_type.get_method(node.id, node.pos) name = self.to_function_name(node.id, self.current_type.name) @@ -65,9 +63,8 @@ def visit(self, node:FuncDeclarationNode, scope:Scope): self.register_instruction(cil.ReturnNode(value)) self.current_method = None - @visitor.when(VarDeclarationNode) - def visit(self, node:VarDeclarationNode, scope:Scope): + def visit(self, node: VarDeclarationNode, scope: Scope): #? Aquí son solo locals o attributes también var_info = scope.find_variable(node.id) vtype = get_type(var_info.type, self.current_type) @@ -79,9 +76,9 @@ def visit(self, node:VarDeclarationNode, scope:Scope): @visitor.when(AssignNode) - def visit(self, node:AssignNode, scope:Scope): + def visit(self, node: AssignNode, scope: Scope): var_info = scope.find_local(node.id) - if var_info == None: + if var_info is None: var_info = scope.find_attribute(node.id) value, typex = self.visit(node.expr, scope) self.register_instruction(cil.SetAttribNode(VariableInfo('self', self.current_type), var_info, value)) @@ -89,14 +86,12 @@ def visit(self, node:AssignNode, scope:Scope): value, typex = self.visit(node.expr, scope) return value, typex - - def _return_type(self, typex:Type, node): + def _return_type(self, typex: Type, node): meth = typex.get_method(node.id, node.pos) return get_type(meth.return_type, self.current_type) - @visitor.when(CallNode) - def visit(self, node:CallNode, scope:Scope): + def visit(self, node: CallNode, scope: Scope): result = self.define_internal_local() obj, otype = self.visit(node.obj, scope) @@ -109,10 +104,9 @@ def visit(self, node:CallNode, scope:Scope): name = self.to_function_name(node.id, otype.name) self.register_instruction(cil.DynamicCallNode(otype.name, name, result)) return result, self._return_type(otype, node) - @visitor.when(BaseCallNode) - def visit(self, node:BaseCallNode, scope:Scope): + def visit(self, node: BaseCallNode, scope: Scope): result = self.define_internal_local() obj, otype = self.visit(node.obj, scope) @@ -125,10 +119,9 @@ def visit(self, node:BaseCallNode, scope:Scope): name = self.to_function_name(node.id, node.type) self.register_instruction(cil.DynamicCallNode(node.type, name, result)) return result, self._return_type(otype, node) - @visitor.when(StaticCallNode) - def visit(self, node:StaticCallNode, scope:Scope): + def visit(self, node: StaticCallNode, scope: Scope): result = self.define_internal_local() args = [self.visit(arg, scope)[0] for arg in node.args] @@ -141,25 +134,23 @@ def visit(self, node:StaticCallNode, scope:Scope): self.register_instruction(cil.StaticCallNode(name, result)) return result, self._return_type(self.current_type, node) - @visitor.when(ConstantNumNode) - def visit(self, node:ConstantNumNode, scope:Scope): + def visit(self, node: ConstantNumNode, scope: Scope): return int(node.lex), IntType() - - + @visitor.when(ConstantBoolNode) - def visit(self, node:ConstantBoolNode, scope:Scope): + def visit(self, node: ConstantBoolNode, scope: Scope): return 1 if node.lex == 'true' else 0, BoolType() @visitor.when(ConstantStrNode) - def visit(self, node:ConstantStrNode, scope:Scope): + def visit(self, node: ConstantStrNode, scope: Scope): data = self.register_data(node.lex) result = self.define_internal_local() self.register_instruction(cil.LoadNode(result, data.name)) return result, StringType() @visitor.when(VariableNode) - def visit(self, node:VariableNode, scope:Scope): + def visit(self, node: VariableNode, scope: Scope): try: typex = scope.find_local(node.lex).type return node.lex, get_type(typex, self.current_type) @@ -170,7 +161,7 @@ def visit(self, node:VariableNode, scope:Scope): return local_var, get_type(var_info.type, self.current_type) @visitor.when(InstantiateNode) - def visit(self, node:InstantiateNode, scope:Scope): + def visit(self, node: InstantiateNode, scope: Scope): instance = self.define_internal_local() typex = self.context.get_type(node.lex, node.pos) typex = get_type(typex, self.current_type) @@ -183,7 +174,7 @@ def visit(self, node:InstantiateNode, scope:Scope): @visitor.when(WhileNode) - def visit(self, node:WhileNode, scope:Scope): + def visit(self, node: WhileNode, scope: Scope): ''' LABEL start IF GOTO continue @@ -213,7 +204,7 @@ def visit(self, node:WhileNode, scope:Scope): return result, typex @visitor.when(ConditionalNode) - def visit(self, node:ConditionalNode, scope:Scope): + def visit(self, node: ConditionalNode, scope: Scope): ''' IF cond GOTO true result = @@ -224,8 +215,8 @@ def visit(self, node:ConditionalNode, scope:Scope): ''' cond, _ = self.visit(node.cond, scope) - true_label = cil.LabelNode(true) - end_label = cil.LabelNode(end) + true_label = cil.LabelNode("true") + end_label = cil.LabelNode("end") result = self.define_internal_local() self.register_instruction(cil.GotoIfNode(cond, true_label)) @@ -240,9 +231,8 @@ def visit(self, node:ConditionalNode, scope:Scope): self.register_instruction(end_label) return result, get_common_basetype([ttypex, ftypex]) - @visitor.when(BlockNode) - def visit(self, node:BlockNode, scope:Scope): + def visit(self, node: BlockNode, scope: Scope): result = self.define_internal_local() value = None for exp in node.expr_list: @@ -251,7 +241,7 @@ def visit(self, node:BlockNode, scope:Scope): return result, typex @visitor.when(LetNode) - def visit(self, node:LetNode, scope:Scope): + def visit(self, node: LetNode, scope: Scope): child_scope = scope.expr_dict[node] for init in node.init_list: self.visit(init, child_scope) @@ -262,7 +252,7 @@ def visit(self, node:LetNode, scope:Scope): return result, typex @visitor.when(CaseNode) - def visit(self, node:CaseNode, scope:Scope): + def visit(self, node: CaseNode, scope: Scope): expr, typex = self.visit(node.expr, scope) result = self.define_internal_local() etype = self.define_internal_local() @@ -272,7 +262,7 @@ def visit(self, node:CaseNode, scope:Scope): new_scope = scope.expr_dict[node] for i, (case, c_scope) in enumerate(zip(node.case_list, new_scope.children)): next_label = cil.LabelNode(f'next_{i}') - expr_i, label, self.visit(case, c_scope, expr, etype, next_label) + expr_i, label = self.visit(case, c_scope, expr, etype, next_label) self.register_instruction(cil.AssignNode(result, expr_i)) self.register_instruction(cil.GotoNode(end_label)) self.register_instruction(label) @@ -280,7 +270,7 @@ def visit(self, node:CaseNode, scope:Scope): return result, typex @visitor.when(OptionNode) - def visit(self, node:OptionNode, scope:Scope, expr, expr_type, next_label): + def visit(self, node: OptionNode, scope: Scope, expr, expr_type, next_label): aux = self.define_internal_local() # TODO: Buscar una forma de representar conforms in cil self.register_instruction(cil.MinusNode(aux, expr_type, node.typex)) @@ -294,7 +284,7 @@ def visit(self, node:OptionNode, scope:Scope, expr, expr_type, next_label): return exp_i, next_label @visitor.when(NotNode) - def visit(self, node:NotNode, scope:Scope): + def visit(self, node: NotNode, scope: Scope): """ expr = IF expr GOTO true @@ -320,38 +310,38 @@ def visit(self, node:NotNode, scope:Scope): return result, BoolType() @visitor.when(BinaryNotNode) - def visit(self, node:NotNode, scope:Scope): + def visit(self, node: NotNode, scope: Scope): return self._define_unary_node(node, scope, cil.BinaryNotNode) @visitor.when(IsVoidNode) - def visit(self, node:IsVoidNode, scope:Scope): + def visit(self, node: IsVoidNode, scope: Scope): return self._define_unary_node(node, scope, cil.IsVoidNode) @visitor.when(PlusNode) - def visit(self, node:PlusNode, scope:Scope): + def visit(self, node: PlusNode, scope: Scope): return self._define_binary_node(node, scope, cil.PlusNode) @visitor.when(MinusNode) - def visit(self, node:MinusNode, scope:Scope): + def visit(self, node: MinusNode, scope: Scope): return self._define_binary_node(node, scope, cil.MinusNode) @visitor.when(StarNode) - def visit(self, node:StarNode, scope:Scope): + def visit(self, node: StarNode, scope: Scope): return self._define_binary_node(node, scope, cil.StarNode) @visitor.when(DivNode) - def visit(self, node:DivNode, scope:Scope): + def visit(self, node: DivNode, scope: Scope): return self._define_binary_node(node, scope, cil.DivNode) @visitor.when(LessNode) - def visit(self, node:LessNode, scope:Scope): + def visit(self, node: LessNode, scope: Scope): return self._define_binary_node(node, scope, cil.MinusNode) @visitor.when(LessEqNode) - def visit(self, node:LessEqNode, scope:Scope): + def visit(self, node: LessEqNode, scope: Scope): return self._define_binary_node(node, scope, cil.LessEqNode) @visitor.when(EqualNode) - def visit(self, node:EqualNode, scope:Scope): + def visit(self, node: EqualNode, scope: Scope): return self._define_binary_node(node, scope, cil.MinusNode) diff --git a/src/cool_parser/__init__.py b/src/cool_parser/__init__.py new file mode 100644 index 00000000..a589d8b8 --- /dev/null +++ b/src/cool_parser/__init__.py @@ -0,0 +1 @@ +from cool_parser.parser import CoolParser diff --git a/src/parser/base_parser.py b/src/cool_parser/base_parser.py similarity index 89% rename from src/parser/base_parser.py rename to src/cool_parser/base_parser.py index 2bdc9b2f..c0243856 100644 --- a/src/parser/base_parser.py +++ b/src/cool_parser/base_parser.py @@ -2,14 +2,14 @@ import os import ply.yacc as yacc -from parser.logger import log +from cool_parser.logger import log from lexer.lexer import CoolLexer from utils.tokens import tokens class Parser: def __init__(self, lexer=None): self.lexer = lexer if lexer else CoolLexer() - self.outputdir = 'parser/output_parser' + self.outputdir = 'cool_parser/output_parser' self.tokens = tokens self.errors = False self.parser = yacc.yacc(start='program', diff --git a/src/parser/logger.py b/src/cool_parser/logger.py similarity index 79% rename from src/parser/logger.py rename to src/cool_parser/logger.py index 86f0c1bf..7a3cf13d 100644 --- a/src/parser/logger.py +++ b/src/cool_parser/logger.py @@ -6,7 +6,7 @@ logging.basicConfig( level = logging.DEBUG, - filename = f"parser/output_parser/parselog.txt", + filename = f"cool_parser/output_parser/parselog.txt", filemode = "w", format = "%(filename)10s:%(lineno)4d:%(message)s" ) diff --git a/src/parser/output_parser/debug.txt b/src/cool_parser/output_parser/debug.txt similarity index 100% rename from src/parser/output_parser/debug.txt rename to src/cool_parser/output_parser/debug.txt diff --git a/src/parser/output_parser/parselog.txt b/src/cool_parser/output_parser/parselog.txt similarity index 93% rename from src/parser/output_parser/parselog.txt rename to src/cool_parser/output_parser/parselog.txt index fcf130bc..f6919260 100644 --- a/src/parser/output_parser/parselog.txt +++ b/src/cool_parser/output_parser/parselog.txt @@ -6146,19 +6146,19 @@ yacc.py: 411:State : 32 yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',3,23) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',3,23) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',3,23) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',3,23) @@ -6191,37 +6191,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',4,53) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar epsilon . LexToken(cpar,')',4,61) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar arg_list_empty . LexToken(cpar,')',4,61) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args . LexToken(cpar,')',4,61) @@ -6268,37 +6268,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args cpar . LexToken(ccur,'}',5,67) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['print','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) + yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot func_call . LexToken(ccur,'}',5,67) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : class type ocur def_func semi epsilon . LexToken(ccur,'}',6,70) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : class type ocur def_func semi feature_list . LexToken(ccur,'}',6,70) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 14 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['test1',':','Int'] and goto state 17 - yacc.py: 506:Result : ( ( id] with ['test3'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',12,146) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',12,146) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',12,146) @@ -6490,27 +6490,27 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur num . LexToken(minus,'-',13,165) yacc.py: 471:Action : Reduce rule [atom -> num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 160 - yacc.py: 506:Result : ( base_call] with [] and goto state 160 + yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 - yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( string] with ['1'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 + yacc.py: 506:Result : ( id colon type] with ['a',':','Alpha'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) + yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param . LexToken(comma,',',19,226) @@ -6678,24 +6678,24 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon type . LexToken(cpar,')',19,234) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['b',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) + yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 - yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 + yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 95 yacc.py: 430:Defaulted state 95: Reduce using 33 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals . LexToken(cpar,')',19,234) @@ -6732,12 +6732,12 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon type . LexToken(comma,',',20,265) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['count',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) + yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) yacc.py: 410: yacc.py: 411:State : 130 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let param . LexToken(comma,',',20,265) - yacc.py: 471:Action : Reduce rule [let_assign -> param] with [] and goto state 129 - yacc.py: 506:Result : ( param] with [] and goto state 129 + yacc.py: 506:Result : ( id colon type] with ['pow',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) + yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 130 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param . LexToken(larrow,'<-',20,276) @@ -6771,53 +6771,53 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow num . LexToken(in,'in',21,329) yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 - yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 + yacc.py: 506:Result : ( let_assign] with [] and goto state 197 - yacc.py: 506:Result : ([ let_assign] with [] and goto state 197 + yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 - yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 + yacc.py: 506:Result : ([ num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 135 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 196 - yacc.py: 506:Result : ( comp] with [] and goto state 196 + yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',26,389) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',26,389) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',26,389) @@ -7031,37 +7031,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new type . LexToken(comma,',',27,424) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ id opar args cpar] with ['testing2','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',30,450) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',30,450) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',30,450) @@ -7236,27 +7236,27 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar num . LexToken(plus,'+',31,480) yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 - yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',33,543) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',33,543) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar epsilon . LexToken(cpar,')',37,601) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list_empty . LexToken(cpar,')',37,601) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',37,601) @@ -7660,48 +7660,48 @@ yacc.py: 411:State : 93 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id opar string . LexToken(cpar,')',38,646) yacc.py: 471:Action : Reduce rule [atom -> string] with ['reached!!\n'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi epsilon . LexToken(ccur,'}',40,655) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi feature_list . LexToken(ccur,'}',40,655) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( ( Type: + +def get_type(typex: Type, current_type: Type) -> Type: return current_type if typex == SelfType() else typex - \ No newline at end of file From 71fac705415f2bb587f2de14d21add88bdd7cd46 Mon Sep 17 00:00:00 2001 From: Amanda Marrero Date: Wed, 7 Oct 2020 16:34:41 -0400 Subject: [PATCH 23/60] Starting report --- doc/report/report.aux | 19 +++ doc/report/report.pdf | Bin 0 -> 96857 bytes doc/report/report.synctex.gz | Bin 0 -> 36066 bytes doc/report/report.tex | 190 ++++++++++++++++++++++++++++ doc/report/resources/luftballons.pl | 22 ++++ doc/report/resources/parser.py | 3 + doc/report/structure.tex | 92 ++++++++++++++ src/lexer/lexer.py | 6 +- src/utils/tokens.py | 1 + 9 files changed, 329 insertions(+), 4 deletions(-) create mode 100644 doc/report/report.aux create mode 100644 doc/report/report.pdf create mode 100644 doc/report/report.synctex.gz create mode 100644 doc/report/report.tex create mode 100644 doc/report/resources/luftballons.pl create mode 100644 doc/report/resources/parser.py create mode 100644 doc/report/structure.tex diff --git a/doc/report/report.aux b/doc/report/report.aux new file mode 100644 index 00000000..f11b7251 --- /dev/null +++ b/doc/report/report.aux @@ -0,0 +1,19 @@ +\relax +\select@language{english} +\@writefile{toc}{\select@language{english}} +\@writefile{lof}{\select@language{english}} +\@writefile{lot}{\select@language{english}} +\@writefile{toc}{\contentsline {section}{\numberline {1}Uso del compilador}{1}} +\@writefile{toc}{\contentsline {section}{\numberline {2}Arquitectura del compilador}{1}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}An\IeC {\'a}lisis sint\IeC {\'a}ctico}{1}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.1}An\IeC {\'a}lisis l\IeC {\'e}xico}{2}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.2}Parsing}{2}} +\newlabel{lst:parser}{{1}{3}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {1}Funci\IeC {\'o}n de una regla gramatical en PLY}{3}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}An\IeC {\'a}lisis sem\IeC {\'a}ntico}{3}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Generaci\IeC {\'o}n de c\IeC {\'o}digo}{4}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.3.1}C\IeC {\'o}digo Intermedio}{4}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.3.2}C\IeC {\'o}digo de M\IeC {\'a}quina}{4}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}Optimizaci\IeC {\'o}n}{4}} +\@writefile{toc}{\contentsline {section}{\numberline {3}Problemas t\IeC {\'e}cnicos}{4}} +\@writefile{toc}{\contentsline {paragraph}{Detalles sobre cualquier problema te\IeC {\'o}rico o t\IeC {\'e}cnico interesante que haya necesitado resolver de forma particular.}{4}} diff --git a/doc/report/report.pdf b/doc/report/report.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6c94409f5b4fdf9d249ed05e6ef400763404d772 GIT binary patch literal 96857 zcmeFYbx@s4vp0$a3GVLhvKA~@I0Schf?IG6?hqspEVx@paCZq7ELZ};6C46TLa<=p zv)DW5-RFF7-FoX(-9K*CWmWUcGc!HY)4%SXW|+mOE-lN+%f*kzIQ4mO9t}*xL*ruc zj7CHRja%8;+1AsJ2E-@GNAvK5#w}~_=xOav!!7G*?rAM;ZRuiVjV30B=HcmXZSI8T zv-sM;=y~=KQP4$=+1cYNLN}5qcqW(FjqTR4_?7v+XR0eGbgtuus8+P4Zo#(;Eo&Bq zje)r1UcuK(=?mej%el8Zaw&dn7*e?dt1IEe_Js2cXEQ9Ajf$Neeb+1Zt(O~z%vqU8 z=2nEN<6(kIU5U({rW`5bJtbdF*96YEcW)7IS2eK{4DUJ5DtC!jn;yR%>qB6+j9}6U zory_t=SQS}9Cb2#KqP4c7TD-%h$Sh0!HM%do63sq-SnI-@pD@>TeR({yq_RMP-VIm zM7{8AF1z9DJ!%)iP|(jl8sx&@neljHIVN?Yk#}874W<*Tf{RW#QFAyy%qdDjn0bZd zaRtMmrscyf0!xuUD+V>Myq-3841!``nx@`}n3mj~oz2>NY7j|BO_}#RL4Y(bF1=n2 z4^NTKo8d`&OrcLjHfbeP`__G#W#8o|av=e9?4ERUC&cANZih_j<(6~OCFiTvKGeyt zEh}a@k_oY&Xc|ZBdI(A_jEe|rGU$wElJ(y!k?B*ONQF&PxEdI2FvZ+&NIkKXn>q5T z%qqHxlhc*ouO3ySQ4Gnpl#ZqONDs0%3sIFV8Pt2PDWUfiH)N&`Y2ApaWV{DwRjSpm zMW0OkD{b>x7lbKaCf(}TxjP(7-Hr!3?~^GFUp@vl51aNQ7{;L;vLYoV52SPVUrp{Y zePTD%jIDCezFzHN7a@p+DBka~{dDgG@Dt&9b`UdYkTy`%4Qa`ue-_}L9 z+(spikPLU}Mrj9&k499a#34(8>G)o^buK0eJ~1V5s5N(K)dP2C(x{Gqu208Ub1qpP z)NW(Nc0BoY-kJl!dgljeN~2zIA6~H^7J%Y2mGz2L93niqdbjFvfbx zN}+^>d8xbMYVFAcLvREVEb zU7fp<1W9sU9*roWKH{D|w;dM)!DgrA^;Kd>i#?m~WQM+dBCa{ci)SUY(XYS?el3E+ z1RiKmt`cz}-H&k#Evm(#X>LuPP{j;l<>d3&gmzR7y=_hZMamzwAM=tE( zpGb%55KX@79hlRhL1e68rB+mqKgl0-UFP~!Xq!w4y3KV2hZC&}jwBx~@n{9El6PR2 zJoVx@85$%)pmgWvTcz}^2D4}63%Ic!ESK6W-+IqW$L-ejy6N9yFL#?>#0;Jj2x0_N zt9j@~;)y2Q^QwJl+x;z{**Ymfl5vzU`t7ZvwzFOCqqmvu9}^L)@XmeZewo}J1$>bZ zBS(PrI*mK7YBBM!i75u4u3<(VeIPzeZ(keRTUc@s%XrMRLe+MhIMtwGV$RExlRz!! zCYoKFst{%+SR^TmF57C*%No&SwriQ|#G%)8%rVOK^+&;?)1H)iOSRF^7gv+=Wl{J= zlaa|M&uj2M62*CvSY>8q9c({?ClTj#M9q7o1-gICNa5Ord`0+=C`* zXqDc^lS9KeE^kRu+>M)L72gKH4Ke>VwP;$c-0ue)o2skY+*A)%=qd4>e8(ounS}e zM)EM9I(&au?8RpUMxjv(teB%K!r3&Htm~|f&1=L(k5X`LQEa9e^AhN?4SM5ySl@l+GRZZP)YQ<9otF?<#iXD0^Hc6;=geJzz#IwZX`ERpw)iX zEh4;fOnS|GbQMy)_NDI`#^cE##Q zuJv0oJFlXT_&0~JFTbYV*jZ=VrIcz>W2MF@2)PZXXV9^0_h}^~bkSpWOv?LO;WzjE z;FOb9@XfFBu_nGY*KJ7}poy|qF=|&Yi5IdB%&tw};izRf>gRbz(Fx6Y*{7TqXrAqe z!=0>K<*|C5L=oo1zfm+1Pa|jk@{m!EGA4e&YS+^1s%kmDh-Gg>wqAaH-5gpUGGO(K z@*>=w7(-f!FMMC-t@kklKZ~jV;`fEdF7WDVDM^?e3pRSYbDrqEhT>DiFv_Y>kJ-h`+pQUu3O79S775wD^wxv)n4f!$3r;n%k_PdGfFR^mQe z;E~sC%5mO->^G8Lp>mcUhbSrOX5;_mQknd@!`qhywrVjc8)7He9}5yPjE^-!n&@BR zIrwOs+ZgH5qvLAL+LkwkBuR#@je`z_1=Lf6t37a!maED_1}tAmwI2+vX0%$$i$R3D zli1$T?D{tnJQ`^vpcr9+`ksdg?Ig^6im5GHZ`3-D$+ zXQsh*w(wQgdTBCZ6i@Xs)pfnN>|n*Hjp3KgO+ULvISGfH+~$7XA*d_5HLczST7^IP z&)1K7zRTUdwo1`csSQkX875U}G#I6>@nOo5C{Wr4iAMzI^l_Hq_LQ3}Vza&lhjitj zS6^my*hH|<%D)g|FFQ4SH6iVjZiq^5p}IT1GePOJ>A0svU1C1T{{~W>8oZ|wz&UM! zhPRG&qyicZcFN`!ukI}>> z4Cio|#VN?xI1OJkroxMTyGW!+gkrW7xrwa5tR`G4I@hp6tkA+fd>BSdb14@e8Y3Q{f*;Dy1rmVJ2=eiA2|`WKfKl85b{fHl&SGLTe@_Qv z{*!Ua0#g8~Cy-zA3()YvIs!!qh=%{~B0nz;>S4nd=8Lhm3865asL34$SnK=fVFmBKCr5b7EcLrzAI@ z^)8M=IB9G@B@9Lu`s8`=Fzrr%&G%h@f&**l#vyi^Elrg_?Z;$Vgw|>Ay5-%ig(9mY z#w;jDf8XtxM5Aj-e|llIwS>3RNk3LXW9<2ltnGYZ!F{(~^TfscT~zDDxlHTV8>+AB zP~3i<)|bMQS5ECj9&1XkY`Ibx>9$}ZxOihTR-q4txo6q+)avQt?bayhA-}P2B%+?- z*htI2J!XFVE*%mbn#Y<#O!{dpy_CF5`9~Ip3t7Z31FUGf_!~#c@V@0?BApD|O%yC@ zHGvU&E4MU8Sz3f=^=pF715!qCm@=PwckJ>tnoiD;sO#I_c^XDM0pq*0n*2;C`1%8N zCn#;Ck=}<&LuGh4(Yj-Nxr%~f37-P=^1$4(Y$)_XA=zTm?9Ee~S5lt+iB|kU7%z%{ zKk}#H7i|$Gy^6x&`Y!N^V&1H+Zl`t~U;TYz!Nt?5wI6K3D(ieTdQ$W)Uu|Qcq913z z%LE6@F4U#9Oop>uwCv91545e1mfY0eU6;sr-(I<0sBd06%OCXw8I_sqhgOxTI1VJ0 z@cuNnXz(AdKpqijb*l?%Mlumr7ZhsD9H}WLN>*DRH8M~QHH;-jd}Bl0rQc6JSUlIBp475z_fj8m#vl@zs+4btXBBJ(9}> z5{i#Mx;%a#ZH^tFI}V8n!hvWK%v3@4&hjCCjWp@gPc?3d2O9E&eoHdh5BIiN!Iw{U zS;#i0GZ}LAO=I}TXrH04WqMUbFbYeM<5!S;$c>cC>83H7Y_-ClOYG;}%RV7v1!N8#53MyOzV!c;SQ}B`B zC>flf_#VZ#Jx9`2J^T?OB^>Ya*Fuw{8RNI|%rx=NVk76T+BK{wi;?47q%sD2uOn88 z4?E>gEB!e5T$O7P;hE?fi;dyx`sxVRi_vlWcA`Wk!gGH`yR~&%>1S@gHe~Bx!fK?% zDAb=Y$4Sma7v$2V`^l1#w}sSBi{BQ3QPws2F4b(zw?O1^drs2AQzlLZav#!jVm!5{ za-cS9F(0EWgg%iP!+i0AEsV<5(dN$No$`teo2T<)by(avC^1HKa7(VpVQ=2_kCj?B zSE!r9aU^RXP>^L3XGtjP#w;9oEe-hUq|mIqaNX>mzFI+cuMKUfcu}`pIZ~UY`Ggob zX>}o+P11ZX*!-@#r_C!8KX2iE@{@uoLsYC!X*3AO)s6B#5@B|lG4s~HOdsWw8^MF% zM_D=*5DoZ)eMFz?FY;`R8^&c>j7C%Nm|w4TO37Xs(i4do5xjjnsD}79=$P&HS=YCh z4Js-q_?01|3~&L^`sQDHZt$Yb(QxC5#{vb&3Zk#+KSkVq`i#j8J+>oPL0ulG#`=g}D%?4n^#jJ~Ng-*PQ`UpUNuF7+$i$xB^X zt^X81PKBpOa{MbpyyUn`79H1^<7*m6CKLlg=J@QL8!WET4p!%kq|KuP|HfL0;s!;d zaThdB;=Mw2V{Leno;L<$dNRIFS?qi$2}7O8-|*7IH`t4L(v4hgcPJZX)ufaapfc?A zC08T+>fA|vsj8=DW<&%bVrJ{pA)#rNsJ~e-jx~j$eeCy@9X-S~b>$@c(y=TbnUYIF zU&l|4+qzl&M#^0iL88HVa|Pu}h_90JfkuLQ>IpZ8ov_{>Zy(188sHVs9GH}RkyN+E zw!;+hUhr0+=EAtMrn5!YyB@?cb+w-gnhv7q#9-r!|NI7j2d8}6;Vo(H_W+zt*Twn< zzKRV7w~@0efyL{zTx+*nA>oen^-Gbqjh-?L(xAMZgkyHAPa@Um0&$-B8BE&Qj4hWS zrRAtI`H0uVkO7QKzCB&0_^Zsh!tFyc?l)KOhGf3WBClEJIw0Mxe?Lk!cpcW*l)&ep zOPV%PHMy%ys8@!N4-XAaR?(~U=;rvAz#`PLY|}FUpF0yN z4KnZv18F~&d*Oe$=Sq%}IW$sF!vjhtp5vxqaKxU}#f*-duB>jnYuj=^K>Kq1lRc!) zy+M#FjZgy*Q!vhbi?5oSSsqoBJ^T%JL#af|=h?Mh!XJS{y%jGTuVcZ~ukG24lnpA% zr?4^8Eua^fQJP97JkJTgCW3=&aI}dEP1VA_WJki|5WGXKk@q8ymTEdD%tb{ba{r>) zs>oH;dk9jTkD@R@Cq6{)Qrz7RSMx`T+Midl<1EctwAf+STw`|daQEu;`gru-J_w(D zr8Lc6i|bQ&aaCUH5OT?#0%e+ua6QQ2wE=D;!2z{b^ys1g;Za{@x?|k+wBENAtk1M9 z`1pm72;@wwwp$t3_BO=%O(SqEYI{7x=|?xpF^$x zG{_RFi8!)~ulR0|#{P8Bf24mJUS@F_pO%5k@9C$k{9#0uC)|__9p8wszKS<0=2RDj zwP$Gwo2RT9lAX-T`!LT^d3R^{#PL!1?JZZa&Mlp1(5OCRy;(-Nq9hghTIPzW`YW(8 zMJ;S?>p8MwDr?|cGp0j_PhJ08YC|ITTRxWYVr`8>{P>*3A0IJ=4RdOv9!=p&-1+M% zV!5qdZ1Z{cEf?uxJ~rLcMRi`cUo2Pon@t!GsKI2)yZT;1VEX#70V{pH+H zjq{KSTvu%!vTO0Lb_DR(7n=46LSoI_H}!1ISp#|nUtAv(cbJuDx4oZ_CLU-Or9eSn z+iY-$sAUhA!Mk8qt4NHUv~Y4;_m=8JP9%K{uO`sE3mP_e&(+Zz3Jh0P?q3_`d#e_e z{p&U7I;z}rj{H5_-!bh-|6bYdzc%8}_>>CUlV+Re;sV~KZP z9e!xZcCAe~WozA2SnahJZOGnpnq&`X0UxNei*sdRiJ;z$rL>MWG^qzm+s;2##aR7X zgb>Sc$(E#rFgWRhdoZjhC1H+_;ui>g%2dU__Q>jtybYCQ^z4?^8sqzUSQ5V0&-9N? z2^JJB%l*XL`CJUvN~4Qoo5X7>S%=+68xzy}KhDYU!Wwmd*KTR&&N7s?e(Zf@^4g2x z<3ty6!~(jmB{t58jWc@0tkfGn*4_E`K~L%t0ZwrfW3t-qFDxYk0izydvpajPZE+yp_d8azdu7Ch#Z#M5{G;Lq7|tiwTp>4q6K9YbubZ- zM=9-cg_1FWG-t_VX@|7-)HOZMtgj0RB}q< zv)!6ZVx@gn+-D#)W$Cz@=^=LcR_w(4s)x#QOagE?ag}9@aI@npm&SRc2{xRPYl z8k(5seLHrjj%^qEra(|VY=PKWvkx7xZFu`zP!nA#zV6U(E;3rp_wkT1TtVaK6G#GlYjA-C15aNprVtO`=H{CwzCZ zw--zl9xW+IJoyoZn3)~a$huMD>im<^c}$yDV|X{JQgOh{qta*wSsFvEKBZ9Z^~M@=u}u7z$?b;sJFt|&pv zROi-zBxG@SQ-!g5osRWhH4^=p3^_nANkUaiaRr$<=xqC>q6hAEm^tlBbbx9B1-~YxEvI`PF>hA^XU%|b`B;tGJBY33q zZBO@A8pX^k<|{Czc(6~08v4=K>-?i`-;>{mgCB^W5%=aVZjDaj>j&fgw#PjjJs(sP zN9jOY>|Q_$(%$U2*PJA}qZc1-Flq3=SkG5Nv&Tb-9GE=aK|MbH#v1x)-r(jjf?LMr zyLq~#-lPbP-$-%t+M6HDZz5mP=*mXctnd1w@fhI|f6+Tx;Cou+SaxL$39V628cd=_ zhAP=KiI?z>;@+$l^Hgp@F>V<+LIl0ULj`44xqroN;cViJiQbA$aeuMPB`ki3vewn zOJ~my?8hWk)aRr;+(7Ee^3s>F5s?B+Gck16*%9(&U*#98 zf3gp+X`gb}MM}`V=n4+yy|F|K?jyUqA9LNgYwMgB^j^Tz*AdsSh<+OWSjr6xQG{g> z#W+h+&tI4Pb2<;s3)IOJF>D(R0Vw~WD>9S@@8&RoA(h%L3ZZk8s>`Wzs6Dkzjww=9 z*>*nNeYUg#d}QD+xkhkpX7EAo=S;l>+tNt9qly5wsOQ8yZ}AIff9JQ+MA0Mfd za!AGW#e=XTPvDf;M6^s4bD(;wM)i#?{#?G|hYDGUeZ(wtX1Y4K$`1X!Hs9VnAsk*4 zNtIEr+bdOzyUD!xV6s07p)csQExvlIv`pyrS;b^;^u=xIV-6e*<%<)#Utg22TLZ7@ zIdv;VKX=Ts97zY(c$Ce~FWe}4gm(wNvam4k8NK*%WcbE*?R$8EMaAw=D}_}a6Tjvn1&^Xwwc9zGPyd^fHk3ZYg3yCh~O&U85SMo{Fxi5&{T4!L`%6%h0M^k1-UL+-=NHO>Z zx73c$DaXe6u}tEHU1idv5}Av5zcd4&n8x0u!RvBLvT@Oo8=B0p%1 zpbH`++SJ74hwe22 zP@BQJGDqfg@mtjEft#LS`n9uT1%8y}cQ9N^?{wC8>;MI7*QC93RYD?zOMU}H#K(PjIR}rTAN_vMvEf6bC zFqI7r4gzOxmI8N{qCcgy`vRw5qSAdSrc>ZdeZxk=7nM;z*Ev_F=572Ib%*3#=-?Z{a%bwqXS4M>}gN70(53(fKP zA*kF5`2IfR-x10PCySbiEK>Usun;L%l_`#GEYOGjf^ZKlrhO3)MCO=T*tDmfq<$=* zfu!;0_m^MY-q};3Rj_;TH5iEfz^~iXmqKeK+fz;}tV=|4K(#eXM-pooBJrOmbUA*c zYf4RyU}Z4eidGWkC{w2IR=9fejN_nvzR!`^YQSPD>B}ReM)m9pOigk>2Tc$Ye06no zr9e}cb5y1jH{4fOL}jegXzv_f>bf;L_RZJp_Nwjt&WfQ8iFVItt;n>LX>=V^goB=6 z51#QE%T+2GC?4kyJ}&LfHm}ShcOmHsYu(?Ds>sP2y=)q-9g85Dy!OVX>9#5E6-l;M zEyStZ*i?U{(O?8^%XCwkJzo=_rK6&%NA!S~a;T6AmtCi+Lg->|HWo5?-|yi=Db!9P zG5`(r$~3Bl2rPO43PDfWFyuMmUtkwFB0HR|4XQlPDx;}+vc=(@P}86{F!Qa^S;U{%wR@2g`KJ#OsZkjF*k~mg%YD*Vd3Lu;!eEw zCNPB`;F5#i?~cOmH{PsU14WjXWHs@BH$z-L@uHhiPMu3Px_-=cFn*K*dXJ8dNrkh- zRUxds1HvQf6(z*_&eS-nu=Ps0ux8=l0S3J$9q@ ztkMw^jx2>{Hg7t_qz>WVohrCj1<0r1^&KGKygAHC3?VvQ8j)&R71B$6k9yjHn@@ZG zq&OB)E_o(NKZL3ohcHEfrNwQYhXe=wgl962&X{PT6StdF8g-R92DPv0Mb?uvi7GGs zArjwek>1SGOq&>y^sU~!6+HZDT57yfpu4uj9wqkflaGu@XI$dFC@Z9Jii}p74fI*D+-Ivl%9P{zwm?95ORze%QiJueL zVFSm~sr;$8BWCc#1X6s`&TsJQ3mne*TEnj73RJ=}KRY;@cWq3__tT5d<%B<#8*AI~ zri@yr{06o57p^YgBh2yMlHPhU$(c>}($7Dx;0*{8qr6#_qMHHt`mI$Ixi=e;^@{6{ znU@jog|I!h4bNZB8)MV=%Nq65;t-DPeB11A;+xQVq>vY%mT`h7{n?+@Vc<9R&mmXd zk_k0a zJ_#aS@6b#2r836ZWQoR!%7E`TgU?k8R9Bf)(^5t0f>5CF`3x_b?#Yg)gTx5ME0_1Q+MG z?1l*WwSxNk@V+wIB-%I+nXr5!H`d}eETbQMOjVf(Dj~X2`)3*nm=ht(ZfqlG+B~^n z_H71d{En%iPqR8w9rCuX;;QTT)wP+>H4HxC5Vl=lsf7RH*m@+a%BPA}X$@wKu1#|9 z%JmfImz9EZ^4MqNwo(7=I+(L>>X!Gt|540%fTMyKnbM<}S~JTR2>lKd%?1KY`8&rH z;b+H!$hnUyBoQn&w1r4m()Cbk3CyAbiMZ7!B>9 z9{g!vG~X_){+bsw7vKvbbCEYYfWP@*+G*VkI(IO4zSoDI7rO*A-IzFWM&I-h{D(w9} z)wMY{L*YEdi>rEpHjXLUz&a^Pwml?afywEZ$nauSsn4=Ynvgh1^~!NhI9LCe>( z*9(TmWY_Q1n@=~0-jAb{)`>n19me_+%@~?56Z7M{huN_+bu!aNyWB_NnNI39l&o%N zd{rJ*`CQ%nHepgyyQd_iy4K^bt|ap~eGlk38I=i8O-N zC&m1PR~{r~!wd>4DI1vtgIZ#Q>)*dU?xiUdA>HTH75&Nb<0d$;^QEe&r5)awlt(M# z`^Y3~tKImoa?@M_6d7YD8CRHP9b~f}%9;9l`IVt8n2Xx=y|1L+5W4gl->rnag7zm& z#r|61r__*Klf&<+u`?!k(fr|uU|uAIG}G4JR_sO%O>D;#tk7*toS0dHg{d7(A_XO+6eZ$0&$v*epkEs#m)wCi!hVBMHlx^5AMhFse-n6o z)P?kuzUH$J(pQVzisa0EudyFm>8tQQqQW!sl=9hF9P7C!1diTH?#}9o-tm|7;;^AB z=+8;Yy;Mf?La)#S)>8)k&+f0_o5=4}#u{bk21ZGhD_t*4mnSX?o7})lp{GZvWk^o% zQJPoI>hcCLX4w$=@6D`&>cox)zN!?Ey<2B{hAmiy|Hwyyd?uvM*+i9DzIwio?_`6; zNbm=C+085Y>t;QSzDNa(V-mdVoMI)MkF%a@M1qRj%Ii$WGT()ShhxLLXj6U>WfFhPMW&Uec-Dk5 z`{@l`*BH{rw~Z70l|7aEC^ts)T)$GrNw>f3cm&I8EIbk_G*xDCy`3f4VPZs^4ddck z!63@{jVb7AD8!bIx3$lHlZON!(>(RGTL;xPpNAwy89Zt8s%GzLTrGej{8ui3}V zrRms8hG|u>OqzSd;*oi>GwKgUBM}iWzn%GaeY?FmSkZaPBx0$fLo{-8RPvc4MMra! zbj&?>TyG>_nnyuPCv}tf6UpdEURlm(9{t70aqA~qNjg?rHu2QlDX^%yfwSN!G8L=?_@4s zOe^E1>|ICo?L{OVohq5YyjEUP`v;Nv5Ffp{1(&y@s2(9H913k#hH7;tT2I%Le&i8Z zbqKYyr{Su>-OL8#9Gpxo%A`HE#ium%$1|^#w@lkM(>oiz|FOKQ9LD}pfx0tAYBT!1 z|GKxI%hZr8-r_K70n6}ErQ;EIL>LKLsyCX>OS#BL9vzGuTy$*ixY6hraA3k^M53w% zmt(r;{r3fT`uZMr)9{m>9^ZF!-49;ctyu+1Sy+wH(Ms4Gs%Auw_8>!wp;z@rOV-jv z{XfC7zuz}6)gJGWoWkEx^j*vw63hmnvphe;IhEfOHM}bkSuYVu8d{3fzR|M!2oam; zE}p62YkkBuZXP3L79y&q*{fWR&Em{TJaE{1iBsN3k*R)WktL=}NiF_v+`VHV;gxZX z$~bzZnjmR;OZLj5qw*&#P0u!`04b`#-`{*#JXe*#Y(-D(8`+BZM)jus4U(5&uihVax>EOaD0V&gHeV)>}5v zhselH3KZg2?-v{U&QUM$^Hrxaej4+)blQA9_{h2;X7&PJL zbBe|#q5bU~pG)wO&hZ{ES(`QX)pIj}c4XTS+n&&H!LM!WYJtC&sM^I{z9}i-W@I6C zN4&f?1#cx_=eK;?ue|+iVuh@18*U_|`RyXWbt+(3_Q(tOjaUR_Y{0;vhj^fX;4cf; z%s1D+Q$NS{8_9U#l`-?FzE)zc9`drHIc5Crb5!i|T|f0IN>S#H1pMvbc02RlBa;0B zF-oYbge|w%I7(^dTm)zK^eJ+l#81#Zhng7LbfxIgB##3Io_0Ean%Yzwh>rl0C_D(6kj`Tb`na$?#Y_IJxe1%o zhG6));mM(Y6G~xsxc)?+e;-O8u6F&mQ2KBM?08ho6QI`qz`67wE$W)Iad^(tvp( z55zABq5<KpL{$30sVk|+>K1pg}$XFbyvcOf2Bv2YkR1_`p0gydXd)uyuh11%OsQnEwCufw4Rg zKOh9a`N00b#smFJ92lD*1ZIMOSb!RU1^*k+U_$W&yb{O=3 zkpQ5=Kd{4~|0luZdU%JK$v@};dH@;->|P}>@4q8K9$@7F^f1`}Nq=Df^L&8&Z`gsd z3C!04H$wycecckxh@Th21(@jn|NH;j8u%Boe4KQv&U=4o=HsS-!FsT0r3Bq^5cfgJ|_Kd=S?Ag>UB!VDa606+!^Oh&-qp};01 z0BZ-V;jc{zcs^`AFoy&j9Ojq+FBGszm{sr#0=WdB7np;>Wd3iC3frndu;2hV(}R@& z@31@uwow6o0drKC9$}j=EXM!=@x_EQDNf1*aU%;3dRFd12Ek~()Hhg0|7$u^Z#W~fhJ)VSjLZnDhS^!E^&NhyS*Qe>wC2eXoNTh>6fY--!kRNJBxOKd*r6|0&Y&0($5D z55Fy4nqlc_W71NV66>_Dpjqd%)SSy)Isb0H*{Ol8*@>BON%zZj;7-n=*h=yJuleBf z_MNWn_H9FtmzW?68A2giEq_a}o4>HF5R;#*b4XUhEp`EJZf#dQYe>>b&A{*@C0V9* zJDW|6#uj{jcgO~^T}CDXfpQM~I2@CzvyHAZ#2XHu_=~uh7nGQpKCXv|h)5QT3l5!_ z_=EV*U@IiJTsT=cIWT%bN<-$xSB8lM*)p4E*@QVbe~;cC2{<;YV9RDzI96eN{}0sX z3BkmCr7x^45Hb+%tL<){S5tEIi??ceZ=b_44F&I)af#o7x1VkA{z@m1xT5~04Ri-J zwKSZ-Wn^XcgNB!c5mm(@!$2_AVruqJGis$;d(|yZ==7cOn z0-shGog56e(Zg7fA~>}&u8q6vXz`dwpxzC1-BN91`)u0|u@S7*_#ENx6Fi&{lkCtv zkyg{AEd8ZSC=`DFjuO-WzCG##B0=JL2-b!;%Kewii{F#NUH9mTwY6Ox z#FY5tw#P}TzUzT)HE+*!V*$G5K^!C(&oaHxq%y};Vz zdc`s2=hgkAlvy~ld%Q`P?$P0tSCwmSwK|7Y$zQV5f_Gw=yC>d7q%VLo++-uDG};ip zd6^bF;%58M=%^WPR)mg=Ung5OJLh(})y-LpHhEby?In3cT|w8t#oQlq38lVwMsr6e`u;{||I`(?*o@$L6(ldW$k$ci?Idl5cE~HgZaV##^AU9Pu{I}rw zr}7gk?~!s|>T^hu&u69G4EJtVVz=cKO7nf!$z`_T!l}fKmnEX~)O=o4 zd}j5dSnS2~f)DI9*HdJE0 z;mf*04#v?=YIq%vgJF#g@R`y6A_Fw>gCN__yhz+LkN3z$pIV3I6{jSFPEQ+( zUMQtw*6T01*CpW;6g(KR`R~t;%5bGW7aDv%f1dYxlILk}c}_}Y7{8yZY+^d$b3a?Q zCyT{3oNvs6`0w3F4_5X+H5h8OT&6G4JR{^-I%@aKW7d)kJtILX<+)7_wD}J4vRM6b zct$VT#PD<&_qfSWTVK<(ao(j>^bkcLL%eBfxiN&$=#94c&xv2b0brh%nY=nP;zgkw z%6dpS!CIV4Pe-iV3(xYOmh%ch>>y}1;)Z(PynJ4VXdX#z)<{99@G?-$XYgAyuC2OjE!L?^FYL8izI zy8e1-0(?uXa7TDq7aU?6im@%%ineVZ27gkv^<)70>uxb+R-*F7 zT{RhW;D7B2Ssq;$jlvzpU1>%LA@%jU)to5)JJmmJ)q5l&#tkIWdd)~ zvGgM}tNM41UxH64XzH9(DBf7)MjV=*yQPRk47dFL`wIQbuIK;VB?dS}vsivibmt^(`@MDz5t>m1kbM2wd-LeLkfPLRT-#}Xv zllYuh6e*~F$c5pzFw?&BMw@INiBen0&vSM1UE?0QWO)VY+YR+Gy}RqjXE>dz1F1;1 z_j+%IE88TgZ`fADBs?6%T-2y&SqQgj9@*A*y;?-Mu5C*15+uRyM1?-)g&?+R$V z&AKdx!WrsG47%XdAteh=esf%{uc+v_9JwUI`~CGp(G}g31Mx)P;oM;cN&3xAyKjEF zhP@^+YLAb;e$U?jdToqRXq683#a6|WcAKpfkB%sD<%0;NuVLo*XBU)>9jJUN$7ON# z^qlvhe=K+=TG`p)=b}2&m0|mm(41`iwW!}`8&(Hsg~3hp)C-jNRPVy$dDjj#eb*P6 z-P0|coo84)HI{SvZRLcozkS_0pF6Nc+F85>k z2iYcZqWfM|?=!^W7y$WjdZ$${pZirT&%}1q{?{?w6d!&ehUO4>e;T57g&2?Qt|c@CqGhB zysTyF43y|k%`5KwcmTn=LPiu)mTKTGU+n8Z*&oQc7=w1J0e|o?? zC`Ggq5S>;2k-Bi}#TJI29f|k1%=Nv^CCB9VA4wo{{nFM;0t{MNIdWxNg;i2e6J1GM zAC8|EZY{$uW-8(~2HM%~mpLvhYU}OW@NnHCIlKJ&j2Ge1Z-SqVy)rr8Yt*f-pmZXw zN0<5Fa(b8&(`btLcqBd3pLU9iCL!Ff5y+-g$5(Cl9RC<2>e4w~oi?4^x8E83xpGmJ z%x`&*D>x*`qnq2z{ztKntIm5+H0^6aTtB)Tv7v5R&FWn1OltiCLp1Tk^Bq)Xv(gwY zN4vWjZN{9>u?B?fBgO>Q4P1N(1EOz5SIE%lQioDzjFH}RGlEF=9V_}=+pFp7?ubs3 zZg&ZKqk<4PHG*{fX-Qc>h1xbWxi90TmgW@taiXCwGS0v=%(#`^l|MV!Vtf6)TT~_P zW5fZ~WAccA%PE5i&&=#pvomow`bXZ@?dJM?p0XQ7%vdL{e0(NrSPv$8bHx2Byc5{w z^Fa70v<=p8H7hw8b$C7^Ynw+KgM+i31N3jpXBVtiF3pNnvlEr=x9uW`D?o?E-P9D3 zXg?ys&ug9RG~$*&6$(B_iB^35m{O$ZyGB)8`SMcso37m=>XbJs)!#D0zgJdVN;^dV z#GdLL&(Y>6J6%ZQG{nXe9;%Cqbn``Q$@|%bqpOAL-|3Wg)u24h+TDb1H23y~_jeXK zH?pBu7)PPcceZF@8ak~|3!7`>FLKK4!i(+)uym%xai z^^%P1+QU`KK>Q(B;r1qjVf{rPtn#P!akoS9Quv_LV=vhrVtG5Yk$m&>TBzb};>Qa= zw!9fP&u5DIBxv9P)FX(enrch8LO?ot@uuRTLSk0p4c3x|UmG3; zmliT9Z#WkpHy%CP1;w8ws&1 z<#AjNJLX6^ty46~=KR&8aqkuGGp6GgM{$hOxARYa@Aj<5vW!mOj!H|_+H{j`=1vU` zij8kk4imz4liQv{!1W&tf_xj#zRwk@taGBcfvR?0132Xrv2jkbvu7OD2+oApxVY_U zt1m#WA2)A4r(itZ#9FDaC4GJrV>c7^5d%o6#uh9csHk0)wA&IF&dkbsQaxP{$)9H(fi zV{2pYFz9Rmwk%4}dC!5u^V5Eaei)z(*!5R+>n^Uft~P^!WLuW znRc~z4O1ZP4u_ZRq=!NOm(A5v{rx$A=f4c#y(||p#dEW3I5(aGqoQVd%bFo8gL`_LIkl`*S?z7&((ms}N!(At2ih2i_bo zh`ycn-C@(Y^zx&eQucP5N)^#x`Vr245W;yg@YxTY4wQfVE*J>xX20Y7k2+|x3}+HY=l389(9e9U`J-h*<6}|7AJEH*J%FSHeiWZ`e(|98gd-Hwh7VMqj+|kb#55{+ zv}`ruf64ms`F6@@z4@L}Vu2(&tG5Ys#$GGx{|0D!CZ=@HHW99SDBKpu2Tiq#hch{UZuW- zceZTRXiZ)n>qpFkLS8vYXGN^Rj@|KX`Fi=AX3euv;7gPIwnA+&5gS42C|ihwoPp7g zQ7=1twCXtTswubpHV>S~XYVsZQN7r(<`Jtm)WzeAt_4jJq1~{&OPV6o(WYWBL*hxf z*wAPRw5`=8&;?r?C$lBqCiWEF#$d{pmNDF<7*$fST6hqa$#Yj*vc!W`*tCnnm^%U6B7tLh`0YCq+vXbCk`Qi}xj zTZ3&VRLZeTn9{z)YZN&eC=21*eF7?e;Rm}%1<~?HK`UIjvkl6v5=Oie zEYJs|^D}yPYN@3s*uQ@K%)4ebHAb8}WLHa@mVn~SY6fBixvZG@Mr%0G%c`_k1uXCU z5p6bE9{@!}BXgMj#!hYDom_WvOcb@(fkuKkU$BJF{V2(KT*~jkXny1wo8_gv{zed% zItUb-&9hg#qUE_l>wcXs>zTE{b<|%=9wBR;6VBtqy2I@sm7VN#Z_K!8?%(pIPqBU9 z4x}V&Zc-Ea!J>moyns-&S1lj+FpCJR-1RT;%Y1CdoT3j>0eog*s!&>NK4@ForDqxW z!6Z9Xt9g;!#!HGF;EIw1V}4aUmx1a@P)ZU9K+lG=yU~$N-!&L58Al`LSe6xUIVL=W zv2XgQ)p`xYFB%QwDno`JtDRv@wk+Syx-;Dp*YtWDX@FxB;kZ>rM~op%!h7c9KI+GK zdYKL-BS>uT?cBy1{v(hY)^LQUipgdD_V|?&t99ox(uj!OcW|&DE1d7K16i?sYFH8N zNd5e?1}P0dY4(%J_$q0=U+o9&VEkDp1s4PiO~H{*P8v~dX%1gb<|}@LYs~yx=1Y#1 ztWX??$&(A6QCl^&H)1@ZJWh6kyXQ*jdRk*nvWF7F7p2!3h)!)T0ZWjaW$JC+8D&uq zl^~9!fa-#4$`x;S>xr>(3WUS(rR3GVE|8KaM@3mpRU<#MM|ji#FnX4v-DvQhqpgvj zh51bORS>4J05QKgR{*l_;I@)cET36g7eV@MF3Si_GQPU_D?q36_YZ*L!Q9wp=-4$KUsMErlc?(JBDJFqK1F$X=!dQ=)Lc19w-T zU0i@=wZ+~^iE>NaEoR_IP3CAju(ld&;8Fv$tXzxk5U8>YJcll5?U)t_`H?3G_bA&g z*h5xiB#XtUbztr07>=_AU&+cfk9;mk+`uFZpFJ;I(%3e@zq|Jp`|n&X7$)eOr#@>l ziOl_7z~>ekV}^y@wdSbUB(ackilhQU343c5vnq>$K`ibmzcOMM)Uk=1W6P_tA`@+iewH~CGp(0({bzE{wg8jE_D1!ZhD*Qo zuNO|H^|y*F52tZGYut=u9Q3o`7b1rWhw(jOWVJl*)eX^GoH`7nZPGQxm7+M2Y3+{{ zZUeVYf=+{{ovd|M3e{RS=3~V;l~)QA=2bcAabbv)Q_MnmP8eezuLXR}V}h-8^b!er zdj>>2sO5v*1~J@2teqRj(t4(n_xmTPjIN7=LeK%jP zB(kENzokf**}fMY3BsVJMSLK}A_hdmZN@-zjtni;NZl3mqcPT^f&tLdZT`W}j81!3;g+twSlgEdJT`{KGXdEOa{Fg8{ zj@4(~6i+*uUa;Y%k0o;^%%ZeV@~L_<^okDoUdh+^&e>C8?N8RE$C0jq_QMS8g9{zG zzG|-@O}ju_qyn75);3S%# zyNQMW%s-wl{F%Rj3yV~%75})Mks2x%487)I3}X50B79*JzG(dMd_yyYcdXLn$Htod7;+tGJByh>spf9(?(wd2- zWlRD#v?@Uo4lt_Wh&qM~v;T*Dm4!8NXTQym;GTP5Iyw*16-x-XtNswh|16v1s&l?J z*W`=s8*1|2>tCTr>Jdr`>)d%PPEkL>N{cQy;w0srB z)#x$tZ)8Nq5!2xmRnwQw^C4CNTSQ+nN4k64Fur!Zt6D82!#njLT_V#Ru3cLq9a9y8 z3pDJ&4-r6T%yn6IcUha6SF8I?N!}=0@+$E`iN<7Mx%@~r zf^LY?z3KD$z#>lqz#A8Fer(Zdaqcbbu=Z6ln_=;BBq|EV{1FdCWL-ymVt`^F7nh^Q z-ZF;Yc6&nU(5bbcQeRh;tGvJx^D?xL1XY7}CR?1L9i-gDZc?ZdZib{RQ$vz<=8M0{ zJ>f))3E0joi0l4i{%uXCW%ORrO9i);L3^ssBIC{sw9TK^omuK;W@%f#LXR|DYimyD zYjE|JB>rEu=e!3`e?~LabMsMfZL1nsfSgI{K22~Tv?*R z1MQToUhyvsO{$a(&HDLz@eFXqyYg&!uQYkAuaW|Nd?R}p2jM`ov8!((n; z*<;lY(~?OTAnz$tf8ZQ8G(-l7HF5mNun@KU8%IQm_x*jAul#EmgO_0*qbg;>N}*hu z7732O_exolxGWuZ9(Y&XGd_Bv0zZ?Zz(LMee-e*SZCqZ31+j1A_9iPCfnaH)_9J$;(QGrU;5PQb>X*} z(lS<|3Zmqa)`Zp04985+;G3NZiE`eSvN@u{Q`{~UtMe;{g-60y+^1prho)I7tx5bS zi3~~=RWZjQsW!;SCRujO{s)pZP;MuT>{n4mTHr8TK0o5qx6ldm2-xF#l%?jtV*XF{ z@LOUY+Ijd!zUci%**!a-=YtAAOH9x_c32E0rn2Q?)UCP@r<@eBoMI{Vaz8Ahbq~mV3?ao%lJ$GpRq~-Q*rwzTw!@hhm69 zu!Re?Ng8H_I;l&Vc01Byy>|cM>*K{fesIGFWNmFI=OMc7WOV^+IWHztzL8;}$L8V{ z?CeNsL|kRtTMnKxTaD><#8L*Q8L!7YJ!DReFfBk_B1N9qEsH%U-!K2uStQRw!%R2B z@xXINHdobv;vG|uhu;`1{QhM;3WoOd^JezJ zk|O=3%;*vMnLCiDeY&i86mO+6zEk0sJG!1>mDYmf3~pQ!sUc^#Fuuj67{szCAtlM= zc&yybSWhi!m!DxR@(5e~azsGaLU(>GPaTFPUoym@2++X!AQA zk?XV@Q=xLA>D|7ZTZdPoBF6sEYj-pkotS-Ml<*|DEHlyP5bddR>G82H&s|VQJ{)%U zOlZh#5E=0K;NL+{B|X^aF(sTW0^BO+!pCWV_L86Iq>tuE88NcSTi~=ok2$ZkAiSQs z#qdpW!wz~g>P4Y)E7kf(t>rC1MyLVm{e}BLuG)(Y;YMCbC9)KhoX*Z^*}kUUK@ez& zOPEbuo-GvR{lG|4{;ms69~rZ6S-1R9<3>KNg&16PPUCOzP~<|mp582z_=omK;I3}R zi*9X79=CHnbk93C>&V~(o;ng`a2UwuMoI9xcXbX_PTyC~dmJ-G*DQ<_ApZ69C+-hw z7s{l4f%PEP)c4#--~h{8h5+D$GtD9RXPfRRFhDp@i*lplntVi@AL@@r{=XHjbSv`% zrB~B%HS646_8IaAYHt%{j7|7`;4#XmP>(c1;UH(k#YggvYlegSdgqEGozbUy5|~4<#+WL1?M7NxDpMDCkFft#76z!!_%Dsr;r%# zJXG|ocsa@fQ~RZ%Va(ZQ+xL!uGglu<_ok+nRgJGDNb)jGa|T*DLkq(We&I_-#p$;; z4WrJnk!$lyT5*wPy;tUCBZ$p7+Ubh_Ze-TUFhW{y$Rp>1FqA7?HJ!eiEiC!m1tiC! zJLC90@It&~d{S>RJgqkSpw%fHJnPW1a*TU@t2ADwI}kdB-bCv3^Sf@P7a7IVZu?*u-GD5>@j#4u(w~W$SG9OMN@ycCFOs$ zJ3ziJnzEHl@}zME=P?SHf?zPoinsW3QT*2p_k3AuBQj)wvL-Kzs7`PKd9GNG&>+1X zQWu}cU{37Onqq5y{};W)%QLHg0ftx%(awRmF({6SmV3zukhY+@&1@~-;R0a{0)*HRTmmw8#MJ5k%1D0tsrsn->cb`8i< zDKo$(p1t9vSKRE6%B5>+TNyXNgf@iC%z${~uw}ik&FO7~YGg&1omvyjx0rM5RVcfW z4;H#Ab!{V{L%V!XnV}bvgl5O z>C2@pm`RDuQ=wZd0pZ=-khEzCB8`GYg?M%LK(f!sytf^Nd5a2qmKfPOG*-f4A&o>d z)p75XW6tOaiP5djY?i;jr{$F@NNDM3D3mMetq{1TOzmbifB{OjD9Zj&P;T*#mH+ z{O-aosfW>e&+E^wFzLg8{B{rohRBu!=-v8IJuW8kC-v%&P(>poj;pVH^Gx4I?{TSJ z6U~0gC`NLms5!FoiOC$7>_s~@_y<$|d}Q$*OZ`2T0jq%I!3iKZdr3Pr4xb~G zy}(P6n~krk6y)oOyT-?TnQty`324q&Vex8HbdGOGYIaT$9<96-Lnue3pwohS(xS{P8J7OXNO%+%n7|B0NzgDj0|Q$KFk>Xn zsW_$=A#KfGnk=`&M1rTo16v$~30vsee#+nY!i@GF%r_qKQ) zAITQ8a{aGG8ade4(L$q2WKwv0M_pZfq=|1WZ95UW1?(A5QR)-O@P>ABp>~k*Ttb$H zdD27BQ-M~hi%ggjtZk_w>27}m-&VMq?lT{sWYtb6(5gL70pBM=bpp_}9VK$j5)wZ5 zjGD}lGv|qc3!ZrKToaBaZ*}Z~O2elaAG*y5rgO7Za7q^7z$(S_y%M5mL75q)0 zKDl+p3|*I*az<(;=^!%6eVBv21K;`#r7kf$l;{ZyW{{)R^wi2S?Ij>0RX(6t$EIK8pm z8bQY`kBYBT&LtRL;4K?0dkCU7Uvccy)Ca{z76~rsT^N|ZxeU#}!J0S_-?pe{_E98( z?8}-(_YDr4OWu~gxAKOAcC%#OU@$$jyA; z=(!)XDO(`0@vqX+9(L@a?BvGNo+-6RnhR2|1gy!IR#&ph*3itBZ0pnRp72wQJoM zAMD;Ogx^GFfHlTIX&-46+aq6bC8E|$_zvaez}f-!(_ey@TGFxBcGy}8B1;4pDekr! zyV@q<@PUh^Py_#l0+<=!Pr6hJLXHh)&l(u)J5jR^?-C?m1%Md6UmL4V5=vs@W?R_( zfqLW^&5^H9z%0Trz}0&;m?YS=C~8oRDU3w?6}&2vkA@$f-XR4BthfD8B9sQvyWzRp zdG3-=JhO=O5yI8y$}D!Rw1sFclN0?pbSlYMB_#=I>6I`dlzw{Tv;M%`@jb5rdV#Y5!%ad@LNZnbMz@hE zHvWHvcIj-8evF3H5Xpqu*;|iz(C+ixC$eDRz?H;gg7lAN-GK`0rLlb7wkZvCEex*bDzOY=+f-0gYgHfz`EBqdpVg^x#kL9*RBCx5ew8&0XwR+|DITlvF1FoqZ?rlEOB zp4eJbYN1srpT=)a>tTWxc&n@n+TGP;aHE)gzlTY?o4O8b=`YQD;^8DhpfUtGdpGW>g)IDTr;UkPCHl9_v8En6HUV$u8?XJtKb5H%sA51t*n+p8w3risp?KFnk*iRE3HP%3@U3A4l*Dvh=6UJfOBKVw zeizxytM(*Kh&{0JMp`Q%N2yY*qiC#~T1R0HOr$3R+`{kCJ+y};=roS>?(Px(1B45d zjVVMCo~PJe(k%O_5rI^O(|<_`9g}Webu=>yPKuFW0k4$feZ6E-h*JTf7B=J{_gZrJ z9>^Gx6^s=`F(Ioml|koQv;s_-wXzxD0D1eP27}mXSTNh}mNP1?3PV+-{md5f6EIGsd zy>4ptCP1eH&$;2J%+Vj{or z5hWh|Je}mEUt2`cqXElJTp>iROdtb{4j#zaXpUQr;*u+0YiKOw|K7RuHO|&$waE?Q zmRc6!rIBLH7Uw{%vV-nKZJFi`iaGmNL!l@)F!8UxfQMu(gy(Mb0iR)HO6}FZp!)0$370QKw86 z_>0L}FdUUemS@8sfJaj|Hab6%^D|6br7LN6k=c}VfV5GZ6b#dqhp?3HR0(6jtvB{X!d0qfGV@qS++8FBX{#>!RE?Q6nvpr#`YXaH`&n>@9H?Tx4!~EY9Oifp zIxbi_&~noSYpws~xv1S}2^*-QI&L4*V5o?)+2OEyP+P4qO8+SUIarO4k z?~T4*{IiVXAI`U9`key%QVCeP*YrF&Ra=$p_X355LZ1Tm zDzQ5#IJI1fhJv(<6S{cTbCE9Mid{*ojyPc+mtErviK}sG zT6lB<_SN_DIp?j;$pG3^bI3J25*Wuq5(}%{LKAj}-#u1m2emI4{ zGc!+P$8HclK787OS49)^1V|>pmb>hh zuz)PD!OxlP8pSrz(>&Wi(y}?SNGwZR2gR`s)gJz`8JVz(hmkMDh(20UZyLfEag0U= zc$nMi+SxtF!6`EZ24qy?>%Hx~dGQPRW(2k9zxDg7AMb?02)xXFUPNCRZIfR3WLZN) z5NbGjv_i|rA|nuHK~jD}(WTdZaNoPq{p^`ivd4s@U>0YA(9Vh$IQusO)r9H}w2=>- zI*3g!#^=?zZQfUsyZF&i*0+#DKjVRB+T)2RZ1rxC9j*O7>DDS|>g zA`t`z&{I1$DyDtcoJPbaI90w3Ymip`2Eb!oALVG|?HcNmYlYTBtpISPI%Bz!*ZJOR z##<du0o#RMzz%`MIH8A+-*VeJ>++>8AwGx!z$i#)QMdR!s!q(;!w#8P^GzY_&;mLZ)jxaSyEnTa zlxUci2nRiCmnz`bgt?%{W=K4Gz;N3psa^&I>eL3mEz4tlym#*D{W(%961u+ggZld*noY%M zxo_CC>dqa9T?D$>^)T7&IZ~Y(WE{jC`c<6`!Pwn$VTd+Q?lbkJ!&W|}7%y)WeFp+R zW~Z)6iB=v>=f}i&kWQP3xct1YkNe?dB$4l3S*!<)o-5QI%wX#bd;iEVj_aqDIEq0i z!pC@zNYp$Kca5)iV*0$|uSgUW63ORMC$>^s6h15q$I)LLHY+xPF8K#^{1LAPbKfv% zZ#G{wDyK5Z*hut?+JrT#gQ84}ERjwRguk7H4-c3Z3xT<~$!C5vuSRewoV2LCzV(a| zRY>&P?M4hV3s!dBOn$}wAROGu)^ei!jCaZcnij8hg~k+sJgYZ!x8h)HFiHbL^2uk?`%TK%gcroqYQ^3Hs6?38O%SO&+e- zJG~Gnd-AdW?Jv5w5#l*|YM08>t!V^pQy$SM?yG$u;uyh@>G%d~S zdFfBqLyx~9KI8cE?qIAeUBlsG;451_E#Sqyc%~TDu{`^C&0nQ07OzdmqLo9o^G7)= zwt=3Uc*jbS1Afi0p>1FH&>Rt#hwyfpmkZv5lD$Zkzw8L<_`~$x|GxAclZ=vi)|v68 zUARL}+RyZFkRDWpQC@}rpRD+M2!i|6f&y|AF29FO7x&Rdx7JX+g-?(a^!%&dJu{*FEw# zmeIHVbre#Tmll>3pi*|SwKLbJ5wNu~`psJDn>yk%|L<)A|KlS>!|)5M(J=m!Yz&OQ zSQ!Tc>#vUxzoX%QK0<6vEWe&a`gUT*=B8#&{~>9RbpH+ZUyg>6i3yTU+)3Zc+>qbK z)XMljKugid*jnY6%4C3~Q~N(3`n@V>rtk2dbr3lnKb-)bFr5gUD4h(QES)}`zP_Qe zlQEqkoe`Zeoe7=Euh|iuDV;f;6`eJm4V^8W?f>R&ZH(#c=WGrhKh5p3SJh|F13hAG5H{w(Z#-1sm;Far0B5hIIP^`^IbDzp%N>TJrm1A zXg#CPk%>`Y!C%bG%H+`ENRQ6q&|(;7mYxZOJhc@l6;MiRQz~+kI`fCR^}9$h#nF+W z{#CTUe{yIHQ19(z=qcu-2k}p()-Pse$^=D)rpk2U8{f)_m6pDS!Lb2=Jqh?@0$A$y zh1B2(D7Kct&d$Zj{-ZdXh#MRRp=a?VD}3Plygoqx8KE}5y$RSm_=?w4mT}-avN@Hh z{Y?NO_l?H0#0L^3g>z}$1yF2qOb>kzTdhKB0w93^CQ4^Y1tqBpPz15W_dlH3_5M%9 zAABQAD7o(yQZ&E%w1~8Z55DQ2oUSifUVAo8O?RRWU+^EQJKwG0A8At~Q{#&#UzKm! zpx`y%^$%Zh{38n^OJhPKTYXDVz0a75apBGJg-NBk@ufjTJsYD7gJ-;+^schBhN`5l zwETdGrJiGezaxXAuY3mO$tt9*&nC3A0L?#vlb6yzWDk5V&$b4j9Ksmp1mfvG40b=L zVPB4%#VXIgsF^B}ry`N*!q3&KtJ>V?__p%W#GS9;57k+Zb@9(YGLwUI^F8n>{kJ91 zH^TSB=ZnP6kH5IuYTrUgbXXM9-;qx^?u8zeOszxV8~SQ%fPJFF zYU^eQLy#gi26-bq@;BK#&rMMHZ9v{s#%g{~Z-aa8BU8?eY3a~)}Jls)$3s|VMh#3zVI&< zKgJiaU!TEAT^Lpl&%@iG0yYYjB4Q5dMhuT8-mt8y`F4}pB|xr1SWuluPv?NPb|^C^ z$_f6N+;J>7uN#_K_J6`+D)jXYZ>(_esX^ao1>1HU?fyooZDO~LLmf<`dVEN9saIq~ zA{5!gR$Y}9mJvTofEdfXnUkm-zjR~x`{j;vJ7HR?c=*cHkVRQaY{V(n9#22#2PkE) zD@Cz3GGfjgczm=F8<^{-{3)=&hawcpvpkiB6A3XrxPX}yY~^MPC%;n^@V)_7x$2E& zv2o^{JDO?@RbWt4g3>4K#GiN=mK0}FeX6X#dN-5nl(A9$uJl!))gl41%i<$u#6rxF zs#F@=0k1{iVtlff=3;lmt@upW10u2=ds2V7e{l3aWNbhA1jefn`#~92;iV?p}CT2)XJPeY6McTM3`dyle^5esh07uWDYAsP2({ zJc0*~a8aOicb03CO$dIZb}}VbJgU+<&5}1`-Rp+3W~}~6BmZEnx>}UJX5g6uO=E~l zM@I`rrSH+BV_Xj5x4Jejwd5So>VZFWtkCftB-M&jBshKpKV;(Xz4}NyZ>#e;>jWQdHtdU*@AOOY)Ay z0*!|Swd@GrNsSl9%_ViZoOxsv-#G&y+1fu(gDcx{#EuS*Gd#qCp;J?-8Y=y2+_T4U zx2jlSY&I5;`?nIj`+lm6*-w|9dvx};y018@1vQu-a4{>&!}(n`x&wNHXM+cB!^I0- zCqY?g-I6~3&py=hj7uSVVVgsv9m(+Qu@i|(_PM5Chn6kdo;|~tkmj^{Okh(tH7Z#I^a%&kg9=gklgp# z)L-`R^0k0jM2cXz6@GJ!;}*ecALJE4^gA*so14W5Rf*mEsg!kk(8!OF#dcF|Yz=dn zgZGwfmb0tYxoHz?Vp4+`Bfpn(&ZG`O!=G`aULKgC*)L~<#VK>}zW4B(x@F#F_afr- z6N4WaU$v3OQ*}2Cwr@~w;^kWkyJ%HCyuuM#3{K<0qZ(*0*8vDl7+FV%xbrvNSo8GZ z*n&bwt1+^zj{)*-)zzwFA0zO@vAog#K3SQ1L~+y+ENOs^l4?E8W40lu!pTN&9wNI= z{>@!FouYhG5}FT_xOIorHK|YJT?I3;0|1{Mj37CzYsHufpRGZOWk`rD*Jg)LA+WdIt71laYE92T-(1FrK>X zRVK!+ksOubdP=WcVJ-O}e8e&kY{xC-jl#5rwSK`KvxNE;0 zYm=&;QWQ@JOV0;0SNRFVMMS}=@7f3-YUC-3WkB*8=l|f5X9NuyD#o#%@{N@hDG;H} zX<>v8c~bEc!Xg&X_X$juQ3jM^V@gm}48h{vXqhpgBB@wGxHlkgyXJ;3@bX-NrNC68 zB!4OVYn&Btkn+z|gejSsqyGkL$$ z@7(`a;RTU=wD3czka0D@+Q3YDTBzS{<&Jf;R}Edyn{Ywqms#ex>;*2wMh1zNLlZX# zOf#85rE-)jR)Nl?m|&Z1y3+tdmgsf+?QlCuR2SYPw6y1E+@0HMaT($0Am!BNHp6pW zOrQuVDKDu);6I*KE<0h;W34>tD~0~x<4W+%n9=NG&7Ig!_uBHqI0hx}kY4J%^S7`= za>`hl%IkzHgA&HmFsR^t5Ni2AUqsL}PUa%zJke({BNMG(ZfFHCS0g-Bb_)^JSe>!_ zm1906(?t=k45kVc4h2K2X~Y#nMth)(EkIiX>`8szUs&=_&{`@>zNKnWuxy*l;9;dP z1eKh=%j3;5$8^nT_vV7~tHL`!cNh+mobN{cq9<4xVrhr=JMag)7>3i1CWA_6MYZ3b zki}u}s+WCxkA=)&9(p%T^$`0qkSU%^kJO(Ac$p@8p0os1cZ2&k6o<_}yIo>)@WhtA zSYw&Id-P|s_x70d8y0iE!-IoXO$UkWRp^l&J8rf-T9EhOM;YvW7}8FW+KgtG6#+av zHISP*>E_;9(!T&E#%*k9Hv^myhk;;yv_4{riu@0ERCUIC)>lGQqbXwh!UIJ9%*YZR z?*Yv!&BkrUdN}A_^{U1uno^JNydZmo4hFbb?OZquv(aqF=5StiP7`3k7Ru2xNsUqY zE+oDCaN{!LpR?fXjS7}nPGkeHJmKU1XjP01LxCW^nt*2I4(@i}VV~6Kez!L1$ASI$-NY z`{9_i6!s$H_(JZG)F81?f4;kanPtd#7EeAsWzPMp9XMaioopAFHnFsOgLt00Pw8pG zZ(N(zhSE>4!|mar<0?L-z4*|3VheGd&#ig!J*-Od;}FFZI~@J@^UUhrb_d*%sy)KbOB z9JqF<0tGcgnZ~@DQ_5yEP2Ryv{Q*~VE_OXyrf(-wb zL6II?nH2iK9;{$T>#sHXIK#ztS_iD_d%=>xTpj8doR8+v=3QJj6i*^#l7yBb&gCAe z5I#6_ZqxZlvqcr@?fnbSCT>M}+01j&k_v}M3Qd8|JG++Z32kcy7=su)?IxG+iI zi6O5Em6ZIz3{=jA_fI^+u7_HGp>T{3x$EHU#%UjjQnI^3*{uopvE7?&}(Kav*@N_-u=KTNfQIN!X08k21bY#s%K_g&NhY}@kp@TSZ)we&BW zf1X~yBg&tv_0QzZ@9$Dq?4$!nf=QbJX5(}AB?)L>Ew@6ID10x0FHxsAaxmRHmhoWt z+;)9ZemYz}AQrKbzF(1JBtY zt7w!zDL&dSLaLqc*>{bZ4;h-Tw=bmOv!w;#yxmFTJhfr(pHJsjhq~e!jbPb*j;cnp z)CqV2in1o4%u3ZN0|>PAA^z4mw5V&DEdI!eYZOz!N>R~>hHBkbTd5g$M$h#hR!UoT zph)~x!SVaWD(eKv_@(=7e)#)Eci!ee*h}%ct@zJ}f!?dOKq5HvsCVtA>X3gl1ujFi zkuxxi(%IBZ|IHPi)$|TdIWK_gh_0xrDYyAfR_yW|m-IRQ`>PWwpFN!CGtN5G@6tEM z?goX7q9(fVEZy)KJqkOH`fpi=6VIod-gUXiOr9ne8(x6-5KXDypzN!$_*{}9OW@z@ z^0oAd?{R$x1x5Hw_4FI@Uo?4~)03Y!Y3pK}CR(9sy7BKYL}Daf)U${tZQ5kokvKET zh-Efbss8X$=2oNxJs~eRid5F1*EE|ADaoPPah)uJv8w4jV%sic9E9291gA%FY}N!1 zGd$QVHg9TN$zv~gpuh0r54+DN?>4pcU-bXZmqoll10@0!p&-x9r&i}~vxiM(t}lDDC^mNV%(Os|7A8vqPyhWE{0gk$k(4a_ z&)o8K&WsYQs&Qehr>*mPOTs~6%=*zGCR6oK&>Ko6?b|MCY4gNrmYhf={?7AiICGf; ze|qm#S;~g#0Rdr!Mt8dvs1jwtuLVa6e-~GDS1Y+H zP=M9m0uzJ~plDzc21^q`yX6k=rJu(?BAD`c`YYx)Zq18bS`X&Wz91{4N;RE(b+T8& zCwu`1UN7Z^r3EP9vMGpO3qLtjC>I(uq_Y=AF#73gh>gFz-}L(tZCVz~yAtKP1H&in zej58&E+SoBoj!t_kdiyB3TVpuG26;>L6w!kcXKD*Jz!`%T8sr z%o{}!yG9%0Tf$sclx5h*FeCSXu$RfT|WYsICBsi0~i%PUGUV{&^-6r3;a*?!&m9>AoC264(Cye zM+9OE8X`DkXqC${CU$`xg-ASad83f|xMWD*MRJ6SYH+ZRuiP-r-4f^~;cc{uy&k`R zM58{bKxz%E+%m^t*o!5898o4_nQ9D;fp#k_O0ek==q@aoS+k$Kxuw4R{sVn9KbK|v zXB>QD^Tk`5{zF;R1u+>Le-~xrB6gfx89TP^#fMq-8YI{*ZQg5N-N?kBtxpqQSBOvZ zove1bl8Oh^ghgg@3{_OHl$Xt~W})n(A>*2AnU%l7 zwdX3+@3|Pym2o5s6eH8Ogz$*a+SDLN4;&sjKt&srVgB~ue&X1GIi}_pK-+s7dZt&m zRxvtvfz1j&5BaDjVG;RP&ExUQc5*YtvMJX+hVkdFO#Uk+l>T`(+l950lFEpF%`LKZ z5tdRaGT4P~?_36#a3PicoL^kUI4i|~{_Fzeu!ah1984NF&Q?MUXqC+urEF0BlOyK4 ze@|7e8d(;f8jDF6t9kgEhAmD}kmm;ow+E+& zHs>0yA9~9|I;G!^d$4a|R_%*;mk`HNd5#Sl!pJd2b@b+TpIDeULif8V6UQhk8s%j- zslNFW@9QBxf)h1rg&1)tz!iH=SO}K|_L}YBy0#f~zg8c7!dR(-g+#xp=^({EPYoNfb`=A16- zn#-kTjwsNMyW6MiK(&KdsV9Ts6s=W}x32JTweIC_UZT=Sy83>CaHAHD4zsjE!yZ|Q zh3E)`@cFjFJrLn(&_a{mG?7v=`kD%%;hIg#)Y2D6-Yzr{!J21V4sLMMN7m6=ZljOE zRSAC)@_$EJ)T#bBTUJwdG7Aq+WOr4w?=Px&YuV-%C|DZ%#%2Zo8K(vfbLHb(<7w=? zSMa}Ieo5v)RQ^dPbvBsq&!OqRm~3~5yzGx{+B&&dF1-MNxWN;6Kqq`vfRMsDg2X=v z&Elr04)wP)1@g`l@T0h{4(Y(`6a<^NL&5q<7`IcO$BoxUT1!^q`KJ#gXz=2)>1djv zUgzetR4n-f9eqEh&Sa+>{j{1lcn$wAz<)Ks(s$BrG!v0&T?)U84RA@wAtvyEMK4X= zl2v1f%90Wu8GDc&`y=B!JPY9xJP`KHlf?#Xd zPATWo$pU6_DWc6-+O90FYtFCXSJreZq>wb{F2OQu?dKQ^x7_UyT&GJ6K?)AT@!}46 zM(_b?Cnu~EhCt-u!OEY2mMxkVVzW`&w<5P9}!AI$NluginNdVucWeWDCmJo4s z+Ab!C$!+heC?Nq-g)i6^U_Ad+%|Yz(k9H-hzEe}a%g5w_MJy?Ui-`v5==5i*2xfjM)uh~(27#}d@7+;y5K9SkEbugk=>$STCc z`CKLe#u{!-<=s=4+l6OP7xFRXo$9E%!W`Q=#`Vjl`Ep?@Rq4kcDgXXa`oET%WoDkA z+WHfOl`MGCMF;=dhiM#Ho32q=?7#>D{}9WOyNr)+7n~BnJyid-$>C>QoICla4gN=r zC+Z1L&j8pwVnv=ix#|?N<@Rwucy3(~pab2Yli&ALH_ZR|Qj>Hv;m|oY>(yU8c-hSR zhS6aXo5-H&;M$X>fyDjk^y;`UR1y;VC#WW(pP)5+AK9Zxga)B}1BuAv{#x0QrdOu? zj{t-wV!hter3lRpvG*KKj^O$F&h4tj+^BU}k>B7H&6OB?BN(NdZ0(`O+1bNR)$m4e z!%g^7x`vC0FIhn7SfFXZ`w+(e!Pq?oi4rtyf^OS3PTRIl+qP}nwt3pNZQHhO+t~i+ zo7tV+n2DX6iY!EBT~uXMB%YVXe|@o-(Sjy?!R;*P&$#Nx5iiMPdl&oTiqU4?G$9{t zJ9-PrxL=LxTx+_8_{YByjfp7hy!tqe^$=eJYcl;-dJ_zu0AFZ;n3bj+x3u-W(q2eq zVq(W_A(hP~*w@pX#dGm^(cBJ30td-j@LMLp*_rJrofZ4SdbQsRI5)pJ-(?tdGmS=877I*n`t`HNIsKuVLarTTAjQ0` zO7ez#pfzbLJh^Ij&tC5{xY}F@8!#P$tNYPJQ>&5zn0f^&Cjgr?G3aZUE#q5Z2zq0V zG?C++KBOD^_l?At#m;)$)B{DHp*JuM)i5k~Id=W0FCBWDpkdxz-Tj_3Zue`gVa2J) z&5<=e$T&IUVQj&EI*&@zVusdO+sVItYRK$zV~z>c*p(qRXVGa9zsPf{lKrQF=*Xb9 z5gTPhiT{ZGtbx6!TLyjGlx;0q^MevH8i#lPWsl|7(Sj4rSyyx`)W}ubV8XmLZ2x|9 zsgI$&1n%31ZTu%&E zINkg?Bg5Af56M@XKD64>!kB~r04u@7gk^x_!(I@1I&ZQqV>W(aEbaLlDWS8RQgMo_ zJgI?=R~rVT-V9JQ-4=9vNx6Abb!$;5pE``WXL!ME@3iccG`UUX%1J(3^RVUG7H{_o zDX4t$J4p*P8q|sO5W9`-65I;n<7||R1g8Dj4lp%7E$f*ZC5HT3yia>Cj+V8vdB2IBoo_nZ*TJ$g&eTi53gj4g$ z_=bihpV;dcg%hNIed_-#lg*E7*cHW^l`5w@Z|}qT)i`y${Y(<-ddj{y_fF58)mW_B z|FSMH?+}qxi5WRBq974Wb*0mD-7ROa00#1Me!!xc%xg}af8sroWIj&-QqzY3AN&nd zV}z=nDqC8FC$9*pa4kxBoX@8O9dko(wH08&eb-+zwg19~$PjVqHK4MR6YudhTc7Yh zDRZFsjTmo}LUd6} zUB$hB`Zwab#ox(A9EhaR>?)W8(EI?k+t5(6`rgdSU8#pOdq*%ec-EWTr;|OqZw~tB zH^4b2TkD^)%sZY~c>6^YvoGuo?hB^wvwjzZHUUs5i*?C?gdQhd*u=M>RZyAk*wL0yjQhUO_5m^?|Gsw!QR7 zMWK;UdwfsS9=JdJ8^D(GK$D;Skl;K2J4?HpR8lXrqD7p|WwHI!I8T#gYmq z=yO;a6nu9cIFNwAUi508m1I8oa4x?y06G)d{DUSIG+7&K<$!>T{-msKKr-7sjg8^E z;8_;Jch8TNWNm^Z+W*YrbC~1yPoLCp(evfBC;jkW}zl z3bCB$vI|0u~J-o;g3OZN8k71`bMB0@PXE64QkIT~17cTKfq^Io%S+ZF&5pk5zTBz*x^)!37Zpk^x6Fos>HHDspXLLX5 ziz!!-FNpN98>78w6F-sC&9V=AMtyPD+)U^RM|%n5j4pOn+aWJ2t?|grAhkMvSY@NS zA1rqCuj@4%g=M6NFjIC2?|bPf(k6N}ccqRzT40TIVS?E4KWz|c6RgJG)mef;6D{z7 z$Ko}W0ncTT-& zWV7JSUr=zb8el6-fpH=|TL2^ovoBxR+MapBik=(`nH&KM)ikHBp>J@687l<=%k)A` z99|i9$(zUzR)V~NGC*wl>o>aa2Rxa1VCTp;WDc}Idav@^4S@|I=K;<7UL%=&t9e~^ zrJ4EEzL03~5-_9T?-D_7R$9Q1e!H1hlNj3XvX-B=L>aiE4~|{Dn3P`gw8a3!AR3)| zi5yY;2lRtwo>GEkkU9~-dqVZfhyOA1)^lLwv*!!bksIZ)pQgP&WyLym%~vCM(K z(=0`dQ=c!|x_6u3z|_YozYbK=czs!7qYz3^<`HL-Z1f7#P%6 z;rteeA^s1HV7{hsg}1LH>vx}@U$DG_qNpOJ>s1!jlh9p?11BU{oS8hJmzKj`q>A6VW&@U${2tYMG^<>EFw#wq={8LaJun z?SV;6{me(rEC>BPnJ*@$9oD8DgZS0^N`_|BtDCdqjAH!|Uv3>6=9%kcmK(ev*dg@z zc!f_-fCUD-QWD=nQ8QxPU~rVT@-lnbyIZep4H~~KQSKf?i7MrW#QM0o!x8yi&G~|V z&b$IrxZuB{Lz6Yqp{WiIqrLTJfSawa)=|dV%c0xQjc12{$YOHEW8acF`We&{@^VH< z>Py&7Upq-=&+=FO-j)XM5_@S@I`^wYuX%?X`bYFb;4bPlNKm;&IXLupot_rH&f7M8 zo;4q%9IPZ0-b)frY@MK`4dg*4?&+F6E4|omp@tPRPqG7c&e3lj*O&cpJ91(i?n4kO zOxm*FFDblb*NYMJyN3aJottFWE(+smAlRz-2Q~5__ijaLytCC)#wi{*3>B`qrnC!r3{y7r} zZb%eivR-c!R`M$cr8O3X)~V%V;lYv-fC5K*!4>$7Mkt85y?wUB4KuZHPeDAK^rj27 zWn%a*+G# ztnEYH6-z@pprUbZpQ^x_58&N^<5i9EUTfojdNynQ=uGG0bZDrdTQKwznIX<;D7;Vd z-Nc11D7r(T4hR{__G;=AiUKT44dNM@r9tFB2Pow^%#Cc^NXiL%Lh>J3&}H_Ga7gK9 zv-e>Wy&f(EWXd^m`cuY?qTEc6u&^;AeT>yeVbSZf7QV)_B#3$rtV>KGWcFo9TzD;l z^AxV!Zs!uxe1M<}rKUFp(FR_ns}Sb2bfXDl*8j8zxEn=-;32aA{1M|e?xkJt zI(m-d59K_0d3%?Jv7iXEvq>62on!8Sr@mk$VZKq6 zfo_-aIfJS48tILGgq~y@Pqz5~_E_ zKbDjf%|lYVW-T!!rzaXlSAarvU)O`nA$|M9Dgh+;o&Y)qi%$AUp&Zy)!#2n>ghEsy zbJE`YwN|HS4$m5xvR7IwIsHn_5a0ge;Q6Ao|YZIS~7d~TQ0igXuXYJ6k zr%69L_UIU=%K!?KO{n>^$k`hG^r>cOa8>`HRBv5QA(s3#aFP|Nq>r*qghe3v$$aOm6I=tT=QV}0zD`ty^)rOyICpfeBqnIy~($@M`Do_iH5=lIb&?%&Hi|fqO zPuA1!M5WE_e^ZqU$x3P8kl?>9nk=h#^C9`e=)~l{*y?e!O|{~K=w@ShMTOdaBs0Z~ z>(f3?R$Q$5Vs!t!mz*SGR}+@`APM68eKBj%-h0PxN)`g{Yv^*Q zAn)|p$Oj~I+2eH%aBfDY8lEqxS+0~_Fa_XL@0>by@T)$-axWWtD?Jiv>h6RBxG?(_ zx7&~-#%FHhax}? zo7&}JF|(=r6}$@tK2*Gkk&HVHI2aqmo2|@$t;Z<>K93GN-!mom4M`cgSZ2Fz!uHYJ zZYyaUj?X92vq1T`$D&DOUKx?MO3k{%v?vETF;$L+IAgYHJ!n{4C{HdRzPZS&!#K!> zZCijn;z2JWo3&zhcXVgCrH<3;3t`gF15+f#?Q6+Nb+J?(GO8HI>PZ*Cbi(hluls+# zGweM+VN4YBAAO=`G~Kh^t3e#rUb$6~`mi3^NvTTb;yI!1L{#Q+IP=VA8tb9Cg*u+f zOEerZsy3bIqP<4{-%4ql^K1wqRaDOA7dm z^?*Gg_+WgALxR80;<*A0^b)U!>**v0#xJ*s;L?Z$uc%jrF&@Kw$2|TnZX+QK4xVIx z8TuCh$+72dSF0yw#{1U9ME4M5l=>!we)G^B72vqt-oMR8eC)Rs)0zYD49H3FBcw)f zhHt+51aj!0C&!9qj}ZeTtF!oba<0Y3S+(>+${&M(CaMn1T(XIoD;nFh!^qCD1 z{9^LyTn{cFac*p>!i`kgT+mKBMw!gW`!Sj^?+F{+^19VyvwFJn_E|7rpamDYrvp6y z*vGt<5{eD1oojeS*DjuOv!km;01N*rQ|u`$MC`337qTDFr(_lB$`Bx`-0`8o`rPhw zwWI1q)AWl(@O=Q~H*Um=_9lgHPZ+rXkJNL`@y?E0G<4lP*?bUb#>7hV0zzQt@0Rf6 zy`YV#9j3U5-LK0hC2?LGBI$i!+V@n<8Ktsv>H6YOK7^AMF>31i^SkU7Ha!uBX{t{tmr6(o6MQuTfiy4|&QnA4YF?oZ~P>r#UAeV32+cmt}4juNiKB~pQ zrGfw=5`6Geyk)!3^PV(jn4LPIM5nxFI(%4btYYc}FSr*YdGN)T@mTomMEBZ-=yM?i~0oGJe6*#LWGD4i{*} z;;N{ZQNvhf);LvyQpJ7l*+y9CJ6b7AR2PZYu08qO$=QMnX>oQrsLEmtK1p{O3rDmdo1d^n=Qgx375&hv?%8pxiWgWnp@^mfiLLzo8$_ZY z$5n!VBk6PeLj=C`j3=Wox7c&jtGPsoI|A9IKP-i=%|1`!79QL;SmZo2GCY23BEbV< zeZ*N1IN^`q?s+*bexj5YACiKa8*Z!C@~!DI@(~C4rdHxsE|(K}Y-Ck>Z|JHzLV_|hOxWa>}(}97veRO+9Zo5_+ zmv*Pt(v(^JT7IrsZC-`5STinW!8>AiR$a&18zyHrk>85c={~*7sMYPActYD!rFc2N zrkR&`=%sJJ&6U7nPe?{5W3f@u&Qls)S8NPGs!0tYy(x7(>7^kSILY-lFPES!-}C`w5- zud%dVwIz~paVUD3x}+f&aPBVBI25#t2tn9eDo;Kq#-H!>`>9EPR+-ti)wBXoPoRx? zOQ#<%$Eq)V9?}~0Mu7hNs6K6-y(8NxJ`EwXv@bjvc^^rA9W#=b0~%Ss%+9=kk5*i% z<1u+9ymU`;7IEA-vIL}`$Id8G`nMtvAhC^IU>gM4wJNVkGpX}9jHN%od%}zuW8B0^ zJ)w+rY$m$rGy-Ko>^iKVyW*d1FKEg#{EF$>Z6m*!x#+y{9?aXhO7x&?&96VHQ6he!3n;6E;@6gj(Dgp+b zXrKo8Z3qm#$PtEn-riW}RcA+x^tb|RT{Z#i^@kB;B82hL9<4u&U-anER*h8&o)ykI<&w)ue@=io>~g-e-J~^g9tzT&QD}6jwwOwC~K=W61@$J zPOt0~hyt}@2|F?fqb@7=h)oqtV+a7bXqD^uGx@LmQ29DDVi4BP;!;UBHcnf(4h|D|4%>kex4<4#z@v6o(Rh|)AKf}f87=W9Rso#5m)#WRn{C4$H7F{{LH%Jv39>-loLj&W6Bt#ihQC`Sv>MLHqpk>U=Cac4QJ1)`7y4Wg5R)gs&BvOQ zRB@3s!=VyTCYx&X9&Z)kw|hkgvXeGzd?%WS(};ypgRx>Y zkO%9g%yvOIKhdVSW*DV*nA|GGu}UX*H=aD;0?xh)G#eS~cm;7T;wQPxynu=HY(tRh zwhwrwC9gHy?~K{YO${TqvMWLFm~}5%0am>-M*G8N-l*Yr@8y+(O0syIU6h_QmOzY> zmpf3Q0^{bO#{I06lExnPHvnx2(>4qk61l&~^H>gHbqqG7M}R}MPd{df3)so%f&Klj z65pxI8y5$OWT#Unc|Ox93I@N7e{R37WryeRd?)G*Wcv)ap50rbHgQku5clo?&4?AP z!x!Fq9TFR!uJ1&0DBXv!SV1)V7@QP3y03!TuDHIC?<=2YMT@8%k{S*lanFE7ZAJR) z%|??z!BVZA$z2u1Y3sMjIhTZ!q6c3~!#zdEmz&IOa|YafJWBhrG(pfMubyp$ zB-4|j5 z7;4(PrJVhaKjd?_9mg4qQ`fD9{5LoAkTT~=Q)388(74+5{SdRd!TZ?DOQYlp zTSe5#SrGw)46QYil{0d)Rvfd!V)09(ix}~)YbCVQyBEn^QqmiQixrvReiW|5y82nu z-@7Om>ipAXRHOsP12g;C)YttjC3^k2)|Q}d*!^krLz@@|-#=f|fBEJ7ESbk0xy^1+ z>G*2_4-ZjpR-Ds5F4FrwI(*QB_EI=WZFONi3vq6Rq3R(!+FudTG)m;G`5-ynIm0+n zcON-&NOM4eB?5;u_$YIm!}T@_^+g*-%$x`Df>eT|5x?xr&Nu&nm~L`-p6+evf0F?r zr%wr)d2FOkLR1b@#GBD|a(5}$$1kHLG3z0w88gA8x{4AXe`i|Uvq{MM!+Q<^m^k&d zZOcC5$NPl+tx4gj1^4Ds`)0i=VNxx@<|=A^CCQM8sQQe%)#0V2><~9l$2#001~eF` zSW3;!PEm}MU&&;D)AjjH)}v_)$xV2s@1@_fO@awmWQ}&*_lFjLGX<0laXM07Y{HU1 z)xj0hb83~v(Blj8$)l@j_XmOG#k)yJ9h>!%qhGt-Qbn7|;Szzz3N6p_95S@u=+K7s zZ7GeC1X>U^Nm8wyD*Irmn;m4#F-{ir;3=O4tvF;N()G2fk<&GtF86debG@47jwg2H z!?FyIPX|(1sMgoI14WRgtoD7)otZFNhEM?ZdMBk(BCJDMVS__r=?|ctRUQ0T-q&+0 zX_TwfBYW|RjO}j_PXaXVhYj#;i*RD7KNLL^m6#OFXK1v)RL?mdd5=hcobJZxUX0~h zbVeKqmO4He%%eMI$XTLPJmGDh;-p|6*OJD zj&g`xUJhf-kViD|o&2Iba~~p()4MEZh@Q{ zfHdVhK2I)&bLgw+#!X{8Q3O;oa0|XCk098m$%6B$dPCPQU#r3R3qv|pdMK)&QYnpR z#GIm@>g^!5CLc1QkwLz#-AhegH#%~ebX$Dwsjh!XIjDk#!b-8wPoy0!)nheTUKH%h zh^S&E%n_kE0_%I!atO-L!_W33;3d@oEVl4#a*ls#h~LbejmbT94KHMBo|_G0YT;UV zeI+WEP@zX1crOr#&y*;LAfe`WyvScd*e93jR+`=``8Zw!vc(YtHQEziHNW+tg-LyH zu_B#N?yYUDm;6AK3NexS-XV2WSketuzkAbT-v<+*C zPd(x-fxI@99O+N3H1>q@v77VOnt7+-NXO^_~K~g3+}7ycrHPXpdQZR4gfz9j6V{r*w1PuifDLC&EDbbWZ0k^DNpW@ z=^;Sdp&o$4^);-krYz+6+Oqj{VD_IxHU-QUQWu$eU&U#%i>s3CJb&l`K;*BOLPGH{ zs#7fm-NMx!4pD$&RF9~2x1G2K*lsoSLbUGA$rPTX;;b;)%!(b0{f@OGrpCh_%^paX zZJi=<{uMj1c-S!N1fmpEP`i;sHmEv#a$Z&ws!rK5>NEguDI?xZHf)U-9_a5M9bU!< ze_DSpidewTNsc&`@LIWJ;IENdMS>8#tn6JPAKU8Oe*39D=}-5|QgtLsfoJ0xb`h zls9Y;3f`2Z{d~^>o56xf8%U|p{BU=7yuji|(;UB-wXZ(i2&sdt@qfLAy_x*4-ROao zZ02rq2PkMlr6n3%Y=Zln;N=#+7*Kl^dKxMAvceD6wC~}a2#Im&;wY!L9{jC)zIsEt zSG27P$I?@lk_X5n(%9H)lhTlOWgcuD12i~s2+Dy%;UJx`Th{=qkl760Ybk^<3ASO5 zU1J_NMW?=@^Iiq+c;I23DilF%+{RYN9B!f@oZOt+&%IW{e|^eK0bsVo6}WF-6Wp5= zo$N?ToFV=O!nQ3S^4O2Mmy;0>gT`tdN4+YVTxtt=-gOQB6C!rZpr9|s%|-;4raYHE zDkVea2%YdDxSY1o^CtBENg>wd4fD->FzFCtQomgpR%R7Ebb=waZ>(|~E=2|fi-qq) z7Hq_>(+7owo2^UW?42(>eXu1QmqwZQWcZvq;Pp6O@EK1G!BWVsFJe-m6y$?Tuk4i&gZ+{Z+qnBnuJr=CsAPx2Vz7 zstZ6uRB;Oan~uEyj+Eu>4EnKOMrWsf8&1Ecq5Fg<6Ft+{U6e+;&8)_~5V-4xwSX>z z$Zd{~sjtkeN`Tyu0C6&nvH|SS@AIm3kLv?HH1_)3EJ;&lQa_$d25z(S+#x3G%ubwO z@d&MRc0fU$r+{qLdltu89H< zcZ8WCj1HT&70YaV7;{#x9C$39{ijkA25Jh2d*b^AOnuIi&p``5b3rrq!q_p{dD1)y z2vtnk@vQB+ooSJch&IXNJcbex)9oj09`~QP`dy`7XPzTOE@skbTCmK&ek%fJ1RY-K z9{jflE?E(OP00|i04b@dr=~(fPK;*?_gTiItduZtpQ%|d2d2R-ixAHxDCXs_-khwj zypmk)mLw&p{;B-%*@WwQJ~b-=l-VB_Ligf$k$P`*#o7g}lD(fEpcQcPSG4ZDAeQL2 z6ubJ3Nmj;kjqJ?VvnXybsok67d?hSSm%>PvN?4sE;11t)KpF!?#Ufp;m9(_S4fjCn z=($!63!S1lRlDDn%$)G=b&;dj8VPIe7!5!>E=xvadNib8*vT&5-!kM5hm9<99Stub zoWAYomS!ml3qF+1BQR@R-$c+;#HaI2!^Q*GKN{M^1WO{rWo?7?+!qq&N1N^{Il?Pte)Ds#{m zv3ZnX@{d(#nvi=)bV&DGp4EIn-$lm}RseslQeM|0($lDK!uLzZFooVOfvlK$7>ol2 zlN=;Syl5D(1tWoWC)~c)z&<`@9E#)_)qjin-Xq_!D5XWzq*L>&b<23|6}57sgJ95j zYkG~-K1+1!-+aqs^m~FRY+*OgnCn0QgrgpEAI1;Uv}5zJX#wMe>{*`>Ne;D%jx)Y9 z1-(BFrKMm?t9&>c6OX|T^FeZ?>7k9$531p>6LkU~`X)|!rtUDLw;f+pZvOtNP;vbge9Q66KO~G+#^b4$KERb$&*}(KT~r}84u8!!&umYB?F614fJ@@ z%H;97OE116aFKeR=l)w?wq-~&kaJ2hQb#xKqy=Gn^BDM7|6C1E#P5dxXISDv5pA2u z@*iYgWX9%{fwNch6esO1?R4V6jJmp5!b-`E3X%l22WtU|SjOzwS~%@N*M=Kd=8SDd0)pDz-~jk0%&|z>iqloytS1L15I5{Q+m$9I-{nh zPaa>?1Bv6I$jBzNcg}qySL9;$(kN{iK80wa)L*a`Sx?eZU4mfp^XLNs(=#bY+Zo>4 zZu3}$y^8)&f);StQeQi#R^SHyI~NdNxfsP=;bjFRhg$Oq9UKn#vH^V5@7|T_E}op` z?AJyF)LaBp5$d3#p7-bcr9WsB+{^+y286Laz5#I$f_u9{u@#Omh^rvgvZ9S7^zuH0 zxV6e>%&N*ShsE2-mnlT3vq3{f!O6vol4k7aWU|zEpPU8{bW8+zWKq0klc68^Bo4z7 z(|31>RDOhq&UOh8whUv^fVe{(&+ zZ-S_|fgmB$c@7UF21w9ewcUB0G6@|e2Uw@D_OAr^}`7I-})hH z=y_)^AT2rbp6d#PDXtZ1A|{)ljJ&l$aSbKjFnHRag}bi~D1Q|vMm{!>>g zy|bg69)QVVO$iTy-MD;SCZDa`wH*Iy2eS(-p4Vgvw+dtL{G$wG*NnFn-yLzyF#93` zDHJiI(ICUDoEyy&!(b`S_acOh6;$$KatRbUhyyKwl)!3rSu(x^%684^bbpDux?~=YyTfYkgBcj?!KYD9LN#(khkf_KmdfR<<#-6v+qqbCdI>{#LTW<3wdS5Y9Hb<$cn%) z8|Ee_UC?=XKbcnHZeqK}TCf*26K$`MO~>=f7>P)rR>Ua*BHM(yq|;J1z(oQ8FR^3n zYze<8T8kwT0ar<1V7EJEI-)3oN!hGv_1=Z%qnw+jYO~X*l(oNir!-+SL;z+>>XKVh zx65%a597ts;-Ks~nd4q@?+J~2w*M;bgdM)3#yb=}^jdVi8PE##m0pesE@oiuF|nPc z1_Y-Ka(8DAc+3&L(j-1P={GZQ`kfP5d_zXTzbwGJHP+>}HMfZLfHZe^BS$NtgF0kP zDyWoBPzaU6)*&52vLL&r^1U|d&d|eb4&^UW;`YD3OdOM#b+uzyrlR|T8^dq={!|rksn$5S?FKxV+N6{uKG^1S6TV(!(S{6oJ{ilnav=bCw8{p zb#4m>ZkF_b1cgiU$30(MEWD5auO&rey~y$|(IJ9UO|7d|E3W{1WL2+vPk~%Rs0t%& z(4+UcH6Gi9&bE;3pTGLbd+jgauEQ^Zo8AVR?pXd`a8YdklYR96$3;oYNlNgG{SPim z!PwNt+ssE)I#s1&LCB1-+)p4{~@3R z=mhD6e(fmX|Lp!3Atgp9PAC4KT?slVI_dvrO3D7`fE=AXodTUAof4fgoeG^AojRSy z|HDlg&>1-B8(JDWSs9x+{g1N4e-T%72F_Mi#!kN=m7%Sbty*~r}3!PwE{Oz&#-i3H)M( zp!G!Zt)PhYiS&>54i5JWj|laTj=oZ46z7(PR`>BCxxlHgu_3{!ps7aqZheKq6e zNbSMY)Y|EYPC?KbN+e*Gl^6Jt8yQ;{-F?(@h z)W-nLjG+kf5MAvaoto=wK@w(D=f4kfLR0p36hD362oRf^NZ#&hh|v@90nq&#Hu!db zX4bw-_$X90HAxIRd~v>2_kOg7e+ZeH8|t4veW89z1fXwo&U^rhqt` zngNhRRGxqQRA?1c@Bo-lsdCFm!rSVqpm+INL%J|~*Otfea`$%)o@#_&$%2EAeC^JY zRf<`k0npKrrhnuBJR5$_-g6>9T1-uFahK*Lk>Fd7^vi?N}CkBP4488a&rnhr)0blz6Y`6H5e%!2Xp639A0B{2o+g(t>6@L;g zpQZKqJFm78DI$4z7tim=K-wAVvV6+8@V!?g`Ak!K-;yP4n<)Po#mAZkjMp1pv=O`Y zw3T-ilje!9D51G$`HQCeSz4>%O1tgOabBOj;lZfrqi`qm+JR83UrDNkB5>9vQTa}L z;31XXP_kfFQVrCE+pH>4^m)!T93(PT^W4pG>~*Q`>*2}zS0}6ZWN4;Jb|O#EH~Y7Pf-7YJQgpZ)pj(=uO0JywQV27j&2Ykc0qa@nH__Q!Hil=(m0_Kn5WWULOsf!LE+?dmuC=GyT&u2g+#C@JlDKuZ0jZ5T zR20~0fUJE>GuWW(=SOiD5Pv`eSkq6W7vST`OuHk>v0h$)x z2yEWl%BDcwnFF^gKtkz2{p7yw1^XXd3Y-3P;dS9d&Sest-$dIT(xOm!AkhgLe|-1- zKBkaPk=-w{>}LSr=4#iwFcd04CJdnkP&Nr(|91euEa0f-4S^bLUrG<>0B+GB49M71 zVD-giIs$K_o!)(g_!HoCrxvFY@o#`*nQ&Mj6Om$OQj-0EPYakuK#0fB_ym3?4xxRe z{|s$UR&}|RcfiqWcH(P+WBrC<_C{w#ee2I4TPvasbuMoVV}pT*nz0CiufukV*BeoZ zuQ1d&W9jgRiNbvz8~Lkm_O&;!SvY^Ix=nyMJJ?na>ww#R%FpBpsR1Wr2ab5yYqvp2 zK)&QShNXB27uYrdRN+&1z$X?o))s-u*XC1BQHQ((RsrWX-28-a9g#@vsNA{eV;O7% z>ic=A2aK!uF-k%}UXyMe!q=(M-gV;)<|pW=X^pmcsrjOwvO)kf^0N@H6$1w%TcWQ- zR`A7KZJ$2C48G|SiAUW6tkQ3XRXitg?LIs?nr=nxglvssm~%s1m9-l8iN!M~QY39U zy^QKoUW>8yVBeCK3Gld$SVd(J?Bb5jsbC|--U*#C7sS!qfd)*khQkJo`D4hPgKa`g zDwcOfC>I-Jk88dI)?G+tFG5JhTtM71qMvXTGN8}VqDYWfwTa4KF**7RFgSL3_@)&HhX?`(U`QcH;(aXEOpw7^yUf4YbIsF~ z7f<}F5eKPzT7RADUdU^KJL~H9(uFgqI%S*64BLZS${CJ^0Zk_J3oQ+*J%!YVC}$m^ zrj{8W97Y8(hvw#;OiQK8i)X?q;HTUvtiP?G(!A^XY~OejAL>u-L$+jA3jd*D_igI= z%mEmvuXz8G%-e^DNkGlGs@1nSiGBM(O+?VBH%K*8h*#z5+3uJ8akS%SGi3x6kt#dH zP2^RtST-owx6!Ao>f&MiT)V-nbBThOv`c+-ex*~C9;#5QKSym~S6tab5?>0P2XVnd z#z4Qw@l}{G4@Cm z=*0zV^l4Qyx>W*`TQDMK%O7BW0^MyK2!yNfbs3gsWnPyA74d+8&(Wl4kfHUlRb626 zvP*@{mp?)$gMdEnoN2h$L>Myuew1ey~7;`cTU+oSD11{D$S9L?}QCX*AiZ};}$`rnX+2l2Gh~t z>{i(cPnV?zp3rU^zN&A$H4rvFDS_WABs>vy8IwKLc*JDKZw7wO!~KxxGZ{h-^V14!Ti*m`{O zbzs%r0+t)dy$J;0EPg+Zw^|XTB;|sm*hqC1{!ig|8GQ)UR$J!l7?-mCS(Hn93Lmuetn&z?Fq>%^ zOZ_x`r-d6eq04bJxtSMjBzy<5ao&4x$^a}eZNK*=lLT9O#8j0~51|17-t*ZLogkd7KI#ibXP_ans*@hl?ku7mAu*lW1=)S>W{ z2h4IvF2}hSA?O8qLk9DpfSk!Z=jAiGJd%#hC9D@cQf)Imu+v*jr+QcR39^y!(~qyZ zAG1B(Eeo|qRsXUuutp>n;7`fCa)A{j|JO%ka4`(D1WfqDNIDG5%n07 z(P(u1M4EV=i-#UYE0R>aejW49$Z86em&~%Ozs?CQwVkQu*YDx@=5dy;7`zisYoyJL z&I(MtGc`dnL>5WX^cWq>^#r#sl)+P5e}tSe3`o-IlcIp_6@So{#&i>LA*pk#4M*d7 zEQb0z3u@0tK25&OntRuf8>&85Rk}vX8hx7#?Q4iLje@yXYz<9N4$0c*;d%RBmA})( zArjcs`W4yuf3wMvFi?v5|H!z&%8zjs_v^A*XVpE9 z-CgVl;bzn8m~)>Eg}M%B+exMR61-r^h_6b^dB#4@XigPMb;7d;IA0j}NGBTh-q_?T zn9i)cDG^t!++yw{Bkm!~y7U*A3r(FQQ|F+O|A5eXRGWq|T~3Xfjobqt-Y)9I^^O$C zJ};Z>Z)2;@A^^fWG=B|bH1R&|nI|tGbL}DA1CLt@);xDGyI>O!=H+)}yJFqWYNJac zi5Z`t=avIHH*|aPWhngit6%qdM&1yBfsZB3KO4SRODNf4*dwRmE~^Ui8TgQq6BW1I zUL(ciy7tqNE+rdK+vv)}#(#y3*x_Um32|k@1hR9+VWLuMT^H0FEugZk**0OIdy~Q& zQ@;~)hZACCHe6ib7X{^)CgwX3**x*(X3e}rdZAWp$q#xUT&UeS|Ty|TX_8`LcWT>JY%fK`i7KG0g--LWqTK(E>4v@o*}q3X|-j+t*o8Ro++mm!SZ2p*=hzpaI)Y7>eGQ-vF06}%4W9v%M zB*QKn_ffeWF%GjDMUSvtqMz4jd){QN1Tk_zVtpNf-k*0~Zth+LfBX{5S}#d0`sxWA zhbTJzwz)+`M*xX)IQ-W5?05OK;&5O_^WmS%xsWdMW^wg&vt_AC#2Xmz+lo45#!tAp zC#J-Jo`u-BwIK3PqP802M$O@myLKZ*(#12G;LxpK=#7JY@ntR&JBRIP0=&a7r^-%{|0z1ta0MB(#9ZnGV*pvRejOxX?0N>-RciKQ3%!Y2ed0{vBN zn`#}+se`5MM?mV$3bj9@+S;(kX$EmJ0kr1)95l}w+dA#Zxcn69dt%UE7|joS?JLfE zaRk7d**3A1HzVx;!%;eI*`T_5 zlOT9drkjDKCOl%=!$*X1U#03mXxxDhuxgZ<52IDq0^(rm>*=&D>y+hJ{xzDCDl-zr zemF>Z3-V@>?q|=$Z2(xCo_Pz#qYY=`Fq46BJ0U19>VxoUgn~T-CtZdpaEnRVjQ|Ly zn2`6=>v}0uHhftL(dygv|GyZ!ryx-RFiX%?w`|+CZQHhO+qP}nwr$&W%eFDMccvqH zc6ws>Azv~g^C2T6dA{>Ij7wG@q)D|0(e8>|n$qs392ll#Nh3l1{S=F@qtKi-K#uwv zeQb5Gk1NYJQl1McH2WN2s2~tf?$MBgjpqmNW-J>4ow(1ep_CPKYdt$mSA#Afl#@xUsNB9~1%$q6|5*Rfr| zSQiF8-tW_2%5TQ6S#H?|FGpDNWy#b#EOV=q6^X)R7Zi@K21K%>uaE5D?f{)#OOs>+Rx+=&*X zp|QA*Ujd*uU(*Z=1>?rG2j>Rbs)FU8Ax6IQ%t$vjki9E?sX`aOhOqJ#p0lTql}}!8 zn$f!CLVnR;Dq^R_D1zS3)@i}^ForFa!`7xB4j;zEYWpa^%?Za8S zawJ#W37Ws-J>2`o)z0jg$40)( zz6!7(Kqkv2M&5ss#5f2t?R|`bdNxL7k=FOofi}q)F9z$Djnmgu-jt*iJrlh{) z0_*);zvfcl^#~zJpIty)k>CQ7lN1ljb~GeRh){ez+A8Q){bVd_VfF`z3cKufXX^vh zl{Gk6swMpdnbE{o3Y8t(chN>qaDcnbmW!qQGbE<)3pq=_JdN(sRks;vh+EPQkp;Z! zN$FBuN)mK^qp8$;)=8wvWF3Iz%1lHtk>{!uH(VQ&D1Fa3!y1_@wA~=?K_m%Z4r*{v z*NtLUc)EOH72h_#s67=-Ut@AA?X)kB+!S=I3@l)wBS+pDI{hKMDj1T!^z-@ zCuQFXAA%N;BHDY`#yU>T1vC6g|%wXmY>w{z}ZyUt*+hCGJZNy|4e^@ zOEE^07rLPKyr8i3SR8%Bg&^=^~h$tC1QFro?HuaSwU}AYv zxIkQ@4Nqooh!?p;94~Ox`%rFQIfdq6ZT2>oX6r=dhr>118>{#2JM=>?<<;R(xuFF=IbgmxNj4ziFLSN zlRwPP$0FPeV57o)b78LzGbn)cpD>5XlBiHBHjm&9F$)#Diw?nu4Ld-BA@|GBk>dx1 zbw#OQVWEerzdnFDVhg4@rkl{Vp2jC+VhoVsYE?ses9vQVuW4#9@C~PI~HFFFtpW zPY;f;z%pW+tC{W{qJf^ZCj~y2dq}k}SMU}>!g11imXUaw<5AsFD9n14@AbN7VeD~Pi6W{aG z-;E+H_^haUXMO*LQ&=wkq#77%(gsdoj#v{OPFw?Y$wbyz3ekXy{rKJs9ci9kQq`f( zoh`yWsq{l11~f9L1=(GwYlg9^|I%HveK_Fm++!XDNc8$ssXL|>$c9NPIy28cW!B92 zPj607<7+pYTMy5tKv_XAi|D=`jtZQ4<>?s&@pN!|!%>I+JBRmagAxpeOMEj;SlglN~hdp(4#iwCL%s zF6VdCAT}jKMo~6ReBuKS#ct9h;QQ=$wxNAu!6e@FY7%zmvd7}_kPSd+UE+s-Q7+0G z`9K{KGR?f6*psxq^)jl70VMHr7_2{TCjyd;V#g=TR3!&4m6ZAKwl)}9D(}Mr9(yMlrsb7{+o%k`PE{)`BWyaZ z7xW4UotikfAJtIPH-Qv53%)NMz-7&!18IupvK`aWO!W=tCSwPkUIKH-RJ^%zW}cN; z9@K6sFsu6B_(%ToNl$V)1aA<~coYB56`_Ueh5F=+GEaDkqD+?BiYW$k1WjX~mj|=Z$5@QgO(Wo> zI?Bt!a-vCg`*MzR@s*mWz0hO{UdurXL8FTV!%Zrhq_(i=B^z~)*NX^27WsX&ifDZc zSNxAuccw2rb1=xsx`iE29Yyzu4X8oyLrRq@NUeEPHM*yn<50tkrla>1Sna1WabHk< zZoFLlZFa^uS1+w4e%C_gAQ`3n#iT`AnpmzcQi2sTQR`vHAGBCt?+R!c=OhlD@aIF$ z_TyGkq1}Z;VYCy#4o+NJr3W_~sE3-W=7cT;Q!u6f)QZaD{Z}|l##HEc>lmkqPRF_v zWR`X-d+M`9{>Urw{A02e-r%B_W?Qx%wfe;PVU&0v|B3^x zba=dbOzl*LHPsrA3D3mU+cR`viJU6~Pv{guBJ7q7@;EJ9(YI^=GF=*P^KfEr1){-`5o5(Ov>48+){+%;jTHEg}Wg0zC4g3!eR_74|mZ{tj;c z##;@zg`ySFkRX7X1)#K)kxJVscvQ(-I@taTwjU6aGX&f}F5(VHSr<%eTgXxZpF6B= zUVtgV{1BqfC?q|iM)}-?Gt$_2_I=RK<$5G>*wPi?J7r-k1O&2Rk@=c?G&XcBc&D{a zl0&a%DY8t#{kFJ1%-VLasw6Ymb)t>#|cqa7M3NDGilDcsqDK#G;AJh zRF2zsmt>lGHaws*y(_ET2xfV_cVRLUxP0+eGlFd*&F`Hx3)*_8Pf(%TUFWB|Hxp7N zI7(VMEKIX2G_YGBxHKIPKZq=ps&*Mo)9;rPwOy328WVMqjT{K zX*O06B8&cWmSltOefH6xqT7V9K=tJJSbr#JKg{xqjgaF-)7_n(S=s zqs|jv1O>!Ma2xVtPc`=VkOYQ@WqZxgHw7?-U$$xOaS{EKK4Gd;%4Q%&BcZ;q3FfuB zH5Y|iAl<;P)wta&Vh5M0ca+JEW~eX+~**ID*F5#|=CS;*El zW^K*U^!x&%TAE8%iOsj5Ncb&zVwY8N?vXe2anti)6E;5_oBY6&$OkEKr#4Z1I3^j+8!{aV=sBVb4z&<{6#pUvXNM(=NY ziUW|-HE}Q9pw;mggYBMI#YRP$-B^gZ!QnjJhgbizQ)~GhkMSBCfYoI)Q2~C4eWMT& zR}N+b!Lg=>1kNI_e3mwc@MNzdlQGMS9a}&cE_>p)0LXb{81T zdzdu1MYg6=AbG%_Z|vT)rb2bmWJnHV7Uh3ykew?O8=z7~Q}n_MP|Yst37*Ke&KG5D zJ51A>^C&Al?NfSv@K%2S<`AF2z;}=wVyT2Us>Rvnem2pFPh;gE>8y5rK2m=>8k z2a_3ul~H6<6;ewSVRMijWHdCMVsv}hxoO=~iWtm9Eh8gA{RYeWR`}N)Px1*w`&XR3 zdNllL3gXUkBzGtw39Aag240MSEqgK9{-L?~@p;$&gQ0-XimJ;k^J35~g{4=a;e;$i zZ+UA7+YpV~*IQ;XGJr?0&9S_1n&Sf@}CR8ND}x|p&^NHmleG5(|HR8m@fxOTK$sq$mh=`b=AKl7@L24S!e1@=c!k8LxkTLexKkUQmvF9#%Be%-E*a` z$Os);Fp8#uQ2k=9cVIxh`OdreuEQN|tiZVk8!-%#Gfr(LvOjR7P4~+0EJJBs4Zo(r zxyLo2s;At}6P`2AvaAxSbr;uqpl1av0|fnmcBDogIV{UE(CzEdz~leH`^?o67FeK} z6%sk@`9|=(H&=w}urbv!s#y>HL(W`~yG^q-8WC9i2-MH7GpB?dgApz2HL+6{Xt&zsx16%b&fHUmYzPKKqpH2a7kW7-|`HHNP^f`(q#F{D0ik9qC6}rpBZ)}wo z(~#9>4;Y@+Uo`T(S8-#^4h`%RprwJ#9QMpn7X@t-wYfbG<|G%x{UmVED1fFu>#p9| z$W>3TJ!PpM5~1{l>UB+y!RLW9XLA<1NH7v*ur2q2?#^Q?bFnS`!6L>bxYQ&HR4k5? z+S??Iotr@q#3hY(J5=o4>(3L1JTZrQ9L=s|UL}sksapxF?MG`#g~hmtpUKoow|w zb6Hkb*GGjw6h5_SzZjm_o=~F;k2=L)3i&VtaBgkG_}UkVef+(ZU#-DlsU&hf=X88R z$yQR*i!Z6yM-dx5X>|7TM}nZ*_TJ{Qq zmrAe>ED2QTS;LSm*>(BdUBWxG9L#rm?-^AgHSsCnyni%2-3Jk zU>}~J+Qf&3i0K$YcMu#75{6aF}i0)U|&j&OUc+t;>V*2?Hf`!udh_8 znU98u#(zS@iUSG#*-nHTmok6QCKD9jLAeZ5XATxj+7m?@4DYla0DZu&gS5O=J*)T2 zXjzi@hB-&AT;mVP*R6-y%uF{%%FD%7 ziD8!J9F3;LN^s#Xt=Hiav$2QL<{VKFa`@z4rt;P_l3w_~Z`lnFm9u}Mrf+>T@2%7a z9*}iG=CdE7Jgg0S0~?Ts^w450I1NA(%{D3d(Ho>u^tLyqw;zMa@rT3ScD7}c49hgo zYu-NyMlCF};EM5?IH$9RF*h-7sukl!p0D(Ha_$;T^x-1(dR=WYHx)W%Zyve*kYyKK z9L@=|9kuEe_fQ8gFu@0G@h~oI9wDTT?WpN>W>%M&65D3mH@&*jZfA)?de|UoJd&?Y zQefQ$e8IN0uZ>Yzz$5M*40^+tgM#R+F}&cG@;dt~W01V$(%s>&>asxVEdUW*>FFZ~Aq2Q4hFQ#M7SH5_ifhreCdjrNQMI%CuYxQvG!Qh-^{FNcBWe_o z2XWBk!fV-p`!XD{-FR&5mA!-$YA@e@Y2Uyw1vME-Kj(k>!&OCb5#PFZFexW#*Z8vx z_ae!f`FojeH@9UX(`rmc1h-|knuO){pybpD+L5C!X?#vCRyM(xrR8G3O|7vnB5z&Q z)x*9?)Y5XR4>A*yOVI*yM?4d+T`3`nMC^p>dGvv-#{*~H0Vf$;>+sdnPf0pkq(g2w zDhI>Y@*0=M)RM!6Rcya1D%gio)zE2zYClBOCC?0T6d>XRJ z!jaG}k3ksj(2lHfr#};rh3TB&D^nXL@;XX5xQb-h6-8$VgsMOFs+f=d0-vTJ?X)7~ zyp|Flf>eNs^R39zGZ^o)?GvlF`|=bNI55}l(C3W%)!Zy-OxO7Fl6@${0*C>$URi=z#L}F-V(xlznOgjli`%&n8+Od%|5F6m7_>IutbGb052PI$y zau|OGaHocto2HLL{)%fnqC>r}>xggSp+H0k=t$PgURVW8635%zTr(yq{9vqcAuu&L z6Ddv#iJvQzhoa`}|0;!Ay=Y5PHG9H!eb;6%_=}FJ9y+#&Ha0;%gdby0E}E7A9e?A~ z9mlA7?DkNR-Q5k;Pw#(NAn(h#djYdX=?pprW@=!-)j!*E2r`l|>+jE3zExXa@c?rP zoOAY8SgD64*~7JxZ(g{1SE+5o`O!yfMam60mx~jMXAgIufUI%o(avxH_>J@bu0!c+ z50063bPc;rnppNAz(EcCi)UG`7V9MZE6+l6){eczC5IF0(dQJ|K>n;x5||6e18XS! zh(Kc*n5^x`c4}j;x9_eU6jIZ@@ed_!By-wPId$OgG_4-t}6 zPb0Rw4xy?x_7nyAuIS4~?d&f8t|&2&AU31W8oO=7xi8hKOxxmKF8KR~6PLOgCF|A) zvUD%I4IA+Sb4tD;yTJd8x5=`J?NXl*?nt4W?c)NKnn1{h5Cl1{i7~bEZ{{=KN>fO^wKk`Iq5X_ zkLMX(KEt#bu~S)IRs;&oWig;fQmOu$@_O#UFIBZjx@6SQwtEEnbDJHe(W-}Qqjd5A zc{D!0l7;Xp7MU-<%{F03V=fBb&A6YrO1A0)hLtwD0j5erczmy$P8`aMnlb-l5%g7| z7*1InL3mv&J)_WsW+<#Nf)55eub-$ZGFVk6Rfc3HDko{!7432yUM@l_UF zY(bwKDQJlq#}r4IDHDBXfW>x5+CiKP+^{A`(t^354&IY`1lvO5`5UkE%v#4 z%JLTL!$-A|B(O{h+TAD}OixR|f0BV1_1F@>4oA0_BpPVa3)2A;BLy8aR zJq?vs>l~oB&dD#Wx^P-Al%T|Z(Gyuz<1wAWN6>wADlDNRNdXXKrV*o$g%UR%QdW7~J#yR@N$Lo^-}@?UO<*V&AwY4aCgx#+lP(;{apZg|1&+zX>n>S9A~rB%FK=CYU6 zLPH$$Sshq)v+nN-k73NT#q`Gs+tDtWzG5>PQyDAY?rhq^zX}}ac5s6H&aE(pJ2uez z58MVOA2_&e69yAJmlL@g*owX#d{ysr$Pf#F$1xakAXl{$`V)&OqWxxJQ?*O-IPst!nmaRgdGF!NX!3 zIN!@-l2XjehTjMy^S)tf#LpU(>n4Nq6X?ypU#T2(tRY>ZBkFio zH6e~C`8#zcD0vKS`vUHfk45MRbqz2uwVLyp%^<&eSb%bs$OjJ9A>4}L1xqHHeZ{}& zR?0NU=Q(tvWhsCy3GiHbqSY1Hd9EnCF1%;_R8hp; zn9Ei*J&yDXIhTe_c*+;DP9j#Y*}*p>zO};&(Yx@4GFnLG6WUWG0BtSF;D_*4{JT~4 zLlEZ}Z<-_dNeJYG$Si<4k0N$^@EJpjlI>^1J3CI&O)x^34}XLyfy5ffcPTg93^~uC ze(prdHLJv|XtIaa{_pwDm_Qb0ihU|S>qiEQYR^>JrN4tk*5GW)A3(^dX%iGOwrLG~ zz0|Fb#EH>;f~R+E$O=*wjN$FzZ2Hfw)Kf-!NZg4IqRzMa_1Z%lKdVFsq!DA3z*&4U zceK-cZXgL}KU!!I6TGYaZjKXz(9a)~VOK~DcU?<*u}(vtb4W?eo*RpYm|;s$$e3Af z@v|!j-%L$dmh9}p>aQWsTd=I6op>c6s;%KutK*fuyycXXqnvugDM805vV?>}&Ws{X zb3e|hwSzOP*%Zz}ft5$m`(IRxAY!v78$Fwtb2Gjh@4O}uRHiw#T@Y);2w%6hm(Cxa zetoMM)nq=;6&v{aKxvq`J3q5&AJNQzU8?d(gYhegI*|Lk;4%V`Jrc+cBA`OlSq3ZX zWv8FbSl}a`YJos%=ygh$x?WcLAQ+rilB&xHj!$o!Cr1Vp@2-IF7(nN5qH@X^Hhc*y z^$FWx8lV;2YZEUB4fE;LfssC4pyvudg7HJ$z)!6s{eO2Oz9&xRh(5U?K84Q)!FRxHZV783k2Y!^Uh-6f^kj5F!*b(;lcyW zTY@U^CwRUP4#q8$V<$R@y&%KRn4REXnnYaDSXj*ozqAf*AFE$3bOH#mGti!^>5*Q% zgCzE$13@zXy@T%Q?|25z#}{`dQ)z|mv%RjjwJgs7%8)p+{8)u{ZX5$m`b>$uDr?Z6 zBS*<+Z_}U#D6z(MLqU!fX=yjPHNeHsr*v-AyH`cdL@vwt^$ToQAA0;JA&>CV=d)fZGN z?#pZKK2rO>ZnJrJTu-owd#b5%7#>mYg9gq;@O=uP2rt&JX1+Cisx|);uF4?)*?A#Y zsWE^2Obf}KrCZ$F@?sij`1r0$efA<|)*2!MSbo<QXxiDmmSngm#C!apv%{H_`Uvk;PhL}_ z(rx|s$a$W#M}bY@PQps}ofhcNNx*9TS#eR;ig0fi2hcookSaMt6EdFkFXdf%MJtvnA&Q zZ9;wQsh*fI-c6HLqD511LuxQ$B8~qpglj?hq;7q>jkf@O08e5GKaGRu%Y$`&s|G<1 zyQc1n_q^>5)fVbSh8}J+XPi1>$6d6aV^nW4 zLyIgX-rJkj{3v$8eb{BiERumEig_gk8*(S+!NLJ)@0w@V&~#8@Kd7BIGrk9#WwryQ z(5?IX7DvZi#cLuqhE<>+mQ+oEmdudv`q1SOcHaeE_u}YDY>6G>8tib4fyAcK#8+#h7yfGMpmE3c^nnn{(Oy-yw|pWM9WmDhFTJF5M$lBRv0`E0rRNsNmlT;jB`Z$ zkJ4SSXCLyAb14XQo$APOx*dDX`<6Cp9#!nW2;^jEAhJfK4-M40n_rGp?=a%L2+6wY7(C5PLl$7Nl?si=v>rpA}VhCQbliNdr<(7S^ z&uiaUVmatxT=*FTbIwGQ*$V4i*|y}(1VKb*(}xM* zhrxqVe@NvU!TMdt4|oqo8vz&b^|?(wMUW+}+7t^U^ZLk>d_(o0#hG>TG2Yx*)6?ir z}i| zPJuIb>kY{QdYY0XAzIlml9ax9=cf8r@k}YtR@2x8pf7@N5b_P_H?Bo&)+G@@Mb z5N!B+YN0bJCo=Clhz(F~+YclLs~%e@ym#?oeu>gYGpvJ%-sDedP?Zp24DWZpb#8(Y zdWdOc&6)-kGU=#1n@ijb%m$tb1B#B;kXn^zf)J>Cexp!yRU}seBk;8XK_YPjEL1`gCc zynn-@GK-wVAfgxVE=xAF$nbn*()rCzUB#-1sNuM$*Itq>&zSJ@I*-!eIUMu`5iFS++MZxnY#Hvt zTpzMDu|~i806fbuN&g#6%kf{#Oe^7RU~OUaf3dWztpCf>GSajB zzbq~D|7K}f+5RC}VG}1K6ICipZA|5hkDo7kx0bNqvx{})Xw zME4(ZR^tERvhx3YtO1?D{{*Fm|IDi~oeACla;|3ohid)rO{+7{#0JG}36d zUVBcq+PH4~$8si^_8$UutJP<(=XK|F^!+gEnas)9bUMMvv^rcnDq4JdcUEL%X&^Zw zHX=6xE1$ZyaBz5h1XRD+EP#Lr$$^o@xuLlYiN%@W7_>Yq6Chaz2S9onz*JO}6rIsO zyeFtEsiY$W%6~EaVh^8xW^{gdadiXwZzTwxa_w~d}A4T z-_QV(zNwi3Bz&C8TyjDJfSlw=84$75wNy5g6#zty2usSyKf0u$BBzN0rGI)CLjMsD zOyAnh%6?*7;djnx8oG^Y;rwfu{Lo68JrS*o*i>|IMejIzKY82$Vk~{#%D&@U`}+C-wSk z0s*z<<-Wwg)cEI2eLVv}n%Y_#Ko(Ur?^k4PePv=|dG>g(@ONp-@7oV9siGpRf?;~I zv4=sfUPaQ$Jflv1z?y@7=Bhb>a)uG0`$yUzVejTR zcG(B1!JwLA`+nG%S)u)gan=e!qNBs^d9}-MS4*dTmn9vuwWa}kU1m5(YV$)g|IahA zmFSB{OS2IKUL&wlvw(#c9{Zx}_QhaP4sZ%Bh-Bv~TlP7x49a4)i1<%SLjUD1rntK8 zJnc3NMr*H#uZI7SLAt8$PD)C6Yv~}iQW>#n>zOL~d#l#F+Vs9@{`@z}6t3_^ zY1jNi!K@PP&>gq1G4C5p-PcKLpFef)7Y&>7$>C`or0&Z2dJP%x>H}1>}y+xd($`I=`#Hy3j4c7SGMqvz`tg88Ddnwmww zgGu$>09*(RP|+EnXLN&WLmJ>i1XNq;vYpo=h<47*?2VTsa$->tYK=uKBhc=Ub>Lt` z)%DjomFbItadcYmGt~qVx}yV&$wVUV*-5xCDm)~>H(Lu!3M>)K-1Q?8pN``o2yVeD z%HTE*n9uHukdb+Zod}?dc%-tsF+oq%TW!D1xZBnI6mbYc}^rElSiOO<{#*H2QTX4SbV_#ohgz z0h;(Qs5~!|un7l{XC{o$H_O~({}|mnM6%C%rawCMv&6tZku$>@$0&hr;((sbR=Cb) zKBFa3!F9B$W$ti`Bu7a#KVc>oAK%*LFK4CjVz2RxP=8Qrf@z6a* z-<*gw^>Lz|!&c7Ml=~g@`U=+LnNKNPk{TuoO-3r&4=>mdloROIAa1;f{uRn^z%iOe~*JM|Msz z5%2h8Dj7HXfnP7=y#y+oD$r*CK=qLFa=4aJDn{NpG9-?@;IC{3Uu(wP_Vcd6{C;DK zZ@oyV(-!sW-Mr28O8iu8Z z&PrUw1@9F7^yO1qkx9IjepaakvEdA6xuKydeG$#Ff6D(d-3k&y`&b;uF=n#1$c*1lC4xdSjk@o#3)m>A3^$Qu3e{jT6h&V%ml*$Gbu{) zH?sGnH}6+NEJHx~%Yiv*^LbEj1X(60|Wo}-# zAt|=hm&ll*IwFu7TTeMIgW1;1ME$kQt#or5s7P^VJIe_jK!kF%eob2cy`D0>#rZN| zrs7$5p_@YDk`9-b>Pp0cqh$vYer1R;sLtz3Pw{Qg(y9|{i&HEYx97N}lZ8vumUZq# zibw_iC)vDqNotKo>7F8{4SJtSm~SiTTlss?%7F2-_I&%`#7S_^uk+h5WGz*U4A`11`*xgd(|X$@t({LW$Q6^AoC3j8WqaPhPHj`y*PK4o z?(D=r))naWlZewMk1u3YD=9csJD6|&1&J>U^{!ijHF35eXd&= zIJqXaj7nd2E0ZlzDzWz{@dOds;>|Yn!XfUh`@20EaK+CL5BnonfQ61Mo6A@ZJ*7|< zqulxO*S|1EtKcsR@~1A5>jM^N0zQS}vmPqRp^#N^)*oW{ZjZ^>(H1v>9Yvflf;epCH6PMbJ(qi) zF|%%KFXp#RUAr>0@{j?3eD;N4GEw5J;CS(CXAC=t5-j&bCTD_;()Rt+Z1WL^>q`f2 z-9wl*e*z{&Y-}n6<~~y3*$k?v<2e`1NnIH$t<#N*LI@yurL4bUR<6f_X+mKVVh{7D zT_BZT!LE!j%s=Eh-OEMmm?7M)8-brEKJSrN%)7H#FtLv*_zC_Jp|gI(RIW6R4~(mo zlN9~s+FI704Sz7c6oVGn$y&rDe-LDD5{Zr%5##%NZhc`o%CYm3FWz8|&1m5C9o2pVsI3 z4?lfZ{baSCJzK9=5N1A{1c5Iw4>p!X9Dy(gb<8eSdPno@0lZqo>dNVw1IzU5Lcku& zA(hg!!7S!rjpX#R>(oY=6;5$eKW)KP$V)E zKbHNl!E%3^**Fzk*qTM|2bS(f0mn-{eU9X+IXLQzOo=%C_6oT2&2 ze0!RyM#cZS@A5u9zutyX0PV{mO=fC;MA>8aoDHH48-^oK&o$_Ne}HPII?H=`*AOv~Mk2xj+ zY%U#sP<(D+Ka(sZU%-4Q=n+jhVPF#32URt-?!8C}zRXq_RSFFZgs}jXk4Ro9G(lhK)@6{c80w0*^4V+I8UO z7oinO{v<&TvC%cGg=6X42YnBIpiY9M;RG*IKwAO!d9knquxOTR&uNY?7)BjBjZ(wO zSvJAAr7Dt-tjh_KKhb3l+`-Cam6QeC1uMTo`^gXPtH{6<`?NBbo*C@;O))_CS>9z3 z0D&P3XTcFC(m`FWFFVj62eBjr?M__{v&0y zw}oO2j*cqkT}crBCC9to@07U2glF+u=~-ev9Z+VVVLFo93+>kgu|R3v8kkT=om8tQW-#5)u9i5$J%5U!Rc z(|DKgbXsYtfWZjVHI96$K~gaRHKvobjMp69;+vJcN#t5|>cAbPKrVF!@C`Q0oAq=| zS0sfrQ7{gNhrT}N)=rYBV*3P2tLePm#0xBAW;69)%rRvh;8W6Y>s&zMc6e+2Swol^d%b||ep312$d=1R+K#^DlAlKK1mlf-|oo^1W|(#fnHP#n#B;j$qo!QE@7LtbB z^U?FeG<}2nYb8+B1Wk1$3@+M3Ss8uBTuzAJ#u%aA^mN-)nAqqt8Sf42U2Bpg8*UYV z;^!vqOkDVk8nGNCxmTjgU9%8G<7 zn*|GahqM-+{J`Pef|w5EEdqS+azL%@q^c;fKp&3=bvi=3I#lI|dcXP=M4+9Fj+jNQ zb6$@-*@MZOpoE@QI)*a~pv+`;fWCF+?M^6fd*lMv7`bB{p#_g{o#zWNn4Dsmw|P`L ze4?9LDKI-Ot3B4QsH|~KLIG}jA@^LMb|ZVVYE1rfMvrr=UC)BT%l%N{Y#|nK4hWjz z3hi=IJVw*~6O-Oj!%Z@3nmFWLIkhjTTVl|P_7cfV>qG!iy5)FKyWpdi%o;UmP!20B zrvyI&p{t?tY|5v%ji|_NEcG^F8p+Q<*1=-tS8LDxI?`W})4l7a=FVg9M%4)A&{i|J z&VZ{`ol1TuxUl#>qYFqKfIL=DqZOFvvDie%&P;q#jRP59=k|idN=yWy^AllbSJ^j1 zG)HEpwD0Z)Ule-o!6sgsWOyZzp;GO8U>{d)=FEg<*>H$d#^=WExBZUz0An5_st+S_ zJXE3w3;O5lWGh%vVFEibUI4Gm2wOc42nD1mIV8I|C-2pQ^Qti=SrHhxh<9+fhDUfC z;W@*S%OSU4>P=__rAjn3WWKLj=#ItH2LQ|XVx0>d>&D;{CQqB6`I-swQlyp~i_GG% z+0`U!qM+lBN4fQ#BC?kb&sSxT6cgW&;@r3Y&aSp~-a7!n*G?#|NnSO{$ms42(a>~) zFL4SEw~UwM6$2f}JO=rCZ8MRscNx9s)EXpcnH`FIT!0kwU53QwsT|e2f;dtgqG9Rd zlAyd17)2S~kX9gm3tgO#LOwYQA4Us|L+?A^Mu_Qpr>YFc#%R1zpl>|qs$XXai?ww7 ziKc636SHNY9m34KZ**y|>LnS88tbSSUcPu+Ix|`;LP{8Eh~@#iggaXw&MN}s9U^$U z9*NR~WvPz@-~2I-SIW3Ieg4YHZqXvo33b&3Lv*o%q|snz_kbNe^I9@P2Ebi01}RQE z%GgXspac2YT%Y?5xPo4@lGp1?LV)l=88VcYCJD{gb%Mps7M0qROfVcR2y|{m(zBBf^}=VwC&TSk^krT~e%Ck~A3Eru8wc9(3e& z8SmcDTcxDM^z1@;WbNzDEd)pN+48o}M11!^<}+xyQ!KGN2SPEG-w(IPQ;)?V2cCoO z`lQrq!HaB?wLpl3f6bOLuhP%e3O^IMzh&k%AdXanwl}e$Myl=}Z{Z;LDzLmD3kBLK z2a%TmJ14Mf(ykl7kk)87$=1G&LMm+|AC04v4fcX%u{ve?%7A$@_)H;B9msZs1o zv1as#ZdJ%Sjl|t3ES?Wvck}_bz(TPyCIxb1fF*1P zInbQx(B&F{v=n**+R-GJd)m0y5jOvN#aq3MR?Kx0Z!e*Xq}N0Fhxoxeh@ zyq+n)uCJtg8Sru7=;ePB{iab&pnH3msbj$fDPLGg?jsG)e#%-*ffD7|ES$rVpro57 zW%RsIE^f!0Nr9e$S9iT0M##sOs$@L=(Q(Gz6(5HQO2v*7za9FD?kOk9R~({WI<@4$ zmN;O$k^E{g1iw~(G@D z?G1w>muId4y>ba>f#=IdJGba$!GNDqnn>;mjk^aK+fsT;i~tM?!n&Rc*T$D>6vj_&Q82a7R6j@cX&Bjz};WXyMzgf=Akkt9X{H-Z#`X1Qjt@C+9k5v zLp^b}iXRX{VoLRqa3&33@m6DdjoNt%IVt}pm@SD@{?Kv@Blf^dI-VHRNDLVCEx)Hx ztR3`@j(_j?X}y$gQ+`CHH@E#C06;*$zo+e|MlksjLPR7n!|rhI2lSu!GzuJS#= zQ(ujXed_GjY+T~JRNXJxL!@e|G!AFaNQ7EHI(+6rqlrBN;sbE7T`dc|kUx+4S4_kN z7@@Lk%=cqBgToUhf-GQFYx^<1bN*HDA!4fa_qb10x}cE&b+FuU6p2uMc>_;_Yl%3BH#u|;|$s5F@4=a#+JsP5F zmFTS(&RmK-@-me7JtidK^c{ME+zvyls!D4V35LFz50A#H92U5$WJq~wZ6J6Uaz2u6 zcCdk)Sj8sE8;*b{bX~)x;gkqlgiY6E_UyNO=~{R*|IStIcpWkA^;zs#^C2&|n(J$9} zR}q72;Hrbtej{g{>$@2P&2Z*Re$#Rn_k=f}gfGefDiB#Ru3`RAlTA1#0bwoznq}r^ zjn#Osk_H+yFvukKWNX_yD%BvR9zhLG*uVl2m@ETrQiI^Fm>#}ie3BwVZi+%&r0v;@ zF-bftbLm!836FNX=W1;BW>1t!7K`&_^?-bM?Bz4sr#R=S#SLLO#yh;~&R5slu_}W! z3lKtW=&A)@n-td^b+aA6!7ga|LPcG^Xk&45(~Jdpn{}6gEm7@)1NpLYTl;`#IJ&_a zSjL0)(rDr*Uzw>d2SIEZU@ArN2V-)qRTASE6mV%{Z(b5iYCP0^Xa@ng<#MsIp3Vzt zy-L${fTZOLgD9m^J!ByG+%vCAZ3r(J-GfweJ(m2$VRZG7mJ4&E_NRZ3=#j}|#IUbt2jx`G z6%K=Ma+1dP-Vd+8$=%J|;hJQKx*!0T^@Q@KS=glWEFZ9Q`#h!zg0ohdm19y-*c4Li zGES#2pwk?w?uLh@9w`#CTSz3b`x(cW_R_9k*^S*Vdj2tC+(xMJ`oH%ZnYo99I8U2{ zlK3?@AT5IJ&YW@k1rFMn{(MIn75VYbU9{Qx7M0YDcL(uRe@$9y_zH!r*$^c{|20k) zx33m{oT-{tCa0(yS$@kE-<=`DCp}Qra+W1Ny!zw!!9%Z;msd7u#f$C|HqmSU2WwMU z6CP5M9xWB%fyP|ShqQE&qJ)VaFN`}M*KFp?{@k_u+|e@;&;0p~R0vO|XbJV&y8z0= z7s)s#h1o>jYOF~splBpTwoPPw&aA{`Q6gGKAn=8=dCfXin+IZ?pnT9r=HfetqA#C*I+z0nGjR3Oz;rw) zjLf!v=>t-EW-~amTIDIE6eHFcQ#0p4m&g4I^-0CZrMx~sxbICjEB~v4C;m==8C_Iv z8yX)f_Zjvs@ZT#(SB@7DpN3Qlii(L5yOA2UKPUK{OIC`)^(Wd+iK&ov+>fIM2D%zi zRp+cdh=QQ#xu1?uzs@;4`k3_1;Vp|TiiS_LF8aD->B+%ZHx5?Kw6f!k$U;$EOAh#Q z%?U8LX&P}LJxPs*k(Dr3%h`~#gJ7z%ceQDSlSN%x=WYp}G4}W_FYYm?tc0t= zAMmZuG@7p&ln`~+EAvXZls9Rxt`krW(DfMf$rL5u>?2n-M-loC27-zhI@K~j1tb;& zh0f3^a13yCAbs22yE_=E=te|YdDrsgW;))jv0 zqTy*F%*jL)z`KeIqu%WhETlSJxACcVf1*q!rHxm$KxlAWbnLv!up)dt$JIR5mqmZk ze7PK-LN&WFI{nZ^b7JrN$%qg|l6PSVQ;2;{n7dAHf&kA>DxWfgn1n}taNhh7Nt2IN zaHDuK=o99Ew9dS+9Fl^9l9o^wN2S%ZfD6YoW3Lz531m-cti z5JaNhRZa^%xul?L`nr>s;t0ZGj3B^uK#yb6=-Z(2E(}-U%KBU!jBhpXrs4Ee04<7F zo*2~<-WR{o+aHdFN5;%-0%ySf3!JYB)Sa9E9e!P5MYv&$RcMn7p9H`P2{{{Frum^q zF?L^rdYX}kn_8oKjJ%<5t!^X|&5AL*qlyW+hsCMs>2xgd0=(|4-o?<|bDb_@ivM!( z&5Av@Gjp(mg+9i zChd2ULWJa21}KiI%Q6@c4G7aJN4P$HYcp3m&@2N^XE@7`14~hOiEj`~6To}|`vgEf z(8TXrOQUZOYYYE!u75JY&BSnms1R>>& zu@0v^-0B*BB@!#UiyAxbi>9tm)ih$$cNL6VWY9?c=ji6M*mCfRrVdHgP^0Iu$%o8{ z*@M5<^u$~>u+x!&LGZ5<1=kwjWsl^=nN=Nr*0}|{bDGUEco5Jx=Y4IULIxZQ-FVCD zP2sAqrWErjDA%!{Eetw4aM8)TYjAw)lLo4d_(W*5;+h6jYfyCi18qdQMfNG@#7oSRt- zr~OkS0DMvvVnl!%C96tYkM133ao62Oy2#NuHAmcs4n2Y?LyN{x4}8fav}5XDg=nn% zKnb46nj8C)J4wDRIbOgY-tQVN_t-XYM}}Gx7#u41Asm}QMu22sE|=a7BG*gh5^S1U z(xL=iE?XyyPlw}nQ2ljh)4HV+V6YqJjel;~`s5haM^f*Fm99aOWzxtw|3ultPTW?q1KT@@(Ho0__u8SVy z2Mg!1u@t91M}ybY)8IoWG{cf?aO<#=>2XF(K%cdW28kb z+uRzbHvYWnr8kpvLH^kAOIvNYHe&KbBB}(p+Lf9tV@zSne3b2^FZo_Y($KEw`LUcx z#7FKsm!LE97JFXXdqZ%_9Nm(n4{Zkd;N>&rQO-1i*j24XF9hY9_wMKlKOZ<+6Z~1 zaFQx{FKiB0Px~{Xr~6Th$E8!E(%cs>0j;*gdzdpp=D;ql4hvyB86N0#`U-R1APe?H8YkV0UC zgglfzCj-)$LcU1ZSl#L9OVIb}7Ys3SFhEZ5xb(m)E64SmI;FShhuU__Eb^OURID?PeSVQijZx?B# z^Dj0yb`88>B_Vf;*FF80ce^15pmugQxOCN}=mlV!t>v+{JTl-jw6*n}Fp+h?3Ui@s z017*;UOx~CL>fOQ??M3DsleU99euw5fTto<>6tdFyyVlR*&LJE>JK9@{^NU6-m0=UK8u4i-WU%2< zEY6*ZoR;)1pZO|#qh4DArDG}{rC(VahPz=fQ#OD`{hs3<5BeGZ+b8BOOUf4Vi&xSI z0Q&$2dJIo)s&G(~?QZw-HYo1u=ohD56&g0CNYX=l{c8z`gpC6)L4lauja~X9YYc;g zD}wg^FNRlK1-<(~;Zw3X$*nh7Beiq`&YgCVHdz#VIqENz7B&Q7 zk~a;qn%$Kh)lR=dBTeJZCNefjW=ZagdJAQ5KuKf1akiI{sp@A|paBb8V~>1O9t@3E zXZNPO^9DBBDM>0gHMH0uECC4){jJ`ul=&s48*=WL8O^zHcPktrw36%M+3=w2S&IJt zCs8m7P8QBxmn?qO?qjBp>DbypnU4=XQFW$lE70u$b&hH3na+b=9K&o!MAM<=SEnS? z<>3YVfa3Q`1CYccncw<3v`EzDAdd`XH9d$K81tETbGT;=rRvcB#KT-7aieUVjiW?U zA`ykeI7ILLe4?z9`Pxrk;*dB<7&DVCT8VoP#z|XP##*JMM+`d->}VGl$GBgz@y-!h z$;59$I|J7fExQRkoT2w(ok%j-?=G+TNuu_ccKlyP;!H)$H28WIBfQjfLjSAIOzNu1JHN8Z%)C$5fvJ!}R2rrxW#13RMV{A&X=>O87|Mx1JQfA7URosS`h-2sPe5- zOcAy^QGjOuMpB*aJ$m!2N@$T_@u#%Nd|?a=QsFeOEQ zxGHqw4=ha(4p}|Io%Am9yD;z(_$E;as)v>&Y{6m6z>?UT90v9r!jeqzlfXM$_ig!o z6B5VUr?Sqp>j$xt#Y^s}Osyu&)BSf7s*{grQGQBph6&gJ z)(LT8gw>qakeRWMsl%oMn+D4Yd_)9I0X@0425Se4zZ+)qdbLCs=q>p+yVY(?O@|Ey zST)@rAI`dA?#1vGT%K>UywsF9VP`dRL~XOc%c3~jf<@#6;dK^`k6sZ zt^w3vD<+MDXb-6N?m)VENJu!6lTP-fS@m6YRiSV)X5PA}t&1Wxy8hT31$B@|(CE+Q zUC;{xqzrBU2)HEs_0G%QJKDeaF;;2O1kLzT0y+97sZGLyj?-qZ3|UCigJ>%r$f<$4 zan5u>!ajtbW=ORfvpkh|-TUzxoL2Ktx-;hCp~K=qn!y@a5(>sxD>T-JNB?(A!W^T;CnXVR<8yR&SU{tG>i}%nwUfZ956j(hGvI zE>Gr{7BOWarvT)|JC@OnMV-E*;sB5J0uU|gJbJR`fL|_jpOPVjSc|vA*u}^#j%phD z^Jv<;Xe`yi@&;b?CS`F*WRAR#%Q2`?668>&T*6RCLIK38Yk#O4sgV4Hyj)BI2RB=I zd!EMYTU>ReovJc{ope7x!Jl|!M4JZCk+sgJ3{&-X0)D?>(cwDGI@a^=05pO7G|!3m z`|>&OI#ycR&!&Ahpz}C=nF=tIN>0NQ>67AQ)b?U7HF+fT|Ms(W4?`UUB=D!FeI7@# zXRY3|rY3KapGLrdITd+XpE2)Q9dP zEb0oY^1n4#X=~(SaqgmY679a__Lvg*#uzEO{NdJ7t%rV4JVEVL)`6aOJwN0*rmH8f zAq*XN(UglVUhzgY@mM@O^GF}4O zmJ6lRHc4p7-2*xZw5G?#^NcecV@Gyz!{q@`p=gFciN?`i1fJtcWF+MzUZEMrR3;;) zfvpVVDnOKg-~0Du1j&2|4gp1OH$IL3as}qLq=%4&4~QC!9P^b6P2C`AX&5&#EHo-y zBDE#j8#2_=TBJ2Dvb1CY!ujE^560D);@OD%q3`b(6BQsUv~@aX^8Iq27L(p^Ihx`# z8D)Dj13z<4rU=pXf_CDMcpGn$gQws*e3voSNnNoXfY8uF_Mv+7$`n#>RK~jsW7xWF zj&g-yD$R=H=M;}mpCFb}5M4-^YFyV4-YyU6a2^q`l!5$ZI2>5>Eg^5_gQhZXoe`ta z-6&|$wZM#Aq8M9Z7QIxayMwcv(c;=@OOn@t zB%V?RU!5yc@&STlKA5q>rg+V=0!9={fKWNB%6IV`4Gr9zz>~K-X#Yz_kQkeo(^Qmr zWi)_lI89qFV632jmtwr+@b^llx)Gxoa~A255O+<~A5SOn%NH+D-F<qS^G6SUnI&hqq_WrQ*CHrC}&S2Z7U=$Sy1DPn+ci2whY74GoL(0H5o*% z`RamU8=T^9H5n1L(gHUe0F7(RW9W7F59wSFx?3k6QM4$M9tgG2O70R#ubIailZk3M z$R9FAlgnLV)_VKn4L{ubEE;vq^JyQM1#ia(rO6utG{oiVctwWeEr4IfD~WU1270gu zumisI&?gJ)3>o4Ow)Q*Hk&id6vR~y~EcQgMDA886MvFH2mzKY7mUxFA`s0pA>Y#p? z;QBqX{!$tYJyhTg5UD)wGMWpL3~v`76)2k7iI}aqUAD#4p$_w{9bd+Jd?2wX0RUaK z-ri_KVS~g6!S;&{6bT@b%YNiK2^veEa)9@UFp=bq-a!<(extT@;1shnsgausHaQQO zVyMNu#hl1}t@?8rq3c=Hb?pt=&L1|b2K^S@e7f_bM;yx)?e#GxVSJs-I&Tfkuw zsgUi-t82H+fI*eFg|7a-J*Y0X;bfV!Q@3J)<=&HrtP{BSJKWzDBAmS!JZQxIW-ep+ z*^^Z4$KOtYA!Lf7%;LlL9R7hU#{*O$;YRsxa0Y)hS|R`W1MZo3OMjpH%kI)|>$1Ts zIZgf%*7)b@;Z;zb0HnG1CetlmSoV`S#*N+Id2I`RM^nk8N6}2^=5JT-NmZw>%$3{T z;-v&w7x)*?GByw=nph4ZOuv$DAxMgq(uuNBu@}l*AB~o(#FDFjD=5tPN#thJ@}LaVbB>`H>BaW{vhksh|NW7^ zW`}a5%_z^#dZbyNT&I%~epJ$nY0{|T{!Ly0q^^tnVxR#Bfq}&B7Tw!Ut67p0hlC>k zdFaiX(*DL>f3SMchES8=-(`S-&4@p6*#XXrR*E24^Fd#h1S7TG#8{4)n2TRXtK4-O z-K%y)s75jHjH`)c%l4G*vSd|M1(r#eIJnd&!vStnZeEs5`q z?C@$4$-+*1z2Os#Q$gBmAzII7rfw-enxwsX?8e7u)PWB7$V!YS%Pm78D10lyD(0Ta zhDBr2Z=|_)RLjk4)+{m=D#DCRI&V`r1tv@F=&GHWaauQFv-CK`c%Icbm1RFIgxo1d zYYwh@hGY3+ujHpeMN_n#lEr2Gjd{^FTvuF$6f&jaheZ7EEYe4q7;D$H(OJ3$_<@i? zQ1J)iz&vt&p4E;dI|+-eS;s1#55oOB`_-$aEbB?poptUr*Ftwn3pxhJY7FA+gYd|PO~zmN zX_A0maYhTE7KMIg?(c-N;Tbn*Yn55^Pr=?2-m+`wc-r2%Pu)0&4FXn#z;m5kK7zdO zvRYWR?lE2y*4m~Hf_yB;g{OQ-VX5}?$uov34c!v86@JGnu^utB`W0zOJF*tXG>r zE~3#(kq^g_ek+)DfgEpVq2QZenaqF`iLSn!1Hu@TZDG{s$P(BX5(1;14D|U^)uch{ zJ_JaEmEXGru}qHN2?%UCC>8N|1n&pwDO@gKM2YpwMqLOK&3@Na_%fO<{7V()u??gl zIrMk@x#lz+%7h~iXhx?w-~>)@^Rxr-ou<0cqkX&utxHC^ICo1K$&aPihXMG`q%PKOU%Igrg$ zX7jB~q2;T+iQ#wR{>lSeJBT{?91+8;IHbfg}W4=e}5UW z{hp~8dONa9^7=D^zZ_D`%);XG7Fd52I;Xa){Tun4vHtouyhccNV*+Zsj26;! z1Dp)?(#FbHhwBlS2l3v5f2(xgB8_&tX}(?-c+N_7t7LyKEgz~ zV|vn&83qaX(0fsV3e%1*DYQcXo$%;RpIu6xa2SQD!lUO*wpyMDLM5j`&5FJKFJz*w z5lcD#9qmI97k+m1kFi$7>h!S0ZPxW2B+`14x|hndP1JU)v6)YZFb7h6G{Wfx%6THG z@JrL2IF*9^HDtawtIM^BJ-DgCOKSNu5!^81$WSP1oj^j^~b#^(Kq#e*cZVw&y%+k0_q5w#RhG5`Nf(l%n)`s;8mxzo0&C6L{8FuSCLOt&IkcA&id>Jj<$kCw~ z##o_8Az5V}cBCiIg)D%(-PxuPI$zXycV?Qy(}LF`d3e@@FFkcOzZSb;9GmbxIt4b3 z2^!^<7X48b!y8;3pNuj2Z$PU)bT1zVyiLa+I@_itxZLnV-mvMpPVI!(914?wA|fw9?hq2(W=QhS^To zPBW?P?v~qfsDdu`9<7COV+uc>pxChQG<{GH(MpOJ@XXnq9b$u(FYrFM;c=7A2FSw! zd@>qLerE0CxaT@HrTqLe94sXOQ%bTOfxBVTTiRV(0>e1Z!G2d0lPE+HblRO??-%+r zKu%_E!-^03Gel5sm{=A=SK7>0xx`XRXUsY<1&j-G#P1EdC;fsiuVQr)Ixlebl=oMhsmW7!OO$JI9Sa>XIbgax z1s<;mGM}?^n0yG5ycNFJ@r%6Y9IlegSLe=(vu2b)!t~>yX(ID6<8v0RaCN0Q3l>~e z%6?GhfgGqI?hIRRqA=hBZnhL%6GYBM*97QEdz{+?2zMdrPi&_|YrD%htJK`^*+n;} z!eM41LK%o#k z&akQe4dL@R6)RM=or6;lGH+V%+v_P`?KeNb?V=heF|@4F(1(~E+Q~iIM2Wucsrc~k z7HE%@R~qyt)~t523EwJ~au+^-YlR!uwG^;Sk?J5w;kW~#aq)?h$@8}2VCp=~s6hUV zbCT3*t$7CDT=MTniJ%JxPu7POqZI@O6HGBmiWd9c!vFF{0|j%6ard0A{|)Ky9N9c| zZW&d=X<@vB)NY8;7=9DAD?3e`F7^k1pnbM>KUZi*HSK-2wKAkttWG8PguzbXVMf46 zJB(Lhgg^Fu^L;MHGTfyd`=MrF*-6Krnb{IvEX?A@1vWE+B(-9h0v2kKLa5kFp16O7 z+TlqYu!dNv1{$gwwG1mYrY*E?J zpfUrDv5k|MjYY=$JYpzen13=Ln7d;q7M`rhpXrq))5CS&y@6cNUwJX z;u;4n6#Aj*JxuXW?$Pz`XD8}O@FA{h*FxlAlbsK*NqLF!bmzmkZV&}3DaZ&YH&$sU zh%bZ+t_I%&yZ2t{UMp6sLJe zY@~*YH zjQN_NC@*g<{9_*;CkWzI_S9TLb&D5Mi`8$3^pG?{d(V`n>rTSKa?M;Xnl!0n!pWlk z>?tQ7?H9w7jjdxAEJL5Lu?$t8W@L+kG0|Mct&bJS+gd|SEw35~oAY8x6<3J!+oKqU z-ECU&tl3J%fwdHbEMk`q=4 zGA?|wo&5iFZ4S}7C`^=%ZQt0oZQHi(3?;PUQcUKgBqPvYwwmY zth@;6E}t40uW3p{k@JF=8q!)L^vWSh5PpaKZ6n*6-E7aHgqpW-wGb0n2(N`q#iOdH z4$P2h_^bE)y090OJv1Ay$GM>hdU~DWE?=g*8Sz1te57L}`)z)9UVI z5&t+0!Y4;#on805fCc_Q2SR+!D#++BkiC*FCg$!BNRyz)3kL?=MrbOIE5>B6wSmFCSp9g3TQ2G0jK$*NUP0DmN$*P<;`E{}MAz zL`|Y$`ZBEV5<^yPZU1;n6Eq(icKC^_i-u3xIfJhy6Mrr3j!s&c(}t9G$i6{Rb=rv- zRwrO~Sp~=GBv*_0x8LU#Qi)(s(@l5Qk8CHbV_Q6>B6ZAduY6OdMCyYWoax>k@-XBs z$^&vzbrQk76J2G@9~0!C{&|j2ZJo>pNc)nIN|4z3n1Oa5ZK5zQ32Dn9T|$z+8VH*9 zqzr*jeWv&bgI76K@uY4RB&7F1oE7I*yzD58q+5}rheQ)s9fy4`BA*@$ z%LVmI6`>+zO)vA^xH=v&^)YAst4$(RBv-};I#Euhj$F5E3Mz8{uuN^^mu$jEBU@so zLd|J&ys49vfpI=Z>MM+vu+nu6;P_6~l*Th2BkGVMi(;jB zR|@p*Xrh!fXg?_fD6^u;2Ho&Cs?K0{+4;g`_-V{W4zi*dtXpbL@)jwKFCAA&n_m6@ zc`6)UI=SIv?3O@<3SmSAH=Y;=hWPEBOdGImXt^BB-G%97CqvaYhQ2#8?s!)0aTIXb zqk4Wp@Mul7`GE@-C7rai_RAQx<|y`z0t6yh51_J=EpM0MKV4ff^`m%FA&<0NI+dnEc!bPfb{V=NhX3)mfe=3} zwTi)2cG^fM4AhTrcWg46YRfo!_x}X^H7)wRA7(yyu7_j66>7rr2ljGSxt8hZyfwK~ z0=$*~W1m3RDLr*|8QhD95yG|>lX2DJY$P4fD5rCH`hYonZJxm)_Q zzk0pa3#}gBYWF7H zkMfH*A(gmfP(w?=@OU-s1@KO0T$T}fq zN|pne&&CZjYGqa`5p;mZGVrBHMaLFKPs-;{d6Q~K*;{QzoXSa&eJRj@9Jf#ywXqi+ z#{iaQEJ4IlHFo11>7hDi2y9UgX%C~oV1g{9Cd=%hfe{?%TW3TfN%*tU(|GUcVtM6L zvHF=2%0u>V+yK%^{{Uh#?$Y;O-i!1I1vPl+dQDQ&BBTTe;y~F2mAz3pCYP!Rn{sj0a{kPLY7T$u zEc)oNO*=u>3~E& z6H2yV#n!POiSS?ZUAEgz1E}vB8?L(8yj*jRd%QhFv_PLY!KCt&o-#u>WqUDYBjjLA zbu3n}kea|UXdVfu*z$Y`I=@g9PH^W1`u?M|AIw95`46S6J1n6x691#G4f@oJ>1JX^ zK`-{n@{kZ$8c#l419WOSwzvy?smaYVAOJy&D8@Ucts7**6!WUNs*$pH-}L>eUbQg8 zqrL@c)nXekPdu^HCzb0;a#wfjK})Yq(m3PjWv##!%Uza3nj#`TuG-I1&~@3riK2l< zfa)d@({6y$F z-I8>*d(Y3mnk<#d^}IT6w5XdTBDjRqN^<&a+$@A49)4qElxVZ)S3%5lF}!H4b5%n= z2(xUl>ljNk>C1LErmSFZOF?y1*l7uRY!1#xSfPufK%eeU;f-Y&QtSI0uL>E#f30Lk z_&eGn>K!xT3W;G^H-Azx2V@+bQl*(64|M zT|5plOzs4W)ddwFB$GPEcfRJoQwVTrJz}K*Gl2t4{y`izc0 zyUx8VA1Q~2uxYB^>f%6rRj~I~HDb#cS!@?Rjt#iVJR!uzwk6U&B8v}1C10SPX&wz; zp{sv>ASs!MNt^NUi-gaEkdL#`yPD{OhboN}9^D({Dw`FSCMt#KkV?R%r`%fWIUOks z);R@k(!*9m{Fv)dl}$urk#8%rg}c~7qn=j98va1fZQb`f=fIY=($U-6?t7SA z;&LK~rG#5nwrgV4XazOIyXM4_;hj_^`Ipvd%z_A;Yw;$O|EBslM@D+xCk4(MwvdzB z-;MMe&+Hwd2)JKIS7iOSE6`s#zD8yF)g5&)ZF;V`L)R*>5u|L z1+t$iWosCY!TNa=cRvgTEMN^A=aojMrt$Z?y#wj*0j!>h_Z`fA?NND~nNc%CBFpCp zr1Ms%-Ov%p@|48~dR{K+6pBJ22%D`Ad270Opy=2vf^8I;#og6#!(E5K)-Ii}S{Vu@ zyXtFrZz`@4kMm)tZx$tEI;#Cod)KD!GsXl}-4QD^>y&>+$Ik@Cd(+}F8F6;tJ}CYrXXN&Lv(N_iFJ9yey)oV+m!l6 zh**!Eew`MOpZ_~g;rA3F)#FvJP^-w&1E(MhFnze0utSgdXWM)v{qf<~Q93GVgEbb3 zsrwHp9j549K&_o}e2kA2(T_^5%o0!B9Hdh9hL~I3IT9bzY=(yVYm99#T?CM&{L_*| zm~m1;&E?<7`lQLZ=c2%a=dlj1XY1*KdIG6j@+k!MxCQ+|jJ8m#PPYbr4g~rE#NZw6 zaMwKaMB)?q!B0nw{H{EuGQ?gGrgDt=Rh@1-WasMY>Fs&Uzn3eaW~ zx67gNZrpzYUq{@xZRfz?+xH%{2bVfO?#?>D6eim%zwh$-YCO2wB63;juli@wVVL&~ z+dZ|5>k5Bk@et#)wL?uiR}QO}g|`q0bQ!8>uLWZjrS6?oXmG3IHX z(Bn_@^ID^z21pN2{S3C2L(a4f63NO2D>WU>=n@HdOEir;tpRJdwOWU zh*m@DLdwTgUxLwzmmyUT4it4d=`fAkg7W^Yo&dbG=+Y*g;8-KN&69vgO#dXVRgn(YyOs}_jeCg9z1f-dxfY& zaBdjzX~x(?J{&qgmKrC0>H7|}c=ofC%ORNj4xsli&L&xlVGV#KE$xNjSMJr7|lKxMTB<#(1X+Os5(i>F>K2 z?xo{s?yz?fSG23=mKvW+G;`L5K|A(1U)Y-{ZM0pfGV3vJ_Yu*RT6wNy$X^$F!ANfo_-JZ+|u>L6((pk zE|ecR6;&sf#7DZlh>+S)H=3dl3dxDEkj1<5Dm*kKftbm4nJYXu+%J?iD;eMd5Wo zvTf5EjuPy^Rjv1dSKHW$0`4jF-?UkOi_n@;#HEm=R-@NNt^ z2|kC~US~<$9ooGcT7VAC;IZRWCdmOd?HJ&SHGr=On5gPRlw@FeMb?BiH9E$jtaMINK< zW1yQR-`MwyQ~m5F3WkRMa^~fwH@1Ks8^NczadrB;tZp0!bzybxN7ZkKe-z+uqeEPU z@LxvG;$gQ-nEV!viSktZHpI9Q7j4-4WrH~;)L$n$kDfE=);v2QR$o{*NPvZi?$~R` z_{MP!!DR>w51Cv)&?#M@Rb?P4oi5C3?3nc}YJZLxfFf**2={f!UL0Y=U&r!{>wjAu zOsg%d>b6T1Y?yzQH%G2QvQHSEt)7zvnZ|f`gL<;VA1ddSt)#lamq~1rI-~a>AWsM-0qN%QhE%CeJZBt6*)VF|AaN?W!+%BAa=(;n2Wy_NItDa z0jck93{NsWeT{7FtsR95GWoZ)P4<7@XuH+$uC9{wVy0*ed` zB~o{2@3_c!A5|*UsPlcxt_)Dt(T!mpnkQ;4&ydpV*M?v!oDe$vi2ah$IFA5{ptnvg z#C85e3{d4H6LRgHNPJ7>%J^B3_x+q(h}JPtEc-u;u>XAkFX_~++`OdCpOcse>@EQG z%+XH4#f@k=T5Ix>$ktjw6zLmcII5fw0&P!sllaRXPzqs%jJDJx5ZzHib$T+9=vqp$ zH%^L>Td2nLWToY#Hk@}%lqk(rAlpUcKrQl3W^Gt_@X1ydsQUX^lEcb|o8I+2gxKj`3a(Y2f?U3-BAntVUt!e(0I4pw)}k<) zS?r+k7d4eFT&H;}3|6Wv?l2L^S?%iX40?aY9x?#$^5qS;iV`bDKK-A>XrrlwMsM)U znHT$?_)qoZop*X_G1tZBF%N$7o#-y7Lx+WgVJO5=R8E7xwnU&3)pcF*!ztl3x>#fM z>Oevl{<+hy>jT)`ZE;Tgl}4XtIRFj+=F}&5XVwm8-olz#_{KJ^>2=SAuQ+5+3^R>l z;M`^dwpdjfiXb_1bn$ZuTAms`sNYmnS6e|<;_+W7eGvA^z(O!2ZPY21fLH_}e$)-k z`rSXn81n+qiiq51PDR2nK&0KN%LEKHzEtaGSB#zvFYvXFv;Qa()AF$5-0vT$(#)&} zsv?n8tE_CK{4pn6BFaOBS}URowc+7NU`dB;A;uq3^qNB>vC{?4)bMYEQrF-3Li5z8 z01DfUag_Uyx2=PS#3LfJ!ieeubrmWjtD$3_TLowhL$qmZl#rJw;#WTIH~D61!gIHS z-FB3mg4%uK^C)^WO(N~Su8LSEggl=w|6FprUTG-V50Zt62UcQghdf~P;FqZn7KqMS zXApNGf7E(_x-wcNb>(1hgZl5`y6S^}t|%MH^mxO>otrh*e{t1ObsBNA0*N?dqapfT z`|qIWSnn+Ty2xlZT^F>^5a3eGK5hqQxF!ZCS%UFrVe#F2?&yKqcl~H-oJ_VJZq&d@ z$LfQzp`6O!pX%cFxEE67m2?1FRFg)zOd{R;UPQwz5i>Q@gOydd)0LeER8!5n?vWyb zbWl1(M5G8IA%)Ppfb?F4009C>=)EY4bOAw--g`%yfC$nBsRGiJUQ~Jq!4vfJ96!DH z{_n}kTABT3_MT^+cjnz|!OH$|Lcalu541I_;^abY4{oQ^QhJbZQyRA8k2+rtY7-DY zyZniXz9w!VCu^|kM*4>ayN7wkFGTo~I&13y0nkV@JM}-VWPoHyj@Zbc}hOEs%O$NkT3o9VHR)lg`0bkHZCYx?A_{8cJ3)5 zVbYOOgS23l&qnR=Q{OMri)IuFpWyl-+Bad95qnI0v5eF28Fh3wBHz+}%a5_BBx_o$ zIN86Uwp+U&5=*%8V&=GvRpPqgSxK-bH5$;^%+`mk0dE2v7=o_>HdG$kyGzgvY8VYJ zG}v6`JobKVZFE~}+M&L67bs*xa&M4h>e0K>elOO($0ufT?^+_wsE-}4 z1tHOD3PiGg4@+|o^+BOVHU{Uc0?hUkLt_Y zLd)+91xx9r5!$eqB z1KN$2Qj2VJqmytx;|mlqH+MJ-2^g)b11}7DX*dtZEc)da%<_MSS*U7Rz9Up=C6Gp> zNdrU-lSLnD;oy9Ge_$M#JYyJMaHe!75L~NBQA$JJvUzalDND^w@|&r*m}{la@Io@1 zJ7kKXwe%U4f#q9v-x0;my=3{fW6oH%sTGEA9qP!}Q6Y+Vr^H+GacX8nCP6f-B!#Nj zzen)9CN+;;<_jr(7`>h|a`jezVd+s8NFJQI?XQjrLW zKp+oukvuKsi`7IN8EM6yboWaMrA_Bb&gO#NzjJw>-`q=qpz5cURxQ65+iq;Xh zPph&zY|~GtVYyas%S^5;Pdj9oyd)G+3}CjnQzl;L-F<_7_uga_C4#?khC*;$b>M(M z)hr)Cvv`I4kXnIO{cQoRzL}Wng}8-K+g7W=_a0K{ld5a7@WmT)vQ_Ex66CHHo?uL~ z@HZ5f4l$0mlQ0>jmnU^ktv79oYE)@Sl3i#;{ekXYQigIOKD-1!|2{DDR2cgllKWyx z4Xt^_lOD~*-BH%>drS*7Za(!07{&3P1B1s{Xd>lAK27pZBvL(fZP70&8FoAPLLg4P z!W1C{y+#-4zC(3mdrQ$sxN0fXx7}xoE=We2BX4+NFMoQn=5zH}2t!JdHNP7nZi7+R zDM4AnHiEs~j;`d}VWBt4cc0`tqOt&}`eCnuHm3V>M%jeh)405QY)W><<#)^0x;y}w zSKHGKPd@J-CSV^s1&i-yI?B=6tEUs`?9*9yH4IypclLSY`br3oOUpk|*TK0$=q4$w z@=SE&a7i9+W-flsiz;S#w?$8XP%|4^E8&tqWhN~D-M4m+dsZPpLqv(PfdB4k2fo8qDvuF-P^O4a>-Gdn=uIMvH z2jLPuBY#-}gU`%hx2 z(TgTv_$Qo@nDWS)FH9hf_Ho?N*1=rV90#A6t_EeHaWgro+pVZTS|_q<(Mww;cX3)( zG8l)JtDSjH~Wh(8A4<9Wwjkw!zJZGtB{HXtBdnp%h zzqx{h(8=Tj_E)hlK8T`2@aVtns&ZaAcIwE#ql+Kz1&9!$&-~j>8<{D$gOtW=N~~{v^IZkZGAwm%Aqh6J_`VD?A9v=6 zQp4UE*pdd2HclWkDm`B9?W|bXZZ3;$gzKDrPQ7v0V&{U9VZ(-~)CZP>?}EMcYGs4{ z-`R-(K518Nsb&Q_dQ8|q9ixM~G&6dr?PSI(_7x_(2@O=oaqnoysH*JUak}BDm@X^= z?+T4`>FeISNH0IBWcSHb1@ySPjHO%IfvbC$e=xUPYrcK4zvJnB@Z8Jl?UP_Rc*&rV z<67SZ_yJ#qWKilC`H#e-cfT%9#1@JwM_TV^>F^ZYxsdz$fG%-+_UbHy5Xjt**!COYAP9S5>AQzHM29~5yV7l zT*~Rrjs?vA>#dF+kGT{tYI%q!h>CooQbY8=@MQu$V0#aM0?|~R8LMv@8)(SXeOC&-7S6^ArB3CJff%@uj z4A{nr?C#gb$g;L}kCoF9V&b*V$FtGPNSyM9Jl(+Y_a;y(=F}@!vHv19f=rkMl)AGO z1-I^yRnNr2B+y^aioWA&2FZFfD?;=Myj4K;&CXj@6}GIZcBp~nQRPsM(V&5+gs-9T z1*N9e6xgSlXVPqE!%SB^c@o`BE@$pJ$7HBq5&L*XXNj(FIekZZ+g)<)GI^#9lnA+9;^lyT9QCoDb~q^F@p(`PldT}=ES~d;xO8X?O_6oMTlsaCVI`Ay<);R+#|kMXS?ih zZ)~tHq~#b)w(-vfdRe}j*1OOq^+G#bYTp~G>ReK&+!=Tw57xl*(j zRWwf4G%b!^m&7kGEU_9J&iPP_(e-fJ(zoiw@aYgT1|~dmD@N8b7F@z4C_kq_REpCxo~R70Gnp0(X{Z-3pfh%eESV=7BXX^iy-_XGDEE~Ol1 zlpX7?=swkZx63^DbwV1vm|N7}5o!%)kA=HkjBCm8SbJ@XU)%M$OFbiMMSxpT8)Eb< z?4G4*xFqO!y3~8|&W7@4tO!q`ketX!rTjops^{{_B83|0TmGScjgfsu`nBZ|E5v=O zyd1VLjpjlTAvbO_Jo~tt4w~6&JA(qXmA+yt;{ccv^C*}zjB1TTTlKmT{)-NuUar$G z?ByQg2TEd;G8i(d_Bldesh^`XRNY^&ED*lhSV zKF9SQ>f-tJ`Pd~Gcx2MFVQb0gwP?XK70Em)A4c#h5wKh}y(cpLvWMXCa>5N*v7`HH zTGmn#Tv$Y0`Ew1UK?kc%_ep0-SsizFSRfH!+cC-jhjmVjEM2xVv5P2yp8YdpTM(!6 zRnW;Rl8;X?S6LiYQ*N4!>WlgZDMH=GVFjPm&+Oe{ za~ZI7amVem$=xxW1R;vYK_DaJ1@Kq&s*;6WvGCy{LB#4iw4W(ou=`mySCFp_`3v6c z2k#%a_o;I_l3HG1q?icz(%943Z;S}A@ckfyt|ljM37d58FVMO!JAE}Vjl4B($$VDW z664U^>Y(rnr76_7Ki#4kB;qx8zs!*>DgI=skW_~cbUjf!#bdxW?V-M3TEL)8&=g}a zyK2~0j<}pWHFEU*yZS>?E$1s{y}r#oulqfWnMtEt=MCy+CI(>kekuay1M1Bm+l?0zh=2Rio{=a7IZkEWl+E?)BsCDnU!jK zyo(k`KrcRCB)B&Yko8k&5sSaJx6A2L>$oXgc~X@ zSds?LPdR@a8825JH0Fr>H0DFtA~qVNo-9Ts_nA2r;qO6oId~*?_gQxoD<^fD%_FLA zB;6%x`%S0UVAfTw?%hhVoAeQ5!tx{!wcHATw=DR+KM)DG%ebgy3#0kSMe)?RFiyHN z+j{t;gy=Oqw3g_IHBdtA{pgc&&Z$o(ITt?6GP<;ZaCK6@6`kBdx4-_#`D_45gtwkr zsz`A1q68jpVw(R{mG)+(ierI2h`NPFL57Az_S86b{l)f>{Tr~{o0rg9ThR`QnF-Y# zHpLjfH%(F!Bo2 zP^e0qfao$2*AR1}C#^@VL_wL1)s&uk1RM8jZb8i z;OYZfE{n3V>bauLx4S$!V;Ow)9EpMlAG2L+Y{Sj1tM++Y?9mb=7GD9y-#H?AOmbD` z6S0}d$!oU9+yhc;3!}B>9KzTKmprRBMsD#XJKadkD(Ox(>_~5;K(o!{xr9Rqlq1(E z(kF(3xVNt#-;&7oy3qPHhTZ6$=vu|}buUZUYQRGo)VJhJo~(t;lEln*MzO5RVnRu( z0l=Y1&3={*A{j#j-X$Hz+~?Z+WL|0(7L-%X+~0GW5lFh)ID**&W{grlDJ97Z zb;C{R|90jG?bXT;GXp2j3=}0YLGxTv4c^VdRNmSs7gpoL*vsD2#yb|{ z9G3G>-(K@}KfXddjVEt6%=u7-a5jE8gpZw~tiR;a!BegK#08YAM%vmRD7Ad*IXl`) z@KPYHbY^xPcl}+A+gP=WBFo_V{(UHPkg>?LblIV3H!y}bU@vT_+-JvYh9pY~No%vd zaR&C8R2i*QBuR{hfSiaR6h2*>XU@%0!cCE~zUZyT)`890QTX&^e%0L*4N8T1gVjrE zkxIP}sONe-JFiVtKMo9>#%U%bitJbqGJblsxUjpn)}Z52V>+ur`dQD&AwAiqvbv9M zwe&8o@&g^T4^`cU&K_&BVrnW|9dGqG9!%+d@p1ffV!06p>pcH)36Hq?nCSHMtQSMp zEMtyqFKb>VU&;1qB5_IM-FRrKJ#(_TNLdvZ?Mn4>NK*orU2MlvKD1SXCY&ginf#dK z^3DlcXJ+fsj*KFct`hh}uq}VSTA+~$ z{ezBG>1~TfH|7xQvSo^a`n#RntQn7Ay+~beuLFkO^C4``lvQ-pBk%KVQm86$+6{hM zI~llt(NwngR;}>Ir8V}YwmMRpGQ9r!y#4?eiFdTHE0sxtAQ^8fna|rR&h?QA)w zAhqNQzOmq`UIfGGw+43(b&^3~p`VrgXb){^)6>~rZKwAPAeY9(%h&WGpIi}7S$b7z z`yf;y?X9y2P;rrmFS7;TF6UX~jrCE;DNfx|YU>Ke|OTkYVhao%82;_|H(o8H+ z_UbCc#gMhU6&z!#)krlk2>xn4ot|j)`1(bBsIqREYj&O^4@bYfvAjjmu)E(}`e6Z> znIT%Hh0!(n|?MlMRaNJIL)A9+ClRd*0E%=({fLzI`wiNI0)F%%8{G7Zdi} zEzBXf+tHX2Zk9(8RJ4ClF|v4%)G-~VEn#^W*f-4_N6g`;pOM-7LC5*k^GBB*B_E`$ zQmh|~L`Wxfi3Ph(R$scvx@Uk?qos0-Fz(nfN!5E!`|%|qOQnj|J73eI_jmghuCk%B8B7Do~Z9uNtwUaUl7hxr2w2-~U8F0e%TPDV0&ut*a~w$ z(D@s{TuTI_CX%}9&%iK~K{ev93l0|t-Nzy*)TNzOR^3)F-fkGX-OiVGd3xh;%O}rs076jOQhns)&2w<;iL?%%Ve2E! zDmFuWTna`7yOEcu=YAsiGOdFurTASC>)YO{0?1(+)r$bW#qWMA!Wnv%ls?8Dn&DP{ zx++#Kr!Z|uq8HuFyvW_2k8HVgrBiQF z4M~nL=-*$ZGOOUsoqgS4VNMI~`Bbwnfu>oXm{SKj>ZfH&T7-;V9vCkLB333b%>Z1E z`o$@qI?T)hzB8j>FIdlhaixM~Of1Xe?A;TCSQ*jl9*@MqXR`&*U)<&@j~B_&A~mu6 z9z4#5-zs1@g;x`7M%uF1d+_8)N7+TXlqa0Uz~opcgkWA;(=057Ksi>z0iSee$}VzDWuPm3dt13;PLqSA z-Tn~FBeqSFYPl`*#Q*UP%Fz6TAbex%$7I90Rt9I|6~%ByDRoCx-!H|RT?<}bjXkTK z6l6#%JGtscb)6oa@`vh7#6gMSVQA6}A7M}D6A{EvsOcQV3yJT1*{-ik5A}?uy}CY_B3_Gv45;8Tp;5WuTs)E8M=4nQ*QTCbz{E)X^3nd>-1Jp1nWqMrFBbT*Sd=ISm*_& z*t^?Ji(l$wKgo!pA1~|P?bLi!cxmJDDP7qUr86>)L4P!DgeN|BZMag$Yqcz_8N3cr z>w5BfZ(GIY^qtzqinHC-sfCeG(Y|^YU{%@K)qvLJJ&)I_-ESA^6Qo*T)S`-FlcL?E zp5<~4^iCvMg~9ek%2@7Yq0yr1Rge8-`8i))!4I%#-gUOSy?R`Y@>khv<;|ex+oV`6e<`YU-%o`xKUI4x z6aVv?NIQxVui%jP@%(|)`u^6!^7k{zQxD_YVHomyo-19pLk`R-tykj}*EMR`N;-z~ ztQv<7R}>gMbPUX(2c<+hPOG_IR;dcPY%Fo`wM}kezqtK9PXFDTwGz};#xa_*&6CC1 zi3^CeROcW8vcM*l9p-0OC`T6u#l4P;MtQBahu&RTPT20e)92n=_m)K+%K=HA8V zCP%dK+ze->j=8%~EJ|y_Msvg+lvR`v())$*S#jlP3p|1!W1*Q zV%gA<)}7RpctCjQ8VJ~`RSTEEC&?-(tAJl^`}n|b@#u_YjWm z2u1cGV4&z`Jz0#aH}Sg?RnV z-4y`+#)nmHlOZBZ_EC`*@LZKv}Qu@GK! zj2*`Q2Z|TV;02YLRaY6w-fnF#l%R0nEc(ZyOoZJ-W7P!OmG z)CU^;vhiFK03q<}@TV{Y^f#XX2>5vhuvVY*jxB*dZMON%Xb0dgps_2^4FCf313k{o z1%Mz3pqZ=2Sa$jJaOKL{xMs|f`v{L=)1fU5sA!O(vw%K$93`5(eEwh0HK z|LFh`0Al`WLivHNznWm6s|6aH5offsF|n8!0A+81%^flLcXIOoGl>w`Kg;F!9QO7x?Kdwgvy)T>uCK`3D&7 ziggzR^!$Bxu)kL5`PRkmG*>ehPX`p>$FjxlQYoY}>iio3@b68J4WI8?C$xhL#tHDF zf@ok%0NTmf<$PxXATTUt8u`xwRsk_k7j5BU?F;~)7aMHXUz-A(+#iAeF(3ZFmZz<* zEPF@l7YkepV`uTR8vUja4E;Im|3x7fg2iC}qY!kCA^%F)&OJo6z$Y!2Z8uP&n48f5-UwLD&WL zuNVR<0Kq!`M-0l3&C4G#{_{QmM+_v0&E_9582rx|KTHt*=NSAjIP`DLaKxYIf)>BnKwu~cyBGh6LHPgbhwb=h3;_{<{OJJ*4CDWETm%G;_;Vg0 z0RhBc;|d7E|MU+8fx)mv=->LFFo8eM1tY*%TFAfqff3NZ&V>kq|MCSQ2p9Y_=P+!_ z|I~~f74~O81cV>-moHHGUt=JkaKvxExHuuvb|@!e5fSVy2knJAU%NmJ48{fUV{c)4taR0$ZoY~ZsZxMo2RN+d@ELw#j5}7Z@;|xzu*4nfBH{v zKYf1x@t5!Hi~sGHUw`}Zo&E05-+lk@KK_sY?&J6W<-h#L{}q4zr~mo?{Ql2>{{GJ& zKm7Xs=eM7}fAjI<&)>c|fBV)MXTJaI$2Z@9di(3gPhZY|{`BST?-kMBOc z{_s!#3vfRF(>K4D^z!?E|Neg`1MW}tdq98x^K1V7@bSazZ$H2J^#0c`-{YUxpT4~L z`A=_t{(KVie-E*TA6|cc`=`%e{&o@ze-AN1D?W=Bpnm=7{hQCz4-@?CMltKYxDPsD1hA z!%XXW6aVM;pTE5S<=yA;!%XUVbN(Xr`OAm*pXbHs%-_k>n;+kGQeQjEF@N5EdjID8 zA720P_UGg8nWN`TabrHbf8Y;4{P6R~U%%WK`r0XeXXx!O@6fuR{`B)-f9!<5c8afB z_Sd(A%pa8P=MTTno%FmZE=kRE$vtn14^m$~y?-~8dEV?E!!|gY#_f5t``5qzh=0CC zKc7ENUGBejdiRn0_`};ze|`V<;rsW${P^FnH+=duwb4I!h7W2#fBF5*hriCc! zfB5+E;mhkEK93(}QqL3RZ-4pi!}~99Ka3w{QqL3S@7{j=@b=56zl|SeQeQjUb=Uuh zahxfA?POn2`mdZ16REGA?48v6AAf(#-_L(%QqP<4x~r}U@1Hl}sWD=H0`u)Jvn&tK zljV)fZ(n{a(|QTd(^MLXFP3cl^~c{jjc3km()g%|Ja0}PL_T~LM4mUB8xd*%qFbLQ zw&y;%`t^D8`p1vIeR>a7^Za*a=6TY3*QDpo-F1`xz@()PO3it;cmBYn{qkAx6934w z{Vb+jeBQhjWAyFEPruAUIX-U!e}4Ps3y}N2GokR0F{EGr*3FUlya_!T`r+pvfBW*` zPe1;()A@sw8fx~P&hzHaH5hmrN-KmXHz`0>Zj zZ@+wJUi?4TkAH6B^vicI{yCIbUi_~^-;m&j}O%;cyAzSrbhPim`chyDLShBLG*$q+Y}!5OXw`F{q^u zL5HPRoG%xADkj)k`;<}N=QiuFm_*4IOcqhw|FDLqfPWU9udUZ(1E{6TKUM8B$$Z-O zg|!(%smS_rwIPP9zOg<_!~jj5U4u1oEI_O@7yX5HmM7F2ut$&bvl@(RDO_j*J{Oyv zGpfAQilviOdCip7R+c+sv3{be7yCwb#i)9ntJreASMc5@>}OfQ`)C}>G<>Q#+M?iN z%9sa5b}Lkegf4QTTSF(8ax!Kf{g;n?ku#%UAZyBBJHbxy=aP{Vtb;!}!Fqky1S=)E zivW5um@+1qE7^s7q4f#Ifq=?4%Fk*N2ZEAcz*F0+Gkl*g8BMcQ(t*~{c5nrcImvDo4jJhl}yJ8JmEttcq?m^edJ_gxc7bf26q9ZgT9>x-NL*sx==@oOj2 z3I1F%aw2u`Cnr*`Z&yA<6o!%#Oq9nAJAyMs&_QRE8ZyFAHi0)u)Av-bVpQ~f6Uhhzf&v7fdr`xzCca2*#Brw~?w18nKWQ;qj zSpbtO6hkS%TnMtb#89o7pbsK2!E?f33TWstm|4b2aA>sH{2_QGJP=IcV9N3wYO+bu zLHi5VoPvjDVM0}G($J|GO9daX4s%+-SL&D=o+F>Af(m#lS&$AI9ul%T4PPxrIcazp z=hhoFC=hGdV!1eExzCU#ioR{`L~;q=(TS~vCb6CTR0x7evh`O7hZp*2@q6{X1W30{@g2&LRrRReXE zniWTm+5q$>2@k~xdXqOA9@NoflRYMeFH%fj}H^$F$KT+g7tRxeIBIir;d1|2`2O*S0@Cq%Uk!??0qhajP zrK+vi0a37M6x2BUw`~-}Z8lLiDnUUtoUO7v=h9}qD9^!T{Ww()h0Zncb}xtV3UN?X zr#TY>b=aBRT7v6nSnudKqtGmb5x#9&2|WN)xvEZsP{uwt4_zjyCT~?99va-dg&gc0bHkYW%vonx)y3?|!uC|+LJe#i zNi2*S^F^CS1<-Mnxi^0+)Jw16GHgtSA0at;;ODCTp_AsaO>9Pbc}51VNQS;kYftjIxU zG*(YD$HUgLon{`(8}msu%EP+i8ORo`){5?sTzKjT_@m09uw%kFRSu~~p`*)B-AuA2 z%U8k*^D@L)FAq?ud7KS}!__XWT!BJe2J~4$f~pHab`i1E(^A*Uu*+w6Rnd#Fy*Uoa zy_nXZVPA-1oO7S%Y|V9*&=HCS85 zm$Km+J3a(J(A=TpBGmdFT7YDAMso+F4=SVP4$C0cr1~054l0&Y6V9cYJhha2^_Q?K zuuv9#T1>>gx#hZg>_62hE-Gr{y@M#Hc8Il@WHp}0kagzO-Jp_j$XXG0ohXu-^71Mf(ccf-`HmNh}`GO0u_u`JJ5oT}@RRnTUORh?k5 zPEB#T9GZT~)ICHsF+h%*ylE0o*QwqqG?=!T$AcU03ha@#B?z>F(Xa|_(yIcjRWF&x zZ@DhUkgTQsAfl#beJV5yOFnUXSfjz5t2eYRWAHn+6 z=>$4f)Fw*=8hCbpr)%gypYOf z(!*()^c2_;yGHfr+;gW{cHo_7@(DMb!FU~&jME>gQ+ z)6A!me4P4QZ~;ZK-LFfu!mAEidF$G0pj@w#dGHM*Fsp%bwp8dMQI*5AvAjtT)kEXK zgr{M>xmsLMqrBHm!m1fx_dGLW5ylW41dkp!Wb%H#P^XouGyS z`nNsQwKW$|Zlck%8C?-EZ8fDHm!89vRj47pRT;?wYQ#}$_>2537vxfhp= z*=MVyT`&}m)94OesnX^sp)p740U)6vg&+Xqq8tm@&Mdy`Vu`K?PQlYFGIFg6czUAP znfYPK`O;>&D0kc>gQm};z7)MK&oFwj<`a_D)A3Wn2VRW_)jbxLQ!-WeL!>6mbs)!)adh;&(?ew0OfkL_lLRH54@WVjjeKcI=%9+QKtB z30>(*Pw94t=2c^yxIdxk-vu>Wf%8lgwy=iBZjhU;E8qjPU0=L{PgK>TrjvOL;ESR| zKihV4C*TXjvky+e7Yc3NXO<`aM)y26G^`ul^-zT%IsDX{4{eHElc$fm#iY$x^dz_f zIA@pt4!U1y>jWD)c&95(JMc|HEE3vjX!9xraD^U?<)};poy9zCDby82ai6fg_?u-h z4|nJubF1&+sLx=H7OOxz&+@Zb&`1%LaX>rJxAZEgt>YIo(0wm=t$lgoV39_br-mIh zRk|5a_Zb}?0}QkiiFY%Zm(T<2EVs~j>&(Gfjve=qH}_h2f`l7M)OFUdzqhZ;) z>{XY$fbA_5ugW6?Ww5H1j=ruj7F9iTi`4XsWv4*`6o~bt(5S71;5J;tXvGYRYJO1x z3?=X8m&XM2?X+K@Q4rg*t<7RzGo{KlqvKq=ZC2%cP?c04!T5!(nbl0Vr02|**X3Q^ zoaJi9)|%Z`uKwPjvCoQ1r4UmY}l!QhT&(@NN=ki&Xp zn=AN!WSviZ#+Wo(DbS(n4lT6FsT%7budpHM@&u(gXWb}R5}2^tM&%MKJ*gyGfw=Ha zj(8X{h{~d?8ZFaX+wE$rK0`@YBLZPUHzCCZq)3F`l{VzA#V*if`AP`T3^eu$A%Mo@ zc1m?Zp9%)Ffz*zrd-17WKpwVJY*7ru-SHIaUTo=dT6v`<$}RN~8)c=I{yS~{33%$; z?E+Q6`*!wQ6g=!RX!JqBhvsvo`N86kO%Mur>W;7&HGDDHjI)NX7?z;A$MVTt&YDkX z#kJkt^>QiV`w+5~+@)GY3xIR*!!`JjBy@DugMZjyq}K$7v>kQ=8md*5cRA9rX_T+7^sUOt44AScVm9yE&~NS#=>V(9k^OY13JZUHIEvA$ zhOdW3F|?_ai=E03#;_8xJ!C((j!I%jqpxFu*`&}QDCgcj(0oS=1_p`?3XNX8G35!3 ztr%$7j4+M7LgSSxAa_h+LKUoEg_f~7W5e7rS(>3A6&iNMTUUwNN-jL7kUh*tZ`o-s z_?DZ#02^`+3nFH#xZrE7NRQ+-^Sth$Nujt1P&2VvsPdS2BvVv1P*?fje8(NT&_*>P zhplgRBLdSSL~nGX=)KF6^fj6{H2HIp%zML*t%?giDzYs`&9aX?g>Idg>}VJ%dfDu_ z=)z2*$?~y{PGZhxo)JB2%Ej;K@yAQr4n5W=wiWsmjPiGV?G}e31#b)b+30eIz0Yz= z2|AoHJlIn36)G*)iGarl8oC%t_<+3(Rjcwyi+k#YPA6902WJJJxIJ;WML7fu-?J$? ze2{5^=7;V8Y3_#;zP20IB;nDQE<-<%@X$naGD-2nC2AJ!q6a})w2S8=n0FKZ4{g}5 z3DjpvuJl!EAsJTR&*_z}>4mkELV9!;jT&0-q8jKd9=oV0?%QQA{$^Rc-9_WI#R<^P zv;3@g(Rl5m9cbP~HI1>0E?WDt z4{f1cOR!HdOe$zjEyB?1`?*A~n{~RTgBknCJ$x=2dfda~W8&d2$LRcc7H7J3$8;4x z9K}#aN;DTKisu?mq=HecRPXLcg$MbRbT_1UBGtfnB2gk$GT`c_Cfig=S0t9@8$n(s zuIu7^!svr)77Sw_O4zjvA7LU>CA@bMG|v!A)aA*b%d6@LETE8bic>YvNV6MgyjBgG z9A$pSlsHya*8zFaoyNjQ;V}8(0HH7bKXsDm_@MoU6RZ@o@LPe zPm-hg>YQZ0bHVpYB{?-Mz*%Z9mv?CG4Ng{Q!9okOZpVByG`@>s9wI-_we|AEdXlb& zj&dg19e0^$H#4~tEz`h-g}mVoT65whv*ZFYn!PB?y)oETs~UK3pvdz;d(9mbTpz7h zBM1$aVFXntcm{%^AD1leSC^{1i?f-ns>_F}I|(|5xx)ZH;weWBhx<)(1G*P`$R9Hm zzdK|ZUk!zFho-a&o-ri^bm5gqa1y$@<%b8^s)NkH=%D(|p$Ic!nCDChN~OGcGD zS_MW`OJ%&$=TX5|*j6Sec;9peO`p*==s%#~u}C5Xo`9zzn7rys%$xunSGOw}hG{B_ ze!_gBm%V~7kaP<^bMTCzqsuEVt2Lbh&5Vz^WWANzT(%P4aeA4#|K*hJ^AbXW0W=SV zcL8wBXaJ5G4P&x4<86e>;CWkk<)DM^V6i2aN&~qvq{spKZVAc;pg6(As9X`f_<*Ki z45jKSetE*zSYabX3C~z?e7Pa0(`KU|@>TxO%K7HTwrMpOH;y3%$_X%H>S%zYpQbaj z5?V}+M^-+ePjA8w-HQEp6w{S9ZZCc~iW$_yUd6mfgIqk3GBq4F_KuXH4)PuU8mXW; z^sg02P!3A+W`k6*{CEK)kZRy`cXy=Ye4?~tZf*xbw$(!2rjN3uhE4kjKC|Y59H29j zBFA@D496wQ+i?}OIZ;jEDRL~kYM>`2zIKynkOVvs*`YymsO`{2aFKcRyWqOAAggfz z$JhbVZXoCse`Eecb0)ZBk65EwKH<%(k6^2}mn@2$qkps8l7j$9409yO9j~m5DvwlJ zgBo!cX}bEbnLto!VBiJKb$i`G;V#M+$TyE1Z%flYVu^4M!?K&M5vf6GjlZ(i?14k<5AjZ0Pk|*kOT}b z)mk(0KuJJ{GE)>eDg(thK`vZ^0{_tn666@!$Wy@*<v6 zM}v1_3&P^iQx3_&jYQ28#|H++`%Nc6P+3Ypvm&Kvi~C1whpX+o(!6=2Yf12|MMw6 zG(c=_<_>8+ouEzEf-Lm3*2E5QB95kOMD{>Cw_Jg>uYY;*&(yu`i~rsebf!O+zT?Yh znd{v-_$BrV#BFkvRX`1ES*hrS*3N?N?}q&tZyhO!PJTx1m(kV1`fuELvZ?_{)Q)pTwG z^xzQ1$t8zvOIDEr5Ng@9f=|_g8WFmELP3ceq!N6Ko+lV+0a||pYi@5L|rYMGS#vrn?3J*!fh{o$GAQ||)PSRpPNIpCk z#S9U{YgtjuvjSRBqGrf7W8<_EVAj@Qs1zX4r%)h4)$zXW*sa*}`6lDe07I0nRN4Xrl<2iCnvbc*9QH3a8NSI7Fl>C&oMO_Vx?F8?y2gCS^VxBm2eTiZ^Nbx=0ogFAy#?TFEYA*E3fmGV2q>y+}?aaE5csQE5>k6cZ zjSRZx1}QPq3X^Evk@!xXF$va4nPXL>Y$|rZNF`X%D(#LjY-m+xvoMkt_e=T)%3@1j zvuhZK#A$Ka;<^gQcx-&xCy?m>V4~=lp~EmB28>9_0R7dhQ|!V(ihQjrs-Pz^%&HAv zd^Qt`?0dea$AsMUJ*1UmJaowb-z;Fls^Wr1YIgZz->Nl&Rf|y%n~{Q;;BApT^ri-vI{WN{Z_f+117kZsUS zQb-Hgb~_af46|rDaM!6kBb-E8TEL+7qO|bU3RKlz`tHz-Di6u;u#j6Z(<@!TG8Qqz zUf*Gv3?cJbnkdF}W0d|;EVRkdYD4i>oIFeEXh(0QtGB5BMBQ6ZZ@q1q8KZ(7emnej z-guqg&e9$}qnAD$rRW*H5fuP6bq?{QLF-o)-<0g ztm}c61Tp3$Z+xXm*V#=?foJ|MNF@3bQ6*W|6kDVhE0H2&jM}=XDYlGPSs`)pl(eZS zGn{8p?By0v#a&4FtBjg>Cd9CM0;xpEty(uVVW)M*sV=Y3K6$jdY!d^j8&jh|f^nQp zO<`RVCo%no#LU7T(d=VM3xc&qzv)zL5>P;lY%1dq1Rhwd8Nh_3Q7w@$K!w4y*EKPm zK8ys(HS>TllDDA680N{$GZj5GkP44EoMND~><&8yDwASVh16nzCcADbgL7iT3WDoP zc-&~o;vs`Cse*lx7aNc1muUo)I)S^8z+PKn&36)(P8Xd~=ETEX7buy2r8%up=yy() z^o~+0my@}p^ge8%G^!COd^??NUDv`#ZD2!k#s;DHp;K@lZe)m>`t70veTpHC;@P@RTJH+dRUVi|!6?876~?r4&3j=A?LJ zgjipholunX79@IIZz$O2imsRQg2$Q?9<9P!HVQt2I4yPwpHXj_yST3+2ss{$N%(?= zOpkK~Pe)E)WVz$}aeDR(I*?%=W}B*)asBu@MwQe0^3%i_dO(S$Ws?;2J_6u&&-`MQBxxFA!LYey!63{OPp6EC1G7OP=I zl~MlC%IQFr>2Y|qhwt0azbC-R{jC97_th&PAfJqLAAUsfAoOXobm+!l9bS5)_~9t# zL87^e+q?8)P9*H$m4WO95;WHeo;OI?-l_abBnCx2GdZu2An5{A{0gMXo0qsjqH{;4 zx-8minV^Gi@`4%z2?bt?-O1U3R+$g1C^Tl!;j#3F3+AcwQy=#7fPrTSH(8#b!&;}S z;T02IfHu|8nc&zK?r4Qi1Lx@>&??2FQ)tX1$$(yKG#;Nbrj%sfG1LNM@(OaiYvldF zjvSNm@Ek;;K}V`;Lo7uC~OCn>H)7#8_S4Y|$`_a`Xx<)59~R9U2X@ zRIKVMjJwG`%W~fQ$EL2_tD!SaOG3M@#_<&dOGs`APg7P^|kYpvVlEX-ebtx)RvUXg1K7)cGh zH-@npcLUGEh(l)(Xb|YGDer5vYlYs?Wch04#@wE0J+3MwW}mBhKo6aOCUUxnFl_DU zoD%b4EOex^m?4B}m9$Ew_BJs@r-wK;rxtR+C}NiRotarpP{Xdtl&EpTT6>a8b5o*u zT0=SP&?3VM*PzfMIOWyb1`Ud4ZFZ1g9(x6v&5SmVk`&CR@|X6P=)CP1$1GS>X0Qg!=BS2 zN_`-xJ#wmC@T?bB70Z)GiCUubTbbsa%l7Q#!LZDNKEVr5QIu(89;LJ@Z-04Ga z=3cI50u^Q`xT+rpKjZg3pXLkQIHN4_Mx` z2zVw|wlXw|>U8y` zRxvbnw>(@^ zA*=3F$XjOB*`aX++bQ>*c}PGWTC16G$(nmLs(dIBlN4g$82jj(IY3i&X@pMbvjRq9 zVw#UZg#P)_o@~*I=DV?hbQVLFGWW13E-i6VkX2x#;ed%Mx&Y)Yd+=5w@d=G>D{aXb z^oJvni(r9=RFqJPoM-yW>UZS$p0Zibf*cb!mx=eWpbcL+tKNhR2u#VbX)D(|C}u^j zM9jV5-qyybU7`;qFT@Q0om)}cdliZtCC%+Ezmg3 zhF#|QyHA@F4Z4?O&ck)5xqzt<^iVVQC4W`qux;_u;39`j6Ac{V!!RkC8q#(SpPeSh zcu+C#RtS&#TI@DSuF$DF8byw~YBhF4&O>Vr?e^-9=Gz;7FT1w)5g$BShO3cimN6E* zoR6b6?hGz_$^0dC1UXs0l1A7vpw2yN(m)z

XU@=q`=WGi}G|L@bkQnIU#ymIQ^w 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 y?%#g3;x5oUY+=M*;v}My93! literal 0 HcmV?d00001 diff --git a/doc/report/report.tex b/doc/report/report.tex new file mode 100644 index 00000000..c0894594 --- /dev/null +++ b/doc/report/report.tex @@ -0,0 +1,190 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Wenneker Assignment +% LaTeX Template +% Version 2.0 (12/1/2019) +% +% This template originates from: +% http://www.LaTeXTemplates.com +% +% Authors: +% Vel (vel@LaTeXTemplates.com) +% Frits Wenneker +% +% License: +% CC BY-NC-SA 3.0 (http://creativecommons.org/licenses/by-nc-sa/3.0/) +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%---------------------------------------------------------------------------------------- +% PACKAGES AND OTHER DOCUMENT CONFIGURATIONS +%---------------------------------------------------------------------------------------- + +\documentclass[11pt]{scrartcl} % Font size + +\input{structure.tex} % Include the file specifying the document structure and custom commands + +%---------------------------------------------------------------------------------------- +% TITLE SECTION +%---------------------------------------------------------------------------------------- + +\title{ + \normalfont\normalsize + \textsc{Universidad de La Habana}\\ % Your university, school and/or department name(s) + \vspace{25pt} % Whitespace + \rule{\linewidth}{0.5pt}\\ % Thin top horizontal rule + \vspace{20pt} % Whitespace + {\huge Compilador de COOL}\\ % The assignment title + \vspace{12pt} % Whitespace + \rule{\linewidth}{2pt}\\ % Thick bottom horizontal rule + \vspace{12pt} % Whitespace +} + +\author{\textit{Amanda Marrero Santos} - C411 \\ \textit{Manuel Fernández Arias} - C411 \\ \textit{Loraine Monteagudo García} - C411 } % Your name + +\date{} % Today's date (\today) or a custom date + +\begin{document} + +\maketitle % Print the title + +%---------------------------------------------------------------------------------------- +% Uso del Compilador +%---------------------------------------------------------------------------------------- + +\section{Uso del compilador} + +\paragraph*{Detalles sobre las opciones de líneas de comando, si tiene opciones adicionales...} + +%---------------------------------------------------------------------------------------- +% Arquitectura del compilador +%---------------------------------------------------------------------------------------- + +\section{Arquitectura del compilador} + +\paragraph*{Una explicación general de la arquitectura, en cuántos módulos se divide el proyecto, cuantas fases tiene, qué tipo de gramática se utiliza y en general, como se organiza el proyecto. Una buena imagen siempre ayuda.} + + +Para el desarrollo del compilador se usó PLY, que es una implementación de Python pura del constructor de compilación lex and yacc. Incluye soporte al parser LALR(1) así como herramientas para el análisis léxico de validación de entrada y para el reporte de errores. + +El proceso de compilación se desarrolla en 4 fases: + +\begin{enumerate} + \item Análisis sintáctico: se trata de la comprobación del programa fuente hasta su representación en un árbol de derivación. Incluye desde la definición de la gramática hasta la construcción del lexer y el parser. + \item Análisis semántico: consiste en la revisión de las sentencias aceptadas en la fase anterior mediante la validación de que los predicados semánticos se cumplan. + \item Generación de código: después de la validación del programa fuente se genera el código intermedio para la posterior creación del código de máquina. + \item Optimización: se busca tener un código lo más eficiente posible. +\end{enumerate} + +Hablar de las fases de compilación. Cada una de estas fases se dividen en módulos independientes, que se integran en el archivo principal \texttt{main.py} + +%---------------------------------------------------------------------------------------- +\subsection{Análisis sintáctico} + +En la fase de análisis sintáctico del compilador se definen aquellas reglas que podemos llamar "sintácticas": los métodos empiezan por un identificador, las funciones contienen una sola instrucción, etc. Son aquellas reglas que determinan la forma de la instrucción. Para este conjunto de reglas existe un mecanismo formal que nos permite describirlas: las gramáticas libres del contexto. Justamente, la fase de análisis sintáctico se encarga de validar que los predicados sintácticos se cumplan. + +El análisis sintáctico se divide en 2 fases: en una se realiza el análisis léxico, con la construcción de un lexer y en la otra se realiza el proceso de parsing, definiendo la gramática e implementado un parser para la construcción del Ãrbol de Sintaxis Abstracta (AST). + +\subsubsection{Análisis léxico} + +En esta fase se procesa el programa fuente de izquierda a derecha y se agrupa en componentes léxicos (\textit{tokens}) que son secuencias de caracteres que tienen un significado. Todos los espacios en blanco, comentarios y demás información innecesaria se elimina del programa fuente. El lexer, por lo tanto, convierte una secuencia de caracteres (strings) en una secuencia de tokens. + +Después de determinar los caracteres especiales de COOL especificados en su documentación se deciden las propiedades necesarias para representar un token. Un token tiene un lexema, que no es más que el string que se hace corresponder al token y un tipo para agrupar los que tienen una característica similar. Este último puede ser igual o diferente al lexema: en las palabras reservadas sucede que su lexema es igual a su tipo, mientras que en los strings y en los números estos son diferentes. Mientras que un token puede tener infinitos lexemas, los distintos tipos son predeterminados. Además, para el reporte de errores se guarda la fila y la columna de cada token. + +La construcción del lexer se realiza mediante las herramientas de PLY. Para su construcción es necesario la definición de una variable \texttt{tokens} que es una lista con los distintos tipos de tokens. Después se especifica cuales secuencias de caracteres le corresponderán a cada tipo de token, esto se especifica mediante expresiones regulares. Para cada tipo de token se definió una función mediante la convención de PLY de nombrar \texttt{t\_tipo}, donde \texttt{tipo} es el tipo de token, y en el docstring la expresión regular que lo describe. + +\begin{itemize} + \item Hablar del sistema interno de PLY, cómo construye un autómata finito determinista para formar el lexer. En general, hablar un poco más de cómo realiza el análisis PLY por detrás + \item Hablar de las particularidades de los comentarios y el parseo de los strings +\end{itemize} + +%---------------------------------------------------------------------------------------- +\subsubsection{Parsing} + +El proceso de parsing consiste en analizar una secuencia de tokens y producir un árbol de derivación. Por lo tanto, se comprueba si lo obtenido en la fase anterior es sintácticamente correcto según la gramática del lenguaje. + +El parser también se implementó mediante PLY, especificando la gramática y las acciones para cada producción. Para cada regla gramatical hay una función cuyo nombre empieza con \texttt{p\_}. El docstring de la función contiene la forma de la producción, escrita en \textbf{EBNF} (Extended Backus-Naur Form). PLY usa los dos puntos (:) para separar la parte izquierda y la derecha de la producción gramatical. El símbolo del lado izquierdo de la primera función es considerado el símbolo inicial. El cuerpo de esa función contiene código que realiza la acción de esa producción. + +En cada producción se construye un nodo del árbol de sintaxis abstracta, como se hace en Listing \ref{lst:parser}. El parámetro \texttt{p} de la función contiene los resultados de las acciones que se realizaron para parsear el lado derecho de la producción. Se puede indexar en \texttt{p} para acceder a estos resultados, empezando con \texttt{p[1]} para el primer símbolo de la parte derecha. Para especificar el resultado de la acción actual se accede a \texttt{p[0]}. Así, por ejemplo, en la producción \texttt{program : class\_list} construimos el nodo \texttt{ProgramNode} conteniendo la lista de clases obtenida en \texttt{p[1]} y asignamos \texttt{ProgramNode} a \texttt{p[0]} + +\lstinputlisting[ +label=lst:parser, % Label for referencing this listing +language=Python, % Use Perl functions/syntax highlighting +frame=single, % Frame around the code listing +showstringspaces=false, % Don't put marks in string spaces +%numbers=left, % Line numbers on left +numberstyle=\tiny, % Line numbers styling +caption=Función de una regla gramatical en PLY, % Caption above the listing +]{resources/parser.py} + +El procesador de parser de PLY procesa la gramática y genera un parser que usa el algoritmo de shift-reduce LALR(1), que es uno de los más usados en la actualidad. Aunque LALR(1) no puede manejar todas las gramáticas libres de contexto la gramática de COOL usada fue refactorizada para ser procesada por LALR(1) sin errores. + +La gramática especificada en el manual de COOL fue reconstruida para eliminar cualquier ambigüedad y teniendo en cuenta la precedencia de los operadores presentes. + +Para la construcción del árbol de derivación se definieron cada uno de los nodos. El objetivo de dicho árbol es describir la forma en que la cadena es generada por la gramática. Intuitivamente, esta información nos permite "entender" sin ambigüedad el significado de la cadena. + + + +%---------------------------------------------------------------------------------------- +\subsection{Análisis semántico} + +A parte de las reglas sintácticas mencionadas anteriormente para que el compilador determine que programas son válidas en el lenguaje tenemos reglas que no son del todo sintácticas: la consistencia en el uso de los tipos, que cierta función debe devolver un valor por todos los posibles caminos de ejecución. Estas reglas son consideradas "semánticas", porque de cierta forma nos indican cuál es el significado "real" del lenguaje. Mientras que para los predicados sintácticos podemos construir una gramática libre del contexto que los reconozcan los predicados semánticos no pueden ser descritos por este tipo de gramática, dado que estas relaciones son intrínsecamente dependientes del contexto. + +El objetivo del análisis semántico es validar que los predicados semánticos se cumplan. Para esto construye estructuras que permitan reunir y validar información sobre los tipos para la posterior fase de generación de código. + +El árbol de derivación es una estructura conveniente para ser explorada. Por lo tanto, el procedimiento para validar los predicados semánticos es recorrer cada nodo. La mayoría de las reglas semánticas nos hablan sobre las definiciones y uso de las variables y funciones, por lo que se hace necesario acceder a un "scope", donde están definidas las funciones y variables que se usan en dicho nodo. Además se usa un "contexto" para definir los distintos tipos que se construyen a lo largo del programa. En el mismo recorrido en que se valida las reglas semánticas se construyen estas estructuras auxiliares. + +Para realizar los recorridos en el árbol de derivación se hace uso del patrón visitor. Este patrón nos permite abstraer el concepto de procesamiento de un nodo. Se crean distintas clases implementando este patrón, haciendo cada una de ellas una pasada en el árbol para implementar varias funciones. + +En la primera pasada solamente recolectamos todos los tipos definidos. A este visitor, \texttt{TypeCollector} solamente le interesan los nodos \texttt{ProgramNode} y \texttt{ClassNode}. Su tarea consiste en crear el contexto y definir en este contexto todos los tipos que se encuentre. + +Luego en \texttt{TypeBuilder} se construyen todo el contexto de métodos y atributos. En este caso nos interesa además los nodos \texttt{FuncDeclarationNode} y \texttt{AttrDeclarationNode}. + +En el tercer recorrido se define el visitor \texttt{VarCollector} en el que se procede a la construcción de los scopes recolectando las variables definidas en el programa teniendo en cuenta la visibilidad de cada uno de ellos. + +Por último, en \texttt{TypeChecker} se verifica la consistencia de tipos en todos los nodos del AST. Con el objetivo de detectar la mayor cantidad de errores en cada corrida se toman acciones como definir \texttt{ErrorType} para expresar un tipo que presentó algún error semántico. + +%---------------------------------------------------------------------------------------- +\subsection{Generación de código} + +\begin{itemize} + \item Hablar del objetivo de la generación de código. + \item Introducir y justificar la necesidad de la generación de código intermedio. +\end{itemize} + +\subsubsection{Código Intermedio} + +\begin{itemize} + \item Hablar de la estructura del código intermedio. + \item Explicar el visitor que se utiliza para generarlo. +\end{itemize} + +\subsubsection{Código de Máquina} + +\begin{itemize} + \item Describir el código Mips que se genera. + \item Explicar como se llegó a implementar con un visitor. +\end{itemize} + +\subsection{Optimización} + +\begin{itemize} + \item No tengo ni idea de qué poner aquí. +\end{itemize} + +%---------------------------------------------------------------------------------------- +% Problemas técnicos +%---------------------------------------------------------------------------------------- + +\section{Problemas técnicos} + +\paragraph{Detalles sobre cualquier problema teórico o técnico interesante que haya necesitado resolver de forma particular.} + +\begin{itemize} + \item Hablar de los comentarios y los strings en el lexer. + \item Hablar de la recuperación de errores en la gramática de PLY. + \item Hablar de cómo se implementaron los tipos \textit{built-in}. +\end{itemize} + +%---------------------------------------------------------------------------------------- + +\end{document} diff --git a/doc/report/resources/luftballons.pl b/doc/report/resources/luftballons.pl new file mode 100644 index 00000000..a6937f9c --- /dev/null +++ b/doc/report/resources/luftballons.pl @@ -0,0 +1,22 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +for (1..99) { print $_." Luftballons\n"; } + +# This is a commented line + +my $string = "Hello World!"; + +print $string."\n\n"; + +$string =~ s/Hello/Goodbye Cruel/; + +print $string."\n\n"; + +finale(); + +exit; + +sub finale { print "Fin.\n"; } \ No newline at end of file diff --git a/doc/report/resources/parser.py b/doc/report/resources/parser.py new file mode 100644 index 00000000..6bb42aad --- /dev/null +++ b/doc/report/resources/parser.py @@ -0,0 +1,3 @@ +def p_program(self, p): + 'program : class_list' + p[0] = ProgramNode(p[1]) \ No newline at end of file diff --git a/doc/report/structure.tex b/doc/report/structure.tex new file mode 100644 index 00000000..ba0e7b9d --- /dev/null +++ b/doc/report/structure.tex @@ -0,0 +1,92 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Wenneker Assignment +% Structure Specification File +% Version 2.0 (12/1/2019) +% +% This template originates from: +% http://www.LaTeXTemplates.com +% +% Authors: +% Vel (vel@LaTeXTemplates.com) +% Frits Wenneker +% +% License: +% CC BY-NC-SA 3.0 (http://creativecommons.org/licenses/by-nc-sa/3.0/) +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%---------------------------------------------------------------------------------------- +% PACKAGES AND OTHER DOCUMENT CONFIGURATIONS +%---------------------------------------------------------------------------------------- + +\usepackage{amsmath, amsfonts, amsthm} % Math packages + +\usepackage{listings} % Code listings, with syntax highlighting + +\usepackage[english]{babel} % English language hyphenation + +\usepackage{graphicx} % Required for inserting images +\graphicspath{{Figures/}{./}} % Specifies where to look for included images (trailing slash required) + +\usepackage{booktabs} % Required for better horizontal rules in tables + +\numberwithin{equation}{section} % Number equations within sections (i.e. 1.1, 1.2, 2.1, 2.2 instead of 1, 2, 3, 4) +\numberwithin{figure}{section} % Number figures within sections (i.e. 1.1, 1.2, 2.1, 2.2 instead of 1, 2, 3, 4) +\numberwithin{table}{section} % Number tables within sections (i.e. 1.1, 1.2, 2.1, 2.2 instead of 1, 2, 3, 4) + +\setlength\parindent{0pt} % Removes all indentation from paragraphs + +\usepackage{enumitem} % Required for list customisation +\setlist{noitemsep} % No spacing between list items + +%---------------------------------------------------------------------------------------- +% DOCUMENT MARGINS +%---------------------------------------------------------------------------------------- + +\usepackage{geometry} % Required for adjusting page dimensions and margins + +\geometry{ + paper=a4paper, % Paper size, change to letterpaper for US letter size + top=2.5cm, % Top margin + bottom=3cm, % Bottom margin + left=3cm, % Left margin + right=3cm, % Right margin + headheight=0.75cm, % Header height + footskip=1.5cm, % Space from the bottom margin to the baseline of the footer + headsep=0.75cm, % Space from the top margin to the baseline of the header + %showframe, % Uncomment to show how the type block is set on the page +} + +%---------------------------------------------------------------------------------------- +% FONTS +%---------------------------------------------------------------------------------------- + +\usepackage[utf8]{inputenc} % Required for inputting international characters +\usepackage[T1]{fontenc} % Use 8-bit encoding + +\usepackage{fourier} % Use the Adobe Utopia font for the document + +%---------------------------------------------------------------------------------------- +% SECTION TITLES +%---------------------------------------------------------------------------------------- + +\usepackage{sectsty} % Allows customising section commands + +\sectionfont{\vspace{6pt}\centering\normalfont\scshape} % \section{} styling +\subsectionfont{\normalfont\bfseries} % \subsection{} styling +\subsubsectionfont{\normalfont\itshape} % \subsubsection{} styling +\paragraphfont{\normalfont\scshape} % \paragraph{} styling + +%---------------------------------------------------------------------------------------- +% HEADERS AND FOOTERS +%---------------------------------------------------------------------------------------- + +%\usepackage{scrlayer-scrpage} % Required for customising headers and footers + +%\ohead*{} % Right header +%\ihead*{} % Left header +%\chead*{} % Centre header + +%\ofoot*{} % Right footer +%\ifoot*{} % Left footer +%\cfoot*{\pagemark} % Centre footer diff --git a/src/lexer/lexer.py b/src/lexer/lexer.py index b9cf0305..2f749cf7 100644 --- a/src/lexer/lexer.py +++ b/src/lexer/lexer.py @@ -18,7 +18,6 @@ def __init__(self, **kwargs): def _update_column(self, t): t.column = t.lexpos - t.lexer.linestart + 1 - states = ( ('comments', 'exclusive'), ('strings', 'exclusive') @@ -34,13 +33,12 @@ def t_comments(self,t): r'\(\*' t.lexer.level = 1 t.lexer.begin('comments') - - def t_comments_open(self,t): + def t_comments_open(self, t): r'\(\*' t.lexer.level += 1 - def t_comments_close(self,t): + def t_comments_close(self, t): r'\*\)' t.lexer.level -= 1 diff --git a/src/utils/tokens.py b/src/utils/tokens.py index 0b258bc7..3bac0e0a 100644 --- a/src/utils/tokens.py +++ b/src/utils/tokens.py @@ -46,6 +46,7 @@ 'string' ] + list(reserved.values()) + class Token: def __init__(self, lex, type_, lineno, pos): self.lex = lex From ec393e2fc740d6af050bdf1917f9d48caf22e4de Mon Sep 17 00:00:00 2001 From: amymsantos42 Date: Wed, 28 Oct 2020 11:35:44 -0400 Subject: [PATCH 24/60] last update --- LICENSE | 42 +- Pipfile | 24 +- Pipfile.lock | 58 +- ast.py | 384 +- doc/Readme.md | 78 +- doc/report/report.aux | 19 + doc/report/report.pdf | Bin 0 -> 96857 bytes doc/report/report.synctex.gz | Bin 0 -> 36066 bytes doc/report/report.tex | 190 + doc/report/resources/luftballons.pl | 22 + doc/report/resources/parser.py | 3 + doc/report/structure.tex | 92 + requirements.txt | 6 +- src/Readme.md | 156 +- src/codegen/__init__.py | 18 +- src/codegen/cil_ast.py | 432 +- src/codegen/visitors/base_cil_visitor.py | 252 +- src/codegen/visitors/cil_format_visitor.py | 206 +- src/codegen/visitors/cil_visitor.py | 694 +- src/cool_parser/__init__.py | 2 +- src/cool_parser/base_parser.py | 50 +- src/cool_parser/logger.py | 26 +- src/cool_parser/output_parser/parselog.txt | 15642 +++++++++---------- src/cool_parser/output_parser/parser.out | 10912 ++++++------- src/cool_parser/output_parser/parsetab.py | 252 +- src/cool_parser/parser.py | 804 +- src/coolc.sh | 28 +- src/lexer/lexer.py | 650 +- src/main.py | 66 +- src/makefile | 18 +- src/self.cl | 16 +- src/semantic/semantic.py | 96 +- src/semantic/tools.py | 240 +- src/semantic/types.py | 568 +- src/semantic/visitors/__init__.py | 10 +- src/semantic/visitors/format_visitor.py | 256 +- src/semantic/visitors/selftype_visitor.py | 214 +- src/semantic/visitors/type_builder.py | 164 +- src/semantic/visitors/type_checker.py | 682 +- src/semantic/visitors/type_collector.py | 66 +- src/semantic/visitors/var_collector.py | 474 +- src/test.cl | 78 +- src/utils/ast.py | 440 +- src/utils/errors.py | 222 +- src/utils/tokens.py | 119 +- src/utils/utils.py | 70 +- src/utils/visitor.py | 160 +- tests/.gitignore | 912 +- tests/codegen/arith.cl | 860 +- tests/codegen/atoi.cl | 242 +- tests/codegen/atoi2.cl | 184 +- tests/codegen/book_list.cl | 264 +- tests/codegen/cells.cl | 194 +- tests/codegen/complex.cl | 104 +- tests/codegen/fib.cl | 58 +- tests/codegen/graph.cl | 762 +- tests/codegen/hairyscary.cl | 134 +- tests/codegen/hello_world.cl | 10 +- tests/codegen/helloworld.cl | 12 +- tests/codegen/io.cl | 206 +- tests/codegen/life.cl | 872 +- tests/codegen/list.cl | 282 +- tests/codegen/new_complex.cl | 158 +- tests/codegen/palindrome.cl | 50 +- tests/codegen/primes.cl | 168 +- tests/codegen/print-cool.cl | 18 +- tests/codegen/sort-list.cl | 292 +- tests/codegen/test.cl | 38 +- tests/codegen_test.py | 28 +- tests/conftest.py | 10 +- tests/lexer/mixed1_error.txt | 2 +- tests/semantic/hello_world.cl | 10 +- 72 files changed, 20598 insertions(+), 20273 deletions(-) create mode 100644 doc/report/report.aux create mode 100644 doc/report/report.pdf create mode 100644 doc/report/report.synctex.gz create mode 100644 doc/report/report.tex create mode 100644 doc/report/resources/luftballons.pl create mode 100644 doc/report/resources/parser.py create mode 100644 doc/report/structure.tex diff --git a/LICENSE b/LICENSE index ad9e4865..f543cdb4 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,21 @@ -MIT License - -Copyright (c) 2020 School of Math and Computer Science, University of Havana - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +MIT License + +Copyright (c) 2020 School of Math and Computer Science, University of Havana + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Pipfile b/Pipfile index 5b7ff3c2..6ad89606 100644 --- a/Pipfile +++ b/Pipfile @@ -1,12 +1,12 @@ -[[source]] -name = "pypi" -url = "https://pypi.org/simple" -verify_ssl = true - -[dev-packages] - -[packages] -ply = "*" - -[requires] -python_version = "3.7" +[[source]] +name = "pypi" +url = "https://pypi.org/simple" +verify_ssl = true + +[dev-packages] + +[packages] +ply = "*" + +[requires] +python_version = "3.7" diff --git a/Pipfile.lock b/Pipfile.lock index e971880a..8b110a67 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,29 +1,29 @@ -{ - "_meta": { - "hash": { - "sha256": "768c4b66d0ce858fbbf1b8a8998ffa9616166666555d0dc7bd1b92a9316518c8" - }, - "pipfile-spec": 6, - "requires": { - "python_version": "3.7" - }, - "sources": [ - { - "name": "pypi", - "url": "https://pypi.org/simple", - "verify_ssl": true - } - ] - }, - "default": { - "ply": { - "hashes": [ - "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", - "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce" - ], - "index": "pypi", - "version": "==3.11" - } - }, - "develop": {} -} +{ + "_meta": { + "hash": { + "sha256": "768c4b66d0ce858fbbf1b8a8998ffa9616166666555d0dc7bd1b92a9316518c8" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.7" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "ply": { + "hashes": [ + "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", + "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce" + ], + "index": "pypi", + "version": "==3.11" + } + }, + "develop": {} +} diff --git a/ast.py b/ast.py index ffd00871..59ea976e 100644 --- a/ast.py +++ b/ast.py @@ -1,193 +1,193 @@ -class Node: - pass - -class ProgramNode(Node): - def __init__(self, declarations): - self.declarations = declarations - -class DeclarationNode(Node): - pass - -class ExpressionNode(Node): - pass - -class ErrorNode(Node): - pass - -class ClassDeclarationNode(DeclarationNode): - def __init__(self, idx, features, pos, parent=None): - self.id = idx - self.parent = parent - self.features = features - self.pos = pos - -class FuncDeclarationNode(DeclarationNode): - def __init__(self, idx, params, return_type, body, pos): - self.id = idx - self.params = params - self.type = return_type - self.body = body - self.pos = pos - self.pos = pos - -class AttrDeclarationNode(DeclarationNode): - def __init__(self, idx, typex, pos, expr=None): - self.id = idx - self.type = typex - self.expr = expr - self.pos = pos - -class VarDeclarationNode(ExpressionNode): - def __init__(self, idx, typex, pos, expr=None): - self.id = idx - self.type = typex - self.expr = expr - self.pos = pos - -class AssignNode(ExpressionNode): - def __init__(self, idx, expr, pos): - self.id = idx - self.expr = expr - self.pos = pos - -class CallNode(ExpressionNode): - def __init__(self, obj, idx, args, pos): - self.obj = obj - self.id = idx - self.args = args - self.pos = pos - -class BlockNode(ExpressionNode): - def __init__(self, expr_list, pos): - self.expr_list = expr_list - self.pos = pos - -class BaseCallNode(ExpressionNode): - def __init__(self, obj, typex, idx, args, pos): - self.obj = obj - self.id = idx - self.args = args - self.type = typex - self.pos = pos - - -class StaticCallNode(ExpressionNode): - def __init__(self, idx, args, pos): - self.id = idx - self.args = args - self.pos = pos - - -class AtomicNode(ExpressionNode): - def __init__(self, lex, pos): - self.lex = lex - self.pos = pos - -class BinaryNode(ExpressionNode): - def __init__(self, left, right, pos): - self.left = left - self.right = right - self.pos = pos - -class BinaryLogicalNode(BinaryNode): - def __init__(self, left, right, pos): - super().__init__(left, right, pos) - -class BinaryArithNode(BinaryNode): - def __init__(self, left, right, pos): - super().__init__(left, right, pos) - -class UnaryNode(ExpressionNode): - def __init__(self, expr, pos): - self.expr = expr - self.pos = pos - -class UnaryLogicalNode(UnaryNode): - def __init__(self, operand, pos): - super().__init__(operand, pos) - -class UnaryArithNode(UnaryNode): - def __init__(self, operand, pos): - super().__init__(operand) - -class WhileNode(ExpressionNode): - def __init__(self, cond, expr): - self.cond = cond - self.expr = expr - -class ConditionalNode(ExpressionNode): - def __init__(self, cond, stm, else_stm): - self.cond = cond - self.stm = stm - self.else_stm = else_stm - -class CaseNode(ExpressionNode): - def __init__(self, expr, case_list): - self.expr = expr - self.case_list = case_list - - def __hash__(self): - return id(self) - -class OptionNode(ExpressionNode): - def __init__(self, idx, typex, expr): - self.id = idx - self.typex = typex - self.expr = expr - - -class LetNode(ExpressionNode): - def __init__(self, init_list, expr): - self.init_list = init_list - self.expr = expr - - def __hash__(self): - return id(self) - -class ConstantNumNode(AtomicNode): - pass - -class ConstantBoolNode(AtomicNode): - pass - -class ConstantStrNode(AtomicNode): - pass - -class VariableNode(AtomicNode): - pass - -class TypeNode(AtomicNode): - pass - -class InstantiateNode(AtomicNode): - pass - -class BinaryNotNode(UnaryArithNode): - pass - -class NotNode(UnaryLogicalNode): - pass - -class IsVoidNode(UnaryArithNode): - pass - -class PlusNode(BinaryArithNode): - pass - -class MinusNode(BinaryArithNode): - pass - -class StarNode(BinaryArithNode): - pass - -class DivNode(BinaryArithNode): - pass - -class LessNode(BinaryLogicalNode): - pass - -class LessEqNode(BinaryLogicalNode): - pass - -class EqualNode(BinaryLogicalNode): +class Node: + pass + +class ProgramNode(Node): + def __init__(self, declarations): + self.declarations = declarations + +class DeclarationNode(Node): + pass + +class ExpressionNode(Node): + pass + +class ErrorNode(Node): + pass + +class ClassDeclarationNode(DeclarationNode): + def __init__(self, idx, features, pos, parent=None): + self.id = idx + self.parent = parent + self.features = features + self.pos = pos + +class FuncDeclarationNode(DeclarationNode): + def __init__(self, idx, params, return_type, body, pos): + self.id = idx + self.params = params + self.type = return_type + self.body = body + self.pos = pos + self.pos = pos + +class AttrDeclarationNode(DeclarationNode): + def __init__(self, idx, typex, pos, expr=None): + self.id = idx + self.type = typex + self.expr = expr + self.pos = pos + +class VarDeclarationNode(ExpressionNode): + def __init__(self, idx, typex, pos, expr=None): + self.id = idx + self.type = typex + self.expr = expr + self.pos = pos + +class AssignNode(ExpressionNode): + def __init__(self, idx, expr, pos): + self.id = idx + self.expr = expr + self.pos = pos + +class CallNode(ExpressionNode): + def __init__(self, obj, idx, args, pos): + self.obj = obj + self.id = idx + self.args = args + self.pos = pos + +class BlockNode(ExpressionNode): + def __init__(self, expr_list, pos): + self.expr_list = expr_list + self.pos = pos + +class BaseCallNode(ExpressionNode): + def __init__(self, obj, typex, idx, args, pos): + self.obj = obj + self.id = idx + self.args = args + self.type = typex + self.pos = pos + + +class StaticCallNode(ExpressionNode): + def __init__(self, idx, args, pos): + self.id = idx + self.args = args + self.pos = pos + + +class AtomicNode(ExpressionNode): + def __init__(self, lex, pos): + self.lex = lex + self.pos = pos + +class BinaryNode(ExpressionNode): + def __init__(self, left, right, pos): + self.left = left + self.right = right + self.pos = pos + +class BinaryLogicalNode(BinaryNode): + def __init__(self, left, right, pos): + super().__init__(left, right, pos) + +class BinaryArithNode(BinaryNode): + def __init__(self, left, right, pos): + super().__init__(left, right, pos) + +class UnaryNode(ExpressionNode): + def __init__(self, expr, pos): + self.expr = expr + self.pos = pos + +class UnaryLogicalNode(UnaryNode): + def __init__(self, operand, pos): + super().__init__(operand, pos) + +class UnaryArithNode(UnaryNode): + def __init__(self, operand, pos): + super().__init__(operand) + +class WhileNode(ExpressionNode): + def __init__(self, cond, expr): + self.cond = cond + self.expr = expr + +class ConditionalNode(ExpressionNode): + def __init__(self, cond, stm, else_stm): + self.cond = cond + self.stm = stm + self.else_stm = else_stm + +class CaseNode(ExpressionNode): + def __init__(self, expr, case_list): + self.expr = expr + self.case_list = case_list + + def __hash__(self): + return id(self) + +class OptionNode(ExpressionNode): + def __init__(self, idx, typex, expr): + self.id = idx + self.typex = typex + self.expr = expr + + +class LetNode(ExpressionNode): + def __init__(self, init_list, expr): + self.init_list = init_list + self.expr = expr + + def __hash__(self): + return id(self) + +class ConstantNumNode(AtomicNode): + pass + +class ConstantBoolNode(AtomicNode): + pass + +class ConstantStrNode(AtomicNode): + pass + +class VariableNode(AtomicNode): + pass + +class TypeNode(AtomicNode): + pass + +class InstantiateNode(AtomicNode): + pass + +class BinaryNotNode(UnaryArithNode): + pass + +class NotNode(UnaryLogicalNode): + pass + +class IsVoidNode(UnaryArithNode): + pass + +class PlusNode(BinaryArithNode): + pass + +class MinusNode(BinaryArithNode): + pass + +class StarNode(BinaryArithNode): + pass + +class DivNode(BinaryArithNode): + pass + +class LessNode(BinaryLogicalNode): + pass + +class LessEqNode(BinaryLogicalNode): + pass + +class EqualNode(BinaryLogicalNode): pass \ No newline at end of file diff --git a/doc/Readme.md b/doc/Readme.md index efe7ea6f..5c2d6c9d 100644 --- a/doc/Readme.md +++ b/doc/Readme.md @@ -1,39 +1,39 @@ -# Documentación - -> Introduzca sus datos (de todo el equipo) en la siguiente tabla: - -**Nombre** | **Grupo** | **Github** ---|--|-- -Loraine Monteagudo García | C411 | [@lorainemg](https://github.com/lorainemg) -Amanda Marrero Santos | C411 | [@amymsantos42](https://github.com/amymsantos42) -Manuel Fernández Arias | C411 | [@nolyfdezarias](https://github.com/nolyfdezarias) - -## Readme - -Modifique el contenido de este documento para documentar de forma clara y concisa los siguientes aspectos: - -- Cómo ejecutar (y compilar si es necesario) su compilador. -- Requisitos adicionales, dependencias, configuración, etc. -- Opciones adicionales que tenga su compilador. - -### Sobre los Equipos de Desarrollo - -Para desarrollar el compilador del lenguaje COOL se trabajará en equipos de 2 o 3 integrantes. El proyecto de Compilación será recogido y evaluado únicamente a través de Github. Es imprescindible tener una cuenta de Github para cada participante, y que su proyecto esté correctamente hosteado en esta plataforma. Próximamente les daremos las instrucciones mínimas necesarias para ello. - -### Sobre los Materiales a Entregar - -Para la evaluación del proyecto Ud. debe entregar un informe en formato PDF (`report.pdf`) que resuma de manera organizada y comprensible la arquitectura e implementación de su compilador. -El documento **NO** debe exceder las 5 cuartillas. -En él explicará en más detalle su solución a los problemas que, durante la implementación de cada una de las fases del proceso de compilación, hayan requerido de Ud. especial atención. - -### Estructura del reporte - -Usted es libre de estructurar su reporte escrito como más conveniente le parezca. A continuación le sugerimos algunas secciones que no deberían faltar, aunque puede mezclar, renombrar y organizarlas de la manera que mejor le parezca: - -- **Uso del compilador**: detalles sobre las opciones de líneas de comando, si tiene opciones adicionales (e.j., `--ast` genera un AST en JSON, etc.). Básicamente lo mismo que pondrá en este Readme. -- **Arquitectura del compilador**: una explicación general de la arquitectura, en cuántos módulos se divide el proyecto, cuantas fases tiene, qué tipo de gramática se utiliza, y en general, como se organiza el proyecto. Una buena imagen siempre ayuda. -- **Problemas técnicos**: detalles sobre cualquier problema teórico o técnico interesante que haya necesitado resolver de forma particular. - -## Sobre la Fecha de Entrega - -Se realizarán recogidas parciales del proyecto a lo largo del curso. En el Canal de Telegram [@matcom_cmp](https://t.me/matcom_cmp) se anunciará la fecha y requisitos de cada primera entrega. +# Documentación + +> Introduzca sus datos (de todo el equipo) en la siguiente tabla: + +**Nombre** | **Grupo** | **Github** +--|--|-- +Loraine Monteagudo García | C411 | [@lorainemg](https://github.com/lorainemg) +Amanda Marrero Santos | C411 | [@amymsantos42](https://github.com/amymsantos42) +Manuel Fernández Arias | C411 | [@nolyfdezarias](https://github.com/nolyfdezarias) + +## Readme + +Modifique el contenido de este documento para documentar de forma clara y concisa los siguientes aspectos: + +- Cómo ejecutar (y compilar si es necesario) su compilador. +- Requisitos adicionales, dependencias, configuración, etc. +- Opciones adicionales que tenga su compilador. + +### Sobre los Equipos de Desarrollo + +Para desarrollar el compilador del lenguaje COOL se trabajará en equipos de 2 o 3 integrantes. El proyecto de Compilación será recogido y evaluado únicamente a través de Github. Es imprescindible tener una cuenta de Github para cada participante, y que su proyecto esté correctamente hosteado en esta plataforma. Próximamente les daremos las instrucciones mínimas necesarias para ello. + +### Sobre los Materiales a Entregar + +Para la evaluación del proyecto Ud. debe entregar un informe en formato PDF (`report.pdf`) que resuma de manera organizada y comprensible la arquitectura e implementación de su compilador. +El documento **NO** debe exceder las 5 cuartillas. +En él explicará en más detalle su solución a los problemas que, durante la implementación de cada una de las fases del proceso de compilación, hayan requerido de Ud. especial atención. + +### Estructura del reporte + +Usted es libre de estructurar su reporte escrito como más conveniente le parezca. A continuación le sugerimos algunas secciones que no deberían faltar, aunque puede mezclar, renombrar y organizarlas de la manera que mejor le parezca: + +- **Uso del compilador**: detalles sobre las opciones de líneas de comando, si tiene opciones adicionales (e.j., `--ast` genera un AST en JSON, etc.). Básicamente lo mismo que pondrá en este Readme. +- **Arquitectura del compilador**: una explicación general de la arquitectura, en cuántos módulos se divide el proyecto, cuantas fases tiene, qué tipo de gramática se utiliza, y en general, como se organiza el proyecto. Una buena imagen siempre ayuda. +- **Problemas técnicos**: detalles sobre cualquier problema teórico o técnico interesante que haya necesitado resolver de forma particular. + +## Sobre la Fecha de Entrega + +Se realizarán recogidas parciales del proyecto a lo largo del curso. En el Canal de Telegram [@matcom_cmp](https://t.me/matcom_cmp) se anunciará la fecha y requisitos de cada primera entrega. diff --git a/doc/report/report.aux b/doc/report/report.aux new file mode 100644 index 00000000..67a09bbc --- /dev/null +++ b/doc/report/report.aux @@ -0,0 +1,19 @@ +\relax +\select@language{english} +\@writefile{toc}{\select@language{english}} +\@writefile{lof}{\select@language{english}} +\@writefile{lot}{\select@language{english}} +\@writefile{toc}{\contentsline {section}{\numberline {1}Uso del compilador}{1}} +\@writefile{toc}{\contentsline {section}{\numberline {2}Arquitectura del compilador}{1}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}An\IeC {\'a}lisis sint\IeC {\'a}ctico}{1}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.1}An\IeC {\'a}lisis l\IeC {\'e}xico}{2}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.2}Parsing}{2}} +\newlabel{lst:parser}{{1}{3}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {1}Funci\IeC {\'o}n de una regla gramatical en PLY}{3}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}An\IeC {\'a}lisis sem\IeC {\'a}ntico}{3}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Generaci\IeC {\'o}n de c\IeC {\'o}digo}{4}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.3.1}C\IeC {\'o}digo Intermedio}{4}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.3.2}C\IeC {\'o}digo de M\IeC {\'a}quina}{4}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}Optimizaci\IeC {\'o}n}{4}} +\@writefile{toc}{\contentsline {section}{\numberline {3}Problemas t\IeC {\'e}cnicos}{4}} +\@writefile{toc}{\contentsline {paragraph}{Detalles sobre cualquier problema te\IeC {\'o}rico o t\IeC {\'e}cnico interesante que haya necesitado resolver de forma particular.}{4}} diff --git a/doc/report/report.pdf b/doc/report/report.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6c94409f5b4fdf9d249ed05e6ef400763404d772 GIT binary patch literal 96857 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

XU@=q`=WGi}G|L@bkQnIU#ymIQ^w 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 y?%#g3;x5oUY+=M*;v}My93! literal 0 HcmV?d00001 diff --git a/doc/report/report.tex b/doc/report/report.tex new file mode 100644 index 00000000..5ee5f549 --- /dev/null +++ b/doc/report/report.tex @@ -0,0 +1,190 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Wenneker Assignment +% LaTeX Template +% Version 2.0 (12/1/2019) +% +% This template originates from: +% http://www.LaTeXTemplates.com +% +% Authors: +% Vel (vel@LaTeXTemplates.com) +% Frits Wenneker +% +% License: +% CC BY-NC-SA 3.0 (http://creativecommons.org/licenses/by-nc-sa/3.0/) +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%---------------------------------------------------------------------------------------- +% PACKAGES AND OTHER DOCUMENT CONFIGURATIONS +%---------------------------------------------------------------------------------------- + +\documentclass[11pt]{scrartcl} % Font size + +\input{structure.tex} % Include the file specifying the document structure and custom commands + +%---------------------------------------------------------------------------------------- +% TITLE SECTION +%---------------------------------------------------------------------------------------- + +\title{ + \normalfont\normalsize + \textsc{Universidad de La Habana}\\ % Your university, school and/or department name(s) + \vspace{25pt} % Whitespace + \rule{\linewidth}{0.5pt}\\ % Thin top horizontal rule + \vspace{20pt} % Whitespace + {\huge Compilador de COOL}\\ % The assignment title + \vspace{12pt} % Whitespace + \rule{\linewidth}{2pt}\\ % Thick bottom horizontal rule + \vspace{12pt} % Whitespace +} + +\author{\textit{Amanda Marrero Santos} - C411 \\ \textit{Manuel Fernández Arias} - C411 \\ \textit{Loraine Monteagudo García} - C411 } % Your name + +\date{} % Today's date (\today) or a custom date + +\begin{document} + +\maketitle % Print the title + +%---------------------------------------------------------------------------------------- +% Uso del Compilador +%---------------------------------------------------------------------------------------- + +\section{Uso del compilador} + +\paragraph*{Detalles sobre las opciones de líneas de comando, si tiene opciones adicionales...} + +%---------------------------------------------------------------------------------------- +% Arquitectura del compilador +%---------------------------------------------------------------------------------------- + +\section{Arquitectura del compilador} + +\paragraph*{Una explicación general de la arquitectura, en cuántos módulos se divide el proyecto, cuantas fases tiene, qué tipo de gramática se utiliza y en general, como se organiza el proyecto. Una buena imagen siempre ayuda.} + + +Para el desarrollo del compilador se usó PLY, que es una implementación de Python pura del constructor de compilación lex and yacc. Incluye soporte al parser LALR(1) así como herramientas para el análisis léxico de validación de entrada y para el reporte de errores. + +El proceso de compilación se desarrolla en 4 fases: + +\begin{enumerate} + \item Análisis sintáctico: se trata de la comprobación del programa fuente hasta su representación en un árbol de derivación. Incluye desde la definición de la gramática hasta la construcción del lexer y el parser. + \item Análisis semántico: consiste en la revisión de las sentencias aceptadas en la fase anterior mediante la validación de que los predicados semánticos se cumplan. + \item Generación de código: después de la validación del programa fuente se genera el código intermedio para la posterior creación del código de máquina. + \item Optimización: se busca tener un código lo más eficiente posible. +\end{enumerate} + +Hablar de las fases de compilación. Cada una de estas fases se dividen en módulos independientes, que se integran en el archivo principal \texttt{main.py} + +%---------------------------------------------------------------------------------------- +\subsection{Análisis sintáctico} + +En la fase de análisis sintáctico del compilador se definen aquellas reglas que podemos llamar "sintácticas": los métodos empiezan por un identificador, las funciones contienen una sola instrucción, etc. Son aquellas reglas que determinan la forma de la instrucción. Para este conjunto de reglas existe un mecanismo formal que nos permite describirlas: las gramáticas libres del contexto. Justamente, la fase de análisis sintáctico se encarga de validar que los predicados sintácticos se cumplan. + +El análisis sintáctico se divide en 2 fases: en una se realiza el análisis léxico, con la construcción de un lexer y en la otra se realiza el proceso de parsing, definiendo la gramática e implementado un parser para la construcción del Ãrbol de Sintaxis Abstracta (AST). + +\subsubsection{Análisis léxico} + +En esta fase se procesa el programa fuente de izquierda a derecha y se agrupa en componentes léxicos (\textit{tokens}) que son secuencias de caracteres que tienen un significado. Todos los espacios en blanco, comentarios y demás información innecesaria se elimina del programa fuente. El lexer, por lo tanto, convierte una secuencia de caracteres (strings) en una secuencia de tokens. + +Después de determinar los caracteres especiales de COOL especificados en su documentación se deciden las propiedades necesarias para representar un token. Un token tiene un lexema, que no es más que el string que se hace corresponder al token y un tipo para agrupar los que tienen una característica similar. Este último puede ser igual o diferente al lexema: en las palabras reservadas sucede que su lexema es igual a su tipo, mientras que en los strings y en los números estos son diferentes. Mientras que un token puede tener infinitos lexemas, los distintos tipos son predeterminados. Además, para el reporte de errores se guarda la fila y la columna de cada token. + +La construcción del lexer se realiza mediante las herramientas de PLY. Para su construcción es necesario la definición de una variable \texttt{tokens} que es una lista con los distintos tipos de tokens. Después se especifica cuales secuencias de caracteres le corresponderán a cada tipo de token, esto se especifica mediante expresiones regulares. Para cada tipo de token se definió una función mediante la convención de PLY de nombrar \texttt{t\_tipo}, donde \texttt{tipo} es el tipo de token, y en el docstring la expresión regular que lo describe. + +\begin{itemize} + \item Hablar del sistema interno de PLY, cómo construye un autómata finito determinista para formar el lexer. En general, hablar un poco más de cómo realiza el análisis PLY por detrás + \item Hablar de las particularidades de los comentarios y el parseo de los strings +\end{itemize} + +%---------------------------------------------------------------------------------------- +\subsubsection{Parsing} + +El proceso de parsing consiste en analizar una secuencia de tokens y producir un árbol de derivación. Por lo tanto, se comprueba si lo obtenido en la fase anterior es sintácticamente correcto según la gramática del lenguaje. + +El parser también se implementó mediante PLY, especificando la gramática y las acciones para cada producción. Para cada regla gramatical hay una función cuyo nombre empieza con \texttt{p\_}. El docstring de la función contiene la forma de la producción, escrita en \textbf{EBNF} (Extended Backus-Naur Form). PLY usa los dos puntos (:) para separar la parte izquierda y la derecha de la producción gramatical. El símbolo del lado izquierdo de la primera función es considerado el símbolo inicial. El cuerpo de esa función contiene código que realiza la acción de esa producción. + +En cada producción se construye un nodo del árbol de sintaxis abstracta, como se hace en Listing \ref{lst:parser}. El parámetro \texttt{p} de la función contiene los resultados de las acciones que se realizaron para parsear el lado derecho de la producción. Se puede indexar en \texttt{p} para acceder a estos resultados, empezando con \texttt{p[1]} para el primer símbolo de la parte derecha. Para especificar el resultado de la acción actual se accede a \texttt{p[0]}. Así, por ejemplo, en la producción \texttt{program : class\_list} construimos el nodo \texttt{ProgramNode} conteniendo la lista de clases obtenida en \texttt{p[1]} y asignamos \texttt{ProgramNode} a \texttt{p[0]} + +\lstinputlisting[ +label=lst:parser, % Label for referencing this listing +language=Python, % Use Perl functions/syntax highlighting +frame=single, % Frame around the code listing +showstringspaces=false, % Don't put marks in string spaces +%numbers=left, % Line numbers on left +numberstyle=\tiny, % Line numbers styling +caption=Función de una regla gramatical en PLY, % Caption above the listing +]{resources/parser.py} + +El procesador de parser de PLY procesa la gramática y genera un parser que usa el algoritmo de shift-reduce LALR(1), que es uno de los más usados en la actualidad. Aunque LALR(1) no puede manejar todas las gramáticas libres de contexto la gramática de COOL usada fue refactorizada para ser procesada por LALR(1) sin errores. + +La gramática especificada en el manual de COOL fue reconstruida para eliminar cualquier ambigüedad y teniendo en cuenta la precedencia de los operadores presentes. + +Para la construcción del árbol de derivación se definieron cada uno de los nodos. El objetivo de dicho árbol es describir la forma en que la cadena es generada por la gramática. Intuitivamente, esta información nos permite "entender" sin ambigüedad el significado de la cadena. + + + +%---------------------------------------------------------------------------------------- +\subsection{Análisis semántico} + +A parte de las reglas sintácticas mencionadas anteriormente para que el compilador determine que programas son válidas en el lenguaje tenemos reglas que no son del todo sintácticas: la consistencia en el uso de los tipos, que cierta función debe devolver un valor por todos los posibles caminos de ejecución. Estas reglas son consideradas "semánticas", porque de cierta forma nos indican cuál es el significado "real" del lenguaje. Mientras que para los predicados sintácticos podemos construir una gramática libre del contexto que los reconozcan los predicados semánticos no pueden ser descritos por este tipo de gramática, dado que estas relaciones son intrínsecamente dependientes del contexto. + +El objetivo del análisis semántico es validar que los predicados semánticos se cumplan. Para esto construye estructuras que permitan reunir y validar información sobre los tipos para la posterior fase de generación de código. + +El árbol de derivación es una estructura conveniente para ser explorada. Por lo tanto, el procedimiento para validar los predicados semánticos es recorrer cada nodo. La mayoría de las reglas semánticas nos hablan sobre las definiciones y uso de las variables y funciones, por lo que se hace necesario acceder a un "scope", donde están definidas las funciones y variables que se usan en dicho nodo. Además se usa un "contexto" para definir los distintos tipos que se construyen a lo largo del programa. En el mismo recorrido en que se valida las reglas semánticas se construyen estas estructuras auxiliares. + +Para realizar los recorridos en el árbol de derivación se hace uso del patrón visitor. Este patrón nos permite abstraer el concepto de procesamiento de un nodo. Se crean distintas clases implementando este patrón, haciendo cada una de ellas una pasada en el árbol para implementar varias funciones. + +En la primera pasada solamente recolectamos todos los tipos definidos. A este visitor, \texttt{TypeCollector} solamente le interesan los nodos \texttt{ProgramNode} y \texttt{ClassNode}. Su tarea consiste en crear el contexto y definir en este contexto todos los tipos que se encuentre. + +Luego en \texttt{TypeBuilder} se construyen todo el contexto de métodos y atributos. En este caso nos interesa además los nodos \texttt{FuncDeclarationNode} y \texttt{AttrDeclarationNode}. + +En el tercer recorrido se define el visitor \texttt{VarCollector} en el que se procede a la construcción de los scopes recolectando las variables definidas en el programa teniendo en cuenta la visibilidad de cada uno de ellos. + +Por último, en \texttt{TypeChecker} se verifica la consistencia de tipos en todos los nodos del AST. Con el objetivo de detectar la mayor cantidad de errores en cada corrida se toman acciones como definir \texttt{ErrorType} para expresar un tipo que presentó algún error semántico. + +%---------------------------------------------------------------------------------------- +\subsection{Generación de código} + +\begin{itemize} + \item Hablar del objetivo de la generación de código. + \item Introducir y justificar la necesidad de la generación de código intermedio. +\end{itemize} + +\subsubsection{Código Intermedio} + +\begin{itemize} + \item Hablar de la estructura del código intermedio. + \item Explicar el visitor que se utiliza para generarlo. +\end{itemize} + +\subsubsection{Código de Máquina} + +\begin{itemize} + \item Describir el código Mips que se genera. + \item Explicar como se llegó a implementar con un visitor. +\end{itemize} + +\subsection{Optimización} + +\begin{itemize} + \item No tengo ni idea de qué poner aquí. +\end{itemize} + +%---------------------------------------------------------------------------------------- +% Problemas técnicos +%---------------------------------------------------------------------------------------- + +\section{Problemas técnicos} + +\paragraph{Detalles sobre cualquier problema teórico o técnico interesante que haya necesitado resolver de forma particular.} + +\begin{itemize} + \item Hablar de los comentarios y los strings en el lexer. + \item Hablar de la recuperación de errores en la gramática de PLY. + \item Hablar de cómo se implementaron los tipos \textit{built-in}. +\end{itemize} + +%---------------------------------------------------------------------------------------- + +\end{document} diff --git a/doc/report/resources/luftballons.pl b/doc/report/resources/luftballons.pl new file mode 100644 index 00000000..534e2974 --- /dev/null +++ b/doc/report/resources/luftballons.pl @@ -0,0 +1,22 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +for (1..99) { print $_." Luftballons\n"; } + +# This is a commented line + +my $string = "Hello World!"; + +print $string."\n\n"; + +$string =~ s/Hello/Goodbye Cruel/; + +print $string."\n\n"; + +finale(); + +exit; + +sub finale { print "Fin.\n"; } \ No newline at end of file diff --git a/doc/report/resources/parser.py b/doc/report/resources/parser.py new file mode 100644 index 00000000..8aac7357 --- /dev/null +++ b/doc/report/resources/parser.py @@ -0,0 +1,3 @@ +def p_program(self, p): + 'program : class_list' + p[0] = ProgramNode(p[1]) \ No newline at end of file diff --git a/doc/report/structure.tex b/doc/report/structure.tex new file mode 100644 index 00000000..fb822a30 --- /dev/null +++ b/doc/report/structure.tex @@ -0,0 +1,92 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Wenneker Assignment +% Structure Specification File +% Version 2.0 (12/1/2019) +% +% This template originates from: +% http://www.LaTeXTemplates.com +% +% Authors: +% Vel (vel@LaTeXTemplates.com) +% Frits Wenneker +% +% License: +% CC BY-NC-SA 3.0 (http://creativecommons.org/licenses/by-nc-sa/3.0/) +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%---------------------------------------------------------------------------------------- +% PACKAGES AND OTHER DOCUMENT CONFIGURATIONS +%---------------------------------------------------------------------------------------- + +\usepackage{amsmath, amsfonts, amsthm} % Math packages + +\usepackage{listings} % Code listings, with syntax highlighting + +\usepackage[english]{babel} % English language hyphenation + +\usepackage{graphicx} % Required for inserting images +\graphicspath{{Figures/}{./}} % Specifies where to look for included images (trailing slash required) + +\usepackage{booktabs} % Required for better horizontal rules in tables + +\numberwithin{equation}{section} % Number equations within sections (i.e. 1.1, 1.2, 2.1, 2.2 instead of 1, 2, 3, 4) +\numberwithin{figure}{section} % Number figures within sections (i.e. 1.1, 1.2, 2.1, 2.2 instead of 1, 2, 3, 4) +\numberwithin{table}{section} % Number tables within sections (i.e. 1.1, 1.2, 2.1, 2.2 instead of 1, 2, 3, 4) + +\setlength\parindent{0pt} % Removes all indentation from paragraphs + +\usepackage{enumitem} % Required for list customisation +\setlist{noitemsep} % No spacing between list items + +%---------------------------------------------------------------------------------------- +% DOCUMENT MARGINS +%---------------------------------------------------------------------------------------- + +\usepackage{geometry} % Required for adjusting page dimensions and margins + +\geometry{ + paper=a4paper, % Paper size, change to letterpaper for US letter size + top=2.5cm, % Top margin + bottom=3cm, % Bottom margin + left=3cm, % Left margin + right=3cm, % Right margin + headheight=0.75cm, % Header height + footskip=1.5cm, % Space from the bottom margin to the baseline of the footer + headsep=0.75cm, % Space from the top margin to the baseline of the header + %showframe, % Uncomment to show how the type block is set on the page +} + +%---------------------------------------------------------------------------------------- +% FONTS +%---------------------------------------------------------------------------------------- + +\usepackage[utf8]{inputenc} % Required for inputting international characters +\usepackage[T1]{fontenc} % Use 8-bit encoding + +\usepackage{fourier} % Use the Adobe Utopia font for the document + +%---------------------------------------------------------------------------------------- +% SECTION TITLES +%---------------------------------------------------------------------------------------- + +\usepackage{sectsty} % Allows customising section commands + +\sectionfont{\vspace{6pt}\centering\normalfont\scshape} % \section{} styling +\subsectionfont{\normalfont\bfseries} % \subsection{} styling +\subsubsectionfont{\normalfont\itshape} % \subsubsection{} styling +\paragraphfont{\normalfont\scshape} % \paragraph{} styling + +%---------------------------------------------------------------------------------------- +% HEADERS AND FOOTERS +%---------------------------------------------------------------------------------------- + +%\usepackage{scrlayer-scrpage} % Required for customising headers and footers + +%\ohead*{} % Right header +%\ihead*{} % Left header +%\chead*{} % Centre header + +%\ofoot*{} % Right footer +%\ifoot*{} % Left footer +%\cfoot*{\pagemark} % Centre footer diff --git a/requirements.txt b/requirements.txt index cba16ee2..f23029c8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -pytest -pytest-ordering -ply +pytest +pytest-ordering +ply diff --git a/src/Readme.md b/src/Readme.md index 1200371b..cdca282e 100644 --- a/src/Readme.md +++ b/src/Readme.md @@ -1,78 +1,78 @@ -# COOL: Proyecto de Compilación - -La evaluación de la asignatura Complementos de Compilación, inscrita en el programa del 4to año de la Licenciatura en Ciencia de la Computación de la Facultad de Matemática y Computación de la -Universidad de La Habana, consiste este curso en la implementación de un compilador completamente -funcional para el lenguaje _COOL_. - -_COOL (Classroom Object-Oriented Language)_ es un pequeño lenguaje que puede ser implementado con un esfuerzo razonable en un semestre del curso. Aun así, _COOL_ mantiene muchas de las características de los lenguajes de programación modernos, incluyendo orientación a objetos, tipado estático y manejo automático de memoria. - -### Sobre el Lenguaje COOL - -Ud. podrá encontrar la especificación formal del lenguaje COOL en el documento _"COOL Language Reference Manual"_, que se distribuye junto con el presente texto. - -## Código Fuente - -### Compilando su proyecto - -Si es necesario compilar su proyecto, incluya todas las instrucciones necesarias en un archivo [`/src/makefile`](/src/makefile). -Durante la evaluación su proyecto se compilará ejecutando la siguiente secuencia: - -```bash -$ cd source -$ make clean -$ make -``` - -### Ejecutando su proyecto - -Incluya en un archivo [`/src/coolc.sh`](/src/coolc.sh) todas las instrucciones que hacen falta para lanzar su compilador. Recibirá como entrada un archivo con extensión `.cl` y debe generar como salida un archivo `.mips` cuyo nombre será el mismo que la entrada. - -Para lanzar el compilador, se ejecutará la siguiente instrucción: - -```bash -$ cd source -$ ./coolc.sh -``` - -### Sobre el Compilador de COOL - -El compilador de COOL se ejecutará como se ha definido anteriormente. -En caso de que no ocurran errores durante la operación del compilador, **coolc.sh** deberá terminar con código de salida 0, generar (o sobrescribir si ya existe) en la misma carpeta del archivo **.cl** procesado, y con el mismo nombre que éste, un archivo con extension **.mips** que pueda ser ejecutado con **spim**. Además, reportar a la salida estándar solamente lo siguiente: - - - - -En caso de que ocurran errores durante la operación del compilador, **coolc.sh** deberá terminar con código -de salida (exit code) 1 y reportar a la salida estándar (standard output stream) lo que sigue... - - - - _1 - ... - _n - -... donde `_i` tiene el siguiente formato: - - (,) - : - -Los campos `` y `` indican la ubicación del error en el fichero **.cl** procesado. En caso -de que la naturaleza del error sea tal que no pueda asociárselo a una línea y columna en el archivo de -código fuente, el valor de dichos campos debe ser 0. - -El campo `` será alguno entre: - -- `CompilerError`: se reporta al detectar alguna anomalía con la entrada del compilador. Por ejemplo, si el fichero a compilar no existe. -- `LexicographicError`: errores detectados por el lexer. -- `SyntacticError`: errores detectados por el parser. -- `NameError`: se reporta al referenciar un `identificador` en un ámbito en el que no es visible. -- `TypeError`: se reporta al detectar un problema de tipos. Incluye: - - incompatibilidad de tipos entre `rvalue` y `lvalue`, - - operación no definida entre objetos de ciertos tipos, y - - tipo referenciado pero no definido. -- `AttributeError`: se reporta cuando un atributo o método se referencia pero no está definido. -- `SemanticError`: cualquier otro error semántico. - -### Sobre la Implementación del Compilador de COOL - -El compilador debe estar implementado en `python`. Usted debe utilizar una herramienta generadora de analizadores -lexicográficos y sintácticos. Puede utilizar la que sea de su preferencia. +# COOL: Proyecto de Compilación + +La evaluación de la asignatura Complementos de Compilación, inscrita en el programa del 4to año de la Licenciatura en Ciencia de la Computación de la Facultad de Matemática y Computación de la +Universidad de La Habana, consiste este curso en la implementación de un compilador completamente +funcional para el lenguaje _COOL_. + +_COOL (Classroom Object-Oriented Language)_ es un pequeño lenguaje que puede ser implementado con un esfuerzo razonable en un semestre del curso. Aun así, _COOL_ mantiene muchas de las características de los lenguajes de programación modernos, incluyendo orientación a objetos, tipado estático y manejo automático de memoria. + +### Sobre el Lenguaje COOL + +Ud. podrá encontrar la especificación formal del lenguaje COOL en el documento _"COOL Language Reference Manual"_, que se distribuye junto con el presente texto. + +## Código Fuente + +### Compilando su proyecto + +Si es necesario compilar su proyecto, incluya todas las instrucciones necesarias en un archivo [`/src/makefile`](/src/makefile). +Durante la evaluación su proyecto se compilará ejecutando la siguiente secuencia: + +```bash +$ cd source +$ make clean +$ make +``` + +### Ejecutando su proyecto + +Incluya en un archivo [`/src/coolc.sh`](/src/coolc.sh) todas las instrucciones que hacen falta para lanzar su compilador. Recibirá como entrada un archivo con extensión `.cl` y debe generar como salida un archivo `.mips` cuyo nombre será el mismo que la entrada. + +Para lanzar el compilador, se ejecutará la siguiente instrucción: + +```bash +$ cd source +$ ./coolc.sh +``` + +### Sobre el Compilador de COOL + +El compilador de COOL se ejecutará como se ha definido anteriormente. +En caso de que no ocurran errores durante la operación del compilador, **coolc.sh** deberá terminar con código de salida 0, generar (o sobrescribir si ya existe) en la misma carpeta del archivo **.cl** procesado, y con el mismo nombre que éste, un archivo con extension **.mips** que pueda ser ejecutado con **spim**. Además, reportar a la salida estándar solamente lo siguiente: + + + + +En caso de que ocurran errores durante la operación del compilador, **coolc.sh** deberá terminar con código +de salida (exit code) 1 y reportar a la salida estándar (standard output stream) lo que sigue... + + + + _1 + ... + _n + +... donde `_i` tiene el siguiente formato: + + (,) - : + +Los campos `` y `` indican la ubicación del error en el fichero **.cl** procesado. En caso +de que la naturaleza del error sea tal que no pueda asociárselo a una línea y columna en el archivo de +código fuente, el valor de dichos campos debe ser 0. + +El campo `` será alguno entre: + +- `CompilerError`: se reporta al detectar alguna anomalía con la entrada del compilador. Por ejemplo, si el fichero a compilar no existe. +- `LexicographicError`: errores detectados por el lexer. +- `SyntacticError`: errores detectados por el parser. +- `NameError`: se reporta al referenciar un `identificador` en un ámbito en el que no es visible. +- `TypeError`: se reporta al detectar un problema de tipos. Incluye: + - incompatibilidad de tipos entre `rvalue` y `lvalue`, + - operación no definida entre objetos de ciertos tipos, y + - tipo referenciado pero no definido. +- `AttributeError`: se reporta cuando un atributo o método se referencia pero no está definido. +- `SemanticError`: cualquier otro error semántico. + +### Sobre la Implementación del Compilador de COOL + +El compilador debe estar implementado en `python`. Usted debe utilizar una herramienta generadora de analizadores +lexicográficos y sintácticos. Puede utilizar la que sea de su preferencia. diff --git a/src/codegen/__init__.py b/src/codegen/__init__.py index 166cefdd..7fd6b7c0 100644 --- a/src/codegen/__init__.py +++ b/src/codegen/__init__.py @@ -1,10 +1,10 @@ -from codegen.visitors.cil_visitor import COOLToCILVisitor -from codegen.visitors.cil_format_visitor import get_formatter - -def codegen_pipeline(context, ast, scope): - print('============= TRANSFORMING TO CIL =============') - cool_to_cil = COOLToCILVisitor(context) - cil_ast = cool_to_cil.visit(ast, scope) - formatter = get_formatter() - print(formatter(cil_ast)) +from codegen.visitors.cil_visitor import COOLToCILVisitor +from codegen.visitors.cil_format_visitor import get_formatter + +def codegen_pipeline(context, ast, scope): + print('============= TRANSFORMING TO CIL =============') + cool_to_cil = COOLToCILVisitor(context) + cil_ast = cool_to_cil.visit(ast, scope) + formatter = get_formatter() + print(formatter(cil_ast)) return ast, context, scope, cil_ast \ No newline at end of file diff --git a/src/codegen/cil_ast.py b/src/codegen/cil_ast.py index f19e35b4..bea35209 100644 --- a/src/codegen/cil_ast.py +++ b/src/codegen/cil_ast.py @@ -1,217 +1,217 @@ -class Node: - pass - - -class ProgramNode(Node): - def __init__(self, dottypes, dotdata, dotcode): - self.dottypes = dottypes - self.dotdata = dotdata - self.dotcode = dotcode - - -class TypeNode(Node): - def __init__(self, name): - self.name = name - self.attributes = [] - self.methods = [] - - -class DataNode(Node): - def __init__(self, vname, value): - self.name = vname - self.value = value - - -class FunctionNode(Node): - def __init__(self, fname, params, localvars, instructions): - self.name = fname - self.params = params - self.localvars = localvars - self.instructions = instructions - - -class ParamNode(Node): - def __init__(self, name): - self.name = name - - -class LocalNode(Node): - def __init__(self, name): - self.name = name - - -class InstructionNode(Node): - pass - - -class AssignNode(InstructionNode): - def __init__(self, dest, source): - self.dest = dest - self.source = source - - -class UnaryNode(InstructionNode): - def __init__(self, dest, expr): - self.dest = dest - self.expr = expr - - -class NotNode(UnaryNode): - pass - - -class BinaryNotNode(UnaryNode): - pass - - -class IsVoidNode(UnaryNode): - pass - - -class BinaryNode(InstructionNode): - def __init__(self, dest, left, right): - self.dest = dest - self.left = left - self.right = right - - -class PlusNode(BinaryNode): - pass - - -class MinusNode(BinaryNode): - pass - - -class StarNode(BinaryNode): - pass - - -class DivNode(BinaryNode): - pass - - -class GetAttribNode(InstructionNode): - def __init__(self, obj, attr, dest): - self.obj = obj - self.attr = attr - self.dest = dest - - -class SetAttribNode(InstructionNode): - def __init__(self, obj, attr, value): - self.obj = obj - self.attr = attr - self.value = value - - -class GetIndexNode(InstructionNode): - pass - - -class SetIndexNode(InstructionNode): - pass - - -class AllocateNode(InstructionNode): - def __init__(self, itype, dest): - self.type = itype - self.dest = dest - - -class ArrayNode(InstructionNode): - pass - - -class TypeOfNode(InstructionNode): - def __init__(self, obj, dest): - self.obj = obj - self.dest = dest - - -class LabelNode(InstructionNode): - def __init__(self, label): - self.label = label - - -class GotoNode(InstructionNode): - def __init__(self, label): - self.label = label - - -class GotoIfNode(InstructionNode): - def __init__(self, cond, label): - self.cond = cond - self.label = label - - -class StaticCallNode(InstructionNode): - def __init__(self, function, dest): - self.function = function - self.dest = dest - - -class DynamicCallNode(InstructionNode): - def __init__(self, xtype, method, dest): - self.type = xtype - self.method = method - self.dest = dest - - -class ArgNode(InstructionNode): - def __init__(self, name): - self.name = name - - -class ReturnNode(InstructionNode): - def __init__(self, value=None): - self.value = value - - -class LoadNode(InstructionNode): - def __init__(self, dest, msg): - self.dest = dest - self.msg = msg - - -class LengthNode(InstructionNode): - def __init__(self, dest, arg): - self.dest = dest - self.arg = arg - - -class ConcatNode(InstructionNode): - def __init__(self, dest, arg1, arg2): - self.dest = dest - self.arg1 = arg1 - self.arg2 = arg2 - - -class PrefixNode(InstructionNode): - def __init__(self, dest, word, n): - self.dest = dest - self.word = word - self.n = n - - -class SubstringNode(InstructionNode): - def __init__(self, dest, word, n): - self.dest = dest - self.word = word - self.n = n - - -class ToStrNode(InstructionNode): - def __init__(self, dest, ivalue): - self.dest = dest - self.ivalue = ivalue - - -class ReadNode(InstructionNode): - def __init__(self, dest): - self.dest = dest - - -class PrintNode(InstructionNode): - def __init__(self, str_addr): +class Node: + pass + + +class ProgramNode(Node): + def __init__(self, dottypes, dotdata, dotcode): + self.dottypes = dottypes + self.dotdata = dotdata + self.dotcode = dotcode + + +class TypeNode(Node): + def __init__(self, name): + self.name = name + self.attributes = [] + self.methods = [] + + +class DataNode(Node): + def __init__(self, vname, value): + self.name = vname + self.value = value + + +class FunctionNode(Node): + def __init__(self, fname, params, localvars, instructions): + self.name = fname + self.params = params + self.localvars = localvars + self.instructions = instructions + + +class ParamNode(Node): + def __init__(self, name): + self.name = name + + +class LocalNode(Node): + def __init__(self, name): + self.name = name + + +class InstructionNode(Node): + pass + + +class AssignNode(InstructionNode): + def __init__(self, dest, source): + self.dest = dest + self.source = source + + +class UnaryNode(InstructionNode): + def __init__(self, dest, expr): + self.dest = dest + self.expr = expr + + +class NotNode(UnaryNode): + pass + + +class BinaryNotNode(UnaryNode): + pass + + +class IsVoidNode(UnaryNode): + pass + + +class BinaryNode(InstructionNode): + def __init__(self, dest, left, right): + self.dest = dest + self.left = left + self.right = right + + +class PlusNode(BinaryNode): + pass + + +class MinusNode(BinaryNode): + pass + + +class StarNode(BinaryNode): + pass + + +class DivNode(BinaryNode): + pass + + +class GetAttribNode(InstructionNode): + def __init__(self, obj, attr, dest): + self.obj = obj + self.attr = attr + self.dest = dest + + +class SetAttribNode(InstructionNode): + def __init__(self, obj, attr, value): + self.obj = obj + self.attr = attr + self.value = value + + +class GetIndexNode(InstructionNode): + pass + + +class SetIndexNode(InstructionNode): + pass + + +class AllocateNode(InstructionNode): + def __init__(self, itype, dest): + self.type = itype + self.dest = dest + + +class ArrayNode(InstructionNode): + pass + + +class TypeOfNode(InstructionNode): + def __init__(self, obj, dest): + self.obj = obj + self.dest = dest + + +class LabelNode(InstructionNode): + def __init__(self, label): + self.label = label + + +class GotoNode(InstructionNode): + def __init__(self, label): + self.label = label + + +class GotoIfNode(InstructionNode): + def __init__(self, cond, label): + self.cond = cond + self.label = label + + +class StaticCallNode(InstructionNode): + def __init__(self, function, dest): + self.function = function + self.dest = dest + + +class DynamicCallNode(InstructionNode): + def __init__(self, xtype, method, dest): + self.type = xtype + self.method = method + self.dest = dest + + +class ArgNode(InstructionNode): + def __init__(self, name): + self.name = name + + +class ReturnNode(InstructionNode): + def __init__(self, value=None): + self.value = value + + +class LoadNode(InstructionNode): + def __init__(self, dest, msg): + self.dest = dest + self.msg = msg + + +class LengthNode(InstructionNode): + def __init__(self, dest, arg): + self.dest = dest + self.arg = arg + + +class ConcatNode(InstructionNode): + def __init__(self, dest, arg1, arg2): + self.dest = dest + self.arg1 = arg1 + self.arg2 = arg2 + + +class PrefixNode(InstructionNode): + def __init__(self, dest, word, n): + self.dest = dest + self.word = word + self.n = n + + +class SubstringNode(InstructionNode): + def __init__(self, dest, word, n): + self.dest = dest + self.word = word + self.n = n + + +class ToStrNode(InstructionNode): + def __init__(self, dest, ivalue): + self.dest = dest + self.ivalue = ivalue + + +class ReadNode(InstructionNode): + def __init__(self, dest): + self.dest = dest + + +class PrintNode(InstructionNode): + def __init__(self, str_addr): self.str_addr = str_addr \ No newline at end of file diff --git a/src/codegen/visitors/base_cil_visitor.py b/src/codegen/visitors/base_cil_visitor.py index 75edd2f2..2392cd50 100644 --- a/src/codegen/visitors/base_cil_visitor.py +++ b/src/codegen/visitors/base_cil_visitor.py @@ -1,126 +1,126 @@ -from codegen.cil_ast import ParamNode, LocalNode, FunctionNode, TypeNode, DataNode -from semantic.tools import VariableInfo, Scope -from semantic.types import Type, StringType, ObjectType, IOType -from codegen import cil_ast as cil -from utils.ast import BinaryNode, UnaryNode - - -class BaseCOOLToCILVisitor: - def __init__(self, context): - self.dottypes = [] - self.dotdata = [] - self.dotcode = [] - self.current_type = None - self.current_method = None - self.current_function = None - self.context = context - - @property - def params(self): - return self.current_function.params - - @property - def localvars(self): - return self.current_function.localvars - - @property - def instructions(self): - return self.current_function.instructions - - def register_param(self, vinfo): - param_node = ParamNode(vinfo.name) - vinfo.name = f'param_{self.current_function.name[9:]}_{vinfo.name}_{len(self.params)}' - self.params.append(param_node) - return vinfo.name - - def register_local(self, vinfo): - name = f'local_{self.current_function.name[9:]}_{vinfo.name}_{len(self.localvars)}' - local_node = LocalNode(name) - self.localvars.append(local_node) - return name - - def define_internal_local(self): - vinfo = VariableInfo('internal', None) - return self.register_local(vinfo) - - def register_instruction(self, instruction): - self.instructions.append(instruction) - return instruction - - def to_attr_name(self, attr_name, type_name): - return f'attribute_{attr_name}_{type_name}' - - def to_function_name(self, method_name, type_name): - return f'function_{method_name}_{type_name}' - - def register_function(self, function_name): - function_node = FunctionNode(function_name, [], [], []) - self.dotcode.append(function_node) - return function_node - - def register_type(self, name): - type_node = TypeNode(name) - self.dottypes.append(type_node) - return type_node - - def register_data(self, value): - vname = f'data_{len(self.dotdata)}' - data_node = DataNode(vname, value) - self.dotdata.append(data_node) - return data_node - - def _define_binary_node(self, node: BinaryNode, scope: Scope, cil_node: cil.Node): - result = self.define_internal_local() - left, typex = self.visit(node.left, scope) - right, typex = self.visit(node.right, scope) - self.register_instruction(cil_node(result, left, right)) - return result, typex - - def _define_unary_node(self, node: UnaryNode, scope: Scope, cil_node): - result = self.define_internal_local() - expr, typex = self.visit(node.expr, scope) - self.register_instruction(cil_node(result, expr)) - return result, typex - - def native_methods(self, typex: Type, name: str, *args): - if typex == StringType(): - return self.string_methods(name, *args) - elif typex == ObjectType(): - return self.object_methods(name, *args) - elif typex == IOType(): - return self.io_methods(name, *args) - - def string_methods(self, name, *args): - result = self.define_internal_local() - if name == 'length': - self.register_instruction(cil.LengthNode(result, *args)) - elif name == 'concat': - self.register_instruction(cil.ConcatNode(result, *args)) - elif name == 'substr': - self.register_instruction(cil.SubstringNode(result, *args)) - return result - - def object_methods(self, name, result, *args): - if name == 'abort': - pass - elif name == 'type_name': - pass - elif name == 'copy': - pass - - def io_methods(self, name, result, *args): - # ? Not sure of the difference between string and int - if name == 'out_string': - self.register_instruction(cil.PrintNode(*args)) - elif name == 'out_int': - aux = self.define_internal_local() - self.register_instruction(cil.ToStrNode(aux, *args)) - self.register_instruction(cil.PrintNode(aux)) - elif name == 'in_string': - result = self.define_internal_local() - self.register_instruction(cil.ReadNode(result)) - return result - elif name == 'in_int': - result = self.define_internal_local() - self.register_instruction(cil.ReadNode(result)) - return result +from codegen.cil_ast import ParamNode, LocalNode, FunctionNode, TypeNode, DataNode +from semantic.tools import VariableInfo, Scope +from semantic.types import Type, StringType, ObjectType, IOType +from codegen import cil_ast as cil +from utils.ast import BinaryNode, UnaryNode + + +class BaseCOOLToCILVisitor: + def __init__(self, context): + self.dottypes = [] + self.dotdata = [] + self.dotcode = [] + self.current_type = None + self.current_method = None + self.current_function = None + self.context = context + + @property + def params(self): + return self.current_function.params + + @property + def localvars(self): + return self.current_function.localvars + + @property + def instructions(self): + return self.current_function.instructions + + def register_param(self, vinfo): + param_node = ParamNode(vinfo.name) + vinfo.name = f'param_{self.current_function.name[9:]}_{vinfo.name}_{len(self.params)}' + self.params.append(param_node) + return vinfo.name + + def register_local(self, vinfo): + name = f'local_{self.current_function.name[9:]}_{vinfo.name}_{len(self.localvars)}' + local_node = LocalNode(name) + self.localvars.append(local_node) + return name + + def define_internal_local(self): + vinfo = VariableInfo('internal', None) + return self.register_local(vinfo) + + def register_instruction(self, instruction): + self.instructions.append(instruction) + return instruction + + def to_attr_name(self, attr_name, type_name): + return f'attribute_{attr_name}_{type_name}' + + def to_function_name(self, method_name, type_name): + return f'function_{method_name}_{type_name}' + + def register_function(self, function_name): + function_node = FunctionNode(function_name, [], [], []) + self.dotcode.append(function_node) + return function_node + + def register_type(self, name): + type_node = TypeNode(name) + self.dottypes.append(type_node) + return type_node + + def register_data(self, value): + vname = f'data_{len(self.dotdata)}' + data_node = DataNode(vname, value) + self.dotdata.append(data_node) + return data_node + + def _define_binary_node(self, node: BinaryNode, scope: Scope, cil_node: cil.Node): + result = self.define_internal_local() + left, typex = self.visit(node.left, scope) + right, typex = self.visit(node.right, scope) + self.register_instruction(cil_node(result, left, right)) + return result, typex + + def _define_unary_node(self, node: UnaryNode, scope: Scope, cil_node): + result = self.define_internal_local() + expr, typex = self.visit(node.expr, scope) + self.register_instruction(cil_node(result, expr)) + return result, typex + + def native_methods(self, typex: Type, name: str, *args): + if typex == StringType(): + return self.string_methods(name, *args) + elif typex == ObjectType(): + return self.object_methods(name, *args) + elif typex == IOType(): + return self.io_methods(name, *args) + + def string_methods(self, name, *args): + result = self.define_internal_local() + if name == 'length': + self.register_instruction(cil.LengthNode(result, *args)) + elif name == 'concat': + self.register_instruction(cil.ConcatNode(result, *args)) + elif name == 'substr': + self.register_instruction(cil.SubstringNode(result, *args)) + return result + + def object_methods(self, name, result, *args): + if name == 'abort': + pass + elif name == 'type_name': + pass + elif name == 'copy': + pass + + def io_methods(self, name, result, *args): + # ? Not sure of the difference between string and int + if name == 'out_string': + self.register_instruction(cil.PrintNode(*args)) + elif name == 'out_int': + aux = self.define_internal_local() + self.register_instruction(cil.ToStrNode(aux, *args)) + self.register_instruction(cil.PrintNode(aux)) + elif name == 'in_string': + result = self.define_internal_local() + self.register_instruction(cil.ReadNode(result)) + return result + elif name == 'in_int': + result = self.define_internal_local() + self.register_instruction(cil.ReadNode(result)) + return result diff --git a/src/codegen/visitors/cil_format_visitor.py b/src/codegen/visitors/cil_format_visitor.py index 480ce678..c83616f8 100644 --- a/src/codegen/visitors/cil_format_visitor.py +++ b/src/codegen/visitors/cil_format_visitor.py @@ -1,103 +1,103 @@ -from utils import visitor -from codegen.cil_ast import * - -def get_formatter(): - - class PrintVisitor(object): - @visitor.on('node') - def visit(self, node): - pass - - @visitor.when(ProgramNode) - def visit(self, node: ProgramNode): - dottypes = '\n'.join(self.visit(t) for t in node.dottypes) - dotdata = '\n'.join(self.visit(t) for t in node.dotdata) - dotcode = '\n'.join(self.visit(t) for t in node.dotcode) - - return f'.TYPES\n{dottypes}\n\n.DATA\n{dotdata}\n\n.CODE\n{dotcode}' - - @visitor.when(TypeNode) - def visit(self, node: TypeNode): - attributes = '\n\t'.join(f'attribute {x}: {y}' for x, y in node.attributes) - methods = '\n\t'.join(f'method {x}: {y}' for x, y in node.methods) - - return f'type {node.name} {{\n\t{attributes}\n\n\t{methods}\n}}' - - @visitor.when(FunctionNode) - def visit(self, node: FunctionNode): - params = '\n\t'.join(self.visit(x) for x in node.params) - localvars = '\n\t'.join(self.visit(x) for x in node.localvars) - instructions = '\n\t'.join(self.visit(x) for x in node.instructions) - - return f'function {node.name} {{\n\t{params}\n\n\t{localvars}\n\n\t{instructions}\n}}' - - @visitor.when(DataNode) - def visit(self, node: DataNode): - return f'{node.name} = "{node.value}"' - - @visitor.when(ParamNode) - def visit(self, node: ParamNode): - return f'PARAM {node.name}' - - @visitor.when(LocalNode) - def visit(self, node: LocalNode): - return f'LOCAL {node.name}' - - @visitor.when(AssignNode) - def visit(self, node: AssignNode): - return f'{node.dest} = {node.source}' - - @visitor.when(PlusNode) - def visit(self, node: PlusNode): - return f'{node.dest} = {node.left} + {node.right}' - - @visitor.when(MinusNode) - def visit(self, node: MinusNode): - return f'{node.dest} = {node.left} - {node.right}' - - @visitor.when(StarNode) - def visit(self, node: StarNode): - return f'{node.dest} = {node.left} * {node.right}' - - @visitor.when(DivNode) - def visit(self, node: DivNode): - return f'{node.dest} = {node.left} / {node.right}' - - @visitor.when(AllocateNode) - def visit(self, node: AllocateNode): - return f'{node.dest} = ALLOCATE {node.type}' - - @visitor.when(TypeOfNode) - def visit(self, node: TypeOfNode): - return f'{node.dest} = TYPEOF {node.obj}' - - @visitor.when(StaticCallNode) - def visit(self, node: StaticCallNode): - return f'{node.dest} = CALL {node.function}' - - @visitor.when(LoadNode) - def visit(self, node: LoadNode): - return f'{node.dest} = LOAD {node.msg}' - - @visitor.when(DynamicCallNode) - def visit(self, node: DynamicCallNode): - return f'{node.dest} = VCALL {node.type} {node.method}' - - @visitor.when(ArgNode) - def visit(self, node: ArgNode): - return f'ARG {node.name}' - - @visitor.when(ReturnNode) - def visit(self, node: ReturnNode): - return f'RETURN {node.value if node.value is not None else ""}' - - @visitor.when(GetAttribNode) - def visit(self, node: GetAttribNode): - return f'{node.dest} = GETATTR {node.obj} {node.attr.name}' - - @visitor.when(SetAttribNode) - def visit(self, node: SetAttribNode): - return f'SETATTR {node.obj} {node.attr.name} = {node.value}' - - printer = PrintVisitor() - return lambda ast: printer.visit(ast) +from utils import visitor +from codegen.cil_ast import * + +def get_formatter(): + + class PrintVisitor(object): + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node: ProgramNode): + dottypes = '\n'.join(self.visit(t) for t in node.dottypes) + dotdata = '\n'.join(self.visit(t) for t in node.dotdata) + dotcode = '\n'.join(self.visit(t) for t in node.dotcode) + + return f'.TYPES\n{dottypes}\n\n.DATA\n{dotdata}\n\n.CODE\n{dotcode}' + + @visitor.when(TypeNode) + def visit(self, node: TypeNode): + attributes = '\n\t'.join(f'attribute {x}: {y}' for x, y in node.attributes) + methods = '\n\t'.join(f'method {x}: {y}' for x, y in node.methods) + + return f'type {node.name} {{\n\t{attributes}\n\n\t{methods}\n}}' + + @visitor.when(FunctionNode) + def visit(self, node: FunctionNode): + params = '\n\t'.join(self.visit(x) for x in node.params) + localvars = '\n\t'.join(self.visit(x) for x in node.localvars) + instructions = '\n\t'.join(self.visit(x) for x in node.instructions) + + return f'function {node.name} {{\n\t{params}\n\n\t{localvars}\n\n\t{instructions}\n}}' + + @visitor.when(DataNode) + def visit(self, node: DataNode): + return f'{node.name} = "{node.value}"' + + @visitor.when(ParamNode) + def visit(self, node: ParamNode): + return f'PARAM {node.name}' + + @visitor.when(LocalNode) + def visit(self, node: LocalNode): + return f'LOCAL {node.name}' + + @visitor.when(AssignNode) + def visit(self, node: AssignNode): + return f'{node.dest} = {node.source}' + + @visitor.when(PlusNode) + def visit(self, node: PlusNode): + return f'{node.dest} = {node.left} + {node.right}' + + @visitor.when(MinusNode) + def visit(self, node: MinusNode): + return f'{node.dest} = {node.left} - {node.right}' + + @visitor.when(StarNode) + def visit(self, node: StarNode): + return f'{node.dest} = {node.left} * {node.right}' + + @visitor.when(DivNode) + def visit(self, node: DivNode): + return f'{node.dest} = {node.left} / {node.right}' + + @visitor.when(AllocateNode) + def visit(self, node: AllocateNode): + return f'{node.dest} = ALLOCATE {node.type}' + + @visitor.when(TypeOfNode) + def visit(self, node: TypeOfNode): + return f'{node.dest} = TYPEOF {node.obj}' + + @visitor.when(StaticCallNode) + def visit(self, node: StaticCallNode): + return f'{node.dest} = CALL {node.function}' + + @visitor.when(LoadNode) + def visit(self, node: LoadNode): + return f'{node.dest} = LOAD {node.msg}' + + @visitor.when(DynamicCallNode) + def visit(self, node: DynamicCallNode): + return f'{node.dest} = VCALL {node.type} {node.method}' + + @visitor.when(ArgNode) + def visit(self, node: ArgNode): + return f'ARG {node.name}' + + @visitor.when(ReturnNode) + def visit(self, node: ReturnNode): + return f'RETURN {node.value if node.value is not None else ""}' + + @visitor.when(GetAttribNode) + def visit(self, node: GetAttribNode): + return f'{node.dest} = GETATTR {node.obj} {node.attr.name}' + + @visitor.when(SetAttribNode) + def visit(self, node: SetAttribNode): + return f'SETATTR {node.obj} {node.attr.name} = {node.value}' + + printer = PrintVisitor() + return lambda ast: printer.visit(ast) diff --git a/src/codegen/visitors/cil_visitor.py b/src/codegen/visitors/cil_visitor.py index d95643f6..e5431ec3 100644 --- a/src/codegen/visitors/cil_visitor.py +++ b/src/codegen/visitors/cil_visitor.py @@ -1,347 +1,347 @@ -import codegen.cil_ast as cil -from codegen.visitors.base_cil_visitor import BaseCOOLToCILVisitor -from utils.ast import * -from semantic.tools import Scope, VariableInfo -from semantic.types import * -from utils import visitor -from utils.utils import get_type, get_common_basetype - - -class COOLToCILVisitor(BaseCOOLToCILVisitor): - @visitor.on('node') - def visit(self, node): - pass - - @visitor.when(ProgramNode) - def visit(self, node: ProgramNode, scope: Scope): - self.current_function = self.register_function('entry') - instance = self.define_internal_local() - result = self.define_internal_local() - self.register_instruction(cil.AllocateNode('Main', instance)) - self.register_instruction(cil.ArgNode(instance)) - name = self.to_function_name('main', 'Main') - self.register_instruction(cil.StaticCallNode(name, result)) - self.register_instruction(cil.ReturnNode(0)) - self.current_function = None - - for declaration, child_scope in zip(node.declarations, scope.children): - self.visit(declaration, child_scope) - - return cil.ProgramNode(self.dottypes, self.dotdata, self.dotcode) - - @visitor.when(ClassDeclarationNode) - def visit(self, node: ClassDeclarationNode, scope: Scope): - self.current_type = self.context.get_type(node.id, node.pos) - - cil_type = self.register_type(node.id) - - for method, mtype in self.current_type.all_methods(): - cil_type.methods.append((method.name, self.to_function_name(method.name, mtype.name))) - - for a_name, a_type in self.current_type.all_attributes(): - cil_type.attributes.append((a_name.name, self.to_attr_name(a_name.name, a_type.name))) - - func_declarations = (f for f in node.features if isinstance(f, FuncDeclarationNode)) - for feature, child_scope in zip(func_declarations, scope.children): - self.visit(feature, child_scope) - - @visitor.when(FuncDeclarationNode) - def visit(self, node: FuncDeclarationNode, scope: Scope): - self.current_method = self.current_type.get_method(node.id, node.pos) - - name = self.to_function_name(node.id, self.current_type.name) - self.current_function = self.register_function(name) - - # Handle PARAMS - self.register_param(VariableInfo('self', self.current_type)) - for p_name, p_type in node.params: - self.register_param(VariableInfo(p_name, p_type)) - - value, _ = self.visit(node.body, scope) - - # Handle RETURN - self.register_instruction(cil.ReturnNode(value)) - self.current_method = None - - @visitor.when(VarDeclarationNode) - def visit(self, node: VarDeclarationNode, scope: Scope): - #? Aquí son solo locals o attributes también - var_info = scope.find_variable(node.id) - vtype = get_type(var_info.type, self.current_type) - local_var = self.register_local(VariableInfo(var_info.name, vtype)) - - value, _ = self.visit(node.expr, scope) - self.register_instruction(cil.AssignNode(local_var, value)) - return local_var, vtype - - - @visitor.when(AssignNode) - def visit(self, node: AssignNode, scope: Scope): - var_info = scope.find_local(node.id) - if var_info is None: - var_info = scope.find_attribute(node.id) - value, typex = self.visit(node.expr, scope) - self.register_instruction(cil.SetAttribNode(VariableInfo('self', self.current_type), var_info, value)) - else: - value, typex = self.visit(node.expr, scope) - return value, typex - - def _return_type(self, typex: Type, node): - meth = typex.get_method(node.id, node.pos) - return get_type(meth.return_type, self.current_type) - - @visitor.when(CallNode) - def visit(self, node: CallNode, scope: Scope): - result = self.define_internal_local() - obj, otype = self.visit(node.obj, scope) - - args = [self.visit(arg, scope)[0] for arg in node.args] - - self.register_instruction(cil.ArgNode(obj)) - for arg in args: - self.register_instruction(cil.ArgNode(arg)) - - name = self.to_function_name(node.id, otype.name) - self.register_instruction(cil.DynamicCallNode(otype.name, name, result)) - return result, self._return_type(otype, node) - - @visitor.when(BaseCallNode) - def visit(self, node: BaseCallNode, scope: Scope): - result = self.define_internal_local() - obj, otype = self.visit(node.obj, scope) - - args = [self.visit(arg, scope)[0] for arg in node.args] - - self.register_instruction(cil.ArgNode(obj)) - for arg in args: - self.register_instruction(cil.ArgNode(arg)) - - name = self.to_function_name(node.id, node.type) - self.register_instruction(cil.DynamicCallNode(node.type, name, result)) - return result, self._return_type(otype, node) - - @visitor.when(StaticCallNode) - def visit(self, node: StaticCallNode, scope: Scope): - result = self.define_internal_local() - - args = [self.visit(arg, scope)[0] for arg in node.args] - - self.register_instruction(cil.ArgNode('self')) - for arg in args: - self.register_instruction(cil.ArgNode(arg)) - - name = self.to_function_name(node.id, self.current_type.name) - self.register_instruction(cil.StaticCallNode(name, result)) - return result, self._return_type(self.current_type, node) - - @visitor.when(ConstantNumNode) - def visit(self, node: ConstantNumNode, scope: Scope): - return int(node.lex), IntType() - - @visitor.when(ConstantBoolNode) - def visit(self, node: ConstantBoolNode, scope: Scope): - return 1 if node.lex == 'true' else 0, BoolType() - - @visitor.when(ConstantStrNode) - def visit(self, node: ConstantStrNode, scope: Scope): - data = self.register_data(node.lex) - result = self.define_internal_local() - self.register_instruction(cil.LoadNode(result, data.name)) - return result, StringType() - - @visitor.when(VariableNode) - def visit(self, node: VariableNode, scope: Scope): - try: - typex = scope.find_local(node.lex).type - return node.lex, get_type(typex, self.current_type) - except: - var_info = scope.find_attribute(node.lex) - local_var = self.register_local(var_info) - self.register_instruction(cil.GetAttribNode('self', var_info, local_var)) - return local_var, get_type(var_info.type, self.current_type) - - @visitor.when(InstantiateNode) - def visit(self, node: InstantiateNode, scope: Scope): - instance = self.define_internal_local() - typex = self.context.get_type(node.lex, node.pos) - typex = get_type(typex, self.current_type) - self.register_instruction(cil.AllocateNode(typex.name, instance)) - - for attr, _ in typex.all_attributes(clean=True): - expr, _ = self.visit(attr.expr, scope) - self.register_instruction(cil.SetAttribNode(instance, attr, expr)) - return instance, typex - - - @visitor.when(WhileNode) - def visit(self, node: WhileNode, scope: Scope): - ''' - LABEL start - IF GOTO continue - GOTO end - LABEL continue - res = - GOTO start - LABEL end - ''' - start_label = cil.LabelNode('start') - continue_label = cil.LabelNode('continue') - end_label = cil.LabelNode('end') - - result = self.define_internal_local() - self.register_instruction(cil.AssignNode(result, ConstantVoidNode())) - self.register_instruction(start_label) - - cond, _ = self.visit(node.cond, scope) - self.register_instruction(cil.GotoIfNode(cond, continue_label)) - self.register_instruction(cil.GotoNode(end_label)) - self.register_instruction(continue_label) - expr, typex = self.visit(node.expr, scope) - self.register_instruction(cil.GotoNode(start_label)) - self.register_instruction(end_label) - - self.register_instruction(cil.AssignNode(result, expr)) - return result, typex - - @visitor.when(ConditionalNode) - def visit(self, node: ConditionalNode, scope: Scope): - ''' - IF cond GOTO true - result = - GOTO end - LABEL true - result = - LABEL end - ''' - cond, _ = self.visit(node.cond, scope) - - true_label = cil.LabelNode("true") - end_label = cil.LabelNode("end") - - result = self.define_internal_local() - self.register_instruction(cil.GotoIfNode(cond, true_label)) - - false_expr, ftypex = self.visit(node.else_stm, scope) - self.register_instruction(cil.AssignNode(result, false_expr)) - self.register_instruction(cil.GotoNode(end_label)) - self.register_instruction(true_label) - - true_expr, ttypex = self.visit(node.stm, scope) - self.register_instruction(cil.AssignNode(result, true_expr)) - self.register_instruction(end_label) - return result, get_common_basetype([ttypex, ftypex]) - - @visitor.when(BlockNode) - def visit(self, node: BlockNode, scope: Scope): - result = self.define_internal_local() - value = None - for exp in node.expr_list: - value, typex = self.visit(exp, scope) - self.register_instruction(cil.AssignNode(result, value)) - return result, typex - - @visitor.when(LetNode) - def visit(self, node: LetNode, scope: Scope): - child_scope = scope.expr_dict[node] - for init in node.init_list: - self.visit(init, child_scope) - - result = self.define_internal_local() - expr, typex = self.visit(node.expr, child_scope) - self.register_instruction(cil.AssignNode(result, expr)) - return result, typex - - @visitor.when(CaseNode) - def visit(self, node: CaseNode, scope: Scope): - expr, typex = self.visit(node.expr, scope) - result = self.define_internal_local() - etype = self.define_internal_local() - end_label = cil.LabelNode('end') - self.register_instruction(cil.TypeOfNode(expr, etype)) - - new_scope = scope.expr_dict[node] - for i, (case, c_scope) in enumerate(zip(node.case_list, new_scope.children)): - next_label = cil.LabelNode(f'next_{i}') - expr_i, label = self.visit(case, c_scope, expr, etype, next_label) - self.register_instruction(cil.AssignNode(result, expr_i)) - self.register_instruction(cil.GotoNode(end_label)) - self.register_instruction(label) - self.register_instruction(end_label) - return result, typex - - @visitor.when(OptionNode) - def visit(self, node: OptionNode, scope: Scope, expr, expr_type, next_label): - aux = self.define_internal_local() - # TODO: Buscar una forma de representar conforms in cil - self.register_instruction(cil.MinusNode(aux, expr_type, node.typex)) - - self.register_instruction(cil.GotoIfNode(aux, next_label)) - var_info = scope.find_variable(node.id) - local_var = self.register_local(var_info) - self.register_instruction(cil.AssignNode(node.id, expr)) - - expr_i, typex = self.visit(node.expr, scope) - return exp_i, next_label - - @visitor.when(NotNode) - def visit(self, node: NotNode, scope: Scope): - """ - expr = - IF expr GOTO true - res = 1 - GOTO end - LABEL true - res = 0 - LABEL end - """ - #? No sé si representar un no... - result = self.define_internal_local() - expr, _ = self.visit(node.expr, scope) - - true_label = cil.LabelNode('true') - end_label = cil.LabelNode('end') - self.register_instruction(cil.GotoIfNode(expr, true_label)) - self.register_instruction(cil.AssignNode(result, 1)) - self.register_instruction(cil.GotoNode(end_label)) - self.register_instruction(true_label) - self.register_instruction(cil.AssignNode(result, 0)) - self.register_instruction(end_label) - # return self._define_unary_node(node, scope, cil.NotNode) - return result, BoolType() - - @visitor.when(BinaryNotNode) - def visit(self, node: NotNode, scope: Scope): - return self._define_unary_node(node, scope, cil.BinaryNotNode) - - - @visitor.when(IsVoidNode) - def visit(self, node: IsVoidNode, scope: Scope): - return self._define_unary_node(node, scope, cil.IsVoidNode) - - @visitor.when(PlusNode) - def visit(self, node: PlusNode, scope: Scope): - return self._define_binary_node(node, scope, cil.PlusNode) - - @visitor.when(MinusNode) - def visit(self, node: MinusNode, scope: Scope): - return self._define_binary_node(node, scope, cil.MinusNode) - - @visitor.when(StarNode) - def visit(self, node: StarNode, scope: Scope): - return self._define_binary_node(node, scope, cil.StarNode) - - @visitor.when(DivNode) - def visit(self, node: DivNode, scope: Scope): - return self._define_binary_node(node, scope, cil.DivNode) - - @visitor.when(LessNode) - def visit(self, node: LessNode, scope: Scope): - return self._define_binary_node(node, scope, cil.MinusNode) - - @visitor.when(LessEqNode) - def visit(self, node: LessEqNode, scope: Scope): - return self._define_binary_node(node, scope, cil.LessEqNode) - - @visitor.when(EqualNode) - def visit(self, node: EqualNode, scope: Scope): - return self._define_binary_node(node, scope, cil.MinusNode) +import codegen.cil_ast as cil +from codegen.visitors.base_cil_visitor import BaseCOOLToCILVisitor +from utils.ast import * +from semantic.tools import Scope, VariableInfo +from semantic.types import * +from utils import visitor +from utils.utils import get_type, get_common_basetype + + +class COOLToCILVisitor(BaseCOOLToCILVisitor): + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node: ProgramNode, scope: Scope): + self.current_function = self.register_function('entry') + instance = self.define_internal_local() + result = self.define_internal_local() + self.register_instruction(cil.AllocateNode('Main', instance)) + self.register_instruction(cil.ArgNode(instance)) + name = self.to_function_name('main', 'Main') + self.register_instruction(cil.StaticCallNode(name, result)) + self.register_instruction(cil.ReturnNode(0)) + self.current_function = None + + for declaration, child_scope in zip(node.declarations, scope.children): + self.visit(declaration, child_scope) + + return cil.ProgramNode(self.dottypes, self.dotdata, self.dotcode) + + @visitor.when(ClassDeclarationNode) + def visit(self, node: ClassDeclarationNode, scope: Scope): + self.current_type = self.context.get_type(node.id, node.pos) + + cil_type = self.register_type(node.id) + + for method, mtype in self.current_type.all_methods(): + cil_type.methods.append((method.name, self.to_function_name(method.name, mtype.name))) + + for a_name, a_type in self.current_type.all_attributes(): + cil_type.attributes.append((a_name.name, self.to_attr_name(a_name.name, a_type.name))) + + func_declarations = (f for f in node.features if isinstance(f, FuncDeclarationNode)) + for feature, child_scope in zip(func_declarations, scope.children): + self.visit(feature, child_scope) + + @visitor.when(FuncDeclarationNode) + def visit(self, node: FuncDeclarationNode, scope: Scope): + self.current_method = self.current_type.get_method(node.id, node.pos) + + name = self.to_function_name(node.id, self.current_type.name) + self.current_function = self.register_function(name) + + # Handle PARAMS + self.register_param(VariableInfo('self', self.current_type)) + for p_name, p_type in node.params: + self.register_param(VariableInfo(p_name, p_type)) + + value, _ = self.visit(node.body, scope) + + # Handle RETURN + self.register_instruction(cil.ReturnNode(value)) + self.current_method = None + + @visitor.when(VarDeclarationNode) + def visit(self, node: VarDeclarationNode, scope: Scope): + #? Aquí son solo locals o attributes también + var_info = scope.find_variable(node.id) + vtype = get_type(var_info.type, self.current_type) + local_var = self.register_local(VariableInfo(var_info.name, vtype)) + + value, _ = self.visit(node.expr, scope) + self.register_instruction(cil.AssignNode(local_var, value)) + return local_var, vtype + + + @visitor.when(AssignNode) + def visit(self, node: AssignNode, scope: Scope): + var_info = scope.find_local(node.id) + if var_info is None: + var_info = scope.find_attribute(node.id) + value, typex = self.visit(node.expr, scope) + self.register_instruction(cil.SetAttribNode(VariableInfo('self', self.current_type), var_info, value)) + else: + value, typex = self.visit(node.expr, scope) + return value, typex + + def _return_type(self, typex: Type, node): + meth = typex.get_method(node.id, node.pos) + return get_type(meth.return_type, self.current_type) + + @visitor.when(CallNode) + def visit(self, node: CallNode, scope: Scope): + result = self.define_internal_local() + obj, otype = self.visit(node.obj, scope) + + args = [self.visit(arg, scope)[0] for arg in node.args] + + self.register_instruction(cil.ArgNode(obj)) + for arg in args: + self.register_instruction(cil.ArgNode(arg)) + + name = self.to_function_name(node.id, otype.name) + self.register_instruction(cil.DynamicCallNode(otype.name, name, result)) + return result, self._return_type(otype, node) + + @visitor.when(BaseCallNode) + def visit(self, node: BaseCallNode, scope: Scope): + result = self.define_internal_local() + obj, otype = self.visit(node.obj, scope) + + args = [self.visit(arg, scope)[0] for arg in node.args] + + self.register_instruction(cil.ArgNode(obj)) + for arg in args: + self.register_instruction(cil.ArgNode(arg)) + + name = self.to_function_name(node.id, node.type) + self.register_instruction(cil.DynamicCallNode(node.type, name, result)) + return result, self._return_type(otype, node) + + @visitor.when(StaticCallNode) + def visit(self, node: StaticCallNode, scope: Scope): + result = self.define_internal_local() + + args = [self.visit(arg, scope)[0] for arg in node.args] + + self.register_instruction(cil.ArgNode('self')) + for arg in args: + self.register_instruction(cil.ArgNode(arg)) + + name = self.to_function_name(node.id, self.current_type.name) + self.register_instruction(cil.StaticCallNode(name, result)) + return result, self._return_type(self.current_type, node) + + @visitor.when(ConstantNumNode) + def visit(self, node: ConstantNumNode, scope: Scope): + return int(node.lex), IntType() + + @visitor.when(ConstantBoolNode) + def visit(self, node: ConstantBoolNode, scope: Scope): + return 1 if node.lex == 'true' else 0, BoolType() + + @visitor.when(ConstantStrNode) + def visit(self, node: ConstantStrNode, scope: Scope): + data = self.register_data(node.lex) + result = self.define_internal_local() + self.register_instruction(cil.LoadNode(result, data.name)) + return result, StringType() + + @visitor.when(VariableNode) + def visit(self, node: VariableNode, scope: Scope): + try: + typex = scope.find_local(node.lex).type + return node.lex, get_type(typex, self.current_type) + except: + var_info = scope.find_attribute(node.lex) + local_var = self.register_local(var_info) + self.register_instruction(cil.GetAttribNode('self', var_info, local_var)) + return local_var, get_type(var_info.type, self.current_type) + + @visitor.when(InstantiateNode) + def visit(self, node: InstantiateNode, scope: Scope): + instance = self.define_internal_local() + typex = self.context.get_type(node.lex, node.pos) + typex = get_type(typex, self.current_type) + self.register_instruction(cil.AllocateNode(typex.name, instance)) + + for attr, _ in typex.all_attributes(clean=True): + expr, _ = self.visit(attr.expr, scope) + self.register_instruction(cil.SetAttribNode(instance, attr, expr)) + return instance, typex + + + @visitor.when(WhileNode) + def visit(self, node: WhileNode, scope: Scope): + ''' + LABEL start + IF GOTO continue + GOTO end + LABEL continue + res = + GOTO start + LABEL end + ''' + start_label = cil.LabelNode('start') + continue_label = cil.LabelNode('continue') + end_label = cil.LabelNode('end') + + result = self.define_internal_local() + self.register_instruction(cil.AssignNode(result, ConstantVoidNode())) + self.register_instruction(start_label) + + cond, _ = self.visit(node.cond, scope) + self.register_instruction(cil.GotoIfNode(cond, continue_label)) + self.register_instruction(cil.GotoNode(end_label)) + self.register_instruction(continue_label) + expr, typex = self.visit(node.expr, scope) + self.register_instruction(cil.GotoNode(start_label)) + self.register_instruction(end_label) + + self.register_instruction(cil.AssignNode(result, expr)) + return result, typex + + @visitor.when(ConditionalNode) + def visit(self, node: ConditionalNode, scope: Scope): + ''' + IF cond GOTO true + result = + GOTO end + LABEL true + result = + LABEL end + ''' + cond, _ = self.visit(node.cond, scope) + + true_label = cil.LabelNode("true") + end_label = cil.LabelNode("end") + + result = self.define_internal_local() + self.register_instruction(cil.GotoIfNode(cond, true_label)) + + false_expr, ftypex = self.visit(node.else_stm, scope) + self.register_instruction(cil.AssignNode(result, false_expr)) + self.register_instruction(cil.GotoNode(end_label)) + self.register_instruction(true_label) + + true_expr, ttypex = self.visit(node.stm, scope) + self.register_instruction(cil.AssignNode(result, true_expr)) + self.register_instruction(end_label) + return result, get_common_basetype([ttypex, ftypex]) + + @visitor.when(BlockNode) + def visit(self, node: BlockNode, scope: Scope): + result = self.define_internal_local() + value = None + for exp in node.expr_list: + value, typex = self.visit(exp, scope) + self.register_instruction(cil.AssignNode(result, value)) + return result, typex + + @visitor.when(LetNode) + def visit(self, node: LetNode, scope: Scope): + child_scope = scope.expr_dict[node] + for init in node.init_list: + self.visit(init, child_scope) + + result = self.define_internal_local() + expr, typex = self.visit(node.expr, child_scope) + self.register_instruction(cil.AssignNode(result, expr)) + return result, typex + + @visitor.when(CaseNode) + def visit(self, node: CaseNode, scope: Scope): + expr, typex = self.visit(node.expr, scope) + result = self.define_internal_local() + etype = self.define_internal_local() + end_label = cil.LabelNode('end') + self.register_instruction(cil.TypeOfNode(expr, etype)) + + new_scope = scope.expr_dict[node] + for i, (case, c_scope) in enumerate(zip(node.case_list, new_scope.children)): + next_label = cil.LabelNode(f'next_{i}') + expr_i, label = self.visit(case, c_scope, expr, etype, next_label) + self.register_instruction(cil.AssignNode(result, expr_i)) + self.register_instruction(cil.GotoNode(end_label)) + self.register_instruction(label) + self.register_instruction(end_label) + return result, typex + + @visitor.when(OptionNode) + def visit(self, node: OptionNode, scope: Scope, expr, expr_type, next_label): + aux = self.define_internal_local() + # TODO: Buscar una forma de representar conforms in cil + self.register_instruction(cil.MinusNode(aux, expr_type, node.typex)) + + self.register_instruction(cil.GotoIfNode(aux, next_label)) + var_info = scope.find_variable(node.id) + local_var = self.register_local(var_info) + self.register_instruction(cil.AssignNode(node.id, expr)) + + expr_i, typex = self.visit(node.expr, scope) + return exp_i, next_label + + @visitor.when(NotNode) + def visit(self, node: NotNode, scope: Scope): + """ + expr = + IF expr GOTO true + res = 1 + GOTO end + LABEL true + res = 0 + LABEL end + """ + #? No sé si representar un no... + result = self.define_internal_local() + expr, _ = self.visit(node.expr, scope) + + true_label = cil.LabelNode('true') + end_label = cil.LabelNode('end') + self.register_instruction(cil.GotoIfNode(expr, true_label)) + self.register_instruction(cil.AssignNode(result, 1)) + self.register_instruction(cil.GotoNode(end_label)) + self.register_instruction(true_label) + self.register_instruction(cil.AssignNode(result, 0)) + self.register_instruction(end_label) + # return self._define_unary_node(node, scope, cil.NotNode) + return result, BoolType() + + @visitor.when(BinaryNotNode) + def visit(self, node: NotNode, scope: Scope): + return self._define_unary_node(node, scope, cil.BinaryNotNode) + + + @visitor.when(IsVoidNode) + def visit(self, node: IsVoidNode, scope: Scope): + return self._define_unary_node(node, scope, cil.IsVoidNode) + + @visitor.when(PlusNode) + def visit(self, node: PlusNode, scope: Scope): + return self._define_binary_node(node, scope, cil.PlusNode) + + @visitor.when(MinusNode) + def visit(self, node: MinusNode, scope: Scope): + return self._define_binary_node(node, scope, cil.MinusNode) + + @visitor.when(StarNode) + def visit(self, node: StarNode, scope: Scope): + return self._define_binary_node(node, scope, cil.StarNode) + + @visitor.when(DivNode) + def visit(self, node: DivNode, scope: Scope): + return self._define_binary_node(node, scope, cil.DivNode) + + @visitor.when(LessNode) + def visit(self, node: LessNode, scope: Scope): + return self._define_binary_node(node, scope, cil.MinusNode) + + @visitor.when(LessEqNode) + def visit(self, node: LessEqNode, scope: Scope): + return self._define_binary_node(node, scope, cil.LessEqNode) + + @visitor.when(EqualNode) + def visit(self, node: EqualNode, scope: Scope): + return self._define_binary_node(node, scope, cil.MinusNode) diff --git a/src/cool_parser/__init__.py b/src/cool_parser/__init__.py index a589d8b8..ce456e07 100644 --- a/src/cool_parser/__init__.py +++ b/src/cool_parser/__init__.py @@ -1 +1 @@ -from cool_parser.parser import CoolParser +from cool_parser.parser import CoolParser diff --git a/src/cool_parser/base_parser.py b/src/cool_parser/base_parser.py index c0243856..29188afe 100644 --- a/src/cool_parser/base_parser.py +++ b/src/cool_parser/base_parser.py @@ -1,26 +1,26 @@ -from utils.tokens import tokens -import os -import ply.yacc as yacc - -from cool_parser.logger import log -from lexer.lexer import CoolLexer -from utils.tokens import tokens - -class Parser: - def __init__(self, lexer=None): - self.lexer = lexer if lexer else CoolLexer() - self.outputdir = 'cool_parser/output_parser' - self.tokens = tokens - self.errors = False - self.parser = yacc.yacc(start='program', - module=self, - outputdir=self.outputdir, - optimize=1, - debuglog=log, - errorlog=log) - - - def parse(self, program, debug=False): - self.errors = False - # tokens = self.lexer.tokenize_text(program) +from utils.tokens import tokens +import os +import ply.yacc as yacc + +from cool_parser.logger import log +from lexer.lexer import CoolLexer +from utils.tokens import tokens + +class Parser: + def __init__(self, lexer=None): + self.lexer = lexer if lexer else CoolLexer() + self.outputdir = 'cool_parser/output_parser' + self.tokens = tokens + self.errors = False + self.parser = yacc.yacc(start='program', + module=self, + outputdir=self.outputdir, + optimize=1, + debuglog=log, + errorlog=log) + + + def parse(self, program, debug=False): + self.errors = False + # tokens = self.lexer.tokenize_text(program) return self.parser.parse(program, self.lexer.lexer, debug=log) \ No newline at end of file diff --git a/src/cool_parser/logger.py b/src/cool_parser/logger.py index 7a3cf13d..e1d62278 100644 --- a/src/cool_parser/logger.py +++ b/src/cool_parser/logger.py @@ -1,13 +1,13 @@ - # Set up a logging object -import logging -import os - -cwd = os.getcwd() - -logging.basicConfig( - level = logging.DEBUG, - filename = f"cool_parser/output_parser/parselog.txt", - filemode = "w", - format = "%(filename)10s:%(lineno)4d:%(message)s" - ) -log = logging.getLogger() + # Set up a logging object +import logging +import os + +cwd = os.getcwd() + +logging.basicConfig( + level = logging.DEBUG, + filename = f"cool_parser/output_parser/parselog.txt", + filemode = "w", + format = "%(filename)10s:%(lineno)4d:%(message)s" + ) +log = logging.getLogger() diff --git a/src/cool_parser/output_parser/parselog.txt b/src/cool_parser/output_parser/parselog.txt index f6919260..8e2b175c 100644 --- a/src/cool_parser/output_parser/parselog.txt +++ b/src/cool_parser/output_parser/parselog.txt @@ -1,7821 +1,7821 @@ - yacc.py:3317:Created by PLY version 3.11 (http://www.dabeaz.com/ply) - yacc.py:3377: - yacc.py:3378:Grammar - yacc.py:3379: - yacc.py:3381:Rule 0 S' -> program - yacc.py:3381:Rule 1 program -> class_list - yacc.py:3381:Rule 2 epsilon -> - yacc.py:3381:Rule 3 class_list -> def_class class_list - yacc.py:3381:Rule 4 class_list -> def_class - yacc.py:3381:Rule 5 class_list -> error class_list - yacc.py:3381:Rule 6 def_class -> class type ocur feature_list ccur semi - yacc.py:3381:Rule 7 def_class -> class type inherits type ocur feature_list ccur semi - yacc.py:3381:Rule 8 def_class -> class error ocur feature_list ccur semi - yacc.py:3381:Rule 9 def_class -> class type ocur feature_list ccur error - yacc.py:3381:Rule 10 def_class -> class error inherits type ocur feature_list ccur semi - yacc.py:3381:Rule 11 def_class -> class error inherits error ocur feature_list ccur semi - yacc.py:3381:Rule 12 def_class -> class type inherits error ocur feature_list ccur semi - yacc.py:3381:Rule 13 def_class -> class type inherits type ocur feature_list ccur error - yacc.py:3381:Rule 14 feature_list -> epsilon - yacc.py:3381:Rule 15 feature_list -> def_attr semi feature_list - yacc.py:3381:Rule 16 feature_list -> def_func semi feature_list - yacc.py:3381:Rule 17 feature_list -> error feature_list - yacc.py:3381:Rule 18 def_attr -> id colon type - yacc.py:3381:Rule 19 def_attr -> id colon type larrow expr - yacc.py:3381:Rule 20 def_attr -> error colon type - yacc.py:3381:Rule 21 def_attr -> id colon error - yacc.py:3381:Rule 22 def_attr -> error colon type larrow expr - yacc.py:3381:Rule 23 def_attr -> id colon error larrow expr - yacc.py:3381:Rule 24 def_attr -> id colon type larrow error - yacc.py:3381:Rule 25 def_func -> id opar formals cpar colon type ocur expr ccur - yacc.py:3381:Rule 26 def_func -> error opar formals cpar colon type ocur expr ccur - yacc.py:3381:Rule 27 def_func -> id opar error cpar colon type ocur expr ccur - yacc.py:3381:Rule 28 def_func -> id opar formals cpar colon error ocur expr ccur - yacc.py:3381:Rule 29 def_func -> id opar formals cpar colon type ocur error ccur - yacc.py:3381:Rule 30 formals -> param_list - yacc.py:3381:Rule 31 formals -> param_list_empty - yacc.py:3381:Rule 32 param_list -> param - yacc.py:3381:Rule 33 param_list -> param comma param_list - yacc.py:3381:Rule 34 param_list_empty -> epsilon - yacc.py:3381:Rule 35 param -> id colon type - yacc.py:3381:Rule 36 let_list -> let_assign - yacc.py:3381:Rule 37 let_list -> let_assign comma let_list - yacc.py:3381:Rule 38 let_assign -> param larrow expr - yacc.py:3381:Rule 39 let_assign -> param - yacc.py:3381:Rule 40 cases_list -> casep semi - yacc.py:3381:Rule 41 cases_list -> casep semi cases_list - yacc.py:3381:Rule 42 cases_list -> error cases_list - yacc.py:3381:Rule 43 cases_list -> error semi - yacc.py:3381:Rule 44 casep -> id colon type rarrow expr - yacc.py:3381:Rule 45 expr -> id larrow expr - yacc.py:3381:Rule 46 expr -> comp - yacc.py:3381:Rule 47 comp -> comp less op - yacc.py:3381:Rule 48 comp -> comp lesseq op - yacc.py:3381:Rule 49 comp -> comp equal op - yacc.py:3381:Rule 50 comp -> op - yacc.py:3381:Rule 51 op -> op plus term - yacc.py:3381:Rule 52 op -> op minus term - yacc.py:3381:Rule 53 op -> term - yacc.py:3381:Rule 54 term -> term star base_call - yacc.py:3381:Rule 55 term -> term div base_call - yacc.py:3381:Rule 56 term -> base_call - yacc.py:3381:Rule 57 term -> term star error - yacc.py:3381:Rule 58 term -> term div error - yacc.py:3381:Rule 59 base_call -> factor arroba type dot func_call - yacc.py:3381:Rule 60 base_call -> factor - yacc.py:3381:Rule 61 base_call -> error arroba type dot func_call - yacc.py:3381:Rule 62 base_call -> factor arroba error dot func_call - yacc.py:3381:Rule 63 factor -> atom - yacc.py:3381:Rule 64 factor -> opar expr cpar - yacc.py:3381:Rule 65 factor -> factor dot func_call - yacc.py:3381:Rule 66 factor -> not expr - yacc.py:3381:Rule 67 factor -> func_call - yacc.py:3381:Rule 68 factor -> isvoid base_call - yacc.py:3381:Rule 69 factor -> nox base_call - yacc.py:3381:Rule 70 factor -> let let_list in expr - yacc.py:3381:Rule 71 factor -> case expr of cases_list esac - yacc.py:3381:Rule 72 factor -> if expr then expr else expr fi - yacc.py:3381:Rule 73 factor -> while expr loop expr pool - yacc.py:3381:Rule 74 atom -> num - yacc.py:3381:Rule 75 atom -> id - yacc.py:3381:Rule 76 atom -> new type - yacc.py:3381:Rule 77 atom -> ocur block ccur - yacc.py:3381:Rule 78 atom -> error block ccur - yacc.py:3381:Rule 79 atom -> ocur error ccur - yacc.py:3381:Rule 80 atom -> ocur block error - yacc.py:3381:Rule 81 atom -> true - yacc.py:3381:Rule 82 atom -> false - yacc.py:3381:Rule 83 atom -> string - yacc.py:3381:Rule 84 block -> expr semi - yacc.py:3381:Rule 85 block -> expr semi block - yacc.py:3381:Rule 86 block -> error block - yacc.py:3381:Rule 87 block -> error semi - yacc.py:3381:Rule 88 func_call -> id opar args cpar - yacc.py:3381:Rule 89 func_call -> id opar error cpar - yacc.py:3381:Rule 90 func_call -> error opar args cpar - yacc.py:3381:Rule 91 args -> arg_list - yacc.py:3381:Rule 92 args -> arg_list_empty - yacc.py:3381:Rule 93 arg_list -> expr - yacc.py:3381:Rule 94 arg_list -> expr comma arg_list - yacc.py:3381:Rule 95 arg_list -> error arg_list - yacc.py:3381:Rule 96 arg_list_empty -> epsilon - yacc.py:3399: - yacc.py:3400:Terminals, with rules where they appear - yacc.py:3401: - yacc.py:3405:arroba : 59 61 62 - yacc.py:3405:case : 71 - yacc.py:3405:ccur : 6 7 8 9 10 11 12 13 25 26 27 28 29 77 78 79 - yacc.py:3405:class : 6 7 8 9 10 11 12 13 - yacc.py:3405:colon : 18 19 20 21 22 23 24 25 26 27 28 29 35 44 - yacc.py:3405:comma : 33 37 94 - yacc.py:3405:cpar : 25 26 27 28 29 64 88 89 90 - yacc.py:3405:div : 55 58 - yacc.py:3405:dot : 59 61 62 65 - yacc.py:3405:else : 72 - yacc.py:3405:equal : 49 - yacc.py:3405:error : 5 8 9 10 11 11 12 13 17 20 21 22 23 24 26 27 28 29 42 43 57 58 61 62 78 79 80 86 87 89 90 95 - yacc.py:3405:esac : 71 - yacc.py:3405:false : 82 - yacc.py:3405:fi : 72 - yacc.py:3405:id : 18 19 21 23 24 25 27 28 29 35 44 45 75 88 89 - yacc.py:3405:if : 72 - yacc.py:3405:in : 70 - yacc.py:3405:inherits : 7 10 11 12 13 - yacc.py:3405:isvoid : 68 - yacc.py:3405:larrow : 19 22 23 24 38 45 - yacc.py:3405:less : 47 - yacc.py:3405:lesseq : 48 - yacc.py:3405:let : 70 - yacc.py:3405:loop : 73 - yacc.py:3405:minus : 52 - yacc.py:3405:new : 76 - yacc.py:3405:not : 66 - yacc.py:3405:nox : 69 - yacc.py:3405:num : 74 - yacc.py:3405:ocur : 6 7 8 9 10 11 12 13 25 26 27 28 29 77 79 80 - yacc.py:3405:of : 71 - yacc.py:3405:opar : 25 26 27 28 29 64 88 89 90 - yacc.py:3405:plus : 51 - yacc.py:3405:pool : 73 - yacc.py:3405:rarrow : 44 - yacc.py:3405:semi : 6 7 8 10 11 12 15 16 40 41 43 84 85 87 - yacc.py:3405:star : 54 57 - yacc.py:3405:string : 83 - yacc.py:3405:then : 72 - yacc.py:3405:true : 81 - yacc.py:3405:type : 6 7 7 9 10 12 13 13 18 19 20 22 24 25 26 27 29 35 44 59 61 76 - yacc.py:3405:while : 73 - yacc.py:3407: - yacc.py:3408:Nonterminals, with rules where they appear - yacc.py:3409: - yacc.py:3413:arg_list : 91 94 95 - yacc.py:3413:arg_list_empty : 92 - yacc.py:3413:args : 88 90 - yacc.py:3413:atom : 63 - yacc.py:3413:base_call : 54 55 56 68 69 - yacc.py:3413:block : 77 78 80 85 86 - yacc.py:3413:casep : 40 41 - yacc.py:3413:cases_list : 41 42 71 - yacc.py:3413:class_list : 1 3 5 - yacc.py:3413:comp : 46 47 48 49 - yacc.py:3413:def_attr : 15 - yacc.py:3413:def_class : 3 4 - yacc.py:3413:def_func : 16 - yacc.py:3413:epsilon : 14 34 96 - yacc.py:3413:expr : 19 22 23 25 26 27 28 38 44 45 64 66 70 71 72 72 72 73 73 84 85 93 94 - yacc.py:3413:factor : 59 60 62 65 - yacc.py:3413:feature_list : 6 7 8 9 10 11 12 13 15 16 17 - yacc.py:3413:formals : 25 26 28 29 - yacc.py:3413:func_call : 59 61 62 65 67 - yacc.py:3413:let_assign : 36 37 - yacc.py:3413:let_list : 37 70 - yacc.py:3413:op : 47 48 49 50 51 52 - yacc.py:3413:param : 32 33 38 39 - yacc.py:3413:param_list : 30 33 - yacc.py:3413:param_list_empty : 31 - yacc.py:3413:program : 0 - yacc.py:3413:term : 51 52 53 54 55 57 58 - yacc.py:3414: - yacc.py:3436:Generating LALR tables - yacc.py:2543:Parsing method: LALR - yacc.py:2561: - yacc.py:2562:state 0 - yacc.py:2563: - yacc.py:2565: (0) S' -> . program - yacc.py:2565: (1) program -> . class_list - yacc.py:2565: (3) class_list -> . def_class class_list - yacc.py:2565: (4) class_list -> . def_class - yacc.py:2565: (5) class_list -> . error class_list - yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi - yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi - yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi - yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error - yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi - yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: error shift and go to state 4 - yacc.py:2687: class shift and go to state 5 - yacc.py:2689: - yacc.py:2714: program shift and go to state 1 - yacc.py:2714: class_list shift and go to state 2 - yacc.py:2714: def_class shift and go to state 3 - yacc.py:2561: - yacc.py:2562:state 1 - yacc.py:2563: - yacc.py:2565: (0) S' -> program . - yacc.py:2566: - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 2 - yacc.py:2563: - yacc.py:2565: (1) program -> class_list . - yacc.py:2566: - yacc.py:2687: $end reduce using rule 1 (program -> class_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 3 - yacc.py:2563: - yacc.py:2565: (3) class_list -> def_class . class_list - yacc.py:2565: (4) class_list -> def_class . - yacc.py:2565: (3) class_list -> . def_class class_list - yacc.py:2565: (4) class_list -> . def_class - yacc.py:2565: (5) class_list -> . error class_list - yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi - yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi - yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi - yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error - yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi - yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: $end reduce using rule 4 (class_list -> def_class .) - yacc.py:2687: error shift and go to state 4 - yacc.py:2687: class shift and go to state 5 - yacc.py:2689: - yacc.py:2714: def_class shift and go to state 3 - yacc.py:2714: class_list shift and go to state 6 - yacc.py:2561: - yacc.py:2562:state 4 - yacc.py:2563: - yacc.py:2565: (5) class_list -> error . class_list - yacc.py:2565: (3) class_list -> . def_class class_list - yacc.py:2565: (4) class_list -> . def_class - yacc.py:2565: (5) class_list -> . error class_list - yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi - yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi - yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi - yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error - yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi - yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: error shift and go to state 4 - yacc.py:2687: class shift and go to state 5 - yacc.py:2689: - yacc.py:2714: class_list shift and go to state 7 - yacc.py:2714: def_class shift and go to state 3 - yacc.py:2561: - yacc.py:2562:state 5 - yacc.py:2563: - yacc.py:2565: (6) def_class -> class . type ocur feature_list ccur semi - yacc.py:2565: (7) def_class -> class . type inherits type ocur feature_list ccur semi - yacc.py:2565: (8) def_class -> class . error ocur feature_list ccur semi - yacc.py:2565: (9) def_class -> class . type ocur feature_list ccur error - yacc.py:2565: (10) def_class -> class . error inherits type ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> class . error inherits error ocur feature_list ccur semi - yacc.py:2565: (12) def_class -> class . type inherits error ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> class . type inherits type ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: type shift and go to state 8 - yacc.py:2687: error shift and go to state 9 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 6 - yacc.py:2563: - yacc.py:2565: (3) class_list -> def_class class_list . - yacc.py:2566: - yacc.py:2687: $end reduce using rule 3 (class_list -> def_class class_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 7 - yacc.py:2563: - yacc.py:2565: (5) class_list -> error class_list . - yacc.py:2566: - yacc.py:2687: $end reduce using rule 5 (class_list -> error class_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 8 - yacc.py:2563: - yacc.py:2565: (6) def_class -> class type . ocur feature_list ccur semi - yacc.py:2565: (7) def_class -> class type . inherits type ocur feature_list ccur semi - yacc.py:2565: (9) def_class -> class type . ocur feature_list ccur error - yacc.py:2565: (12) def_class -> class type . inherits error ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> class type . inherits type ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 10 - yacc.py:2687: inherits shift and go to state 11 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 9 - yacc.py:2563: - yacc.py:2565: (8) def_class -> class error . ocur feature_list ccur semi - yacc.py:2565: (10) def_class -> class error . inherits type ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> class error . inherits error ocur feature_list ccur semi - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 12 - yacc.py:2687: inherits shift and go to state 13 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 10 - yacc.py:2563: - yacc.py:2565: (6) def_class -> class type ocur . feature_list ccur semi - yacc.py:2565: (9) def_class -> class type ocur . feature_list ccur error - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 14 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 11 - yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits . type ocur feature_list ccur semi - yacc.py:2565: (12) def_class -> class type inherits . error ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> class type inherits . type ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: type shift and go to state 20 - yacc.py:2687: error shift and go to state 21 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 12 - yacc.py:2563: - yacc.py:2565: (8) def_class -> class error ocur . feature_list ccur semi - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 22 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 13 - yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits . type ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> class error inherits . error ocur feature_list ccur semi - yacc.py:2566: - yacc.py:2687: type shift and go to state 24 - yacc.py:2687: error shift and go to state 23 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 14 - yacc.py:2563: - yacc.py:2565: (6) def_class -> class type ocur feature_list . ccur semi - yacc.py:2565: (9) def_class -> class type ocur feature_list . ccur error - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 25 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 15 - yacc.py:2563: - yacc.py:2565: (17) feature_list -> error . feature_list - yacc.py:2565: (20) def_attr -> error . colon type - yacc.py:2565: (22) def_attr -> error . colon type larrow expr - yacc.py:2565: (26) def_func -> error . opar formals cpar colon type ocur expr ccur - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: colon shift and go to state 27 - yacc.py:2687: opar shift and go to state 28 - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 26 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 16 - yacc.py:2563: - yacc.py:2565: (14) feature_list -> epsilon . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 14 (feature_list -> epsilon .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 17 - yacc.py:2563: - yacc.py:2565: (15) feature_list -> def_attr . semi feature_list - yacc.py:2566: - yacc.py:2687: semi shift and go to state 29 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 18 - yacc.py:2563: - yacc.py:2565: (16) feature_list -> def_func . semi feature_list - yacc.py:2566: - yacc.py:2687: semi shift and go to state 30 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 19 - yacc.py:2563: - yacc.py:2565: (18) def_attr -> id . colon type - yacc.py:2565: (19) def_attr -> id . colon type larrow expr - yacc.py:2565: (21) def_attr -> id . colon error - yacc.py:2565: (23) def_attr -> id . colon error larrow expr - yacc.py:2565: (24) def_attr -> id . colon type larrow error - yacc.py:2565: (25) def_func -> id . opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> id . opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> id . opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> id . opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: colon shift and go to state 31 - yacc.py:2687: opar shift and go to state 32 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 20 - yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits type . ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> class type inherits type . ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 33 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 21 - yacc.py:2563: - yacc.py:2565: (12) def_class -> class type inherits error . ocur feature_list ccur semi - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 34 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 22 - yacc.py:2563: - yacc.py:2565: (8) def_class -> class error ocur feature_list . ccur semi - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 35 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 23 - yacc.py:2563: - yacc.py:2565: (11) def_class -> class error inherits error . ocur feature_list ccur semi - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 36 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 24 - yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits type . ocur feature_list ccur semi - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 37 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 25 - yacc.py:2563: - yacc.py:2565: (6) def_class -> class type ocur feature_list ccur . semi - yacc.py:2565: (9) def_class -> class type ocur feature_list ccur . error - yacc.py:2566: - yacc.py:2687: semi shift and go to state 38 - yacc.py:2687: error shift and go to state 39 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 26 - yacc.py:2563: - yacc.py:2565: (17) feature_list -> error feature_list . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 17 (feature_list -> error feature_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 27 - yacc.py:2563: - yacc.py:2565: (20) def_attr -> error colon . type - yacc.py:2565: (22) def_attr -> error colon . type larrow expr - yacc.py:2566: - yacc.py:2687: type shift and go to state 40 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 28 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar . formals cpar colon type ocur expr ccur - yacc.py:2565: (30) formals -> . param_list - yacc.py:2565: (31) formals -> . param_list_empty - yacc.py:2565: (32) param_list -> . param - yacc.py:2565: (33) param_list -> . param comma param_list - yacc.py:2565: (34) param_list_empty -> . epsilon - yacc.py:2565: (35) param -> . id colon type - yacc.py:2565: (2) epsilon -> . - yacc.py:2566: - yacc.py:2687: id shift and go to state 46 - yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2689: - yacc.py:2714: formals shift and go to state 41 - yacc.py:2714: param_list shift and go to state 42 - yacc.py:2714: param_list_empty shift and go to state 43 - yacc.py:2714: param shift and go to state 44 - yacc.py:2714: epsilon shift and go to state 45 - yacc.py:2561: - yacc.py:2562:state 29 - yacc.py:2563: - yacc.py:2565: (15) feature_list -> def_attr semi . feature_list - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: feature_list shift and go to state 47 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 30 - yacc.py:2563: - yacc.py:2565: (16) feature_list -> def_func semi . feature_list - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2714: feature_list shift and go to state 48 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2561: - yacc.py:2562:state 31 - yacc.py:2563: - yacc.py:2565: (18) def_attr -> id colon . type - yacc.py:2565: (19) def_attr -> id colon . type larrow expr - yacc.py:2565: (21) def_attr -> id colon . error - yacc.py:2565: (23) def_attr -> id colon . error larrow expr - yacc.py:2565: (24) def_attr -> id colon . type larrow error - yacc.py:2566: - yacc.py:2687: type shift and go to state 49 - yacc.py:2687: error shift and go to state 50 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 32 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar . formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> id opar . error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> id opar . formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> id opar . formals cpar colon type ocur error ccur - yacc.py:2565: (30) formals -> . param_list - yacc.py:2565: (31) formals -> . param_list_empty - yacc.py:2565: (32) param_list -> . param - yacc.py:2565: (33) param_list -> . param comma param_list - yacc.py:2565: (34) param_list_empty -> . epsilon - yacc.py:2565: (35) param -> . id colon type - yacc.py:2565: (2) epsilon -> . - yacc.py:2566: - yacc.py:2687: error shift and go to state 52 - yacc.py:2687: id shift and go to state 46 - yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2689: - yacc.py:2714: formals shift and go to state 51 - yacc.py:2714: param_list shift and go to state 42 - yacc.py:2714: param_list_empty shift and go to state 43 - yacc.py:2714: param shift and go to state 44 - yacc.py:2714: epsilon shift and go to state 45 - yacc.py:2561: - yacc.py:2562:state 33 - yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits type ocur . feature_list ccur semi - yacc.py:2565: (13) def_class -> class type inherits type ocur . feature_list ccur error - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 53 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 34 - yacc.py:2563: - yacc.py:2565: (12) def_class -> class type inherits error ocur . feature_list ccur semi - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 54 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 35 - yacc.py:2563: - yacc.py:2565: (8) def_class -> class error ocur feature_list ccur . semi - yacc.py:2566: - yacc.py:2687: semi shift and go to state 55 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 36 - yacc.py:2563: - yacc.py:2565: (11) def_class -> class error inherits error ocur . feature_list ccur semi - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 56 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 37 - yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits type ocur . feature_list ccur semi - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 57 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 38 - yacc.py:2563: - yacc.py:2565: (6) def_class -> class type ocur feature_list ccur semi . - yacc.py:2566: - yacc.py:2687: error reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 39 - yacc.py:2563: - yacc.py:2565: (9) def_class -> class type ocur feature_list ccur error . - yacc.py:2566: - yacc.py:2687: error reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) - yacc.py:2687: class reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) - yacc.py:2687: $end reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 40 - yacc.py:2563: - yacc.py:2565: (20) def_attr -> error colon type . - yacc.py:2565: (22) def_attr -> error colon type . larrow expr - yacc.py:2566: - yacc.py:2687: semi reduce using rule 20 (def_attr -> error colon type .) - yacc.py:2687: larrow shift and go to state 58 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 41 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals . cpar colon type ocur expr ccur - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 59 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 42 - yacc.py:2563: - yacc.py:2565: (30) formals -> param_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 30 (formals -> param_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 43 - yacc.py:2563: - yacc.py:2565: (31) formals -> param_list_empty . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 31 (formals -> param_list_empty .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 44 - yacc.py:2563: - yacc.py:2565: (32) param_list -> param . - yacc.py:2565: (33) param_list -> param . comma param_list - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 32 (param_list -> param .) - yacc.py:2687: comma shift and go to state 60 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 45 - yacc.py:2563: - yacc.py:2565: (34) param_list_empty -> epsilon . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 34 (param_list_empty -> epsilon .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 46 - yacc.py:2563: - yacc.py:2565: (35) param -> id . colon type - yacc.py:2566: - yacc.py:2687: colon shift and go to state 61 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 47 - yacc.py:2563: - yacc.py:2565: (15) feature_list -> def_attr semi feature_list . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 15 (feature_list -> def_attr semi feature_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 48 - yacc.py:2563: - yacc.py:2565: (16) feature_list -> def_func semi feature_list . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 16 (feature_list -> def_func semi feature_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 49 - yacc.py:2563: - yacc.py:2565: (18) def_attr -> id colon type . - yacc.py:2565: (19) def_attr -> id colon type . larrow expr - yacc.py:2565: (24) def_attr -> id colon type . larrow error - yacc.py:2566: - yacc.py:2687: semi reduce using rule 18 (def_attr -> id colon type .) - yacc.py:2687: larrow shift and go to state 62 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 50 - yacc.py:2563: - yacc.py:2565: (21) def_attr -> id colon error . - yacc.py:2565: (23) def_attr -> id colon error . larrow expr - yacc.py:2566: - yacc.py:2687: semi reduce using rule 21 (def_attr -> id colon error .) - yacc.py:2687: larrow shift and go to state 63 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 51 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals . cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> id opar formals . cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> id opar formals . cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 64 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 52 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error . cpar colon type ocur expr ccur - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 65 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 53 - yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list . ccur semi - yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list . ccur error - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 66 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 54 - yacc.py:2563: - yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list . ccur semi - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 67 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 55 - yacc.py:2563: - yacc.py:2565: (8) def_class -> class error ocur feature_list ccur semi . - yacc.py:2566: - yacc.py:2687: error reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 56 - yacc.py:2563: - yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list . ccur semi - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 68 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 57 - yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list . ccur semi - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 69 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 58 - yacc.py:2563: - yacc.py:2565: (22) def_attr -> error colon type larrow . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 71 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 59 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar . colon type ocur expr ccur - yacc.py:2566: - yacc.py:2687: colon shift and go to state 94 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 60 - yacc.py:2563: - yacc.py:2565: (33) param_list -> param comma . param_list - yacc.py:2565: (32) param_list -> . param - yacc.py:2565: (33) param_list -> . param comma param_list - yacc.py:2565: (35) param -> . id colon type - yacc.py:2566: - yacc.py:2687: id shift and go to state 46 - yacc.py:2689: - yacc.py:2714: param shift and go to state 44 - yacc.py:2714: param_list shift and go to state 95 - yacc.py:2561: - yacc.py:2562:state 61 - yacc.py:2563: - yacc.py:2565: (35) param -> id colon . type - yacc.py:2566: - yacc.py:2687: type shift and go to state 96 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 62 - yacc.py:2563: - yacc.py:2565: (19) def_attr -> id colon type larrow . expr - yacc.py:2565: (24) def_attr -> id colon type larrow . error - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 98 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 97 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 63 - yacc.py:2563: - yacc.py:2565: (23) def_attr -> id colon error larrow . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 99 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 64 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar . colon type ocur expr ccur - yacc.py:2565: (28) def_func -> id opar formals cpar . colon error ocur expr ccur - yacc.py:2565: (29) def_func -> id opar formals cpar . colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: colon shift and go to state 100 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 65 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar . colon type ocur expr ccur - yacc.py:2566: - yacc.py:2687: colon shift and go to state 101 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 66 - yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list ccur . semi - yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list ccur . error - yacc.py:2566: - yacc.py:2687: semi shift and go to state 102 - yacc.py:2687: error shift and go to state 103 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 67 - yacc.py:2563: - yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list ccur . semi - yacc.py:2566: - yacc.py:2687: semi shift and go to state 104 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 68 - yacc.py:2563: - yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list ccur . semi - yacc.py:2566: - yacc.py:2687: semi shift and go to state 105 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 69 - yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list ccur . semi - yacc.py:2566: - yacc.py:2687: semi shift and go to state 106 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 70 - yacc.py:2563: - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 71 - yacc.py:2563: - yacc.py:2565: (22) def_attr -> error colon type larrow expr . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 22 (def_attr -> error colon type larrow expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 72 - yacc.py:2563: - yacc.py:2565: (45) expr -> id . larrow expr - yacc.py:2565: (75) atom -> id . - yacc.py:2565: (88) func_call -> id . opar args cpar - yacc.py:2565: (89) func_call -> id . opar error cpar - yacc.py:2566: - yacc.py:2687: larrow shift and go to state 112 - yacc.py:2687: arroba reduce using rule 75 (atom -> id .) - yacc.py:2687: dot reduce using rule 75 (atom -> id .) - yacc.py:2687: star reduce using rule 75 (atom -> id .) - yacc.py:2687: div reduce using rule 75 (atom -> id .) - yacc.py:2687: plus reduce using rule 75 (atom -> id .) - yacc.py:2687: minus reduce using rule 75 (atom -> id .) - yacc.py:2687: less reduce using rule 75 (atom -> id .) - yacc.py:2687: lesseq reduce using rule 75 (atom -> id .) - yacc.py:2687: equal reduce using rule 75 (atom -> id .) - yacc.py:2687: semi reduce using rule 75 (atom -> id .) - yacc.py:2687: cpar reduce using rule 75 (atom -> id .) - yacc.py:2687: of reduce using rule 75 (atom -> id .) - yacc.py:2687: then reduce using rule 75 (atom -> id .) - yacc.py:2687: loop reduce using rule 75 (atom -> id .) - yacc.py:2687: comma reduce using rule 75 (atom -> id .) - yacc.py:2687: in reduce using rule 75 (atom -> id .) - yacc.py:2687: else reduce using rule 75 (atom -> id .) - yacc.py:2687: pool reduce using rule 75 (atom -> id .) - yacc.py:2687: ccur reduce using rule 75 (atom -> id .) - yacc.py:2687: fi reduce using rule 75 (atom -> id .) - yacc.py:2687: opar shift and go to state 113 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 73 - yacc.py:2563: - yacc.py:2565: (46) expr -> comp . - yacc.py:2565: (47) comp -> comp . less op - yacc.py:2565: (48) comp -> comp . lesseq op - yacc.py:2565: (49) comp -> comp . equal op - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for less resolved as shift - yacc.py:2666: ! shift/reduce conflict for lesseq resolved as shift - yacc.py:2666: ! shift/reduce conflict for equal resolved as shift - yacc.py:2687: semi reduce using rule 46 (expr -> comp .) - yacc.py:2687: cpar reduce using rule 46 (expr -> comp .) - yacc.py:2687: arroba reduce using rule 46 (expr -> comp .) - yacc.py:2687: dot reduce using rule 46 (expr -> comp .) - yacc.py:2687: star reduce using rule 46 (expr -> comp .) - yacc.py:2687: div reduce using rule 46 (expr -> comp .) - yacc.py:2687: plus reduce using rule 46 (expr -> comp .) - yacc.py:2687: minus reduce using rule 46 (expr -> comp .) - yacc.py:2687: of reduce using rule 46 (expr -> comp .) - yacc.py:2687: then reduce using rule 46 (expr -> comp .) - yacc.py:2687: loop reduce using rule 46 (expr -> comp .) - yacc.py:2687: comma reduce using rule 46 (expr -> comp .) - yacc.py:2687: in reduce using rule 46 (expr -> comp .) - yacc.py:2687: else reduce using rule 46 (expr -> comp .) - yacc.py:2687: pool reduce using rule 46 (expr -> comp .) - yacc.py:2687: ccur reduce using rule 46 (expr -> comp .) - yacc.py:2687: fi reduce using rule 46 (expr -> comp .) - yacc.py:2687: less shift and go to state 114 - yacc.py:2687: lesseq shift and go to state 115 - yacc.py:2687: equal shift and go to state 116 - yacc.py:2689: - yacc.py:2696: ! less [ reduce using rule 46 (expr -> comp .) ] - yacc.py:2696: ! lesseq [ reduce using rule 46 (expr -> comp .) ] - yacc.py:2696: ! equal [ reduce using rule 46 (expr -> comp .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 74 - yacc.py:2563: - yacc.py:2565: (50) comp -> op . - yacc.py:2565: (51) op -> op . plus term - yacc.py:2565: (52) op -> op . minus term - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for plus resolved as shift - yacc.py:2666: ! shift/reduce conflict for minus resolved as shift - yacc.py:2687: less reduce using rule 50 (comp -> op .) - yacc.py:2687: lesseq reduce using rule 50 (comp -> op .) - yacc.py:2687: equal reduce using rule 50 (comp -> op .) - yacc.py:2687: semi reduce using rule 50 (comp -> op .) - yacc.py:2687: cpar reduce using rule 50 (comp -> op .) - yacc.py:2687: arroba reduce using rule 50 (comp -> op .) - yacc.py:2687: dot reduce using rule 50 (comp -> op .) - yacc.py:2687: star reduce using rule 50 (comp -> op .) - yacc.py:2687: div reduce using rule 50 (comp -> op .) - yacc.py:2687: of reduce using rule 50 (comp -> op .) - yacc.py:2687: then reduce using rule 50 (comp -> op .) - yacc.py:2687: loop reduce using rule 50 (comp -> op .) - yacc.py:2687: comma reduce using rule 50 (comp -> op .) - yacc.py:2687: in reduce using rule 50 (comp -> op .) - yacc.py:2687: else reduce using rule 50 (comp -> op .) - yacc.py:2687: pool reduce using rule 50 (comp -> op .) - yacc.py:2687: ccur reduce using rule 50 (comp -> op .) - yacc.py:2687: fi reduce using rule 50 (comp -> op .) - yacc.py:2687: plus shift and go to state 117 - yacc.py:2687: minus shift and go to state 118 - yacc.py:2689: - yacc.py:2696: ! plus [ reduce using rule 50 (comp -> op .) ] - yacc.py:2696: ! minus [ reduce using rule 50 (comp -> op .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 75 - yacc.py:2563: - yacc.py:2565: (53) op -> term . - yacc.py:2565: (54) term -> term . star base_call - yacc.py:2565: (55) term -> term . div base_call - yacc.py:2565: (57) term -> term . star error - yacc.py:2565: (58) term -> term . div error - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for star resolved as shift - yacc.py:2666: ! shift/reduce conflict for div resolved as shift - yacc.py:2687: plus reduce using rule 53 (op -> term .) - yacc.py:2687: minus reduce using rule 53 (op -> term .) - yacc.py:2687: less reduce using rule 53 (op -> term .) - yacc.py:2687: lesseq reduce using rule 53 (op -> term .) - yacc.py:2687: equal reduce using rule 53 (op -> term .) - yacc.py:2687: semi reduce using rule 53 (op -> term .) - yacc.py:2687: cpar reduce using rule 53 (op -> term .) - yacc.py:2687: arroba reduce using rule 53 (op -> term .) - yacc.py:2687: dot reduce using rule 53 (op -> term .) - yacc.py:2687: of reduce using rule 53 (op -> term .) - yacc.py:2687: then reduce using rule 53 (op -> term .) - yacc.py:2687: loop reduce using rule 53 (op -> term .) - yacc.py:2687: comma reduce using rule 53 (op -> term .) - yacc.py:2687: in reduce using rule 53 (op -> term .) - yacc.py:2687: else reduce using rule 53 (op -> term .) - yacc.py:2687: pool reduce using rule 53 (op -> term .) - yacc.py:2687: ccur reduce using rule 53 (op -> term .) - yacc.py:2687: fi reduce using rule 53 (op -> term .) - yacc.py:2687: star shift and go to state 119 - yacc.py:2687: div shift and go to state 120 - yacc.py:2689: - yacc.py:2696: ! star [ reduce using rule 53 (op -> term .) ] - yacc.py:2696: ! div [ reduce using rule 53 (op -> term .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 76 - yacc.py:2563: - yacc.py:2565: (56) term -> base_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 56 (term -> base_call .) - yacc.py:2687: div reduce using rule 56 (term -> base_call .) - yacc.py:2687: plus reduce using rule 56 (term -> base_call .) - yacc.py:2687: minus reduce using rule 56 (term -> base_call .) - yacc.py:2687: less reduce using rule 56 (term -> base_call .) - yacc.py:2687: lesseq reduce using rule 56 (term -> base_call .) - yacc.py:2687: equal reduce using rule 56 (term -> base_call .) - yacc.py:2687: semi reduce using rule 56 (term -> base_call .) - yacc.py:2687: cpar reduce using rule 56 (term -> base_call .) - yacc.py:2687: arroba reduce using rule 56 (term -> base_call .) - yacc.py:2687: dot reduce using rule 56 (term -> base_call .) - yacc.py:2687: of reduce using rule 56 (term -> base_call .) - yacc.py:2687: then reduce using rule 56 (term -> base_call .) - yacc.py:2687: loop reduce using rule 56 (term -> base_call .) - yacc.py:2687: comma reduce using rule 56 (term -> base_call .) - yacc.py:2687: in reduce using rule 56 (term -> base_call .) - yacc.py:2687: else reduce using rule 56 (term -> base_call .) - yacc.py:2687: pool reduce using rule 56 (term -> base_call .) - yacc.py:2687: ccur reduce using rule 56 (term -> base_call .) - yacc.py:2687: fi reduce using rule 56 (term -> base_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 77 - yacc.py:2563: - yacc.py:2565: (59) base_call -> factor . arroba type dot func_call - yacc.py:2565: (60) base_call -> factor . - yacc.py:2565: (62) base_call -> factor . arroba error dot func_call - yacc.py:2565: (65) factor -> factor . dot func_call - yacc.py:2566: - yacc.py:2609: ! shift/reduce conflict for arroba resolved as shift - yacc.py:2666: ! shift/reduce conflict for dot resolved as shift - yacc.py:2687: arroba shift and go to state 121 - yacc.py:2687: star reduce using rule 60 (base_call -> factor .) - yacc.py:2687: div reduce using rule 60 (base_call -> factor .) - yacc.py:2687: plus reduce using rule 60 (base_call -> factor .) - yacc.py:2687: minus reduce using rule 60 (base_call -> factor .) - yacc.py:2687: less reduce using rule 60 (base_call -> factor .) - yacc.py:2687: lesseq reduce using rule 60 (base_call -> factor .) - yacc.py:2687: equal reduce using rule 60 (base_call -> factor .) - yacc.py:2687: semi reduce using rule 60 (base_call -> factor .) - yacc.py:2687: cpar reduce using rule 60 (base_call -> factor .) - yacc.py:2687: of reduce using rule 60 (base_call -> factor .) - yacc.py:2687: then reduce using rule 60 (base_call -> factor .) - yacc.py:2687: loop reduce using rule 60 (base_call -> factor .) - yacc.py:2687: comma reduce using rule 60 (base_call -> factor .) - yacc.py:2687: in reduce using rule 60 (base_call -> factor .) - yacc.py:2687: else reduce using rule 60 (base_call -> factor .) - yacc.py:2687: pool reduce using rule 60 (base_call -> factor .) - yacc.py:2687: ccur reduce using rule 60 (base_call -> factor .) - yacc.py:2687: fi reduce using rule 60 (base_call -> factor .) - yacc.py:2687: dot shift and go to state 122 - yacc.py:2689: - yacc.py:2696: ! arroba [ reduce using rule 60 (base_call -> factor .) ] - yacc.py:2696: ! dot [ reduce using rule 60 (base_call -> factor .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 78 - yacc.py:2563: - yacc.py:2565: (67) factor -> func_call . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 67 (factor -> func_call .) - yacc.py:2687: dot reduce using rule 67 (factor -> func_call .) - yacc.py:2687: star reduce using rule 67 (factor -> func_call .) - yacc.py:2687: div reduce using rule 67 (factor -> func_call .) - yacc.py:2687: plus reduce using rule 67 (factor -> func_call .) - yacc.py:2687: minus reduce using rule 67 (factor -> func_call .) - yacc.py:2687: less reduce using rule 67 (factor -> func_call .) - yacc.py:2687: lesseq reduce using rule 67 (factor -> func_call .) - yacc.py:2687: equal reduce using rule 67 (factor -> func_call .) - yacc.py:2687: semi reduce using rule 67 (factor -> func_call .) - yacc.py:2687: cpar reduce using rule 67 (factor -> func_call .) - yacc.py:2687: of reduce using rule 67 (factor -> func_call .) - yacc.py:2687: then reduce using rule 67 (factor -> func_call .) - yacc.py:2687: loop reduce using rule 67 (factor -> func_call .) - yacc.py:2687: comma reduce using rule 67 (factor -> func_call .) - yacc.py:2687: in reduce using rule 67 (factor -> func_call .) - yacc.py:2687: else reduce using rule 67 (factor -> func_call .) - yacc.py:2687: pool reduce using rule 67 (factor -> func_call .) - yacc.py:2687: ccur reduce using rule 67 (factor -> func_call .) - yacc.py:2687: fi reduce using rule 67 (factor -> func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 79 - yacc.py:2563: - yacc.py:2565: (63) factor -> atom . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 63 (factor -> atom .) - yacc.py:2687: dot reduce using rule 63 (factor -> atom .) - yacc.py:2687: star reduce using rule 63 (factor -> atom .) - yacc.py:2687: div reduce using rule 63 (factor -> atom .) - yacc.py:2687: plus reduce using rule 63 (factor -> atom .) - yacc.py:2687: minus reduce using rule 63 (factor -> atom .) - yacc.py:2687: less reduce using rule 63 (factor -> atom .) - yacc.py:2687: lesseq reduce using rule 63 (factor -> atom .) - yacc.py:2687: equal reduce using rule 63 (factor -> atom .) - yacc.py:2687: semi reduce using rule 63 (factor -> atom .) - yacc.py:2687: cpar reduce using rule 63 (factor -> atom .) - yacc.py:2687: of reduce using rule 63 (factor -> atom .) - yacc.py:2687: then reduce using rule 63 (factor -> atom .) - yacc.py:2687: loop reduce using rule 63 (factor -> atom .) - yacc.py:2687: comma reduce using rule 63 (factor -> atom .) - yacc.py:2687: in reduce using rule 63 (factor -> atom .) - yacc.py:2687: else reduce using rule 63 (factor -> atom .) - yacc.py:2687: pool reduce using rule 63 (factor -> atom .) - yacc.py:2687: ccur reduce using rule 63 (factor -> atom .) - yacc.py:2687: fi reduce using rule 63 (factor -> atom .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 80 - yacc.py:2563: - yacc.py:2565: (64) factor -> opar . expr cpar - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 123 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 81 - yacc.py:2563: - yacc.py:2565: (66) factor -> not . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 124 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 82 - yacc.py:2563: - yacc.py:2565: (68) factor -> isvoid . base_call - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: base_call shift and go to state 125 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 83 - yacc.py:2563: - yacc.py:2565: (69) factor -> nox . base_call - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: base_call shift and go to state 127 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 84 - yacc.py:2563: - yacc.py:2565: (70) factor -> let . let_list in expr - yacc.py:2565: (36) let_list -> . let_assign - yacc.py:2565: (37) let_list -> . let_assign comma let_list - yacc.py:2565: (38) let_assign -> . param larrow expr - yacc.py:2565: (39) let_assign -> . param - yacc.py:2565: (35) param -> . id colon type - yacc.py:2566: - yacc.py:2687: id shift and go to state 46 - yacc.py:2689: - yacc.py:2714: let_list shift and go to state 128 - yacc.py:2714: let_assign shift and go to state 129 - yacc.py:2714: param shift and go to state 130 - yacc.py:2561: - yacc.py:2562:state 85 - yacc.py:2563: - yacc.py:2565: (71) factor -> case . expr of cases_list esac - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 131 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 86 - yacc.py:2563: - yacc.py:2565: (72) factor -> if . expr then expr else expr fi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 132 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 87 - yacc.py:2563: - yacc.py:2565: (73) factor -> while . expr loop expr pool - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 133 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 88 - yacc.py:2563: - yacc.py:2565: (74) atom -> num . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 74 (atom -> num .) - yacc.py:2687: dot reduce using rule 74 (atom -> num .) - yacc.py:2687: star reduce using rule 74 (atom -> num .) - yacc.py:2687: div reduce using rule 74 (atom -> num .) - yacc.py:2687: plus reduce using rule 74 (atom -> num .) - yacc.py:2687: minus reduce using rule 74 (atom -> num .) - yacc.py:2687: less reduce using rule 74 (atom -> num .) - yacc.py:2687: lesseq reduce using rule 74 (atom -> num .) - yacc.py:2687: equal reduce using rule 74 (atom -> num .) - yacc.py:2687: semi reduce using rule 74 (atom -> num .) - yacc.py:2687: cpar reduce using rule 74 (atom -> num .) - yacc.py:2687: of reduce using rule 74 (atom -> num .) - yacc.py:2687: then reduce using rule 74 (atom -> num .) - yacc.py:2687: loop reduce using rule 74 (atom -> num .) - yacc.py:2687: comma reduce using rule 74 (atom -> num .) - yacc.py:2687: in reduce using rule 74 (atom -> num .) - yacc.py:2687: else reduce using rule 74 (atom -> num .) - yacc.py:2687: pool reduce using rule 74 (atom -> num .) - yacc.py:2687: ccur reduce using rule 74 (atom -> num .) - yacc.py:2687: fi reduce using rule 74 (atom -> num .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 89 - yacc.py:2563: - yacc.py:2565: (76) atom -> new . type - yacc.py:2566: - yacc.py:2687: type shift and go to state 134 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 90 - yacc.py:2563: - yacc.py:2565: (77) atom -> ocur . block ccur - yacc.py:2565: (79) atom -> ocur . error ccur - yacc.py:2565: (80) atom -> ocur . block error - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 136 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: block shift and go to state 135 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 91 - yacc.py:2563: - yacc.py:2565: (81) atom -> true . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 81 (atom -> true .) - yacc.py:2687: dot reduce using rule 81 (atom -> true .) - yacc.py:2687: star reduce using rule 81 (atom -> true .) - yacc.py:2687: div reduce using rule 81 (atom -> true .) - yacc.py:2687: plus reduce using rule 81 (atom -> true .) - yacc.py:2687: minus reduce using rule 81 (atom -> true .) - yacc.py:2687: less reduce using rule 81 (atom -> true .) - yacc.py:2687: lesseq reduce using rule 81 (atom -> true .) - yacc.py:2687: equal reduce using rule 81 (atom -> true .) - yacc.py:2687: semi reduce using rule 81 (atom -> true .) - yacc.py:2687: cpar reduce using rule 81 (atom -> true .) - yacc.py:2687: of reduce using rule 81 (atom -> true .) - yacc.py:2687: then reduce using rule 81 (atom -> true .) - yacc.py:2687: loop reduce using rule 81 (atom -> true .) - yacc.py:2687: comma reduce using rule 81 (atom -> true .) - yacc.py:2687: in reduce using rule 81 (atom -> true .) - yacc.py:2687: else reduce using rule 81 (atom -> true .) - yacc.py:2687: pool reduce using rule 81 (atom -> true .) - yacc.py:2687: ccur reduce using rule 81 (atom -> true .) - yacc.py:2687: fi reduce using rule 81 (atom -> true .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 92 - yacc.py:2563: - yacc.py:2565: (82) atom -> false . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 82 (atom -> false .) - yacc.py:2687: dot reduce using rule 82 (atom -> false .) - yacc.py:2687: star reduce using rule 82 (atom -> false .) - yacc.py:2687: div reduce using rule 82 (atom -> false .) - yacc.py:2687: plus reduce using rule 82 (atom -> false .) - yacc.py:2687: minus reduce using rule 82 (atom -> false .) - yacc.py:2687: less reduce using rule 82 (atom -> false .) - yacc.py:2687: lesseq reduce using rule 82 (atom -> false .) - yacc.py:2687: equal reduce using rule 82 (atom -> false .) - yacc.py:2687: semi reduce using rule 82 (atom -> false .) - yacc.py:2687: cpar reduce using rule 82 (atom -> false .) - yacc.py:2687: of reduce using rule 82 (atom -> false .) - yacc.py:2687: then reduce using rule 82 (atom -> false .) - yacc.py:2687: loop reduce using rule 82 (atom -> false .) - yacc.py:2687: comma reduce using rule 82 (atom -> false .) - yacc.py:2687: in reduce using rule 82 (atom -> false .) - yacc.py:2687: else reduce using rule 82 (atom -> false .) - yacc.py:2687: pool reduce using rule 82 (atom -> false .) - yacc.py:2687: ccur reduce using rule 82 (atom -> false .) - yacc.py:2687: fi reduce using rule 82 (atom -> false .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 93 - yacc.py:2563: - yacc.py:2565: (83) atom -> string . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 83 (atom -> string .) - yacc.py:2687: dot reduce using rule 83 (atom -> string .) - yacc.py:2687: star reduce using rule 83 (atom -> string .) - yacc.py:2687: div reduce using rule 83 (atom -> string .) - yacc.py:2687: plus reduce using rule 83 (atom -> string .) - yacc.py:2687: minus reduce using rule 83 (atom -> string .) - yacc.py:2687: less reduce using rule 83 (atom -> string .) - yacc.py:2687: lesseq reduce using rule 83 (atom -> string .) - yacc.py:2687: equal reduce using rule 83 (atom -> string .) - yacc.py:2687: semi reduce using rule 83 (atom -> string .) - yacc.py:2687: cpar reduce using rule 83 (atom -> string .) - yacc.py:2687: of reduce using rule 83 (atom -> string .) - yacc.py:2687: then reduce using rule 83 (atom -> string .) - yacc.py:2687: loop reduce using rule 83 (atom -> string .) - yacc.py:2687: comma reduce using rule 83 (atom -> string .) - yacc.py:2687: in reduce using rule 83 (atom -> string .) - yacc.py:2687: else reduce using rule 83 (atom -> string .) - yacc.py:2687: pool reduce using rule 83 (atom -> string .) - yacc.py:2687: ccur reduce using rule 83 (atom -> string .) - yacc.py:2687: fi reduce using rule 83 (atom -> string .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 94 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon . type ocur expr ccur - yacc.py:2566: - yacc.py:2687: type shift and go to state 137 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 95 - yacc.py:2563: - yacc.py:2565: (33) param_list -> param comma param_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 33 (param_list -> param comma param_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 96 - yacc.py:2563: - yacc.py:2565: (35) param -> id colon type . - yacc.py:2566: - yacc.py:2687: comma reduce using rule 35 (param -> id colon type .) - yacc.py:2687: cpar reduce using rule 35 (param -> id colon type .) - yacc.py:2687: larrow reduce using rule 35 (param -> id colon type .) - yacc.py:2687: in reduce using rule 35 (param -> id colon type .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 97 - yacc.py:2563: - yacc.py:2565: (19) def_attr -> id colon type larrow expr . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 19 (def_attr -> id colon type larrow expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 98 - yacc.py:2563: - yacc.py:2565: (24) def_attr -> id colon type larrow error . - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: semi reduce using rule 24 (def_attr -> id colon type larrow error .) - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 99 - yacc.py:2563: - yacc.py:2565: (23) def_attr -> id colon error larrow expr . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 23 (def_attr -> id colon error larrow expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 100 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon . type ocur expr ccur - yacc.py:2565: (28) def_func -> id opar formals cpar colon . error ocur expr ccur - yacc.py:2565: (29) def_func -> id opar formals cpar colon . type ocur error ccur - yacc.py:2566: - yacc.py:2687: type shift and go to state 138 - yacc.py:2687: error shift and go to state 139 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 101 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon . type ocur expr ccur - yacc.py:2566: - yacc.py:2687: type shift and go to state 140 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 102 - yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list ccur semi . - yacc.py:2566: - yacc.py:2687: error reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 103 - yacc.py:2563: - yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list ccur error . - yacc.py:2566: - yacc.py:2687: error reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) - yacc.py:2687: class reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) - yacc.py:2687: $end reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 104 - yacc.py:2563: - yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list ccur semi . - yacc.py:2566: - yacc.py:2687: error reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 105 - yacc.py:2563: - yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list ccur semi . - yacc.py:2566: - yacc.py:2687: error reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 106 - yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list ccur semi . - yacc.py:2566: - yacc.py:2687: error reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 107 - yacc.py:2563: - yacc.py:2565: (86) block -> error . block - yacc.py:2565: (87) block -> error . semi - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: semi shift and go to state 142 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: block shift and go to state 141 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 108 - yacc.py:2563: - yacc.py:2565: (61) base_call -> error arroba . type dot func_call - yacc.py:2566: - yacc.py:2687: type shift and go to state 143 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 109 - yacc.py:2563: - yacc.py:2565: (78) atom -> error block . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 144 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 110 - yacc.py:2563: - yacc.py:2565: (90) func_call -> error opar . args cpar - yacc.py:2565: (64) factor -> opar . expr cpar - yacc.py:2565: (91) args -> . arg_list - yacc.py:2565: (92) args -> . arg_list_empty - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (96) arg_list_empty -> . epsilon - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 145 - yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: args shift and go to state 146 - yacc.py:2714: expr shift and go to state 147 - yacc.py:2714: arg_list shift and go to state 148 - yacc.py:2714: arg_list_empty shift and go to state 149 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: epsilon shift and go to state 150 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 111 - yacc.py:2563: - yacc.py:2565: (84) block -> expr . semi - yacc.py:2565: (85) block -> expr . semi block - yacc.py:2566: - yacc.py:2687: semi shift and go to state 151 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 112 - yacc.py:2563: - yacc.py:2565: (45) expr -> id larrow . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 152 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 113 - yacc.py:2563: - yacc.py:2565: (88) func_call -> id opar . args cpar - yacc.py:2565: (89) func_call -> id opar . error cpar - yacc.py:2565: (91) args -> . arg_list - yacc.py:2565: (92) args -> . arg_list_empty - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (96) arg_list_empty -> . epsilon - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 154 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: args shift and go to state 153 - yacc.py:2714: arg_list shift and go to state 148 - yacc.py:2714: arg_list_empty shift and go to state 149 - yacc.py:2714: expr shift and go to state 155 - yacc.py:2714: epsilon shift and go to state 150 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 114 - yacc.py:2563: - yacc.py:2565: (47) comp -> comp less . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: op shift and go to state 156 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 115 - yacc.py:2563: - yacc.py:2565: (48) comp -> comp lesseq . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: op shift and go to state 157 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 116 - yacc.py:2563: - yacc.py:2565: (49) comp -> comp equal . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: op shift and go to state 158 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 117 - yacc.py:2563: - yacc.py:2565: (51) op -> op plus . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: term shift and go to state 159 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 118 - yacc.py:2563: - yacc.py:2565: (52) op -> op minus . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: term shift and go to state 160 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 119 - yacc.py:2563: - yacc.py:2565: (54) term -> term star . base_call - yacc.py:2565: (57) term -> term star . error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 162 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: base_call shift and go to state 161 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 120 - yacc.py:2563: - yacc.py:2565: (55) term -> term div . base_call - yacc.py:2565: (58) term -> term div . error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 164 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: base_call shift and go to state 163 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 121 - yacc.py:2563: - yacc.py:2565: (59) base_call -> factor arroba . type dot func_call - yacc.py:2565: (62) base_call -> factor arroba . error dot func_call - yacc.py:2566: - yacc.py:2687: type shift and go to state 165 - yacc.py:2687: error shift and go to state 166 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 122 - yacc.py:2563: - yacc.py:2565: (65) factor -> factor dot . func_call - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 168 - yacc.py:2687: error shift and go to state 169 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 167 - yacc.py:2561: - yacc.py:2562:state 123 - yacc.py:2563: - yacc.py:2565: (64) factor -> opar expr . cpar - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 170 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 124 - yacc.py:2563: - yacc.py:2565: (66) factor -> not expr . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 66 (factor -> not expr .) - yacc.py:2687: dot reduce using rule 66 (factor -> not expr .) - yacc.py:2687: star reduce using rule 66 (factor -> not expr .) - yacc.py:2687: div reduce using rule 66 (factor -> not expr .) - yacc.py:2687: plus reduce using rule 66 (factor -> not expr .) - yacc.py:2687: minus reduce using rule 66 (factor -> not expr .) - yacc.py:2687: less reduce using rule 66 (factor -> not expr .) - yacc.py:2687: lesseq reduce using rule 66 (factor -> not expr .) - yacc.py:2687: equal reduce using rule 66 (factor -> not expr .) - yacc.py:2687: semi reduce using rule 66 (factor -> not expr .) - yacc.py:2687: cpar reduce using rule 66 (factor -> not expr .) - yacc.py:2687: of reduce using rule 66 (factor -> not expr .) - yacc.py:2687: then reduce using rule 66 (factor -> not expr .) - yacc.py:2687: loop reduce using rule 66 (factor -> not expr .) - yacc.py:2687: comma reduce using rule 66 (factor -> not expr .) - yacc.py:2687: in reduce using rule 66 (factor -> not expr .) - yacc.py:2687: else reduce using rule 66 (factor -> not expr .) - yacc.py:2687: pool reduce using rule 66 (factor -> not expr .) - yacc.py:2687: ccur reduce using rule 66 (factor -> not expr .) - yacc.py:2687: fi reduce using rule 66 (factor -> not expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 125 - yacc.py:2563: - yacc.py:2565: (68) factor -> isvoid base_call . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: dot reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: star reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: div reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: plus reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: minus reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: less reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: lesseq reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: equal reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: semi reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: cpar reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: of reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: then reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: loop reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: comma reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: in reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: else reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: pool reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: ccur reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: fi reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 126 - yacc.py:2563: - yacc.py:2565: (75) atom -> id . - yacc.py:2565: (88) func_call -> id . opar args cpar - yacc.py:2565: (89) func_call -> id . opar error cpar - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 75 (atom -> id .) - yacc.py:2687: dot reduce using rule 75 (atom -> id .) - yacc.py:2687: star reduce using rule 75 (atom -> id .) - yacc.py:2687: div reduce using rule 75 (atom -> id .) - yacc.py:2687: plus reduce using rule 75 (atom -> id .) - yacc.py:2687: minus reduce using rule 75 (atom -> id .) - yacc.py:2687: less reduce using rule 75 (atom -> id .) - yacc.py:2687: lesseq reduce using rule 75 (atom -> id .) - yacc.py:2687: equal reduce using rule 75 (atom -> id .) - yacc.py:2687: semi reduce using rule 75 (atom -> id .) - yacc.py:2687: cpar reduce using rule 75 (atom -> id .) - yacc.py:2687: of reduce using rule 75 (atom -> id .) - yacc.py:2687: then reduce using rule 75 (atom -> id .) - yacc.py:2687: loop reduce using rule 75 (atom -> id .) - yacc.py:2687: comma reduce using rule 75 (atom -> id .) - yacc.py:2687: in reduce using rule 75 (atom -> id .) - yacc.py:2687: else reduce using rule 75 (atom -> id .) - yacc.py:2687: pool reduce using rule 75 (atom -> id .) - yacc.py:2687: ccur reduce using rule 75 (atom -> id .) - yacc.py:2687: fi reduce using rule 75 (atom -> id .) - yacc.py:2687: opar shift and go to state 113 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 127 - yacc.py:2563: - yacc.py:2565: (69) factor -> nox base_call . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: dot reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: star reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: div reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: plus reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: minus reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: less reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: lesseq reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: equal reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: semi reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: cpar reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: of reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: then reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: loop reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: comma reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: in reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: else reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: pool reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: ccur reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: fi reduce using rule 69 (factor -> nox base_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 128 - yacc.py:2563: - yacc.py:2565: (70) factor -> let let_list . in expr - yacc.py:2566: - yacc.py:2687: in shift and go to state 171 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 129 - yacc.py:2563: - yacc.py:2565: (36) let_list -> let_assign . - yacc.py:2565: (37) let_list -> let_assign . comma let_list - yacc.py:2566: - yacc.py:2687: in reduce using rule 36 (let_list -> let_assign .) - yacc.py:2687: comma shift and go to state 172 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 130 - yacc.py:2563: - yacc.py:2565: (38) let_assign -> param . larrow expr - yacc.py:2565: (39) let_assign -> param . - yacc.py:2566: - yacc.py:2687: larrow shift and go to state 173 - yacc.py:2687: comma reduce using rule 39 (let_assign -> param .) - yacc.py:2687: in reduce using rule 39 (let_assign -> param .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 131 - yacc.py:2563: - yacc.py:2565: (71) factor -> case expr . of cases_list esac - yacc.py:2566: - yacc.py:2687: of shift and go to state 174 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 132 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr . then expr else expr fi - yacc.py:2566: - yacc.py:2687: then shift and go to state 175 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 133 - yacc.py:2563: - yacc.py:2565: (73) factor -> while expr . loop expr pool - yacc.py:2566: - yacc.py:2687: loop shift and go to state 176 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 134 - yacc.py:2563: - yacc.py:2565: (76) atom -> new type . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 76 (atom -> new type .) - yacc.py:2687: dot reduce using rule 76 (atom -> new type .) - yacc.py:2687: star reduce using rule 76 (atom -> new type .) - yacc.py:2687: div reduce using rule 76 (atom -> new type .) - yacc.py:2687: plus reduce using rule 76 (atom -> new type .) - yacc.py:2687: minus reduce using rule 76 (atom -> new type .) - yacc.py:2687: less reduce using rule 76 (atom -> new type .) - yacc.py:2687: lesseq reduce using rule 76 (atom -> new type .) - yacc.py:2687: equal reduce using rule 76 (atom -> new type .) - yacc.py:2687: semi reduce using rule 76 (atom -> new type .) - yacc.py:2687: cpar reduce using rule 76 (atom -> new type .) - yacc.py:2687: of reduce using rule 76 (atom -> new type .) - yacc.py:2687: then reduce using rule 76 (atom -> new type .) - yacc.py:2687: loop reduce using rule 76 (atom -> new type .) - yacc.py:2687: comma reduce using rule 76 (atom -> new type .) - yacc.py:2687: in reduce using rule 76 (atom -> new type .) - yacc.py:2687: else reduce using rule 76 (atom -> new type .) - yacc.py:2687: pool reduce using rule 76 (atom -> new type .) - yacc.py:2687: ccur reduce using rule 76 (atom -> new type .) - yacc.py:2687: fi reduce using rule 76 (atom -> new type .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 135 - yacc.py:2563: - yacc.py:2565: (77) atom -> ocur block . ccur - yacc.py:2565: (80) atom -> ocur block . error - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 177 - yacc.py:2687: error shift and go to state 178 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 136 - yacc.py:2563: - yacc.py:2565: (79) atom -> ocur error . ccur - yacc.py:2565: (86) block -> error . block - yacc.py:2565: (87) block -> error . semi - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 179 - yacc.py:2687: semi shift and go to state 142 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: block shift and go to state 141 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 137 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon type . ocur expr ccur - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 180 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 138 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon type . ocur expr ccur - yacc.py:2565: (29) def_func -> id opar formals cpar colon type . ocur error ccur - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 181 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 139 - yacc.py:2563: - yacc.py:2565: (28) def_func -> id opar formals cpar colon error . ocur expr ccur - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 182 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 140 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon type . ocur expr ccur - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 183 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 141 - yacc.py:2563: - yacc.py:2565: (86) block -> error block . - yacc.py:2565: (78) atom -> error block . ccur - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for ccur resolved as shift - yacc.py:2687: error reduce using rule 86 (block -> error block .) - yacc.py:2687: ccur shift and go to state 144 - yacc.py:2689: - yacc.py:2696: ! ccur [ reduce using rule 86 (block -> error block .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 142 - yacc.py:2563: - yacc.py:2565: (87) block -> error semi . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 87 (block -> error semi .) - yacc.py:2687: error reduce using rule 87 (block -> error semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 143 - yacc.py:2563: - yacc.py:2565: (61) base_call -> error arroba type . dot func_call - yacc.py:2566: - yacc.py:2687: dot shift and go to state 184 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 144 - yacc.py:2563: - yacc.py:2565: (78) atom -> error block ccur . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: dot reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: star reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: div reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: plus reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: minus reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: less reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: lesseq reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: equal reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: semi reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: cpar reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: of reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: then reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: loop reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: comma reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: in reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: else reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: pool reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: ccur reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: fi reduce using rule 78 (atom -> error block ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 145 - yacc.py:2563: - yacc.py:2565: (95) arg_list -> error . arg_list - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 185 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: arg_list shift and go to state 186 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 187 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 146 - yacc.py:2563: - yacc.py:2565: (90) func_call -> error opar args . cpar - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 188 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 147 - yacc.py:2563: - yacc.py:2565: (64) factor -> opar expr . cpar - yacc.py:2565: (93) arg_list -> expr . - yacc.py:2565: (94) arg_list -> expr . comma arg_list - yacc.py:2566: - yacc.py:2609: ! shift/reduce conflict for cpar resolved as shift - yacc.py:2687: cpar shift and go to state 170 - yacc.py:2687: comma shift and go to state 189 - yacc.py:2689: - yacc.py:2696: ! cpar [ reduce using rule 93 (arg_list -> expr .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 148 - yacc.py:2563: - yacc.py:2565: (91) args -> arg_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 91 (args -> arg_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 149 - yacc.py:2563: - yacc.py:2565: (92) args -> arg_list_empty . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 92 (args -> arg_list_empty .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 150 - yacc.py:2563: - yacc.py:2565: (96) arg_list_empty -> epsilon . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 96 (arg_list_empty -> epsilon .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 151 - yacc.py:2563: - yacc.py:2565: (84) block -> expr semi . - yacc.py:2565: (85) block -> expr semi . block - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for error resolved as shift - yacc.py:2687: ccur reduce using rule 84 (block -> expr semi .) - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2696: ! error [ reduce using rule 84 (block -> expr semi .) ] - yacc.py:2700: - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: block shift and go to state 190 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 152 - yacc.py:2563: - yacc.py:2565: (45) expr -> id larrow expr . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: cpar reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: arroba reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: dot reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: star reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: div reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: plus reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: minus reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: less reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: lesseq reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: equal reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: of reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: then reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: loop reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: comma reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: in reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: else reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: pool reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: ccur reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: fi reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 153 - yacc.py:2563: - yacc.py:2565: (88) func_call -> id opar args . cpar - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 191 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 154 - yacc.py:2563: - yacc.py:2565: (89) func_call -> id opar error . cpar - yacc.py:2565: (95) arg_list -> error . arg_list - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 192 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 185 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: arg_list shift and go to state 186 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 187 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 155 - yacc.py:2563: - yacc.py:2565: (93) arg_list -> expr . - yacc.py:2565: (94) arg_list -> expr . comma arg_list - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 93 (arg_list -> expr .) - yacc.py:2687: comma shift and go to state 189 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 156 - yacc.py:2563: - yacc.py:2565: (47) comp -> comp less op . - yacc.py:2565: (51) op -> op . plus term - yacc.py:2565: (52) op -> op . minus term - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for plus resolved as shift - yacc.py:2666: ! shift/reduce conflict for minus resolved as shift - yacc.py:2687: less reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: lesseq reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: equal reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: semi reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: cpar reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: arroba reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: dot reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: star reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: div reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: of reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: then reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: loop reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: comma reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: in reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: else reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: pool reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: ccur reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: fi reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: plus shift and go to state 117 - yacc.py:2687: minus shift and go to state 118 - yacc.py:2689: - yacc.py:2696: ! plus [ reduce using rule 47 (comp -> comp less op .) ] - yacc.py:2696: ! minus [ reduce using rule 47 (comp -> comp less op .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 157 - yacc.py:2563: - yacc.py:2565: (48) comp -> comp lesseq op . - yacc.py:2565: (51) op -> op . plus term - yacc.py:2565: (52) op -> op . minus term - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for plus resolved as shift - yacc.py:2666: ! shift/reduce conflict for minus resolved as shift - yacc.py:2687: less reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: lesseq reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: equal reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: semi reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: cpar reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: arroba reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: dot reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: star reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: div reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: of reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: then reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: loop reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: comma reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: in reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: else reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: pool reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: ccur reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: fi reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: plus shift and go to state 117 - yacc.py:2687: minus shift and go to state 118 - yacc.py:2689: - yacc.py:2696: ! plus [ reduce using rule 48 (comp -> comp lesseq op .) ] - yacc.py:2696: ! minus [ reduce using rule 48 (comp -> comp lesseq op .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 158 - yacc.py:2563: - yacc.py:2565: (49) comp -> comp equal op . - yacc.py:2565: (51) op -> op . plus term - yacc.py:2565: (52) op -> op . minus term - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for plus resolved as shift - yacc.py:2666: ! shift/reduce conflict for minus resolved as shift - yacc.py:2687: less reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: lesseq reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: equal reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: semi reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: cpar reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: arroba reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: dot reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: star reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: div reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: of reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: then reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: loop reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: comma reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: in reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: else reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: pool reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: ccur reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: fi reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: plus shift and go to state 117 - yacc.py:2687: minus shift and go to state 118 - yacc.py:2689: - yacc.py:2696: ! plus [ reduce using rule 49 (comp -> comp equal op .) ] - yacc.py:2696: ! minus [ reduce using rule 49 (comp -> comp equal op .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 159 - yacc.py:2563: - yacc.py:2565: (51) op -> op plus term . - yacc.py:2565: (54) term -> term . star base_call - yacc.py:2565: (55) term -> term . div base_call - yacc.py:2565: (57) term -> term . star error - yacc.py:2565: (58) term -> term . div error - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for star resolved as shift - yacc.py:2666: ! shift/reduce conflict for div resolved as shift - yacc.py:2687: plus reduce using rule 51 (op -> op plus term .) - yacc.py:2687: minus reduce using rule 51 (op -> op plus term .) - yacc.py:2687: less reduce using rule 51 (op -> op plus term .) - yacc.py:2687: lesseq reduce using rule 51 (op -> op plus term .) - yacc.py:2687: equal reduce using rule 51 (op -> op plus term .) - yacc.py:2687: semi reduce using rule 51 (op -> op plus term .) - yacc.py:2687: cpar reduce using rule 51 (op -> op plus term .) - yacc.py:2687: arroba reduce using rule 51 (op -> op plus term .) - yacc.py:2687: dot reduce using rule 51 (op -> op plus term .) - yacc.py:2687: of reduce using rule 51 (op -> op plus term .) - yacc.py:2687: then reduce using rule 51 (op -> op plus term .) - yacc.py:2687: loop reduce using rule 51 (op -> op plus term .) - yacc.py:2687: comma reduce using rule 51 (op -> op plus term .) - yacc.py:2687: in reduce using rule 51 (op -> op plus term .) - yacc.py:2687: else reduce using rule 51 (op -> op plus term .) - yacc.py:2687: pool reduce using rule 51 (op -> op plus term .) - yacc.py:2687: ccur reduce using rule 51 (op -> op plus term .) - yacc.py:2687: fi reduce using rule 51 (op -> op plus term .) - yacc.py:2687: star shift and go to state 119 - yacc.py:2687: div shift and go to state 120 - yacc.py:2689: - yacc.py:2696: ! star [ reduce using rule 51 (op -> op plus term .) ] - yacc.py:2696: ! div [ reduce using rule 51 (op -> op plus term .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 160 - yacc.py:2563: - yacc.py:2565: (52) op -> op minus term . - yacc.py:2565: (54) term -> term . star base_call - yacc.py:2565: (55) term -> term . div base_call - yacc.py:2565: (57) term -> term . star error - yacc.py:2565: (58) term -> term . div error - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for star resolved as shift - yacc.py:2666: ! shift/reduce conflict for div resolved as shift - yacc.py:2687: plus reduce using rule 52 (op -> op minus term .) - yacc.py:2687: minus reduce using rule 52 (op -> op minus term .) - yacc.py:2687: less reduce using rule 52 (op -> op minus term .) - yacc.py:2687: lesseq reduce using rule 52 (op -> op minus term .) - yacc.py:2687: equal reduce using rule 52 (op -> op minus term .) - yacc.py:2687: semi reduce using rule 52 (op -> op minus term .) - yacc.py:2687: cpar reduce using rule 52 (op -> op minus term .) - yacc.py:2687: arroba reduce using rule 52 (op -> op minus term .) - yacc.py:2687: dot reduce using rule 52 (op -> op minus term .) - yacc.py:2687: of reduce using rule 52 (op -> op minus term .) - yacc.py:2687: then reduce using rule 52 (op -> op minus term .) - yacc.py:2687: loop reduce using rule 52 (op -> op minus term .) - yacc.py:2687: comma reduce using rule 52 (op -> op minus term .) - yacc.py:2687: in reduce using rule 52 (op -> op minus term .) - yacc.py:2687: else reduce using rule 52 (op -> op minus term .) - yacc.py:2687: pool reduce using rule 52 (op -> op minus term .) - yacc.py:2687: ccur reduce using rule 52 (op -> op minus term .) - yacc.py:2687: fi reduce using rule 52 (op -> op minus term .) - yacc.py:2687: star shift and go to state 119 - yacc.py:2687: div shift and go to state 120 - yacc.py:2689: - yacc.py:2696: ! star [ reduce using rule 52 (op -> op minus term .) ] - yacc.py:2696: ! div [ reduce using rule 52 (op -> op minus term .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 161 - yacc.py:2563: - yacc.py:2565: (54) term -> term star base_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: div reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: plus reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: minus reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: less reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: lesseq reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: equal reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: semi reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: cpar reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: arroba reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: dot reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: of reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: then reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: loop reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: comma reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: in reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: else reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: pool reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: ccur reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: fi reduce using rule 54 (term -> term star base_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 162 - yacc.py:2563: - yacc.py:2565: (57) term -> term star error . - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift - yacc.py:2687: star reduce using rule 57 (term -> term star error .) - yacc.py:2687: div reduce using rule 57 (term -> term star error .) - yacc.py:2687: plus reduce using rule 57 (term -> term star error .) - yacc.py:2687: minus reduce using rule 57 (term -> term star error .) - yacc.py:2687: less reduce using rule 57 (term -> term star error .) - yacc.py:2687: lesseq reduce using rule 57 (term -> term star error .) - yacc.py:2687: equal reduce using rule 57 (term -> term star error .) - yacc.py:2687: semi reduce using rule 57 (term -> term star error .) - yacc.py:2687: cpar reduce using rule 57 (term -> term star error .) - yacc.py:2687: dot reduce using rule 57 (term -> term star error .) - yacc.py:2687: of reduce using rule 57 (term -> term star error .) - yacc.py:2687: then reduce using rule 57 (term -> term star error .) - yacc.py:2687: loop reduce using rule 57 (term -> term star error .) - yacc.py:2687: comma reduce using rule 57 (term -> term star error .) - yacc.py:2687: in reduce using rule 57 (term -> term star error .) - yacc.py:2687: else reduce using rule 57 (term -> term star error .) - yacc.py:2687: pool reduce using rule 57 (term -> term star error .) - yacc.py:2687: ccur reduce using rule 57 (term -> term star error .) - yacc.py:2687: fi reduce using rule 57 (term -> term star error .) - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2696: ! arroba [ reduce using rule 57 (term -> term star error .) ] - yacc.py:2700: - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 163 - yacc.py:2563: - yacc.py:2565: (55) term -> term div base_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: div reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: plus reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: minus reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: less reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: lesseq reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: equal reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: semi reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: cpar reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: arroba reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: dot reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: of reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: then reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: loop reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: comma reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: in reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: else reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: pool reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: ccur reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: fi reduce using rule 55 (term -> term div base_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 164 - yacc.py:2563: - yacc.py:2565: (58) term -> term div error . - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift - yacc.py:2687: star reduce using rule 58 (term -> term div error .) - yacc.py:2687: div reduce using rule 58 (term -> term div error .) - yacc.py:2687: plus reduce using rule 58 (term -> term div error .) - yacc.py:2687: minus reduce using rule 58 (term -> term div error .) - yacc.py:2687: less reduce using rule 58 (term -> term div error .) - yacc.py:2687: lesseq reduce using rule 58 (term -> term div error .) - yacc.py:2687: equal reduce using rule 58 (term -> term div error .) - yacc.py:2687: semi reduce using rule 58 (term -> term div error .) - yacc.py:2687: cpar reduce using rule 58 (term -> term div error .) - yacc.py:2687: dot reduce using rule 58 (term -> term div error .) - yacc.py:2687: of reduce using rule 58 (term -> term div error .) - yacc.py:2687: then reduce using rule 58 (term -> term div error .) - yacc.py:2687: loop reduce using rule 58 (term -> term div error .) - yacc.py:2687: comma reduce using rule 58 (term -> term div error .) - yacc.py:2687: in reduce using rule 58 (term -> term div error .) - yacc.py:2687: else reduce using rule 58 (term -> term div error .) - yacc.py:2687: pool reduce using rule 58 (term -> term div error .) - yacc.py:2687: ccur reduce using rule 58 (term -> term div error .) - yacc.py:2687: fi reduce using rule 58 (term -> term div error .) - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2696: ! arroba [ reduce using rule 58 (term -> term div error .) ] - yacc.py:2700: - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 165 - yacc.py:2563: - yacc.py:2565: (59) base_call -> factor arroba type . dot func_call - yacc.py:2566: - yacc.py:2687: dot shift and go to state 193 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 166 - yacc.py:2563: - yacc.py:2565: (62) base_call -> factor arroba error . dot func_call - yacc.py:2566: - yacc.py:2687: dot shift and go to state 194 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 167 - yacc.py:2563: - yacc.py:2565: (65) factor -> factor dot func_call . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: dot reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: star reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: div reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: plus reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: minus reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: less reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: lesseq reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: equal reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: semi reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: cpar reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: of reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: then reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: loop reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: comma reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: in reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: else reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: pool reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: ccur reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: fi reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 168 - yacc.py:2563: - yacc.py:2565: (88) func_call -> id . opar args cpar - yacc.py:2565: (89) func_call -> id . opar error cpar - yacc.py:2566: - yacc.py:2687: opar shift and go to state 113 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 169 - yacc.py:2563: - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2566: - yacc.py:2687: opar shift and go to state 195 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 170 - yacc.py:2563: - yacc.py:2565: (64) factor -> opar expr cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: dot reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: star reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: div reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: plus reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: minus reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: less reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: lesseq reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: equal reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: semi reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: cpar reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: of reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: then reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: loop reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: comma reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: in reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: else reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: pool reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: ccur reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: fi reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 171 - yacc.py:2563: - yacc.py:2565: (70) factor -> let let_list in . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 196 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 172 - yacc.py:2563: - yacc.py:2565: (37) let_list -> let_assign comma . let_list - yacc.py:2565: (36) let_list -> . let_assign - yacc.py:2565: (37) let_list -> . let_assign comma let_list - yacc.py:2565: (38) let_assign -> . param larrow expr - yacc.py:2565: (39) let_assign -> . param - yacc.py:2565: (35) param -> . id colon type - yacc.py:2566: - yacc.py:2687: id shift and go to state 46 - yacc.py:2689: - yacc.py:2714: let_assign shift and go to state 129 - yacc.py:2714: let_list shift and go to state 197 - yacc.py:2714: param shift and go to state 130 - yacc.py:2561: - yacc.py:2562:state 173 - yacc.py:2563: - yacc.py:2565: (38) let_assign -> param larrow . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 198 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 174 - yacc.py:2563: - yacc.py:2565: (71) factor -> case expr of . cases_list esac - yacc.py:2565: (40) cases_list -> . casep semi - yacc.py:2565: (41) cases_list -> . casep semi cases_list - yacc.py:2565: (42) cases_list -> . error cases_list - yacc.py:2565: (43) cases_list -> . error semi - yacc.py:2565: (44) casep -> . id colon type rarrow expr - yacc.py:2566: - yacc.py:2687: error shift and go to state 201 - yacc.py:2687: id shift and go to state 202 - yacc.py:2689: - yacc.py:2714: cases_list shift and go to state 199 - yacc.py:2714: casep shift and go to state 200 - yacc.py:2561: - yacc.py:2562:state 175 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr then . expr else expr fi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 203 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 176 - yacc.py:2563: - yacc.py:2565: (73) factor -> while expr loop . expr pool - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 204 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 177 - yacc.py:2563: - yacc.py:2565: (77) atom -> ocur block ccur . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: dot reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: star reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: div reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: plus reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: minus reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: less reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: lesseq reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: equal reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: semi reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: cpar reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: of reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: then reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: loop reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: comma reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: in reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: else reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: pool reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: ccur reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: fi reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 178 - yacc.py:2563: - yacc.py:2565: (80) atom -> ocur block error . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: dot reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: star reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: div reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: plus reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: minus reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: less reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: lesseq reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: equal reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: semi reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: cpar reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: of reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: then reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: loop reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: comma reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: in reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: else reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: pool reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: ccur reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: fi reduce using rule 80 (atom -> ocur block error .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 179 - yacc.py:2563: - yacc.py:2565: (79) atom -> ocur error ccur . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: dot reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: star reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: div reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: plus reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: minus reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: less reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: lesseq reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: equal reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: semi reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: cpar reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: of reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: then reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: loop reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: comma reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: in reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: else reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: pool reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: ccur reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: fi reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 180 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur . expr ccur - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 205 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 181 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur . expr ccur - yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur . error ccur - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 207 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 206 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 182 - yacc.py:2563: - yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur . expr ccur - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 208 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 183 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur . expr ccur - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 209 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 184 - yacc.py:2563: - yacc.py:2565: (61) base_call -> error arroba type dot . func_call - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 168 - yacc.py:2687: error shift and go to state 169 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 210 - yacc.py:2561: - yacc.py:2562:state 185 - yacc.py:2563: - yacc.py:2565: (95) arg_list -> error . arg_list - yacc.py:2565: (86) block -> error . block - yacc.py:2565: (87) block -> error . semi - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: semi shift and go to state 142 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 185 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: arg_list shift and go to state 186 - yacc.py:2714: block shift and go to state 141 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: expr shift and go to state 187 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 186 - yacc.py:2563: - yacc.py:2565: (95) arg_list -> error arg_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 95 (arg_list -> error arg_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 187 - yacc.py:2563: - yacc.py:2565: (93) arg_list -> expr . - yacc.py:2565: (94) arg_list -> expr . comma arg_list - yacc.py:2565: (84) block -> expr . semi - yacc.py:2565: (85) block -> expr . semi block - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 93 (arg_list -> expr .) - yacc.py:2687: comma shift and go to state 189 - yacc.py:2687: semi shift and go to state 151 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 188 - yacc.py:2563: - yacc.py:2565: (90) func_call -> error opar args cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: dot reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: star reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: div reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: plus reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: minus reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: less reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: lesseq reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: equal reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: semi reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: cpar reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: of reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: then reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: loop reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: comma reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: in reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: else reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: pool reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: ccur reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: fi reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 189 - yacc.py:2563: - yacc.py:2565: (94) arg_list -> expr comma . arg_list - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 145 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 155 - yacc.py:2714: arg_list shift and go to state 211 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 190 - yacc.py:2563: - yacc.py:2565: (85) block -> expr semi block . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 85 (block -> expr semi block .) - yacc.py:2687: error reduce using rule 85 (block -> expr semi block .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 191 - yacc.py:2563: - yacc.py:2565: (88) func_call -> id opar args cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: dot reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: star reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: div reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: plus reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: minus reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: less reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: lesseq reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: equal reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: semi reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: cpar reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: of reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: then reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: loop reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: comma reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: in reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: else reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: pool reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: ccur reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: fi reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 192 - yacc.py:2563: - yacc.py:2565: (89) func_call -> id opar error cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: dot reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: star reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: div reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: plus reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: minus reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: less reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: lesseq reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: equal reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: semi reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: cpar reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: of reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: then reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: loop reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: comma reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: in reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: else reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: pool reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: ccur reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: fi reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 193 - yacc.py:2563: - yacc.py:2565: (59) base_call -> factor arroba type dot . func_call - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 168 - yacc.py:2687: error shift and go to state 169 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 212 - yacc.py:2561: - yacc.py:2562:state 194 - yacc.py:2563: - yacc.py:2565: (62) base_call -> factor arroba error dot . func_call - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 168 - yacc.py:2687: error shift and go to state 169 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 213 - yacc.py:2561: - yacc.py:2562:state 195 - yacc.py:2563: - yacc.py:2565: (90) func_call -> error opar . args cpar - yacc.py:2565: (91) args -> . arg_list - yacc.py:2565: (92) args -> . arg_list_empty - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (96) arg_list_empty -> . epsilon - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 145 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: args shift and go to state 146 - yacc.py:2714: arg_list shift and go to state 148 - yacc.py:2714: arg_list_empty shift and go to state 149 - yacc.py:2714: expr shift and go to state 155 - yacc.py:2714: epsilon shift and go to state 150 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 196 - yacc.py:2563: - yacc.py:2565: (70) factor -> let let_list in expr . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: dot reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: star reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: div reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: plus reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: minus reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: less reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: lesseq reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: equal reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: semi reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: cpar reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: of reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: then reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: loop reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: comma reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: in reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: else reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: pool reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: ccur reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: fi reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 197 - yacc.py:2563: - yacc.py:2565: (37) let_list -> let_assign comma let_list . - yacc.py:2566: - yacc.py:2687: in reduce using rule 37 (let_list -> let_assign comma let_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 198 - yacc.py:2563: - yacc.py:2565: (38) let_assign -> param larrow expr . - yacc.py:2566: - yacc.py:2687: comma reduce using rule 38 (let_assign -> param larrow expr .) - yacc.py:2687: in reduce using rule 38 (let_assign -> param larrow expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 199 - yacc.py:2563: - yacc.py:2565: (71) factor -> case expr of cases_list . esac - yacc.py:2566: - yacc.py:2687: esac shift and go to state 214 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 200 - yacc.py:2563: - yacc.py:2565: (40) cases_list -> casep . semi - yacc.py:2565: (41) cases_list -> casep . semi cases_list - yacc.py:2566: - yacc.py:2687: semi shift and go to state 215 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 201 - yacc.py:2563: - yacc.py:2565: (42) cases_list -> error . cases_list - yacc.py:2565: (43) cases_list -> error . semi - yacc.py:2565: (40) cases_list -> . casep semi - yacc.py:2565: (41) cases_list -> . casep semi cases_list - yacc.py:2565: (42) cases_list -> . error cases_list - yacc.py:2565: (43) cases_list -> . error semi - yacc.py:2565: (44) casep -> . id colon type rarrow expr - yacc.py:2566: - yacc.py:2687: semi shift and go to state 217 - yacc.py:2687: error shift and go to state 201 - yacc.py:2687: id shift and go to state 202 - yacc.py:2689: - yacc.py:2714: cases_list shift and go to state 216 - yacc.py:2714: casep shift and go to state 200 - yacc.py:2561: - yacc.py:2562:state 202 - yacc.py:2563: - yacc.py:2565: (44) casep -> id . colon type rarrow expr - yacc.py:2566: - yacc.py:2687: colon shift and go to state 218 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 203 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr then expr . else expr fi - yacc.py:2566: - yacc.py:2687: else shift and go to state 219 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 204 - yacc.py:2563: - yacc.py:2565: (73) factor -> while expr loop expr . pool - yacc.py:2566: - yacc.py:2687: pool shift and go to state 220 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 205 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur expr . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 221 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 206 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur expr . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 222 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 207 - yacc.py:2563: - yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur error . ccur - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 223 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 208 - yacc.py:2563: - yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur expr . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 224 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 209 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur expr . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 225 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 210 - yacc.py:2563: - yacc.py:2565: (61) base_call -> error arroba type dot func_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: div reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: plus reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: minus reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: less reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: lesseq reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: equal reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: semi reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: cpar reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: arroba reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: dot reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: of reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: then reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: loop reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: comma reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: in reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: else reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: pool reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: ccur reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: fi reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 211 - yacc.py:2563: - yacc.py:2565: (94) arg_list -> expr comma arg_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 94 (arg_list -> expr comma arg_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 212 - yacc.py:2563: - yacc.py:2565: (59) base_call -> factor arroba type dot func_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: div reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: plus reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: minus reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: less reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: lesseq reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: equal reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: semi reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: cpar reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: arroba reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: dot reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: of reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: then reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: loop reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: comma reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: in reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: else reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: pool reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: ccur reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: fi reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 213 - yacc.py:2563: - yacc.py:2565: (62) base_call -> factor arroba error dot func_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: div reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: plus reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: minus reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: less reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: lesseq reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: equal reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: semi reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: cpar reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: arroba reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: dot reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: of reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: then reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: loop reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: comma reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: in reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: else reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: pool reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: ccur reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: fi reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 214 - yacc.py:2563: - yacc.py:2565: (71) factor -> case expr of cases_list esac . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: dot reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: star reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: div reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: plus reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: minus reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: less reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: lesseq reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: equal reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: semi reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: cpar reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: of reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: then reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: loop reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: comma reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: in reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: else reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: pool reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: ccur reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: fi reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 215 - yacc.py:2563: - yacc.py:2565: (40) cases_list -> casep semi . - yacc.py:2565: (41) cases_list -> casep semi . cases_list - yacc.py:2565: (40) cases_list -> . casep semi - yacc.py:2565: (41) cases_list -> . casep semi cases_list - yacc.py:2565: (42) cases_list -> . error cases_list - yacc.py:2565: (43) cases_list -> . error semi - yacc.py:2565: (44) casep -> . id colon type rarrow expr - yacc.py:2566: - yacc.py:2687: esac reduce using rule 40 (cases_list -> casep semi .) - yacc.py:2687: error shift and go to state 201 - yacc.py:2687: id shift and go to state 202 - yacc.py:2689: - yacc.py:2714: casep shift and go to state 200 - yacc.py:2714: cases_list shift and go to state 226 - yacc.py:2561: - yacc.py:2562:state 216 - yacc.py:2563: - yacc.py:2565: (42) cases_list -> error cases_list . - yacc.py:2566: - yacc.py:2687: esac reduce using rule 42 (cases_list -> error cases_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 217 - yacc.py:2563: - yacc.py:2565: (43) cases_list -> error semi . - yacc.py:2566: - yacc.py:2687: esac reduce using rule 43 (cases_list -> error semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 218 - yacc.py:2563: - yacc.py:2565: (44) casep -> id colon . type rarrow expr - yacc.py:2566: - yacc.py:2687: type shift and go to state 227 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 219 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr then expr else . expr fi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 228 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 220 - yacc.py:2563: - yacc.py:2565: (73) factor -> while expr loop expr pool . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: dot reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: star reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: div reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: plus reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: minus reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: less reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: lesseq reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: equal reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: semi reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: cpar reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: of reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: then reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: loop reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: comma reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: in reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: else reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: pool reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: ccur reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: fi reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 221 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur expr ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 26 (def_func -> error opar formals cpar colon type ocur expr ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 222 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur expr ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 25 (def_func -> id opar formals cpar colon type ocur expr ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 223 - yacc.py:2563: - yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur error ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 29 (def_func -> id opar formals cpar colon type ocur error ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 224 - yacc.py:2563: - yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur expr ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 28 (def_func -> id opar formals cpar colon error ocur expr ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 225 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur expr ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 27 (def_func -> id opar error cpar colon type ocur expr ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 226 - yacc.py:2563: - yacc.py:2565: (41) cases_list -> casep semi cases_list . - yacc.py:2566: - yacc.py:2687: esac reduce using rule 41 (cases_list -> casep semi cases_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 227 - yacc.py:2563: - yacc.py:2565: (44) casep -> id colon type . rarrow expr - yacc.py:2566: - yacc.py:2687: rarrow shift and go to state 229 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 228 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr then expr else expr . fi - yacc.py:2566: - yacc.py:2687: fi shift and go to state 230 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 229 - yacc.py:2563: - yacc.py:2565: (44) casep -> id colon type rarrow . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 231 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 230 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr then expr else expr fi . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: dot reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: star reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: div reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: plus reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: minus reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: less reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: lesseq reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: equal reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: semi reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: cpar reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: of reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: then reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: loop reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: comma reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: in reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: else reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: pool reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: ccur reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: fi reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 231 - yacc.py:2563: - yacc.py:2565: (44) casep -> id colon type rarrow expr . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 44 (casep -> id colon type rarrow expr .) - yacc.py:2689: - yacc.py:3447:24 shift/reduce conflicts - yacc.py:3457: - yacc.py:3458:Conflicts: - yacc.py:3459: - yacc.py:3462:shift/reduce conflict for less in state 73 resolved as shift - yacc.py:3462:shift/reduce conflict for lesseq in state 73 resolved as shift - yacc.py:3462:shift/reduce conflict for equal in state 73 resolved as shift - yacc.py:3462:shift/reduce conflict for plus in state 74 resolved as shift - yacc.py:3462:shift/reduce conflict for minus in state 74 resolved as shift - yacc.py:3462:shift/reduce conflict for star in state 75 resolved as shift - yacc.py:3462:shift/reduce conflict for div in state 75 resolved as shift - yacc.py:3462:shift/reduce conflict for arroba in state 77 resolved as shift - yacc.py:3462:shift/reduce conflict for dot in state 77 resolved as shift - yacc.py:3462:shift/reduce conflict for ccur in state 141 resolved as shift - yacc.py:3462:shift/reduce conflict for cpar in state 147 resolved as shift - yacc.py:3462:shift/reduce conflict for error in state 151 resolved as shift - yacc.py:3462:shift/reduce conflict for plus in state 156 resolved as shift - yacc.py:3462:shift/reduce conflict for minus in state 156 resolved as shift - yacc.py:3462:shift/reduce conflict for plus in state 157 resolved as shift - yacc.py:3462:shift/reduce conflict for minus in state 157 resolved as shift - yacc.py:3462:shift/reduce conflict for plus in state 158 resolved as shift - yacc.py:3462:shift/reduce conflict for minus in state 158 resolved as shift - yacc.py:3462:shift/reduce conflict for star in state 159 resolved as shift - yacc.py:3462:shift/reduce conflict for div in state 159 resolved as shift - yacc.py:3462:shift/reduce conflict for star in state 160 resolved as shift - yacc.py:3462:shift/reduce conflict for div in state 160 resolved as shift - yacc.py:3462:shift/reduce conflict for arroba in state 162 resolved as shift - yacc.py:3462:shift/reduce conflict for arroba in state 164 resolved as shift - yacc.py: 362:PLY: PARSE DEBUG START - yacc.py: 410: - yacc.py: 411:State : 0 - yacc.py: 435:Stack : . LexToken(class,'class',1,0) - yacc.py: 445:Action : Shift and goto state 5 - yacc.py: 410: - yacc.py: 411:State : 5 - yacc.py: 435:Stack : class . LexToken(type,'Main',1,6) - yacc.py: 445:Action : Shift and goto state 8 - yacc.py: 410: - yacc.py: 411:State : 8 - yacc.py: 435:Stack : class type . LexToken(ocur,'{',1,11) - yacc.py: 445:Action : Shift and goto state 10 - yacc.py: 410: - yacc.py: 411:State : 10 - yacc.py: 435:Stack : class type ocur . LexToken(id,'main',3,18) - yacc.py: 445:Action : Shift and goto state 19 - yacc.py: 410: - yacc.py: 411:State : 19 - yacc.py: 435:Stack : class type ocur id . LexToken(opar,'(',3,22) - yacc.py: 445:Action : Shift and goto state 32 - yacc.py: 410: - yacc.py: 411:State : 32 - yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',3,23) - yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',3,23) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',3,23) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',3,23) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : class type ocur id opar formals cpar . LexToken(colon,':',3,24) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon . LexToken(type,'Object',3,26) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type . LexToken(ocur,'{',3,33) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur . LexToken(opar,'(',4,43) - yacc.py: 445:Action : Shift and goto state 80 - yacc.py: 410: - yacc.py: 411:State : 80 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar . LexToken(new,'new',4,44) - yacc.py: 445:Action : Shift and goto state 89 - yacc.py: 410: - yacc.py: 411:State : 89 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new . LexToken(type,'Alpha',4,48) - yacc.py: 445:Action : Shift and goto state 134 - yacc.py: 410: - yacc.py: 411:State : 134 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',4,53) - yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 150 - yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar epsilon . LexToken(cpar,')',4,61) - yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 149 - yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar arg_list_empty . LexToken(cpar,')',4,61) - yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args . LexToken(cpar,')',4,61) - yacc.py: 445:Action : Shift and goto state 191 - yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args cpar . LexToken(ccur,'}',5,67) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['print','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) - yacc.py: 410: - yacc.py: 411:State : 167 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot func_call . LexToken(ccur,'}',5,67) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 16 - yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : class type ocur def_func semi epsilon . LexToken(ccur,'}',6,70) - yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 48 - yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : class type ocur def_func semi feature_list . LexToken(ccur,'}',6,70) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 14 - yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( id colon type] with ['test1',':','Int'] and goto state 17 - yacc.py: 506:Result : ( id] with ['test3'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',12,146) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',12,146) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',12,146) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar . LexToken(colon,':',12,147) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon . LexToken(type,'Int',12,149) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',12,153) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur . LexToken(num,2.0,13,163) - yacc.py: 445:Action : Shift and goto state 88 - yacc.py: 410: - yacc.py: 411:State : 88 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur num . LexToken(minus,'-',13,165) - yacc.py: 471:Action : Reduce rule [atom -> num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 160 - yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( string] with ['1'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type] with ['a',':','Alpha'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) - yacc.py: 410: - yacc.py: 411:State : 44 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param . LexToken(comma,',',19,226) - yacc.py: 445:Action : Shift and goto state 60 - yacc.py: 410: - yacc.py: 411:State : 60 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma . LexToken(id,'b',19,228) - yacc.py: 445:Action : Shift and goto state 46 - yacc.py: 410: - yacc.py: 411:State : 46 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id . LexToken(colon,':',19,229) - yacc.py: 445:Action : Shift and goto state 61 - yacc.py: 410: - yacc.py: 411:State : 61 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon . LexToken(type,'Int',19,231) - yacc.py: 445:Action : Shift and goto state 96 - yacc.py: 410: - yacc.py: 411:State : 96 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon type . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['b',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) - yacc.py: 410: - yacc.py: 411:State : 44 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 - yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) - yacc.py: 410: - yacc.py: 411:State : 95 - yacc.py: 430:Defaulted state 95: Reduce using 33 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) - yacc.py: 410: - yacc.py: 411:State : 42 - yacc.py: 430:Defaulted state 42: Reduce using 30 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals . LexToken(cpar,')',19,234) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar . LexToken(colon,':',19,235) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon . LexToken(type,'Int',19,237) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',19,241) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur . LexToken(let,'let',20,251) - yacc.py: 445:Action : Shift and goto state 84 - yacc.py: 410: - yacc.py: 411:State : 84 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let . LexToken(id,'count',20,255) - yacc.py: 445:Action : Shift and goto state 46 - yacc.py: 410: - yacc.py: 411:State : 46 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id . LexToken(colon,':',20,260) - yacc.py: 445:Action : Shift and goto state 61 - yacc.py: 410: - yacc.py: 411:State : 61 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon . LexToken(type,'Int',20,262) - yacc.py: 445:Action : Shift and goto state 96 - yacc.py: 410: - yacc.py: 411:State : 96 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon type . LexToken(comma,',',20,265) - yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['count',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) - yacc.py: 410: - yacc.py: 411:State : 130 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let param . LexToken(comma,',',20,265) - yacc.py: 471:Action : Reduce rule [let_assign -> param] with [] and goto state 129 - yacc.py: 506:Result : ( id colon type] with ['pow',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) - yacc.py: 410: - yacc.py: 411:State : 130 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param . LexToken(larrow,'<-',20,276) - yacc.py: 445:Action : Shift and goto state 173 - yacc.py: 410: - yacc.py: 411:State : 173 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow . LexToken(num,1.0,20,279) - yacc.py: 445:Action : Shift and goto state 88 - yacc.py: 410: - yacc.py: 411:State : 88 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow num . LexToken(in,'in',21,329) - yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 - yacc.py: 506:Result : ( let_assign] with [] and goto state 197 - yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 - yacc.py: 506:Result : ([ num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 - yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 135 - yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 196 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',26,389) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',26,389) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',26,389) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar . LexToken(colon,':',26,390) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon . LexToken(type,'Int',26,392) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',26,396) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'testing2',27,406) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id . LexToken(opar,'(',27,414) - yacc.py: 445:Action : Shift and goto state 113 - yacc.py: 410: - yacc.py: 411:State : 113 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar . LexToken(new,'new',27,415) - yacc.py: 445:Action : Shift and goto state 89 - yacc.py: 410: - yacc.py: 411:State : 89 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new . LexToken(type,'Alpha',27,419) - yacc.py: 445:Action : Shift and goto state 134 - yacc.py: 410: - yacc.py: 411:State : 134 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new type . LexToken(comma,',',27,424) - yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',30,450) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',30,450) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',30,450) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',30,451) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'Int',30,453) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',30,457) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'test1',31,467) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(larrow,'<-',31,473) - yacc.py: 445:Action : Shift and goto state 112 - yacc.py: 410: - yacc.py: 411:State : 112 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow . LexToken(opar,'(',31,477) - yacc.py: 445:Action : Shift and goto state 80 - yacc.py: 410: - yacc.py: 411:State : 80 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar . LexToken(num,1.0,31,478) - yacc.py: 445:Action : Shift and goto state 88 - yacc.py: 410: - yacc.py: 411:State : 88 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar num . LexToken(plus,'+',31,480) - yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 16 - yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',33,543) - yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 48 - yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',33,543) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar epsilon . LexToken(cpar,')',37,601) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list_empty . LexToken(cpar,')',37,601) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',37,601) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar . LexToken(colon,':',37,603) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon . LexToken(type,'Object',37,605) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',37,612) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur . LexToken(id,'out_string',38,622) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id . LexToken(opar,'(',38,632) - yacc.py: 445:Action : Shift and goto state 113 - yacc.py: 410: - yacc.py: 411:State : 113 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id opar . LexToken(string,'reached!!\n',38,645) - yacc.py: 445:Action : Shift and goto state 93 - yacc.py: 410: - yacc.py: 411:State : 93 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id opar string . LexToken(cpar,')',38,646) - yacc.py: 471:Action : Reduce rule [atom -> string] with ['reached!!\n'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 16 - yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi epsilon . LexToken(ccur,'}',40,655) - yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 48 - yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi feature_list . LexToken(ccur,'}',40,655) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( ( program + yacc.py:3381:Rule 1 program -> class_list + yacc.py:3381:Rule 2 epsilon -> + yacc.py:3381:Rule 3 class_list -> def_class class_list + yacc.py:3381:Rule 4 class_list -> def_class + yacc.py:3381:Rule 5 class_list -> error class_list + yacc.py:3381:Rule 6 def_class -> class type ocur feature_list ccur semi + yacc.py:3381:Rule 7 def_class -> class type inherits type ocur feature_list ccur semi + yacc.py:3381:Rule 8 def_class -> class error ocur feature_list ccur semi + yacc.py:3381:Rule 9 def_class -> class type ocur feature_list ccur error + yacc.py:3381:Rule 10 def_class -> class error inherits type ocur feature_list ccur semi + yacc.py:3381:Rule 11 def_class -> class error inherits error ocur feature_list ccur semi + yacc.py:3381:Rule 12 def_class -> class type inherits error ocur feature_list ccur semi + yacc.py:3381:Rule 13 def_class -> class type inherits type ocur feature_list ccur error + yacc.py:3381:Rule 14 feature_list -> epsilon + yacc.py:3381:Rule 15 feature_list -> def_attr semi feature_list + yacc.py:3381:Rule 16 feature_list -> def_func semi feature_list + yacc.py:3381:Rule 17 feature_list -> error feature_list + yacc.py:3381:Rule 18 def_attr -> id colon type + yacc.py:3381:Rule 19 def_attr -> id colon type larrow expr + yacc.py:3381:Rule 20 def_attr -> error colon type + yacc.py:3381:Rule 21 def_attr -> id colon error + yacc.py:3381:Rule 22 def_attr -> error colon type larrow expr + yacc.py:3381:Rule 23 def_attr -> id colon error larrow expr + yacc.py:3381:Rule 24 def_attr -> id colon type larrow error + yacc.py:3381:Rule 25 def_func -> id opar formals cpar colon type ocur expr ccur + yacc.py:3381:Rule 26 def_func -> error opar formals cpar colon type ocur expr ccur + yacc.py:3381:Rule 27 def_func -> id opar error cpar colon type ocur expr ccur + yacc.py:3381:Rule 28 def_func -> id opar formals cpar colon error ocur expr ccur + yacc.py:3381:Rule 29 def_func -> id opar formals cpar colon type ocur error ccur + yacc.py:3381:Rule 30 formals -> param_list + yacc.py:3381:Rule 31 formals -> param_list_empty + yacc.py:3381:Rule 32 param_list -> param + yacc.py:3381:Rule 33 param_list -> param comma param_list + yacc.py:3381:Rule 34 param_list_empty -> epsilon + yacc.py:3381:Rule 35 param -> id colon type + yacc.py:3381:Rule 36 let_list -> let_assign + yacc.py:3381:Rule 37 let_list -> let_assign comma let_list + yacc.py:3381:Rule 38 let_assign -> param larrow expr + yacc.py:3381:Rule 39 let_assign -> param + yacc.py:3381:Rule 40 cases_list -> casep semi + yacc.py:3381:Rule 41 cases_list -> casep semi cases_list + yacc.py:3381:Rule 42 cases_list -> error cases_list + yacc.py:3381:Rule 43 cases_list -> error semi + yacc.py:3381:Rule 44 casep -> id colon type rarrow expr + yacc.py:3381:Rule 45 expr -> id larrow expr + yacc.py:3381:Rule 46 expr -> comp + yacc.py:3381:Rule 47 comp -> comp less op + yacc.py:3381:Rule 48 comp -> comp lesseq op + yacc.py:3381:Rule 49 comp -> comp equal op + yacc.py:3381:Rule 50 comp -> op + yacc.py:3381:Rule 51 op -> op plus term + yacc.py:3381:Rule 52 op -> op minus term + yacc.py:3381:Rule 53 op -> term + yacc.py:3381:Rule 54 term -> term star base_call + yacc.py:3381:Rule 55 term -> term div base_call + yacc.py:3381:Rule 56 term -> base_call + yacc.py:3381:Rule 57 term -> term star error + yacc.py:3381:Rule 58 term -> term div error + yacc.py:3381:Rule 59 base_call -> factor arroba type dot func_call + yacc.py:3381:Rule 60 base_call -> factor + yacc.py:3381:Rule 61 base_call -> error arroba type dot func_call + yacc.py:3381:Rule 62 base_call -> factor arroba error dot func_call + yacc.py:3381:Rule 63 factor -> atom + yacc.py:3381:Rule 64 factor -> opar expr cpar + yacc.py:3381:Rule 65 factor -> factor dot func_call + yacc.py:3381:Rule 66 factor -> not expr + yacc.py:3381:Rule 67 factor -> func_call + yacc.py:3381:Rule 68 factor -> isvoid base_call + yacc.py:3381:Rule 69 factor -> nox base_call + yacc.py:3381:Rule 70 factor -> let let_list in expr + yacc.py:3381:Rule 71 factor -> case expr of cases_list esac + yacc.py:3381:Rule 72 factor -> if expr then expr else expr fi + yacc.py:3381:Rule 73 factor -> while expr loop expr pool + yacc.py:3381:Rule 74 atom -> num + yacc.py:3381:Rule 75 atom -> id + yacc.py:3381:Rule 76 atom -> new type + yacc.py:3381:Rule 77 atom -> ocur block ccur + yacc.py:3381:Rule 78 atom -> error block ccur + yacc.py:3381:Rule 79 atom -> ocur error ccur + yacc.py:3381:Rule 80 atom -> ocur block error + yacc.py:3381:Rule 81 atom -> true + yacc.py:3381:Rule 82 atom -> false + yacc.py:3381:Rule 83 atom -> string + yacc.py:3381:Rule 84 block -> expr semi + yacc.py:3381:Rule 85 block -> expr semi block + yacc.py:3381:Rule 86 block -> error block + yacc.py:3381:Rule 87 block -> error semi + yacc.py:3381:Rule 88 func_call -> id opar args cpar + yacc.py:3381:Rule 89 func_call -> id opar error cpar + yacc.py:3381:Rule 90 func_call -> error opar args cpar + yacc.py:3381:Rule 91 args -> arg_list + yacc.py:3381:Rule 92 args -> arg_list_empty + yacc.py:3381:Rule 93 arg_list -> expr + yacc.py:3381:Rule 94 arg_list -> expr comma arg_list + yacc.py:3381:Rule 95 arg_list -> error arg_list + yacc.py:3381:Rule 96 arg_list_empty -> epsilon + yacc.py:3399: + yacc.py:3400:Terminals, with rules where they appear + yacc.py:3401: + yacc.py:3405:arroba : 59 61 62 + yacc.py:3405:case : 71 + yacc.py:3405:ccur : 6 7 8 9 10 11 12 13 25 26 27 28 29 77 78 79 + yacc.py:3405:class : 6 7 8 9 10 11 12 13 + yacc.py:3405:colon : 18 19 20 21 22 23 24 25 26 27 28 29 35 44 + yacc.py:3405:comma : 33 37 94 + yacc.py:3405:cpar : 25 26 27 28 29 64 88 89 90 + yacc.py:3405:div : 55 58 + yacc.py:3405:dot : 59 61 62 65 + yacc.py:3405:else : 72 + yacc.py:3405:equal : 49 + yacc.py:3405:error : 5 8 9 10 11 11 12 13 17 20 21 22 23 24 26 27 28 29 42 43 57 58 61 62 78 79 80 86 87 89 90 95 + yacc.py:3405:esac : 71 + yacc.py:3405:false : 82 + yacc.py:3405:fi : 72 + yacc.py:3405:id : 18 19 21 23 24 25 27 28 29 35 44 45 75 88 89 + yacc.py:3405:if : 72 + yacc.py:3405:in : 70 + yacc.py:3405:inherits : 7 10 11 12 13 + yacc.py:3405:isvoid : 68 + yacc.py:3405:larrow : 19 22 23 24 38 45 + yacc.py:3405:less : 47 + yacc.py:3405:lesseq : 48 + yacc.py:3405:let : 70 + yacc.py:3405:loop : 73 + yacc.py:3405:minus : 52 + yacc.py:3405:new : 76 + yacc.py:3405:not : 66 + yacc.py:3405:nox : 69 + yacc.py:3405:num : 74 + yacc.py:3405:ocur : 6 7 8 9 10 11 12 13 25 26 27 28 29 77 79 80 + yacc.py:3405:of : 71 + yacc.py:3405:opar : 25 26 27 28 29 64 88 89 90 + yacc.py:3405:plus : 51 + yacc.py:3405:pool : 73 + yacc.py:3405:rarrow : 44 + yacc.py:3405:semi : 6 7 8 10 11 12 15 16 40 41 43 84 85 87 + yacc.py:3405:star : 54 57 + yacc.py:3405:string : 83 + yacc.py:3405:then : 72 + yacc.py:3405:true : 81 + yacc.py:3405:type : 6 7 7 9 10 12 13 13 18 19 20 22 24 25 26 27 29 35 44 59 61 76 + yacc.py:3405:while : 73 + yacc.py:3407: + yacc.py:3408:Nonterminals, with rules where they appear + yacc.py:3409: + yacc.py:3413:arg_list : 91 94 95 + yacc.py:3413:arg_list_empty : 92 + yacc.py:3413:args : 88 90 + yacc.py:3413:atom : 63 + yacc.py:3413:base_call : 54 55 56 68 69 + yacc.py:3413:block : 77 78 80 85 86 + yacc.py:3413:casep : 40 41 + yacc.py:3413:cases_list : 41 42 71 + yacc.py:3413:class_list : 1 3 5 + yacc.py:3413:comp : 46 47 48 49 + yacc.py:3413:def_attr : 15 + yacc.py:3413:def_class : 3 4 + yacc.py:3413:def_func : 16 + yacc.py:3413:epsilon : 14 34 96 + yacc.py:3413:expr : 19 22 23 25 26 27 28 38 44 45 64 66 70 71 72 72 72 73 73 84 85 93 94 + yacc.py:3413:factor : 59 60 62 65 + yacc.py:3413:feature_list : 6 7 8 9 10 11 12 13 15 16 17 + yacc.py:3413:formals : 25 26 28 29 + yacc.py:3413:func_call : 59 61 62 65 67 + yacc.py:3413:let_assign : 36 37 + yacc.py:3413:let_list : 37 70 + yacc.py:3413:op : 47 48 49 50 51 52 + yacc.py:3413:param : 32 33 38 39 + yacc.py:3413:param_list : 30 33 + yacc.py:3413:param_list_empty : 31 + yacc.py:3413:program : 0 + yacc.py:3413:term : 51 52 53 54 55 57 58 + yacc.py:3414: + yacc.py:3436:Generating LALR tables + yacc.py:2543:Parsing method: LALR + yacc.py:2561: + yacc.py:2562:state 0 + yacc.py:2563: + yacc.py:2565: (0) S' -> . program + yacc.py:2565: (1) program -> . class_list + yacc.py:2565: (3) class_list -> . def_class class_list + yacc.py:2565: (4) class_list -> . def_class + yacc.py:2565: (5) class_list -> . error class_list + yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi + yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi + yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error + yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi + yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: error shift and go to state 4 + yacc.py:2687: class shift and go to state 5 + yacc.py:2689: + yacc.py:2714: program shift and go to state 1 + yacc.py:2714: class_list shift and go to state 2 + yacc.py:2714: def_class shift and go to state 3 + yacc.py:2561: + yacc.py:2562:state 1 + yacc.py:2563: + yacc.py:2565: (0) S' -> program . + yacc.py:2566: + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 2 + yacc.py:2563: + yacc.py:2565: (1) program -> class_list . + yacc.py:2566: + yacc.py:2687: $end reduce using rule 1 (program -> class_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 3 + yacc.py:2563: + yacc.py:2565: (3) class_list -> def_class . class_list + yacc.py:2565: (4) class_list -> def_class . + yacc.py:2565: (3) class_list -> . def_class class_list + yacc.py:2565: (4) class_list -> . def_class + yacc.py:2565: (5) class_list -> . error class_list + yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi + yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi + yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error + yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi + yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: $end reduce using rule 4 (class_list -> def_class .) + yacc.py:2687: error shift and go to state 4 + yacc.py:2687: class shift and go to state 5 + yacc.py:2689: + yacc.py:2714: def_class shift and go to state 3 + yacc.py:2714: class_list shift and go to state 6 + yacc.py:2561: + yacc.py:2562:state 4 + yacc.py:2563: + yacc.py:2565: (5) class_list -> error . class_list + yacc.py:2565: (3) class_list -> . def_class class_list + yacc.py:2565: (4) class_list -> . def_class + yacc.py:2565: (5) class_list -> . error class_list + yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi + yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi + yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error + yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi + yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: error shift and go to state 4 + yacc.py:2687: class shift and go to state 5 + yacc.py:2689: + yacc.py:2714: class_list shift and go to state 7 + yacc.py:2714: def_class shift and go to state 3 + yacc.py:2561: + yacc.py:2562:state 5 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class . type ocur feature_list ccur semi + yacc.py:2565: (7) def_class -> class . type inherits type ocur feature_list ccur semi + yacc.py:2565: (8) def_class -> class . error ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> class . type ocur feature_list ccur error + yacc.py:2565: (10) def_class -> class . error inherits type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> class . error inherits error ocur feature_list ccur semi + yacc.py:2565: (12) def_class -> class . type inherits error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> class . type inherits type ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: type shift and go to state 8 + yacc.py:2687: error shift and go to state 9 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 6 + yacc.py:2563: + yacc.py:2565: (3) class_list -> def_class class_list . + yacc.py:2566: + yacc.py:2687: $end reduce using rule 3 (class_list -> def_class class_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 7 + yacc.py:2563: + yacc.py:2565: (5) class_list -> error class_list . + yacc.py:2566: + yacc.py:2687: $end reduce using rule 5 (class_list -> error class_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 8 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class type . ocur feature_list ccur semi + yacc.py:2565: (7) def_class -> class type . inherits type ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> class type . ocur feature_list ccur error + yacc.py:2565: (12) def_class -> class type . inherits error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> class type . inherits type ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 10 + yacc.py:2687: inherits shift and go to state 11 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 9 + yacc.py:2563: + yacc.py:2565: (8) def_class -> class error . ocur feature_list ccur semi + yacc.py:2565: (10) def_class -> class error . inherits type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> class error . inherits error ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 12 + yacc.py:2687: inherits shift and go to state 13 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 10 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class type ocur . feature_list ccur semi + yacc.py:2565: (9) def_class -> class type ocur . feature_list ccur error + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 14 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 11 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits . type ocur feature_list ccur semi + yacc.py:2565: (12) def_class -> class type inherits . error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> class type inherits . type ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: type shift and go to state 20 + yacc.py:2687: error shift and go to state 21 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 12 + yacc.py:2563: + yacc.py:2565: (8) def_class -> class error ocur . feature_list ccur semi + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 22 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 13 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits . type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> class error inherits . error ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: type shift and go to state 24 + yacc.py:2687: error shift and go to state 23 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 14 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class type ocur feature_list . ccur semi + yacc.py:2565: (9) def_class -> class type ocur feature_list . ccur error + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 25 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 15 + yacc.py:2563: + yacc.py:2565: (17) feature_list -> error . feature_list + yacc.py:2565: (20) def_attr -> error . colon type + yacc.py:2565: (22) def_attr -> error . colon type larrow expr + yacc.py:2565: (26) def_func -> error . opar formals cpar colon type ocur expr ccur + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: colon shift and go to state 27 + yacc.py:2687: opar shift and go to state 28 + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 26 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 16 + yacc.py:2563: + yacc.py:2565: (14) feature_list -> epsilon . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 14 (feature_list -> epsilon .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 17 + yacc.py:2563: + yacc.py:2565: (15) feature_list -> def_attr . semi feature_list + yacc.py:2566: + yacc.py:2687: semi shift and go to state 29 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 18 + yacc.py:2563: + yacc.py:2565: (16) feature_list -> def_func . semi feature_list + yacc.py:2566: + yacc.py:2687: semi shift and go to state 30 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 19 + yacc.py:2563: + yacc.py:2565: (18) def_attr -> id . colon type + yacc.py:2565: (19) def_attr -> id . colon type larrow expr + yacc.py:2565: (21) def_attr -> id . colon error + yacc.py:2565: (23) def_attr -> id . colon error larrow expr + yacc.py:2565: (24) def_attr -> id . colon type larrow error + yacc.py:2565: (25) def_func -> id . opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> id . opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> id . opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> id . opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: colon shift and go to state 31 + yacc.py:2687: opar shift and go to state 32 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 20 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits type . ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> class type inherits type . ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 33 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 21 + yacc.py:2563: + yacc.py:2565: (12) def_class -> class type inherits error . ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 34 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 22 + yacc.py:2563: + yacc.py:2565: (8) def_class -> class error ocur feature_list . ccur semi + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 35 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 23 + yacc.py:2563: + yacc.py:2565: (11) def_class -> class error inherits error . ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 36 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 24 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits type . ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 37 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 25 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class type ocur feature_list ccur . semi + yacc.py:2565: (9) def_class -> class type ocur feature_list ccur . error + yacc.py:2566: + yacc.py:2687: semi shift and go to state 38 + yacc.py:2687: error shift and go to state 39 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 26 + yacc.py:2563: + yacc.py:2565: (17) feature_list -> error feature_list . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 17 (feature_list -> error feature_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 27 + yacc.py:2563: + yacc.py:2565: (20) def_attr -> error colon . type + yacc.py:2565: (22) def_attr -> error colon . type larrow expr + yacc.py:2566: + yacc.py:2687: type shift and go to state 40 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 28 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar . formals cpar colon type ocur expr ccur + yacc.py:2565: (30) formals -> . param_list + yacc.py:2565: (31) formals -> . param_list_empty + yacc.py:2565: (32) param_list -> . param + yacc.py:2565: (33) param_list -> . param comma param_list + yacc.py:2565: (34) param_list_empty -> . epsilon + yacc.py:2565: (35) param -> . id colon type + yacc.py:2565: (2) epsilon -> . + yacc.py:2566: + yacc.py:2687: id shift and go to state 46 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2689: + yacc.py:2714: formals shift and go to state 41 + yacc.py:2714: param_list shift and go to state 42 + yacc.py:2714: param_list_empty shift and go to state 43 + yacc.py:2714: param shift and go to state 44 + yacc.py:2714: epsilon shift and go to state 45 + yacc.py:2561: + yacc.py:2562:state 29 + yacc.py:2563: + yacc.py:2565: (15) feature_list -> def_attr semi . feature_list + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: feature_list shift and go to state 47 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 30 + yacc.py:2563: + yacc.py:2565: (16) feature_list -> def_func semi . feature_list + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2714: feature_list shift and go to state 48 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2561: + yacc.py:2562:state 31 + yacc.py:2563: + yacc.py:2565: (18) def_attr -> id colon . type + yacc.py:2565: (19) def_attr -> id colon . type larrow expr + yacc.py:2565: (21) def_attr -> id colon . error + yacc.py:2565: (23) def_attr -> id colon . error larrow expr + yacc.py:2565: (24) def_attr -> id colon . type larrow error + yacc.py:2566: + yacc.py:2687: type shift and go to state 49 + yacc.py:2687: error shift and go to state 50 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 32 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar . formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> id opar . error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> id opar . formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> id opar . formals cpar colon type ocur error ccur + yacc.py:2565: (30) formals -> . param_list + yacc.py:2565: (31) formals -> . param_list_empty + yacc.py:2565: (32) param_list -> . param + yacc.py:2565: (33) param_list -> . param comma param_list + yacc.py:2565: (34) param_list_empty -> . epsilon + yacc.py:2565: (35) param -> . id colon type + yacc.py:2565: (2) epsilon -> . + yacc.py:2566: + yacc.py:2687: error shift and go to state 52 + yacc.py:2687: id shift and go to state 46 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2689: + yacc.py:2714: formals shift and go to state 51 + yacc.py:2714: param_list shift and go to state 42 + yacc.py:2714: param_list_empty shift and go to state 43 + yacc.py:2714: param shift and go to state 44 + yacc.py:2714: epsilon shift and go to state 45 + yacc.py:2561: + yacc.py:2562:state 33 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits type ocur . feature_list ccur semi + yacc.py:2565: (13) def_class -> class type inherits type ocur . feature_list ccur error + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 53 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 34 + yacc.py:2563: + yacc.py:2565: (12) def_class -> class type inherits error ocur . feature_list ccur semi + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 54 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 35 + yacc.py:2563: + yacc.py:2565: (8) def_class -> class error ocur feature_list ccur . semi + yacc.py:2566: + yacc.py:2687: semi shift and go to state 55 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 36 + yacc.py:2563: + yacc.py:2565: (11) def_class -> class error inherits error ocur . feature_list ccur semi + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 56 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 37 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits type ocur . feature_list ccur semi + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 57 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 38 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class type ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 39 + yacc.py:2563: + yacc.py:2565: (9) def_class -> class type ocur feature_list ccur error . + yacc.py:2566: + yacc.py:2687: error reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) + yacc.py:2687: class reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) + yacc.py:2687: $end reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 40 + yacc.py:2563: + yacc.py:2565: (20) def_attr -> error colon type . + yacc.py:2565: (22) def_attr -> error colon type . larrow expr + yacc.py:2566: + yacc.py:2687: semi reduce using rule 20 (def_attr -> error colon type .) + yacc.py:2687: larrow shift and go to state 58 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 41 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals . cpar colon type ocur expr ccur + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 59 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 42 + yacc.py:2563: + yacc.py:2565: (30) formals -> param_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 30 (formals -> param_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 43 + yacc.py:2563: + yacc.py:2565: (31) formals -> param_list_empty . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 31 (formals -> param_list_empty .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 44 + yacc.py:2563: + yacc.py:2565: (32) param_list -> param . + yacc.py:2565: (33) param_list -> param . comma param_list + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 32 (param_list -> param .) + yacc.py:2687: comma shift and go to state 60 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 45 + yacc.py:2563: + yacc.py:2565: (34) param_list_empty -> epsilon . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 34 (param_list_empty -> epsilon .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 46 + yacc.py:2563: + yacc.py:2565: (35) param -> id . colon type + yacc.py:2566: + yacc.py:2687: colon shift and go to state 61 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 47 + yacc.py:2563: + yacc.py:2565: (15) feature_list -> def_attr semi feature_list . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 15 (feature_list -> def_attr semi feature_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 48 + yacc.py:2563: + yacc.py:2565: (16) feature_list -> def_func semi feature_list . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 16 (feature_list -> def_func semi feature_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 49 + yacc.py:2563: + yacc.py:2565: (18) def_attr -> id colon type . + yacc.py:2565: (19) def_attr -> id colon type . larrow expr + yacc.py:2565: (24) def_attr -> id colon type . larrow error + yacc.py:2566: + yacc.py:2687: semi reduce using rule 18 (def_attr -> id colon type .) + yacc.py:2687: larrow shift and go to state 62 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 50 + yacc.py:2563: + yacc.py:2565: (21) def_attr -> id colon error . + yacc.py:2565: (23) def_attr -> id colon error . larrow expr + yacc.py:2566: + yacc.py:2687: semi reduce using rule 21 (def_attr -> id colon error .) + yacc.py:2687: larrow shift and go to state 63 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 51 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals . cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> id opar formals . cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> id opar formals . cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 64 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 52 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error . cpar colon type ocur expr ccur + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 65 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 53 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list . ccur semi + yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list . ccur error + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 66 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 54 + yacc.py:2563: + yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list . ccur semi + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 67 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 55 + yacc.py:2563: + yacc.py:2565: (8) def_class -> class error ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 56 + yacc.py:2563: + yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list . ccur semi + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 68 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 57 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list . ccur semi + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 69 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 58 + yacc.py:2563: + yacc.py:2565: (22) def_attr -> error colon type larrow . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 71 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 59 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar . colon type ocur expr ccur + yacc.py:2566: + yacc.py:2687: colon shift and go to state 94 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 60 + yacc.py:2563: + yacc.py:2565: (33) param_list -> param comma . param_list + yacc.py:2565: (32) param_list -> . param + yacc.py:2565: (33) param_list -> . param comma param_list + yacc.py:2565: (35) param -> . id colon type + yacc.py:2566: + yacc.py:2687: id shift and go to state 46 + yacc.py:2689: + yacc.py:2714: param shift and go to state 44 + yacc.py:2714: param_list shift and go to state 95 + yacc.py:2561: + yacc.py:2562:state 61 + yacc.py:2563: + yacc.py:2565: (35) param -> id colon . type + yacc.py:2566: + yacc.py:2687: type shift and go to state 96 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 62 + yacc.py:2563: + yacc.py:2565: (19) def_attr -> id colon type larrow . expr + yacc.py:2565: (24) def_attr -> id colon type larrow . error + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 98 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 97 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 63 + yacc.py:2563: + yacc.py:2565: (23) def_attr -> id colon error larrow . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 99 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 64 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar . colon type ocur expr ccur + yacc.py:2565: (28) def_func -> id opar formals cpar . colon error ocur expr ccur + yacc.py:2565: (29) def_func -> id opar formals cpar . colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: colon shift and go to state 100 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 65 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar . colon type ocur expr ccur + yacc.py:2566: + yacc.py:2687: colon shift and go to state 101 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 66 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list ccur . semi + yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list ccur . error + yacc.py:2566: + yacc.py:2687: semi shift and go to state 102 + yacc.py:2687: error shift and go to state 103 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 67 + yacc.py:2563: + yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list ccur . semi + yacc.py:2566: + yacc.py:2687: semi shift and go to state 104 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 68 + yacc.py:2563: + yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list ccur . semi + yacc.py:2566: + yacc.py:2687: semi shift and go to state 105 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 69 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list ccur . semi + yacc.py:2566: + yacc.py:2687: semi shift and go to state 106 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 70 + yacc.py:2563: + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 71 + yacc.py:2563: + yacc.py:2565: (22) def_attr -> error colon type larrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 22 (def_attr -> error colon type larrow expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 72 + yacc.py:2563: + yacc.py:2565: (45) expr -> id . larrow expr + yacc.py:2565: (75) atom -> id . + yacc.py:2565: (88) func_call -> id . opar args cpar + yacc.py:2565: (89) func_call -> id . opar error cpar + yacc.py:2566: + yacc.py:2687: larrow shift and go to state 112 + yacc.py:2687: arroba reduce using rule 75 (atom -> id .) + yacc.py:2687: dot reduce using rule 75 (atom -> id .) + yacc.py:2687: star reduce using rule 75 (atom -> id .) + yacc.py:2687: div reduce using rule 75 (atom -> id .) + yacc.py:2687: plus reduce using rule 75 (atom -> id .) + yacc.py:2687: minus reduce using rule 75 (atom -> id .) + yacc.py:2687: less reduce using rule 75 (atom -> id .) + yacc.py:2687: lesseq reduce using rule 75 (atom -> id .) + yacc.py:2687: equal reduce using rule 75 (atom -> id .) + yacc.py:2687: semi reduce using rule 75 (atom -> id .) + yacc.py:2687: cpar reduce using rule 75 (atom -> id .) + yacc.py:2687: of reduce using rule 75 (atom -> id .) + yacc.py:2687: then reduce using rule 75 (atom -> id .) + yacc.py:2687: loop reduce using rule 75 (atom -> id .) + yacc.py:2687: comma reduce using rule 75 (atom -> id .) + yacc.py:2687: in reduce using rule 75 (atom -> id .) + yacc.py:2687: else reduce using rule 75 (atom -> id .) + yacc.py:2687: pool reduce using rule 75 (atom -> id .) + yacc.py:2687: ccur reduce using rule 75 (atom -> id .) + yacc.py:2687: fi reduce using rule 75 (atom -> id .) + yacc.py:2687: opar shift and go to state 113 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 73 + yacc.py:2563: + yacc.py:2565: (46) expr -> comp . + yacc.py:2565: (47) comp -> comp . less op + yacc.py:2565: (48) comp -> comp . lesseq op + yacc.py:2565: (49) comp -> comp . equal op + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for less resolved as shift + yacc.py:2666: ! shift/reduce conflict for lesseq resolved as shift + yacc.py:2666: ! shift/reduce conflict for equal resolved as shift + yacc.py:2687: semi reduce using rule 46 (expr -> comp .) + yacc.py:2687: cpar reduce using rule 46 (expr -> comp .) + yacc.py:2687: arroba reduce using rule 46 (expr -> comp .) + yacc.py:2687: dot reduce using rule 46 (expr -> comp .) + yacc.py:2687: star reduce using rule 46 (expr -> comp .) + yacc.py:2687: div reduce using rule 46 (expr -> comp .) + yacc.py:2687: plus reduce using rule 46 (expr -> comp .) + yacc.py:2687: minus reduce using rule 46 (expr -> comp .) + yacc.py:2687: of reduce using rule 46 (expr -> comp .) + yacc.py:2687: then reduce using rule 46 (expr -> comp .) + yacc.py:2687: loop reduce using rule 46 (expr -> comp .) + yacc.py:2687: comma reduce using rule 46 (expr -> comp .) + yacc.py:2687: in reduce using rule 46 (expr -> comp .) + yacc.py:2687: else reduce using rule 46 (expr -> comp .) + yacc.py:2687: pool reduce using rule 46 (expr -> comp .) + yacc.py:2687: ccur reduce using rule 46 (expr -> comp .) + yacc.py:2687: fi reduce using rule 46 (expr -> comp .) + yacc.py:2687: less shift and go to state 114 + yacc.py:2687: lesseq shift and go to state 115 + yacc.py:2687: equal shift and go to state 116 + yacc.py:2689: + yacc.py:2696: ! less [ reduce using rule 46 (expr -> comp .) ] + yacc.py:2696: ! lesseq [ reduce using rule 46 (expr -> comp .) ] + yacc.py:2696: ! equal [ reduce using rule 46 (expr -> comp .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 74 + yacc.py:2563: + yacc.py:2565: (50) comp -> op . + yacc.py:2565: (51) op -> op . plus term + yacc.py:2565: (52) op -> op . minus term + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for plus resolved as shift + yacc.py:2666: ! shift/reduce conflict for minus resolved as shift + yacc.py:2687: less reduce using rule 50 (comp -> op .) + yacc.py:2687: lesseq reduce using rule 50 (comp -> op .) + yacc.py:2687: equal reduce using rule 50 (comp -> op .) + yacc.py:2687: semi reduce using rule 50 (comp -> op .) + yacc.py:2687: cpar reduce using rule 50 (comp -> op .) + yacc.py:2687: arroba reduce using rule 50 (comp -> op .) + yacc.py:2687: dot reduce using rule 50 (comp -> op .) + yacc.py:2687: star reduce using rule 50 (comp -> op .) + yacc.py:2687: div reduce using rule 50 (comp -> op .) + yacc.py:2687: of reduce using rule 50 (comp -> op .) + yacc.py:2687: then reduce using rule 50 (comp -> op .) + yacc.py:2687: loop reduce using rule 50 (comp -> op .) + yacc.py:2687: comma reduce using rule 50 (comp -> op .) + yacc.py:2687: in reduce using rule 50 (comp -> op .) + yacc.py:2687: else reduce using rule 50 (comp -> op .) + yacc.py:2687: pool reduce using rule 50 (comp -> op .) + yacc.py:2687: ccur reduce using rule 50 (comp -> op .) + yacc.py:2687: fi reduce using rule 50 (comp -> op .) + yacc.py:2687: plus shift and go to state 117 + yacc.py:2687: minus shift and go to state 118 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 50 (comp -> op .) ] + yacc.py:2696: ! minus [ reduce using rule 50 (comp -> op .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 75 + yacc.py:2563: + yacc.py:2565: (53) op -> term . + yacc.py:2565: (54) term -> term . star base_call + yacc.py:2565: (55) term -> term . div base_call + yacc.py:2565: (57) term -> term . star error + yacc.py:2565: (58) term -> term . div error + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for star resolved as shift + yacc.py:2666: ! shift/reduce conflict for div resolved as shift + yacc.py:2687: plus reduce using rule 53 (op -> term .) + yacc.py:2687: minus reduce using rule 53 (op -> term .) + yacc.py:2687: less reduce using rule 53 (op -> term .) + yacc.py:2687: lesseq reduce using rule 53 (op -> term .) + yacc.py:2687: equal reduce using rule 53 (op -> term .) + yacc.py:2687: semi reduce using rule 53 (op -> term .) + yacc.py:2687: cpar reduce using rule 53 (op -> term .) + yacc.py:2687: arroba reduce using rule 53 (op -> term .) + yacc.py:2687: dot reduce using rule 53 (op -> term .) + yacc.py:2687: of reduce using rule 53 (op -> term .) + yacc.py:2687: then reduce using rule 53 (op -> term .) + yacc.py:2687: loop reduce using rule 53 (op -> term .) + yacc.py:2687: comma reduce using rule 53 (op -> term .) + yacc.py:2687: in reduce using rule 53 (op -> term .) + yacc.py:2687: else reduce using rule 53 (op -> term .) + yacc.py:2687: pool reduce using rule 53 (op -> term .) + yacc.py:2687: ccur reduce using rule 53 (op -> term .) + yacc.py:2687: fi reduce using rule 53 (op -> term .) + yacc.py:2687: star shift and go to state 119 + yacc.py:2687: div shift and go to state 120 + yacc.py:2689: + yacc.py:2696: ! star [ reduce using rule 53 (op -> term .) ] + yacc.py:2696: ! div [ reduce using rule 53 (op -> term .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 76 + yacc.py:2563: + yacc.py:2565: (56) term -> base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 56 (term -> base_call .) + yacc.py:2687: div reduce using rule 56 (term -> base_call .) + yacc.py:2687: plus reduce using rule 56 (term -> base_call .) + yacc.py:2687: minus reduce using rule 56 (term -> base_call .) + yacc.py:2687: less reduce using rule 56 (term -> base_call .) + yacc.py:2687: lesseq reduce using rule 56 (term -> base_call .) + yacc.py:2687: equal reduce using rule 56 (term -> base_call .) + yacc.py:2687: semi reduce using rule 56 (term -> base_call .) + yacc.py:2687: cpar reduce using rule 56 (term -> base_call .) + yacc.py:2687: arroba reduce using rule 56 (term -> base_call .) + yacc.py:2687: dot reduce using rule 56 (term -> base_call .) + yacc.py:2687: of reduce using rule 56 (term -> base_call .) + yacc.py:2687: then reduce using rule 56 (term -> base_call .) + yacc.py:2687: loop reduce using rule 56 (term -> base_call .) + yacc.py:2687: comma reduce using rule 56 (term -> base_call .) + yacc.py:2687: in reduce using rule 56 (term -> base_call .) + yacc.py:2687: else reduce using rule 56 (term -> base_call .) + yacc.py:2687: pool reduce using rule 56 (term -> base_call .) + yacc.py:2687: ccur reduce using rule 56 (term -> base_call .) + yacc.py:2687: fi reduce using rule 56 (term -> base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 77 + yacc.py:2563: + yacc.py:2565: (59) base_call -> factor . arroba type dot func_call + yacc.py:2565: (60) base_call -> factor . + yacc.py:2565: (62) base_call -> factor . arroba error dot func_call + yacc.py:2565: (65) factor -> factor . dot func_call + yacc.py:2566: + yacc.py:2609: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2666: ! shift/reduce conflict for dot resolved as shift + yacc.py:2687: arroba shift and go to state 121 + yacc.py:2687: star reduce using rule 60 (base_call -> factor .) + yacc.py:2687: div reduce using rule 60 (base_call -> factor .) + yacc.py:2687: plus reduce using rule 60 (base_call -> factor .) + yacc.py:2687: minus reduce using rule 60 (base_call -> factor .) + yacc.py:2687: less reduce using rule 60 (base_call -> factor .) + yacc.py:2687: lesseq reduce using rule 60 (base_call -> factor .) + yacc.py:2687: equal reduce using rule 60 (base_call -> factor .) + yacc.py:2687: semi reduce using rule 60 (base_call -> factor .) + yacc.py:2687: cpar reduce using rule 60 (base_call -> factor .) + yacc.py:2687: of reduce using rule 60 (base_call -> factor .) + yacc.py:2687: then reduce using rule 60 (base_call -> factor .) + yacc.py:2687: loop reduce using rule 60 (base_call -> factor .) + yacc.py:2687: comma reduce using rule 60 (base_call -> factor .) + yacc.py:2687: in reduce using rule 60 (base_call -> factor .) + yacc.py:2687: else reduce using rule 60 (base_call -> factor .) + yacc.py:2687: pool reduce using rule 60 (base_call -> factor .) + yacc.py:2687: ccur reduce using rule 60 (base_call -> factor .) + yacc.py:2687: fi reduce using rule 60 (base_call -> factor .) + yacc.py:2687: dot shift and go to state 122 + yacc.py:2689: + yacc.py:2696: ! arroba [ reduce using rule 60 (base_call -> factor .) ] + yacc.py:2696: ! dot [ reduce using rule 60 (base_call -> factor .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 78 + yacc.py:2563: + yacc.py:2565: (67) factor -> func_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 67 (factor -> func_call .) + yacc.py:2687: dot reduce using rule 67 (factor -> func_call .) + yacc.py:2687: star reduce using rule 67 (factor -> func_call .) + yacc.py:2687: div reduce using rule 67 (factor -> func_call .) + yacc.py:2687: plus reduce using rule 67 (factor -> func_call .) + yacc.py:2687: minus reduce using rule 67 (factor -> func_call .) + yacc.py:2687: less reduce using rule 67 (factor -> func_call .) + yacc.py:2687: lesseq reduce using rule 67 (factor -> func_call .) + yacc.py:2687: equal reduce using rule 67 (factor -> func_call .) + yacc.py:2687: semi reduce using rule 67 (factor -> func_call .) + yacc.py:2687: cpar reduce using rule 67 (factor -> func_call .) + yacc.py:2687: of reduce using rule 67 (factor -> func_call .) + yacc.py:2687: then reduce using rule 67 (factor -> func_call .) + yacc.py:2687: loop reduce using rule 67 (factor -> func_call .) + yacc.py:2687: comma reduce using rule 67 (factor -> func_call .) + yacc.py:2687: in reduce using rule 67 (factor -> func_call .) + yacc.py:2687: else reduce using rule 67 (factor -> func_call .) + yacc.py:2687: pool reduce using rule 67 (factor -> func_call .) + yacc.py:2687: ccur reduce using rule 67 (factor -> func_call .) + yacc.py:2687: fi reduce using rule 67 (factor -> func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 79 + yacc.py:2563: + yacc.py:2565: (63) factor -> atom . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 63 (factor -> atom .) + yacc.py:2687: dot reduce using rule 63 (factor -> atom .) + yacc.py:2687: star reduce using rule 63 (factor -> atom .) + yacc.py:2687: div reduce using rule 63 (factor -> atom .) + yacc.py:2687: plus reduce using rule 63 (factor -> atom .) + yacc.py:2687: minus reduce using rule 63 (factor -> atom .) + yacc.py:2687: less reduce using rule 63 (factor -> atom .) + yacc.py:2687: lesseq reduce using rule 63 (factor -> atom .) + yacc.py:2687: equal reduce using rule 63 (factor -> atom .) + yacc.py:2687: semi reduce using rule 63 (factor -> atom .) + yacc.py:2687: cpar reduce using rule 63 (factor -> atom .) + yacc.py:2687: of reduce using rule 63 (factor -> atom .) + yacc.py:2687: then reduce using rule 63 (factor -> atom .) + yacc.py:2687: loop reduce using rule 63 (factor -> atom .) + yacc.py:2687: comma reduce using rule 63 (factor -> atom .) + yacc.py:2687: in reduce using rule 63 (factor -> atom .) + yacc.py:2687: else reduce using rule 63 (factor -> atom .) + yacc.py:2687: pool reduce using rule 63 (factor -> atom .) + yacc.py:2687: ccur reduce using rule 63 (factor -> atom .) + yacc.py:2687: fi reduce using rule 63 (factor -> atom .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 80 + yacc.py:2563: + yacc.py:2565: (64) factor -> opar . expr cpar + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 123 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 81 + yacc.py:2563: + yacc.py:2565: (66) factor -> not . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 124 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 82 + yacc.py:2563: + yacc.py:2565: (68) factor -> isvoid . base_call + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 125 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 83 + yacc.py:2563: + yacc.py:2565: (69) factor -> nox . base_call + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 127 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 84 + yacc.py:2563: + yacc.py:2565: (70) factor -> let . let_list in expr + yacc.py:2565: (36) let_list -> . let_assign + yacc.py:2565: (37) let_list -> . let_assign comma let_list + yacc.py:2565: (38) let_assign -> . param larrow expr + yacc.py:2565: (39) let_assign -> . param + yacc.py:2565: (35) param -> . id colon type + yacc.py:2566: + yacc.py:2687: id shift and go to state 46 + yacc.py:2689: + yacc.py:2714: let_list shift and go to state 128 + yacc.py:2714: let_assign shift and go to state 129 + yacc.py:2714: param shift and go to state 130 + yacc.py:2561: + yacc.py:2562:state 85 + yacc.py:2563: + yacc.py:2565: (71) factor -> case . expr of cases_list esac + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 131 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 86 + yacc.py:2563: + yacc.py:2565: (72) factor -> if . expr then expr else expr fi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 132 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 87 + yacc.py:2563: + yacc.py:2565: (73) factor -> while . expr loop expr pool + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 133 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 88 + yacc.py:2563: + yacc.py:2565: (74) atom -> num . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 74 (atom -> num .) + yacc.py:2687: dot reduce using rule 74 (atom -> num .) + yacc.py:2687: star reduce using rule 74 (atom -> num .) + yacc.py:2687: div reduce using rule 74 (atom -> num .) + yacc.py:2687: plus reduce using rule 74 (atom -> num .) + yacc.py:2687: minus reduce using rule 74 (atom -> num .) + yacc.py:2687: less reduce using rule 74 (atom -> num .) + yacc.py:2687: lesseq reduce using rule 74 (atom -> num .) + yacc.py:2687: equal reduce using rule 74 (atom -> num .) + yacc.py:2687: semi reduce using rule 74 (atom -> num .) + yacc.py:2687: cpar reduce using rule 74 (atom -> num .) + yacc.py:2687: of reduce using rule 74 (atom -> num .) + yacc.py:2687: then reduce using rule 74 (atom -> num .) + yacc.py:2687: loop reduce using rule 74 (atom -> num .) + yacc.py:2687: comma reduce using rule 74 (atom -> num .) + yacc.py:2687: in reduce using rule 74 (atom -> num .) + yacc.py:2687: else reduce using rule 74 (atom -> num .) + yacc.py:2687: pool reduce using rule 74 (atom -> num .) + yacc.py:2687: ccur reduce using rule 74 (atom -> num .) + yacc.py:2687: fi reduce using rule 74 (atom -> num .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 89 + yacc.py:2563: + yacc.py:2565: (76) atom -> new . type + yacc.py:2566: + yacc.py:2687: type shift and go to state 134 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 90 + yacc.py:2563: + yacc.py:2565: (77) atom -> ocur . block ccur + yacc.py:2565: (79) atom -> ocur . error ccur + yacc.py:2565: (80) atom -> ocur . block error + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 136 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: block shift and go to state 135 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 91 + yacc.py:2563: + yacc.py:2565: (81) atom -> true . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 81 (atom -> true .) + yacc.py:2687: dot reduce using rule 81 (atom -> true .) + yacc.py:2687: star reduce using rule 81 (atom -> true .) + yacc.py:2687: div reduce using rule 81 (atom -> true .) + yacc.py:2687: plus reduce using rule 81 (atom -> true .) + yacc.py:2687: minus reduce using rule 81 (atom -> true .) + yacc.py:2687: less reduce using rule 81 (atom -> true .) + yacc.py:2687: lesseq reduce using rule 81 (atom -> true .) + yacc.py:2687: equal reduce using rule 81 (atom -> true .) + yacc.py:2687: semi reduce using rule 81 (atom -> true .) + yacc.py:2687: cpar reduce using rule 81 (atom -> true .) + yacc.py:2687: of reduce using rule 81 (atom -> true .) + yacc.py:2687: then reduce using rule 81 (atom -> true .) + yacc.py:2687: loop reduce using rule 81 (atom -> true .) + yacc.py:2687: comma reduce using rule 81 (atom -> true .) + yacc.py:2687: in reduce using rule 81 (atom -> true .) + yacc.py:2687: else reduce using rule 81 (atom -> true .) + yacc.py:2687: pool reduce using rule 81 (atom -> true .) + yacc.py:2687: ccur reduce using rule 81 (atom -> true .) + yacc.py:2687: fi reduce using rule 81 (atom -> true .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 92 + yacc.py:2563: + yacc.py:2565: (82) atom -> false . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 82 (atom -> false .) + yacc.py:2687: dot reduce using rule 82 (atom -> false .) + yacc.py:2687: star reduce using rule 82 (atom -> false .) + yacc.py:2687: div reduce using rule 82 (atom -> false .) + yacc.py:2687: plus reduce using rule 82 (atom -> false .) + yacc.py:2687: minus reduce using rule 82 (atom -> false .) + yacc.py:2687: less reduce using rule 82 (atom -> false .) + yacc.py:2687: lesseq reduce using rule 82 (atom -> false .) + yacc.py:2687: equal reduce using rule 82 (atom -> false .) + yacc.py:2687: semi reduce using rule 82 (atom -> false .) + yacc.py:2687: cpar reduce using rule 82 (atom -> false .) + yacc.py:2687: of reduce using rule 82 (atom -> false .) + yacc.py:2687: then reduce using rule 82 (atom -> false .) + yacc.py:2687: loop reduce using rule 82 (atom -> false .) + yacc.py:2687: comma reduce using rule 82 (atom -> false .) + yacc.py:2687: in reduce using rule 82 (atom -> false .) + yacc.py:2687: else reduce using rule 82 (atom -> false .) + yacc.py:2687: pool reduce using rule 82 (atom -> false .) + yacc.py:2687: ccur reduce using rule 82 (atom -> false .) + yacc.py:2687: fi reduce using rule 82 (atom -> false .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 93 + yacc.py:2563: + yacc.py:2565: (83) atom -> string . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 83 (atom -> string .) + yacc.py:2687: dot reduce using rule 83 (atom -> string .) + yacc.py:2687: star reduce using rule 83 (atom -> string .) + yacc.py:2687: div reduce using rule 83 (atom -> string .) + yacc.py:2687: plus reduce using rule 83 (atom -> string .) + yacc.py:2687: minus reduce using rule 83 (atom -> string .) + yacc.py:2687: less reduce using rule 83 (atom -> string .) + yacc.py:2687: lesseq reduce using rule 83 (atom -> string .) + yacc.py:2687: equal reduce using rule 83 (atom -> string .) + yacc.py:2687: semi reduce using rule 83 (atom -> string .) + yacc.py:2687: cpar reduce using rule 83 (atom -> string .) + yacc.py:2687: of reduce using rule 83 (atom -> string .) + yacc.py:2687: then reduce using rule 83 (atom -> string .) + yacc.py:2687: loop reduce using rule 83 (atom -> string .) + yacc.py:2687: comma reduce using rule 83 (atom -> string .) + yacc.py:2687: in reduce using rule 83 (atom -> string .) + yacc.py:2687: else reduce using rule 83 (atom -> string .) + yacc.py:2687: pool reduce using rule 83 (atom -> string .) + yacc.py:2687: ccur reduce using rule 83 (atom -> string .) + yacc.py:2687: fi reduce using rule 83 (atom -> string .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 94 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar colon . type ocur expr ccur + yacc.py:2566: + yacc.py:2687: type shift and go to state 137 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 95 + yacc.py:2563: + yacc.py:2565: (33) param_list -> param comma param_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 33 (param_list -> param comma param_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 96 + yacc.py:2563: + yacc.py:2565: (35) param -> id colon type . + yacc.py:2566: + yacc.py:2687: comma reduce using rule 35 (param -> id colon type .) + yacc.py:2687: cpar reduce using rule 35 (param -> id colon type .) + yacc.py:2687: larrow reduce using rule 35 (param -> id colon type .) + yacc.py:2687: in reduce using rule 35 (param -> id colon type .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 97 + yacc.py:2563: + yacc.py:2565: (19) def_attr -> id colon type larrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 19 (def_attr -> id colon type larrow expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 98 + yacc.py:2563: + yacc.py:2565: (24) def_attr -> id colon type larrow error . + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: semi reduce using rule 24 (def_attr -> id colon type larrow error .) + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 99 + yacc.py:2563: + yacc.py:2565: (23) def_attr -> id colon error larrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 23 (def_attr -> id colon error larrow expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 100 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar colon . type ocur expr ccur + yacc.py:2565: (28) def_func -> id opar formals cpar colon . error ocur expr ccur + yacc.py:2565: (29) def_func -> id opar formals cpar colon . type ocur error ccur + yacc.py:2566: + yacc.py:2687: type shift and go to state 138 + yacc.py:2687: error shift and go to state 139 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 101 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar colon . type ocur expr ccur + yacc.py:2566: + yacc.py:2687: type shift and go to state 140 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 102 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 103 + yacc.py:2563: + yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list ccur error . + yacc.py:2566: + yacc.py:2687: error reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) + yacc.py:2687: class reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) + yacc.py:2687: $end reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 104 + yacc.py:2563: + yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 105 + yacc.py:2563: + yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 106 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 107 + yacc.py:2563: + yacc.py:2565: (86) block -> error . block + yacc.py:2565: (87) block -> error . semi + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: semi shift and go to state 142 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: block shift and go to state 141 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 108 + yacc.py:2563: + yacc.py:2565: (61) base_call -> error arroba . type dot func_call + yacc.py:2566: + yacc.py:2687: type shift and go to state 143 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 109 + yacc.py:2563: + yacc.py:2565: (78) atom -> error block . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 144 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 110 + yacc.py:2563: + yacc.py:2565: (90) func_call -> error opar . args cpar + yacc.py:2565: (64) factor -> opar . expr cpar + yacc.py:2565: (91) args -> . arg_list + yacc.py:2565: (92) args -> . arg_list_empty + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (96) arg_list_empty -> . epsilon + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 145 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: args shift and go to state 146 + yacc.py:2714: expr shift and go to state 147 + yacc.py:2714: arg_list shift and go to state 148 + yacc.py:2714: arg_list_empty shift and go to state 149 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: epsilon shift and go to state 150 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 111 + yacc.py:2563: + yacc.py:2565: (84) block -> expr . semi + yacc.py:2565: (85) block -> expr . semi block + yacc.py:2566: + yacc.py:2687: semi shift and go to state 151 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 112 + yacc.py:2563: + yacc.py:2565: (45) expr -> id larrow . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 152 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 113 + yacc.py:2563: + yacc.py:2565: (88) func_call -> id opar . args cpar + yacc.py:2565: (89) func_call -> id opar . error cpar + yacc.py:2565: (91) args -> . arg_list + yacc.py:2565: (92) args -> . arg_list_empty + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (96) arg_list_empty -> . epsilon + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 154 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: args shift and go to state 153 + yacc.py:2714: arg_list shift and go to state 148 + yacc.py:2714: arg_list_empty shift and go to state 149 + yacc.py:2714: expr shift and go to state 155 + yacc.py:2714: epsilon shift and go to state 150 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 114 + yacc.py:2563: + yacc.py:2565: (47) comp -> comp less . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: op shift and go to state 156 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 115 + yacc.py:2563: + yacc.py:2565: (48) comp -> comp lesseq . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: op shift and go to state 157 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 116 + yacc.py:2563: + yacc.py:2565: (49) comp -> comp equal . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: op shift and go to state 158 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 117 + yacc.py:2563: + yacc.py:2565: (51) op -> op plus . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: term shift and go to state 159 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 118 + yacc.py:2563: + yacc.py:2565: (52) op -> op minus . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: term shift and go to state 160 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 119 + yacc.py:2563: + yacc.py:2565: (54) term -> term star . base_call + yacc.py:2565: (57) term -> term star . error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 162 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 161 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 120 + yacc.py:2563: + yacc.py:2565: (55) term -> term div . base_call + yacc.py:2565: (58) term -> term div . error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 164 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 163 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 121 + yacc.py:2563: + yacc.py:2565: (59) base_call -> factor arroba . type dot func_call + yacc.py:2565: (62) base_call -> factor arroba . error dot func_call + yacc.py:2566: + yacc.py:2687: type shift and go to state 165 + yacc.py:2687: error shift and go to state 166 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 122 + yacc.py:2563: + yacc.py:2565: (65) factor -> factor dot . func_call + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 168 + yacc.py:2687: error shift and go to state 169 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 167 + yacc.py:2561: + yacc.py:2562:state 123 + yacc.py:2563: + yacc.py:2565: (64) factor -> opar expr . cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 170 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 124 + yacc.py:2563: + yacc.py:2565: (66) factor -> not expr . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 66 (factor -> not expr .) + yacc.py:2687: dot reduce using rule 66 (factor -> not expr .) + yacc.py:2687: star reduce using rule 66 (factor -> not expr .) + yacc.py:2687: div reduce using rule 66 (factor -> not expr .) + yacc.py:2687: plus reduce using rule 66 (factor -> not expr .) + yacc.py:2687: minus reduce using rule 66 (factor -> not expr .) + yacc.py:2687: less reduce using rule 66 (factor -> not expr .) + yacc.py:2687: lesseq reduce using rule 66 (factor -> not expr .) + yacc.py:2687: equal reduce using rule 66 (factor -> not expr .) + yacc.py:2687: semi reduce using rule 66 (factor -> not expr .) + yacc.py:2687: cpar reduce using rule 66 (factor -> not expr .) + yacc.py:2687: of reduce using rule 66 (factor -> not expr .) + yacc.py:2687: then reduce using rule 66 (factor -> not expr .) + yacc.py:2687: loop reduce using rule 66 (factor -> not expr .) + yacc.py:2687: comma reduce using rule 66 (factor -> not expr .) + yacc.py:2687: in reduce using rule 66 (factor -> not expr .) + yacc.py:2687: else reduce using rule 66 (factor -> not expr .) + yacc.py:2687: pool reduce using rule 66 (factor -> not expr .) + yacc.py:2687: ccur reduce using rule 66 (factor -> not expr .) + yacc.py:2687: fi reduce using rule 66 (factor -> not expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 125 + yacc.py:2563: + yacc.py:2565: (68) factor -> isvoid base_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: dot reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: star reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: div reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: plus reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: minus reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: less reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: lesseq reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: equal reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: semi reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: cpar reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: of reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: then reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: loop reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: comma reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: in reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: else reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: pool reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: ccur reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: fi reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 126 + yacc.py:2563: + yacc.py:2565: (75) atom -> id . + yacc.py:2565: (88) func_call -> id . opar args cpar + yacc.py:2565: (89) func_call -> id . opar error cpar + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 75 (atom -> id .) + yacc.py:2687: dot reduce using rule 75 (atom -> id .) + yacc.py:2687: star reduce using rule 75 (atom -> id .) + yacc.py:2687: div reduce using rule 75 (atom -> id .) + yacc.py:2687: plus reduce using rule 75 (atom -> id .) + yacc.py:2687: minus reduce using rule 75 (atom -> id .) + yacc.py:2687: less reduce using rule 75 (atom -> id .) + yacc.py:2687: lesseq reduce using rule 75 (atom -> id .) + yacc.py:2687: equal reduce using rule 75 (atom -> id .) + yacc.py:2687: semi reduce using rule 75 (atom -> id .) + yacc.py:2687: cpar reduce using rule 75 (atom -> id .) + yacc.py:2687: of reduce using rule 75 (atom -> id .) + yacc.py:2687: then reduce using rule 75 (atom -> id .) + yacc.py:2687: loop reduce using rule 75 (atom -> id .) + yacc.py:2687: comma reduce using rule 75 (atom -> id .) + yacc.py:2687: in reduce using rule 75 (atom -> id .) + yacc.py:2687: else reduce using rule 75 (atom -> id .) + yacc.py:2687: pool reduce using rule 75 (atom -> id .) + yacc.py:2687: ccur reduce using rule 75 (atom -> id .) + yacc.py:2687: fi reduce using rule 75 (atom -> id .) + yacc.py:2687: opar shift and go to state 113 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 127 + yacc.py:2563: + yacc.py:2565: (69) factor -> nox base_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: dot reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: star reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: div reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: plus reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: minus reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: less reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: lesseq reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: equal reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: semi reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: cpar reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: of reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: then reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: loop reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: comma reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: in reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: else reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: pool reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: ccur reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: fi reduce using rule 69 (factor -> nox base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 128 + yacc.py:2563: + yacc.py:2565: (70) factor -> let let_list . in expr + yacc.py:2566: + yacc.py:2687: in shift and go to state 171 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 129 + yacc.py:2563: + yacc.py:2565: (36) let_list -> let_assign . + yacc.py:2565: (37) let_list -> let_assign . comma let_list + yacc.py:2566: + yacc.py:2687: in reduce using rule 36 (let_list -> let_assign .) + yacc.py:2687: comma shift and go to state 172 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 130 + yacc.py:2563: + yacc.py:2565: (38) let_assign -> param . larrow expr + yacc.py:2565: (39) let_assign -> param . + yacc.py:2566: + yacc.py:2687: larrow shift and go to state 173 + yacc.py:2687: comma reduce using rule 39 (let_assign -> param .) + yacc.py:2687: in reduce using rule 39 (let_assign -> param .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 131 + yacc.py:2563: + yacc.py:2565: (71) factor -> case expr . of cases_list esac + yacc.py:2566: + yacc.py:2687: of shift and go to state 174 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 132 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr . then expr else expr fi + yacc.py:2566: + yacc.py:2687: then shift and go to state 175 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 133 + yacc.py:2563: + yacc.py:2565: (73) factor -> while expr . loop expr pool + yacc.py:2566: + yacc.py:2687: loop shift and go to state 176 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 134 + yacc.py:2563: + yacc.py:2565: (76) atom -> new type . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 76 (atom -> new type .) + yacc.py:2687: dot reduce using rule 76 (atom -> new type .) + yacc.py:2687: star reduce using rule 76 (atom -> new type .) + yacc.py:2687: div reduce using rule 76 (atom -> new type .) + yacc.py:2687: plus reduce using rule 76 (atom -> new type .) + yacc.py:2687: minus reduce using rule 76 (atom -> new type .) + yacc.py:2687: less reduce using rule 76 (atom -> new type .) + yacc.py:2687: lesseq reduce using rule 76 (atom -> new type .) + yacc.py:2687: equal reduce using rule 76 (atom -> new type .) + yacc.py:2687: semi reduce using rule 76 (atom -> new type .) + yacc.py:2687: cpar reduce using rule 76 (atom -> new type .) + yacc.py:2687: of reduce using rule 76 (atom -> new type .) + yacc.py:2687: then reduce using rule 76 (atom -> new type .) + yacc.py:2687: loop reduce using rule 76 (atom -> new type .) + yacc.py:2687: comma reduce using rule 76 (atom -> new type .) + yacc.py:2687: in reduce using rule 76 (atom -> new type .) + yacc.py:2687: else reduce using rule 76 (atom -> new type .) + yacc.py:2687: pool reduce using rule 76 (atom -> new type .) + yacc.py:2687: ccur reduce using rule 76 (atom -> new type .) + yacc.py:2687: fi reduce using rule 76 (atom -> new type .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 135 + yacc.py:2563: + yacc.py:2565: (77) atom -> ocur block . ccur + yacc.py:2565: (80) atom -> ocur block . error + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 177 + yacc.py:2687: error shift and go to state 178 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 136 + yacc.py:2563: + yacc.py:2565: (79) atom -> ocur error . ccur + yacc.py:2565: (86) block -> error . block + yacc.py:2565: (87) block -> error . semi + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 179 + yacc.py:2687: semi shift and go to state 142 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: block shift and go to state 141 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 137 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar colon type . ocur expr ccur + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 180 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 138 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar colon type . ocur expr ccur + yacc.py:2565: (29) def_func -> id opar formals cpar colon type . ocur error ccur + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 181 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 139 + yacc.py:2563: + yacc.py:2565: (28) def_func -> id opar formals cpar colon error . ocur expr ccur + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 182 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 140 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar colon type . ocur expr ccur + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 183 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 141 + yacc.py:2563: + yacc.py:2565: (86) block -> error block . + yacc.py:2565: (78) atom -> error block . ccur + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for ccur resolved as shift + yacc.py:2687: error reduce using rule 86 (block -> error block .) + yacc.py:2687: ccur shift and go to state 144 + yacc.py:2689: + yacc.py:2696: ! ccur [ reduce using rule 86 (block -> error block .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 142 + yacc.py:2563: + yacc.py:2565: (87) block -> error semi . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 87 (block -> error semi .) + yacc.py:2687: error reduce using rule 87 (block -> error semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 143 + yacc.py:2563: + yacc.py:2565: (61) base_call -> error arroba type . dot func_call + yacc.py:2566: + yacc.py:2687: dot shift and go to state 184 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 144 + yacc.py:2563: + yacc.py:2565: (78) atom -> error block ccur . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: dot reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: star reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: div reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: plus reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: minus reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: less reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: lesseq reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: equal reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: semi reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: cpar reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: of reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: then reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: loop reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: comma reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: in reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: else reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: pool reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: ccur reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: fi reduce using rule 78 (atom -> error block ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 145 + yacc.py:2563: + yacc.py:2565: (95) arg_list -> error . arg_list + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 185 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: arg_list shift and go to state 186 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 187 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 146 + yacc.py:2563: + yacc.py:2565: (90) func_call -> error opar args . cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 188 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 147 + yacc.py:2563: + yacc.py:2565: (64) factor -> opar expr . cpar + yacc.py:2565: (93) arg_list -> expr . + yacc.py:2565: (94) arg_list -> expr . comma arg_list + yacc.py:2566: + yacc.py:2609: ! shift/reduce conflict for cpar resolved as shift + yacc.py:2687: cpar shift and go to state 170 + yacc.py:2687: comma shift and go to state 189 + yacc.py:2689: + yacc.py:2696: ! cpar [ reduce using rule 93 (arg_list -> expr .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 148 + yacc.py:2563: + yacc.py:2565: (91) args -> arg_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 91 (args -> arg_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 149 + yacc.py:2563: + yacc.py:2565: (92) args -> arg_list_empty . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 92 (args -> arg_list_empty .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 150 + yacc.py:2563: + yacc.py:2565: (96) arg_list_empty -> epsilon . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 96 (arg_list_empty -> epsilon .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 151 + yacc.py:2563: + yacc.py:2565: (84) block -> expr semi . + yacc.py:2565: (85) block -> expr semi . block + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for error resolved as shift + yacc.py:2687: ccur reduce using rule 84 (block -> expr semi .) + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2696: ! error [ reduce using rule 84 (block -> expr semi .) ] + yacc.py:2700: + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: block shift and go to state 190 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 152 + yacc.py:2563: + yacc.py:2565: (45) expr -> id larrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: cpar reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: arroba reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: dot reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: star reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: div reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: plus reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: minus reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: less reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: lesseq reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: equal reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: of reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: then reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: loop reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: comma reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: in reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: else reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: pool reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: ccur reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: fi reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 153 + yacc.py:2563: + yacc.py:2565: (88) func_call -> id opar args . cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 191 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 154 + yacc.py:2563: + yacc.py:2565: (89) func_call -> id opar error . cpar + yacc.py:2565: (95) arg_list -> error . arg_list + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 192 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 185 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: arg_list shift and go to state 186 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 187 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 155 + yacc.py:2563: + yacc.py:2565: (93) arg_list -> expr . + yacc.py:2565: (94) arg_list -> expr . comma arg_list + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 93 (arg_list -> expr .) + yacc.py:2687: comma shift and go to state 189 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 156 + yacc.py:2563: + yacc.py:2565: (47) comp -> comp less op . + yacc.py:2565: (51) op -> op . plus term + yacc.py:2565: (52) op -> op . minus term + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for plus resolved as shift + yacc.py:2666: ! shift/reduce conflict for minus resolved as shift + yacc.py:2687: less reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: lesseq reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: equal reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: semi reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: cpar reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: arroba reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: dot reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: star reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: div reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: of reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: then reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: loop reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: comma reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: in reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: else reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: pool reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: ccur reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: fi reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: plus shift and go to state 117 + yacc.py:2687: minus shift and go to state 118 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 47 (comp -> comp less op .) ] + yacc.py:2696: ! minus [ reduce using rule 47 (comp -> comp less op .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 157 + yacc.py:2563: + yacc.py:2565: (48) comp -> comp lesseq op . + yacc.py:2565: (51) op -> op . plus term + yacc.py:2565: (52) op -> op . minus term + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for plus resolved as shift + yacc.py:2666: ! shift/reduce conflict for minus resolved as shift + yacc.py:2687: less reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: lesseq reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: equal reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: semi reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: cpar reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: arroba reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: dot reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: star reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: div reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: of reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: then reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: loop reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: comma reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: in reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: else reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: pool reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: ccur reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: fi reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: plus shift and go to state 117 + yacc.py:2687: minus shift and go to state 118 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 48 (comp -> comp lesseq op .) ] + yacc.py:2696: ! minus [ reduce using rule 48 (comp -> comp lesseq op .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 158 + yacc.py:2563: + yacc.py:2565: (49) comp -> comp equal op . + yacc.py:2565: (51) op -> op . plus term + yacc.py:2565: (52) op -> op . minus term + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for plus resolved as shift + yacc.py:2666: ! shift/reduce conflict for minus resolved as shift + yacc.py:2687: less reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: lesseq reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: equal reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: semi reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: cpar reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: arroba reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: dot reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: star reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: div reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: of reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: then reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: loop reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: comma reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: in reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: else reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: pool reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: ccur reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: fi reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: plus shift and go to state 117 + yacc.py:2687: minus shift and go to state 118 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 49 (comp -> comp equal op .) ] + yacc.py:2696: ! minus [ reduce using rule 49 (comp -> comp equal op .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 159 + yacc.py:2563: + yacc.py:2565: (51) op -> op plus term . + yacc.py:2565: (54) term -> term . star base_call + yacc.py:2565: (55) term -> term . div base_call + yacc.py:2565: (57) term -> term . star error + yacc.py:2565: (58) term -> term . div error + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for star resolved as shift + yacc.py:2666: ! shift/reduce conflict for div resolved as shift + yacc.py:2687: plus reduce using rule 51 (op -> op plus term .) + yacc.py:2687: minus reduce using rule 51 (op -> op plus term .) + yacc.py:2687: less reduce using rule 51 (op -> op plus term .) + yacc.py:2687: lesseq reduce using rule 51 (op -> op plus term .) + yacc.py:2687: equal reduce using rule 51 (op -> op plus term .) + yacc.py:2687: semi reduce using rule 51 (op -> op plus term .) + yacc.py:2687: cpar reduce using rule 51 (op -> op plus term .) + yacc.py:2687: arroba reduce using rule 51 (op -> op plus term .) + yacc.py:2687: dot reduce using rule 51 (op -> op plus term .) + yacc.py:2687: of reduce using rule 51 (op -> op plus term .) + yacc.py:2687: then reduce using rule 51 (op -> op plus term .) + yacc.py:2687: loop reduce using rule 51 (op -> op plus term .) + yacc.py:2687: comma reduce using rule 51 (op -> op plus term .) + yacc.py:2687: in reduce using rule 51 (op -> op plus term .) + yacc.py:2687: else reduce using rule 51 (op -> op plus term .) + yacc.py:2687: pool reduce using rule 51 (op -> op plus term .) + yacc.py:2687: ccur reduce using rule 51 (op -> op plus term .) + yacc.py:2687: fi reduce using rule 51 (op -> op plus term .) + yacc.py:2687: star shift and go to state 119 + yacc.py:2687: div shift and go to state 120 + yacc.py:2689: + yacc.py:2696: ! star [ reduce using rule 51 (op -> op plus term .) ] + yacc.py:2696: ! div [ reduce using rule 51 (op -> op plus term .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 160 + yacc.py:2563: + yacc.py:2565: (52) op -> op minus term . + yacc.py:2565: (54) term -> term . star base_call + yacc.py:2565: (55) term -> term . div base_call + yacc.py:2565: (57) term -> term . star error + yacc.py:2565: (58) term -> term . div error + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for star resolved as shift + yacc.py:2666: ! shift/reduce conflict for div resolved as shift + yacc.py:2687: plus reduce using rule 52 (op -> op minus term .) + yacc.py:2687: minus reduce using rule 52 (op -> op minus term .) + yacc.py:2687: less reduce using rule 52 (op -> op minus term .) + yacc.py:2687: lesseq reduce using rule 52 (op -> op minus term .) + yacc.py:2687: equal reduce using rule 52 (op -> op minus term .) + yacc.py:2687: semi reduce using rule 52 (op -> op minus term .) + yacc.py:2687: cpar reduce using rule 52 (op -> op minus term .) + yacc.py:2687: arroba reduce using rule 52 (op -> op minus term .) + yacc.py:2687: dot reduce using rule 52 (op -> op minus term .) + yacc.py:2687: of reduce using rule 52 (op -> op minus term .) + yacc.py:2687: then reduce using rule 52 (op -> op minus term .) + yacc.py:2687: loop reduce using rule 52 (op -> op minus term .) + yacc.py:2687: comma reduce using rule 52 (op -> op minus term .) + yacc.py:2687: in reduce using rule 52 (op -> op minus term .) + yacc.py:2687: else reduce using rule 52 (op -> op minus term .) + yacc.py:2687: pool reduce using rule 52 (op -> op minus term .) + yacc.py:2687: ccur reduce using rule 52 (op -> op minus term .) + yacc.py:2687: fi reduce using rule 52 (op -> op minus term .) + yacc.py:2687: star shift and go to state 119 + yacc.py:2687: div shift and go to state 120 + yacc.py:2689: + yacc.py:2696: ! star [ reduce using rule 52 (op -> op minus term .) ] + yacc.py:2696: ! div [ reduce using rule 52 (op -> op minus term .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 161 + yacc.py:2563: + yacc.py:2565: (54) term -> term star base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: div reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: plus reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: minus reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: less reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: lesseq reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: equal reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: semi reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: cpar reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: arroba reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: dot reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: of reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: then reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: loop reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: comma reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: in reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: else reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: pool reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: ccur reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: fi reduce using rule 54 (term -> term star base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 162 + yacc.py:2563: + yacc.py:2565: (57) term -> term star error . + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2687: star reduce using rule 57 (term -> term star error .) + yacc.py:2687: div reduce using rule 57 (term -> term star error .) + yacc.py:2687: plus reduce using rule 57 (term -> term star error .) + yacc.py:2687: minus reduce using rule 57 (term -> term star error .) + yacc.py:2687: less reduce using rule 57 (term -> term star error .) + yacc.py:2687: lesseq reduce using rule 57 (term -> term star error .) + yacc.py:2687: equal reduce using rule 57 (term -> term star error .) + yacc.py:2687: semi reduce using rule 57 (term -> term star error .) + yacc.py:2687: cpar reduce using rule 57 (term -> term star error .) + yacc.py:2687: dot reduce using rule 57 (term -> term star error .) + yacc.py:2687: of reduce using rule 57 (term -> term star error .) + yacc.py:2687: then reduce using rule 57 (term -> term star error .) + yacc.py:2687: loop reduce using rule 57 (term -> term star error .) + yacc.py:2687: comma reduce using rule 57 (term -> term star error .) + yacc.py:2687: in reduce using rule 57 (term -> term star error .) + yacc.py:2687: else reduce using rule 57 (term -> term star error .) + yacc.py:2687: pool reduce using rule 57 (term -> term star error .) + yacc.py:2687: ccur reduce using rule 57 (term -> term star error .) + yacc.py:2687: fi reduce using rule 57 (term -> term star error .) + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2696: ! arroba [ reduce using rule 57 (term -> term star error .) ] + yacc.py:2700: + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 163 + yacc.py:2563: + yacc.py:2565: (55) term -> term div base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: div reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: plus reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: minus reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: less reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: lesseq reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: equal reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: semi reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: cpar reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: arroba reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: dot reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: of reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: then reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: loop reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: comma reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: in reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: else reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: pool reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: ccur reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: fi reduce using rule 55 (term -> term div base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 164 + yacc.py:2563: + yacc.py:2565: (58) term -> term div error . + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2687: star reduce using rule 58 (term -> term div error .) + yacc.py:2687: div reduce using rule 58 (term -> term div error .) + yacc.py:2687: plus reduce using rule 58 (term -> term div error .) + yacc.py:2687: minus reduce using rule 58 (term -> term div error .) + yacc.py:2687: less reduce using rule 58 (term -> term div error .) + yacc.py:2687: lesseq reduce using rule 58 (term -> term div error .) + yacc.py:2687: equal reduce using rule 58 (term -> term div error .) + yacc.py:2687: semi reduce using rule 58 (term -> term div error .) + yacc.py:2687: cpar reduce using rule 58 (term -> term div error .) + yacc.py:2687: dot reduce using rule 58 (term -> term div error .) + yacc.py:2687: of reduce using rule 58 (term -> term div error .) + yacc.py:2687: then reduce using rule 58 (term -> term div error .) + yacc.py:2687: loop reduce using rule 58 (term -> term div error .) + yacc.py:2687: comma reduce using rule 58 (term -> term div error .) + yacc.py:2687: in reduce using rule 58 (term -> term div error .) + yacc.py:2687: else reduce using rule 58 (term -> term div error .) + yacc.py:2687: pool reduce using rule 58 (term -> term div error .) + yacc.py:2687: ccur reduce using rule 58 (term -> term div error .) + yacc.py:2687: fi reduce using rule 58 (term -> term div error .) + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2696: ! arroba [ reduce using rule 58 (term -> term div error .) ] + yacc.py:2700: + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 165 + yacc.py:2563: + yacc.py:2565: (59) base_call -> factor arroba type . dot func_call + yacc.py:2566: + yacc.py:2687: dot shift and go to state 193 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 166 + yacc.py:2563: + yacc.py:2565: (62) base_call -> factor arroba error . dot func_call + yacc.py:2566: + yacc.py:2687: dot shift and go to state 194 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 167 + yacc.py:2563: + yacc.py:2565: (65) factor -> factor dot func_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: dot reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: star reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: div reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: plus reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: minus reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: less reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: lesseq reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: equal reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: semi reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: cpar reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: of reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: then reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: loop reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: comma reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: in reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: else reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: pool reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: ccur reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: fi reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 168 + yacc.py:2563: + yacc.py:2565: (88) func_call -> id . opar args cpar + yacc.py:2565: (89) func_call -> id . opar error cpar + yacc.py:2566: + yacc.py:2687: opar shift and go to state 113 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 169 + yacc.py:2563: + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2566: + yacc.py:2687: opar shift and go to state 195 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 170 + yacc.py:2563: + yacc.py:2565: (64) factor -> opar expr cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: dot reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: star reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: div reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: plus reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: minus reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: less reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: lesseq reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: equal reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: semi reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: cpar reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: of reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: then reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: loop reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: comma reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: in reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: else reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: pool reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: ccur reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: fi reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 171 + yacc.py:2563: + yacc.py:2565: (70) factor -> let let_list in . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 196 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 172 + yacc.py:2563: + yacc.py:2565: (37) let_list -> let_assign comma . let_list + yacc.py:2565: (36) let_list -> . let_assign + yacc.py:2565: (37) let_list -> . let_assign comma let_list + yacc.py:2565: (38) let_assign -> . param larrow expr + yacc.py:2565: (39) let_assign -> . param + yacc.py:2565: (35) param -> . id colon type + yacc.py:2566: + yacc.py:2687: id shift and go to state 46 + yacc.py:2689: + yacc.py:2714: let_assign shift and go to state 129 + yacc.py:2714: let_list shift and go to state 197 + yacc.py:2714: param shift and go to state 130 + yacc.py:2561: + yacc.py:2562:state 173 + yacc.py:2563: + yacc.py:2565: (38) let_assign -> param larrow . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 198 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 174 + yacc.py:2563: + yacc.py:2565: (71) factor -> case expr of . cases_list esac + yacc.py:2565: (40) cases_list -> . casep semi + yacc.py:2565: (41) cases_list -> . casep semi cases_list + yacc.py:2565: (42) cases_list -> . error cases_list + yacc.py:2565: (43) cases_list -> . error semi + yacc.py:2565: (44) casep -> . id colon type rarrow expr + yacc.py:2566: + yacc.py:2687: error shift and go to state 201 + yacc.py:2687: id shift and go to state 202 + yacc.py:2689: + yacc.py:2714: cases_list shift and go to state 199 + yacc.py:2714: casep shift and go to state 200 + yacc.py:2561: + yacc.py:2562:state 175 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr then . expr else expr fi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 203 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 176 + yacc.py:2563: + yacc.py:2565: (73) factor -> while expr loop . expr pool + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 204 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 177 + yacc.py:2563: + yacc.py:2565: (77) atom -> ocur block ccur . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: dot reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: star reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: div reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: plus reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: minus reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: less reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: lesseq reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: equal reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: semi reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: cpar reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: of reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: then reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: loop reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: comma reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: in reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: else reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: pool reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: ccur reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: fi reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 178 + yacc.py:2563: + yacc.py:2565: (80) atom -> ocur block error . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: dot reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: star reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: div reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: plus reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: minus reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: less reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: lesseq reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: equal reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: semi reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: cpar reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: of reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: then reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: loop reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: comma reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: in reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: else reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: pool reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: ccur reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: fi reduce using rule 80 (atom -> ocur block error .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 179 + yacc.py:2563: + yacc.py:2565: (79) atom -> ocur error ccur . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: dot reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: star reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: div reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: plus reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: minus reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: less reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: lesseq reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: equal reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: semi reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: cpar reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: of reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: then reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: loop reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: comma reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: in reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: else reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: pool reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: ccur reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: fi reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 180 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur . expr ccur + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 205 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 181 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur . expr ccur + yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur . error ccur + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 207 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 206 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 182 + yacc.py:2563: + yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur . expr ccur + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 208 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 183 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur . expr ccur + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 209 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 184 + yacc.py:2563: + yacc.py:2565: (61) base_call -> error arroba type dot . func_call + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 168 + yacc.py:2687: error shift and go to state 169 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 210 + yacc.py:2561: + yacc.py:2562:state 185 + yacc.py:2563: + yacc.py:2565: (95) arg_list -> error . arg_list + yacc.py:2565: (86) block -> error . block + yacc.py:2565: (87) block -> error . semi + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: semi shift and go to state 142 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 185 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: arg_list shift and go to state 186 + yacc.py:2714: block shift and go to state 141 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: expr shift and go to state 187 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 186 + yacc.py:2563: + yacc.py:2565: (95) arg_list -> error arg_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 95 (arg_list -> error arg_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 187 + yacc.py:2563: + yacc.py:2565: (93) arg_list -> expr . + yacc.py:2565: (94) arg_list -> expr . comma arg_list + yacc.py:2565: (84) block -> expr . semi + yacc.py:2565: (85) block -> expr . semi block + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 93 (arg_list -> expr .) + yacc.py:2687: comma shift and go to state 189 + yacc.py:2687: semi shift and go to state 151 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 188 + yacc.py:2563: + yacc.py:2565: (90) func_call -> error opar args cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: dot reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: star reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: div reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: plus reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: minus reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: less reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: lesseq reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: equal reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: semi reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: cpar reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: of reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: then reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: loop reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: comma reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: in reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: else reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: pool reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: ccur reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: fi reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 189 + yacc.py:2563: + yacc.py:2565: (94) arg_list -> expr comma . arg_list + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 145 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 155 + yacc.py:2714: arg_list shift and go to state 211 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 190 + yacc.py:2563: + yacc.py:2565: (85) block -> expr semi block . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 85 (block -> expr semi block .) + yacc.py:2687: error reduce using rule 85 (block -> expr semi block .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 191 + yacc.py:2563: + yacc.py:2565: (88) func_call -> id opar args cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: dot reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: star reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: div reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: plus reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: minus reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: less reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: lesseq reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: equal reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: semi reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: cpar reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: of reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: then reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: loop reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: comma reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: in reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: else reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: pool reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: ccur reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: fi reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 192 + yacc.py:2563: + yacc.py:2565: (89) func_call -> id opar error cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: dot reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: star reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: div reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: plus reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: minus reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: less reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: lesseq reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: equal reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: semi reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: cpar reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: of reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: then reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: loop reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: comma reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: in reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: else reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: pool reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: ccur reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: fi reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 193 + yacc.py:2563: + yacc.py:2565: (59) base_call -> factor arroba type dot . func_call + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 168 + yacc.py:2687: error shift and go to state 169 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 212 + yacc.py:2561: + yacc.py:2562:state 194 + yacc.py:2563: + yacc.py:2565: (62) base_call -> factor arroba error dot . func_call + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 168 + yacc.py:2687: error shift and go to state 169 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 213 + yacc.py:2561: + yacc.py:2562:state 195 + yacc.py:2563: + yacc.py:2565: (90) func_call -> error opar . args cpar + yacc.py:2565: (91) args -> . arg_list + yacc.py:2565: (92) args -> . arg_list_empty + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (96) arg_list_empty -> . epsilon + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 145 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: args shift and go to state 146 + yacc.py:2714: arg_list shift and go to state 148 + yacc.py:2714: arg_list_empty shift and go to state 149 + yacc.py:2714: expr shift and go to state 155 + yacc.py:2714: epsilon shift and go to state 150 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 196 + yacc.py:2563: + yacc.py:2565: (70) factor -> let let_list in expr . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: dot reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: star reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: div reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: plus reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: minus reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: less reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: lesseq reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: equal reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: semi reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: cpar reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: of reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: then reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: loop reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: comma reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: in reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: else reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: pool reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: ccur reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: fi reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 197 + yacc.py:2563: + yacc.py:2565: (37) let_list -> let_assign comma let_list . + yacc.py:2566: + yacc.py:2687: in reduce using rule 37 (let_list -> let_assign comma let_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 198 + yacc.py:2563: + yacc.py:2565: (38) let_assign -> param larrow expr . + yacc.py:2566: + yacc.py:2687: comma reduce using rule 38 (let_assign -> param larrow expr .) + yacc.py:2687: in reduce using rule 38 (let_assign -> param larrow expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 199 + yacc.py:2563: + yacc.py:2565: (71) factor -> case expr of cases_list . esac + yacc.py:2566: + yacc.py:2687: esac shift and go to state 214 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 200 + yacc.py:2563: + yacc.py:2565: (40) cases_list -> casep . semi + yacc.py:2565: (41) cases_list -> casep . semi cases_list + yacc.py:2566: + yacc.py:2687: semi shift and go to state 215 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 201 + yacc.py:2563: + yacc.py:2565: (42) cases_list -> error . cases_list + yacc.py:2565: (43) cases_list -> error . semi + yacc.py:2565: (40) cases_list -> . casep semi + yacc.py:2565: (41) cases_list -> . casep semi cases_list + yacc.py:2565: (42) cases_list -> . error cases_list + yacc.py:2565: (43) cases_list -> . error semi + yacc.py:2565: (44) casep -> . id colon type rarrow expr + yacc.py:2566: + yacc.py:2687: semi shift and go to state 217 + yacc.py:2687: error shift and go to state 201 + yacc.py:2687: id shift and go to state 202 + yacc.py:2689: + yacc.py:2714: cases_list shift and go to state 216 + yacc.py:2714: casep shift and go to state 200 + yacc.py:2561: + yacc.py:2562:state 202 + yacc.py:2563: + yacc.py:2565: (44) casep -> id . colon type rarrow expr + yacc.py:2566: + yacc.py:2687: colon shift and go to state 218 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 203 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr then expr . else expr fi + yacc.py:2566: + yacc.py:2687: else shift and go to state 219 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 204 + yacc.py:2563: + yacc.py:2565: (73) factor -> while expr loop expr . pool + yacc.py:2566: + yacc.py:2687: pool shift and go to state 220 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 205 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 221 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 206 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 222 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 207 + yacc.py:2563: + yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur error . ccur + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 223 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 208 + yacc.py:2563: + yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 224 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 209 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 225 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 210 + yacc.py:2563: + yacc.py:2565: (61) base_call -> error arroba type dot func_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: div reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: plus reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: minus reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: less reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: lesseq reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: equal reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: semi reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: cpar reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: arroba reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: dot reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: of reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: then reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: loop reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: comma reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: in reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: else reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: pool reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: ccur reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: fi reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 211 + yacc.py:2563: + yacc.py:2565: (94) arg_list -> expr comma arg_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 94 (arg_list -> expr comma arg_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 212 + yacc.py:2563: + yacc.py:2565: (59) base_call -> factor arroba type dot func_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: div reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: plus reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: minus reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: less reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: lesseq reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: equal reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: semi reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: cpar reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: arroba reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: dot reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: of reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: then reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: loop reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: comma reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: in reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: else reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: pool reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: ccur reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: fi reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 213 + yacc.py:2563: + yacc.py:2565: (62) base_call -> factor arroba error dot func_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: div reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: plus reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: minus reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: less reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: lesseq reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: equal reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: semi reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: cpar reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: arroba reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: dot reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: of reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: then reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: loop reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: comma reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: in reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: else reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: pool reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: ccur reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: fi reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 214 + yacc.py:2563: + yacc.py:2565: (71) factor -> case expr of cases_list esac . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: dot reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: star reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: div reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: plus reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: minus reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: less reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: lesseq reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: equal reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: semi reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: cpar reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: of reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: then reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: loop reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: comma reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: in reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: else reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: pool reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: ccur reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: fi reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 215 + yacc.py:2563: + yacc.py:2565: (40) cases_list -> casep semi . + yacc.py:2565: (41) cases_list -> casep semi . cases_list + yacc.py:2565: (40) cases_list -> . casep semi + yacc.py:2565: (41) cases_list -> . casep semi cases_list + yacc.py:2565: (42) cases_list -> . error cases_list + yacc.py:2565: (43) cases_list -> . error semi + yacc.py:2565: (44) casep -> . id colon type rarrow expr + yacc.py:2566: + yacc.py:2687: esac reduce using rule 40 (cases_list -> casep semi .) + yacc.py:2687: error shift and go to state 201 + yacc.py:2687: id shift and go to state 202 + yacc.py:2689: + yacc.py:2714: casep shift and go to state 200 + yacc.py:2714: cases_list shift and go to state 226 + yacc.py:2561: + yacc.py:2562:state 216 + yacc.py:2563: + yacc.py:2565: (42) cases_list -> error cases_list . + yacc.py:2566: + yacc.py:2687: esac reduce using rule 42 (cases_list -> error cases_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 217 + yacc.py:2563: + yacc.py:2565: (43) cases_list -> error semi . + yacc.py:2566: + yacc.py:2687: esac reduce using rule 43 (cases_list -> error semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 218 + yacc.py:2563: + yacc.py:2565: (44) casep -> id colon . type rarrow expr + yacc.py:2566: + yacc.py:2687: type shift and go to state 227 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 219 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr then expr else . expr fi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 228 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 220 + yacc.py:2563: + yacc.py:2565: (73) factor -> while expr loop expr pool . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: dot reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: star reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: div reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: plus reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: minus reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: less reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: lesseq reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: equal reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: semi reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: cpar reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: of reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: then reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: loop reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: comma reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: in reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: else reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: pool reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: ccur reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: fi reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 221 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 26 (def_func -> error opar formals cpar colon type ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 222 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 25 (def_func -> id opar formals cpar colon type ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 223 + yacc.py:2563: + yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur error ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 29 (def_func -> id opar formals cpar colon type ocur error ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 224 + yacc.py:2563: + yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 28 (def_func -> id opar formals cpar colon error ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 225 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 27 (def_func -> id opar error cpar colon type ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 226 + yacc.py:2563: + yacc.py:2565: (41) cases_list -> casep semi cases_list . + yacc.py:2566: + yacc.py:2687: esac reduce using rule 41 (cases_list -> casep semi cases_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 227 + yacc.py:2563: + yacc.py:2565: (44) casep -> id colon type . rarrow expr + yacc.py:2566: + yacc.py:2687: rarrow shift and go to state 229 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 228 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr then expr else expr . fi + yacc.py:2566: + yacc.py:2687: fi shift and go to state 230 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 229 + yacc.py:2563: + yacc.py:2565: (44) casep -> id colon type rarrow . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 231 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 230 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr then expr else expr fi . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: dot reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: star reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: div reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: plus reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: minus reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: less reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: lesseq reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: equal reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: semi reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: cpar reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: of reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: then reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: loop reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: comma reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: in reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: else reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: pool reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: ccur reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: fi reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 231 + yacc.py:2563: + yacc.py:2565: (44) casep -> id colon type rarrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 44 (casep -> id colon type rarrow expr .) + yacc.py:2689: + yacc.py:3447:24 shift/reduce conflicts + yacc.py:3457: + yacc.py:3458:Conflicts: + yacc.py:3459: + yacc.py:3462:shift/reduce conflict for less in state 73 resolved as shift + yacc.py:3462:shift/reduce conflict for lesseq in state 73 resolved as shift + yacc.py:3462:shift/reduce conflict for equal in state 73 resolved as shift + yacc.py:3462:shift/reduce conflict for plus in state 74 resolved as shift + yacc.py:3462:shift/reduce conflict for minus in state 74 resolved as shift + yacc.py:3462:shift/reduce conflict for star in state 75 resolved as shift + yacc.py:3462:shift/reduce conflict for div in state 75 resolved as shift + yacc.py:3462:shift/reduce conflict for arroba in state 77 resolved as shift + yacc.py:3462:shift/reduce conflict for dot in state 77 resolved as shift + yacc.py:3462:shift/reduce conflict for ccur in state 141 resolved as shift + yacc.py:3462:shift/reduce conflict for cpar in state 147 resolved as shift + yacc.py:3462:shift/reduce conflict for error in state 151 resolved as shift + yacc.py:3462:shift/reduce conflict for plus in state 156 resolved as shift + yacc.py:3462:shift/reduce conflict for minus in state 156 resolved as shift + yacc.py:3462:shift/reduce conflict for plus in state 157 resolved as shift + yacc.py:3462:shift/reduce conflict for minus in state 157 resolved as shift + yacc.py:3462:shift/reduce conflict for plus in state 158 resolved as shift + yacc.py:3462:shift/reduce conflict for minus in state 158 resolved as shift + yacc.py:3462:shift/reduce conflict for star in state 159 resolved as shift + yacc.py:3462:shift/reduce conflict for div in state 159 resolved as shift + yacc.py:3462:shift/reduce conflict for star in state 160 resolved as shift + yacc.py:3462:shift/reduce conflict for div in state 160 resolved as shift + yacc.py:3462:shift/reduce conflict for arroba in state 162 resolved as shift + yacc.py:3462:shift/reduce conflict for arroba in state 164 resolved as shift + yacc.py: 362:PLY: PARSE DEBUG START + yacc.py: 410: + yacc.py: 411:State : 0 + yacc.py: 435:Stack : . LexToken(class,'class',1,0) + yacc.py: 445:Action : Shift and goto state 5 + yacc.py: 410: + yacc.py: 411:State : 5 + yacc.py: 435:Stack : class . LexToken(type,'Main',1,6) + yacc.py: 445:Action : Shift and goto state 8 + yacc.py: 410: + yacc.py: 411:State : 8 + yacc.py: 435:Stack : class type . LexToken(ocur,'{',1,11) + yacc.py: 445:Action : Shift and goto state 10 + yacc.py: 410: + yacc.py: 411:State : 10 + yacc.py: 435:Stack : class type ocur . LexToken(id,'main',3,18) + yacc.py: 445:Action : Shift and goto state 19 + yacc.py: 410: + yacc.py: 411:State : 19 + yacc.py: 435:Stack : class type ocur id . LexToken(opar,'(',3,22) + yacc.py: 445:Action : Shift and goto state 32 + yacc.py: 410: + yacc.py: 411:State : 32 + yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',3,23) + yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',3,23) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',3,23) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',3,23) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : class type ocur id opar formals cpar . LexToken(colon,':',3,24) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon . LexToken(type,'Object',3,26) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type . LexToken(ocur,'{',3,33) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur . LexToken(opar,'(',4,43) + yacc.py: 445:Action : Shift and goto state 80 + yacc.py: 410: + yacc.py: 411:State : 80 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar . LexToken(new,'new',4,44) + yacc.py: 445:Action : Shift and goto state 89 + yacc.py: 410: + yacc.py: 411:State : 89 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new . LexToken(type,'Alpha',4,48) + yacc.py: 445:Action : Shift and goto state 134 + yacc.py: 410: + yacc.py: 411:State : 134 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',4,53) + yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar epsilon . LexToken(cpar,')',4,61) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar arg_list_empty . LexToken(cpar,')',4,61) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args . LexToken(cpar,')',4,61) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args cpar . LexToken(ccur,'}',5,67) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['print','(',[],')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) + yacc.py: 410: + yacc.py: 411:State : 167 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot func_call . LexToken(ccur,'}',5,67) + yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 16 + yacc.py: 430:Defaulted state 16: Reduce using 14 + yacc.py: 435:Stack : class type ocur def_func semi epsilon . LexToken(ccur,'}',6,70) + yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 48 + yacc.py: 430:Defaulted state 48: Reduce using 16 + yacc.py: 435:Stack : class type ocur def_func semi feature_list . LexToken(ccur,'}',6,70) + yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['test1',':','Int'] and goto state 17 + yacc.py: 506:Result : ( id] with ['test3'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',12,146) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',12,146) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',12,146) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar . LexToken(colon,':',12,147) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon . LexToken(type,'Int',12,149) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',12,153) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur . LexToken(num,2.0,13,163) + yacc.py: 445:Action : Shift and goto state 88 + yacc.py: 410: + yacc.py: 411:State : 88 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur num . LexToken(minus,'-',13,165) + yacc.py: 471:Action : Reduce rule [atom -> num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 160 + yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( string] with ['1'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 + yacc.py: 506:Result : ( id colon type] with ['a',':','Alpha'] and goto state 44 + yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param . LexToken(comma,',',19,226) + yacc.py: 445:Action : Shift and goto state 60 + yacc.py: 410: + yacc.py: 411:State : 60 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma . LexToken(id,'b',19,228) + yacc.py: 445:Action : Shift and goto state 46 + yacc.py: 410: + yacc.py: 411:State : 46 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id . LexToken(colon,':',19,229) + yacc.py: 445:Action : Shift and goto state 61 + yacc.py: 410: + yacc.py: 411:State : 61 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon . LexToken(type,'Int',19,231) + yacc.py: 445:Action : Shift and goto state 96 + yacc.py: 410: + yacc.py: 411:State : 96 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon type . LexToken(cpar,')',19,234) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['b',':','Int'] and goto state 44 + yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param . LexToken(cpar,')',19,234) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 + yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) + yacc.py: 410: + yacc.py: 411:State : 95 + yacc.py: 430:Defaulted state 95: Reduce using 33 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param_list . LexToken(cpar,')',19,234) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 410: + yacc.py: 411:State : 42 + yacc.py: 430:Defaulted state 42: Reduce using 30 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param_list . LexToken(cpar,')',19,234) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals . LexToken(cpar,')',19,234) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar . LexToken(colon,':',19,235) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon . LexToken(type,'Int',19,237) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',19,241) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur . LexToken(let,'let',20,251) + yacc.py: 445:Action : Shift and goto state 84 + yacc.py: 410: + yacc.py: 411:State : 84 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let . LexToken(id,'count',20,255) + yacc.py: 445:Action : Shift and goto state 46 + yacc.py: 410: + yacc.py: 411:State : 46 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id . LexToken(colon,':',20,260) + yacc.py: 445:Action : Shift and goto state 61 + yacc.py: 410: + yacc.py: 411:State : 61 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon . LexToken(type,'Int',20,262) + yacc.py: 445:Action : Shift and goto state 96 + yacc.py: 410: + yacc.py: 411:State : 96 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon type . LexToken(comma,',',20,265) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['count',':','Int'] and goto state 130 + yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) + yacc.py: 410: + yacc.py: 411:State : 130 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let param . LexToken(comma,',',20,265) + yacc.py: 471:Action : Reduce rule [let_assign -> param] with [] and goto state 129 + yacc.py: 506:Result : ( id colon type] with ['pow',':','Int'] and goto state 130 + yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) + yacc.py: 410: + yacc.py: 411:State : 130 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param . LexToken(larrow,'<-',20,276) + yacc.py: 445:Action : Shift and goto state 173 + yacc.py: 410: + yacc.py: 411:State : 173 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow . LexToken(num,1.0,20,279) + yacc.py: 445:Action : Shift and goto state 88 + yacc.py: 410: + yacc.py: 411:State : 88 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow num . LexToken(in,'in',21,329) + yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 + yacc.py: 506:Result : ( let_assign] with [] and goto state 197 + yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 + yacc.py: 506:Result : ([ num] with [0.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 196 + yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',26,389) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',26,389) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',26,389) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar . LexToken(colon,':',26,390) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon . LexToken(type,'Int',26,392) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',26,396) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'testing2',27,406) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id . LexToken(opar,'(',27,414) + yacc.py: 445:Action : Shift and goto state 113 + yacc.py: 410: + yacc.py: 411:State : 113 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar . LexToken(new,'new',27,415) + yacc.py: 445:Action : Shift and goto state 89 + yacc.py: 410: + yacc.py: 411:State : 89 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new . LexToken(type,'Alpha',27,419) + yacc.py: 445:Action : Shift and goto state 134 + yacc.py: 410: + yacc.py: 411:State : 134 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new type . LexToken(comma,',',27,424) + yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',30,450) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',30,450) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',30,450) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',30,451) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'Int',30,453) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',30,457) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'test1',31,467) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(larrow,'<-',31,473) + yacc.py: 445:Action : Shift and goto state 112 + yacc.py: 410: + yacc.py: 411:State : 112 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow . LexToken(opar,'(',31,477) + yacc.py: 445:Action : Shift and goto state 80 + yacc.py: 410: + yacc.py: 411:State : 80 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar . LexToken(num,1.0,31,478) + yacc.py: 445:Action : Shift and goto state 88 + yacc.py: 410: + yacc.py: 411:State : 88 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar num . LexToken(plus,'+',31,480) + yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 16 + yacc.py: 430:Defaulted state 16: Reduce using 14 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',33,543) + yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 48 + yacc.py: 430:Defaulted state 48: Reduce using 16 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',33,543) + yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar epsilon . LexToken(cpar,')',37,601) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list_empty . LexToken(cpar,')',37,601) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',37,601) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar . LexToken(colon,':',37,603) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon . LexToken(type,'Object',37,605) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',37,612) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur . LexToken(id,'out_string',38,622) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id . LexToken(opar,'(',38,632) + yacc.py: 445:Action : Shift and goto state 113 + yacc.py: 410: + yacc.py: 411:State : 113 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id opar . LexToken(string,'reached!!\n',38,645) + yacc.py: 445:Action : Shift and goto state 93 + yacc.py: 410: + yacc.py: 411:State : 93 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id opar string . LexToken(cpar,')',38,646) + yacc.py: 471:Action : Reduce rule [atom -> string] with ['reached!!\n'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 16 + yacc.py: 430:Defaulted state 16: Reduce using 14 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi epsilon . LexToken(ccur,'}',40,655) + yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 48 + yacc.py: 430:Defaulted state 48: Reduce using 16 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi feature_list . LexToken(ccur,'}',40,655) + yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( program -Rule 1 program -> class_list -Rule 2 epsilon -> -Rule 3 class_list -> def_class class_list -Rule 4 class_list -> def_class -Rule 5 class_list -> error class_list -Rule 6 def_class -> class type ocur feature_list ccur semi -Rule 7 def_class -> class type inherits type ocur feature_list ccur semi -Rule 8 def_class -> class error ocur feature_list ccur semi -Rule 9 def_class -> class error inherits type ocur feature_list ccur semi -Rule 10 def_class -> class error inherits error ocur feature_list ccur semi -Rule 11 def_class -> class type inherits error ocur feature_list ccur semi -Rule 12 feature_list -> epsilon -Rule 13 feature_list -> def_attr semi feature_list -Rule 14 feature_list -> def_func semi feature_list -Rule 15 feature_list -> error feature_list -Rule 16 def_attr -> id colon type -Rule 17 def_attr -> id colon type larrow expr -Rule 18 def_attr -> error colon type -Rule 19 def_attr -> id colon error -Rule 20 def_attr -> error colon type larrow expr -Rule 21 def_attr -> id colon error larrow expr -Rule 22 def_attr -> id colon type larrow error -Rule 23 def_func -> id opar formals cpar colon type ocur expr ccur -Rule 24 def_func -> error opar formals cpar colon type ocur expr ccur -Rule 25 def_func -> id opar error cpar colon type ocur expr ccur -Rule 26 def_func -> id opar formals cpar colon error ocur expr ccur -Rule 27 def_func -> id opar formals cpar colon type ocur error ccur -Rule 28 formals -> param_list -Rule 29 formals -> param_list_empty -Rule 30 param_list -> param -Rule 31 param_list -> param comma param_list -Rule 32 param_list -> error param_list -Rule 33 param_list_empty -> epsilon -Rule 34 param -> id colon type -Rule 35 expr -> let let_list in expr -Rule 36 expr -> let error in expr -Rule 37 expr -> let let_list in error -Rule 38 expr -> case expr of cases_list esac -Rule 39 expr -> case error of cases_list esac -Rule 40 expr -> case expr of error esac -Rule 41 expr -> if expr then expr else expr fi -Rule 42 expr -> if error then expr else expr fi -Rule 43 expr -> if expr then error else expr fi -Rule 44 expr -> if expr then expr else error fi -Rule 45 expr -> while expr loop expr pool -Rule 46 expr -> while error loop expr pool -Rule 47 expr -> while expr loop error pool -Rule 48 expr -> while expr loop expr error -Rule 49 expr -> arith -Rule 50 let_list -> let_assign -Rule 51 let_list -> let_assign comma let_list -Rule 52 let_list -> error let_list -Rule 53 let_assign -> param larrow expr -Rule 54 let_assign -> param -Rule 55 cases_list -> casep semi -Rule 56 cases_list -> casep semi cases_list -Rule 57 cases_list -> error cases_list -Rule 58 casep -> id colon type rarrow expr -Rule 59 arith -> id larrow expr -Rule 60 arith -> not comp -Rule 61 arith -> comp -Rule 62 comp -> comp less op -Rule 63 comp -> comp lesseq op -Rule 64 comp -> comp equal op -Rule 65 comp -> op -Rule 66 op -> op plus term -Rule 67 op -> op minus term -Rule 68 op -> term -Rule 69 term -> term star base_call -Rule 70 term -> term div base_call -Rule 71 term -> isvoid base_call -Rule 72 term -> nox base_call -Rule 73 term -> base_call -Rule 74 base_call -> factor arroba type dot func_call -Rule 75 base_call -> factor -Rule 76 factor -> atom -Rule 77 factor -> opar expr cpar -Rule 78 factor -> factor dot func_call -Rule 79 factor -> func_call -Rule 80 atom -> num -Rule 81 atom -> id -Rule 82 atom -> new type -Rule 83 atom -> new error -Rule 84 atom -> ocur block ccur -Rule 85 atom -> true -Rule 86 atom -> false -Rule 87 atom -> string -Rule 88 block -> expr semi -Rule 89 block -> expr semi block -Rule 90 block -> error block -Rule 91 block -> error -Rule 92 func_call -> id opar args cpar -Rule 93 args -> arg_list -Rule 94 args -> arg_list_empty -Rule 95 arg_list -> expr -Rule 96 arg_list -> expr comma arg_list -Rule 97 arg_list -> error arg_list -Rule 98 arg_list_empty -> epsilon - -Terminals, with rules where they appear - -arroba : 74 -case : 38 39 40 -ccur : 6 7 8 9 10 11 23 24 25 26 27 84 -class : 6 7 8 9 10 11 -colon : 16 17 18 19 20 21 22 23 24 25 26 27 34 58 -comma : 31 51 96 -cpar : 23 24 25 26 27 77 92 -div : 70 -dot : 74 78 -else : 41 42 43 44 -equal : 64 -error : 5 8 9 10 10 11 15 18 19 20 21 22 24 25 26 27 32 36 37 39 40 42 43 44 46 47 48 52 57 83 90 91 97 -esac : 38 39 40 -false : 86 -fi : 41 42 43 44 -id : 16 17 19 21 22 23 25 26 27 34 58 59 81 92 -if : 41 42 43 44 -in : 35 36 37 -inherits : 7 9 10 11 -isvoid : 71 -larrow : 17 20 21 22 53 59 -less : 62 -lesseq : 63 -let : 35 36 37 -loop : 45 46 47 48 -minus : 67 -new : 82 83 -not : 60 -nox : 72 -num : 80 -ocur : 6 7 8 9 10 11 23 24 25 26 27 84 -of : 38 39 40 -opar : 23 24 25 26 27 77 92 -plus : 66 -pool : 45 46 47 -rarrow : 58 -semi : 6 7 8 9 10 11 13 14 55 56 88 89 -star : 69 -string : 87 -then : 41 42 43 44 -true : 85 -type : 6 7 7 9 11 16 17 18 20 22 23 24 25 27 34 58 74 82 -while : 45 46 47 48 - -Nonterminals, with rules where they appear - -arg_list : 93 96 97 -arg_list_empty : 94 -args : 92 -arith : 49 -atom : 76 -base_call : 69 70 71 72 73 -block : 84 89 90 -casep : 55 56 -cases_list : 38 39 56 57 -class_list : 1 3 5 -comp : 60 61 62 63 64 -def_attr : 13 -def_class : 3 4 -def_func : 14 -epsilon : 12 33 98 -expr : 17 20 21 23 24 25 26 35 36 38 40 41 41 41 42 42 43 43 44 44 45 45 46 47 48 48 53 58 59 77 88 89 95 96 -factor : 74 75 78 -feature_list : 6 7 8 9 10 11 13 14 15 -formals : 23 24 26 27 -func_call : 74 78 79 -let_assign : 50 51 -let_list : 35 37 51 52 -op : 62 63 64 65 66 67 -param : 30 31 53 54 -param_list : 28 31 32 -param_list_empty : 29 -program : 0 -term : 66 67 68 69 70 - -Parsing method: LALR - -state 0 - - (0) S' -> . program - (1) program -> . class_list - (3) class_list -> . def_class class_list - (4) class_list -> . def_class - (5) class_list -> . error class_list - (6) def_class -> . class type ocur feature_list ccur semi - (7) def_class -> . class type inherits type ocur feature_list ccur semi - (8) def_class -> . class error ocur feature_list ccur semi - (9) def_class -> . class error inherits type ocur feature_list ccur semi - (10) def_class -> . class error inherits error ocur feature_list ccur semi - (11) def_class -> . class type inherits error ocur feature_list ccur semi - - error shift and go to state 4 - class shift and go to state 5 - - program shift and go to state 1 - class_list shift and go to state 2 - def_class shift and go to state 3 - -state 1 - - (0) S' -> program . - - - -state 2 - - (1) program -> class_list . - - $end reduce using rule 1 (program -> class_list .) - - -state 3 - - (3) class_list -> def_class . class_list - (4) class_list -> def_class . - (3) class_list -> . def_class class_list - (4) class_list -> . def_class - (5) class_list -> . error class_list - (6) def_class -> . class type ocur feature_list ccur semi - (7) def_class -> . class type inherits type ocur feature_list ccur semi - (8) def_class -> . class error ocur feature_list ccur semi - (9) def_class -> . class error inherits type ocur feature_list ccur semi - (10) def_class -> . class error inherits error ocur feature_list ccur semi - (11) def_class -> . class type inherits error ocur feature_list ccur semi - - $end reduce using rule 4 (class_list -> def_class .) - error shift and go to state 4 - class shift and go to state 5 - - def_class shift and go to state 3 - class_list shift and go to state 6 - -state 4 - - (5) class_list -> error . class_list - (3) class_list -> . def_class class_list - (4) class_list -> . def_class - (5) class_list -> . error class_list - (6) def_class -> . class type ocur feature_list ccur semi - (7) def_class -> . class type inherits type ocur feature_list ccur semi - (8) def_class -> . class error ocur feature_list ccur semi - (9) def_class -> . class error inherits type ocur feature_list ccur semi - (10) def_class -> . class error inherits error ocur feature_list ccur semi - (11) def_class -> . class type inherits error ocur feature_list ccur semi - - error shift and go to state 4 - class shift and go to state 5 - - class_list shift and go to state 7 - def_class shift and go to state 3 - -state 5 - - (6) def_class -> class . type ocur feature_list ccur semi - (7) def_class -> class . type inherits type ocur feature_list ccur semi - (8) def_class -> class . error ocur feature_list ccur semi - (9) def_class -> class . error inherits type ocur feature_list ccur semi - (10) def_class -> class . error inherits error ocur feature_list ccur semi - (11) def_class -> class . type inherits error ocur feature_list ccur semi - - type shift and go to state 8 - error shift and go to state 9 - - -state 6 - - (3) class_list -> def_class class_list . - - $end reduce using rule 3 (class_list -> def_class class_list .) - - -state 7 - - (5) class_list -> error class_list . - - $end reduce using rule 5 (class_list -> error class_list .) - - -state 8 - - (6) def_class -> class type . ocur feature_list ccur semi - (7) def_class -> class type . inherits type ocur feature_list ccur semi - (11) def_class -> class type . inherits error ocur feature_list ccur semi - - ocur shift and go to state 10 - inherits shift and go to state 11 - - -state 9 - - (8) def_class -> class error . ocur feature_list ccur semi - (9) def_class -> class error . inherits type ocur feature_list ccur semi - (10) def_class -> class error . inherits error ocur feature_list ccur semi - - ocur shift and go to state 12 - inherits shift and go to state 13 - - -state 10 - - (6) def_class -> class type ocur . feature_list ccur semi - (12) feature_list -> . epsilon - (13) feature_list -> . def_attr semi feature_list - (14) feature_list -> . def_func semi feature_list - (15) feature_list -> . error feature_list - (2) epsilon -> . - (16) def_attr -> . id colon type - (17) def_attr -> . id colon type larrow expr - (18) def_attr -> . error colon type - (19) def_attr -> . id colon error - (20) def_attr -> . error colon type larrow expr - (21) def_attr -> . id colon error larrow expr - (22) def_attr -> . id colon type larrow error - (23) def_func -> . id opar formals cpar colon type ocur expr ccur - (24) def_func -> . error opar formals cpar colon type ocur expr ccur - (25) def_func -> . id opar error cpar colon type ocur expr ccur - (26) def_func -> . id opar formals cpar colon error ocur expr ccur - (27) def_func -> . id opar formals cpar colon type ocur error ccur - - error shift and go to state 18 - ccur reduce using rule 2 (epsilon -> .) - id shift and go to state 19 - - feature_list shift and go to state 14 - epsilon shift and go to state 15 - def_attr shift and go to state 16 - def_func shift and go to state 17 - -state 11 - - (7) def_class -> class type inherits . type ocur feature_list ccur semi - (11) def_class -> class type inherits . error ocur feature_list ccur semi - - type shift and go to state 20 - error shift and go to state 21 - - -state 12 - - (8) def_class -> class error ocur . feature_list ccur semi - (12) feature_list -> . epsilon - (13) feature_list -> . def_attr semi feature_list - (14) feature_list -> . def_func semi feature_list - (15) feature_list -> . error feature_list - (2) epsilon -> . - (16) def_attr -> . id colon type - (17) def_attr -> . id colon type larrow expr - (18) def_attr -> . error colon type - (19) def_attr -> . id colon error - (20) def_attr -> . error colon type larrow expr - (21) def_attr -> . id colon error larrow expr - (22) def_attr -> . id colon type larrow error - (23) def_func -> . id opar formals cpar colon type ocur expr ccur - (24) def_func -> . error opar formals cpar colon type ocur expr ccur - (25) def_func -> . id opar error cpar colon type ocur expr ccur - (26) def_func -> . id opar formals cpar colon error ocur expr ccur - (27) def_func -> . id opar formals cpar colon type ocur error ccur - - error shift and go to state 18 - ccur reduce using rule 2 (epsilon -> .) - id shift and go to state 19 - - feature_list shift and go to state 22 - epsilon shift and go to state 15 - def_attr shift and go to state 16 - def_func shift and go to state 17 - -state 13 - - (9) def_class -> class error inherits . type ocur feature_list ccur semi - (10) def_class -> class error inherits . error ocur feature_list ccur semi - - type shift and go to state 24 - error shift and go to state 23 - - -state 14 - - (6) def_class -> class type ocur feature_list . ccur semi - - ccur shift and go to state 25 - - -state 15 - - (12) feature_list -> epsilon . - - ccur reduce using rule 12 (feature_list -> epsilon .) - - -state 16 - - (13) feature_list -> def_attr . semi feature_list - - semi shift and go to state 26 - - -state 17 - - (14) feature_list -> def_func . semi feature_list - - semi shift and go to state 27 - - -state 18 - - (15) feature_list -> error . feature_list - (18) def_attr -> error . colon type - (20) def_attr -> error . colon type larrow expr - (24) def_func -> error . opar formals cpar colon type ocur expr ccur - (12) feature_list -> . epsilon - (13) feature_list -> . def_attr semi feature_list - (14) feature_list -> . def_func semi feature_list - (15) feature_list -> . error feature_list - (2) epsilon -> . - (16) def_attr -> . id colon type - (17) def_attr -> . id colon type larrow expr - (18) def_attr -> . error colon type - (19) def_attr -> . id colon error - (20) def_attr -> . error colon type larrow expr - (21) def_attr -> . id colon error larrow expr - (22) def_attr -> . id colon type larrow error - (23) def_func -> . id opar formals cpar colon type ocur expr ccur - (24) def_func -> . error opar formals cpar colon type ocur expr ccur - (25) def_func -> . id opar error cpar colon type ocur expr ccur - (26) def_func -> . id opar formals cpar colon error ocur expr ccur - (27) def_func -> . id opar formals cpar colon type ocur error ccur - - colon shift and go to state 29 - opar shift and go to state 30 - error shift and go to state 18 - ccur reduce using rule 2 (epsilon -> .) - id shift and go to state 19 - - feature_list shift and go to state 28 - epsilon shift and go to state 15 - def_attr shift and go to state 16 - def_func shift and go to state 17 - -state 19 - - (16) def_attr -> id . colon type - (17) def_attr -> id . colon type larrow expr - (19) def_attr -> id . colon error - (21) def_attr -> id . colon error larrow expr - (22) def_attr -> id . colon type larrow error - (23) def_func -> id . opar formals cpar colon type ocur expr ccur - (25) def_func -> id . opar error cpar colon type ocur expr ccur - (26) def_func -> id . opar formals cpar colon error ocur expr ccur - (27) def_func -> id . opar formals cpar colon type ocur error ccur - - colon shift and go to state 31 - opar shift and go to state 32 - - -state 20 - - (7) def_class -> class type inherits type . ocur feature_list ccur semi - - ocur shift and go to state 33 - - -state 21 - - (11) def_class -> class type inherits error . ocur feature_list ccur semi - - ocur shift and go to state 34 - - -state 22 - - (8) def_class -> class error ocur feature_list . ccur semi - - ccur shift and go to state 35 - - -state 23 - - (10) def_class -> class error inherits error . ocur feature_list ccur semi - - ocur shift and go to state 36 - - -state 24 - - (9) def_class -> class error inherits type . ocur feature_list ccur semi - - ocur shift and go to state 37 - - -state 25 - - (6) def_class -> class type ocur feature_list ccur . semi - - semi shift and go to state 38 - - -state 26 - - (13) feature_list -> def_attr semi . feature_list - (12) feature_list -> . epsilon - (13) feature_list -> . def_attr semi feature_list - (14) feature_list -> . def_func semi feature_list - (15) feature_list -> . error feature_list - (2) epsilon -> . - (16) def_attr -> . id colon type - (17) def_attr -> . id colon type larrow expr - (18) def_attr -> . error colon type - (19) def_attr -> . id colon error - (20) def_attr -> . error colon type larrow expr - (21) def_attr -> . id colon error larrow expr - (22) def_attr -> . id colon type larrow error - (23) def_func -> . id opar formals cpar colon type ocur expr ccur - (24) def_func -> . error opar formals cpar colon type ocur expr ccur - (25) def_func -> . id opar error cpar colon type ocur expr ccur - (26) def_func -> . id opar formals cpar colon error ocur expr ccur - (27) def_func -> . id opar formals cpar colon type ocur error ccur - - error shift and go to state 18 - ccur reduce using rule 2 (epsilon -> .) - id shift and go to state 19 - - def_attr shift and go to state 16 - feature_list shift and go to state 39 - epsilon shift and go to state 15 - def_func shift and go to state 17 - -state 27 - - (14) feature_list -> def_func semi . feature_list - (12) feature_list -> . epsilon - (13) feature_list -> . def_attr semi feature_list - (14) feature_list -> . def_func semi feature_list - (15) feature_list -> . error feature_list - (2) epsilon -> . - (16) def_attr -> . id colon type - (17) def_attr -> . id colon type larrow expr - (18) def_attr -> . error colon type - (19) def_attr -> . id colon error - (20) def_attr -> . error colon type larrow expr - (21) def_attr -> . id colon error larrow expr - (22) def_attr -> . id colon type larrow error - (23) def_func -> . id opar formals cpar colon type ocur expr ccur - (24) def_func -> . error opar formals cpar colon type ocur expr ccur - (25) def_func -> . id opar error cpar colon type ocur expr ccur - (26) def_func -> . id opar formals cpar colon error ocur expr ccur - (27) def_func -> . id opar formals cpar colon type ocur error ccur - - error shift and go to state 18 - ccur reduce using rule 2 (epsilon -> .) - id shift and go to state 19 - - def_func shift and go to state 17 - feature_list shift and go to state 40 - epsilon shift and go to state 15 - def_attr shift and go to state 16 - -state 28 - - (15) feature_list -> error feature_list . - - ccur reduce using rule 15 (feature_list -> error feature_list .) - - -state 29 - - (18) def_attr -> error colon . type - (20) def_attr -> error colon . type larrow expr - - type shift and go to state 41 - - -state 30 - - (24) def_func -> error opar . formals cpar colon type ocur expr ccur - (28) formals -> . param_list - (29) formals -> . param_list_empty - (30) param_list -> . param - (31) param_list -> . param comma param_list - (32) param_list -> . error param_list - (33) param_list_empty -> . epsilon - (34) param -> . id colon type - (2) epsilon -> . - - error shift and go to state 42 - id shift and go to state 48 - cpar reduce using rule 2 (epsilon -> .) - - formals shift and go to state 43 - param_list shift and go to state 44 - param_list_empty shift and go to state 45 - param shift and go to state 46 - epsilon shift and go to state 47 - -state 31 - - (16) def_attr -> id colon . type - (17) def_attr -> id colon . type larrow expr - (19) def_attr -> id colon . error - (21) def_attr -> id colon . error larrow expr - (22) def_attr -> id colon . type larrow error - - type shift and go to state 49 - error shift and go to state 50 - - -state 32 - - (23) def_func -> id opar . formals cpar colon type ocur expr ccur - (25) def_func -> id opar . error cpar colon type ocur expr ccur - (26) def_func -> id opar . formals cpar colon error ocur expr ccur - (27) def_func -> id opar . formals cpar colon type ocur error ccur - (28) formals -> . param_list - (29) formals -> . param_list_empty - (30) param_list -> . param - (31) param_list -> . param comma param_list - (32) param_list -> . error param_list - (33) param_list_empty -> . epsilon - (34) param -> . id colon type - (2) epsilon -> . - - error shift and go to state 52 - id shift and go to state 48 - cpar reduce using rule 2 (epsilon -> .) - - formals shift and go to state 51 - param_list shift and go to state 44 - param_list_empty shift and go to state 45 - param shift and go to state 46 - epsilon shift and go to state 47 - -state 33 - - (7) def_class -> class type inherits type ocur . feature_list ccur semi - (12) feature_list -> . epsilon - (13) feature_list -> . def_attr semi feature_list - (14) feature_list -> . def_func semi feature_list - (15) feature_list -> . error feature_list - (2) epsilon -> . - (16) def_attr -> . id colon type - (17) def_attr -> . id colon type larrow expr - (18) def_attr -> . error colon type - (19) def_attr -> . id colon error - (20) def_attr -> . error colon type larrow expr - (21) def_attr -> . id colon error larrow expr - (22) def_attr -> . id colon type larrow error - (23) def_func -> . id opar formals cpar colon type ocur expr ccur - (24) def_func -> . error opar formals cpar colon type ocur expr ccur - (25) def_func -> . id opar error cpar colon type ocur expr ccur - (26) def_func -> . id opar formals cpar colon error ocur expr ccur - (27) def_func -> . id opar formals cpar colon type ocur error ccur - - error shift and go to state 18 - ccur reduce using rule 2 (epsilon -> .) - id shift and go to state 19 - - feature_list shift and go to state 53 - epsilon shift and go to state 15 - def_attr shift and go to state 16 - def_func shift and go to state 17 - -state 34 - - (11) def_class -> class type inherits error ocur . feature_list ccur semi - (12) feature_list -> . epsilon - (13) feature_list -> . def_attr semi feature_list - (14) feature_list -> . def_func semi feature_list - (15) feature_list -> . error feature_list - (2) epsilon -> . - (16) def_attr -> . id colon type - (17) def_attr -> . id colon type larrow expr - (18) def_attr -> . error colon type - (19) def_attr -> . id colon error - (20) def_attr -> . error colon type larrow expr - (21) def_attr -> . id colon error larrow expr - (22) def_attr -> . id colon type larrow error - (23) def_func -> . id opar formals cpar colon type ocur expr ccur - (24) def_func -> . error opar formals cpar colon type ocur expr ccur - (25) def_func -> . id opar error cpar colon type ocur expr ccur - (26) def_func -> . id opar formals cpar colon error ocur expr ccur - (27) def_func -> . id opar formals cpar colon type ocur error ccur - - error shift and go to state 18 - ccur reduce using rule 2 (epsilon -> .) - id shift and go to state 19 - - feature_list shift and go to state 54 - epsilon shift and go to state 15 - def_attr shift and go to state 16 - def_func shift and go to state 17 - -state 35 - - (8) def_class -> class error ocur feature_list ccur . semi - - semi shift and go to state 55 - - -state 36 - - (10) def_class -> class error inherits error ocur . feature_list ccur semi - (12) feature_list -> . epsilon - (13) feature_list -> . def_attr semi feature_list - (14) feature_list -> . def_func semi feature_list - (15) feature_list -> . error feature_list - (2) epsilon -> . - (16) def_attr -> . id colon type - (17) def_attr -> . id colon type larrow expr - (18) def_attr -> . error colon type - (19) def_attr -> . id colon error - (20) def_attr -> . error colon type larrow expr - (21) def_attr -> . id colon error larrow expr - (22) def_attr -> . id colon type larrow error - (23) def_func -> . id opar formals cpar colon type ocur expr ccur - (24) def_func -> . error opar formals cpar colon type ocur expr ccur - (25) def_func -> . id opar error cpar colon type ocur expr ccur - (26) def_func -> . id opar formals cpar colon error ocur expr ccur - (27) def_func -> . id opar formals cpar colon type ocur error ccur - - error shift and go to state 18 - ccur reduce using rule 2 (epsilon -> .) - id shift and go to state 19 - - feature_list shift and go to state 56 - epsilon shift and go to state 15 - def_attr shift and go to state 16 - def_func shift and go to state 17 - -state 37 - - (9) def_class -> class error inherits type ocur . feature_list ccur semi - (12) feature_list -> . epsilon - (13) feature_list -> . def_attr semi feature_list - (14) feature_list -> . def_func semi feature_list - (15) feature_list -> . error feature_list - (2) epsilon -> . - (16) def_attr -> . id colon type - (17) def_attr -> . id colon type larrow expr - (18) def_attr -> . error colon type - (19) def_attr -> . id colon error - (20) def_attr -> . error colon type larrow expr - (21) def_attr -> . id colon error larrow expr - (22) def_attr -> . id colon type larrow error - (23) def_func -> . id opar formals cpar colon type ocur expr ccur - (24) def_func -> . error opar formals cpar colon type ocur expr ccur - (25) def_func -> . id opar error cpar colon type ocur expr ccur - (26) def_func -> . id opar formals cpar colon error ocur expr ccur - (27) def_func -> . id opar formals cpar colon type ocur error ccur - - error shift and go to state 18 - ccur reduce using rule 2 (epsilon -> .) - id shift and go to state 19 - - feature_list shift and go to state 57 - epsilon shift and go to state 15 - def_attr shift and go to state 16 - def_func shift and go to state 17 - -state 38 - - (6) def_class -> class type ocur feature_list ccur semi . - - error reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) - class reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) - $end reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) - - -state 39 - - (13) feature_list -> def_attr semi feature_list . - - ccur reduce using rule 13 (feature_list -> def_attr semi feature_list .) - - -state 40 - - (14) feature_list -> def_func semi feature_list . - - ccur reduce using rule 14 (feature_list -> def_func semi feature_list .) - - -state 41 - - (18) def_attr -> error colon type . - (20) def_attr -> error colon type . larrow expr - - semi reduce using rule 18 (def_attr -> error colon type .) - larrow shift and go to state 58 - - -state 42 - - (32) param_list -> error . param_list - (30) param_list -> . param - (31) param_list -> . param comma param_list - (32) param_list -> . error param_list - (34) param -> . id colon type - - error shift and go to state 42 - id shift and go to state 48 - - param_list shift and go to state 59 - param shift and go to state 46 - -state 43 - - (24) def_func -> error opar formals . cpar colon type ocur expr ccur - - cpar shift and go to state 60 - - -state 44 - - (28) formals -> param_list . - - cpar reduce using rule 28 (formals -> param_list .) - - -state 45 - - (29) formals -> param_list_empty . - - cpar reduce using rule 29 (formals -> param_list_empty .) - - -state 46 - - (30) param_list -> param . - (31) param_list -> param . comma param_list - - cpar reduce using rule 30 (param_list -> param .) - comma shift and go to state 61 - - -state 47 - - (33) param_list_empty -> epsilon . - - cpar reduce using rule 33 (param_list_empty -> epsilon .) - - -state 48 - - (34) param -> id . colon type - - colon shift and go to state 62 - - -state 49 - - (16) def_attr -> id colon type . - (17) def_attr -> id colon type . larrow expr - (22) def_attr -> id colon type . larrow error - - semi reduce using rule 16 (def_attr -> id colon type .) - larrow shift and go to state 63 - - -state 50 - - (19) def_attr -> id colon error . - (21) def_attr -> id colon error . larrow expr - - semi reduce using rule 19 (def_attr -> id colon error .) - larrow shift and go to state 64 - - -state 51 - - (23) def_func -> id opar formals . cpar colon type ocur expr ccur - (26) def_func -> id opar formals . cpar colon error ocur expr ccur - (27) def_func -> id opar formals . cpar colon type ocur error ccur - - cpar shift and go to state 65 - - -state 52 - - (25) def_func -> id opar error . cpar colon type ocur expr ccur - (32) param_list -> error . param_list - (30) param_list -> . param - (31) param_list -> . param comma param_list - (32) param_list -> . error param_list - (34) param -> . id colon type - - cpar shift and go to state 66 - error shift and go to state 42 - id shift and go to state 48 - - param_list shift and go to state 59 - param shift and go to state 46 - -state 53 - - (7) def_class -> class type inherits type ocur feature_list . ccur semi - - ccur shift and go to state 67 - - -state 54 - - (11) def_class -> class type inherits error ocur feature_list . ccur semi - - ccur shift and go to state 68 - - -state 55 - - (8) def_class -> class error ocur feature_list ccur semi . - - error reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) - class reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) - $end reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) - - -state 56 - - (10) def_class -> class error inherits error ocur feature_list . ccur semi - - ccur shift and go to state 69 - - -state 57 - - (9) def_class -> class error inherits type ocur feature_list . ccur semi - - ccur shift and go to state 70 - - -state 58 - - (20) def_attr -> error colon type larrow . expr - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 71 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 59 - - (32) param_list -> error param_list . - - cpar reduce using rule 32 (param_list -> error param_list .) - - -state 60 - - (24) def_func -> error opar formals cpar . colon type ocur expr ccur - - colon shift and go to state 95 - - -state 61 - - (31) param_list -> param comma . param_list - (30) param_list -> . param - (31) param_list -> . param comma param_list - (32) param_list -> . error param_list - (34) param -> . id colon type - - error shift and go to state 42 - id shift and go to state 48 - - param shift and go to state 46 - param_list shift and go to state 96 - -state 62 - - (34) param -> id colon . type - - type shift and go to state 97 - - -state 63 - - (17) def_attr -> id colon type larrow . expr - (22) def_attr -> id colon type larrow . error - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - error shift and go to state 99 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 98 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 64 - - (21) def_attr -> id colon error larrow . expr - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 100 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 65 - - (23) def_func -> id opar formals cpar . colon type ocur expr ccur - (26) def_func -> id opar formals cpar . colon error ocur expr ccur - (27) def_func -> id opar formals cpar . colon type ocur error ccur - - colon shift and go to state 101 - - -state 66 - - (25) def_func -> id opar error cpar . colon type ocur expr ccur - - colon shift and go to state 102 - - -state 67 - - (7) def_class -> class type inherits type ocur feature_list ccur . semi - - semi shift and go to state 103 - - -state 68 - - (11) def_class -> class type inherits error ocur feature_list ccur . semi - - semi shift and go to state 104 - - -state 69 - - (10) def_class -> class error inherits error ocur feature_list ccur . semi - - semi shift and go to state 105 - - -state 70 - - (9) def_class -> class error inherits type ocur feature_list ccur . semi - - semi shift and go to state 106 - - -state 71 - - (20) def_attr -> error colon type larrow expr . - - semi reduce using rule 20 (def_attr -> error colon type larrow expr .) - - -state 72 - - (35) expr -> let . let_list in expr - (36) expr -> let . error in expr - (37) expr -> let . let_list in error - (50) let_list -> . let_assign - (51) let_list -> . let_assign comma let_list - (52) let_list -> . error let_list - (53) let_assign -> . param larrow expr - (54) let_assign -> . param - (34) param -> . id colon type - - error shift and go to state 108 - id shift and go to state 48 - - let_list shift and go to state 107 - let_assign shift and go to state 109 - param shift and go to state 110 - -state 73 - - (38) expr -> case . expr of cases_list esac - (39) expr -> case . error of cases_list esac - (40) expr -> case . expr of error esac - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - error shift and go to state 112 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 111 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 74 - - (41) expr -> if . expr then expr else expr fi - (42) expr -> if . error then expr else expr fi - (43) expr -> if . expr then error else expr fi - (44) expr -> if . expr then expr else error fi - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - error shift and go to state 114 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 113 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 75 - - (45) expr -> while . expr loop expr pool - (46) expr -> while . error loop expr pool - (47) expr -> while . expr loop error pool - (48) expr -> while . expr loop expr error - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - error shift and go to state 116 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 115 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 76 - - (49) expr -> arith . - - semi reduce using rule 49 (expr -> arith .) - of reduce using rule 49 (expr -> arith .) - then reduce using rule 49 (expr -> arith .) - loop reduce using rule 49 (expr -> arith .) - cpar reduce using rule 49 (expr -> arith .) - comma reduce using rule 49 (expr -> arith .) - in reduce using rule 49 (expr -> arith .) - else reduce using rule 49 (expr -> arith .) - pool reduce using rule 49 (expr -> arith .) - error reduce using rule 49 (expr -> arith .) - ccur reduce using rule 49 (expr -> arith .) - fi reduce using rule 49 (expr -> arith .) - - -state 77 - - (59) arith -> id . larrow expr - (81) atom -> id . - (92) func_call -> id . opar args cpar - - larrow shift and go to state 117 - arroba reduce using rule 81 (atom -> id .) - dot reduce using rule 81 (atom -> id .) - star reduce using rule 81 (atom -> id .) - div reduce using rule 81 (atom -> id .) - plus reduce using rule 81 (atom -> id .) - minus reduce using rule 81 (atom -> id .) - less reduce using rule 81 (atom -> id .) - lesseq reduce using rule 81 (atom -> id .) - equal reduce using rule 81 (atom -> id .) - semi reduce using rule 81 (atom -> id .) - of reduce using rule 81 (atom -> id .) - then reduce using rule 81 (atom -> id .) - loop reduce using rule 81 (atom -> id .) - cpar reduce using rule 81 (atom -> id .) - comma reduce using rule 81 (atom -> id .) - in reduce using rule 81 (atom -> id .) - else reduce using rule 81 (atom -> id .) - pool reduce using rule 81 (atom -> id .) - error reduce using rule 81 (atom -> id .) - ccur reduce using rule 81 (atom -> id .) - fi reduce using rule 81 (atom -> id .) - opar shift and go to state 118 - - -state 78 - - (60) arith -> not . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - id shift and go to state 120 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - comp shift and go to state 119 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 79 - - (61) arith -> comp . - (62) comp -> comp . less op - (63) comp -> comp . lesseq op - (64) comp -> comp . equal op - - semi reduce using rule 61 (arith -> comp .) - of reduce using rule 61 (arith -> comp .) - then reduce using rule 61 (arith -> comp .) - loop reduce using rule 61 (arith -> comp .) - cpar reduce using rule 61 (arith -> comp .) - comma reduce using rule 61 (arith -> comp .) - in reduce using rule 61 (arith -> comp .) - else reduce using rule 61 (arith -> comp .) - pool reduce using rule 61 (arith -> comp .) - error reduce using rule 61 (arith -> comp .) - ccur reduce using rule 61 (arith -> comp .) - fi reduce using rule 61 (arith -> comp .) - less shift and go to state 121 - lesseq shift and go to state 122 - equal shift and go to state 123 - - -state 80 - - (65) comp -> op . - (66) op -> op . plus term - (67) op -> op . minus term - - less reduce using rule 65 (comp -> op .) - lesseq reduce using rule 65 (comp -> op .) - equal reduce using rule 65 (comp -> op .) - semi reduce using rule 65 (comp -> op .) - of reduce using rule 65 (comp -> op .) - then reduce using rule 65 (comp -> op .) - loop reduce using rule 65 (comp -> op .) - cpar reduce using rule 65 (comp -> op .) - comma reduce using rule 65 (comp -> op .) - in reduce using rule 65 (comp -> op .) - else reduce using rule 65 (comp -> op .) - pool reduce using rule 65 (comp -> op .) - error reduce using rule 65 (comp -> op .) - ccur reduce using rule 65 (comp -> op .) - fi reduce using rule 65 (comp -> op .) - plus shift and go to state 124 - minus shift and go to state 125 - - -state 81 - - (68) op -> term . - (69) term -> term . star base_call - (70) term -> term . div base_call - - plus reduce using rule 68 (op -> term .) - minus reduce using rule 68 (op -> term .) - less reduce using rule 68 (op -> term .) - lesseq reduce using rule 68 (op -> term .) - equal reduce using rule 68 (op -> term .) - semi reduce using rule 68 (op -> term .) - of reduce using rule 68 (op -> term .) - then reduce using rule 68 (op -> term .) - loop reduce using rule 68 (op -> term .) - cpar reduce using rule 68 (op -> term .) - comma reduce using rule 68 (op -> term .) - in reduce using rule 68 (op -> term .) - else reduce using rule 68 (op -> term .) - pool reduce using rule 68 (op -> term .) - error reduce using rule 68 (op -> term .) - ccur reduce using rule 68 (op -> term .) - fi reduce using rule 68 (op -> term .) - star shift and go to state 126 - div shift and go to state 127 - - -state 82 - - (73) term -> base_call . - - star reduce using rule 73 (term -> base_call .) - div reduce using rule 73 (term -> base_call .) - plus reduce using rule 73 (term -> base_call .) - minus reduce using rule 73 (term -> base_call .) - less reduce using rule 73 (term -> base_call .) - lesseq reduce using rule 73 (term -> base_call .) - equal reduce using rule 73 (term -> base_call .) - semi reduce using rule 73 (term -> base_call .) - of reduce using rule 73 (term -> base_call .) - then reduce using rule 73 (term -> base_call .) - loop reduce using rule 73 (term -> base_call .) - cpar reduce using rule 73 (term -> base_call .) - comma reduce using rule 73 (term -> base_call .) - in reduce using rule 73 (term -> base_call .) - else reduce using rule 73 (term -> base_call .) - pool reduce using rule 73 (term -> base_call .) - error reduce using rule 73 (term -> base_call .) - ccur reduce using rule 73 (term -> base_call .) - fi reduce using rule 73 (term -> base_call .) - - -state 83 - - (71) term -> isvoid . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - opar shift and go to state 88 - num shift and go to state 89 - id shift and go to state 120 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - base_call shift and go to state 128 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 84 - - (72) term -> nox . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - opar shift and go to state 88 - num shift and go to state 89 - id shift and go to state 120 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - base_call shift and go to state 129 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 85 - - (74) base_call -> factor . arroba type dot func_call - (75) base_call -> factor . - (78) factor -> factor . dot func_call - - arroba shift and go to state 130 - star reduce using rule 75 (base_call -> factor .) - div reduce using rule 75 (base_call -> factor .) - plus reduce using rule 75 (base_call -> factor .) - minus reduce using rule 75 (base_call -> factor .) - less reduce using rule 75 (base_call -> factor .) - lesseq reduce using rule 75 (base_call -> factor .) - equal reduce using rule 75 (base_call -> factor .) - semi reduce using rule 75 (base_call -> factor .) - of reduce using rule 75 (base_call -> factor .) - then reduce using rule 75 (base_call -> factor .) - loop reduce using rule 75 (base_call -> factor .) - cpar reduce using rule 75 (base_call -> factor .) - comma reduce using rule 75 (base_call -> factor .) - in reduce using rule 75 (base_call -> factor .) - else reduce using rule 75 (base_call -> factor .) - pool reduce using rule 75 (base_call -> factor .) - error reduce using rule 75 (base_call -> factor .) - ccur reduce using rule 75 (base_call -> factor .) - fi reduce using rule 75 (base_call -> factor .) - dot shift and go to state 131 - - -state 86 - - (79) factor -> func_call . - - arroba reduce using rule 79 (factor -> func_call .) - dot reduce using rule 79 (factor -> func_call .) - star reduce using rule 79 (factor -> func_call .) - div reduce using rule 79 (factor -> func_call .) - plus reduce using rule 79 (factor -> func_call .) - minus reduce using rule 79 (factor -> func_call .) - less reduce using rule 79 (factor -> func_call .) - lesseq reduce using rule 79 (factor -> func_call .) - equal reduce using rule 79 (factor -> func_call .) - semi reduce using rule 79 (factor -> func_call .) - of reduce using rule 79 (factor -> func_call .) - then reduce using rule 79 (factor -> func_call .) - loop reduce using rule 79 (factor -> func_call .) - cpar reduce using rule 79 (factor -> func_call .) - comma reduce using rule 79 (factor -> func_call .) - in reduce using rule 79 (factor -> func_call .) - else reduce using rule 79 (factor -> func_call .) - pool reduce using rule 79 (factor -> func_call .) - error reduce using rule 79 (factor -> func_call .) - ccur reduce using rule 79 (factor -> func_call .) - fi reduce using rule 79 (factor -> func_call .) - - -state 87 - - (76) factor -> atom . - - arroba reduce using rule 76 (factor -> atom .) - dot reduce using rule 76 (factor -> atom .) - star reduce using rule 76 (factor -> atom .) - div reduce using rule 76 (factor -> atom .) - plus reduce using rule 76 (factor -> atom .) - minus reduce using rule 76 (factor -> atom .) - less reduce using rule 76 (factor -> atom .) - lesseq reduce using rule 76 (factor -> atom .) - equal reduce using rule 76 (factor -> atom .) - semi reduce using rule 76 (factor -> atom .) - of reduce using rule 76 (factor -> atom .) - then reduce using rule 76 (factor -> atom .) - loop reduce using rule 76 (factor -> atom .) - cpar reduce using rule 76 (factor -> atom .) - comma reduce using rule 76 (factor -> atom .) - in reduce using rule 76 (factor -> atom .) - else reduce using rule 76 (factor -> atom .) - pool reduce using rule 76 (factor -> atom .) - error reduce using rule 76 (factor -> atom .) - ccur reduce using rule 76 (factor -> atom .) - fi reduce using rule 76 (factor -> atom .) - - -state 88 - - (77) factor -> opar . expr cpar - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 132 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 89 - - (80) atom -> num . - - arroba reduce using rule 80 (atom -> num .) - dot reduce using rule 80 (atom -> num .) - star reduce using rule 80 (atom -> num .) - div reduce using rule 80 (atom -> num .) - plus reduce using rule 80 (atom -> num .) - minus reduce using rule 80 (atom -> num .) - less reduce using rule 80 (atom -> num .) - lesseq reduce using rule 80 (atom -> num .) - equal reduce using rule 80 (atom -> num .) - semi reduce using rule 80 (atom -> num .) - of reduce using rule 80 (atom -> num .) - then reduce using rule 80 (atom -> num .) - loop reduce using rule 80 (atom -> num .) - cpar reduce using rule 80 (atom -> num .) - comma reduce using rule 80 (atom -> num .) - in reduce using rule 80 (atom -> num .) - else reduce using rule 80 (atom -> num .) - pool reduce using rule 80 (atom -> num .) - error reduce using rule 80 (atom -> num .) - ccur reduce using rule 80 (atom -> num .) - fi reduce using rule 80 (atom -> num .) - - -state 90 - - (82) atom -> new . type - (83) atom -> new . error - - type shift and go to state 133 - error shift and go to state 134 - - -state 91 - - (84) atom -> ocur . block ccur - (88) block -> . expr semi - (89) block -> . expr semi block - (90) block -> . error block - (91) block -> . error - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - error shift and go to state 137 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - block shift and go to state 135 - expr shift and go to state 136 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 92 - - (85) atom -> true . - - arroba reduce using rule 85 (atom -> true .) - dot reduce using rule 85 (atom -> true .) - star reduce using rule 85 (atom -> true .) - div reduce using rule 85 (atom -> true .) - plus reduce using rule 85 (atom -> true .) - minus reduce using rule 85 (atom -> true .) - less reduce using rule 85 (atom -> true .) - lesseq reduce using rule 85 (atom -> true .) - equal reduce using rule 85 (atom -> true .) - semi reduce using rule 85 (atom -> true .) - of reduce using rule 85 (atom -> true .) - then reduce using rule 85 (atom -> true .) - loop reduce using rule 85 (atom -> true .) - cpar reduce using rule 85 (atom -> true .) - comma reduce using rule 85 (atom -> true .) - in reduce using rule 85 (atom -> true .) - else reduce using rule 85 (atom -> true .) - pool reduce using rule 85 (atom -> true .) - error reduce using rule 85 (atom -> true .) - ccur reduce using rule 85 (atom -> true .) - fi reduce using rule 85 (atom -> true .) - - -state 93 - - (86) atom -> false . - - arroba reduce using rule 86 (atom -> false .) - dot reduce using rule 86 (atom -> false .) - star reduce using rule 86 (atom -> false .) - div reduce using rule 86 (atom -> false .) - plus reduce using rule 86 (atom -> false .) - minus reduce using rule 86 (atom -> false .) - less reduce using rule 86 (atom -> false .) - lesseq reduce using rule 86 (atom -> false .) - equal reduce using rule 86 (atom -> false .) - semi reduce using rule 86 (atom -> false .) - of reduce using rule 86 (atom -> false .) - then reduce using rule 86 (atom -> false .) - loop reduce using rule 86 (atom -> false .) - cpar reduce using rule 86 (atom -> false .) - comma reduce using rule 86 (atom -> false .) - in reduce using rule 86 (atom -> false .) - else reduce using rule 86 (atom -> false .) - pool reduce using rule 86 (atom -> false .) - error reduce using rule 86 (atom -> false .) - ccur reduce using rule 86 (atom -> false .) - fi reduce using rule 86 (atom -> false .) - - -state 94 - - (87) atom -> string . - - arroba reduce using rule 87 (atom -> string .) - dot reduce using rule 87 (atom -> string .) - star reduce using rule 87 (atom -> string .) - div reduce using rule 87 (atom -> string .) - plus reduce using rule 87 (atom -> string .) - minus reduce using rule 87 (atom -> string .) - less reduce using rule 87 (atom -> string .) - lesseq reduce using rule 87 (atom -> string .) - equal reduce using rule 87 (atom -> string .) - semi reduce using rule 87 (atom -> string .) - of reduce using rule 87 (atom -> string .) - then reduce using rule 87 (atom -> string .) - loop reduce using rule 87 (atom -> string .) - cpar reduce using rule 87 (atom -> string .) - comma reduce using rule 87 (atom -> string .) - in reduce using rule 87 (atom -> string .) - else reduce using rule 87 (atom -> string .) - pool reduce using rule 87 (atom -> string .) - error reduce using rule 87 (atom -> string .) - ccur reduce using rule 87 (atom -> string .) - fi reduce using rule 87 (atom -> string .) - - -state 95 - - (24) def_func -> error opar formals cpar colon . type ocur expr ccur - - type shift and go to state 138 - - -state 96 - - (31) param_list -> param comma param_list . - - cpar reduce using rule 31 (param_list -> param comma param_list .) - - -state 97 - - (34) param -> id colon type . - - comma reduce using rule 34 (param -> id colon type .) - cpar reduce using rule 34 (param -> id colon type .) - larrow reduce using rule 34 (param -> id colon type .) - in reduce using rule 34 (param -> id colon type .) - - -state 98 - - (17) def_attr -> id colon type larrow expr . - - semi reduce using rule 17 (def_attr -> id colon type larrow expr .) - - -state 99 - - (22) def_attr -> id colon type larrow error . - - semi reduce using rule 22 (def_attr -> id colon type larrow error .) - - -state 100 - - (21) def_attr -> id colon error larrow expr . - - semi reduce using rule 21 (def_attr -> id colon error larrow expr .) - - -state 101 - - (23) def_func -> id opar formals cpar colon . type ocur expr ccur - (26) def_func -> id opar formals cpar colon . error ocur expr ccur - (27) def_func -> id opar formals cpar colon . type ocur error ccur - - type shift and go to state 139 - error shift and go to state 140 - - -state 102 - - (25) def_func -> id opar error cpar colon . type ocur expr ccur - - type shift and go to state 141 - - -state 103 - - (7) def_class -> class type inherits type ocur feature_list ccur semi . - - error reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) - class reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) - $end reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) - - -state 104 - - (11) def_class -> class type inherits error ocur feature_list ccur semi . - - error reduce using rule 11 (def_class -> class type inherits error ocur feature_list ccur semi .) - class reduce using rule 11 (def_class -> class type inherits error ocur feature_list ccur semi .) - $end reduce using rule 11 (def_class -> class type inherits error ocur feature_list ccur semi .) - - -state 105 - - (10) def_class -> class error inherits error ocur feature_list ccur semi . - - error reduce using rule 10 (def_class -> class error inherits error ocur feature_list ccur semi .) - class reduce using rule 10 (def_class -> class error inherits error ocur feature_list ccur semi .) - $end reduce using rule 10 (def_class -> class error inherits error ocur feature_list ccur semi .) - - -state 106 - - (9) def_class -> class error inherits type ocur feature_list ccur semi . - - error reduce using rule 9 (def_class -> class error inherits type ocur feature_list ccur semi .) - class reduce using rule 9 (def_class -> class error inherits type ocur feature_list ccur semi .) - $end reduce using rule 9 (def_class -> class error inherits type ocur feature_list ccur semi .) - - -state 107 - - (35) expr -> let let_list . in expr - (37) expr -> let let_list . in error - - in shift and go to state 142 - - -state 108 - - (36) expr -> let error . in expr - (52) let_list -> error . let_list - (50) let_list -> . let_assign - (51) let_list -> . let_assign comma let_list - (52) let_list -> . error let_list - (53) let_assign -> . param larrow expr - (54) let_assign -> . param - (34) param -> . id colon type - - in shift and go to state 144 - error shift and go to state 143 - id shift and go to state 48 - - let_list shift and go to state 145 - let_assign shift and go to state 109 - param shift and go to state 110 - -state 109 - - (50) let_list -> let_assign . - (51) let_list -> let_assign . comma let_list - - in reduce using rule 50 (let_list -> let_assign .) - comma shift and go to state 146 - - -state 110 - - (53) let_assign -> param . larrow expr - (54) let_assign -> param . - - larrow shift and go to state 147 - comma reduce using rule 54 (let_assign -> param .) - in reduce using rule 54 (let_assign -> param .) - - -state 111 - - (38) expr -> case expr . of cases_list esac - (40) expr -> case expr . of error esac - - of shift and go to state 148 - - -state 112 - - (39) expr -> case error . of cases_list esac - - of shift and go to state 149 - - -state 113 - - (41) expr -> if expr . then expr else expr fi - (43) expr -> if expr . then error else expr fi - (44) expr -> if expr . then expr else error fi - - then shift and go to state 150 - - -state 114 - - (42) expr -> if error . then expr else expr fi - - then shift and go to state 151 - - -state 115 - - (45) expr -> while expr . loop expr pool - (47) expr -> while expr . loop error pool - (48) expr -> while expr . loop expr error - - loop shift and go to state 152 - - -state 116 - - (46) expr -> while error . loop expr pool - - loop shift and go to state 153 - - -state 117 - - (59) arith -> id larrow . expr - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 154 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 118 - - (92) func_call -> id opar . args cpar - (93) args -> . arg_list - (94) args -> . arg_list_empty - (95) arg_list -> . expr - (96) arg_list -> . expr comma arg_list - (97) arg_list -> . error arg_list - (98) arg_list_empty -> . epsilon - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (2) epsilon -> . - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - error shift and go to state 159 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - cpar reduce using rule 2 (epsilon -> .) - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - args shift and go to state 155 - arg_list shift and go to state 156 - arg_list_empty shift and go to state 157 - expr shift and go to state 158 - epsilon shift and go to state 160 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 119 - - (60) arith -> not comp . - (62) comp -> comp . less op - (63) comp -> comp . lesseq op - (64) comp -> comp . equal op - - semi reduce using rule 60 (arith -> not comp .) - of reduce using rule 60 (arith -> not comp .) - then reduce using rule 60 (arith -> not comp .) - loop reduce using rule 60 (arith -> not comp .) - cpar reduce using rule 60 (arith -> not comp .) - comma reduce using rule 60 (arith -> not comp .) - in reduce using rule 60 (arith -> not comp .) - else reduce using rule 60 (arith -> not comp .) - pool reduce using rule 60 (arith -> not comp .) - error reduce using rule 60 (arith -> not comp .) - ccur reduce using rule 60 (arith -> not comp .) - fi reduce using rule 60 (arith -> not comp .) - less shift and go to state 121 - lesseq shift and go to state 122 - equal shift and go to state 123 - - -state 120 - - (81) atom -> id . - (92) func_call -> id . opar args cpar - - arroba reduce using rule 81 (atom -> id .) - dot reduce using rule 81 (atom -> id .) - star reduce using rule 81 (atom -> id .) - div reduce using rule 81 (atom -> id .) - plus reduce using rule 81 (atom -> id .) - minus reduce using rule 81 (atom -> id .) - less reduce using rule 81 (atom -> id .) - lesseq reduce using rule 81 (atom -> id .) - equal reduce using rule 81 (atom -> id .) - semi reduce using rule 81 (atom -> id .) - of reduce using rule 81 (atom -> id .) - then reduce using rule 81 (atom -> id .) - loop reduce using rule 81 (atom -> id .) - cpar reduce using rule 81 (atom -> id .) - comma reduce using rule 81 (atom -> id .) - in reduce using rule 81 (atom -> id .) - else reduce using rule 81 (atom -> id .) - pool reduce using rule 81 (atom -> id .) - error reduce using rule 81 (atom -> id .) - ccur reduce using rule 81 (atom -> id .) - fi reduce using rule 81 (atom -> id .) - opar shift and go to state 118 - - -state 121 - - (62) comp -> comp less . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - id shift and go to state 120 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - op shift and go to state 161 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 122 - - (63) comp -> comp lesseq . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - id shift and go to state 120 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - op shift and go to state 162 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 123 - - (64) comp -> comp equal . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - id shift and go to state 120 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - op shift and go to state 163 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 124 - - (66) op -> op plus . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - id shift and go to state 120 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - term shift and go to state 164 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 125 - - (67) op -> op minus . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - id shift and go to state 120 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - term shift and go to state 165 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 126 - - (69) term -> term star . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - opar shift and go to state 88 - num shift and go to state 89 - id shift and go to state 120 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - base_call shift and go to state 166 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 127 - - (70) term -> term div . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - opar shift and go to state 88 - num shift and go to state 89 - id shift and go to state 120 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - base_call shift and go to state 167 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 128 - - (71) term -> isvoid base_call . - - star reduce using rule 71 (term -> isvoid base_call .) - div reduce using rule 71 (term -> isvoid base_call .) - plus reduce using rule 71 (term -> isvoid base_call .) - minus reduce using rule 71 (term -> isvoid base_call .) - less reduce using rule 71 (term -> isvoid base_call .) - lesseq reduce using rule 71 (term -> isvoid base_call .) - equal reduce using rule 71 (term -> isvoid base_call .) - semi reduce using rule 71 (term -> isvoid base_call .) - of reduce using rule 71 (term -> isvoid base_call .) - then reduce using rule 71 (term -> isvoid base_call .) - loop reduce using rule 71 (term -> isvoid base_call .) - cpar reduce using rule 71 (term -> isvoid base_call .) - comma reduce using rule 71 (term -> isvoid base_call .) - in reduce using rule 71 (term -> isvoid base_call .) - else reduce using rule 71 (term -> isvoid base_call .) - pool reduce using rule 71 (term -> isvoid base_call .) - error reduce using rule 71 (term -> isvoid base_call .) - ccur reduce using rule 71 (term -> isvoid base_call .) - fi reduce using rule 71 (term -> isvoid base_call .) - - -state 129 - - (72) term -> nox base_call . - - star reduce using rule 72 (term -> nox base_call .) - div reduce using rule 72 (term -> nox base_call .) - plus reduce using rule 72 (term -> nox base_call .) - minus reduce using rule 72 (term -> nox base_call .) - less reduce using rule 72 (term -> nox base_call .) - lesseq reduce using rule 72 (term -> nox base_call .) - equal reduce using rule 72 (term -> nox base_call .) - semi reduce using rule 72 (term -> nox base_call .) - of reduce using rule 72 (term -> nox base_call .) - then reduce using rule 72 (term -> nox base_call .) - loop reduce using rule 72 (term -> nox base_call .) - cpar reduce using rule 72 (term -> nox base_call .) - comma reduce using rule 72 (term -> nox base_call .) - in reduce using rule 72 (term -> nox base_call .) - else reduce using rule 72 (term -> nox base_call .) - pool reduce using rule 72 (term -> nox base_call .) - error reduce using rule 72 (term -> nox base_call .) - ccur reduce using rule 72 (term -> nox base_call .) - fi reduce using rule 72 (term -> nox base_call .) - - -state 130 - - (74) base_call -> factor arroba . type dot func_call - - type shift and go to state 168 - - -state 131 - - (78) factor -> factor dot . func_call - (92) func_call -> . id opar args cpar - - id shift and go to state 170 - - func_call shift and go to state 169 - -state 132 - - (77) factor -> opar expr . cpar - - cpar shift and go to state 171 - - -state 133 - - (82) atom -> new type . - - arroba reduce using rule 82 (atom -> new type .) - dot reduce using rule 82 (atom -> new type .) - star reduce using rule 82 (atom -> new type .) - div reduce using rule 82 (atom -> new type .) - plus reduce using rule 82 (atom -> new type .) - minus reduce using rule 82 (atom -> new type .) - less reduce using rule 82 (atom -> new type .) - lesseq reduce using rule 82 (atom -> new type .) - equal reduce using rule 82 (atom -> new type .) - semi reduce using rule 82 (atom -> new type .) - of reduce using rule 82 (atom -> new type .) - then reduce using rule 82 (atom -> new type .) - loop reduce using rule 82 (atom -> new type .) - cpar reduce using rule 82 (atom -> new type .) - comma reduce using rule 82 (atom -> new type .) - in reduce using rule 82 (atom -> new type .) - else reduce using rule 82 (atom -> new type .) - pool reduce using rule 82 (atom -> new type .) - error reduce using rule 82 (atom -> new type .) - ccur reduce using rule 82 (atom -> new type .) - fi reduce using rule 82 (atom -> new type .) - - -state 134 - - (83) atom -> new error . - - arroba reduce using rule 83 (atom -> new error .) - dot reduce using rule 83 (atom -> new error .) - star reduce using rule 83 (atom -> new error .) - div reduce using rule 83 (atom -> new error .) - plus reduce using rule 83 (atom -> new error .) - minus reduce using rule 83 (atom -> new error .) - less reduce using rule 83 (atom -> new error .) - lesseq reduce using rule 83 (atom -> new error .) - equal reduce using rule 83 (atom -> new error .) - semi reduce using rule 83 (atom -> new error .) - of reduce using rule 83 (atom -> new error .) - then reduce using rule 83 (atom -> new error .) - loop reduce using rule 83 (atom -> new error .) - cpar reduce using rule 83 (atom -> new error .) - comma reduce using rule 83 (atom -> new error .) - in reduce using rule 83 (atom -> new error .) - else reduce using rule 83 (atom -> new error .) - pool reduce using rule 83 (atom -> new error .) - error reduce using rule 83 (atom -> new error .) - ccur reduce using rule 83 (atom -> new error .) - fi reduce using rule 83 (atom -> new error .) - - -state 135 - - (84) atom -> ocur block . ccur - - ccur shift and go to state 172 - - -state 136 - - (88) block -> expr . semi - (89) block -> expr . semi block - - semi shift and go to state 173 - - -state 137 - - (90) block -> error . block - (91) block -> error . - (88) block -> . expr semi - (89) block -> . expr semi block - (90) block -> . error block - (91) block -> . error - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - ccur reduce using rule 91 (block -> error .) - error shift and go to state 137 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - block shift and go to state 174 - expr shift and go to state 136 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 138 - - (24) def_func -> error opar formals cpar colon type . ocur expr ccur - - ocur shift and go to state 175 - - -state 139 - - (23) def_func -> id opar formals cpar colon type . ocur expr ccur - (27) def_func -> id opar formals cpar colon type . ocur error ccur - - ocur shift and go to state 176 - - -state 140 - - (26) def_func -> id opar formals cpar colon error . ocur expr ccur - - ocur shift and go to state 177 - - -state 141 - - (25) def_func -> id opar error cpar colon type . ocur expr ccur - - ocur shift and go to state 178 - - -state 142 - - (35) expr -> let let_list in . expr - (37) expr -> let let_list in . error - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - error shift and go to state 180 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 179 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 143 - - (52) let_list -> error . let_list - (50) let_list -> . let_assign - (51) let_list -> . let_assign comma let_list - (52) let_list -> . error let_list - (53) let_assign -> . param larrow expr - (54) let_assign -> . param - (34) param -> . id colon type - - error shift and go to state 143 - id shift and go to state 48 - - let_list shift and go to state 145 - let_assign shift and go to state 109 - param shift and go to state 110 - -state 144 - - (36) expr -> let error in . expr - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 181 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 145 - - (52) let_list -> error let_list . - - in reduce using rule 52 (let_list -> error let_list .) - - -state 146 - - (51) let_list -> let_assign comma . let_list - (50) let_list -> . let_assign - (51) let_list -> . let_assign comma let_list - (52) let_list -> . error let_list - (53) let_assign -> . param larrow expr - (54) let_assign -> . param - (34) param -> . id colon type - - error shift and go to state 143 - id shift and go to state 48 - - let_assign shift and go to state 109 - let_list shift and go to state 182 - param shift and go to state 110 - -state 147 - - (53) let_assign -> param larrow . expr - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 183 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 148 - - (38) expr -> case expr of . cases_list esac - (40) expr -> case expr of . error esac - (55) cases_list -> . casep semi - (56) cases_list -> . casep semi cases_list - (57) cases_list -> . error cases_list - (58) casep -> . id colon type rarrow expr - - error shift and go to state 185 - id shift and go to state 187 - - cases_list shift and go to state 184 - casep shift and go to state 186 - -state 149 - - (39) expr -> case error of . cases_list esac - (55) cases_list -> . casep semi - (56) cases_list -> . casep semi cases_list - (57) cases_list -> . error cases_list - (58) casep -> . id colon type rarrow expr - - error shift and go to state 188 - id shift and go to state 187 - - cases_list shift and go to state 189 - casep shift and go to state 186 - -state 150 - - (41) expr -> if expr then . expr else expr fi - (43) expr -> if expr then . error else expr fi - (44) expr -> if expr then . expr else error fi - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - error shift and go to state 191 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 190 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 151 - - (42) expr -> if error then . expr else expr fi - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 192 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 152 - - (45) expr -> while expr loop . expr pool - (47) expr -> while expr loop . error pool - (48) expr -> while expr loop . expr error - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - error shift and go to state 194 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 193 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 153 - - (46) expr -> while error loop . expr pool - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 195 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 154 - - (59) arith -> id larrow expr . - - semi reduce using rule 59 (arith -> id larrow expr .) - of reduce using rule 59 (arith -> id larrow expr .) - then reduce using rule 59 (arith -> id larrow expr .) - loop reduce using rule 59 (arith -> id larrow expr .) - cpar reduce using rule 59 (arith -> id larrow expr .) - comma reduce using rule 59 (arith -> id larrow expr .) - in reduce using rule 59 (arith -> id larrow expr .) - else reduce using rule 59 (arith -> id larrow expr .) - pool reduce using rule 59 (arith -> id larrow expr .) - error reduce using rule 59 (arith -> id larrow expr .) - ccur reduce using rule 59 (arith -> id larrow expr .) - fi reduce using rule 59 (arith -> id larrow expr .) - - -state 155 - - (92) func_call -> id opar args . cpar - - cpar shift and go to state 196 - - -state 156 - - (93) args -> arg_list . - - cpar reduce using rule 93 (args -> arg_list .) - - -state 157 - - (94) args -> arg_list_empty . - - cpar reduce using rule 94 (args -> arg_list_empty .) - - -state 158 - - (95) arg_list -> expr . - (96) arg_list -> expr . comma arg_list - - cpar reduce using rule 95 (arg_list -> expr .) - comma shift and go to state 197 - - -state 159 - - (97) arg_list -> error . arg_list - (95) arg_list -> . expr - (96) arg_list -> . expr comma arg_list - (97) arg_list -> . error arg_list - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - error shift and go to state 159 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - arg_list shift and go to state 198 - expr shift and go to state 158 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 160 - - (98) arg_list_empty -> epsilon . - - cpar reduce using rule 98 (arg_list_empty -> epsilon .) - - -state 161 - - (62) comp -> comp less op . - (66) op -> op . plus term - (67) op -> op . minus term - - less reduce using rule 62 (comp -> comp less op .) - lesseq reduce using rule 62 (comp -> comp less op .) - equal reduce using rule 62 (comp -> comp less op .) - semi reduce using rule 62 (comp -> comp less op .) - of reduce using rule 62 (comp -> comp less op .) - then reduce using rule 62 (comp -> comp less op .) - loop reduce using rule 62 (comp -> comp less op .) - cpar reduce using rule 62 (comp -> comp less op .) - comma reduce using rule 62 (comp -> comp less op .) - in reduce using rule 62 (comp -> comp less op .) - else reduce using rule 62 (comp -> comp less op .) - pool reduce using rule 62 (comp -> comp less op .) - error reduce using rule 62 (comp -> comp less op .) - ccur reduce using rule 62 (comp -> comp less op .) - fi reduce using rule 62 (comp -> comp less op .) - plus shift and go to state 124 - minus shift and go to state 125 - - -state 162 - - (63) comp -> comp lesseq op . - (66) op -> op . plus term - (67) op -> op . minus term - - less reduce using rule 63 (comp -> comp lesseq op .) - lesseq reduce using rule 63 (comp -> comp lesseq op .) - equal reduce using rule 63 (comp -> comp lesseq op .) - semi reduce using rule 63 (comp -> comp lesseq op .) - of reduce using rule 63 (comp -> comp lesseq op .) - then reduce using rule 63 (comp -> comp lesseq op .) - loop reduce using rule 63 (comp -> comp lesseq op .) - cpar reduce using rule 63 (comp -> comp lesseq op .) - comma reduce using rule 63 (comp -> comp lesseq op .) - in reduce using rule 63 (comp -> comp lesseq op .) - else reduce using rule 63 (comp -> comp lesseq op .) - pool reduce using rule 63 (comp -> comp lesseq op .) - error reduce using rule 63 (comp -> comp lesseq op .) - ccur reduce using rule 63 (comp -> comp lesseq op .) - fi reduce using rule 63 (comp -> comp lesseq op .) - plus shift and go to state 124 - minus shift and go to state 125 - - -state 163 - - (64) comp -> comp equal op . - (66) op -> op . plus term - (67) op -> op . minus term - - less reduce using rule 64 (comp -> comp equal op .) - lesseq reduce using rule 64 (comp -> comp equal op .) - equal reduce using rule 64 (comp -> comp equal op .) - semi reduce using rule 64 (comp -> comp equal op .) - of reduce using rule 64 (comp -> comp equal op .) - then reduce using rule 64 (comp -> comp equal op .) - loop reduce using rule 64 (comp -> comp equal op .) - cpar reduce using rule 64 (comp -> comp equal op .) - comma reduce using rule 64 (comp -> comp equal op .) - in reduce using rule 64 (comp -> comp equal op .) - else reduce using rule 64 (comp -> comp equal op .) - pool reduce using rule 64 (comp -> comp equal op .) - error reduce using rule 64 (comp -> comp equal op .) - ccur reduce using rule 64 (comp -> comp equal op .) - fi reduce using rule 64 (comp -> comp equal op .) - plus shift and go to state 124 - minus shift and go to state 125 - - -state 164 - - (66) op -> op plus term . - (69) term -> term . star base_call - (70) term -> term . div base_call - - plus reduce using rule 66 (op -> op plus term .) - minus reduce using rule 66 (op -> op plus term .) - less reduce using rule 66 (op -> op plus term .) - lesseq reduce using rule 66 (op -> op plus term .) - equal reduce using rule 66 (op -> op plus term .) - semi reduce using rule 66 (op -> op plus term .) - of reduce using rule 66 (op -> op plus term .) - then reduce using rule 66 (op -> op plus term .) - loop reduce using rule 66 (op -> op plus term .) - cpar reduce using rule 66 (op -> op plus term .) - comma reduce using rule 66 (op -> op plus term .) - in reduce using rule 66 (op -> op plus term .) - else reduce using rule 66 (op -> op plus term .) - pool reduce using rule 66 (op -> op plus term .) - error reduce using rule 66 (op -> op plus term .) - ccur reduce using rule 66 (op -> op plus term .) - fi reduce using rule 66 (op -> op plus term .) - star shift and go to state 126 - div shift and go to state 127 - - -state 165 - - (67) op -> op minus term . - (69) term -> term . star base_call - (70) term -> term . div base_call - - plus reduce using rule 67 (op -> op minus term .) - minus reduce using rule 67 (op -> op minus term .) - less reduce using rule 67 (op -> op minus term .) - lesseq reduce using rule 67 (op -> op minus term .) - equal reduce using rule 67 (op -> op minus term .) - semi reduce using rule 67 (op -> op minus term .) - of reduce using rule 67 (op -> op minus term .) - then reduce using rule 67 (op -> op minus term .) - loop reduce using rule 67 (op -> op minus term .) - cpar reduce using rule 67 (op -> op minus term .) - comma reduce using rule 67 (op -> op minus term .) - in reduce using rule 67 (op -> op minus term .) - else reduce using rule 67 (op -> op minus term .) - pool reduce using rule 67 (op -> op minus term .) - error reduce using rule 67 (op -> op minus term .) - ccur reduce using rule 67 (op -> op minus term .) - fi reduce using rule 67 (op -> op minus term .) - star shift and go to state 126 - div shift and go to state 127 - - -state 166 - - (69) term -> term star base_call . - - star reduce using rule 69 (term -> term star base_call .) - div reduce using rule 69 (term -> term star base_call .) - plus reduce using rule 69 (term -> term star base_call .) - minus reduce using rule 69 (term -> term star base_call .) - less reduce using rule 69 (term -> term star base_call .) - lesseq reduce using rule 69 (term -> term star base_call .) - equal reduce using rule 69 (term -> term star base_call .) - semi reduce using rule 69 (term -> term star base_call .) - of reduce using rule 69 (term -> term star base_call .) - then reduce using rule 69 (term -> term star base_call .) - loop reduce using rule 69 (term -> term star base_call .) - cpar reduce using rule 69 (term -> term star base_call .) - comma reduce using rule 69 (term -> term star base_call .) - in reduce using rule 69 (term -> term star base_call .) - else reduce using rule 69 (term -> term star base_call .) - pool reduce using rule 69 (term -> term star base_call .) - error reduce using rule 69 (term -> term star base_call .) - ccur reduce using rule 69 (term -> term star base_call .) - fi reduce using rule 69 (term -> term star base_call .) - - -state 167 - - (70) term -> term div base_call . - - star reduce using rule 70 (term -> term div base_call .) - div reduce using rule 70 (term -> term div base_call .) - plus reduce using rule 70 (term -> term div base_call .) - minus reduce using rule 70 (term -> term div base_call .) - less reduce using rule 70 (term -> term div base_call .) - lesseq reduce using rule 70 (term -> term div base_call .) - equal reduce using rule 70 (term -> term div base_call .) - semi reduce using rule 70 (term -> term div base_call .) - of reduce using rule 70 (term -> term div base_call .) - then reduce using rule 70 (term -> term div base_call .) - loop reduce using rule 70 (term -> term div base_call .) - cpar reduce using rule 70 (term -> term div base_call .) - comma reduce using rule 70 (term -> term div base_call .) - in reduce using rule 70 (term -> term div base_call .) - else reduce using rule 70 (term -> term div base_call .) - pool reduce using rule 70 (term -> term div base_call .) - error reduce using rule 70 (term -> term div base_call .) - ccur reduce using rule 70 (term -> term div base_call .) - fi reduce using rule 70 (term -> term div base_call .) - - -state 168 - - (74) base_call -> factor arroba type . dot func_call - - dot shift and go to state 199 - - -state 169 - - (78) factor -> factor dot func_call . - - arroba reduce using rule 78 (factor -> factor dot func_call .) - dot reduce using rule 78 (factor -> factor dot func_call .) - star reduce using rule 78 (factor -> factor dot func_call .) - div reduce using rule 78 (factor -> factor dot func_call .) - plus reduce using rule 78 (factor -> factor dot func_call .) - minus reduce using rule 78 (factor -> factor dot func_call .) - less reduce using rule 78 (factor -> factor dot func_call .) - lesseq reduce using rule 78 (factor -> factor dot func_call .) - equal reduce using rule 78 (factor -> factor dot func_call .) - semi reduce using rule 78 (factor -> factor dot func_call .) - of reduce using rule 78 (factor -> factor dot func_call .) - then reduce using rule 78 (factor -> factor dot func_call .) - loop reduce using rule 78 (factor -> factor dot func_call .) - cpar reduce using rule 78 (factor -> factor dot func_call .) - comma reduce using rule 78 (factor -> factor dot func_call .) - in reduce using rule 78 (factor -> factor dot func_call .) - else reduce using rule 78 (factor -> factor dot func_call .) - pool reduce using rule 78 (factor -> factor dot func_call .) - error reduce using rule 78 (factor -> factor dot func_call .) - ccur reduce using rule 78 (factor -> factor dot func_call .) - fi reduce using rule 78 (factor -> factor dot func_call .) - - -state 170 - - (92) func_call -> id . opar args cpar - - opar shift and go to state 118 - - -state 171 - - (77) factor -> opar expr cpar . - - arroba reduce using rule 77 (factor -> opar expr cpar .) - dot reduce using rule 77 (factor -> opar expr cpar .) - star reduce using rule 77 (factor -> opar expr cpar .) - div reduce using rule 77 (factor -> opar expr cpar .) - plus reduce using rule 77 (factor -> opar expr cpar .) - minus reduce using rule 77 (factor -> opar expr cpar .) - less reduce using rule 77 (factor -> opar expr cpar .) - lesseq reduce using rule 77 (factor -> opar expr cpar .) - equal reduce using rule 77 (factor -> opar expr cpar .) - semi reduce using rule 77 (factor -> opar expr cpar .) - of reduce using rule 77 (factor -> opar expr cpar .) - then reduce using rule 77 (factor -> opar expr cpar .) - loop reduce using rule 77 (factor -> opar expr cpar .) - cpar reduce using rule 77 (factor -> opar expr cpar .) - comma reduce using rule 77 (factor -> opar expr cpar .) - in reduce using rule 77 (factor -> opar expr cpar .) - else reduce using rule 77 (factor -> opar expr cpar .) - pool reduce using rule 77 (factor -> opar expr cpar .) - error reduce using rule 77 (factor -> opar expr cpar .) - ccur reduce using rule 77 (factor -> opar expr cpar .) - fi reduce using rule 77 (factor -> opar expr cpar .) - - -state 172 - - (84) atom -> ocur block ccur . - - arroba reduce using rule 84 (atom -> ocur block ccur .) - dot reduce using rule 84 (atom -> ocur block ccur .) - star reduce using rule 84 (atom -> ocur block ccur .) - div reduce using rule 84 (atom -> ocur block ccur .) - plus reduce using rule 84 (atom -> ocur block ccur .) - minus reduce using rule 84 (atom -> ocur block ccur .) - less reduce using rule 84 (atom -> ocur block ccur .) - lesseq reduce using rule 84 (atom -> ocur block ccur .) - equal reduce using rule 84 (atom -> ocur block ccur .) - semi reduce using rule 84 (atom -> ocur block ccur .) - of reduce using rule 84 (atom -> ocur block ccur .) - then reduce using rule 84 (atom -> ocur block ccur .) - loop reduce using rule 84 (atom -> ocur block ccur .) - cpar reduce using rule 84 (atom -> ocur block ccur .) - comma reduce using rule 84 (atom -> ocur block ccur .) - in reduce using rule 84 (atom -> ocur block ccur .) - else reduce using rule 84 (atom -> ocur block ccur .) - pool reduce using rule 84 (atom -> ocur block ccur .) - error reduce using rule 84 (atom -> ocur block ccur .) - ccur reduce using rule 84 (atom -> ocur block ccur .) - fi reduce using rule 84 (atom -> ocur block ccur .) - - -state 173 - - (88) block -> expr semi . - (89) block -> expr semi . block - (88) block -> . expr semi - (89) block -> . expr semi block - (90) block -> . error block - (91) block -> . error - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - ccur reduce using rule 88 (block -> expr semi .) - error shift and go to state 137 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 136 - block shift and go to state 200 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 174 - - (90) block -> error block . - - ccur reduce using rule 90 (block -> error block .) - - -state 175 - - (24) def_func -> error opar formals cpar colon type ocur . expr ccur - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 201 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 176 - - (23) def_func -> id opar formals cpar colon type ocur . expr ccur - (27) def_func -> id opar formals cpar colon type ocur . error ccur - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - error shift and go to state 203 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 202 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 177 - - (26) def_func -> id opar formals cpar colon error ocur . expr ccur - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 204 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 178 - - (25) def_func -> id opar error cpar colon type ocur . expr ccur - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 205 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 179 - - (35) expr -> let let_list in expr . - - semi reduce using rule 35 (expr -> let let_list in expr .) - of reduce using rule 35 (expr -> let let_list in expr .) - then reduce using rule 35 (expr -> let let_list in expr .) - loop reduce using rule 35 (expr -> let let_list in expr .) - cpar reduce using rule 35 (expr -> let let_list in expr .) - comma reduce using rule 35 (expr -> let let_list in expr .) - in reduce using rule 35 (expr -> let let_list in expr .) - else reduce using rule 35 (expr -> let let_list in expr .) - pool reduce using rule 35 (expr -> let let_list in expr .) - error reduce using rule 35 (expr -> let let_list in expr .) - ccur reduce using rule 35 (expr -> let let_list in expr .) - fi reduce using rule 35 (expr -> let let_list in expr .) - - -state 180 - - (37) expr -> let let_list in error . - - semi reduce using rule 37 (expr -> let let_list in error .) - of reduce using rule 37 (expr -> let let_list in error .) - then reduce using rule 37 (expr -> let let_list in error .) - loop reduce using rule 37 (expr -> let let_list in error .) - cpar reduce using rule 37 (expr -> let let_list in error .) - comma reduce using rule 37 (expr -> let let_list in error .) - in reduce using rule 37 (expr -> let let_list in error .) - else reduce using rule 37 (expr -> let let_list in error .) - pool reduce using rule 37 (expr -> let let_list in error .) - error reduce using rule 37 (expr -> let let_list in error .) - ccur reduce using rule 37 (expr -> let let_list in error .) - fi reduce using rule 37 (expr -> let let_list in error .) - - -state 181 - - (36) expr -> let error in expr . - - semi reduce using rule 36 (expr -> let error in expr .) - of reduce using rule 36 (expr -> let error in expr .) - then reduce using rule 36 (expr -> let error in expr .) - loop reduce using rule 36 (expr -> let error in expr .) - cpar reduce using rule 36 (expr -> let error in expr .) - comma reduce using rule 36 (expr -> let error in expr .) - in reduce using rule 36 (expr -> let error in expr .) - else reduce using rule 36 (expr -> let error in expr .) - pool reduce using rule 36 (expr -> let error in expr .) - error reduce using rule 36 (expr -> let error in expr .) - ccur reduce using rule 36 (expr -> let error in expr .) - fi reduce using rule 36 (expr -> let error in expr .) - - -state 182 - - (51) let_list -> let_assign comma let_list . - - in reduce using rule 51 (let_list -> let_assign comma let_list .) - - -state 183 - - (53) let_assign -> param larrow expr . - - comma reduce using rule 53 (let_assign -> param larrow expr .) - in reduce using rule 53 (let_assign -> param larrow expr .) - - -state 184 - - (38) expr -> case expr of cases_list . esac - - esac shift and go to state 206 - - -state 185 - - (40) expr -> case expr of error . esac - (57) cases_list -> error . cases_list - (55) cases_list -> . casep semi - (56) cases_list -> . casep semi cases_list - (57) cases_list -> . error cases_list - (58) casep -> . id colon type rarrow expr - - esac shift and go to state 207 - error shift and go to state 188 - id shift and go to state 187 - - cases_list shift and go to state 208 - casep shift and go to state 186 - -state 186 - - (55) cases_list -> casep . semi - (56) cases_list -> casep . semi cases_list - - semi shift and go to state 209 - - -state 187 - - (58) casep -> id . colon type rarrow expr - - colon shift and go to state 210 - - -state 188 - - (57) cases_list -> error . cases_list - (55) cases_list -> . casep semi - (56) cases_list -> . casep semi cases_list - (57) cases_list -> . error cases_list - (58) casep -> . id colon type rarrow expr - - error shift and go to state 188 - id shift and go to state 187 - - cases_list shift and go to state 208 - casep shift and go to state 186 - -state 189 - - (39) expr -> case error of cases_list . esac - - esac shift and go to state 211 - - -state 190 - - (41) expr -> if expr then expr . else expr fi - (44) expr -> if expr then expr . else error fi - - else shift and go to state 212 - - -state 191 - - (43) expr -> if expr then error . else expr fi - - else shift and go to state 213 - - -state 192 - - (42) expr -> if error then expr . else expr fi - - else shift and go to state 214 - - -state 193 - - (45) expr -> while expr loop expr . pool - (48) expr -> while expr loop expr . error - - pool shift and go to state 215 - error shift and go to state 216 - - -state 194 - - (47) expr -> while expr loop error . pool - - pool shift and go to state 217 - - -state 195 - - (46) expr -> while error loop expr . pool - - pool shift and go to state 218 - - -state 196 - - (92) func_call -> id opar args cpar . - - arroba reduce using rule 92 (func_call -> id opar args cpar .) - dot reduce using rule 92 (func_call -> id opar args cpar .) - star reduce using rule 92 (func_call -> id opar args cpar .) - div reduce using rule 92 (func_call -> id opar args cpar .) - plus reduce using rule 92 (func_call -> id opar args cpar .) - minus reduce using rule 92 (func_call -> id opar args cpar .) - less reduce using rule 92 (func_call -> id opar args cpar .) - lesseq reduce using rule 92 (func_call -> id opar args cpar .) - equal reduce using rule 92 (func_call -> id opar args cpar .) - semi reduce using rule 92 (func_call -> id opar args cpar .) - of reduce using rule 92 (func_call -> id opar args cpar .) - then reduce using rule 92 (func_call -> id opar args cpar .) - loop reduce using rule 92 (func_call -> id opar args cpar .) - cpar reduce using rule 92 (func_call -> id opar args cpar .) - comma reduce using rule 92 (func_call -> id opar args cpar .) - in reduce using rule 92 (func_call -> id opar args cpar .) - else reduce using rule 92 (func_call -> id opar args cpar .) - pool reduce using rule 92 (func_call -> id opar args cpar .) - error reduce using rule 92 (func_call -> id opar args cpar .) - ccur reduce using rule 92 (func_call -> id opar args cpar .) - fi reduce using rule 92 (func_call -> id opar args cpar .) - - -state 197 - - (96) arg_list -> expr comma . arg_list - (95) arg_list -> . expr - (96) arg_list -> . expr comma arg_list - (97) arg_list -> . error arg_list - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - error shift and go to state 159 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 158 - arg_list shift and go to state 219 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 198 - - (97) arg_list -> error arg_list . - - cpar reduce using rule 97 (arg_list -> error arg_list .) - - -state 199 - - (74) base_call -> factor arroba type dot . func_call - (92) func_call -> . id opar args cpar - - id shift and go to state 170 - - func_call shift and go to state 220 - -state 200 - - (89) block -> expr semi block . - - ccur reduce using rule 89 (block -> expr semi block .) - - -state 201 - - (24) def_func -> error opar formals cpar colon type ocur expr . ccur - - ccur shift and go to state 221 - - -state 202 - - (23) def_func -> id opar formals cpar colon type ocur expr . ccur - - ccur shift and go to state 222 - - -state 203 - - (27) def_func -> id opar formals cpar colon type ocur error . ccur - - ccur shift and go to state 223 - - -state 204 - - (26) def_func -> id opar formals cpar colon error ocur expr . ccur - - ccur shift and go to state 224 - - -state 205 - - (25) def_func -> id opar error cpar colon type ocur expr . ccur - - ccur shift and go to state 225 - - -state 206 - - (38) expr -> case expr of cases_list esac . - - semi reduce using rule 38 (expr -> case expr of cases_list esac .) - of reduce using rule 38 (expr -> case expr of cases_list esac .) - then reduce using rule 38 (expr -> case expr of cases_list esac .) - loop reduce using rule 38 (expr -> case expr of cases_list esac .) - cpar reduce using rule 38 (expr -> case expr of cases_list esac .) - comma reduce using rule 38 (expr -> case expr of cases_list esac .) - in reduce using rule 38 (expr -> case expr of cases_list esac .) - else reduce using rule 38 (expr -> case expr of cases_list esac .) - pool reduce using rule 38 (expr -> case expr of cases_list esac .) - error reduce using rule 38 (expr -> case expr of cases_list esac .) - ccur reduce using rule 38 (expr -> case expr of cases_list esac .) - fi reduce using rule 38 (expr -> case expr of cases_list esac .) - - -state 207 - - (40) expr -> case expr of error esac . - - semi reduce using rule 40 (expr -> case expr of error esac .) - of reduce using rule 40 (expr -> case expr of error esac .) - then reduce using rule 40 (expr -> case expr of error esac .) - loop reduce using rule 40 (expr -> case expr of error esac .) - cpar reduce using rule 40 (expr -> case expr of error esac .) - comma reduce using rule 40 (expr -> case expr of error esac .) - in reduce using rule 40 (expr -> case expr of error esac .) - else reduce using rule 40 (expr -> case expr of error esac .) - pool reduce using rule 40 (expr -> case expr of error esac .) - error reduce using rule 40 (expr -> case expr of error esac .) - ccur reduce using rule 40 (expr -> case expr of error esac .) - fi reduce using rule 40 (expr -> case expr of error esac .) - - -state 208 - - (57) cases_list -> error cases_list . - - esac reduce using rule 57 (cases_list -> error cases_list .) - - -state 209 - - (55) cases_list -> casep semi . - (56) cases_list -> casep semi . cases_list - (55) cases_list -> . casep semi - (56) cases_list -> . casep semi cases_list - (57) cases_list -> . error cases_list - (58) casep -> . id colon type rarrow expr - - esac reduce using rule 55 (cases_list -> casep semi .) - error shift and go to state 188 - id shift and go to state 187 - - casep shift and go to state 186 - cases_list shift and go to state 226 - -state 210 - - (58) casep -> id colon . type rarrow expr - - type shift and go to state 227 - - -state 211 - - (39) expr -> case error of cases_list esac . - - semi reduce using rule 39 (expr -> case error of cases_list esac .) - of reduce using rule 39 (expr -> case error of cases_list esac .) - then reduce using rule 39 (expr -> case error of cases_list esac .) - loop reduce using rule 39 (expr -> case error of cases_list esac .) - cpar reduce using rule 39 (expr -> case error of cases_list esac .) - comma reduce using rule 39 (expr -> case error of cases_list esac .) - in reduce using rule 39 (expr -> case error of cases_list esac .) - else reduce using rule 39 (expr -> case error of cases_list esac .) - pool reduce using rule 39 (expr -> case error of cases_list esac .) - error reduce using rule 39 (expr -> case error of cases_list esac .) - ccur reduce using rule 39 (expr -> case error of cases_list esac .) - fi reduce using rule 39 (expr -> case error of cases_list esac .) - - -state 212 - - (41) expr -> if expr then expr else . expr fi - (44) expr -> if expr then expr else . error fi - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - error shift and go to state 229 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 228 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 213 - - (43) expr -> if expr then error else . expr fi - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 230 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 214 - - (42) expr -> if error then expr else . expr fi - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 231 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 215 - - (45) expr -> while expr loop expr pool . - - semi reduce using rule 45 (expr -> while expr loop expr pool .) - of reduce using rule 45 (expr -> while expr loop expr pool .) - then reduce using rule 45 (expr -> while expr loop expr pool .) - loop reduce using rule 45 (expr -> while expr loop expr pool .) - cpar reduce using rule 45 (expr -> while expr loop expr pool .) - comma reduce using rule 45 (expr -> while expr loop expr pool .) - in reduce using rule 45 (expr -> while expr loop expr pool .) - else reduce using rule 45 (expr -> while expr loop expr pool .) - pool reduce using rule 45 (expr -> while expr loop expr pool .) - error reduce using rule 45 (expr -> while expr loop expr pool .) - ccur reduce using rule 45 (expr -> while expr loop expr pool .) - fi reduce using rule 45 (expr -> while expr loop expr pool .) - - -state 216 - - (48) expr -> while expr loop expr error . - - semi reduce using rule 48 (expr -> while expr loop expr error .) - of reduce using rule 48 (expr -> while expr loop expr error .) - then reduce using rule 48 (expr -> while expr loop expr error .) - loop reduce using rule 48 (expr -> while expr loop expr error .) - cpar reduce using rule 48 (expr -> while expr loop expr error .) - comma reduce using rule 48 (expr -> while expr loop expr error .) - in reduce using rule 48 (expr -> while expr loop expr error .) - else reduce using rule 48 (expr -> while expr loop expr error .) - pool reduce using rule 48 (expr -> while expr loop expr error .) - error reduce using rule 48 (expr -> while expr loop expr error .) - ccur reduce using rule 48 (expr -> while expr loop expr error .) - fi reduce using rule 48 (expr -> while expr loop expr error .) - - -state 217 - - (47) expr -> while expr loop error pool . - - semi reduce using rule 47 (expr -> while expr loop error pool .) - of reduce using rule 47 (expr -> while expr loop error pool .) - then reduce using rule 47 (expr -> while expr loop error pool .) - loop reduce using rule 47 (expr -> while expr loop error pool .) - cpar reduce using rule 47 (expr -> while expr loop error pool .) - comma reduce using rule 47 (expr -> while expr loop error pool .) - in reduce using rule 47 (expr -> while expr loop error pool .) - else reduce using rule 47 (expr -> while expr loop error pool .) - pool reduce using rule 47 (expr -> while expr loop error pool .) - error reduce using rule 47 (expr -> while expr loop error pool .) - ccur reduce using rule 47 (expr -> while expr loop error pool .) - fi reduce using rule 47 (expr -> while expr loop error pool .) - - -state 218 - - (46) expr -> while error loop expr pool . - - semi reduce using rule 46 (expr -> while error loop expr pool .) - of reduce using rule 46 (expr -> while error loop expr pool .) - then reduce using rule 46 (expr -> while error loop expr pool .) - loop reduce using rule 46 (expr -> while error loop expr pool .) - cpar reduce using rule 46 (expr -> while error loop expr pool .) - comma reduce using rule 46 (expr -> while error loop expr pool .) - in reduce using rule 46 (expr -> while error loop expr pool .) - else reduce using rule 46 (expr -> while error loop expr pool .) - pool reduce using rule 46 (expr -> while error loop expr pool .) - error reduce using rule 46 (expr -> while error loop expr pool .) - ccur reduce using rule 46 (expr -> while error loop expr pool .) - fi reduce using rule 46 (expr -> while error loop expr pool .) - - -state 219 - - (96) arg_list -> expr comma arg_list . - - cpar reduce using rule 96 (arg_list -> expr comma arg_list .) - - -state 220 - - (74) base_call -> factor arroba type dot func_call . - - star reduce using rule 74 (base_call -> factor arroba type dot func_call .) - div reduce using rule 74 (base_call -> factor arroba type dot func_call .) - plus reduce using rule 74 (base_call -> factor arroba type dot func_call .) - minus reduce using rule 74 (base_call -> factor arroba type dot func_call .) - less reduce using rule 74 (base_call -> factor arroba type dot func_call .) - lesseq reduce using rule 74 (base_call -> factor arroba type dot func_call .) - equal reduce using rule 74 (base_call -> factor arroba type dot func_call .) - semi reduce using rule 74 (base_call -> factor arroba type dot func_call .) - of reduce using rule 74 (base_call -> factor arroba type dot func_call .) - then reduce using rule 74 (base_call -> factor arroba type dot func_call .) - loop reduce using rule 74 (base_call -> factor arroba type dot func_call .) - cpar reduce using rule 74 (base_call -> factor arroba type dot func_call .) - comma reduce using rule 74 (base_call -> factor arroba type dot func_call .) - in reduce using rule 74 (base_call -> factor arroba type dot func_call .) - else reduce using rule 74 (base_call -> factor arroba type dot func_call .) - pool reduce using rule 74 (base_call -> factor arroba type dot func_call .) - error reduce using rule 74 (base_call -> factor arroba type dot func_call .) - ccur reduce using rule 74 (base_call -> factor arroba type dot func_call .) - fi reduce using rule 74 (base_call -> factor arroba type dot func_call .) - - -state 221 - - (24) def_func -> error opar formals cpar colon type ocur expr ccur . - - semi reduce using rule 24 (def_func -> error opar formals cpar colon type ocur expr ccur .) - - -state 222 - - (23) def_func -> id opar formals cpar colon type ocur expr ccur . - - semi reduce using rule 23 (def_func -> id opar formals cpar colon type ocur expr ccur .) - - -state 223 - - (27) def_func -> id opar formals cpar colon type ocur error ccur . - - semi reduce using rule 27 (def_func -> id opar formals cpar colon type ocur error ccur .) - - -state 224 - - (26) def_func -> id opar formals cpar colon error ocur expr ccur . - - semi reduce using rule 26 (def_func -> id opar formals cpar colon error ocur expr ccur .) - - -state 225 - - (25) def_func -> id opar error cpar colon type ocur expr ccur . - - semi reduce using rule 25 (def_func -> id opar error cpar colon type ocur expr ccur .) - - -state 226 - - (56) cases_list -> casep semi cases_list . - - esac reduce using rule 56 (cases_list -> casep semi cases_list .) - - -state 227 - - (58) casep -> id colon type . rarrow expr - - rarrow shift and go to state 232 - - -state 228 - - (41) expr -> if expr then expr else expr . fi - - fi shift and go to state 233 - - -state 229 - - (44) expr -> if expr then expr else error . fi - - fi shift and go to state 234 - - -state 230 - - (43) expr -> if expr then error else expr . fi - - fi shift and go to state 235 - - -state 231 - - (42) expr -> if error then expr else expr . fi - - fi shift and go to state 236 - - -state 232 - - (58) casep -> id colon type rarrow . expr - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 237 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 233 - - (41) expr -> if expr then expr else expr fi . - - semi reduce using rule 41 (expr -> if expr then expr else expr fi .) - of reduce using rule 41 (expr -> if expr then expr else expr fi .) - then reduce using rule 41 (expr -> if expr then expr else expr fi .) - loop reduce using rule 41 (expr -> if expr then expr else expr fi .) - cpar reduce using rule 41 (expr -> if expr then expr else expr fi .) - comma reduce using rule 41 (expr -> if expr then expr else expr fi .) - in reduce using rule 41 (expr -> if expr then expr else expr fi .) - else reduce using rule 41 (expr -> if expr then expr else expr fi .) - pool reduce using rule 41 (expr -> if expr then expr else expr fi .) - error reduce using rule 41 (expr -> if expr then expr else expr fi .) - ccur reduce using rule 41 (expr -> if expr then expr else expr fi .) - fi reduce using rule 41 (expr -> if expr then expr else expr fi .) - - -state 234 - - (44) expr -> if expr then expr else error fi . - - semi reduce using rule 44 (expr -> if expr then expr else error fi .) - of reduce using rule 44 (expr -> if expr then expr else error fi .) - then reduce using rule 44 (expr -> if expr then expr else error fi .) - loop reduce using rule 44 (expr -> if expr then expr else error fi .) - cpar reduce using rule 44 (expr -> if expr then expr else error fi .) - comma reduce using rule 44 (expr -> if expr then expr else error fi .) - in reduce using rule 44 (expr -> if expr then expr else error fi .) - else reduce using rule 44 (expr -> if expr then expr else error fi .) - pool reduce using rule 44 (expr -> if expr then expr else error fi .) - error reduce using rule 44 (expr -> if expr then expr else error fi .) - ccur reduce using rule 44 (expr -> if expr then expr else error fi .) - fi reduce using rule 44 (expr -> if expr then expr else error fi .) - - -state 235 - - (43) expr -> if expr then error else expr fi . - - semi reduce using rule 43 (expr -> if expr then error else expr fi .) - of reduce using rule 43 (expr -> if expr then error else expr fi .) - then reduce using rule 43 (expr -> if expr then error else expr fi .) - loop reduce using rule 43 (expr -> if expr then error else expr fi .) - cpar reduce using rule 43 (expr -> if expr then error else expr fi .) - comma reduce using rule 43 (expr -> if expr then error else expr fi .) - in reduce using rule 43 (expr -> if expr then error else expr fi .) - else reduce using rule 43 (expr -> if expr then error else expr fi .) - pool reduce using rule 43 (expr -> if expr then error else expr fi .) - error reduce using rule 43 (expr -> if expr then error else expr fi .) - ccur reduce using rule 43 (expr -> if expr then error else expr fi .) - fi reduce using rule 43 (expr -> if expr then error else expr fi .) - - -state 236 - - (42) expr -> if error then expr else expr fi . - - semi reduce using rule 42 (expr -> if error then expr else expr fi .) - of reduce using rule 42 (expr -> if error then expr else expr fi .) - then reduce using rule 42 (expr -> if error then expr else expr fi .) - loop reduce using rule 42 (expr -> if error then expr else expr fi .) - cpar reduce using rule 42 (expr -> if error then expr else expr fi .) - comma reduce using rule 42 (expr -> if error then expr else expr fi .) - in reduce using rule 42 (expr -> if error then expr else expr fi .) - else reduce using rule 42 (expr -> if error then expr else expr fi .) - pool reduce using rule 42 (expr -> if error then expr else expr fi .) - error reduce using rule 42 (expr -> if error then expr else expr fi .) - ccur reduce using rule 42 (expr -> if error then expr else expr fi .) - fi reduce using rule 42 (expr -> if error then expr else expr fi .) - - -state 237 - - (58) casep -> id colon type rarrow expr . - - semi reduce using rule 58 (casep -> id colon type rarrow expr .) - +Created by PLY version 3.11 (http://www.dabeaz.com/ply) + +Grammar + +Rule 0 S' -> program +Rule 1 program -> class_list +Rule 2 epsilon -> +Rule 3 class_list -> def_class class_list +Rule 4 class_list -> def_class +Rule 5 class_list -> error class_list +Rule 6 def_class -> class type ocur feature_list ccur semi +Rule 7 def_class -> class type inherits type ocur feature_list ccur semi +Rule 8 def_class -> class error ocur feature_list ccur semi +Rule 9 def_class -> class error inherits type ocur feature_list ccur semi +Rule 10 def_class -> class error inherits error ocur feature_list ccur semi +Rule 11 def_class -> class type inherits error ocur feature_list ccur semi +Rule 12 feature_list -> epsilon +Rule 13 feature_list -> def_attr semi feature_list +Rule 14 feature_list -> def_func semi feature_list +Rule 15 feature_list -> error feature_list +Rule 16 def_attr -> id colon type +Rule 17 def_attr -> id colon type larrow expr +Rule 18 def_attr -> error colon type +Rule 19 def_attr -> id colon error +Rule 20 def_attr -> error colon type larrow expr +Rule 21 def_attr -> id colon error larrow expr +Rule 22 def_attr -> id colon type larrow error +Rule 23 def_func -> id opar formals cpar colon type ocur expr ccur +Rule 24 def_func -> error opar formals cpar colon type ocur expr ccur +Rule 25 def_func -> id opar error cpar colon type ocur expr ccur +Rule 26 def_func -> id opar formals cpar colon error ocur expr ccur +Rule 27 def_func -> id opar formals cpar colon type ocur error ccur +Rule 28 formals -> param_list +Rule 29 formals -> param_list_empty +Rule 30 param_list -> param +Rule 31 param_list -> param comma param_list +Rule 32 param_list -> error param_list +Rule 33 param_list_empty -> epsilon +Rule 34 param -> id colon type +Rule 35 expr -> let let_list in expr +Rule 36 expr -> let error in expr +Rule 37 expr -> let let_list in error +Rule 38 expr -> case expr of cases_list esac +Rule 39 expr -> case error of cases_list esac +Rule 40 expr -> case expr of error esac +Rule 41 expr -> if expr then expr else expr fi +Rule 42 expr -> if error then expr else expr fi +Rule 43 expr -> if expr then error else expr fi +Rule 44 expr -> if expr then expr else error fi +Rule 45 expr -> while expr loop expr pool +Rule 46 expr -> while error loop expr pool +Rule 47 expr -> while expr loop error pool +Rule 48 expr -> while expr loop expr error +Rule 49 expr -> arith +Rule 50 let_list -> let_assign +Rule 51 let_list -> let_assign comma let_list +Rule 52 let_list -> error let_list +Rule 53 let_assign -> param larrow expr +Rule 54 let_assign -> param +Rule 55 cases_list -> casep semi +Rule 56 cases_list -> casep semi cases_list +Rule 57 cases_list -> error cases_list +Rule 58 casep -> id colon type rarrow expr +Rule 59 arith -> id larrow expr +Rule 60 arith -> not comp +Rule 61 arith -> comp +Rule 62 comp -> comp less op +Rule 63 comp -> comp lesseq op +Rule 64 comp -> comp equal op +Rule 65 comp -> op +Rule 66 op -> op plus term +Rule 67 op -> op minus term +Rule 68 op -> term +Rule 69 term -> term star base_call +Rule 70 term -> term div base_call +Rule 71 term -> isvoid base_call +Rule 72 term -> nox base_call +Rule 73 term -> base_call +Rule 74 base_call -> factor arroba type dot func_call +Rule 75 base_call -> factor +Rule 76 factor -> atom +Rule 77 factor -> opar expr cpar +Rule 78 factor -> factor dot func_call +Rule 79 factor -> func_call +Rule 80 atom -> num +Rule 81 atom -> id +Rule 82 atom -> new type +Rule 83 atom -> new error +Rule 84 atom -> ocur block ccur +Rule 85 atom -> true +Rule 86 atom -> false +Rule 87 atom -> string +Rule 88 block -> expr semi +Rule 89 block -> expr semi block +Rule 90 block -> error block +Rule 91 block -> error +Rule 92 func_call -> id opar args cpar +Rule 93 args -> arg_list +Rule 94 args -> arg_list_empty +Rule 95 arg_list -> expr +Rule 96 arg_list -> expr comma arg_list +Rule 97 arg_list -> error arg_list +Rule 98 arg_list_empty -> epsilon + +Terminals, with rules where they appear + +arroba : 74 +case : 38 39 40 +ccur : 6 7 8 9 10 11 23 24 25 26 27 84 +class : 6 7 8 9 10 11 +colon : 16 17 18 19 20 21 22 23 24 25 26 27 34 58 +comma : 31 51 96 +cpar : 23 24 25 26 27 77 92 +div : 70 +dot : 74 78 +else : 41 42 43 44 +equal : 64 +error : 5 8 9 10 10 11 15 18 19 20 21 22 24 25 26 27 32 36 37 39 40 42 43 44 46 47 48 52 57 83 90 91 97 +esac : 38 39 40 +false : 86 +fi : 41 42 43 44 +id : 16 17 19 21 22 23 25 26 27 34 58 59 81 92 +if : 41 42 43 44 +in : 35 36 37 +inherits : 7 9 10 11 +isvoid : 71 +larrow : 17 20 21 22 53 59 +less : 62 +lesseq : 63 +let : 35 36 37 +loop : 45 46 47 48 +minus : 67 +new : 82 83 +not : 60 +nox : 72 +num : 80 +ocur : 6 7 8 9 10 11 23 24 25 26 27 84 +of : 38 39 40 +opar : 23 24 25 26 27 77 92 +plus : 66 +pool : 45 46 47 +rarrow : 58 +semi : 6 7 8 9 10 11 13 14 55 56 88 89 +star : 69 +string : 87 +then : 41 42 43 44 +true : 85 +type : 6 7 7 9 11 16 17 18 20 22 23 24 25 27 34 58 74 82 +while : 45 46 47 48 + +Nonterminals, with rules where they appear + +arg_list : 93 96 97 +arg_list_empty : 94 +args : 92 +arith : 49 +atom : 76 +base_call : 69 70 71 72 73 +block : 84 89 90 +casep : 55 56 +cases_list : 38 39 56 57 +class_list : 1 3 5 +comp : 60 61 62 63 64 +def_attr : 13 +def_class : 3 4 +def_func : 14 +epsilon : 12 33 98 +expr : 17 20 21 23 24 25 26 35 36 38 40 41 41 41 42 42 43 43 44 44 45 45 46 47 48 48 53 58 59 77 88 89 95 96 +factor : 74 75 78 +feature_list : 6 7 8 9 10 11 13 14 15 +formals : 23 24 26 27 +func_call : 74 78 79 +let_assign : 50 51 +let_list : 35 37 51 52 +op : 62 63 64 65 66 67 +param : 30 31 53 54 +param_list : 28 31 32 +param_list_empty : 29 +program : 0 +term : 66 67 68 69 70 + +Parsing method: LALR + +state 0 + + (0) S' -> . program + (1) program -> . class_list + (3) class_list -> . def_class class_list + (4) class_list -> . def_class + (5) class_list -> . error class_list + (6) def_class -> . class type ocur feature_list ccur semi + (7) def_class -> . class type inherits type ocur feature_list ccur semi + (8) def_class -> . class error ocur feature_list ccur semi + (9) def_class -> . class error inherits type ocur feature_list ccur semi + (10) def_class -> . class error inherits error ocur feature_list ccur semi + (11) def_class -> . class type inherits error ocur feature_list ccur semi + + error shift and go to state 4 + class shift and go to state 5 + + program shift and go to state 1 + class_list shift and go to state 2 + def_class shift and go to state 3 + +state 1 + + (0) S' -> program . + + + +state 2 + + (1) program -> class_list . + + $end reduce using rule 1 (program -> class_list .) + + +state 3 + + (3) class_list -> def_class . class_list + (4) class_list -> def_class . + (3) class_list -> . def_class class_list + (4) class_list -> . def_class + (5) class_list -> . error class_list + (6) def_class -> . class type ocur feature_list ccur semi + (7) def_class -> . class type inherits type ocur feature_list ccur semi + (8) def_class -> . class error ocur feature_list ccur semi + (9) def_class -> . class error inherits type ocur feature_list ccur semi + (10) def_class -> . class error inherits error ocur feature_list ccur semi + (11) def_class -> . class type inherits error ocur feature_list ccur semi + + $end reduce using rule 4 (class_list -> def_class .) + error shift and go to state 4 + class shift and go to state 5 + + def_class shift and go to state 3 + class_list shift and go to state 6 + +state 4 + + (5) class_list -> error . class_list + (3) class_list -> . def_class class_list + (4) class_list -> . def_class + (5) class_list -> . error class_list + (6) def_class -> . class type ocur feature_list ccur semi + (7) def_class -> . class type inherits type ocur feature_list ccur semi + (8) def_class -> . class error ocur feature_list ccur semi + (9) def_class -> . class error inherits type ocur feature_list ccur semi + (10) def_class -> . class error inherits error ocur feature_list ccur semi + (11) def_class -> . class type inherits error ocur feature_list ccur semi + + error shift and go to state 4 + class shift and go to state 5 + + class_list shift and go to state 7 + def_class shift and go to state 3 + +state 5 + + (6) def_class -> class . type ocur feature_list ccur semi + (7) def_class -> class . type inherits type ocur feature_list ccur semi + (8) def_class -> class . error ocur feature_list ccur semi + (9) def_class -> class . error inherits type ocur feature_list ccur semi + (10) def_class -> class . error inherits error ocur feature_list ccur semi + (11) def_class -> class . type inherits error ocur feature_list ccur semi + + type shift and go to state 8 + error shift and go to state 9 + + +state 6 + + (3) class_list -> def_class class_list . + + $end reduce using rule 3 (class_list -> def_class class_list .) + + +state 7 + + (5) class_list -> error class_list . + + $end reduce using rule 5 (class_list -> error class_list .) + + +state 8 + + (6) def_class -> class type . ocur feature_list ccur semi + (7) def_class -> class type . inherits type ocur feature_list ccur semi + (11) def_class -> class type . inherits error ocur feature_list ccur semi + + ocur shift and go to state 10 + inherits shift and go to state 11 + + +state 9 + + (8) def_class -> class error . ocur feature_list ccur semi + (9) def_class -> class error . inherits type ocur feature_list ccur semi + (10) def_class -> class error . inherits error ocur feature_list ccur semi + + ocur shift and go to state 12 + inherits shift and go to state 13 + + +state 10 + + (6) def_class -> class type ocur . feature_list ccur semi + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + feature_list shift and go to state 14 + epsilon shift and go to state 15 + def_attr shift and go to state 16 + def_func shift and go to state 17 + +state 11 + + (7) def_class -> class type inherits . type ocur feature_list ccur semi + (11) def_class -> class type inherits . error ocur feature_list ccur semi + + type shift and go to state 20 + error shift and go to state 21 + + +state 12 + + (8) def_class -> class error ocur . feature_list ccur semi + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + feature_list shift and go to state 22 + epsilon shift and go to state 15 + def_attr shift and go to state 16 + def_func shift and go to state 17 + +state 13 + + (9) def_class -> class error inherits . type ocur feature_list ccur semi + (10) def_class -> class error inherits . error ocur feature_list ccur semi + + type shift and go to state 24 + error shift and go to state 23 + + +state 14 + + (6) def_class -> class type ocur feature_list . ccur semi + + ccur shift and go to state 25 + + +state 15 + + (12) feature_list -> epsilon . + + ccur reduce using rule 12 (feature_list -> epsilon .) + + +state 16 + + (13) feature_list -> def_attr . semi feature_list + + semi shift and go to state 26 + + +state 17 + + (14) feature_list -> def_func . semi feature_list + + semi shift and go to state 27 + + +state 18 + + (15) feature_list -> error . feature_list + (18) def_attr -> error . colon type + (20) def_attr -> error . colon type larrow expr + (24) def_func -> error . opar formals cpar colon type ocur expr ccur + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + colon shift and go to state 29 + opar shift and go to state 30 + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + feature_list shift and go to state 28 + epsilon shift and go to state 15 + def_attr shift and go to state 16 + def_func shift and go to state 17 + +state 19 + + (16) def_attr -> id . colon type + (17) def_attr -> id . colon type larrow expr + (19) def_attr -> id . colon error + (21) def_attr -> id . colon error larrow expr + (22) def_attr -> id . colon type larrow error + (23) def_func -> id . opar formals cpar colon type ocur expr ccur + (25) def_func -> id . opar error cpar colon type ocur expr ccur + (26) def_func -> id . opar formals cpar colon error ocur expr ccur + (27) def_func -> id . opar formals cpar colon type ocur error ccur + + colon shift and go to state 31 + opar shift and go to state 32 + + +state 20 + + (7) def_class -> class type inherits type . ocur feature_list ccur semi + + ocur shift and go to state 33 + + +state 21 + + (11) def_class -> class type inherits error . ocur feature_list ccur semi + + ocur shift and go to state 34 + + +state 22 + + (8) def_class -> class error ocur feature_list . ccur semi + + ccur shift and go to state 35 + + +state 23 + + (10) def_class -> class error inherits error . ocur feature_list ccur semi + + ocur shift and go to state 36 + + +state 24 + + (9) def_class -> class error inherits type . ocur feature_list ccur semi + + ocur shift and go to state 37 + + +state 25 + + (6) def_class -> class type ocur feature_list ccur . semi + + semi shift and go to state 38 + + +state 26 + + (13) feature_list -> def_attr semi . feature_list + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + def_attr shift and go to state 16 + feature_list shift and go to state 39 + epsilon shift and go to state 15 + def_func shift and go to state 17 + +state 27 + + (14) feature_list -> def_func semi . feature_list + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + def_func shift and go to state 17 + feature_list shift and go to state 40 + epsilon shift and go to state 15 + def_attr shift and go to state 16 + +state 28 + + (15) feature_list -> error feature_list . + + ccur reduce using rule 15 (feature_list -> error feature_list .) + + +state 29 + + (18) def_attr -> error colon . type + (20) def_attr -> error colon . type larrow expr + + type shift and go to state 41 + + +state 30 + + (24) def_func -> error opar . formals cpar colon type ocur expr ccur + (28) formals -> . param_list + (29) formals -> . param_list_empty + (30) param_list -> . param + (31) param_list -> . param comma param_list + (32) param_list -> . error param_list + (33) param_list_empty -> . epsilon + (34) param -> . id colon type + (2) epsilon -> . + + error shift and go to state 42 + id shift and go to state 48 + cpar reduce using rule 2 (epsilon -> .) + + formals shift and go to state 43 + param_list shift and go to state 44 + param_list_empty shift and go to state 45 + param shift and go to state 46 + epsilon shift and go to state 47 + +state 31 + + (16) def_attr -> id colon . type + (17) def_attr -> id colon . type larrow expr + (19) def_attr -> id colon . error + (21) def_attr -> id colon . error larrow expr + (22) def_attr -> id colon . type larrow error + + type shift and go to state 49 + error shift and go to state 50 + + +state 32 + + (23) def_func -> id opar . formals cpar colon type ocur expr ccur + (25) def_func -> id opar . error cpar colon type ocur expr ccur + (26) def_func -> id opar . formals cpar colon error ocur expr ccur + (27) def_func -> id opar . formals cpar colon type ocur error ccur + (28) formals -> . param_list + (29) formals -> . param_list_empty + (30) param_list -> . param + (31) param_list -> . param comma param_list + (32) param_list -> . error param_list + (33) param_list_empty -> . epsilon + (34) param -> . id colon type + (2) epsilon -> . + + error shift and go to state 52 + id shift and go to state 48 + cpar reduce using rule 2 (epsilon -> .) + + formals shift and go to state 51 + param_list shift and go to state 44 + param_list_empty shift and go to state 45 + param shift and go to state 46 + epsilon shift and go to state 47 + +state 33 + + (7) def_class -> class type inherits type ocur . feature_list ccur semi + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + feature_list shift and go to state 53 + epsilon shift and go to state 15 + def_attr shift and go to state 16 + def_func shift and go to state 17 + +state 34 + + (11) def_class -> class type inherits error ocur . feature_list ccur semi + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + feature_list shift and go to state 54 + epsilon shift and go to state 15 + def_attr shift and go to state 16 + def_func shift and go to state 17 + +state 35 + + (8) def_class -> class error ocur feature_list ccur . semi + + semi shift and go to state 55 + + +state 36 + + (10) def_class -> class error inherits error ocur . feature_list ccur semi + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + feature_list shift and go to state 56 + epsilon shift and go to state 15 + def_attr shift and go to state 16 + def_func shift and go to state 17 + +state 37 + + (9) def_class -> class error inherits type ocur . feature_list ccur semi + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + feature_list shift and go to state 57 + epsilon shift and go to state 15 + def_attr shift and go to state 16 + def_func shift and go to state 17 + +state 38 + + (6) def_class -> class type ocur feature_list ccur semi . + + error reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) + class reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) + $end reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) + + +state 39 + + (13) feature_list -> def_attr semi feature_list . + + ccur reduce using rule 13 (feature_list -> def_attr semi feature_list .) + + +state 40 + + (14) feature_list -> def_func semi feature_list . + + ccur reduce using rule 14 (feature_list -> def_func semi feature_list .) + + +state 41 + + (18) def_attr -> error colon type . + (20) def_attr -> error colon type . larrow expr + + semi reduce using rule 18 (def_attr -> error colon type .) + larrow shift and go to state 58 + + +state 42 + + (32) param_list -> error . param_list + (30) param_list -> . param + (31) param_list -> . param comma param_list + (32) param_list -> . error param_list + (34) param -> . id colon type + + error shift and go to state 42 + id shift and go to state 48 + + param_list shift and go to state 59 + param shift and go to state 46 + +state 43 + + (24) def_func -> error opar formals . cpar colon type ocur expr ccur + + cpar shift and go to state 60 + + +state 44 + + (28) formals -> param_list . + + cpar reduce using rule 28 (formals -> param_list .) + + +state 45 + + (29) formals -> param_list_empty . + + cpar reduce using rule 29 (formals -> param_list_empty .) + + +state 46 + + (30) param_list -> param . + (31) param_list -> param . comma param_list + + cpar reduce using rule 30 (param_list -> param .) + comma shift and go to state 61 + + +state 47 + + (33) param_list_empty -> epsilon . + + cpar reduce using rule 33 (param_list_empty -> epsilon .) + + +state 48 + + (34) param -> id . colon type + + colon shift and go to state 62 + + +state 49 + + (16) def_attr -> id colon type . + (17) def_attr -> id colon type . larrow expr + (22) def_attr -> id colon type . larrow error + + semi reduce using rule 16 (def_attr -> id colon type .) + larrow shift and go to state 63 + + +state 50 + + (19) def_attr -> id colon error . + (21) def_attr -> id colon error . larrow expr + + semi reduce using rule 19 (def_attr -> id colon error .) + larrow shift and go to state 64 + + +state 51 + + (23) def_func -> id opar formals . cpar colon type ocur expr ccur + (26) def_func -> id opar formals . cpar colon error ocur expr ccur + (27) def_func -> id opar formals . cpar colon type ocur error ccur + + cpar shift and go to state 65 + + +state 52 + + (25) def_func -> id opar error . cpar colon type ocur expr ccur + (32) param_list -> error . param_list + (30) param_list -> . param + (31) param_list -> . param comma param_list + (32) param_list -> . error param_list + (34) param -> . id colon type + + cpar shift and go to state 66 + error shift and go to state 42 + id shift and go to state 48 + + param_list shift and go to state 59 + param shift and go to state 46 + +state 53 + + (7) def_class -> class type inherits type ocur feature_list . ccur semi + + ccur shift and go to state 67 + + +state 54 + + (11) def_class -> class type inherits error ocur feature_list . ccur semi + + ccur shift and go to state 68 + + +state 55 + + (8) def_class -> class error ocur feature_list ccur semi . + + error reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + class reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + $end reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + + +state 56 + + (10) def_class -> class error inherits error ocur feature_list . ccur semi + + ccur shift and go to state 69 + + +state 57 + + (9) def_class -> class error inherits type ocur feature_list . ccur semi + + ccur shift and go to state 70 + + +state 58 + + (20) def_attr -> error colon type larrow . expr + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 71 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 59 + + (32) param_list -> error param_list . + + cpar reduce using rule 32 (param_list -> error param_list .) + + +state 60 + + (24) def_func -> error opar formals cpar . colon type ocur expr ccur + + colon shift and go to state 95 + + +state 61 + + (31) param_list -> param comma . param_list + (30) param_list -> . param + (31) param_list -> . param comma param_list + (32) param_list -> . error param_list + (34) param -> . id colon type + + error shift and go to state 42 + id shift and go to state 48 + + param shift and go to state 46 + param_list shift and go to state 96 + +state 62 + + (34) param -> id colon . type + + type shift and go to state 97 + + +state 63 + + (17) def_attr -> id colon type larrow . expr + (22) def_attr -> id colon type larrow . error + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 99 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 98 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 64 + + (21) def_attr -> id colon error larrow . expr + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 100 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 65 + + (23) def_func -> id opar formals cpar . colon type ocur expr ccur + (26) def_func -> id opar formals cpar . colon error ocur expr ccur + (27) def_func -> id opar formals cpar . colon type ocur error ccur + + colon shift and go to state 101 + + +state 66 + + (25) def_func -> id opar error cpar . colon type ocur expr ccur + + colon shift and go to state 102 + + +state 67 + + (7) def_class -> class type inherits type ocur feature_list ccur . semi + + semi shift and go to state 103 + + +state 68 + + (11) def_class -> class type inherits error ocur feature_list ccur . semi + + semi shift and go to state 104 + + +state 69 + + (10) def_class -> class error inherits error ocur feature_list ccur . semi + + semi shift and go to state 105 + + +state 70 + + (9) def_class -> class error inherits type ocur feature_list ccur . semi + + semi shift and go to state 106 + + +state 71 + + (20) def_attr -> error colon type larrow expr . + + semi reduce using rule 20 (def_attr -> error colon type larrow expr .) + + +state 72 + + (35) expr -> let . let_list in expr + (36) expr -> let . error in expr + (37) expr -> let . let_list in error + (50) let_list -> . let_assign + (51) let_list -> . let_assign comma let_list + (52) let_list -> . error let_list + (53) let_assign -> . param larrow expr + (54) let_assign -> . param + (34) param -> . id colon type + + error shift and go to state 108 + id shift and go to state 48 + + let_list shift and go to state 107 + let_assign shift and go to state 109 + param shift and go to state 110 + +state 73 + + (38) expr -> case . expr of cases_list esac + (39) expr -> case . error of cases_list esac + (40) expr -> case . expr of error esac + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 112 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 111 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 74 + + (41) expr -> if . expr then expr else expr fi + (42) expr -> if . error then expr else expr fi + (43) expr -> if . expr then error else expr fi + (44) expr -> if . expr then expr else error fi + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 114 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 113 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 75 + + (45) expr -> while . expr loop expr pool + (46) expr -> while . error loop expr pool + (47) expr -> while . expr loop error pool + (48) expr -> while . expr loop expr error + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 116 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 115 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 76 + + (49) expr -> arith . + + semi reduce using rule 49 (expr -> arith .) + of reduce using rule 49 (expr -> arith .) + then reduce using rule 49 (expr -> arith .) + loop reduce using rule 49 (expr -> arith .) + cpar reduce using rule 49 (expr -> arith .) + comma reduce using rule 49 (expr -> arith .) + in reduce using rule 49 (expr -> arith .) + else reduce using rule 49 (expr -> arith .) + pool reduce using rule 49 (expr -> arith .) + error reduce using rule 49 (expr -> arith .) + ccur reduce using rule 49 (expr -> arith .) + fi reduce using rule 49 (expr -> arith .) + + +state 77 + + (59) arith -> id . larrow expr + (81) atom -> id . + (92) func_call -> id . opar args cpar + + larrow shift and go to state 117 + arroba reduce using rule 81 (atom -> id .) + dot reduce using rule 81 (atom -> id .) + star reduce using rule 81 (atom -> id .) + div reduce using rule 81 (atom -> id .) + plus reduce using rule 81 (atom -> id .) + minus reduce using rule 81 (atom -> id .) + less reduce using rule 81 (atom -> id .) + lesseq reduce using rule 81 (atom -> id .) + equal reduce using rule 81 (atom -> id .) + semi reduce using rule 81 (atom -> id .) + of reduce using rule 81 (atom -> id .) + then reduce using rule 81 (atom -> id .) + loop reduce using rule 81 (atom -> id .) + cpar reduce using rule 81 (atom -> id .) + comma reduce using rule 81 (atom -> id .) + in reduce using rule 81 (atom -> id .) + else reduce using rule 81 (atom -> id .) + pool reduce using rule 81 (atom -> id .) + error reduce using rule 81 (atom -> id .) + ccur reduce using rule 81 (atom -> id .) + fi reduce using rule 81 (atom -> id .) + opar shift and go to state 118 + + +state 78 + + (60) arith -> not . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + comp shift and go to state 119 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 79 + + (61) arith -> comp . + (62) comp -> comp . less op + (63) comp -> comp . lesseq op + (64) comp -> comp . equal op + + semi reduce using rule 61 (arith -> comp .) + of reduce using rule 61 (arith -> comp .) + then reduce using rule 61 (arith -> comp .) + loop reduce using rule 61 (arith -> comp .) + cpar reduce using rule 61 (arith -> comp .) + comma reduce using rule 61 (arith -> comp .) + in reduce using rule 61 (arith -> comp .) + else reduce using rule 61 (arith -> comp .) + pool reduce using rule 61 (arith -> comp .) + error reduce using rule 61 (arith -> comp .) + ccur reduce using rule 61 (arith -> comp .) + fi reduce using rule 61 (arith -> comp .) + less shift and go to state 121 + lesseq shift and go to state 122 + equal shift and go to state 123 + + +state 80 + + (65) comp -> op . + (66) op -> op . plus term + (67) op -> op . minus term + + less reduce using rule 65 (comp -> op .) + lesseq reduce using rule 65 (comp -> op .) + equal reduce using rule 65 (comp -> op .) + semi reduce using rule 65 (comp -> op .) + of reduce using rule 65 (comp -> op .) + then reduce using rule 65 (comp -> op .) + loop reduce using rule 65 (comp -> op .) + cpar reduce using rule 65 (comp -> op .) + comma reduce using rule 65 (comp -> op .) + in reduce using rule 65 (comp -> op .) + else reduce using rule 65 (comp -> op .) + pool reduce using rule 65 (comp -> op .) + error reduce using rule 65 (comp -> op .) + ccur reduce using rule 65 (comp -> op .) + fi reduce using rule 65 (comp -> op .) + plus shift and go to state 124 + minus shift and go to state 125 + + +state 81 + + (68) op -> term . + (69) term -> term . star base_call + (70) term -> term . div base_call + + plus reduce using rule 68 (op -> term .) + minus reduce using rule 68 (op -> term .) + less reduce using rule 68 (op -> term .) + lesseq reduce using rule 68 (op -> term .) + equal reduce using rule 68 (op -> term .) + semi reduce using rule 68 (op -> term .) + of reduce using rule 68 (op -> term .) + then reduce using rule 68 (op -> term .) + loop reduce using rule 68 (op -> term .) + cpar reduce using rule 68 (op -> term .) + comma reduce using rule 68 (op -> term .) + in reduce using rule 68 (op -> term .) + else reduce using rule 68 (op -> term .) + pool reduce using rule 68 (op -> term .) + error reduce using rule 68 (op -> term .) + ccur reduce using rule 68 (op -> term .) + fi reduce using rule 68 (op -> term .) + star shift and go to state 126 + div shift and go to state 127 + + +state 82 + + (73) term -> base_call . + + star reduce using rule 73 (term -> base_call .) + div reduce using rule 73 (term -> base_call .) + plus reduce using rule 73 (term -> base_call .) + minus reduce using rule 73 (term -> base_call .) + less reduce using rule 73 (term -> base_call .) + lesseq reduce using rule 73 (term -> base_call .) + equal reduce using rule 73 (term -> base_call .) + semi reduce using rule 73 (term -> base_call .) + of reduce using rule 73 (term -> base_call .) + then reduce using rule 73 (term -> base_call .) + loop reduce using rule 73 (term -> base_call .) + cpar reduce using rule 73 (term -> base_call .) + comma reduce using rule 73 (term -> base_call .) + in reduce using rule 73 (term -> base_call .) + else reduce using rule 73 (term -> base_call .) + pool reduce using rule 73 (term -> base_call .) + error reduce using rule 73 (term -> base_call .) + ccur reduce using rule 73 (term -> base_call .) + fi reduce using rule 73 (term -> base_call .) + + +state 83 + + (71) term -> isvoid . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + base_call shift and go to state 128 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 84 + + (72) term -> nox . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + base_call shift and go to state 129 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 85 + + (74) base_call -> factor . arroba type dot func_call + (75) base_call -> factor . + (78) factor -> factor . dot func_call + + arroba shift and go to state 130 + star reduce using rule 75 (base_call -> factor .) + div reduce using rule 75 (base_call -> factor .) + plus reduce using rule 75 (base_call -> factor .) + minus reduce using rule 75 (base_call -> factor .) + less reduce using rule 75 (base_call -> factor .) + lesseq reduce using rule 75 (base_call -> factor .) + equal reduce using rule 75 (base_call -> factor .) + semi reduce using rule 75 (base_call -> factor .) + of reduce using rule 75 (base_call -> factor .) + then reduce using rule 75 (base_call -> factor .) + loop reduce using rule 75 (base_call -> factor .) + cpar reduce using rule 75 (base_call -> factor .) + comma reduce using rule 75 (base_call -> factor .) + in reduce using rule 75 (base_call -> factor .) + else reduce using rule 75 (base_call -> factor .) + pool reduce using rule 75 (base_call -> factor .) + error reduce using rule 75 (base_call -> factor .) + ccur reduce using rule 75 (base_call -> factor .) + fi reduce using rule 75 (base_call -> factor .) + dot shift and go to state 131 + + +state 86 + + (79) factor -> func_call . + + arroba reduce using rule 79 (factor -> func_call .) + dot reduce using rule 79 (factor -> func_call .) + star reduce using rule 79 (factor -> func_call .) + div reduce using rule 79 (factor -> func_call .) + plus reduce using rule 79 (factor -> func_call .) + minus reduce using rule 79 (factor -> func_call .) + less reduce using rule 79 (factor -> func_call .) + lesseq reduce using rule 79 (factor -> func_call .) + equal reduce using rule 79 (factor -> func_call .) + semi reduce using rule 79 (factor -> func_call .) + of reduce using rule 79 (factor -> func_call .) + then reduce using rule 79 (factor -> func_call .) + loop reduce using rule 79 (factor -> func_call .) + cpar reduce using rule 79 (factor -> func_call .) + comma reduce using rule 79 (factor -> func_call .) + in reduce using rule 79 (factor -> func_call .) + else reduce using rule 79 (factor -> func_call .) + pool reduce using rule 79 (factor -> func_call .) + error reduce using rule 79 (factor -> func_call .) + ccur reduce using rule 79 (factor -> func_call .) + fi reduce using rule 79 (factor -> func_call .) + + +state 87 + + (76) factor -> atom . + + arroba reduce using rule 76 (factor -> atom .) + dot reduce using rule 76 (factor -> atom .) + star reduce using rule 76 (factor -> atom .) + div reduce using rule 76 (factor -> atom .) + plus reduce using rule 76 (factor -> atom .) + minus reduce using rule 76 (factor -> atom .) + less reduce using rule 76 (factor -> atom .) + lesseq reduce using rule 76 (factor -> atom .) + equal reduce using rule 76 (factor -> atom .) + semi reduce using rule 76 (factor -> atom .) + of reduce using rule 76 (factor -> atom .) + then reduce using rule 76 (factor -> atom .) + loop reduce using rule 76 (factor -> atom .) + cpar reduce using rule 76 (factor -> atom .) + comma reduce using rule 76 (factor -> atom .) + in reduce using rule 76 (factor -> atom .) + else reduce using rule 76 (factor -> atom .) + pool reduce using rule 76 (factor -> atom .) + error reduce using rule 76 (factor -> atom .) + ccur reduce using rule 76 (factor -> atom .) + fi reduce using rule 76 (factor -> atom .) + + +state 88 + + (77) factor -> opar . expr cpar + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 132 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 89 + + (80) atom -> num . + + arroba reduce using rule 80 (atom -> num .) + dot reduce using rule 80 (atom -> num .) + star reduce using rule 80 (atom -> num .) + div reduce using rule 80 (atom -> num .) + plus reduce using rule 80 (atom -> num .) + minus reduce using rule 80 (atom -> num .) + less reduce using rule 80 (atom -> num .) + lesseq reduce using rule 80 (atom -> num .) + equal reduce using rule 80 (atom -> num .) + semi reduce using rule 80 (atom -> num .) + of reduce using rule 80 (atom -> num .) + then reduce using rule 80 (atom -> num .) + loop reduce using rule 80 (atom -> num .) + cpar reduce using rule 80 (atom -> num .) + comma reduce using rule 80 (atom -> num .) + in reduce using rule 80 (atom -> num .) + else reduce using rule 80 (atom -> num .) + pool reduce using rule 80 (atom -> num .) + error reduce using rule 80 (atom -> num .) + ccur reduce using rule 80 (atom -> num .) + fi reduce using rule 80 (atom -> num .) + + +state 90 + + (82) atom -> new . type + (83) atom -> new . error + + type shift and go to state 133 + error shift and go to state 134 + + +state 91 + + (84) atom -> ocur . block ccur + (88) block -> . expr semi + (89) block -> . expr semi block + (90) block -> . error block + (91) block -> . error + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 137 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + block shift and go to state 135 + expr shift and go to state 136 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 92 + + (85) atom -> true . + + arroba reduce using rule 85 (atom -> true .) + dot reduce using rule 85 (atom -> true .) + star reduce using rule 85 (atom -> true .) + div reduce using rule 85 (atom -> true .) + plus reduce using rule 85 (atom -> true .) + minus reduce using rule 85 (atom -> true .) + less reduce using rule 85 (atom -> true .) + lesseq reduce using rule 85 (atom -> true .) + equal reduce using rule 85 (atom -> true .) + semi reduce using rule 85 (atom -> true .) + of reduce using rule 85 (atom -> true .) + then reduce using rule 85 (atom -> true .) + loop reduce using rule 85 (atom -> true .) + cpar reduce using rule 85 (atom -> true .) + comma reduce using rule 85 (atom -> true .) + in reduce using rule 85 (atom -> true .) + else reduce using rule 85 (atom -> true .) + pool reduce using rule 85 (atom -> true .) + error reduce using rule 85 (atom -> true .) + ccur reduce using rule 85 (atom -> true .) + fi reduce using rule 85 (atom -> true .) + + +state 93 + + (86) atom -> false . + + arroba reduce using rule 86 (atom -> false .) + dot reduce using rule 86 (atom -> false .) + star reduce using rule 86 (atom -> false .) + div reduce using rule 86 (atom -> false .) + plus reduce using rule 86 (atom -> false .) + minus reduce using rule 86 (atom -> false .) + less reduce using rule 86 (atom -> false .) + lesseq reduce using rule 86 (atom -> false .) + equal reduce using rule 86 (atom -> false .) + semi reduce using rule 86 (atom -> false .) + of reduce using rule 86 (atom -> false .) + then reduce using rule 86 (atom -> false .) + loop reduce using rule 86 (atom -> false .) + cpar reduce using rule 86 (atom -> false .) + comma reduce using rule 86 (atom -> false .) + in reduce using rule 86 (atom -> false .) + else reduce using rule 86 (atom -> false .) + pool reduce using rule 86 (atom -> false .) + error reduce using rule 86 (atom -> false .) + ccur reduce using rule 86 (atom -> false .) + fi reduce using rule 86 (atom -> false .) + + +state 94 + + (87) atom -> string . + + arroba reduce using rule 87 (atom -> string .) + dot reduce using rule 87 (atom -> string .) + star reduce using rule 87 (atom -> string .) + div reduce using rule 87 (atom -> string .) + plus reduce using rule 87 (atom -> string .) + minus reduce using rule 87 (atom -> string .) + less reduce using rule 87 (atom -> string .) + lesseq reduce using rule 87 (atom -> string .) + equal reduce using rule 87 (atom -> string .) + semi reduce using rule 87 (atom -> string .) + of reduce using rule 87 (atom -> string .) + then reduce using rule 87 (atom -> string .) + loop reduce using rule 87 (atom -> string .) + cpar reduce using rule 87 (atom -> string .) + comma reduce using rule 87 (atom -> string .) + in reduce using rule 87 (atom -> string .) + else reduce using rule 87 (atom -> string .) + pool reduce using rule 87 (atom -> string .) + error reduce using rule 87 (atom -> string .) + ccur reduce using rule 87 (atom -> string .) + fi reduce using rule 87 (atom -> string .) + + +state 95 + + (24) def_func -> error opar formals cpar colon . type ocur expr ccur + + type shift and go to state 138 + + +state 96 + + (31) param_list -> param comma param_list . + + cpar reduce using rule 31 (param_list -> param comma param_list .) + + +state 97 + + (34) param -> id colon type . + + comma reduce using rule 34 (param -> id colon type .) + cpar reduce using rule 34 (param -> id colon type .) + larrow reduce using rule 34 (param -> id colon type .) + in reduce using rule 34 (param -> id colon type .) + + +state 98 + + (17) def_attr -> id colon type larrow expr . + + semi reduce using rule 17 (def_attr -> id colon type larrow expr .) + + +state 99 + + (22) def_attr -> id colon type larrow error . + + semi reduce using rule 22 (def_attr -> id colon type larrow error .) + + +state 100 + + (21) def_attr -> id colon error larrow expr . + + semi reduce using rule 21 (def_attr -> id colon error larrow expr .) + + +state 101 + + (23) def_func -> id opar formals cpar colon . type ocur expr ccur + (26) def_func -> id opar formals cpar colon . error ocur expr ccur + (27) def_func -> id opar formals cpar colon . type ocur error ccur + + type shift and go to state 139 + error shift and go to state 140 + + +state 102 + + (25) def_func -> id opar error cpar colon . type ocur expr ccur + + type shift and go to state 141 + + +state 103 + + (7) def_class -> class type inherits type ocur feature_list ccur semi . + + error reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + class reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + $end reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + + +state 104 + + (11) def_class -> class type inherits error ocur feature_list ccur semi . + + error reduce using rule 11 (def_class -> class type inherits error ocur feature_list ccur semi .) + class reduce using rule 11 (def_class -> class type inherits error ocur feature_list ccur semi .) + $end reduce using rule 11 (def_class -> class type inherits error ocur feature_list ccur semi .) + + +state 105 + + (10) def_class -> class error inherits error ocur feature_list ccur semi . + + error reduce using rule 10 (def_class -> class error inherits error ocur feature_list ccur semi .) + class reduce using rule 10 (def_class -> class error inherits error ocur feature_list ccur semi .) + $end reduce using rule 10 (def_class -> class error inherits error ocur feature_list ccur semi .) + + +state 106 + + (9) def_class -> class error inherits type ocur feature_list ccur semi . + + error reduce using rule 9 (def_class -> class error inherits type ocur feature_list ccur semi .) + class reduce using rule 9 (def_class -> class error inherits type ocur feature_list ccur semi .) + $end reduce using rule 9 (def_class -> class error inherits type ocur feature_list ccur semi .) + + +state 107 + + (35) expr -> let let_list . in expr + (37) expr -> let let_list . in error + + in shift and go to state 142 + + +state 108 + + (36) expr -> let error . in expr + (52) let_list -> error . let_list + (50) let_list -> . let_assign + (51) let_list -> . let_assign comma let_list + (52) let_list -> . error let_list + (53) let_assign -> . param larrow expr + (54) let_assign -> . param + (34) param -> . id colon type + + in shift and go to state 144 + error shift and go to state 143 + id shift and go to state 48 + + let_list shift and go to state 145 + let_assign shift and go to state 109 + param shift and go to state 110 + +state 109 + + (50) let_list -> let_assign . + (51) let_list -> let_assign . comma let_list + + in reduce using rule 50 (let_list -> let_assign .) + comma shift and go to state 146 + + +state 110 + + (53) let_assign -> param . larrow expr + (54) let_assign -> param . + + larrow shift and go to state 147 + comma reduce using rule 54 (let_assign -> param .) + in reduce using rule 54 (let_assign -> param .) + + +state 111 + + (38) expr -> case expr . of cases_list esac + (40) expr -> case expr . of error esac + + of shift and go to state 148 + + +state 112 + + (39) expr -> case error . of cases_list esac + + of shift and go to state 149 + + +state 113 + + (41) expr -> if expr . then expr else expr fi + (43) expr -> if expr . then error else expr fi + (44) expr -> if expr . then expr else error fi + + then shift and go to state 150 + + +state 114 + + (42) expr -> if error . then expr else expr fi + + then shift and go to state 151 + + +state 115 + + (45) expr -> while expr . loop expr pool + (47) expr -> while expr . loop error pool + (48) expr -> while expr . loop expr error + + loop shift and go to state 152 + + +state 116 + + (46) expr -> while error . loop expr pool + + loop shift and go to state 153 + + +state 117 + + (59) arith -> id larrow . expr + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 154 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 118 + + (92) func_call -> id opar . args cpar + (93) args -> . arg_list + (94) args -> . arg_list_empty + (95) arg_list -> . expr + (96) arg_list -> . expr comma arg_list + (97) arg_list -> . error arg_list + (98) arg_list_empty -> . epsilon + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (2) epsilon -> . + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 159 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + cpar reduce using rule 2 (epsilon -> .) + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + args shift and go to state 155 + arg_list shift and go to state 156 + arg_list_empty shift and go to state 157 + expr shift and go to state 158 + epsilon shift and go to state 160 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 119 + + (60) arith -> not comp . + (62) comp -> comp . less op + (63) comp -> comp . lesseq op + (64) comp -> comp . equal op + + semi reduce using rule 60 (arith -> not comp .) + of reduce using rule 60 (arith -> not comp .) + then reduce using rule 60 (arith -> not comp .) + loop reduce using rule 60 (arith -> not comp .) + cpar reduce using rule 60 (arith -> not comp .) + comma reduce using rule 60 (arith -> not comp .) + in reduce using rule 60 (arith -> not comp .) + else reduce using rule 60 (arith -> not comp .) + pool reduce using rule 60 (arith -> not comp .) + error reduce using rule 60 (arith -> not comp .) + ccur reduce using rule 60 (arith -> not comp .) + fi reduce using rule 60 (arith -> not comp .) + less shift and go to state 121 + lesseq shift and go to state 122 + equal shift and go to state 123 + + +state 120 + + (81) atom -> id . + (92) func_call -> id . opar args cpar + + arroba reduce using rule 81 (atom -> id .) + dot reduce using rule 81 (atom -> id .) + star reduce using rule 81 (atom -> id .) + div reduce using rule 81 (atom -> id .) + plus reduce using rule 81 (atom -> id .) + minus reduce using rule 81 (atom -> id .) + less reduce using rule 81 (atom -> id .) + lesseq reduce using rule 81 (atom -> id .) + equal reduce using rule 81 (atom -> id .) + semi reduce using rule 81 (atom -> id .) + of reduce using rule 81 (atom -> id .) + then reduce using rule 81 (atom -> id .) + loop reduce using rule 81 (atom -> id .) + cpar reduce using rule 81 (atom -> id .) + comma reduce using rule 81 (atom -> id .) + in reduce using rule 81 (atom -> id .) + else reduce using rule 81 (atom -> id .) + pool reduce using rule 81 (atom -> id .) + error reduce using rule 81 (atom -> id .) + ccur reduce using rule 81 (atom -> id .) + fi reduce using rule 81 (atom -> id .) + opar shift and go to state 118 + + +state 121 + + (62) comp -> comp less . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + op shift and go to state 161 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 122 + + (63) comp -> comp lesseq . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + op shift and go to state 162 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 123 + + (64) comp -> comp equal . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + op shift and go to state 163 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 124 + + (66) op -> op plus . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + term shift and go to state 164 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 125 + + (67) op -> op minus . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + term shift and go to state 165 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 126 + + (69) term -> term star . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + base_call shift and go to state 166 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 127 + + (70) term -> term div . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + base_call shift and go to state 167 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 128 + + (71) term -> isvoid base_call . + + star reduce using rule 71 (term -> isvoid base_call .) + div reduce using rule 71 (term -> isvoid base_call .) + plus reduce using rule 71 (term -> isvoid base_call .) + minus reduce using rule 71 (term -> isvoid base_call .) + less reduce using rule 71 (term -> isvoid base_call .) + lesseq reduce using rule 71 (term -> isvoid base_call .) + equal reduce using rule 71 (term -> isvoid base_call .) + semi reduce using rule 71 (term -> isvoid base_call .) + of reduce using rule 71 (term -> isvoid base_call .) + then reduce using rule 71 (term -> isvoid base_call .) + loop reduce using rule 71 (term -> isvoid base_call .) + cpar reduce using rule 71 (term -> isvoid base_call .) + comma reduce using rule 71 (term -> isvoid base_call .) + in reduce using rule 71 (term -> isvoid base_call .) + else reduce using rule 71 (term -> isvoid base_call .) + pool reduce using rule 71 (term -> isvoid base_call .) + error reduce using rule 71 (term -> isvoid base_call .) + ccur reduce using rule 71 (term -> isvoid base_call .) + fi reduce using rule 71 (term -> isvoid base_call .) + + +state 129 + + (72) term -> nox base_call . + + star reduce using rule 72 (term -> nox base_call .) + div reduce using rule 72 (term -> nox base_call .) + plus reduce using rule 72 (term -> nox base_call .) + minus reduce using rule 72 (term -> nox base_call .) + less reduce using rule 72 (term -> nox base_call .) + lesseq reduce using rule 72 (term -> nox base_call .) + equal reduce using rule 72 (term -> nox base_call .) + semi reduce using rule 72 (term -> nox base_call .) + of reduce using rule 72 (term -> nox base_call .) + then reduce using rule 72 (term -> nox base_call .) + loop reduce using rule 72 (term -> nox base_call .) + cpar reduce using rule 72 (term -> nox base_call .) + comma reduce using rule 72 (term -> nox base_call .) + in reduce using rule 72 (term -> nox base_call .) + else reduce using rule 72 (term -> nox base_call .) + pool reduce using rule 72 (term -> nox base_call .) + error reduce using rule 72 (term -> nox base_call .) + ccur reduce using rule 72 (term -> nox base_call .) + fi reduce using rule 72 (term -> nox base_call .) + + +state 130 + + (74) base_call -> factor arroba . type dot func_call + + type shift and go to state 168 + + +state 131 + + (78) factor -> factor dot . func_call + (92) func_call -> . id opar args cpar + + id shift and go to state 170 + + func_call shift and go to state 169 + +state 132 + + (77) factor -> opar expr . cpar + + cpar shift and go to state 171 + + +state 133 + + (82) atom -> new type . + + arroba reduce using rule 82 (atom -> new type .) + dot reduce using rule 82 (atom -> new type .) + star reduce using rule 82 (atom -> new type .) + div reduce using rule 82 (atom -> new type .) + plus reduce using rule 82 (atom -> new type .) + minus reduce using rule 82 (atom -> new type .) + less reduce using rule 82 (atom -> new type .) + lesseq reduce using rule 82 (atom -> new type .) + equal reduce using rule 82 (atom -> new type .) + semi reduce using rule 82 (atom -> new type .) + of reduce using rule 82 (atom -> new type .) + then reduce using rule 82 (atom -> new type .) + loop reduce using rule 82 (atom -> new type .) + cpar reduce using rule 82 (atom -> new type .) + comma reduce using rule 82 (atom -> new type .) + in reduce using rule 82 (atom -> new type .) + else reduce using rule 82 (atom -> new type .) + pool reduce using rule 82 (atom -> new type .) + error reduce using rule 82 (atom -> new type .) + ccur reduce using rule 82 (atom -> new type .) + fi reduce using rule 82 (atom -> new type .) + + +state 134 + + (83) atom -> new error . + + arroba reduce using rule 83 (atom -> new error .) + dot reduce using rule 83 (atom -> new error .) + star reduce using rule 83 (atom -> new error .) + div reduce using rule 83 (atom -> new error .) + plus reduce using rule 83 (atom -> new error .) + minus reduce using rule 83 (atom -> new error .) + less reduce using rule 83 (atom -> new error .) + lesseq reduce using rule 83 (atom -> new error .) + equal reduce using rule 83 (atom -> new error .) + semi reduce using rule 83 (atom -> new error .) + of reduce using rule 83 (atom -> new error .) + then reduce using rule 83 (atom -> new error .) + loop reduce using rule 83 (atom -> new error .) + cpar reduce using rule 83 (atom -> new error .) + comma reduce using rule 83 (atom -> new error .) + in reduce using rule 83 (atom -> new error .) + else reduce using rule 83 (atom -> new error .) + pool reduce using rule 83 (atom -> new error .) + error reduce using rule 83 (atom -> new error .) + ccur reduce using rule 83 (atom -> new error .) + fi reduce using rule 83 (atom -> new error .) + + +state 135 + + (84) atom -> ocur block . ccur + + ccur shift and go to state 172 + + +state 136 + + (88) block -> expr . semi + (89) block -> expr . semi block + + semi shift and go to state 173 + + +state 137 + + (90) block -> error . block + (91) block -> error . + (88) block -> . expr semi + (89) block -> . expr semi block + (90) block -> . error block + (91) block -> . error + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + ccur reduce using rule 91 (block -> error .) + error shift and go to state 137 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + block shift and go to state 174 + expr shift and go to state 136 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 138 + + (24) def_func -> error opar formals cpar colon type . ocur expr ccur + + ocur shift and go to state 175 + + +state 139 + + (23) def_func -> id opar formals cpar colon type . ocur expr ccur + (27) def_func -> id opar formals cpar colon type . ocur error ccur + + ocur shift and go to state 176 + + +state 140 + + (26) def_func -> id opar formals cpar colon error . ocur expr ccur + + ocur shift and go to state 177 + + +state 141 + + (25) def_func -> id opar error cpar colon type . ocur expr ccur + + ocur shift and go to state 178 + + +state 142 + + (35) expr -> let let_list in . expr + (37) expr -> let let_list in . error + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 180 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 179 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 143 + + (52) let_list -> error . let_list + (50) let_list -> . let_assign + (51) let_list -> . let_assign comma let_list + (52) let_list -> . error let_list + (53) let_assign -> . param larrow expr + (54) let_assign -> . param + (34) param -> . id colon type + + error shift and go to state 143 + id shift and go to state 48 + + let_list shift and go to state 145 + let_assign shift and go to state 109 + param shift and go to state 110 + +state 144 + + (36) expr -> let error in . expr + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 181 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 145 + + (52) let_list -> error let_list . + + in reduce using rule 52 (let_list -> error let_list .) + + +state 146 + + (51) let_list -> let_assign comma . let_list + (50) let_list -> . let_assign + (51) let_list -> . let_assign comma let_list + (52) let_list -> . error let_list + (53) let_assign -> . param larrow expr + (54) let_assign -> . param + (34) param -> . id colon type + + error shift and go to state 143 + id shift and go to state 48 + + let_assign shift and go to state 109 + let_list shift and go to state 182 + param shift and go to state 110 + +state 147 + + (53) let_assign -> param larrow . expr + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 183 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 148 + + (38) expr -> case expr of . cases_list esac + (40) expr -> case expr of . error esac + (55) cases_list -> . casep semi + (56) cases_list -> . casep semi cases_list + (57) cases_list -> . error cases_list + (58) casep -> . id colon type rarrow expr + + error shift and go to state 185 + id shift and go to state 187 + + cases_list shift and go to state 184 + casep shift and go to state 186 + +state 149 + + (39) expr -> case error of . cases_list esac + (55) cases_list -> . casep semi + (56) cases_list -> . casep semi cases_list + (57) cases_list -> . error cases_list + (58) casep -> . id colon type rarrow expr + + error shift and go to state 188 + id shift and go to state 187 + + cases_list shift and go to state 189 + casep shift and go to state 186 + +state 150 + + (41) expr -> if expr then . expr else expr fi + (43) expr -> if expr then . error else expr fi + (44) expr -> if expr then . expr else error fi + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 191 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 190 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 151 + + (42) expr -> if error then . expr else expr fi + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 192 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 152 + + (45) expr -> while expr loop . expr pool + (47) expr -> while expr loop . error pool + (48) expr -> while expr loop . expr error + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 194 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 193 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 153 + + (46) expr -> while error loop . expr pool + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 195 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 154 + + (59) arith -> id larrow expr . + + semi reduce using rule 59 (arith -> id larrow expr .) + of reduce using rule 59 (arith -> id larrow expr .) + then reduce using rule 59 (arith -> id larrow expr .) + loop reduce using rule 59 (arith -> id larrow expr .) + cpar reduce using rule 59 (arith -> id larrow expr .) + comma reduce using rule 59 (arith -> id larrow expr .) + in reduce using rule 59 (arith -> id larrow expr .) + else reduce using rule 59 (arith -> id larrow expr .) + pool reduce using rule 59 (arith -> id larrow expr .) + error reduce using rule 59 (arith -> id larrow expr .) + ccur reduce using rule 59 (arith -> id larrow expr .) + fi reduce using rule 59 (arith -> id larrow expr .) + + +state 155 + + (92) func_call -> id opar args . cpar + + cpar shift and go to state 196 + + +state 156 + + (93) args -> arg_list . + + cpar reduce using rule 93 (args -> arg_list .) + + +state 157 + + (94) args -> arg_list_empty . + + cpar reduce using rule 94 (args -> arg_list_empty .) + + +state 158 + + (95) arg_list -> expr . + (96) arg_list -> expr . comma arg_list + + cpar reduce using rule 95 (arg_list -> expr .) + comma shift and go to state 197 + + +state 159 + + (97) arg_list -> error . arg_list + (95) arg_list -> . expr + (96) arg_list -> . expr comma arg_list + (97) arg_list -> . error arg_list + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 159 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + arg_list shift and go to state 198 + expr shift and go to state 158 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 160 + + (98) arg_list_empty -> epsilon . + + cpar reduce using rule 98 (arg_list_empty -> epsilon .) + + +state 161 + + (62) comp -> comp less op . + (66) op -> op . plus term + (67) op -> op . minus term + + less reduce using rule 62 (comp -> comp less op .) + lesseq reduce using rule 62 (comp -> comp less op .) + equal reduce using rule 62 (comp -> comp less op .) + semi reduce using rule 62 (comp -> comp less op .) + of reduce using rule 62 (comp -> comp less op .) + then reduce using rule 62 (comp -> comp less op .) + loop reduce using rule 62 (comp -> comp less op .) + cpar reduce using rule 62 (comp -> comp less op .) + comma reduce using rule 62 (comp -> comp less op .) + in reduce using rule 62 (comp -> comp less op .) + else reduce using rule 62 (comp -> comp less op .) + pool reduce using rule 62 (comp -> comp less op .) + error reduce using rule 62 (comp -> comp less op .) + ccur reduce using rule 62 (comp -> comp less op .) + fi reduce using rule 62 (comp -> comp less op .) + plus shift and go to state 124 + minus shift and go to state 125 + + +state 162 + + (63) comp -> comp lesseq op . + (66) op -> op . plus term + (67) op -> op . minus term + + less reduce using rule 63 (comp -> comp lesseq op .) + lesseq reduce using rule 63 (comp -> comp lesseq op .) + equal reduce using rule 63 (comp -> comp lesseq op .) + semi reduce using rule 63 (comp -> comp lesseq op .) + of reduce using rule 63 (comp -> comp lesseq op .) + then reduce using rule 63 (comp -> comp lesseq op .) + loop reduce using rule 63 (comp -> comp lesseq op .) + cpar reduce using rule 63 (comp -> comp lesseq op .) + comma reduce using rule 63 (comp -> comp lesseq op .) + in reduce using rule 63 (comp -> comp lesseq op .) + else reduce using rule 63 (comp -> comp lesseq op .) + pool reduce using rule 63 (comp -> comp lesseq op .) + error reduce using rule 63 (comp -> comp lesseq op .) + ccur reduce using rule 63 (comp -> comp lesseq op .) + fi reduce using rule 63 (comp -> comp lesseq op .) + plus shift and go to state 124 + minus shift and go to state 125 + + +state 163 + + (64) comp -> comp equal op . + (66) op -> op . plus term + (67) op -> op . minus term + + less reduce using rule 64 (comp -> comp equal op .) + lesseq reduce using rule 64 (comp -> comp equal op .) + equal reduce using rule 64 (comp -> comp equal op .) + semi reduce using rule 64 (comp -> comp equal op .) + of reduce using rule 64 (comp -> comp equal op .) + then reduce using rule 64 (comp -> comp equal op .) + loop reduce using rule 64 (comp -> comp equal op .) + cpar reduce using rule 64 (comp -> comp equal op .) + comma reduce using rule 64 (comp -> comp equal op .) + in reduce using rule 64 (comp -> comp equal op .) + else reduce using rule 64 (comp -> comp equal op .) + pool reduce using rule 64 (comp -> comp equal op .) + error reduce using rule 64 (comp -> comp equal op .) + ccur reduce using rule 64 (comp -> comp equal op .) + fi reduce using rule 64 (comp -> comp equal op .) + plus shift and go to state 124 + minus shift and go to state 125 + + +state 164 + + (66) op -> op plus term . + (69) term -> term . star base_call + (70) term -> term . div base_call + + plus reduce using rule 66 (op -> op plus term .) + minus reduce using rule 66 (op -> op plus term .) + less reduce using rule 66 (op -> op plus term .) + lesseq reduce using rule 66 (op -> op plus term .) + equal reduce using rule 66 (op -> op plus term .) + semi reduce using rule 66 (op -> op plus term .) + of reduce using rule 66 (op -> op plus term .) + then reduce using rule 66 (op -> op plus term .) + loop reduce using rule 66 (op -> op plus term .) + cpar reduce using rule 66 (op -> op plus term .) + comma reduce using rule 66 (op -> op plus term .) + in reduce using rule 66 (op -> op plus term .) + else reduce using rule 66 (op -> op plus term .) + pool reduce using rule 66 (op -> op plus term .) + error reduce using rule 66 (op -> op plus term .) + ccur reduce using rule 66 (op -> op plus term .) + fi reduce using rule 66 (op -> op plus term .) + star shift and go to state 126 + div shift and go to state 127 + + +state 165 + + (67) op -> op minus term . + (69) term -> term . star base_call + (70) term -> term . div base_call + + plus reduce using rule 67 (op -> op minus term .) + minus reduce using rule 67 (op -> op minus term .) + less reduce using rule 67 (op -> op minus term .) + lesseq reduce using rule 67 (op -> op minus term .) + equal reduce using rule 67 (op -> op minus term .) + semi reduce using rule 67 (op -> op minus term .) + of reduce using rule 67 (op -> op minus term .) + then reduce using rule 67 (op -> op minus term .) + loop reduce using rule 67 (op -> op minus term .) + cpar reduce using rule 67 (op -> op minus term .) + comma reduce using rule 67 (op -> op minus term .) + in reduce using rule 67 (op -> op minus term .) + else reduce using rule 67 (op -> op minus term .) + pool reduce using rule 67 (op -> op minus term .) + error reduce using rule 67 (op -> op minus term .) + ccur reduce using rule 67 (op -> op minus term .) + fi reduce using rule 67 (op -> op minus term .) + star shift and go to state 126 + div shift and go to state 127 + + +state 166 + + (69) term -> term star base_call . + + star reduce using rule 69 (term -> term star base_call .) + div reduce using rule 69 (term -> term star base_call .) + plus reduce using rule 69 (term -> term star base_call .) + minus reduce using rule 69 (term -> term star base_call .) + less reduce using rule 69 (term -> term star base_call .) + lesseq reduce using rule 69 (term -> term star base_call .) + equal reduce using rule 69 (term -> term star base_call .) + semi reduce using rule 69 (term -> term star base_call .) + of reduce using rule 69 (term -> term star base_call .) + then reduce using rule 69 (term -> term star base_call .) + loop reduce using rule 69 (term -> term star base_call .) + cpar reduce using rule 69 (term -> term star base_call .) + comma reduce using rule 69 (term -> term star base_call .) + in reduce using rule 69 (term -> term star base_call .) + else reduce using rule 69 (term -> term star base_call .) + pool reduce using rule 69 (term -> term star base_call .) + error reduce using rule 69 (term -> term star base_call .) + ccur reduce using rule 69 (term -> term star base_call .) + fi reduce using rule 69 (term -> term star base_call .) + + +state 167 + + (70) term -> term div base_call . + + star reduce using rule 70 (term -> term div base_call .) + div reduce using rule 70 (term -> term div base_call .) + plus reduce using rule 70 (term -> term div base_call .) + minus reduce using rule 70 (term -> term div base_call .) + less reduce using rule 70 (term -> term div base_call .) + lesseq reduce using rule 70 (term -> term div base_call .) + equal reduce using rule 70 (term -> term div base_call .) + semi reduce using rule 70 (term -> term div base_call .) + of reduce using rule 70 (term -> term div base_call .) + then reduce using rule 70 (term -> term div base_call .) + loop reduce using rule 70 (term -> term div base_call .) + cpar reduce using rule 70 (term -> term div base_call .) + comma reduce using rule 70 (term -> term div base_call .) + in reduce using rule 70 (term -> term div base_call .) + else reduce using rule 70 (term -> term div base_call .) + pool reduce using rule 70 (term -> term div base_call .) + error reduce using rule 70 (term -> term div base_call .) + ccur reduce using rule 70 (term -> term div base_call .) + fi reduce using rule 70 (term -> term div base_call .) + + +state 168 + + (74) base_call -> factor arroba type . dot func_call + + dot shift and go to state 199 + + +state 169 + + (78) factor -> factor dot func_call . + + arroba reduce using rule 78 (factor -> factor dot func_call .) + dot reduce using rule 78 (factor -> factor dot func_call .) + star reduce using rule 78 (factor -> factor dot func_call .) + div reduce using rule 78 (factor -> factor dot func_call .) + plus reduce using rule 78 (factor -> factor dot func_call .) + minus reduce using rule 78 (factor -> factor dot func_call .) + less reduce using rule 78 (factor -> factor dot func_call .) + lesseq reduce using rule 78 (factor -> factor dot func_call .) + equal reduce using rule 78 (factor -> factor dot func_call .) + semi reduce using rule 78 (factor -> factor dot func_call .) + of reduce using rule 78 (factor -> factor dot func_call .) + then reduce using rule 78 (factor -> factor dot func_call .) + loop reduce using rule 78 (factor -> factor dot func_call .) + cpar reduce using rule 78 (factor -> factor dot func_call .) + comma reduce using rule 78 (factor -> factor dot func_call .) + in reduce using rule 78 (factor -> factor dot func_call .) + else reduce using rule 78 (factor -> factor dot func_call .) + pool reduce using rule 78 (factor -> factor dot func_call .) + error reduce using rule 78 (factor -> factor dot func_call .) + ccur reduce using rule 78 (factor -> factor dot func_call .) + fi reduce using rule 78 (factor -> factor dot func_call .) + + +state 170 + + (92) func_call -> id . opar args cpar + + opar shift and go to state 118 + + +state 171 + + (77) factor -> opar expr cpar . + + arroba reduce using rule 77 (factor -> opar expr cpar .) + dot reduce using rule 77 (factor -> opar expr cpar .) + star reduce using rule 77 (factor -> opar expr cpar .) + div reduce using rule 77 (factor -> opar expr cpar .) + plus reduce using rule 77 (factor -> opar expr cpar .) + minus reduce using rule 77 (factor -> opar expr cpar .) + less reduce using rule 77 (factor -> opar expr cpar .) + lesseq reduce using rule 77 (factor -> opar expr cpar .) + equal reduce using rule 77 (factor -> opar expr cpar .) + semi reduce using rule 77 (factor -> opar expr cpar .) + of reduce using rule 77 (factor -> opar expr cpar .) + then reduce using rule 77 (factor -> opar expr cpar .) + loop reduce using rule 77 (factor -> opar expr cpar .) + cpar reduce using rule 77 (factor -> opar expr cpar .) + comma reduce using rule 77 (factor -> opar expr cpar .) + in reduce using rule 77 (factor -> opar expr cpar .) + else reduce using rule 77 (factor -> opar expr cpar .) + pool reduce using rule 77 (factor -> opar expr cpar .) + error reduce using rule 77 (factor -> opar expr cpar .) + ccur reduce using rule 77 (factor -> opar expr cpar .) + fi reduce using rule 77 (factor -> opar expr cpar .) + + +state 172 + + (84) atom -> ocur block ccur . + + arroba reduce using rule 84 (atom -> ocur block ccur .) + dot reduce using rule 84 (atom -> ocur block ccur .) + star reduce using rule 84 (atom -> ocur block ccur .) + div reduce using rule 84 (atom -> ocur block ccur .) + plus reduce using rule 84 (atom -> ocur block ccur .) + minus reduce using rule 84 (atom -> ocur block ccur .) + less reduce using rule 84 (atom -> ocur block ccur .) + lesseq reduce using rule 84 (atom -> ocur block ccur .) + equal reduce using rule 84 (atom -> ocur block ccur .) + semi reduce using rule 84 (atom -> ocur block ccur .) + of reduce using rule 84 (atom -> ocur block ccur .) + then reduce using rule 84 (atom -> ocur block ccur .) + loop reduce using rule 84 (atom -> ocur block ccur .) + cpar reduce using rule 84 (atom -> ocur block ccur .) + comma reduce using rule 84 (atom -> ocur block ccur .) + in reduce using rule 84 (atom -> ocur block ccur .) + else reduce using rule 84 (atom -> ocur block ccur .) + pool reduce using rule 84 (atom -> ocur block ccur .) + error reduce using rule 84 (atom -> ocur block ccur .) + ccur reduce using rule 84 (atom -> ocur block ccur .) + fi reduce using rule 84 (atom -> ocur block ccur .) + + +state 173 + + (88) block -> expr semi . + (89) block -> expr semi . block + (88) block -> . expr semi + (89) block -> . expr semi block + (90) block -> . error block + (91) block -> . error + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + ccur reduce using rule 88 (block -> expr semi .) + error shift and go to state 137 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 136 + block shift and go to state 200 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 174 + + (90) block -> error block . + + ccur reduce using rule 90 (block -> error block .) + + +state 175 + + (24) def_func -> error opar formals cpar colon type ocur . expr ccur + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 201 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 176 + + (23) def_func -> id opar formals cpar colon type ocur . expr ccur + (27) def_func -> id opar formals cpar colon type ocur . error ccur + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 203 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 202 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 177 + + (26) def_func -> id opar formals cpar colon error ocur . expr ccur + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 204 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 178 + + (25) def_func -> id opar error cpar colon type ocur . expr ccur + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 205 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 179 + + (35) expr -> let let_list in expr . + + semi reduce using rule 35 (expr -> let let_list in expr .) + of reduce using rule 35 (expr -> let let_list in expr .) + then reduce using rule 35 (expr -> let let_list in expr .) + loop reduce using rule 35 (expr -> let let_list in expr .) + cpar reduce using rule 35 (expr -> let let_list in expr .) + comma reduce using rule 35 (expr -> let let_list in expr .) + in reduce using rule 35 (expr -> let let_list in expr .) + else reduce using rule 35 (expr -> let let_list in expr .) + pool reduce using rule 35 (expr -> let let_list in expr .) + error reduce using rule 35 (expr -> let let_list in expr .) + ccur reduce using rule 35 (expr -> let let_list in expr .) + fi reduce using rule 35 (expr -> let let_list in expr .) + + +state 180 + + (37) expr -> let let_list in error . + + semi reduce using rule 37 (expr -> let let_list in error .) + of reduce using rule 37 (expr -> let let_list in error .) + then reduce using rule 37 (expr -> let let_list in error .) + loop reduce using rule 37 (expr -> let let_list in error .) + cpar reduce using rule 37 (expr -> let let_list in error .) + comma reduce using rule 37 (expr -> let let_list in error .) + in reduce using rule 37 (expr -> let let_list in error .) + else reduce using rule 37 (expr -> let let_list in error .) + pool reduce using rule 37 (expr -> let let_list in error .) + error reduce using rule 37 (expr -> let let_list in error .) + ccur reduce using rule 37 (expr -> let let_list in error .) + fi reduce using rule 37 (expr -> let let_list in error .) + + +state 181 + + (36) expr -> let error in expr . + + semi reduce using rule 36 (expr -> let error in expr .) + of reduce using rule 36 (expr -> let error in expr .) + then reduce using rule 36 (expr -> let error in expr .) + loop reduce using rule 36 (expr -> let error in expr .) + cpar reduce using rule 36 (expr -> let error in expr .) + comma reduce using rule 36 (expr -> let error in expr .) + in reduce using rule 36 (expr -> let error in expr .) + else reduce using rule 36 (expr -> let error in expr .) + pool reduce using rule 36 (expr -> let error in expr .) + error reduce using rule 36 (expr -> let error in expr .) + ccur reduce using rule 36 (expr -> let error in expr .) + fi reduce using rule 36 (expr -> let error in expr .) + + +state 182 + + (51) let_list -> let_assign comma let_list . + + in reduce using rule 51 (let_list -> let_assign comma let_list .) + + +state 183 + + (53) let_assign -> param larrow expr . + + comma reduce using rule 53 (let_assign -> param larrow expr .) + in reduce using rule 53 (let_assign -> param larrow expr .) + + +state 184 + + (38) expr -> case expr of cases_list . esac + + esac shift and go to state 206 + + +state 185 + + (40) expr -> case expr of error . esac + (57) cases_list -> error . cases_list + (55) cases_list -> . casep semi + (56) cases_list -> . casep semi cases_list + (57) cases_list -> . error cases_list + (58) casep -> . id colon type rarrow expr + + esac shift and go to state 207 + error shift and go to state 188 + id shift and go to state 187 + + cases_list shift and go to state 208 + casep shift and go to state 186 + +state 186 + + (55) cases_list -> casep . semi + (56) cases_list -> casep . semi cases_list + + semi shift and go to state 209 + + +state 187 + + (58) casep -> id . colon type rarrow expr + + colon shift and go to state 210 + + +state 188 + + (57) cases_list -> error . cases_list + (55) cases_list -> . casep semi + (56) cases_list -> . casep semi cases_list + (57) cases_list -> . error cases_list + (58) casep -> . id colon type rarrow expr + + error shift and go to state 188 + id shift and go to state 187 + + cases_list shift and go to state 208 + casep shift and go to state 186 + +state 189 + + (39) expr -> case error of cases_list . esac + + esac shift and go to state 211 + + +state 190 + + (41) expr -> if expr then expr . else expr fi + (44) expr -> if expr then expr . else error fi + + else shift and go to state 212 + + +state 191 + + (43) expr -> if expr then error . else expr fi + + else shift and go to state 213 + + +state 192 + + (42) expr -> if error then expr . else expr fi + + else shift and go to state 214 + + +state 193 + + (45) expr -> while expr loop expr . pool + (48) expr -> while expr loop expr . error + + pool shift and go to state 215 + error shift and go to state 216 + + +state 194 + + (47) expr -> while expr loop error . pool + + pool shift and go to state 217 + + +state 195 + + (46) expr -> while error loop expr . pool + + pool shift and go to state 218 + + +state 196 + + (92) func_call -> id opar args cpar . + + arroba reduce using rule 92 (func_call -> id opar args cpar .) + dot reduce using rule 92 (func_call -> id opar args cpar .) + star reduce using rule 92 (func_call -> id opar args cpar .) + div reduce using rule 92 (func_call -> id opar args cpar .) + plus reduce using rule 92 (func_call -> id opar args cpar .) + minus reduce using rule 92 (func_call -> id opar args cpar .) + less reduce using rule 92 (func_call -> id opar args cpar .) + lesseq reduce using rule 92 (func_call -> id opar args cpar .) + equal reduce using rule 92 (func_call -> id opar args cpar .) + semi reduce using rule 92 (func_call -> id opar args cpar .) + of reduce using rule 92 (func_call -> id opar args cpar .) + then reduce using rule 92 (func_call -> id opar args cpar .) + loop reduce using rule 92 (func_call -> id opar args cpar .) + cpar reduce using rule 92 (func_call -> id opar args cpar .) + comma reduce using rule 92 (func_call -> id opar args cpar .) + in reduce using rule 92 (func_call -> id opar args cpar .) + else reduce using rule 92 (func_call -> id opar args cpar .) + pool reduce using rule 92 (func_call -> id opar args cpar .) + error reduce using rule 92 (func_call -> id opar args cpar .) + ccur reduce using rule 92 (func_call -> id opar args cpar .) + fi reduce using rule 92 (func_call -> id opar args cpar .) + + +state 197 + + (96) arg_list -> expr comma . arg_list + (95) arg_list -> . expr + (96) arg_list -> . expr comma arg_list + (97) arg_list -> . error arg_list + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 159 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 158 + arg_list shift and go to state 219 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 198 + + (97) arg_list -> error arg_list . + + cpar reduce using rule 97 (arg_list -> error arg_list .) + + +state 199 + + (74) base_call -> factor arroba type dot . func_call + (92) func_call -> . id opar args cpar + + id shift and go to state 170 + + func_call shift and go to state 220 + +state 200 + + (89) block -> expr semi block . + + ccur reduce using rule 89 (block -> expr semi block .) + + +state 201 + + (24) def_func -> error opar formals cpar colon type ocur expr . ccur + + ccur shift and go to state 221 + + +state 202 + + (23) def_func -> id opar formals cpar colon type ocur expr . ccur + + ccur shift and go to state 222 + + +state 203 + + (27) def_func -> id opar formals cpar colon type ocur error . ccur + + ccur shift and go to state 223 + + +state 204 + + (26) def_func -> id opar formals cpar colon error ocur expr . ccur + + ccur shift and go to state 224 + + +state 205 + + (25) def_func -> id opar error cpar colon type ocur expr . ccur + + ccur shift and go to state 225 + + +state 206 + + (38) expr -> case expr of cases_list esac . + + semi reduce using rule 38 (expr -> case expr of cases_list esac .) + of reduce using rule 38 (expr -> case expr of cases_list esac .) + then reduce using rule 38 (expr -> case expr of cases_list esac .) + loop reduce using rule 38 (expr -> case expr of cases_list esac .) + cpar reduce using rule 38 (expr -> case expr of cases_list esac .) + comma reduce using rule 38 (expr -> case expr of cases_list esac .) + in reduce using rule 38 (expr -> case expr of cases_list esac .) + else reduce using rule 38 (expr -> case expr of cases_list esac .) + pool reduce using rule 38 (expr -> case expr of cases_list esac .) + error reduce using rule 38 (expr -> case expr of cases_list esac .) + ccur reduce using rule 38 (expr -> case expr of cases_list esac .) + fi reduce using rule 38 (expr -> case expr of cases_list esac .) + + +state 207 + + (40) expr -> case expr of error esac . + + semi reduce using rule 40 (expr -> case expr of error esac .) + of reduce using rule 40 (expr -> case expr of error esac .) + then reduce using rule 40 (expr -> case expr of error esac .) + loop reduce using rule 40 (expr -> case expr of error esac .) + cpar reduce using rule 40 (expr -> case expr of error esac .) + comma reduce using rule 40 (expr -> case expr of error esac .) + in reduce using rule 40 (expr -> case expr of error esac .) + else reduce using rule 40 (expr -> case expr of error esac .) + pool reduce using rule 40 (expr -> case expr of error esac .) + error reduce using rule 40 (expr -> case expr of error esac .) + ccur reduce using rule 40 (expr -> case expr of error esac .) + fi reduce using rule 40 (expr -> case expr of error esac .) + + +state 208 + + (57) cases_list -> error cases_list . + + esac reduce using rule 57 (cases_list -> error cases_list .) + + +state 209 + + (55) cases_list -> casep semi . + (56) cases_list -> casep semi . cases_list + (55) cases_list -> . casep semi + (56) cases_list -> . casep semi cases_list + (57) cases_list -> . error cases_list + (58) casep -> . id colon type rarrow expr + + esac reduce using rule 55 (cases_list -> casep semi .) + error shift and go to state 188 + id shift and go to state 187 + + casep shift and go to state 186 + cases_list shift and go to state 226 + +state 210 + + (58) casep -> id colon . type rarrow expr + + type shift and go to state 227 + + +state 211 + + (39) expr -> case error of cases_list esac . + + semi reduce using rule 39 (expr -> case error of cases_list esac .) + of reduce using rule 39 (expr -> case error of cases_list esac .) + then reduce using rule 39 (expr -> case error of cases_list esac .) + loop reduce using rule 39 (expr -> case error of cases_list esac .) + cpar reduce using rule 39 (expr -> case error of cases_list esac .) + comma reduce using rule 39 (expr -> case error of cases_list esac .) + in reduce using rule 39 (expr -> case error of cases_list esac .) + else reduce using rule 39 (expr -> case error of cases_list esac .) + pool reduce using rule 39 (expr -> case error of cases_list esac .) + error reduce using rule 39 (expr -> case error of cases_list esac .) + ccur reduce using rule 39 (expr -> case error of cases_list esac .) + fi reduce using rule 39 (expr -> case error of cases_list esac .) + + +state 212 + + (41) expr -> if expr then expr else . expr fi + (44) expr -> if expr then expr else . error fi + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 229 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 228 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 213 + + (43) expr -> if expr then error else . expr fi + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 230 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 214 + + (42) expr -> if error then expr else . expr fi + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 231 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 215 + + (45) expr -> while expr loop expr pool . + + semi reduce using rule 45 (expr -> while expr loop expr pool .) + of reduce using rule 45 (expr -> while expr loop expr pool .) + then reduce using rule 45 (expr -> while expr loop expr pool .) + loop reduce using rule 45 (expr -> while expr loop expr pool .) + cpar reduce using rule 45 (expr -> while expr loop expr pool .) + comma reduce using rule 45 (expr -> while expr loop expr pool .) + in reduce using rule 45 (expr -> while expr loop expr pool .) + else reduce using rule 45 (expr -> while expr loop expr pool .) + pool reduce using rule 45 (expr -> while expr loop expr pool .) + error reduce using rule 45 (expr -> while expr loop expr pool .) + ccur reduce using rule 45 (expr -> while expr loop expr pool .) + fi reduce using rule 45 (expr -> while expr loop expr pool .) + + +state 216 + + (48) expr -> while expr loop expr error . + + semi reduce using rule 48 (expr -> while expr loop expr error .) + of reduce using rule 48 (expr -> while expr loop expr error .) + then reduce using rule 48 (expr -> while expr loop expr error .) + loop reduce using rule 48 (expr -> while expr loop expr error .) + cpar reduce using rule 48 (expr -> while expr loop expr error .) + comma reduce using rule 48 (expr -> while expr loop expr error .) + in reduce using rule 48 (expr -> while expr loop expr error .) + else reduce using rule 48 (expr -> while expr loop expr error .) + pool reduce using rule 48 (expr -> while expr loop expr error .) + error reduce using rule 48 (expr -> while expr loop expr error .) + ccur reduce using rule 48 (expr -> while expr loop expr error .) + fi reduce using rule 48 (expr -> while expr loop expr error .) + + +state 217 + + (47) expr -> while expr loop error pool . + + semi reduce using rule 47 (expr -> while expr loop error pool .) + of reduce using rule 47 (expr -> while expr loop error pool .) + then reduce using rule 47 (expr -> while expr loop error pool .) + loop reduce using rule 47 (expr -> while expr loop error pool .) + cpar reduce using rule 47 (expr -> while expr loop error pool .) + comma reduce using rule 47 (expr -> while expr loop error pool .) + in reduce using rule 47 (expr -> while expr loop error pool .) + else reduce using rule 47 (expr -> while expr loop error pool .) + pool reduce using rule 47 (expr -> while expr loop error pool .) + error reduce using rule 47 (expr -> while expr loop error pool .) + ccur reduce using rule 47 (expr -> while expr loop error pool .) + fi reduce using rule 47 (expr -> while expr loop error pool .) + + +state 218 + + (46) expr -> while error loop expr pool . + + semi reduce using rule 46 (expr -> while error loop expr pool .) + of reduce using rule 46 (expr -> while error loop expr pool .) + then reduce using rule 46 (expr -> while error loop expr pool .) + loop reduce using rule 46 (expr -> while error loop expr pool .) + cpar reduce using rule 46 (expr -> while error loop expr pool .) + comma reduce using rule 46 (expr -> while error loop expr pool .) + in reduce using rule 46 (expr -> while error loop expr pool .) + else reduce using rule 46 (expr -> while error loop expr pool .) + pool reduce using rule 46 (expr -> while error loop expr pool .) + error reduce using rule 46 (expr -> while error loop expr pool .) + ccur reduce using rule 46 (expr -> while error loop expr pool .) + fi reduce using rule 46 (expr -> while error loop expr pool .) + + +state 219 + + (96) arg_list -> expr comma arg_list . + + cpar reduce using rule 96 (arg_list -> expr comma arg_list .) + + +state 220 + + (74) base_call -> factor arroba type dot func_call . + + star reduce using rule 74 (base_call -> factor arroba type dot func_call .) + div reduce using rule 74 (base_call -> factor arroba type dot func_call .) + plus reduce using rule 74 (base_call -> factor arroba type dot func_call .) + minus reduce using rule 74 (base_call -> factor arroba type dot func_call .) + less reduce using rule 74 (base_call -> factor arroba type dot func_call .) + lesseq reduce using rule 74 (base_call -> factor arroba type dot func_call .) + equal reduce using rule 74 (base_call -> factor arroba type dot func_call .) + semi reduce using rule 74 (base_call -> factor arroba type dot func_call .) + of reduce using rule 74 (base_call -> factor arroba type dot func_call .) + then reduce using rule 74 (base_call -> factor arroba type dot func_call .) + loop reduce using rule 74 (base_call -> factor arroba type dot func_call .) + cpar reduce using rule 74 (base_call -> factor arroba type dot func_call .) + comma reduce using rule 74 (base_call -> factor arroba type dot func_call .) + in reduce using rule 74 (base_call -> factor arroba type dot func_call .) + else reduce using rule 74 (base_call -> factor arroba type dot func_call .) + pool reduce using rule 74 (base_call -> factor arroba type dot func_call .) + error reduce using rule 74 (base_call -> factor arroba type dot func_call .) + ccur reduce using rule 74 (base_call -> factor arroba type dot func_call .) + fi reduce using rule 74 (base_call -> factor arroba type dot func_call .) + + +state 221 + + (24) def_func -> error opar formals cpar colon type ocur expr ccur . + + semi reduce using rule 24 (def_func -> error opar formals cpar colon type ocur expr ccur .) + + +state 222 + + (23) def_func -> id opar formals cpar colon type ocur expr ccur . + + semi reduce using rule 23 (def_func -> id opar formals cpar colon type ocur expr ccur .) + + +state 223 + + (27) def_func -> id opar formals cpar colon type ocur error ccur . + + semi reduce using rule 27 (def_func -> id opar formals cpar colon type ocur error ccur .) + + +state 224 + + (26) def_func -> id opar formals cpar colon error ocur expr ccur . + + semi reduce using rule 26 (def_func -> id opar formals cpar colon error ocur expr ccur .) + + +state 225 + + (25) def_func -> id opar error cpar colon type ocur expr ccur . + + semi reduce using rule 25 (def_func -> id opar error cpar colon type ocur expr ccur .) + + +state 226 + + (56) cases_list -> casep semi cases_list . + + esac reduce using rule 56 (cases_list -> casep semi cases_list .) + + +state 227 + + (58) casep -> id colon type . rarrow expr + + rarrow shift and go to state 232 + + +state 228 + + (41) expr -> if expr then expr else expr . fi + + fi shift and go to state 233 + + +state 229 + + (44) expr -> if expr then expr else error . fi + + fi shift and go to state 234 + + +state 230 + + (43) expr -> if expr then error else expr . fi + + fi shift and go to state 235 + + +state 231 + + (42) expr -> if error then expr else expr . fi + + fi shift and go to state 236 + + +state 232 + + (58) casep -> id colon type rarrow . expr + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 237 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 233 + + (41) expr -> if expr then expr else expr fi . + + semi reduce using rule 41 (expr -> if expr then expr else expr fi .) + of reduce using rule 41 (expr -> if expr then expr else expr fi .) + then reduce using rule 41 (expr -> if expr then expr else expr fi .) + loop reduce using rule 41 (expr -> if expr then expr else expr fi .) + cpar reduce using rule 41 (expr -> if expr then expr else expr fi .) + comma reduce using rule 41 (expr -> if expr then expr else expr fi .) + in reduce using rule 41 (expr -> if expr then expr else expr fi .) + else reduce using rule 41 (expr -> if expr then expr else expr fi .) + pool reduce using rule 41 (expr -> if expr then expr else expr fi .) + error reduce using rule 41 (expr -> if expr then expr else expr fi .) + ccur reduce using rule 41 (expr -> if expr then expr else expr fi .) + fi reduce using rule 41 (expr -> if expr then expr else expr fi .) + + +state 234 + + (44) expr -> if expr then expr else error fi . + + semi reduce using rule 44 (expr -> if expr then expr else error fi .) + of reduce using rule 44 (expr -> if expr then expr else error fi .) + then reduce using rule 44 (expr -> if expr then expr else error fi .) + loop reduce using rule 44 (expr -> if expr then expr else error fi .) + cpar reduce using rule 44 (expr -> if expr then expr else error fi .) + comma reduce using rule 44 (expr -> if expr then expr else error fi .) + in reduce using rule 44 (expr -> if expr then expr else error fi .) + else reduce using rule 44 (expr -> if expr then expr else error fi .) + pool reduce using rule 44 (expr -> if expr then expr else error fi .) + error reduce using rule 44 (expr -> if expr then expr else error fi .) + ccur reduce using rule 44 (expr -> if expr then expr else error fi .) + fi reduce using rule 44 (expr -> if expr then expr else error fi .) + + +state 235 + + (43) expr -> if expr then error else expr fi . + + semi reduce using rule 43 (expr -> if expr then error else expr fi .) + of reduce using rule 43 (expr -> if expr then error else expr fi .) + then reduce using rule 43 (expr -> if expr then error else expr fi .) + loop reduce using rule 43 (expr -> if expr then error else expr fi .) + cpar reduce using rule 43 (expr -> if expr then error else expr fi .) + comma reduce using rule 43 (expr -> if expr then error else expr fi .) + in reduce using rule 43 (expr -> if expr then error else expr fi .) + else reduce using rule 43 (expr -> if expr then error else expr fi .) + pool reduce using rule 43 (expr -> if expr then error else expr fi .) + error reduce using rule 43 (expr -> if expr then error else expr fi .) + ccur reduce using rule 43 (expr -> if expr then error else expr fi .) + fi reduce using rule 43 (expr -> if expr then error else expr fi .) + + +state 236 + + (42) expr -> if error then expr else expr fi . + + semi reduce using rule 42 (expr -> if error then expr else expr fi .) + of reduce using rule 42 (expr -> if error then expr else expr fi .) + then reduce using rule 42 (expr -> if error then expr else expr fi .) + loop reduce using rule 42 (expr -> if error then expr else expr fi .) + cpar reduce using rule 42 (expr -> if error then expr else expr fi .) + comma reduce using rule 42 (expr -> if error then expr else expr fi .) + in reduce using rule 42 (expr -> if error then expr else expr fi .) + else reduce using rule 42 (expr -> if error then expr else expr fi .) + pool reduce using rule 42 (expr -> if error then expr else expr fi .) + error reduce using rule 42 (expr -> if error then expr else expr fi .) + ccur reduce using rule 42 (expr -> if error then expr else expr fi .) + fi reduce using rule 42 (expr -> if error then expr else expr fi .) + + +state 237 + + (58) casep -> id colon type rarrow expr . + + semi reduce using rule 58 (casep -> id colon type rarrow expr .) + diff --git a/src/cool_parser/output_parser/parsetab.py b/src/cool_parser/output_parser/parsetab.py index e9699a3a..357afe60 100644 --- a/src/cool_parser/output_parser/parsetab.py +++ b/src/cool_parser/output_parser/parsetab.py @@ -1,126 +1,126 @@ - -# parsetab.py -# This file is automatically generated. Do not edit. -# pylint: disable=W,C,R -_tabversion = '3.10' - -_lr_method = 'LALR' - -_lr_signature = 'programarroba case ccur class colon comma cpar div dot else equal esac false fi id if in inherits isvoid larrow less lesseq let loop minus new not nox num ocur of opar plus pool rarrow semi star string then true type whileprogram : class_listepsilon :class_list : def_class class_list \n | def_classclass_list : error class_listdef_class : class type ocur feature_list ccur semi \n | class type inherits type ocur feature_list ccur semidef_class : class error ocur feature_list ccur semi \n | class type ocur feature_list ccur error \n | class error inherits type ocur feature_list ccur semi\n | class error inherits error ocur feature_list ccur semi\n | class type inherits error ocur feature_list ccur semi\n | class type inherits type ocur feature_list ccur errorfeature_list : epsilon\n | def_attr semi feature_list\n | def_func semi feature_listfeature_list : error feature_listdef_attr : id colon type\n | id colon type larrow exprdef_attr : error colon type\n | id colon error\n | error colon type larrow expr\n | id colon error larrow expr\n | id colon type larrow errordef_func : id opar formals cpar colon type ocur expr ccurdef_func : error opar formals cpar colon type ocur expr ccur\n | id opar error cpar colon type ocur expr ccur\n | id opar formals cpar colon error ocur expr ccur\n | id opar formals cpar colon type ocur error ccurformals : param_list\n | param_list_empty\n param_list : param\n | param comma param_listparam_list_empty : epsilonparam : id colon typelet_list : let_assign\n | let_assign comma let_listlet_assign : param larrow expr\n | paramcases_list : casep semi\n | casep semi cases_listcases_list : error cases_list\n | error semicasep : id colon type rarrow exprexpr : id larrow expr\n | comp\n comp : comp less op\n | comp lesseq op\n | comp equal op\n | opop : op plus term\n | op minus term\n | termterm : term star base_call\n | term div base_call\n | base_callterm : term star error\n | term div errorbase_call : factor arroba type dot func_call\n | factorbase_call : error arroba type dot func_call\n | factor arroba error dot func_call\n factor : atom\n | opar expr cparfactor : factor dot func_call\n | not expr\n | func_callfactor : isvoid base_call\n | nox base_call\n factor : let let_list in exprfactor : case expr of cases_list esacfactor : if expr then expr else expr fifactor : while expr loop expr poolatom : numatom : idatom : new typeatom : ocur block ccuratom : error block ccur\n | ocur error ccur\n | ocur block erroratom : true\n | falseatom : stringblock : expr semi\n | expr semi blockblock : error block\n | error semifunc_call : id opar args cparfunc_call : id opar error cpar\n | error opar args cparargs : arg_list\n | arg_list_empty\n arg_list : expr \n | expr comma arg_listarg_list : error arg_listarg_list_empty : epsilon' - -_lr_action_items = {'error':([0,3,4,5,10,11,12,13,15,25,29,30,31,32,33,34,36,37,38,39,55,58,62,63,66,70,80,81,82,83,85,86,87,90,98,100,102,103,104,105,106,107,110,112,113,114,115,116,117,118,119,120,121,122,135,136,141,142,145,151,154,162,164,171,173,174,175,176,180,181,182,183,184,185,189,190,193,194,195,201,207,215,219,229,],[4,4,4,9,15,21,15,23,15,39,15,15,50,52,15,15,15,15,-6,-9,-8,70,98,70,103,107,70,70,70,70,70,70,70,136,107,139,-7,-13,-12,-11,-10,107,145,70,154,70,70,70,70,70,162,164,166,169,178,107,-86,-87,185,107,185,107,107,70,70,201,70,70,70,207,70,70,169,185,145,-85,169,169,145,201,107,201,70,70,]),'class':([0,3,4,38,39,55,102,103,104,105,106,],[5,5,5,-6,-9,-8,-7,-13,-12,-11,-10,]),'$end':([1,2,3,6,7,38,39,55,102,103,104,105,106,],[0,-1,-4,-3,-5,-6,-9,-8,-7,-13,-12,-11,-10,]),'type':([5,11,13,27,31,61,89,94,100,101,108,121,218,],[8,20,24,40,49,96,134,137,138,140,143,165,227,]),'ocur':([8,9,20,21,23,24,58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,137,138,139,140,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[10,12,33,34,36,37,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,180,181,182,183,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,]),'inherits':([8,9,],[11,13,]),'ccur':([10,12,14,15,16,22,26,29,30,33,34,36,37,47,48,53,54,56,57,72,73,74,75,76,77,78,79,88,91,92,93,109,124,125,126,127,134,135,136,141,142,144,151,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,190,191,192,196,205,206,207,208,209,210,212,213,214,220,230,],[-2,-2,25,-2,-14,35,-17,-2,-2,-2,-2,-2,-2,-15,-16,66,67,68,69,-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,144,-66,-68,-75,-69,-76,177,179,144,-87,-78,-84,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-85,-88,-89,-70,221,222,223,224,225,-61,-59,-62,-71,-73,-72,]),'id':([10,12,15,28,29,30,32,33,34,36,37,58,60,62,63,70,80,81,82,83,84,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,122,136,145,151,154,162,164,171,172,173,174,175,176,180,181,182,183,184,185,189,193,194,195,201,207,215,219,229,],[19,19,19,46,19,19,46,19,19,19,19,72,46,72,72,72,72,72,126,126,46,72,72,72,72,72,72,72,72,72,126,126,126,126,126,126,126,168,72,72,72,72,72,72,72,46,72,202,72,72,72,72,72,72,168,72,72,168,168,72,202,72,202,72,72,]),'colon':([15,19,46,59,64,65,202,],[27,31,61,94,100,101,218,]),'opar':([15,19,58,62,63,70,72,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,126,136,145,151,154,162,164,168,169,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[28,32,80,80,80,110,113,80,80,80,80,80,80,80,80,110,110,80,80,80,80,80,80,80,80,80,80,113,110,110,80,110,110,110,113,195,80,80,80,80,80,80,80,80,110,80,80,110,80,80,]),'semi':([17,18,25,35,40,49,50,66,67,68,69,71,72,73,74,75,76,77,78,79,88,91,92,93,97,98,99,107,111,124,125,126,127,134,136,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,185,187,188,191,192,196,200,201,210,212,213,214,220,221,222,223,224,225,230,231,],[29,30,38,55,-20,-18,-21,102,104,105,106,-22,-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-19,-24,-23,142,151,-66,-68,-75,-69,-76,142,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,142,151,-90,-88,-89,-70,215,217,-61,-59,-62,-71,-73,-26,-25,-29,-28,-27,-72,-44,]),'cpar':([28,32,41,42,43,44,45,51,52,72,73,74,75,76,77,78,79,88,91,92,93,95,96,110,113,123,124,125,126,127,134,144,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,167,170,177,178,179,186,187,188,191,192,195,196,210,211,212,213,214,220,230,],[-2,-2,59,-30,-31,-32,-34,64,65,-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-33,-35,-2,-2,170,-66,-68,-75,-69,-76,-78,188,170,-91,-92,-96,-45,191,192,-93,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-95,-93,-90,-88,-89,-2,-70,-61,-94,-59,-62,-71,-73,-72,]),'larrow':([40,49,50,72,96,130,],[58,62,63,112,-35,173,]),'comma':([44,72,73,74,75,76,77,78,79,88,91,92,93,96,124,125,126,127,129,130,134,144,147,152,155,156,157,158,159,160,161,162,163,164,167,170,177,178,179,187,188,191,192,196,198,210,212,213,214,220,230,],[60,-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-35,-66,-68,-75,-69,172,-39,-76,-78,189,-45,189,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,189,-90,-88,-89,-70,-38,-61,-59,-62,-71,-73,-72,]),'not':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,]),'isvoid':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,]),'nox':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,]),'let':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,]),'case':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,]),'if':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,]),'while':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,]),'num':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,]),'new':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,]),'true':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,]),'false':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,]),'string':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,]),'arroba':([70,72,73,74,75,76,77,78,79,88,91,92,93,98,107,124,125,126,127,134,136,144,145,152,154,156,157,158,159,160,161,162,163,164,167,170,177,178,179,185,188,191,192,196,207,210,212,213,214,220,230,],[108,-75,-46,-50,-53,-56,121,-67,-63,-74,-81,-82,-83,108,108,-66,-68,-75,-69,-76,108,-78,108,-45,108,-47,-48,-49,-51,-52,-54,108,-55,108,-65,-64,-77,-80,-79,108,-90,-88,-89,-70,108,-61,-59,-62,-71,-73,-72,]),'dot':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,143,144,152,156,157,158,159,160,161,162,163,164,165,166,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,122,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,184,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,193,194,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'star':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,119,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,119,119,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'div':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,120,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,120,120,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'plus':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,117,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,117,117,117,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'minus':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,118,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,118,118,118,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'less':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,114,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'lesseq':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,115,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'equal':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,116,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'of':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,131,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,174,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'then':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,132,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,175,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'loop':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,133,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,176,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'in':([72,73,74,75,76,77,78,79,88,91,92,93,96,124,125,126,127,128,129,130,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,197,198,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-35,-66,-68,-75,-69,171,-36,-39,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-37,-38,-61,-59,-62,-71,-73,-72,]),'else':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,203,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,219,-61,-59,-62,-71,-73,-72,]),'pool':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,204,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,220,-61,-59,-62,-71,-73,-72,]),'fi':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,228,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,230,-72,]),'esac':([199,215,216,217,226,],[214,-40,-42,-43,-41,]),'rarrow':([227,],[229,]),} - -_lr_action = {} -for _k, _v in _lr_action_items.items(): - for _x,_y in zip(_v[0],_v[1]): - if not _x in _lr_action: _lr_action[_x] = {} - _lr_action[_x][_k] = _y -del _lr_action_items - -_lr_goto_items = {'program':([0,],[1,]),'class_list':([0,3,4,],[2,6,7,]),'def_class':([0,3,4,],[3,3,3,]),'feature_list':([10,12,15,29,30,33,34,36,37,],[14,22,26,47,48,53,54,56,57,]),'epsilon':([10,12,15,28,29,30,32,33,34,36,37,110,113,195,],[16,16,16,45,16,16,45,16,16,16,16,150,150,150,]),'def_attr':([10,12,15,29,30,33,34,36,37,],[17,17,17,17,17,17,17,17,17,]),'def_func':([10,12,15,29,30,33,34,36,37,],[18,18,18,18,18,18,18,18,18,]),'formals':([28,32,],[41,51,]),'param_list':([28,32,60,],[42,42,95,]),'param_list_empty':([28,32,],[43,43,]),'param':([28,32,60,84,172,],[44,44,44,130,130,]),'expr':([58,62,63,70,80,81,85,86,87,90,98,107,110,112,113,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[71,97,99,111,123,124,131,132,133,111,111,111,147,152,155,111,187,111,187,111,111,196,198,203,204,205,206,208,209,187,155,155,111,228,231,]),'comp':([58,62,63,70,80,81,85,86,87,90,98,107,110,112,113,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,]),'op':([58,62,63,70,80,81,85,86,87,90,98,107,110,112,113,114,115,116,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,156,157,158,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,]),'term':([58,62,63,70,80,81,85,86,87,90,98,107,110,112,113,114,115,116,117,118,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,159,160,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,]),'base_call':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[76,76,76,76,76,76,125,127,76,76,76,76,76,76,76,76,76,76,76,76,76,76,161,163,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,]),'factor':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,]),'func_call':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,122,136,145,151,154,162,164,171,173,175,176,180,181,182,183,184,185,189,193,194,195,207,219,229,],[78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,167,78,78,78,78,78,78,78,78,78,78,78,78,78,78,210,78,78,212,213,78,78,78,78,]),'atom':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,]),'block':([70,90,98,107,136,145,151,154,162,164,185,207,],[109,135,109,141,141,109,190,109,109,109,141,109,]),'let_list':([84,172,],[128,197,]),'let_assign':([84,172,],[129,129,]),'args':([110,113,195,],[146,153,146,]),'arg_list':([110,113,145,154,185,189,195,],[148,148,186,186,186,211,148,]),'arg_list_empty':([110,113,195,],[149,149,149,]),'cases_list':([174,201,215,],[199,216,226,]),'casep':([174,201,215,],[200,200,200,]),} - -_lr_goto = {} -for _k, _v in _lr_goto_items.items(): - for _x, _y in zip(_v[0], _v[1]): - if not _x in _lr_goto: _lr_goto[_x] = {} - _lr_goto[_x][_k] = _y -del _lr_goto_items -_lr_productions = [ - ("S' -> program","S'",1,None,None,None), - ('program -> class_list','program',1,'p_program','parser.py',8), - ('epsilon -> ','epsilon',0,'p_epsilon','parser.py',12), - ('class_list -> def_class class_list','class_list',2,'p_class_list','parser.py',17), - ('class_list -> def_class','class_list',1,'p_class_list','parser.py',18), - ('class_list -> error class_list','class_list',2,'p_class_list_error','parser.py',23), - ('def_class -> class type ocur feature_list ccur semi','def_class',6,'p_def_class','parser.py',29), - ('def_class -> class type inherits type ocur feature_list ccur semi','def_class',8,'p_def_class','parser.py',30), - ('def_class -> class error ocur feature_list ccur semi','def_class',6,'p_def_class_error','parser.py',38), - ('def_class -> class type ocur feature_list ccur error','def_class',6,'p_def_class_error','parser.py',39), - ('def_class -> class error inherits type ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',40), - ('def_class -> class error inherits error ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',41), - ('def_class -> class type inherits error ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',42), - ('def_class -> class type inherits type ocur feature_list ccur error','def_class',8,'p_def_class_error','parser.py',43), - ('feature_list -> epsilon','feature_list',1,'p_feature_list','parser.py',48), - ('feature_list -> def_attr semi feature_list','feature_list',3,'p_feature_list','parser.py',49), - ('feature_list -> def_func semi feature_list','feature_list',3,'p_feature_list','parser.py',50), - ('feature_list -> error feature_list','feature_list',2,'p_feature_list_error','parser.py',55), - ('def_attr -> id colon type','def_attr',3,'p_def_attr','parser.py',60), - ('def_attr -> id colon type larrow expr','def_attr',5,'p_def_attr','parser.py',61), - ('def_attr -> error colon type','def_attr',3,'p_def_attr_error','parser.py',68), - ('def_attr -> id colon error','def_attr',3,'p_def_attr_error','parser.py',69), - ('def_attr -> error colon type larrow expr','def_attr',5,'p_def_attr_error','parser.py',70), - ('def_attr -> id colon error larrow expr','def_attr',5,'p_def_attr_error','parser.py',71), - ('def_attr -> id colon type larrow error','def_attr',5,'p_def_attr_error','parser.py',72), - ('def_func -> id opar formals cpar colon type ocur expr ccur','def_func',9,'p_def_func','parser.py',77), - ('def_func -> error opar formals cpar colon type ocur expr ccur','def_func',9,'p_def_func_error','parser.py',81), - ('def_func -> id opar error cpar colon type ocur expr ccur','def_func',9,'p_def_func_error','parser.py',82), - ('def_func -> id opar formals cpar colon error ocur expr ccur','def_func',9,'p_def_func_error','parser.py',83), - ('def_func -> id opar formals cpar colon type ocur error ccur','def_func',9,'p_def_func_error','parser.py',84), - ('formals -> param_list','formals',1,'p_formals','parser.py',89), - ('formals -> param_list_empty','formals',1,'p_formals','parser.py',90), - ('param_list -> param','param_list',1,'p_param_list','parser.py',96), - ('param_list -> param comma param_list','param_list',3,'p_param_list','parser.py',97), - ('param_list_empty -> epsilon','param_list_empty',1,'p_param_list_empty','parser.py',106), - ('param -> id colon type','param',3,'p_param','parser.py',110), - ('let_list -> let_assign','let_list',1,'p_let_list','parser.py',115), - ('let_list -> let_assign comma let_list','let_list',3,'p_let_list','parser.py',116), - ('let_assign -> param larrow expr','let_assign',3,'p_let_assign','parser.py',125), - ('let_assign -> param','let_assign',1,'p_let_assign','parser.py',126), - ('cases_list -> casep semi','cases_list',2,'p_cases_list','parser.py',134), - ('cases_list -> casep semi cases_list','cases_list',3,'p_cases_list','parser.py',135), - ('cases_list -> error cases_list','cases_list',2,'p_cases_list_error','parser.py',139), - ('cases_list -> error semi','cases_list',2,'p_cases_list_error','parser.py',140), - ('casep -> id colon type rarrow expr','casep',5,'p_case','parser.py',144), - ('expr -> id larrow expr','expr',3,'p_expr','parser.py',149), - ('expr -> comp','expr',1,'p_expr','parser.py',150), - ('comp -> comp less op','comp',3,'p_comp','parser.py',158), - ('comp -> comp lesseq op','comp',3,'p_comp','parser.py',159), - ('comp -> comp equal op','comp',3,'p_comp','parser.py',160), - ('comp -> op','comp',1,'p_comp','parser.py',161), - ('op -> op plus term','op',3,'p_op','parser.py',180), - ('op -> op minus term','op',3,'p_op','parser.py',181), - ('op -> term','op',1,'p_op','parser.py',182), - ('term -> term star base_call','term',3,'p_term','parser.py',197), - ('term -> term div base_call','term',3,'p_term','parser.py',198), - ('term -> base_call','term',1,'p_term','parser.py',199), - ('term -> term star error','term',3,'p_term_error','parser.py',209), - ('term -> term div error','term',3,'p_term_error','parser.py',210), - ('base_call -> factor arroba type dot func_call','base_call',5,'p_base_call','parser.py',215), - ('base_call -> factor','base_call',1,'p_base_call','parser.py',216), - ('base_call -> error arroba type dot func_call','base_call',5,'p_base_call_error','parser.py',223), - ('base_call -> factor arroba error dot func_call','base_call',5,'p_base_call_error','parser.py',224), - ('factor -> atom','factor',1,'p_factor1','parser.py',229), - ('factor -> opar expr cpar','factor',3,'p_factor1','parser.py',230), - ('factor -> factor dot func_call','factor',3,'p_factor2','parser.py',234), - ('factor -> not expr','factor',2,'p_factor2','parser.py',235), - ('factor -> func_call','factor',1,'p_factor2','parser.py',236), - ('factor -> isvoid base_call','factor',2,'p_factor3','parser.py',245), - ('factor -> nox base_call','factor',2,'p_factor3','parser.py',246), - ('factor -> let let_list in expr','factor',4,'p_expr_let','parser.py',255), - ('factor -> case expr of cases_list esac','factor',5,'p_expr_case','parser.py',267), - ('factor -> if expr then expr else expr fi','factor',7,'p_expr_if','parser.py',279), - ('factor -> while expr loop expr pool','factor',5,'p_expr_while','parser.py',293), - ('atom -> num','atom',1,'p_atom_num','parser.py',306), - ('atom -> id','atom',1,'p_atom_id','parser.py',310), - ('atom -> new type','atom',2,'p_atom_new','parser.py',314), - ('atom -> ocur block ccur','atom',3,'p_atom_block','parser.py',318), - ('atom -> error block ccur','atom',3,'p_atom_block_error','parser.py',322), - ('atom -> ocur error ccur','atom',3,'p_atom_block_error','parser.py',323), - ('atom -> ocur block error','atom',3,'p_atom_block_error','parser.py',324), - ('atom -> true','atom',1,'p_atom_boolean','parser.py',328), - ('atom -> false','atom',1,'p_atom_boolean','parser.py',329), - ('atom -> string','atom',1,'p_atom_string','parser.py',333), - ('block -> expr semi','block',2,'p_block','parser.py',338), - ('block -> expr semi block','block',3,'p_block','parser.py',339), - ('block -> error block','block',2,'p_block_error','parser.py',343), - ('block -> error semi','block',2,'p_block_error','parser.py',344), - ('func_call -> id opar args cpar','func_call',4,'p_func_call','parser.py',349), - ('func_call -> id opar error cpar','func_call',4,'p_func_call_error','parser.py',353), - ('func_call -> error opar args cpar','func_call',4,'p_func_call_error','parser.py',354), - ('args -> arg_list','args',1,'p_args','parser.py',359), - ('args -> arg_list_empty','args',1,'p_args','parser.py',360), - ('arg_list -> expr','arg_list',1,'p_arg_list','parser.py',366), - ('arg_list -> expr comma arg_list','arg_list',3,'p_arg_list','parser.py',367), - ('arg_list -> error arg_list','arg_list',2,'p_arg_list_error','parser.py',374), - ('arg_list_empty -> epsilon','arg_list_empty',1,'p_arg_list_empty','parser.py',378), -] + +# parsetab.py +# This file is automatically generated. Do not edit. +# pylint: disable=W,C,R +_tabversion = '3.10' + +_lr_method = 'LALR' + +_lr_signature = 'programarroba case ccur class colon comma cpar div dot else equal esac false fi id if in inherits isvoid larrow less lesseq let loop minus new not nox num ocur of opar plus pool rarrow semi star string then true type whileprogram : class_listepsilon :class_list : def_class class_list \n | def_classclass_list : error class_listdef_class : class type ocur feature_list ccur semi \n | class type inherits type ocur feature_list ccur semidef_class : class error ocur feature_list ccur semi \n | class type ocur feature_list ccur error \n | class error inherits type ocur feature_list ccur semi\n | class error inherits error ocur feature_list ccur semi\n | class type inherits error ocur feature_list ccur semi\n | class type inherits type ocur feature_list ccur errorfeature_list : epsilon\n | def_attr semi feature_list\n | def_func semi feature_listfeature_list : error feature_listdef_attr : id colon type\n | id colon type larrow exprdef_attr : error colon type\n | id colon error\n | error colon type larrow expr\n | id colon error larrow expr\n | id colon type larrow errordef_func : id opar formals cpar colon type ocur expr ccurdef_func : error opar formals cpar colon type ocur expr ccur\n | id opar error cpar colon type ocur expr ccur\n | id opar formals cpar colon error ocur expr ccur\n | id opar formals cpar colon type ocur error ccurformals : param_list\n | param_list_empty\n param_list : param\n | param comma param_listparam_list_empty : epsilonparam : id colon typelet_list : let_assign\n | let_assign comma let_listlet_assign : param larrow expr\n | paramcases_list : casep semi\n | casep semi cases_listcases_list : error cases_list\n | error semicasep : id colon type rarrow exprexpr : id larrow expr\n | comp\n comp : comp less op\n | comp lesseq op\n | comp equal op\n | opop : op plus term\n | op minus term\n | termterm : term star base_call\n | term div base_call\n | base_callterm : term star error\n | term div errorbase_call : factor arroba type dot func_call\n | factorbase_call : error arroba type dot func_call\n | factor arroba error dot func_call\n factor : atom\n | opar expr cparfactor : factor dot func_call\n | not expr\n | func_callfactor : isvoid base_call\n | nox base_call\n factor : let let_list in exprfactor : case expr of cases_list esacfactor : if expr then expr else expr fifactor : while expr loop expr poolatom : numatom : idatom : new typeatom : ocur block ccuratom : error block ccur\n | ocur error ccur\n | ocur block erroratom : true\n | falseatom : stringblock : expr semi\n | expr semi blockblock : error block\n | error semifunc_call : id opar args cparfunc_call : id opar error cpar\n | error opar args cparargs : arg_list\n | arg_list_empty\n arg_list : expr \n | expr comma arg_listarg_list : error arg_listarg_list_empty : epsilon' + +_lr_action_items = {'error':([0,3,4,5,10,11,12,13,15,25,29,30,31,32,33,34,36,37,38,39,55,58,62,63,66,70,80,81,82,83,85,86,87,90,98,100,102,103,104,105,106,107,110,112,113,114,115,116,117,118,119,120,121,122,135,136,141,142,145,151,154,162,164,171,173,174,175,176,180,181,182,183,184,185,189,190,193,194,195,201,207,215,219,229,],[4,4,4,9,15,21,15,23,15,39,15,15,50,52,15,15,15,15,-6,-9,-8,70,98,70,103,107,70,70,70,70,70,70,70,136,107,139,-7,-13,-12,-11,-10,107,145,70,154,70,70,70,70,70,162,164,166,169,178,107,-86,-87,185,107,185,107,107,70,70,201,70,70,70,207,70,70,169,185,145,-85,169,169,145,201,107,201,70,70,]),'class':([0,3,4,38,39,55,102,103,104,105,106,],[5,5,5,-6,-9,-8,-7,-13,-12,-11,-10,]),'$end':([1,2,3,6,7,38,39,55,102,103,104,105,106,],[0,-1,-4,-3,-5,-6,-9,-8,-7,-13,-12,-11,-10,]),'type':([5,11,13,27,31,61,89,94,100,101,108,121,218,],[8,20,24,40,49,96,134,137,138,140,143,165,227,]),'ocur':([8,9,20,21,23,24,58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,137,138,139,140,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[10,12,33,34,36,37,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,180,181,182,183,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,]),'inherits':([8,9,],[11,13,]),'ccur':([10,12,14,15,16,22,26,29,30,33,34,36,37,47,48,53,54,56,57,72,73,74,75,76,77,78,79,88,91,92,93,109,124,125,126,127,134,135,136,141,142,144,151,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,190,191,192,196,205,206,207,208,209,210,212,213,214,220,230,],[-2,-2,25,-2,-14,35,-17,-2,-2,-2,-2,-2,-2,-15,-16,66,67,68,69,-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,144,-66,-68,-75,-69,-76,177,179,144,-87,-78,-84,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-85,-88,-89,-70,221,222,223,224,225,-61,-59,-62,-71,-73,-72,]),'id':([10,12,15,28,29,30,32,33,34,36,37,58,60,62,63,70,80,81,82,83,84,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,122,136,145,151,154,162,164,171,172,173,174,175,176,180,181,182,183,184,185,189,193,194,195,201,207,215,219,229,],[19,19,19,46,19,19,46,19,19,19,19,72,46,72,72,72,72,72,126,126,46,72,72,72,72,72,72,72,72,72,126,126,126,126,126,126,126,168,72,72,72,72,72,72,72,46,72,202,72,72,72,72,72,72,168,72,72,168,168,72,202,72,202,72,72,]),'colon':([15,19,46,59,64,65,202,],[27,31,61,94,100,101,218,]),'opar':([15,19,58,62,63,70,72,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,126,136,145,151,154,162,164,168,169,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[28,32,80,80,80,110,113,80,80,80,80,80,80,80,80,110,110,80,80,80,80,80,80,80,80,80,80,113,110,110,80,110,110,110,113,195,80,80,80,80,80,80,80,80,110,80,80,110,80,80,]),'semi':([17,18,25,35,40,49,50,66,67,68,69,71,72,73,74,75,76,77,78,79,88,91,92,93,97,98,99,107,111,124,125,126,127,134,136,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,185,187,188,191,192,196,200,201,210,212,213,214,220,221,222,223,224,225,230,231,],[29,30,38,55,-20,-18,-21,102,104,105,106,-22,-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-19,-24,-23,142,151,-66,-68,-75,-69,-76,142,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,142,151,-90,-88,-89,-70,215,217,-61,-59,-62,-71,-73,-26,-25,-29,-28,-27,-72,-44,]),'cpar':([28,32,41,42,43,44,45,51,52,72,73,74,75,76,77,78,79,88,91,92,93,95,96,110,113,123,124,125,126,127,134,144,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,167,170,177,178,179,186,187,188,191,192,195,196,210,211,212,213,214,220,230,],[-2,-2,59,-30,-31,-32,-34,64,65,-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-33,-35,-2,-2,170,-66,-68,-75,-69,-76,-78,188,170,-91,-92,-96,-45,191,192,-93,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-95,-93,-90,-88,-89,-2,-70,-61,-94,-59,-62,-71,-73,-72,]),'larrow':([40,49,50,72,96,130,],[58,62,63,112,-35,173,]),'comma':([44,72,73,74,75,76,77,78,79,88,91,92,93,96,124,125,126,127,129,130,134,144,147,152,155,156,157,158,159,160,161,162,163,164,167,170,177,178,179,187,188,191,192,196,198,210,212,213,214,220,230,],[60,-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-35,-66,-68,-75,-69,172,-39,-76,-78,189,-45,189,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,189,-90,-88,-89,-70,-38,-61,-59,-62,-71,-73,-72,]),'not':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,]),'isvoid':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,]),'nox':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,]),'let':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,]),'case':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,]),'if':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,]),'while':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,]),'num':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,]),'new':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,]),'true':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,]),'false':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,]),'string':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,]),'arroba':([70,72,73,74,75,76,77,78,79,88,91,92,93,98,107,124,125,126,127,134,136,144,145,152,154,156,157,158,159,160,161,162,163,164,167,170,177,178,179,185,188,191,192,196,207,210,212,213,214,220,230,],[108,-75,-46,-50,-53,-56,121,-67,-63,-74,-81,-82,-83,108,108,-66,-68,-75,-69,-76,108,-78,108,-45,108,-47,-48,-49,-51,-52,-54,108,-55,108,-65,-64,-77,-80,-79,108,-90,-88,-89,-70,108,-61,-59,-62,-71,-73,-72,]),'dot':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,143,144,152,156,157,158,159,160,161,162,163,164,165,166,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,122,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,184,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,193,194,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'star':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,119,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,119,119,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'div':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,120,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,120,120,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'plus':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,117,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,117,117,117,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'minus':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,118,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,118,118,118,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'less':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,114,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'lesseq':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,115,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'equal':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,116,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'of':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,131,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,174,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'then':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,132,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,175,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'loop':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,133,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,176,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'in':([72,73,74,75,76,77,78,79,88,91,92,93,96,124,125,126,127,128,129,130,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,197,198,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-35,-66,-68,-75,-69,171,-36,-39,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-37,-38,-61,-59,-62,-71,-73,-72,]),'else':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,203,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,219,-61,-59,-62,-71,-73,-72,]),'pool':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,204,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,220,-61,-59,-62,-71,-73,-72,]),'fi':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,228,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,230,-72,]),'esac':([199,215,216,217,226,],[214,-40,-42,-43,-41,]),'rarrow':([227,],[229,]),} + +_lr_action = {} +for _k, _v in _lr_action_items.items(): + for _x,_y in zip(_v[0],_v[1]): + if not _x in _lr_action: _lr_action[_x] = {} + _lr_action[_x][_k] = _y +del _lr_action_items + +_lr_goto_items = {'program':([0,],[1,]),'class_list':([0,3,4,],[2,6,7,]),'def_class':([0,3,4,],[3,3,3,]),'feature_list':([10,12,15,29,30,33,34,36,37,],[14,22,26,47,48,53,54,56,57,]),'epsilon':([10,12,15,28,29,30,32,33,34,36,37,110,113,195,],[16,16,16,45,16,16,45,16,16,16,16,150,150,150,]),'def_attr':([10,12,15,29,30,33,34,36,37,],[17,17,17,17,17,17,17,17,17,]),'def_func':([10,12,15,29,30,33,34,36,37,],[18,18,18,18,18,18,18,18,18,]),'formals':([28,32,],[41,51,]),'param_list':([28,32,60,],[42,42,95,]),'param_list_empty':([28,32,],[43,43,]),'param':([28,32,60,84,172,],[44,44,44,130,130,]),'expr':([58,62,63,70,80,81,85,86,87,90,98,107,110,112,113,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[71,97,99,111,123,124,131,132,133,111,111,111,147,152,155,111,187,111,187,111,111,196,198,203,204,205,206,208,209,187,155,155,111,228,231,]),'comp':([58,62,63,70,80,81,85,86,87,90,98,107,110,112,113,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,]),'op':([58,62,63,70,80,81,85,86,87,90,98,107,110,112,113,114,115,116,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,156,157,158,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,]),'term':([58,62,63,70,80,81,85,86,87,90,98,107,110,112,113,114,115,116,117,118,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,159,160,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,]),'base_call':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[76,76,76,76,76,76,125,127,76,76,76,76,76,76,76,76,76,76,76,76,76,76,161,163,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,]),'factor':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,]),'func_call':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,122,136,145,151,154,162,164,171,173,175,176,180,181,182,183,184,185,189,193,194,195,207,219,229,],[78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,167,78,78,78,78,78,78,78,78,78,78,78,78,78,78,210,78,78,212,213,78,78,78,78,]),'atom':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,]),'block':([70,90,98,107,136,145,151,154,162,164,185,207,],[109,135,109,141,141,109,190,109,109,109,141,109,]),'let_list':([84,172,],[128,197,]),'let_assign':([84,172,],[129,129,]),'args':([110,113,195,],[146,153,146,]),'arg_list':([110,113,145,154,185,189,195,],[148,148,186,186,186,211,148,]),'arg_list_empty':([110,113,195,],[149,149,149,]),'cases_list':([174,201,215,],[199,216,226,]),'casep':([174,201,215,],[200,200,200,]),} + +_lr_goto = {} +for _k, _v in _lr_goto_items.items(): + for _x, _y in zip(_v[0], _v[1]): + if not _x in _lr_goto: _lr_goto[_x] = {} + _lr_goto[_x][_k] = _y +del _lr_goto_items +_lr_productions = [ + ("S' -> program","S'",1,None,None,None), + ('program -> class_list','program',1,'p_program','parser.py',8), + ('epsilon -> ','epsilon',0,'p_epsilon','parser.py',12), + ('class_list -> def_class class_list','class_list',2,'p_class_list','parser.py',17), + ('class_list -> def_class','class_list',1,'p_class_list','parser.py',18), + ('class_list -> error class_list','class_list',2,'p_class_list_error','parser.py',23), + ('def_class -> class type ocur feature_list ccur semi','def_class',6,'p_def_class','parser.py',29), + ('def_class -> class type inherits type ocur feature_list ccur semi','def_class',8,'p_def_class','parser.py',30), + ('def_class -> class error ocur feature_list ccur semi','def_class',6,'p_def_class_error','parser.py',38), + ('def_class -> class type ocur feature_list ccur error','def_class',6,'p_def_class_error','parser.py',39), + ('def_class -> class error inherits type ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',40), + ('def_class -> class error inherits error ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',41), + ('def_class -> class type inherits error ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',42), + ('def_class -> class type inherits type ocur feature_list ccur error','def_class',8,'p_def_class_error','parser.py',43), + ('feature_list -> epsilon','feature_list',1,'p_feature_list','parser.py',48), + ('feature_list -> def_attr semi feature_list','feature_list',3,'p_feature_list','parser.py',49), + ('feature_list -> def_func semi feature_list','feature_list',3,'p_feature_list','parser.py',50), + ('feature_list -> error feature_list','feature_list',2,'p_feature_list_error','parser.py',55), + ('def_attr -> id colon type','def_attr',3,'p_def_attr','parser.py',60), + ('def_attr -> id colon type larrow expr','def_attr',5,'p_def_attr','parser.py',61), + ('def_attr -> error colon type','def_attr',3,'p_def_attr_error','parser.py',68), + ('def_attr -> id colon error','def_attr',3,'p_def_attr_error','parser.py',69), + ('def_attr -> error colon type larrow expr','def_attr',5,'p_def_attr_error','parser.py',70), + ('def_attr -> id colon error larrow expr','def_attr',5,'p_def_attr_error','parser.py',71), + ('def_attr -> id colon type larrow error','def_attr',5,'p_def_attr_error','parser.py',72), + ('def_func -> id opar formals cpar colon type ocur expr ccur','def_func',9,'p_def_func','parser.py',77), + ('def_func -> error opar formals cpar colon type ocur expr ccur','def_func',9,'p_def_func_error','parser.py',81), + ('def_func -> id opar error cpar colon type ocur expr ccur','def_func',9,'p_def_func_error','parser.py',82), + ('def_func -> id opar formals cpar colon error ocur expr ccur','def_func',9,'p_def_func_error','parser.py',83), + ('def_func -> id opar formals cpar colon type ocur error ccur','def_func',9,'p_def_func_error','parser.py',84), + ('formals -> param_list','formals',1,'p_formals','parser.py',89), + ('formals -> param_list_empty','formals',1,'p_formals','parser.py',90), + ('param_list -> param','param_list',1,'p_param_list','parser.py',96), + ('param_list -> param comma param_list','param_list',3,'p_param_list','parser.py',97), + ('param_list_empty -> epsilon','param_list_empty',1,'p_param_list_empty','parser.py',106), + ('param -> id colon type','param',3,'p_param','parser.py',110), + ('let_list -> let_assign','let_list',1,'p_let_list','parser.py',115), + ('let_list -> let_assign comma let_list','let_list',3,'p_let_list','parser.py',116), + ('let_assign -> param larrow expr','let_assign',3,'p_let_assign','parser.py',125), + ('let_assign -> param','let_assign',1,'p_let_assign','parser.py',126), + ('cases_list -> casep semi','cases_list',2,'p_cases_list','parser.py',134), + ('cases_list -> casep semi cases_list','cases_list',3,'p_cases_list','parser.py',135), + ('cases_list -> error cases_list','cases_list',2,'p_cases_list_error','parser.py',139), + ('cases_list -> error semi','cases_list',2,'p_cases_list_error','parser.py',140), + ('casep -> id colon type rarrow expr','casep',5,'p_case','parser.py',144), + ('expr -> id larrow expr','expr',3,'p_expr','parser.py',149), + ('expr -> comp','expr',1,'p_expr','parser.py',150), + ('comp -> comp less op','comp',3,'p_comp','parser.py',158), + ('comp -> comp lesseq op','comp',3,'p_comp','parser.py',159), + ('comp -> comp equal op','comp',3,'p_comp','parser.py',160), + ('comp -> op','comp',1,'p_comp','parser.py',161), + ('op -> op plus term','op',3,'p_op','parser.py',180), + ('op -> op minus term','op',3,'p_op','parser.py',181), + ('op -> term','op',1,'p_op','parser.py',182), + ('term -> term star base_call','term',3,'p_term','parser.py',197), + ('term -> term div base_call','term',3,'p_term','parser.py',198), + ('term -> base_call','term',1,'p_term','parser.py',199), + ('term -> term star error','term',3,'p_term_error','parser.py',209), + ('term -> term div error','term',3,'p_term_error','parser.py',210), + ('base_call -> factor arroba type dot func_call','base_call',5,'p_base_call','parser.py',215), + ('base_call -> factor','base_call',1,'p_base_call','parser.py',216), + ('base_call -> error arroba type dot func_call','base_call',5,'p_base_call_error','parser.py',223), + ('base_call -> factor arroba error dot func_call','base_call',5,'p_base_call_error','parser.py',224), + ('factor -> atom','factor',1,'p_factor1','parser.py',229), + ('factor -> opar expr cpar','factor',3,'p_factor1','parser.py',230), + ('factor -> factor dot func_call','factor',3,'p_factor2','parser.py',234), + ('factor -> not expr','factor',2,'p_factor2','parser.py',235), + ('factor -> func_call','factor',1,'p_factor2','parser.py',236), + ('factor -> isvoid base_call','factor',2,'p_factor3','parser.py',245), + ('factor -> nox base_call','factor',2,'p_factor3','parser.py',246), + ('factor -> let let_list in expr','factor',4,'p_expr_let','parser.py',255), + ('factor -> case expr of cases_list esac','factor',5,'p_expr_case','parser.py',267), + ('factor -> if expr then expr else expr fi','factor',7,'p_expr_if','parser.py',279), + ('factor -> while expr loop expr pool','factor',5,'p_expr_while','parser.py',293), + ('atom -> num','atom',1,'p_atom_num','parser.py',306), + ('atom -> id','atom',1,'p_atom_id','parser.py',310), + ('atom -> new type','atom',2,'p_atom_new','parser.py',314), + ('atom -> ocur block ccur','atom',3,'p_atom_block','parser.py',318), + ('atom -> error block ccur','atom',3,'p_atom_block_error','parser.py',322), + ('atom -> ocur error ccur','atom',3,'p_atom_block_error','parser.py',323), + ('atom -> ocur block error','atom',3,'p_atom_block_error','parser.py',324), + ('atom -> true','atom',1,'p_atom_boolean','parser.py',328), + ('atom -> false','atom',1,'p_atom_boolean','parser.py',329), + ('atom -> string','atom',1,'p_atom_string','parser.py',333), + ('block -> expr semi','block',2,'p_block','parser.py',338), + ('block -> expr semi block','block',3,'p_block','parser.py',339), + ('block -> error block','block',2,'p_block_error','parser.py',343), + ('block -> error semi','block',2,'p_block_error','parser.py',344), + ('func_call -> id opar args cpar','func_call',4,'p_func_call','parser.py',349), + ('func_call -> id opar error cpar','func_call',4,'p_func_call_error','parser.py',353), + ('func_call -> error opar args cpar','func_call',4,'p_func_call_error','parser.py',354), + ('args -> arg_list','args',1,'p_args','parser.py',359), + ('args -> arg_list_empty','args',1,'p_args','parser.py',360), + ('arg_list -> expr','arg_list',1,'p_arg_list','parser.py',366), + ('arg_list -> expr comma arg_list','arg_list',3,'p_arg_list','parser.py',367), + ('arg_list -> error arg_list','arg_list',2,'p_arg_list_error','parser.py',374), + ('arg_list_empty -> epsilon','arg_list_empty',1,'p_arg_list_empty','parser.py',378), +] diff --git a/src/cool_parser/parser.py b/src/cool_parser/parser.py index 2e2a301a..47fef6d2 100644 --- a/src/cool_parser/parser.py +++ b/src/cool_parser/parser.py @@ -1,403 +1,403 @@ -from utils.ast import * -from utils.errors import SyntaticError -from utils.utils import find_column -from cool_parser.base_parser import Parser - -class CoolParser(Parser): - def p_program(self, p): - 'program : class_list' - p[0] = ProgramNode(p[1]) - - def p_epsilon(self, p): - 'epsilon :' - pass - - - def p_class_list(self, p): - '''class_list : def_class class_list - | def_class''' - p[0] = [p[1]] if len(p) == 2 else [p[1]] + p[2] - - - def p_class_list_error(self, p): - '''class_list : error class_list''' - p[0] = [p[1]] if len(p) == 2 else [p[1]] + p[2] - - - - def p_def_class(self, p): - '''def_class : class type ocur feature_list ccur semi - | class type inherits type ocur feature_list ccur semi''' - if len(p) == 7: - p[0] = ClassDeclarationNode(p.slice[2], p[4]) - else: - p[0] = ClassDeclarationNode(p.slice[2], p[6], p.slice[4]) - - - def p_def_class_error(self, p): - '''def_class : class error ocur feature_list ccur semi - | class type ocur feature_list ccur error - | class error inherits type ocur feature_list ccur semi - | class error inherits error ocur feature_list ccur semi - | class type inherits error ocur feature_list ccur semi - | class type inherits type ocur feature_list ccur error''' - p[0] = ErrorNode() - - - def p_feature_list(self, p): - '''feature_list : epsilon - | def_attr semi feature_list - | def_func semi feature_list''' - p[0] = [] if len(p) == 2 else [p[1]] + p[3] - - - def p_feature_list_error(self, p): - 'feature_list : error feature_list' - p[0] = [p[1]] + p[2] - - - def p_def_attr(self, p): - '''def_attr : id colon type - | id colon type larrow expr''' - if len(p) == 4: - p[0] = AttrDeclarationNode(p.slice[1], p.slice[3]) - else: - p[0] = AttrDeclarationNode(p.slice[1], p.slice[3], p[5]) - - def p_def_attr_error(self, p): - '''def_attr : error colon type - | id colon error - | error colon type larrow expr - | id colon error larrow expr - | id colon type larrow error''' - p[0] = ErrorNode() - - - def p_def_func(self, p): - 'def_func : id opar formals cpar colon type ocur expr ccur' - p[0] = FuncDeclarationNode(p.slice[1], p[3], p.slice[6], p[8]) - - def p_def_func_error(self, p): - '''def_func : error opar formals cpar colon type ocur expr ccur - | id opar error cpar colon type ocur expr ccur - | id opar formals cpar colon error ocur expr ccur - | id opar formals cpar colon type ocur error ccur''' - p[0] = ErrorNode() - - - def p_formals(self, p): - '''formals : param_list - | param_list_empty - ''' - p[0] = p[1] - - - def p_param_list(self, p): - '''param_list : param - | param comma param_list''' - p[0] = [p[1]] if len(p) == 2 else [p[1]] + p[3] - - # def p_param_list_error(self, p): - # '''param_list : error comma param_list''' - # p[0] = [ErrorNode()] - - - def p_param_list_empty(self, p): - 'param_list_empty : epsilon' - p[0] = [] - - def p_param(self, p): - 'param : id colon type' - p[0] = (p.slice[1], p.slice[3]) - - - def p_let_list(self, p): - '''let_list : let_assign - | let_assign comma let_list''' - p[0] = [p[1]] if len(p) == 2 else [p[1]] + p[3] - - # def p_let_list_error(self, p): - # '''let_list : error let_list - # | error''' - # p[0] = [ErrorNode()] - - def p_let_assign(self, p): - '''let_assign : param larrow expr - | param''' - if len(p) == 2: - p[0] = VarDeclarationNode(p[1][0], p[1][1]) - else: - p[0] = VarDeclarationNode(p[1][0], p[1][1], p[3]) - - - def p_cases_list(self, p): - '''cases_list : casep semi - | casep semi cases_list''' - p[0] = [p[1]] if len(p) == 3 else [p[1]] + p[3] - - def p_cases_list_error(self, p): - '''cases_list : error cases_list - | error semi''' - p[0] = [ErrorNode()] - - def p_case(self, p): - 'casep : id colon type rarrow expr' - p[0] = OptionNode(p.slice[1], p.slice[3], p[5]) - - - def p_expr(self, p): - '''expr : id larrow expr - | comp - ''' - if len(p) == 4: - p[0] = AssignNode(p.slice[1], p[3]) - else: - p[0] = p[1] - - def p_comp(self, p): - '''comp : comp less op - | comp lesseq op - | comp equal op - | op''' - if len(p) == 2: - p[0] = p[1] - elif p[2] == '<': - p[0] = LessNode(p[1], p[3]) - elif p[2] == '<=': - p[0] = LessEqNode(p[1], p[3]) - elif p[2] == '=': - p[0] = EqualNode(p[1], p[3]) - - - # def p_comp_error(self, p): - # '''comp : comp less error - # | comp lesseq error - # | comp equal error''' - # p[0] = ErrorNode() - - - def p_op(self, p): - '''op : op plus term - | op minus term - | term''' - if len(p) == 2: - p[0] = p[1] - elif p[2] == '+': - p[0] = PlusNode(p[1], p[3]) - elif p[2] == '-': - p[0] = MinusNode(p[1], p[3]) - - # def p_op_error(self, p): - # '''op : op plus error - # | op minus error''' - # p[0] = ErrorNode() - - - def p_term(self, p): - '''term : term star base_call - | term div base_call - | base_call''' - if len(p) == 2: - p[0] = p[1] - elif p[2] == '*': - p[0] = StarNode(p[1], p[3]) - elif p[2] == '/': - p[0] = DivNode(p[1], p[3]) - - - def p_term_error(self, p): - '''term : term star error - | term div error''' - p[0] = ErrorNode() - - - def p_base_call(self, p): - '''base_call : factor arroba type dot func_call - | factor''' - if len(p) == 2: - p[0] = p[1] - else: - p[0] = BaseCallNode(p[1], p.slice[3], *p[5]) - - def p_base_call_error(self, p): - '''base_call : error arroba type dot func_call - | factor arroba error dot func_call - ''' - p[0] = ErrorNode() - - def p_factor1(self, p): - '''factor : atom - | opar expr cpar''' - p[0] = p[1] if len(p) == 2 else p[2] - - def p_factor2(self, p): - '''factor : factor dot func_call - | not expr - | func_call''' - if len(p) == 2: - p[0] = StaticCallNode(*p[1]) - elif p[1] == 'not': - p[0] = NotNode(p[2], p.slice[1]) - else: - p[0] = CallNode(p[1], *p[3]) - - def p_factor3(self, p): - '''factor : isvoid base_call - | nox base_call - ''' - if p[1] == 'isvoid': - p[0] = IsVoidNode(p[2], p.slice[1]) - else: - p[0] = BinaryNotNode(p[2], p.slice[1]) - - - def p_expr_let(self, p): - 'factor : let let_list in expr' - p[0] = LetNode(p[2], p[4], p.slice[1]) - - - # def p_expr_let_error(self, p): - # '''factor : let error in expr - # | let let_list in error - # | let let_list error expr''' - # p[0] = ErrorNode() - - - def p_expr_case(self, p): - 'factor : case expr of cases_list esac' - p[0] = CaseNode(p[2], p[4], p.slice[1]) - - # def p_expr_case_error(self, p): - # '''factor : case error of cases_list esac - # | case expr of error esac - # | case expr error cases_list esac - # | case expr of cases_list error''' - # p[0] = ErrorNode() - - - def p_expr_if(self, p): - 'factor : if expr then expr else expr fi' - p[0] = ConditionalNode(p[2], p[4], p[6], p.slice[1]) - - # def p_expr_if_error(self, p): - # '''factor : if error then expr else expr fi - # | if expr then error else expr fi - # | if expr then expr else error fi - # | if expr error expr else expr fi - # | if expr then expr error expr fi - # | if expr then expr else expr error''' - # p[0] = ErrorNode() - - - def p_expr_while(self, p): - 'factor : while expr loop expr pool' - p[0] = WhileNode(p[2], p[4], p.slice[1]) - - - # def p_expr_while_error(self, p): - # '''factor : while error loop expr pool - # | while expr loop error pool - # | while expr loop expr error - # | while expr error expr pool''' - # p[0] = ErrorNode() - - - def p_atom_num(self, p): - 'atom : num' - p[0] = ConstantNumNode(p.slice[1]) - - def p_atom_id(self, p): - 'atom : id' - p[0] = VariableNode(p.slice[1]) - - def p_atom_new(self, p): - 'atom : new type' - p[0] = InstantiateNode(p.slice[2]) - - def p_atom_block(self, p): - 'atom : ocur block ccur' - p[0] = BlockNode(p[2], p.slice[1]) - - def p_atom_block_error(self, p): - '''atom : error block ccur - | ocur error ccur - | ocur block error''' - p[0] = ErrorNode() - - def p_atom_boolean(self, p): - '''atom : true - | false''' - p[0] = ConstantBoolNode(p.slice[1]) - - def p_atom_string(self, p): - 'atom : string' - p[0] = ConstantStrNode(p.slice[1]) - - - def p_block(self, p): - '''block : expr semi - | expr semi block''' - p[0] = [p[1]] if len(p) == 3 else [p[1]] + p[3] - - def p_block_error(self, p): - '''block : error block - | error semi''' - p[0] = [ErrorNode()] - - - def p_func_call(self, p): - 'func_call : id opar args cpar' - p[0] = (p.slice[1], p[3]) - - def p_func_call_error(self, p): - '''func_call : id opar error cpar - | error opar args cpar''' - p[0] = (ErrorNode(), ErrorNode()) - - - def p_args(self, p): - '''args : arg_list - | arg_list_empty - ''' - p[0] = p[1] - - - def p_arg_list(self, p): - '''arg_list : expr - | expr comma arg_list''' - if len(p) == 2: - p[0] = [p[1]] - else: - p[0] = [p[1]] + p[3] - - def p_arg_list_error(self, p): - 'arg_list : error arg_list' - p[0] = [ErrorNode()] - - def p_arg_list_empty(self, p): - 'arg_list_empty : epsilon' - p[0] = [] - - # Error rule for syntax errors - def p_error(self, p): - self.errors = True - if p: - self.print_error(p) - else: - error_text = SyntaticError.ERROR % 'EOF' - column = find_column(self.lexer.lexer, self.lexer.lexer) - line = self.lexer.lexer.lineno - print(SyntaticError(error_text, line, column - 1)) - - def print_error(self, tok): - error_text = SyntaticError.ERROR % tok.value - line, column = tok.lineno, tok.column - print(SyntaticError(error_text, line, column)) - - -if __name__ == "__main__": - s = '''''' - # Parser() - parser = CoolParser() - result = parser.parse(s) +from utils.ast import * +from utils.errors import SyntaticError +from utils.utils import find_column +from cool_parser.base_parser import Parser + +class CoolParser(Parser): + def p_program(self, p): + 'program : class_list' + p[0] = ProgramNode(p[1]) + + def p_epsilon(self, p): + 'epsilon :' + pass + + + def p_class_list(self, p): + '''class_list : def_class class_list + | def_class''' + p[0] = [p[1]] if len(p) == 2 else [p[1]] + p[2] + + + def p_class_list_error(self, p): + '''class_list : error class_list''' + p[0] = [p[1]] if len(p) == 2 else [p[1]] + p[2] + + + + def p_def_class(self, p): + '''def_class : class type ocur feature_list ccur semi + | class type inherits type ocur feature_list ccur semi''' + if len(p) == 7: + p[0] = ClassDeclarationNode(p.slice[2], p[4]) + else: + p[0] = ClassDeclarationNode(p.slice[2], p[6], p.slice[4]) + + + def p_def_class_error(self, p): + '''def_class : class error ocur feature_list ccur semi + | class type ocur feature_list ccur error + | class error inherits type ocur feature_list ccur semi + | class error inherits error ocur feature_list ccur semi + | class type inherits error ocur feature_list ccur semi + | class type inherits type ocur feature_list ccur error''' + p[0] = ErrorNode() + + + def p_feature_list(self, p): + '''feature_list : epsilon + | def_attr semi feature_list + | def_func semi feature_list''' + p[0] = [] if len(p) == 2 else [p[1]] + p[3] + + + def p_feature_list_error(self, p): + 'feature_list : error feature_list' + p[0] = [p[1]] + p[2] + + + def p_def_attr(self, p): + '''def_attr : id colon type + | id colon type larrow expr''' + if len(p) == 4: + p[0] = AttrDeclarationNode(p.slice[1], p.slice[3]) + else: + p[0] = AttrDeclarationNode(p.slice[1], p.slice[3], p[5]) + + def p_def_attr_error(self, p): + '''def_attr : error colon type + | id colon error + | error colon type larrow expr + | id colon error larrow expr + | id colon type larrow error''' + p[0] = ErrorNode() + + + def p_def_func(self, p): + 'def_func : id opar formals cpar colon type ocur expr ccur' + p[0] = FuncDeclarationNode(p.slice[1], p[3], p.slice[6], p[8]) + + def p_def_func_error(self, p): + '''def_func : error opar formals cpar colon type ocur expr ccur + | id opar error cpar colon type ocur expr ccur + | id opar formals cpar colon error ocur expr ccur + | id opar formals cpar colon type ocur error ccur''' + p[0] = ErrorNode() + + + def p_formals(self, p): + '''formals : param_list + | param_list_empty + ''' + p[0] = p[1] + + + def p_param_list(self, p): + '''param_list : param + | param comma param_list''' + p[0] = [p[1]] if len(p) == 2 else [p[1]] + p[3] + + # def p_param_list_error(self, p): + # '''param_list : error comma param_list''' + # p[0] = [ErrorNode()] + + + def p_param_list_empty(self, p): + 'param_list_empty : epsilon' + p[0] = [] + + def p_param(self, p): + 'param : id colon type' + p[0] = (p.slice[1], p.slice[3]) + + + def p_let_list(self, p): + '''let_list : let_assign + | let_assign comma let_list''' + p[0] = [p[1]] if len(p) == 2 else [p[1]] + p[3] + + # def p_let_list_error(self, p): + # '''let_list : error let_list + # | error''' + # p[0] = [ErrorNode()] + + def p_let_assign(self, p): + '''let_assign : param larrow expr + | param''' + if len(p) == 2: + p[0] = VarDeclarationNode(p[1][0], p[1][1]) + else: + p[0] = VarDeclarationNode(p[1][0], p[1][1], p[3]) + + + def p_cases_list(self, p): + '''cases_list : casep semi + | casep semi cases_list''' + p[0] = [p[1]] if len(p) == 3 else [p[1]] + p[3] + + def p_cases_list_error(self, p): + '''cases_list : error cases_list + | error semi''' + p[0] = [ErrorNode()] + + def p_case(self, p): + 'casep : id colon type rarrow expr' + p[0] = OptionNode(p.slice[1], p.slice[3], p[5]) + + + def p_expr(self, p): + '''expr : id larrow expr + | comp + ''' + if len(p) == 4: + p[0] = AssignNode(p.slice[1], p[3]) + else: + p[0] = p[1] + + def p_comp(self, p): + '''comp : comp less op + | comp lesseq op + | comp equal op + | op''' + if len(p) == 2: + p[0] = p[1] + elif p[2] == '<': + p[0] = LessNode(p[1], p[3]) + elif p[2] == '<=': + p[0] = LessEqNode(p[1], p[3]) + elif p[2] == '=': + p[0] = EqualNode(p[1], p[3]) + + + # def p_comp_error(self, p): + # '''comp : comp less error + # | comp lesseq error + # | comp equal error''' + # p[0] = ErrorNode() + + + def p_op(self, p): + '''op : op plus term + | op minus term + | term''' + if len(p) == 2: + p[0] = p[1] + elif p[2] == '+': + p[0] = PlusNode(p[1], p[3]) + elif p[2] == '-': + p[0] = MinusNode(p[1], p[3]) + + # def p_op_error(self, p): + # '''op : op plus error + # | op minus error''' + # p[0] = ErrorNode() + + + def p_term(self, p): + '''term : term star base_call + | term div base_call + | base_call''' + if len(p) == 2: + p[0] = p[1] + elif p[2] == '*': + p[0] = StarNode(p[1], p[3]) + elif p[2] == '/': + p[0] = DivNode(p[1], p[3]) + + + def p_term_error(self, p): + '''term : term star error + | term div error''' + p[0] = ErrorNode() + + + def p_base_call(self, p): + '''base_call : factor arroba type dot func_call + | factor''' + if len(p) == 2: + p[0] = p[1] + else: + p[0] = BaseCallNode(p[1], p.slice[3], *p[5]) + + def p_base_call_error(self, p): + '''base_call : error arroba type dot func_call + | factor arroba error dot func_call + ''' + p[0] = ErrorNode() + + def p_factor1(self, p): + '''factor : atom + | opar expr cpar''' + p[0] = p[1] if len(p) == 2 else p[2] + + def p_factor2(self, p): + '''factor : factor dot func_call + | not expr + | func_call''' + if len(p) == 2: + p[0] = StaticCallNode(*p[1]) + elif p[1] == 'not': + p[0] = NotNode(p[2], p.slice[1]) + else: + p[0] = CallNode(p[1], *p[3]) + + def p_factor3(self, p): + '''factor : isvoid base_call + | nox base_call + ''' + if p[1] == 'isvoid': + p[0] = IsVoidNode(p[2], p.slice[1]) + else: + p[0] = BinaryNotNode(p[2], p.slice[1]) + + + def p_expr_let(self, p): + 'factor : let let_list in expr' + p[0] = LetNode(p[2], p[4], p.slice[1]) + + + # def p_expr_let_error(self, p): + # '''factor : let error in expr + # | let let_list in error + # | let let_list error expr''' + # p[0] = ErrorNode() + + + def p_expr_case(self, p): + 'factor : case expr of cases_list esac' + p[0] = CaseNode(p[2], p[4], p.slice[1]) + + # def p_expr_case_error(self, p): + # '''factor : case error of cases_list esac + # | case expr of error esac + # | case expr error cases_list esac + # | case expr of cases_list error''' + # p[0] = ErrorNode() + + + def p_expr_if(self, p): + 'factor : if expr then expr else expr fi' + p[0] = ConditionalNode(p[2], p[4], p[6], p.slice[1]) + + # def p_expr_if_error(self, p): + # '''factor : if error then expr else expr fi + # | if expr then error else expr fi + # | if expr then expr else error fi + # | if expr error expr else expr fi + # | if expr then expr error expr fi + # | if expr then expr else expr error''' + # p[0] = ErrorNode() + + + def p_expr_while(self, p): + 'factor : while expr loop expr pool' + p[0] = WhileNode(p[2], p[4], p.slice[1]) + + + # def p_expr_while_error(self, p): + # '''factor : while error loop expr pool + # | while expr loop error pool + # | while expr loop expr error + # | while expr error expr pool''' + # p[0] = ErrorNode() + + + def p_atom_num(self, p): + 'atom : num' + p[0] = ConstantNumNode(p.slice[1]) + + def p_atom_id(self, p): + 'atom : id' + p[0] = VariableNode(p.slice[1]) + + def p_atom_new(self, p): + 'atom : new type' + p[0] = InstantiateNode(p.slice[2]) + + def p_atom_block(self, p): + 'atom : ocur block ccur' + p[0] = BlockNode(p[2], p.slice[1]) + + def p_atom_block_error(self, p): + '''atom : error block ccur + | ocur error ccur + | ocur block error''' + p[0] = ErrorNode() + + def p_atom_boolean(self, p): + '''atom : true + | false''' + p[0] = ConstantBoolNode(p.slice[1]) + + def p_atom_string(self, p): + 'atom : string' + p[0] = ConstantStrNode(p.slice[1]) + + + def p_block(self, p): + '''block : expr semi + | expr semi block''' + p[0] = [p[1]] if len(p) == 3 else [p[1]] + p[3] + + def p_block_error(self, p): + '''block : error block + | error semi''' + p[0] = [ErrorNode()] + + + def p_func_call(self, p): + 'func_call : id opar args cpar' + p[0] = (p.slice[1], p[3]) + + def p_func_call_error(self, p): + '''func_call : id opar error cpar + | error opar args cpar''' + p[0] = (ErrorNode(), ErrorNode()) + + + def p_args(self, p): + '''args : arg_list + | arg_list_empty + ''' + p[0] = p[1] + + + def p_arg_list(self, p): + '''arg_list : expr + | expr comma arg_list''' + if len(p) == 2: + p[0] = [p[1]] + else: + p[0] = [p[1]] + p[3] + + def p_arg_list_error(self, p): + 'arg_list : error arg_list' + p[0] = [ErrorNode()] + + def p_arg_list_empty(self, p): + 'arg_list_empty : epsilon' + p[0] = [] + + # Error rule for syntax errors + def p_error(self, p): + self.errors = True + if p: + self.print_error(p) + else: + error_text = SyntaticError.ERROR % 'EOF' + column = find_column(self.lexer.lexer, self.lexer.lexer) + line = self.lexer.lexer.lineno + print(SyntaticError(error_text, line, column - 1)) + + def print_error(self, tok): + error_text = SyntaticError.ERROR % tok.value + line, column = tok.lineno, tok.column + print(SyntaticError(error_text, line, column)) + + +if __name__ == "__main__": + s = '''''' + # Parser() + parser = CoolParser() + result = parser.parse(s) # print(result) \ No newline at end of file diff --git a/src/coolc.sh b/src/coolc.sh index 2bc04b9b..c2fb11b3 100644 --- a/src/coolc.sh +++ b/src/coolc.sh @@ -1,15 +1,15 @@ -# Incluye aqui las instrucciones necesarias para ejecutar su compilador - -INPUT_FILE=$1 -OUTPUT_FILE=$INPUT_FILE -# OUTPUT_FILE=${INPUT_FILE:0:-2} - -# Si su compilador no lo hace ya, aquí puede imprimir información de contacto -echo "LINEA_CON_NOMBRE_Y_VERSION_DEL_COMPILADOR" # TODO: Recuerde cambiar estas lineas -echo "Copyright (c) 2019: Loraine Monteagudo, Amanda Marrero, Manuel Fernandez" - -FILE="../src/main.py" -# echo $FILE - -# echo "Compiling $INPUT_FILE into $OUTPUT_FILE" +# Incluye aqui las instrucciones necesarias para ejecutar su compilador + +INPUT_FILE=$1 +OUTPUT_FILE=$INPUT_FILE +# OUTPUT_FILE=${INPUT_FILE:0:-2} + +# Si su compilador no lo hace ya, aquí puede imprimir información de contacto +echo "LINEA_CON_NOMBRE_Y_VERSION_DEL_COMPILADOR" # TODO: Recuerde cambiar estas lineas +echo "Copyright (c) 2019: Loraine Monteagudo, Amanda Marrero, Manuel Fernandez" + +FILE="../src/main.py" +# echo $FILE + +# echo "Compiling $INPUT_FILE into $OUTPUT_FILE" python ${FILE} $INPUT_FILE \ No newline at end of file diff --git a/src/lexer/lexer.py b/src/lexer/lexer.py index b9cf0305..e0eee13c 100644 --- a/src/lexer/lexer.py +++ b/src/lexer/lexer.py @@ -1,326 +1,324 @@ -import ply.lex as lex -from pprint import pprint - -from utils.tokens import tokens, reserved, Token -from utils.errors import LexicographicError, SyntaticError -from utils.utils import find_column - - -class CoolLexer: - def __init__(self, **kwargs): - self.reserved = reserved - self.tokens = tokens - self.errors = [] - self.lexer = lex.lex(module=self, **kwargs) - self.lexer.lineno = 1 - self.lexer.linestart = 0 - - def _update_column(self, t): - t.column = t.lexpos - t.lexer.linestart + 1 - - - states = ( - ('comments', 'exclusive'), - ('strings', 'exclusive') - ) - - # Comments - def t_comment(self, t): - r'--.*($|\n)' - t.lexer.lineno += 1 - t.lexer.linestart = t.lexer.lexpos - - def t_comments(self,t): - r'\(\*' - t.lexer.level = 1 - t.lexer.begin('comments') - - - def t_comments_open(self,t): - r'\(\*' - t.lexer.level += 1 - - def t_comments_close(self,t): - r'\*\)' - t.lexer.level -= 1 - - if t.lexer.level == 0: - t.lexer.begin('INITIAL') - - def t_comments_newline(self, t): - r'\n+' - t.lexer.lineno += len(t.value) - t.lexer.linestart = t.lexer.lexpos - - t_comments_ignore = ' \t\f\r\t\v' - - def t_comments_error(self, t): - t.lexer.skip(1) - - def t_comments_eof(self, t): - self._update_column(t) - if t.lexer.level > 0: - error_text = LexicographicError.EOF_COMMENT - self.errors.append(LexicographicError(error_text, t.lineno, t.column)) - - # Strings - t_strings_ignore = '' - - def t_strings(self, t): - r'\"' - t.lexer.str_start = t.lexer.lexpos - t.lexer.myString = '' - t.lexer.backslash = False - t.lexer.begin('strings') - - def t_strings_end(self, t): - r'\"' - self._update_column(t) - - if t.lexer.backslash : - t.lexer.myString += '"' - t.lexer.backslash = False - else: - t.value = t.lexer.myString - t.type = 'string' - t.lexer.begin('INITIAL') - return t - - def t_strings_newline(self, t): - r'\n' - t.lexer.lineno += 1 - self._update_column(t) - - t.lexer.linestart = t.lexer.lexpos - - if not t.lexer.backslash: - error_text = LexicographicError.UNDETERMINATED_STRING - self.errors.append(LexicographicError(error_text, t.lineno, t.column)) - t.lexer.begin('INITIAL') - - def t_strings_nill(self, t): - r'\0' - error_text = LexicographicError.NULL_STRING - self._update_column(t) - - self.errors.append(LexicographicError(error_text, t.lineno, t.column)) - - def t_strings_consume(self, t): - r'[^\n]' - # self._update_column(t) - - if t.lexer.backslash : - if t.value == 'b': - t.lexer.myString += '\b' - - elif t.value == 't': - t.lexer.myString += '\t' - - - elif t.value == 'f': - t.lexer.myString += '\f' - - - elif t.value == 'n': - t.lexer.myString += '\n' - - elif t.value == '\\': - t.lexer.myString += '\\' - else: - t.lexer.myString += t.value - t.lexer.backslash = False - else: - if t.value != '\\': - t.lexer.myString += t.value - else: - t.lexer.backslash = True - - def t_strings_error(self, t): - pass - - def t_strings_eof(self, t): - self._update_column(t) - - error_text = LexicographicError.EOF_STRING - self.errors.append(LexicographicError(error_text, t.lineno, t.column)) - - - t_ignore = ' \t\f\r\t\v' - - - def t_semi(self, t): - r';' - self._update_column(t) - return t - - def t_colon(self, t): - r':' - self._update_column(t) - return t - - def t_comma(self, t): - r',' - self._update_column(t) - return t - - def t_dot(self, t): - r'\.' - self._update_column(t) - return t - - def t_opar(self, t): - r'\(' - self._update_column(t) - return t - - def t_cpar(self, t): - r'\)' - self._update_column(t) - return t - - def t_ocur(self, t): - r'\{' - self._update_column(t) - return t - - def t_ccur(self, t): - r'\}' - self._update_column(t) - return t - - def t_larrow(self, t): - r'<-' - self._update_column(t) - return t - - def t_arroba(self, t): - r'@' - self._update_column(t) - return t - - def t_rarrow(self, t): - r'=>' - self._update_column(t) - return t - - def t_nox(self, t): - r'~' - self._update_column(t) - return - - def t_equal(self, t): - r'=' - self._update_column(t) - return t - - def t_plus(self, t): - r'\+' - self._update_column(t) - return t - - def t_of(self, t): - r'of' - self._update_column(t) - return t - - def t_minus(self, t): - r'-' - self._update_column(t) - return t - - def t_star(self, t): - r'\*' - self._update_column(t) - return t - - def t_div(self, t): - r'/' - self._update_column(t) - return t - - def t_lesseq(self, t): - r'<=' - self._update_column(t) - return t - - def t_less(self, t): - r'<' - self._update_column(t) - return t - - - def t_inherits(self, t): - r'inherits' - self._update_column(t) - return t - - def t_type(self, t): - r'[A-Z][a-zA-Z_0-9]*' - t.type = self.reserved.get(t.value.lower(), 'type') - self._update_column(t) - return t - - # Check for reserved words: - def t_id(self, t): - r'[a-z][a-zA-Z_0-9]*' - t.type = self.reserved.get(t.value.lower(), 'id') - self._update_column(t) - return t - - - # Get Numbers - def t_num(self, t): - r'\d+(\.\d+)? ' - t.value = float(t.value) - self._update_column(t) - return t - - # Define a rule so we can track line numbers - def t_newline(self, t): - r'\n+' - t.lexer.lineno += len(t.value) - t.lexer.linestart = t.lexer.lexpos - - # Error handling rule - def t_error(self, t): - self._update_column(t) - error_text = LexicographicError.UNKNOWN_TOKEN % t.value[0] - - self.errors.append(LexicographicError(error_text, t.lineno, t.column)) - t.lexer.skip(1) - #t.lexer.skip(len(t.value)) - - def tokenize_text(self, text: str) -> list: - self.lexer.input(text) - tokens = [] - for tok in self.lexer: - tokens.append(Token(tok.type, tok.value, tok.lineno, tok.column)) - self.lexer.lineno = 1 - self.lexer.linestart = 0 - return tokens - - def _check_empty_line(self, tokens: list): - if len(tokens) == 0: - error_text = SyntaticError.ERROR % 'EOF' - print(SyntaticError(error_text, 0, 0)) - raise Exception() - - - def run(self, text: str): - tokens = self.tokenize_text(text) - if self.errors: - for error in self.errors: - print(error) - raise Exception() - - self._check_empty_line(tokens) - return tokens - -if __name__ == "__main__": - lexer = CoolLexer() - - data = open('string4.cl',encoding='utf-8') - data = data.read() - res = lexer.tokenize_text(data) - #pprint(res) - pprint(lexer.errors) +import ply.lex as lex +from pprint import pprint + +from utils.tokens import tokens, reserved, Token +from utils.errors import LexicographicError, SyntaticError +from utils.utils import find_column + + +class CoolLexer: + def __init__(self, **kwargs): + self.reserved = reserved + self.tokens = tokens + self.errors = [] + self.lexer = lex.lex(module=self, **kwargs) + self.lexer.lineno = 1 + self.lexer.linestart = 0 + + def _update_column(self, t): + t.column = t.lexpos - t.lexer.linestart + 1 + + states = ( + ('comments', 'exclusive'), + ('strings', 'exclusive') + ) + + # Comments + def t_comment(self, t): + r'--.*($|\n)' + t.lexer.lineno += 1 + t.lexer.linestart = t.lexer.lexpos + + def t_comments(self,t): + r'\(\*' + t.lexer.level = 1 + t.lexer.begin('comments') + + def t_comments_open(self, t): + r'\(\*' + t.lexer.level += 1 + + def t_comments_close(self, t): + r'\*\)' + t.lexer.level -= 1 + + if t.lexer.level == 0: + t.lexer.begin('INITIAL') + + def t_comments_newline(self, t): + r'\n+' + t.lexer.lineno += len(t.value) + t.lexer.linestart = t.lexer.lexpos + + t_comments_ignore = ' \t\f\r\t\v' + + def t_comments_error(self, t): + t.lexer.skip(1) + + def t_comments_eof(self, t): + self._update_column(t) + if t.lexer.level > 0: + error_text = LexicographicError.EOF_COMMENT + self.errors.append(LexicographicError(error_text, t.lineno, t.column)) + + # Strings + t_strings_ignore = '' + + def t_strings(self, t): + r'\"' + t.lexer.str_start = t.lexer.lexpos + t.lexer.myString = '' + t.lexer.backslash = False + t.lexer.begin('strings') + + def t_strings_end(self, t): + r'\"' + self._update_column(t) + + if t.lexer.backslash : + t.lexer.myString += '"' + t.lexer.backslash = False + else: + t.value = t.lexer.myString + t.type = 'string' + t.lexer.begin('INITIAL') + return t + + def t_strings_newline(self, t): + r'\n' + t.lexer.lineno += 1 + self._update_column(t) + + t.lexer.linestart = t.lexer.lexpos + + if not t.lexer.backslash: + error_text = LexicographicError.UNDETERMINATED_STRING + self.errors.append(LexicographicError(error_text, t.lineno, t.column)) + t.lexer.begin('INITIAL') + + def t_strings_nill(self, t): + r'\0' + error_text = LexicographicError.NULL_STRING + self._update_column(t) + + self.errors.append(LexicographicError(error_text, t.lineno, t.column)) + + def t_strings_consume(self, t): + r'[^\n]' + # self._update_column(t) + + if t.lexer.backslash : + if t.value == 'b': + t.lexer.myString += '\b' + + elif t.value == 't': + t.lexer.myString += '\t' + + + elif t.value == 'f': + t.lexer.myString += '\f' + + + elif t.value == 'n': + t.lexer.myString += '\n' + + elif t.value == '\\': + t.lexer.myString += '\\' + else: + t.lexer.myString += t.value + t.lexer.backslash = False + else: + if t.value != '\\': + t.lexer.myString += t.value + else: + t.lexer.backslash = True + + def t_strings_error(self, t): + pass + + def t_strings_eof(self, t): + self._update_column(t) + + error_text = LexicographicError.EOF_STRING + self.errors.append(LexicographicError(error_text, t.lineno, t.column)) + + + t_ignore = ' \t\f\r\t\v' + + + def t_semi(self, t): + r';' + self._update_column(t) + return t + + def t_colon(self, t): + r':' + self._update_column(t) + return t + + def t_comma(self, t): + r',' + self._update_column(t) + return t + + def t_dot(self, t): + r'\.' + self._update_column(t) + return t + + def t_opar(self, t): + r'\(' + self._update_column(t) + return t + + def t_cpar(self, t): + r'\)' + self._update_column(t) + return t + + def t_ocur(self, t): + r'\{' + self._update_column(t) + return t + + def t_ccur(self, t): + r'\}' + self._update_column(t) + return t + + def t_larrow(self, t): + r'<-' + self._update_column(t) + return t + + def t_arroba(self, t): + r'@' + self._update_column(t) + return t + + def t_rarrow(self, t): + r'=>' + self._update_column(t) + return t + + def t_nox(self, t): + r'~' + self._update_column(t) + return + + def t_equal(self, t): + r'=' + self._update_column(t) + return t + + def t_plus(self, t): + r'\+' + self._update_column(t) + return t + + def t_of(self, t): + r'of' + self._update_column(t) + return t + + def t_minus(self, t): + r'-' + self._update_column(t) + return t + + def t_star(self, t): + r'\*' + self._update_column(t) + return t + + def t_div(self, t): + r'/' + self._update_column(t) + return t + + def t_lesseq(self, t): + r'<=' + self._update_column(t) + return t + + def t_less(self, t): + r'<' + self._update_column(t) + return t + + + def t_inherits(self, t): + r'inherits' + self._update_column(t) + return t + + def t_type(self, t): + r'[A-Z][a-zA-Z_0-9]*' + t.type = self.reserved.get(t.value.lower(), 'type') + self._update_column(t) + return t + + # Check for reserved words: + def t_id(self, t): + r'[a-z][a-zA-Z_0-9]*' + t.type = self.reserved.get(t.value.lower(), 'id') + self._update_column(t) + return t + + + # Get Numbers + def t_num(self, t): + r'\d+(\.\d+)? ' + t.value = float(t.value) + self._update_column(t) + return t + + # Define a rule so we can track line numbers + def t_newline(self, t): + r'\n+' + t.lexer.lineno += len(t.value) + t.lexer.linestart = t.lexer.lexpos + + # Error handling rule + def t_error(self, t): + self._update_column(t) + error_text = LexicographicError.UNKNOWN_TOKEN % t.value[0] + + self.errors.append(LexicographicError(error_text, t.lineno, t.column)) + t.lexer.skip(1) + #t.lexer.skip(len(t.value)) + + def tokenize_text(self, text: str) -> list: + self.lexer.input(text) + tokens = [] + for tok in self.lexer: + tokens.append(Token(tok.type, tok.value, tok.lineno, tok.column)) + self.lexer.lineno = 1 + self.lexer.linestart = 0 + return tokens + + def _check_empty_line(self, tokens: list): + if len(tokens) == 0: + error_text = SyntaticError.ERROR % 'EOF' + print(SyntaticError(error_text, 0, 0)) + raise Exception() + + + def run(self, text: str): + tokens = self.tokenize_text(text) + if self.errors: + for error in self.errors: + print(error) + raise Exception() + + self._check_empty_line(tokens) + return tokens + +if __name__ == "__main__": + lexer = CoolLexer() + + data = open('string4.cl',encoding='utf-8') + data = data.read() + res = lexer.tokenize_text(data) + #pprint(res) + pprint(lexer.errors) diff --git a/src/main.py b/src/main.py index bcdec1d0..e6a5648f 100644 --- a/src/main.py +++ b/src/main.py @@ -1,34 +1,34 @@ -from lexer import CoolLexer -from utils.errors import CompilerError -from semantic.semantic import semantic_analysis -from codegen import codegen_pipeline -from cool_parser import CoolParser - -def run_pipeline(input): - try: - with open(input_) as f: - text = f.read() - - lexer = CoolLexer() - tokens = lexer.run(text) - - p = CoolParser(lexer) - - ast = p.parse(text, debug=True) - if p.errors: - raise Exception() - - ast, errors, context, scope = semantic_analysis(ast) - if not errors: - ast, context, scope, cil_ast = codegen_pipeline(context, ast, scope) - - except FileNotFoundError: - error_text = CompilerError.UNKNOWN_FILE % input_ - print(CompilerError(error_text, 0, 0)) - - -if __name__ == "__main__": - # input_ = sys.argv[1] - input_ = f'test.cl' - # output_ = args.output +from lexer import CoolLexer +from utils.errors import CompilerError +from semantic.semantic import semantic_analysis +from codegen import codegen_pipeline +from cool_parser import CoolParser + +def run_pipeline(input): + try: + with open(input_) as f: + text = f.read() + + lexer = CoolLexer() + tokens = lexer.run(text) + + p = CoolParser(lexer) + + ast = p.parse(text, debug=True) + if p.errors: + raise Exception() + + ast, errors, context, scope = semantic_analysis(ast) + if not errors: + ast, context, scope, cil_ast = codegen_pipeline(context, ast, scope) + + except FileNotFoundError: + error_text = CompilerError.UNKNOWN_FILE % input_ + print(CompilerError(error_text, 0, 0)) + + +if __name__ == "__main__": + # input_ = sys.argv[1] + input_ = f'test.cl' + # output_ = args.output run_pipeline(input_) \ No newline at end of file diff --git a/src/makefile b/src/makefile index ff40efc9..ce7d1eca 100644 --- a/src/makefile +++ b/src/makefile @@ -1,10 +1,10 @@ -.PHONY: clean - -main: - # Compiling the compiler :) - -clean: - rm -rf build/* - -test: +.PHONY: clean + +main: + # Compiling the compiler :) + +clean: + rm -rf build/* + +test: pytest ../tests -v --tb=short -m=${TAG} \ No newline at end of file diff --git a/src/self.cl b/src/self.cl index 893f2b06..5026d434 100644 --- a/src/self.cl +++ b/src/self.cl @@ -1,9 +1,9 @@ -class Silly { - copy() : SELF_TYPE { self }; -}; -class Sally inherits Silly { }; - -class Main { - x : Sally <- (new Sally).copy(); - main() : Sally { new SELF_TYPE }; +class Silly { + copy() : SELF_TYPE { self }; +}; +class Sally inherits Silly { }; + +class Main { + x : Sally <- (new Sally).copy(); + main() : Sally { new SELF_TYPE }; }; \ No newline at end of file diff --git a/src/semantic/semantic.py b/src/semantic/semantic.py index 4a98e511..b0306f2d 100644 --- a/src/semantic/semantic.py +++ b/src/semantic/semantic.py @@ -1,48 +1,48 @@ -from semantic.visitors.type_collector import TypeCollector -from semantic.visitors.type_builder import TypeBuilder -from semantic.visitors.var_collector import VarCollector -from semantic.visitors.type_checker import TypeChecker - - -def semantic_analysis(ast): - print('============== COLLECTING TYPES ===============') - errors = [] - collector = TypeCollector(errors) - collector.visit(ast) - context = collector.context - print('Errors: [') - for error in errors: - print('\t', error) - print('=============== BUILDING TYPES ================') - builder = TypeBuilder(context, errors) - builder.visit(ast) - print('Errors: [') - for error in errors: - print('\t', error) - print(']') - print('=============== VAR COLLECTOR ================') - checker = VarCollector(context, errors) - scope = checker.visit(ast) - print('Errors: [') - for error in errors: - print('\t', error) - print(']') - # print('=============== SELF TYPE ================') - # checker = SelfTypeVisitor(context, errors) - # checker.visit(ast, scope) - # print('Errors: [') - # for error in errors: - # print('\t', error) - # print(']') - print('=============== CHECKING TYPES ================') - checker = TypeChecker(context, errors) - checker.visit(ast, scope) - print('Errors: [') - for error in errors: - print('\t', error) - print(']') - print('Context:') - print(context) - print('Scope:') - print(scope) - return ast, errors, context, scope +from semantic.visitors.type_collector import TypeCollector +from semantic.visitors.type_builder import TypeBuilder +from semantic.visitors.var_collector import VarCollector +from semantic.visitors.type_checker import TypeChecker + + +def semantic_analysis(ast): + print('============== COLLECTING TYPES ===============') + errors = [] + collector = TypeCollector(errors) + collector.visit(ast) + context = collector.context + print('Errors: [') + for error in errors: + print('\t', error) + print('=============== BUILDING TYPES ================') + builder = TypeBuilder(context, errors) + builder.visit(ast) + print('Errors: [') + for error in errors: + print('\t', error) + print(']') + print('=============== VAR COLLECTOR ================') + checker = VarCollector(context, errors) + scope = checker.visit(ast) + print('Errors: [') + for error in errors: + print('\t', error) + print(']') + # print('=============== SELF TYPE ================') + # checker = SelfTypeVisitor(context, errors) + # checker.visit(ast, scope) + # print('Errors: [') + # for error in errors: + # print('\t', error) + # print(']') + print('=============== CHECKING TYPES ================') + checker = TypeChecker(context, errors) + checker.visit(ast, scope) + print('Errors: [') + for error in errors: + print('\t', error) + print(']') + print('Context:') + print(context) + print('Scope:') + print(scope) + return ast, errors, context, scope diff --git a/src/semantic/tools.py b/src/semantic/tools.py index 2d3c7d60..e2fef5b1 100644 --- a/src/semantic/tools.py +++ b/src/semantic/tools.py @@ -1,121 +1,121 @@ -import itertools as itt -from utils.errors import SemanticError, AttributesError, TypesError, NamesError -from semantic.types import Type - -class Context: - def __init__(self): - self.types = {} - - def create_type(self, name:str, pos): - if name in self.types: - error_text = TypesError.TYPE_ALREADY_DEFINED % name - raise TypesError(error_text, *pos) - typex = self.types[name] = Type(name, pos) - return typex - - def get_type(self, name:str, pos): - try: - return self.types[name] - except KeyError: - error_text = TypesError.TYPE_NOT_DEFINED % name - raise TypesError(error_text, *pos) - - def __str__(self): - return '{\n\t' + '\n\t'.join(y for x in self.types.values() for y in str(x).split('\n')) + '\n}' - - def __repr__(self): - return str(self) - -class VariableInfo: - def __init__(self, name, vtype, index=None): - self.name = name - self.type = vtype - self.index = index # saves the index in the scope of the variable - - def __str__(self): - return f'{self.name} : {self.type.name}' - - def __repr__(self): - return str(self) - -class Scope: - def __init__(self, parent=None): - self.locals = [] - self.attributes = [] - self.parent = parent - self.children = [] - self.expr_dict = { } - self.functions = { } - self.index = 0 if parent is None else len(parent) - - def __len__(self): - return len(self.locals) - - def __str__(self): - res = '' - for scope in self.children: - try: - classx = scope.locals[0] - name = classx.type.name - except: - name = '1' - res += name + scope.tab_level(1, '', 1) #'\n\t' + ('\n' + '\t').join(str(local) for local in scope.locals) + '\n' - return res - - def tab_level(self, tabs, name, num): - res = ('\t' * tabs) + ('\n' + ('\t' * tabs)).join(str(local) for local in self.locals) - if self.functions: - children = '\n'.join(v.tab_level(tabs + 1, '[method] ' + k, num) for k, v in self.functions.items()) - else: - children = '\n'.join(child.tab_level(tabs + 1, num, num + 1) for child in self.children) - return "\t" * (tabs-1) + f'{name}' + "\t" * tabs + f'\n{res}\n{children}' - - def __repr__(self): - return str(self) - - def create_child(self): - child = Scope(self) - self.children.append(child) - return child - - def define_variable(self, vname, vtype): - info = VariableInfo(vname, vtype) - self.locals.append(info) - return info - - def find_variable(self, vname, index=None): - locals = self.attributes + self.locals - locals = locals if index is None else itt.islice(locals, index) - try: - return next(x for x in locals if x.name == vname) - except StopIteration: - return self.parent.find_variable(vname, self.index) if self.parent else None - - def find_local(self, vname, index=None): - locals = self.locals if index is None else itt.islice(self.locals, index) - try: - return next(x for x in locals if x.name == vname) - except StopIteration: - return self.parent.find_local(vname, self.index) if self.parent else None - - def find_attribute(self, vname, index=None): - locals = self.attributes if index is None else itt.islice(self.attributes, index) - try: - return next(x for x in locals if x.name == vname) - except StopIteration: - return self.parent.find_attribute(vname, self.index) if self.parent else None - - - def get_class_scope(self): - if self.parent == None or self.parent.parent == None: - return self - return self.parent.get_class_scope() - - def is_defined(self, vname): - return self.find_variable(vname) is not None - - def is_local(self, vname): - return any(True for x in self.locals if x.name == vname) - - def define_attribute(self, attr): +import itertools as itt +from utils.errors import SemanticError, AttributesError, TypesError, NamesError +from semantic.types import Type + +class Context: + def __init__(self): + self.types = {} + + def create_type(self, name:str, pos): + if name in self.types: + error_text = TypesError.TYPE_ALREADY_DEFINED % name + raise TypesError(error_text, *pos) + typex = self.types[name] = Type(name, pos) + return typex + + def get_type(self, name:str, pos): + try: + return self.types[name] + except KeyError: + error_text = TypesError.TYPE_NOT_DEFINED % name + raise TypesError(error_text, *pos) + + def __str__(self): + return '{\n\t' + '\n\t'.join(y for x in self.types.values() for y in str(x).split('\n')) + '\n}' + + def __repr__(self): + return str(self) + +class VariableInfo: + def __init__(self, name, vtype, index=None): + self.name = name + self.type = vtype + self.index = index # saves the index in the scope of the variable + + def __str__(self): + return f'{self.name} : {self.type.name}' + + def __repr__(self): + return str(self) + +class Scope: + def __init__(self, parent=None): + self.locals = [] + self.attributes = [] + self.parent = parent + self.children = [] + self.expr_dict = { } + self.functions = { } + self.index = 0 if parent is None else len(parent) + + def __len__(self): + return len(self.locals) + + def __str__(self): + res = '' + for scope in self.children: + try: + classx = scope.locals[0] + name = classx.type.name + except: + name = '1' + res += name + scope.tab_level(1, '', 1) #'\n\t' + ('\n' + '\t').join(str(local) for local in scope.locals) + '\n' + return res + + def tab_level(self, tabs, name, num): + res = ('\t' * tabs) + ('\n' + ('\t' * tabs)).join(str(local) for local in self.locals) + if self.functions: + children = '\n'.join(v.tab_level(tabs + 1, '[method] ' + k, num) for k, v in self.functions.items()) + else: + children = '\n'.join(child.tab_level(tabs + 1, num, num + 1) for child in self.children) + return "\t" * (tabs-1) + f'{name}' + "\t" * tabs + f'\n{res}\n{children}' + + def __repr__(self): + return str(self) + + def create_child(self): + child = Scope(self) + self.children.append(child) + return child + + def define_variable(self, vname, vtype): + info = VariableInfo(vname, vtype) + self.locals.append(info) + return info + + def find_variable(self, vname, index=None): + locals = self.attributes + self.locals + locals = locals if index is None else itt.islice(locals, index) + try: + return next(x for x in locals if x.name == vname) + except StopIteration: + return self.parent.find_variable(vname, self.index) if self.parent else None + + def find_local(self, vname, index=None): + locals = self.locals if index is None else itt.islice(self.locals, index) + try: + return next(x for x in locals if x.name == vname) + except StopIteration: + return self.parent.find_local(vname, self.index) if self.parent else None + + def find_attribute(self, vname, index=None): + locals = self.attributes if index is None else itt.islice(self.attributes, index) + try: + return next(x for x in locals if x.name == vname) + except StopIteration: + return self.parent.find_attribute(vname, self.index) if self.parent else None + + + def get_class_scope(self): + if self.parent == None or self.parent.parent == None: + return self + return self.parent.get_class_scope() + + def is_defined(self, vname): + return self.find_variable(vname) is not None + + def is_local(self, vname): + return any(True for x in self.locals if x.name == vname) + + def define_attribute(self, attr): self.attributes.append(attr) \ No newline at end of file diff --git a/src/semantic/types.py b/src/semantic/types.py index 37a2fee7..c100318b 100644 --- a/src/semantic/types.py +++ b/src/semantic/types.py @@ -1,284 +1,284 @@ -from utils.errors import SemanticError, AttributesError, TypesError, NamesError -from collections import OrderedDict - -class Attribute: - def __init__(self, name, typex, index): - self.name = name - self.type = typex - self.index = index # lugar que ocupa en el scope - self.expr = None - - def __str__(self): - return f'[attrib] {self.name} : {self.type.name};' - - def __repr__(self): - return str(self) - -class Method: - def __init__(self, name, param_names, params_types, return_type): - self.name = name - self.param_names = param_names - self.param_types = params_types - self.return_type = return_type - - def __str__(self): - params = ', '.join(f'{n}:{t.name}' for n,t in zip(self.param_names, self.param_types)) - return f'[method] {self.name}({params}): {self.return_type.name};' - - def __eq__(self, other): - return other.name == self.name and \ - other.return_type == self.return_type and \ - other.param_types == self.param_types - -class MethodError(Method): - def __init__(self, name, param_names, param_types, return_types): - super().__init__(name, param_names, param_types, return_types) - - def __str__(self): - return f'[method] {self.name} ERROR' - -class Type: - def __init__(self, name:str, pos): - if name == 'ObjectType': - return ObjectType(pos) - self.name = name - self.attributes = {} - self.methods = {} - self.parent = ObjectType(pos) - self.pos = pos - - def set_parent(self, parent): - if type(self.parent) != ObjectType and self.parent is not None: - error_text = TypesError.PARENT_ALREADY_DEFINED % self.name - raise TypesError(error_text, *self.pos) - self.parent = parent - - def get_attribute(self, name:str, pos) -> Attribute: - try: - return self.attributes[name] #next(attr for attr in self.attributes if attr.name == name) - except KeyError: - if self.parent is None: - error_text = AttributesError.ATTRIBUTE_NOT_DEFINED % (name, self.name) - raise AttributesError(error_text, *pos) - try: - return self.parent.get_attribute(name, pos) - except AttributesError: - error_text = AttributesError.ATTRIBUTE_NOT_DEFINED % (name, self.name) - raise AttributesError(error_text, *pos) - - def define_attribute(self, name:str, typex, pos): - try: - self.get_attribute(name, pos) - except AttributesError: - self.attributes[name] = attribute = Attribute(name, typex, len(self.attributes)) - # self.attributes.append(attribute) - return attribute - else: - error_text = AttributesError.ATTRIBUTE_ALREADY_DEFINED %(name, self.name) - raise AttributesError(error_text, *pos) - - def get_method(self, name:str, pos) -> Method: - try: - return self.methods[name] - except KeyError: - error_text = AttributesError.METHOD_NOT_DEFINED %(name, self.name) - if self.parent is None: - raise AttributesError(error_text, *pos) - try: - return self.parent.get_method(name, pos) - except AttributesError: - raise AttributesError(error_text, *pos) - - def define_method(self, name:str, param_names:list, param_types:list, return_type): - if name in self.methods: - error_text = AttributesError.METHOD_ALREADY_DEFINED % (name, self.name) - raise AttributesError(error_text, *pos) - - method = self.methods[name] = Method(name, param_names, param_types, return_type) - return method - - def change_type(self, method, nparm, newtype): - idx = method.param_names.index(nparm) - method.param_types[idx] = newtype - - def all_attributes(self, clean=True): - plain = OrderedDict() if self.parent is None else self.parent.all_attributes(False) - for attr in self.attributes.values(): - plain[attr.name] = (attr, self) - return plain.values() if clean else plain - - def all_methods(self, clean=True): - plain = OrderedDict() if self.parent is None else self.parent.all_methods(False) - for method in self.methods.values(): - plain[method.name] = (method, self) - return plain.values() if clean else plain - - - def conforms_to(self, other): - return other.bypass() or self == other or self.parent is not None and self.parent.conforms_to(other) - - def bypass(self): - return False - - def __str__(self): - output = f'type {self.name}' - parent = '' if self.parent is None else f' : {self.parent.name}' - output += parent - output += ' {' - output += '\n\t' if self.attributes or self.methods else '' - output += '\n\t'.join(str(x) for x in self.attributes.values()) - output += '\n\t' if self.attributes else '' - output += '\n\t'.join(str(x) for x in self.methods.values()) - output += '\n' if self.methods else '' - output += '}\n' - return output - - def __repr__(self): - return str(self) - -class ErrorType(Type): - def __init__(self, pos=(0, 0)): - Type.__init__(self, '', pos) - - def conforms_to(self, other): - return True - - def bypass(self): - return True - - def __eq__(self, other): - return isinstance(other, ErrorType) - - def __ne__(self, other): - return not isinstance(other, ErrorType) - -class VoidType(Type): - def __init__(self, pos=(0, 0)): - Type.__init__(self, '', pos) - - def conforms_to(self, other): - return True - - def bypass(self): - return True - - def __eq__(self, other): - return isinstance(other, VoidType) - -class BoolType(Type): - def __init__(self, pos=(0, 0)): - self.name = 'Bool' - self.attributes = {} - self.methods = {} - self.parent = None - self.pos = pos - - def __eq__(self, other): - return other.name == self.name or isinstance(other, BoolType) - - def __ne__(self, other): - return other.name != self.name and not isinstance(other, BoolType) - - -class SelfType(Type): - def __init__(self, pos=(0, 0)): - self.name = 'Self' - self.attributes = {} - self.methods = {} - self.parent = None - self.pos = pos - - def __eq__(self, other): - return other.name == self.name or isinstance(other, SelfType) - - def __ne__(self, other): - return other.name != self.name and not isinstance(other, SelfType) - - -class IntType(Type): - def __init__(self, pos=(0, 0)): - self.name = 'Int' - self.attributes = {} - self.methods = {} - self.parent = None - self.pos = pos - - def __eq__(self, other): - return other.name == self.name or isinstance(other, IntType) - - def __ne__(self, other): - return other.name != self.name and not isinstance(other, IntType) - - -class StringType(Type): - def __init__(self, pos=(0, 0)): - self.name = 'String' - self.attributes = {} - self.methods = {} - self.parent = None - self.pos = pos - self.init_methods() - - def init_methods(self): - self.define_method('length', [], [], IntType()) - self.define_method('concat', ['s'], [self], self) - self.define_method('substr', ['i', 'l'], [IntType(), IntType()], self) - - def __eq__(self, other): - return other.name == self.name or isinstance(other, StringType) - - def __ne__(self, other): - return other.name != self.name and not isinstance(other, StringType) - - -class ObjectType(Type): - def __init__(self, pos=(0, 0)): - self.name = 'Object' - self.attributes = {} - self.methods = {} - self.parent = None - self.pos = pos - self.init_methods() - - def init_methods(self): - self.define_method('abort', [], [], self) - self.define_method('type_name', [], [], StringType()) - self.define_method('copy', [], [], SelfType()) - - def __eq__(self, other): - return other.name == self.name or isinstance(other, ObjectType) - - def __ne__(self, other): - return other.name != self.name and not isinstance(other, ObjectType) - -class AutoType(Type): - def __init__(self): - Type.__init__(self, 'AUTO_TYPE') - - def __eq__(self, other): - return other.name == self.name or isinstance(other, AutoType) - - def __ne__(self, other): - return other.name != self.name and not isinstance(other, AutoType) - - -class IOType(Type): - def __init__(self, pos=(0, 0)): - self.name = 'IO' - self.attributes = {} - self.methods = {} - self.parent = ObjectType(pos) - self.pos = pos - self.init_methods() - - def init_methods(self): - self.define_method('out_string', ['x'], [StringType()], SelfType()) - self.define_method('out_int', ['x'], [IntType()], SelfType()) - self.define_method('in_string', [], [], StringType()) - self.define_method('in_int', [], [], IntType()) - - def __eq__(self, other): - return other.name == self.name or isinstance(other, IOType) - - def __ne__(self, other): - return other.name != self.name and not isinstance(other, IOType) +from utils.errors import SemanticError, AttributesError, TypesError, NamesError +from collections import OrderedDict + +class Attribute: + def __init__(self, name, typex, index): + self.name = name + self.type = typex + self.index = index # lugar que ocupa en el scope + self.expr = None + + def __str__(self): + return f'[attrib] {self.name} : {self.type.name};' + + def __repr__(self): + return str(self) + +class Method: + def __init__(self, name, param_names, params_types, return_type): + self.name = name + self.param_names = param_names + self.param_types = params_types + self.return_type = return_type + + def __str__(self): + params = ', '.join(f'{n}:{t.name}' for n,t in zip(self.param_names, self.param_types)) + return f'[method] {self.name}({params}): {self.return_type.name};' + + def __eq__(self, other): + return other.name == self.name and \ + other.return_type == self.return_type and \ + other.param_types == self.param_types + +class MethodError(Method): + def __init__(self, name, param_names, param_types, return_types): + super().__init__(name, param_names, param_types, return_types) + + def __str__(self): + return f'[method] {self.name} ERROR' + +class Type: + def __init__(self, name:str, pos): + if name == 'ObjectType': + return ObjectType(pos) + self.name = name + self.attributes = {} + self.methods = {} + self.parent = ObjectType(pos) + self.pos = pos + + def set_parent(self, parent): + if type(self.parent) != ObjectType and self.parent is not None: + error_text = TypesError.PARENT_ALREADY_DEFINED % self.name + raise TypesError(error_text, *self.pos) + self.parent = parent + + def get_attribute(self, name:str, pos) -> Attribute: + try: + return self.attributes[name] #next(attr for attr in self.attributes if attr.name == name) + except KeyError: + if self.parent is None: + error_text = AttributesError.ATTRIBUTE_NOT_DEFINED % (name, self.name) + raise AttributesError(error_text, *pos) + try: + return self.parent.get_attribute(name, pos) + except AttributesError: + error_text = AttributesError.ATTRIBUTE_NOT_DEFINED % (name, self.name) + raise AttributesError(error_text, *pos) + + def define_attribute(self, name:str, typex, pos): + try: + self.get_attribute(name, pos) + except AttributesError: + self.attributes[name] = attribute = Attribute(name, typex, len(self.attributes)) + # self.attributes.append(attribute) + return attribute + else: + error_text = AttributesError.ATTRIBUTE_ALREADY_DEFINED %(name, self.name) + raise AttributesError(error_text, *pos) + + def get_method(self, name:str, pos) -> Method: + try: + return self.methods[name] + except KeyError: + error_text = AttributesError.METHOD_NOT_DEFINED %(name, self.name) + if self.parent is None: + raise AttributesError(error_text, *pos) + try: + return self.parent.get_method(name, pos) + except AttributesError: + raise AttributesError(error_text, *pos) + + def define_method(self, name:str, param_names:list, param_types:list, return_type): + if name in self.methods: + error_text = AttributesError.METHOD_ALREADY_DEFINED % (name, self.name) + raise AttributesError(error_text, *pos) + + method = self.methods[name] = Method(name, param_names, param_types, return_type) + return method + + def change_type(self, method, nparm, newtype): + idx = method.param_names.index(nparm) + method.param_types[idx] = newtype + + def all_attributes(self, clean=True): + plain = OrderedDict() if self.parent is None else self.parent.all_attributes(False) + for attr in self.attributes.values(): + plain[attr.name] = (attr, self) + return plain.values() if clean else plain + + def all_methods(self, clean=True): + plain = OrderedDict() if self.parent is None else self.parent.all_methods(False) + for method in self.methods.values(): + plain[method.name] = (method, self) + return plain.values() if clean else plain + + + def conforms_to(self, other): + return other.bypass() or self == other or self.parent is not None and self.parent.conforms_to(other) + + def bypass(self): + return False + + def __str__(self): + output = f'type {self.name}' + parent = '' if self.parent is None else f' : {self.parent.name}' + output += parent + output += ' {' + output += '\n\t' if self.attributes or self.methods else '' + output += '\n\t'.join(str(x) for x in self.attributes.values()) + output += '\n\t' if self.attributes else '' + output += '\n\t'.join(str(x) for x in self.methods.values()) + output += '\n' if self.methods else '' + output += '}\n' + return output + + def __repr__(self): + return str(self) + +class ErrorType(Type): + def __init__(self, pos=(0, 0)): + Type.__init__(self, '', pos) + + def conforms_to(self, other): + return True + + def bypass(self): + return True + + def __eq__(self, other): + return isinstance(other, ErrorType) + + def __ne__(self, other): + return not isinstance(other, ErrorType) + +class VoidType(Type): + def __init__(self, pos=(0, 0)): + Type.__init__(self, '', pos) + + def conforms_to(self, other): + return True + + def bypass(self): + return True + + def __eq__(self, other): + return isinstance(other, VoidType) + +class BoolType(Type): + def __init__(self, pos=(0, 0)): + self.name = 'Bool' + self.attributes = {} + self.methods = {} + self.parent = None + self.pos = pos + + def __eq__(self, other): + return other.name == self.name or isinstance(other, BoolType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, BoolType) + + +class SelfType(Type): + def __init__(self, pos=(0, 0)): + self.name = 'Self' + self.attributes = {} + self.methods = {} + self.parent = None + self.pos = pos + + def __eq__(self, other): + return other.name == self.name or isinstance(other, SelfType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, SelfType) + + +class IntType(Type): + def __init__(self, pos=(0, 0)): + self.name = 'Int' + self.attributes = {} + self.methods = {} + self.parent = None + self.pos = pos + + def __eq__(self, other): + return other.name == self.name or isinstance(other, IntType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, IntType) + + +class StringType(Type): + def __init__(self, pos=(0, 0)): + self.name = 'String' + self.attributes = {} + self.methods = {} + self.parent = None + self.pos = pos + self.init_methods() + + def init_methods(self): + self.define_method('length', [], [], IntType()) + self.define_method('concat', ['s'], [self], self) + self.define_method('substr', ['i', 'l'], [IntType(), IntType()], self) + + def __eq__(self, other): + return other.name == self.name or isinstance(other, StringType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, StringType) + + +class ObjectType(Type): + def __init__(self, pos=(0, 0)): + self.name = 'Object' + self.attributes = {} + self.methods = {} + self.parent = None + self.pos = pos + self.init_methods() + + def init_methods(self): + self.define_method('abort', [], [], self) + self.define_method('type_name', [], [], StringType()) + self.define_method('copy', [], [], SelfType()) + + def __eq__(self, other): + return other.name == self.name or isinstance(other, ObjectType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, ObjectType) + +class AutoType(Type): + def __init__(self): + Type.__init__(self, 'AUTO_TYPE') + + def __eq__(self, other): + return other.name == self.name or isinstance(other, AutoType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, AutoType) + + +class IOType(Type): + def __init__(self, pos=(0, 0)): + self.name = 'IO' + self.attributes = {} + self.methods = {} + self.parent = ObjectType(pos) + self.pos = pos + self.init_methods() + + def init_methods(self): + self.define_method('out_string', ['x'], [StringType()], SelfType()) + self.define_method('out_int', ['x'], [IntType()], SelfType()) + self.define_method('in_string', [], [], StringType()) + self.define_method('in_int', [], [], IntType()) + + def __eq__(self, other): + return other.name == self.name or isinstance(other, IOType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, IOType) diff --git a/src/semantic/visitors/__init__.py b/src/semantic/visitors/__init__.py index 488ad081..0aed9818 100644 --- a/src/semantic/visitors/__init__.py +++ b/src/semantic/visitors/__init__.py @@ -1,5 +1,5 @@ -# from semantic.visitors.type_collector import TypeCollector -# from semantic.visitors.type_builder import TypeBuilder -# from semantic.visitors.var_collector import VarCollector -# from semantic.visitors.type_checker import TypeChecker -# from semantic.visitors.selftype_visitor import SelfTypeVisitor +# from semantic.visitors.type_collector import TypeCollector +# from semantic.visitors.type_builder import TypeBuilder +# from semantic.visitors.var_collector import VarCollector +# from semantic.visitors.type_checker import TypeChecker +# from semantic.visitors.selftype_visitor import SelfTypeVisitor diff --git a/src/semantic/visitors/format_visitor.py b/src/semantic/visitors/format_visitor.py index 4de0a36f..ae260a7d 100644 --- a/src/semantic/visitors/format_visitor.py +++ b/src/semantic/visitors/format_visitor.py @@ -1,128 +1,128 @@ -from utils import visitor -from utils.ast import * - -class FormatVisitor(object): - @visitor.on('node') - def visit(self, node, tabs): - ans = '\t' * tabs + f'\\__{node.__class__.__name__}' - return ans - - @visitor.when(ProgramNode) - def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__ProgramNode [ ... ]' - statements = '\n'.join(self.visit(child, tabs + 1) for child in node.declarations) - return f'{ans}\n{statements}' - - @visitor.when(ClassDeclarationNode) - def visit(self, node, tabs=0): - parent = '' if node.parent is None else f": {node.parent}" - ans = '\t' * tabs + f'\\__ClassDeclarationNode: class {node.id} {parent} {{ ... }}' - features = '\n'.join(self.visit(child, tabs + 1) for child in node.features) - return f'{ans}\n{features}' - - @visitor.when(AttrDeclarationNode) - def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__AttrDeclarationNode: {node.id} : {node.type}' - return f'{ans}' - - @visitor.when(VarDeclarationNode) - def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__VarDeclarationNode: {node.id} : {node.type} = ' - expr = self.visit(node.expr, tabs + 1) - return f'{ans}\n{expr}' - - @visitor.when(AssignNode) - def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__AssignNode: {node.id} <- ' - expr = self.visit(node.expr, tabs + 1) - return f'{ans}\n{expr}' - - @visitor.when(FuncDeclarationNode) - def visit(self, node, tabs=0): - params = ', '.join(':'.join(param) for param in node.params) - ans = '\t' * tabs + f'\\__FuncDeclarationNode: {node.id}({params}) : {node.type} -> ' - body = f'{self.visit(node.body, tabs + 1)}' - # body = f'\n'#{self.visit(node.body, tabs + 1)}' #.join(self.visit(child, tabs + 1) for child in node.body) - return f'{ans}\n{body}' - - @visitor.when(BinaryNode) - def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__ {node.__class__.__name__} ' - left = self.visit(node.left, tabs + 1) - right = self.visit(node.right, tabs + 1) - return f'{ans}\n{left}\n{right}' - - @visitor.when(UnaryNode) - def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__{node.__class__.__name__} ' - expr = self.visit(node.expr, tabs + 1) - return f'{ans}\n{expr}' - - @visitor.when(WhileNode) - def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__{node.__class__.__name__}: while loop pool' - cond = self.visit(node.cond, tabs + 1) - expr = self.visit(node.expr, tabs + 1) - return f'{ans}\n{cond}\n{expr}' - - @visitor.when(ConditionalNode) - def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__ {node.__class__.__name__}: if then else fi' - cond = self.visit(node.cond, tabs + 1) - stm = self.visit(node.stm, tabs + 1) - else_stm = self.visit(node.else_stm, tabs + 1) - return f'{ans}\n{cond}\n{stm}\n{else_stm}' - - @visitor.when(CaseNode) - def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__ {node.__class__.__name__}: case of esac' - expr = self.visit(node.expr, tabs + 1) - case_list = '\n'.join(self.visit(child, tabs + 1) for child in node.case_list) - return f'{ans}\n{expr}\n{case_list}' - - @visitor.when(OptionNode) - def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__ {node.__class__.__name__}: {node.id} : {node.typex} -> ' - expr = self.visit(node.expr, tabs + 1) - return f'{ans}\n{expr}' - - @visitor.when(BlockNode) - def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__ {node.__class__.__name__} ' + '{ }' - expr = '\n'.join(self.visit(child, tabs + 1) for child in node.expr_list) - return f'{ans}\n{expr}' - - @visitor.when(AtomicNode) - def visit(self, node, tabs=0): - return '\t' * tabs + f'\\__ {node.__class__.__name__}: {node.lex}' - - @visitor.when(BaseCallNode) - def visit(self, node, tabs=0): - obj = self.visit(node.obj, tabs + 1) - ans = '\t' * tabs + f'\\__BaseCallNode: @{node.type}.{node.id}(, ..., )' - args = '\n'.join(self.visit(arg, tabs + 1) for arg in node.args) - return f'{ans}\n{obj}\n{args}' - - @visitor.when(CallNode) - def visit(self, node, tabs=0): - obj = self.visit(node.obj, tabs + 1) - ans = '\t' * tabs + f'\\__CallNode: .{node.id}(, ..., )' - args = '\n'.join(self.visit(arg, tabs + 1) for arg in node.args) - return f'{ans}\n{obj}\n{args}' - - @visitor.when(StaticCallNode) - def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__StaticCallNode: {node.id}(, ..., )' - args = '\n'.join(self.visit(arg, tabs + 1) for arg in node.args) - return f'{ans}\n{args}' - - @visitor.when(InstantiateNode) - def visit(self, node, tabs=0): - return '\t' * tabs + f'\\__ InstantiateNode: new {node.lex}()' - - @visitor.when(LetNode) - def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__ {node.__class__.__name__} let in ' - init_list = '\n'.join(self.visit(arg, tabs + 1) for arg in node.init_list) - expr = self.visit(node.expr, tabs + 1) - return f'{ans}\n{init_list}\n{expr}' +from utils import visitor +from utils.ast import * + +class FormatVisitor(object): + @visitor.on('node') + def visit(self, node, tabs): + ans = '\t' * tabs + f'\\__{node.__class__.__name__}' + return ans + + @visitor.when(ProgramNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ProgramNode [ ... ]' + statements = '\n'.join(self.visit(child, tabs + 1) for child in node.declarations) + return f'{ans}\n{statements}' + + @visitor.when(ClassDeclarationNode) + def visit(self, node, tabs=0): + parent = '' if node.parent is None else f": {node.parent}" + ans = '\t' * tabs + f'\\__ClassDeclarationNode: class {node.id} {parent} {{ ... }}' + features = '\n'.join(self.visit(child, tabs + 1) for child in node.features) + return f'{ans}\n{features}' + + @visitor.when(AttrDeclarationNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__AttrDeclarationNode: {node.id} : {node.type}' + return f'{ans}' + + @visitor.when(VarDeclarationNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__VarDeclarationNode: {node.id} : {node.type} = ' + expr = self.visit(node.expr, tabs + 1) + return f'{ans}\n{expr}' + + @visitor.when(AssignNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__AssignNode: {node.id} <- ' + expr = self.visit(node.expr, tabs + 1) + return f'{ans}\n{expr}' + + @visitor.when(FuncDeclarationNode) + def visit(self, node, tabs=0): + params = ', '.join(':'.join(param) for param in node.params) + ans = '\t' * tabs + f'\\__FuncDeclarationNode: {node.id}({params}) : {node.type} -> ' + body = f'{self.visit(node.body, tabs + 1)}' + # body = f'\n'#{self.visit(node.body, tabs + 1)}' #.join(self.visit(child, tabs + 1) for child in node.body) + return f'{ans}\n{body}' + + @visitor.when(BinaryNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ {node.__class__.__name__} ' + left = self.visit(node.left, tabs + 1) + right = self.visit(node.right, tabs + 1) + return f'{ans}\n{left}\n{right}' + + @visitor.when(UnaryNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__{node.__class__.__name__} ' + expr = self.visit(node.expr, tabs + 1) + return f'{ans}\n{expr}' + + @visitor.when(WhileNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__{node.__class__.__name__}: while loop pool' + cond = self.visit(node.cond, tabs + 1) + expr = self.visit(node.expr, tabs + 1) + return f'{ans}\n{cond}\n{expr}' + + @visitor.when(ConditionalNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ {node.__class__.__name__}: if then else fi' + cond = self.visit(node.cond, tabs + 1) + stm = self.visit(node.stm, tabs + 1) + else_stm = self.visit(node.else_stm, tabs + 1) + return f'{ans}\n{cond}\n{stm}\n{else_stm}' + + @visitor.when(CaseNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ {node.__class__.__name__}: case of esac' + expr = self.visit(node.expr, tabs + 1) + case_list = '\n'.join(self.visit(child, tabs + 1) for child in node.case_list) + return f'{ans}\n{expr}\n{case_list}' + + @visitor.when(OptionNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ {node.__class__.__name__}: {node.id} : {node.typex} -> ' + expr = self.visit(node.expr, tabs + 1) + return f'{ans}\n{expr}' + + @visitor.when(BlockNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ {node.__class__.__name__} ' + '{ }' + expr = '\n'.join(self.visit(child, tabs + 1) for child in node.expr_list) + return f'{ans}\n{expr}' + + @visitor.when(AtomicNode) + def visit(self, node, tabs=0): + return '\t' * tabs + f'\\__ {node.__class__.__name__}: {node.lex}' + + @visitor.when(BaseCallNode) + def visit(self, node, tabs=0): + obj = self.visit(node.obj, tabs + 1) + ans = '\t' * tabs + f'\\__BaseCallNode: @{node.type}.{node.id}(, ..., )' + args = '\n'.join(self.visit(arg, tabs + 1) for arg in node.args) + return f'{ans}\n{obj}\n{args}' + + @visitor.when(CallNode) + def visit(self, node, tabs=0): + obj = self.visit(node.obj, tabs + 1) + ans = '\t' * tabs + f'\\__CallNode: .{node.id}(, ..., )' + args = '\n'.join(self.visit(arg, tabs + 1) for arg in node.args) + return f'{ans}\n{obj}\n{args}' + + @visitor.when(StaticCallNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__StaticCallNode: {node.id}(, ..., )' + args = '\n'.join(self.visit(arg, tabs + 1) for arg in node.args) + return f'{ans}\n{args}' + + @visitor.when(InstantiateNode) + def visit(self, node, tabs=0): + return '\t' * tabs + f'\\__ InstantiateNode: new {node.lex}()' + + @visitor.when(LetNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ {node.__class__.__name__} let in ' + init_list = '\n'.join(self.visit(arg, tabs + 1) for arg in node.init_list) + expr = self.visit(node.expr, tabs + 1) + return f'{ans}\n{init_list}\n{expr}' diff --git a/src/semantic/visitors/selftype_visitor.py b/src/semantic/visitors/selftype_visitor.py index 03508810..7d3ef8ad 100644 --- a/src/semantic/visitors/selftype_visitor.py +++ b/src/semantic/visitors/selftype_visitor.py @@ -1,108 +1,108 @@ -from semantic.tools import * -from semantic.types import Type, Method -from utils import visitor -from utils.ast import * - -class SelfTypeVisitor(object): - def __init__(self, context:Context, errors=[]): - self.context:Context = context - self.errors = errors - self.current_type:Type = None - self.current_method:Method = None - - @visitor.on('node') - def visit(self, node, scope): - pass - - @visitor.when(ProgramNode) - def visit(self, node:ProgramNode, scope:Scope): - for declaration, child_scope in zip(node.declarations, scope.children): - self.visit(declaration, child_scope) - - - @visitor.when(ClassDeclarationNode) - def visit(self, node:ClassDeclarationNode, scope:Scope): - self.current_type = self.context.get_type(node.id, node.pos) - - fd = [feat for feat in node.features if isinstance(feat, FuncDeclarationNode)] - - for feat in node.features: - if isinstance(feat, AttrDeclarationNode): - self.visit(feat, scope) - - for feat, child_scope in zip(fd, scope.children): - self.visit(feat, child_scope) - - - @visitor.when(AttrDeclarationNode) - def visit(self, node:AttrDeclarationNode, scope:Scope): - vinfo = scope.find_variable(node.id) - if node.type == 'SELF_TYPE': - vinfo.type = self.current_type - - - @visitor.when(FuncDeclarationNode) - def visit(self, node:FuncDeclarationNode, scope:Scope): - self.current_method = self.current_type.get_method(node.id, node.pos) - - for pname, ptype in node.params: - if ptype.value == 'SELF_TYPE': - varinfo = scope.find_variable(pname) - varinfo.type = self.current_type - self.current_type.change_type(self.current_method, pname, self.current_type) - - - if node.type == 'SELF_TYPE': - self.current_method.return_type = self.current_type - - self.visit(node.body, scope) - - - @visitor.when(VarDeclarationNode) - def visit(self, node:VarDeclarationNode, scope:Scope): - varinfo = scope.find_variable(node.id) - - if node.type == 'SELF_TYPE': - varinfo.type = self.current_type - - @visitor.when(AssignNode) - def visit(self, node:AssignNode, scope:Scope): - varinfo = scope.find_variable(node.id) - - if varinfo.type.name == 'SELF_TYPE': - varinfo.type = self.current_type - - - @visitor.when(BlockNode) - def visit(self, node:BlockNode, scope:Scope): - for exp in node.expr_list: - self.visit(exp, scope) - - - @visitor.when(LetNode) - def visit(self, node:LetNode, scope:Scope): - child_scope = scope.expr_dict[node] - for init in node.init_list: - self.visit(init, child_scope) - self.visit(node.expr, child_scope) - - @visitor.when(CaseNode) - def visit(self, node:CaseNode, scope:Scope): - self.visit(node.expr, scope) - - new_scope = scope.expr_dict[node] - for case, c_scope in zip(node.case_list, new_scope.children): - self.visit(case, c_scope) - - - @visitor.when(OptionNode) - def visit(self, node:OptionNode, scope:Scope): - var_info = scope.find_variable(node.id) - self.visit(node.expr) - - if var_info.type.name == 'SELF_TYPE': - var_info.type = self.current_type - - @visitor.when(InstantiateNode) - def visit(self, node:InstantiateNode, scope:Scope): +from semantic.tools import * +from semantic.types import Type, Method +from utils import visitor +from utils.ast import * + +class SelfTypeVisitor(object): + def __init__(self, context:Context, errors=[]): + self.context:Context = context + self.errors = errors + self.current_type:Type = None + self.current_method:Method = None + + @visitor.on('node') + def visit(self, node, scope): + pass + + @visitor.when(ProgramNode) + def visit(self, node:ProgramNode, scope:Scope): + for declaration, child_scope in zip(node.declarations, scope.children): + self.visit(declaration, child_scope) + + + @visitor.when(ClassDeclarationNode) + def visit(self, node:ClassDeclarationNode, scope:Scope): + self.current_type = self.context.get_type(node.id, node.pos) + + fd = [feat for feat in node.features if isinstance(feat, FuncDeclarationNode)] + + for feat in node.features: + if isinstance(feat, AttrDeclarationNode): + self.visit(feat, scope) + + for feat, child_scope in zip(fd, scope.children): + self.visit(feat, child_scope) + + + @visitor.when(AttrDeclarationNode) + def visit(self, node:AttrDeclarationNode, scope:Scope): + vinfo = scope.find_variable(node.id) + if node.type == 'SELF_TYPE': + vinfo.type = self.current_type + + + @visitor.when(FuncDeclarationNode) + def visit(self, node:FuncDeclarationNode, scope:Scope): + self.current_method = self.current_type.get_method(node.id, node.pos) + + for pname, ptype in node.params: + if ptype.value == 'SELF_TYPE': + varinfo = scope.find_variable(pname) + varinfo.type = self.current_type + self.current_type.change_type(self.current_method, pname, self.current_type) + + + if node.type == 'SELF_TYPE': + self.current_method.return_type = self.current_type + + self.visit(node.body, scope) + + + @visitor.when(VarDeclarationNode) + def visit(self, node:VarDeclarationNode, scope:Scope): + varinfo = scope.find_variable(node.id) + + if node.type == 'SELF_TYPE': + varinfo.type = self.current_type + + @visitor.when(AssignNode) + def visit(self, node:AssignNode, scope:Scope): + varinfo = scope.find_variable(node.id) + + if varinfo.type.name == 'SELF_TYPE': + varinfo.type = self.current_type + + + @visitor.when(BlockNode) + def visit(self, node:BlockNode, scope:Scope): + for exp in node.expr_list: + self.visit(exp, scope) + + + @visitor.when(LetNode) + def visit(self, node:LetNode, scope:Scope): + child_scope = scope.expr_dict[node] + for init in node.init_list: + self.visit(init, child_scope) + self.visit(node.expr, child_scope) + + @visitor.when(CaseNode) + def visit(self, node:CaseNode, scope:Scope): + self.visit(node.expr, scope) + + new_scope = scope.expr_dict[node] + for case, c_scope in zip(node.case_list, new_scope.children): + self.visit(case, c_scope) + + + @visitor.when(OptionNode) + def visit(self, node:OptionNode, scope:Scope): + var_info = scope.find_variable(node.id) + self.visit(node.expr) + + if var_info.type.name == 'SELF_TYPE': + var_info.type = self.current_type + + @visitor.when(InstantiateNode) + def visit(self, node:InstantiateNode, scope:Scope): node.lex = self.current_type.name if node.lex == 'SELF_TYPE' else node.lex \ No newline at end of file diff --git a/src/semantic/visitors/type_builder.py b/src/semantic/visitors/type_builder.py index 50d41be7..cec32e06 100644 --- a/src/semantic/visitors/type_builder.py +++ b/src/semantic/visitors/type_builder.py @@ -1,83 +1,83 @@ -from utils.errors import SemanticError, AttributesError, TypesError, NamesError -from semantic.types import Type, VoidType, ErrorType, Attribute, Method -from semantic.tools import Context -from utils import visitor -from utils.ast import * - -class TypeBuilder: - def __init__(self, context:Context, errors=[]): - self.context:Context = context - self.current_type:Type = None - self.errors:list = errors - - @visitor.on('node') - def visit(self, node): - pass - - @visitor.when(ProgramNode) - def visit(self, node:ProgramNode): - for dec in node.declarations: - self.visit(dec) - - @visitor.when(ClassDeclarationNode) - def visit(self, node:ClassDeclarationNode): - try: - self.current_type = self.context.get_type(node.id, node.pos) - except SemanticError as e: - self.current_type = ErrorType() - self.errors.append(e) - - if node.parent is not None: - try: - parent = self.context.get_type(node.parent, node.parent_pos) - current = parent - while current is not None: - if current.name == self.current_type.name: - error_text = TypesError.CIRCULAR_DEPENDENCY %(parent.name, self.current_type.name) - raise TypesError(error_text, *node.pos) - current = current.parent - except SemanticError as e: - parent = ErrorType() - self.errors.append(e) - self.current_type.set_parent(parent) - - - for feature in node.features: - self.visit(feature) - - - @visitor.when(FuncDeclarationNode) - def visit(self, node:FuncDeclarationNode): - args_names = [] - args_types = [] - for name, type_ in node.params: - try: - args_names.append(name) - args_types.append(self.context.get_type(type_.value, type_.pos)) - except SemanticError as e: - args_types.append(ErrorType(type_.pos)) - self.errors.append(e) - - try: - return_type = self.context.get_type(node.type, node.type_pos) - except SemanticError as e: - return_type = ErrorType(node.type_pos) - self.errors.append(e) - - try: - self.current_type.define_method(node.id, args_names, args_types, return_type) - except SemanticError as e: - self.errors.append(e) - - @visitor.when(AttrDeclarationNode) - def visit(self, node:AttrDeclarationNode): - try: - attr_type = self.context.get_type(node.type, node.pos) - except SemanticError as e: - attr_type = ErrorType(node.type_pos) - self.errors.append(e) - - try: - self.current_type.define_attribute(node.id, attr_type, node.pos) - except SemanticError as e: +from utils.errors import SemanticError, AttributesError, TypesError, NamesError +from semantic.types import Type, VoidType, ErrorType, Attribute, Method +from semantic.tools import Context +from utils import visitor +from utils.ast import * + +class TypeBuilder: + def __init__(self, context:Context, errors=[]): + self.context:Context = context + self.current_type:Type = None + self.errors:list = errors + + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node:ProgramNode): + for dec in node.declarations: + self.visit(dec) + + @visitor.when(ClassDeclarationNode) + def visit(self, node:ClassDeclarationNode): + try: + self.current_type = self.context.get_type(node.id, node.pos) + except SemanticError as e: + self.current_type = ErrorType() + self.errors.append(e) + + if node.parent is not None: + try: + parent = self.context.get_type(node.parent, node.parent_pos) + current = parent + while current is not None: + if current.name == self.current_type.name: + error_text = TypesError.CIRCULAR_DEPENDENCY %(parent.name, self.current_type.name) + raise TypesError(error_text, *node.pos) + current = current.parent + except SemanticError as e: + parent = ErrorType() + self.errors.append(e) + self.current_type.set_parent(parent) + + + for feature in node.features: + self.visit(feature) + + + @visitor.when(FuncDeclarationNode) + def visit(self, node:FuncDeclarationNode): + args_names = [] + args_types = [] + for name, type_ in node.params: + try: + args_names.append(name) + args_types.append(self.context.get_type(type_.value, type_.pos)) + except SemanticError as e: + args_types.append(ErrorType(type_.pos)) + self.errors.append(e) + + try: + return_type = self.context.get_type(node.type, node.type_pos) + except SemanticError as e: + return_type = ErrorType(node.type_pos) + self.errors.append(e) + + try: + self.current_type.define_method(node.id, args_names, args_types, return_type) + except SemanticError as e: + self.errors.append(e) + + @visitor.when(AttrDeclarationNode) + def visit(self, node:AttrDeclarationNode): + try: + attr_type = self.context.get_type(node.type, node.pos) + except SemanticError as e: + attr_type = ErrorType(node.type_pos) + self.errors.append(e) + + try: + self.current_type.define_attribute(node.id, attr_type, node.pos) + except SemanticError as e: self.errors.append(e) \ No newline at end of file diff --git a/src/semantic/visitors/type_checker.py b/src/semantic/visitors/type_checker.py index 9ea11fbe..7d09ac99 100644 --- a/src/semantic/visitors/type_checker.py +++ b/src/semantic/visitors/type_checker.py @@ -1,342 +1,342 @@ -from utils import visitor -from semantic.tools import * -from semantic.types import * -from utils.ast import * -from utils.errors import SemanticError, AttributesError, TypesError, NamesError -# from utils.utils import get_type, get_common_basetype -from utils import get_type - - -class TypeChecker: - def __init__(self, context:Context, errors=[]): - self.context:Context = context - self.current_type:Type = None - self.current_method:Method = None - self.errors = errors - self.current_index = None # Lleva el índice del scope en el que se está - - @visitor.on('node') - def visit(self, node, scope): - pass - - @visitor.when(ProgramNode) - def visit(self, node:ProgramNode, scope:Scope): - for declaration, new_scope in zip(node.declarations, scope.children): - self.visit(declaration, new_scope) - - def _get_type(self, ntype:Type, pos): - try: - return self.context.get_type(ntype, pos) - except SemanticError as e: - self.errors.append(e) - return ErrorType() - - def _get_method(self, typex:Type, name:str, pos) -> Method: - try: - return typex.get_method(name, pos) - except SemanticError as e: - if type(typex) != ErrorType and type(typex) != AutoType: - self.errors.append(e) - return MethodError(name, [], [], ErrorType()) - - - @visitor.when(ClassDeclarationNode) - def visit(self, node:ClassDeclarationNode, scope:Scope): - self.current_type = self.context.get_type(node.id, node.pos) - - fd = [feat for feat in node.features if isinstance(feat, FuncDeclarationNode)] - - for feat in node.features: - if isinstance(feat, AttrDeclarationNode): - self.visit(feat, scope) - - for feat, child_scope in zip(fd, scope.children): - self.visit(feat, child_scope) - - - @visitor.when(AttrDeclarationNode) - def visit(self, node:AttrDeclarationNode, scope:Scope): - attr = self.current_type.get_attribute(node.id, node.pos) - # varinfo = scope.find_variable(node.id) - vartype = get_type(attr.type, self.current_type) - - self.current_index = attr.index - typex = self.visit(node.expr, scope) - self.current_index = None - - if not typex.conforms_to(vartype): - error_text = TypesError.INCOMPATIBLE_TYPES %(typex.name, vartype.name) - self.errors.append(TypesError(error_text, *node.pos)) - return ErrorType() - return typex - - - @visitor.when(FuncDeclarationNode) - def visit(self, node:FuncDeclarationNode, scope:Scope): - parent = self.current_type.parent - ptypes = [param[1] for param in node.params] - - self.current_method = method = self.current_type.get_method(node.id, node.pos) - if parent is not None: - try: - old_meth = parent.get_method(node.id, node.pos) - error_text = AttributesError.WRONG_SIGNATURE % (node.id, parent.name) - if old_meth.return_type.name != method.return_type.name: - self.errors.append(AttributesError(error_text, *node.pos)) - elif any(type1.name != type2.name for name, type1, type2 in zip(ptypes, method.param_types, old_meth.param_types)): - self.errors.append(AttributesError(error_text, *node.pos)) - except SemanticError: - pass - - result = self.visit(node.body, scope) - - return_type = get_type(method.return_type, self.current_type) - - if not result.conforms_to(return_type): - error_text = TypesError.INCOMPATIBLE_TYPES %(return_type.name, result.name) - self.errors.append(TypesError(error_text, *node.type_pos)) - - - @visitor.when(VarDeclarationNode) - def visit(self, node:VarDeclarationNode, scope:Scope): - - var_info = self.find_variable(scope, node.id) - vtype = get_type(var_info.type, self.current_type) - - if node.expr != None: - typex = self.visit(node.expr, scope) - if not typex.conforms_to(vtype): - error_text = TypesError.INCOMPATIBLE_TYPES %(vtype.name, typex.name) - self.errors.append(TypesError(error_text, *node.type_pos)) - return typex - return vtype - - - @visitor.when(AssignNode) - def visit(self, node:AssignNode, scope:Scope): - vinfo = self.find_variable(scope, node.id) - vtype = get_type(vinfo.type, self.current_type) - - typex = self.visit(node.expr, scope) - - if not typex.conforms_to(vtype): - error_text = TypesError.INCOMPATIBLE_TYPES %(vtype.name, typex.name) - self.errors.append(TypesError(error_text, *node.pos)) - return typex - - - def _check_args(self, meth:Method, scope:Scope, args, pos): - arg_types = [self.visit(arg, scope) for arg in args] - - if len(arg_types) > len(meth.param_types): - error_text = SemanticError.TOO_MANY_ARGUMENTS % meth.name - self.errors.append(SemanticError(error_text, *pos)) - elif len(arg_types) < len(meth.param_types): - for arg, arg_info in zip(meth.param_names[len(arg_types):], args[len(arg_types):]): - error_text = SemanticError.MISSING_PARAMETER % (arg, meth.name) - self.errors.append(SemanticError(error_text, *arg_info.pos)) - - for atype, ptype, arg_info in zip(arg_types, meth.param_types, args): - if not atype.conforms_to(ptype): - error_text = TypesError.INCOMPATIBLE_TYPES % (ptype.name, atype.name) - self.errors.append(TypesError(error_text, *arg_info.pos)) - - - @visitor.when(CallNode) - def visit(self, node:CallNode, scope:Scope): - stype = self.visit(node.obj, scope) - - meth = self._get_method(stype, node.id, node.pos) - if not isinstance(meth, MethodError): - self._check_args(meth, scope, node.args, node.pos) - - return get_type(meth.return_type, stype) - - - @visitor.when(BaseCallNode) - def visit(self, node:BaseCallNode, scope:Scope): - obj = self.visit(node.obj, scope) - typex = self._get_type(node.type, node.type_pos) - - if not obj.conforms_to(typex): - error_text = TypesError.INCOMPATIBLE_TYPES % (typex.name, obj.name) - self.errors.append(TypesError(error_text, *node.type_pos)) - return ErrorType() - - meth = self._get_method(typex, node.id, node.pos) - if not isinstance(meth, MethodError): - self._check_args(meth, scope, node.args, node.pos) - - return get_type(meth.return_type, typex) - - - @visitor.when(StaticCallNode) - def visit(self, node:StaticCallNode, scope:Scope): - typex = self.current_type - - meth = self._get_method(typex, node.id, node.pos) - if not isinstance(meth, MethodError): - self._check_args(meth, scope, node.args, node.pos) - - return get_type(meth.return_type, typex) - - - @visitor.when(ConstantNumNode) - def visit(self, node:ConstantNumNode, scope:Scope): - return IntType(node.pos) - - - @visitor.when(ConstantBoolNode) - def visit(self, node:ConstantBoolNode, scope:Scope): - return BoolType(node.pos) - - - @visitor.when(ConstantStrNode) - def visit(self, node:ConstantStrNode, scope:Scope): - return StringType(node.pos) - - @visitor.when(ConstantVoidNode) - def visit(self, node:ConstantVoidNode, scope:Scope): - return VoidType(node.pos) - - def find_variable(self, scope, lex): - var_info = scope.find_attribute(lex, self.current_index) - if lex in self.current_type.attributes and var_info is None: - return VariableInfo(lex, VoidType()) - if var_info is None: - var_info = scope.find_local(lex) - return var_info - - @visitor.when(VariableNode) - def visit(self, node:VariableNode, scope:Scope): - typex = self.find_variable(scope, node.lex).type - return get_type(typex, self.current_type) - - - @visitor.when(InstantiateNode) - def visit(self, node:InstantiateNode, scope:Scope): - return get_type(self._get_type(node.lex, node.pos), self.current_type) - - - @visitor.when(WhileNode) - def visit(self, node:WhileNode, scope:Scope): - cond = self.visit(node.cond, scope) - - if cond.name != 'Bool': - self.errors.append(INCORRECT_TYPE % (cond.name, 'Bool')) - self.visit(node.expr, scope) - return VoidType() - - @visitor.when(IsVoidNode) - def visit(self, node:IsVoidNode, scope:Scope): - self.visit(node.expr, scope) - return BoolType() - - - @visitor.when(ConditionalNode) - def visit(self, node:ConditionalNode, scope:Scope): - cond = self.visit(node.cond, scope) - - if cond.name != 'Bool': - error_text = TypesError.INCORRECT_TYPE % (cond.name, 'Bool') - self.errors.append(TypesError(error_text, node.pos)) - - true_type = self.visit(node.stm, scope) - false_type = self.visit(node.else_stm, scope) - - if true_type.conforms_to(false_type): - return false_type - elif false_type.conforms_to(true_type): - return true_type - else: - error_text = TypesError.INCOMPATIBLE_TYPES % (false_type.name, true_type.name) - self.errors.append(TypesError(error_text, node.pos)) - return ErrorType() - - - @visitor.when(BlockNode) - def visit(self, node:BlockNode, scope:Scope): - value = None - for exp in node.expr_list: - value = self.visit(exp, scope) - return value - - - @visitor.when(LetNode) - def visit(self, node:LetNode, scope:Scope): - child_scope = scope.expr_dict[node] - for init in node.init_list: - self.visit(init, child_scope) - return self.visit(node.expr, child_scope) - - - @visitor.when(CaseNode) - def visit(self, node:CaseNode, scope:Scope): - type_expr = self.visit(node.expr, scope) - - new_scope = scope.expr_dict[node] - types = [] - var_types = [] - for case, c_scope in zip(node.case_list, new_scope.children): - t, vt = self.visit(case, c_scope) - types.append(t) - var_types.append(vt) - - for t in var_types: - if not type_expr.conforms_to(t): - error_text = TypesError.INCOMPATIBLE_TYPES % (t.name, type_expr.name) - self.errors.append(TypesError(error_text, *node.pos)) - return ErrorType() - - return get_common_basetype(types) - - - @visitor.when(OptionNode) - def visit(self, node:OptionNode, scope:Scope): - var_info = self.find_variable(scope, node.id) - typex = self.visit(node.expr, scope) - return typex, var_info.type - - - @visitor.when(BinaryArithNode) - def visit(self, node:BinaryArithNode, scope:Scope): - ltype = self.visit(node.left, scope) - rtype = self.visit(node.right, scope) - if ltype != rtype != IntType(): - error_text = TypesError.BOPERATION_NOT_DEFINED %('Arithmetic', ltype.name, rtype.name) - self.errors.append(TypesError(error_text, *node.pos)) - return ErrorType() - return IntType() - - - @visitor.when(BinaryLogicalNode) - def visit(self, node:BinaryLogicalNode, scope:Scope): - ltype = self.visit(node.left, scope) - rtype = self.visit(node.right, scope) - if ltype != rtype != IntType(): - error_text = TypesError.BOPERATION_NOT_DEFINED %('Logical', ltype.name, rtype.name) - self.errors.append(TypesError(error_text, *node.pos)) - return ErrorType() - - return BoolType() - - - @visitor.when(UnaryLogicalNode) - def visit(self, node:UnaryLogicalNode, scope:Scope): - ltype = self.visit(node.expr, scope) - if ltype != BoolType(): - error_text = TypesError.UOPERATION_NOT_DEFINED %('Logical', ltype.name) - self.errors.append(TypesError(error_text, *node.pos)) - return ErrorType() - - return BoolType() - - - @visitor.when(UnaryArithNode) - def visit(self, node:UnaryArithNode, scope:Scope): - ltype = self.visit(node.expr, scope) - if ltype != IntType(): - error_text = TypesError.UOPERATION_NOT_DEFINED %('Arithmetic', ltype.name) - self.errors.append(TypesError(error_text, *node.pos)) - return ErrorType() +from utils import visitor +from semantic.tools import * +from semantic.types import * +from utils.ast import * +from utils.errors import SemanticError, AttributesError, TypesError, NamesError +# from utils.utils import get_type, get_common_basetype +from utils import get_type + + +class TypeChecker: + def __init__(self, context:Context, errors=[]): + self.context:Context = context + self.current_type:Type = None + self.current_method:Method = None + self.errors = errors + self.current_index = None # Lleva el índice del scope en el que se está + + @visitor.on('node') + def visit(self, node, scope): + pass + + @visitor.when(ProgramNode) + def visit(self, node:ProgramNode, scope:Scope): + for declaration, new_scope in zip(node.declarations, scope.children): + self.visit(declaration, new_scope) + + def _get_type(self, ntype:Type, pos): + try: + return self.context.get_type(ntype, pos) + except SemanticError as e: + self.errors.append(e) + return ErrorType() + + def _get_method(self, typex:Type, name:str, pos) -> Method: + try: + return typex.get_method(name, pos) + except SemanticError as e: + if type(typex) != ErrorType and type(typex) != AutoType: + self.errors.append(e) + return MethodError(name, [], [], ErrorType()) + + + @visitor.when(ClassDeclarationNode) + def visit(self, node:ClassDeclarationNode, scope:Scope): + self.current_type = self.context.get_type(node.id, node.pos) + + fd = [feat for feat in node.features if isinstance(feat, FuncDeclarationNode)] + + for feat in node.features: + if isinstance(feat, AttrDeclarationNode): + self.visit(feat, scope) + + for feat, child_scope in zip(fd, scope.children): + self.visit(feat, child_scope) + + + @visitor.when(AttrDeclarationNode) + def visit(self, node:AttrDeclarationNode, scope:Scope): + attr = self.current_type.get_attribute(node.id, node.pos) + # varinfo = scope.find_variable(node.id) + vartype = get_type(attr.type, self.current_type) + + self.current_index = attr.index + typex = self.visit(node.expr, scope) + self.current_index = None + + if not typex.conforms_to(vartype): + error_text = TypesError.INCOMPATIBLE_TYPES %(typex.name, vartype.name) + self.errors.append(TypesError(error_text, *node.pos)) + return ErrorType() + return typex + + + @visitor.when(FuncDeclarationNode) + def visit(self, node:FuncDeclarationNode, scope:Scope): + parent = self.current_type.parent + ptypes = [param[1] for param in node.params] + + self.current_method = method = self.current_type.get_method(node.id, node.pos) + if parent is not None: + try: + old_meth = parent.get_method(node.id, node.pos) + error_text = AttributesError.WRONG_SIGNATURE % (node.id, parent.name) + if old_meth.return_type.name != method.return_type.name: + self.errors.append(AttributesError(error_text, *node.pos)) + elif any(type1.name != type2.name for name, type1, type2 in zip(ptypes, method.param_types, old_meth.param_types)): + self.errors.append(AttributesError(error_text, *node.pos)) + except SemanticError: + pass + + result = self.visit(node.body, scope) + + return_type = get_type(method.return_type, self.current_type) + + if not result.conforms_to(return_type): + error_text = TypesError.INCOMPATIBLE_TYPES %(return_type.name, result.name) + self.errors.append(TypesError(error_text, *node.type_pos)) + + + @visitor.when(VarDeclarationNode) + def visit(self, node:VarDeclarationNode, scope:Scope): + + var_info = self.find_variable(scope, node.id) + vtype = get_type(var_info.type, self.current_type) + + if node.expr != None: + typex = self.visit(node.expr, scope) + if not typex.conforms_to(vtype): + error_text = TypesError.INCOMPATIBLE_TYPES %(vtype.name, typex.name) + self.errors.append(TypesError(error_text, *node.type_pos)) + return typex + return vtype + + + @visitor.when(AssignNode) + def visit(self, node:AssignNode, scope:Scope): + vinfo = self.find_variable(scope, node.id) + vtype = get_type(vinfo.type, self.current_type) + + typex = self.visit(node.expr, scope) + + if not typex.conforms_to(vtype): + error_text = TypesError.INCOMPATIBLE_TYPES %(vtype.name, typex.name) + self.errors.append(TypesError(error_text, *node.pos)) + return typex + + + def _check_args(self, meth:Method, scope:Scope, args, pos): + arg_types = [self.visit(arg, scope) for arg in args] + + if len(arg_types) > len(meth.param_types): + error_text = SemanticError.TOO_MANY_ARGUMENTS % meth.name + self.errors.append(SemanticError(error_text, *pos)) + elif len(arg_types) < len(meth.param_types): + for arg, arg_info in zip(meth.param_names[len(arg_types):], args[len(arg_types):]): + error_text = SemanticError.MISSING_PARAMETER % (arg, meth.name) + self.errors.append(SemanticError(error_text, *arg_info.pos)) + + for atype, ptype, arg_info in zip(arg_types, meth.param_types, args): + if not atype.conforms_to(ptype): + error_text = TypesError.INCOMPATIBLE_TYPES % (ptype.name, atype.name) + self.errors.append(TypesError(error_text, *arg_info.pos)) + + + @visitor.when(CallNode) + def visit(self, node:CallNode, scope:Scope): + stype = self.visit(node.obj, scope) + + meth = self._get_method(stype, node.id, node.pos) + if not isinstance(meth, MethodError): + self._check_args(meth, scope, node.args, node.pos) + + return get_type(meth.return_type, stype) + + + @visitor.when(BaseCallNode) + def visit(self, node:BaseCallNode, scope:Scope): + obj = self.visit(node.obj, scope) + typex = self._get_type(node.type, node.type_pos) + + if not obj.conforms_to(typex): + error_text = TypesError.INCOMPATIBLE_TYPES % (typex.name, obj.name) + self.errors.append(TypesError(error_text, *node.type_pos)) + return ErrorType() + + meth = self._get_method(typex, node.id, node.pos) + if not isinstance(meth, MethodError): + self._check_args(meth, scope, node.args, node.pos) + + return get_type(meth.return_type, typex) + + + @visitor.when(StaticCallNode) + def visit(self, node:StaticCallNode, scope:Scope): + typex = self.current_type + + meth = self._get_method(typex, node.id, node.pos) + if not isinstance(meth, MethodError): + self._check_args(meth, scope, node.args, node.pos) + + return get_type(meth.return_type, typex) + + + @visitor.when(ConstantNumNode) + def visit(self, node:ConstantNumNode, scope:Scope): + return IntType(node.pos) + + + @visitor.when(ConstantBoolNode) + def visit(self, node:ConstantBoolNode, scope:Scope): + return BoolType(node.pos) + + + @visitor.when(ConstantStrNode) + def visit(self, node:ConstantStrNode, scope:Scope): + return StringType(node.pos) + + @visitor.when(ConstantVoidNode) + def visit(self, node:ConstantVoidNode, scope:Scope): + return VoidType(node.pos) + + def find_variable(self, scope, lex): + var_info = scope.find_attribute(lex, self.current_index) + if lex in self.current_type.attributes and var_info is None: + return VariableInfo(lex, VoidType()) + if var_info is None: + var_info = scope.find_local(lex) + return var_info + + @visitor.when(VariableNode) + def visit(self, node:VariableNode, scope:Scope): + typex = self.find_variable(scope, node.lex).type + return get_type(typex, self.current_type) + + + @visitor.when(InstantiateNode) + def visit(self, node:InstantiateNode, scope:Scope): + return get_type(self._get_type(node.lex, node.pos), self.current_type) + + + @visitor.when(WhileNode) + def visit(self, node:WhileNode, scope:Scope): + cond = self.visit(node.cond, scope) + + if cond.name != 'Bool': + self.errors.append(INCORRECT_TYPE % (cond.name, 'Bool')) + self.visit(node.expr, scope) + return VoidType() + + @visitor.when(IsVoidNode) + def visit(self, node:IsVoidNode, scope:Scope): + self.visit(node.expr, scope) + return BoolType() + + + @visitor.when(ConditionalNode) + def visit(self, node:ConditionalNode, scope:Scope): + cond = self.visit(node.cond, scope) + + if cond.name != 'Bool': + error_text = TypesError.INCORRECT_TYPE % (cond.name, 'Bool') + self.errors.append(TypesError(error_text, node.pos)) + + true_type = self.visit(node.stm, scope) + false_type = self.visit(node.else_stm, scope) + + if true_type.conforms_to(false_type): + return false_type + elif false_type.conforms_to(true_type): + return true_type + else: + error_text = TypesError.INCOMPATIBLE_TYPES % (false_type.name, true_type.name) + self.errors.append(TypesError(error_text, node.pos)) + return ErrorType() + + + @visitor.when(BlockNode) + def visit(self, node:BlockNode, scope:Scope): + value = None + for exp in node.expr_list: + value = self.visit(exp, scope) + return value + + + @visitor.when(LetNode) + def visit(self, node:LetNode, scope:Scope): + child_scope = scope.expr_dict[node] + for init in node.init_list: + self.visit(init, child_scope) + return self.visit(node.expr, child_scope) + + + @visitor.when(CaseNode) + def visit(self, node:CaseNode, scope:Scope): + type_expr = self.visit(node.expr, scope) + + new_scope = scope.expr_dict[node] + types = [] + var_types = [] + for case, c_scope in zip(node.case_list, new_scope.children): + t, vt = self.visit(case, c_scope) + types.append(t) + var_types.append(vt) + + for t in var_types: + if not type_expr.conforms_to(t): + error_text = TypesError.INCOMPATIBLE_TYPES % (t.name, type_expr.name) + self.errors.append(TypesError(error_text, *node.pos)) + return ErrorType() + + return get_common_basetype(types) + + + @visitor.when(OptionNode) + def visit(self, node:OptionNode, scope:Scope): + var_info = self.find_variable(scope, node.id) + typex = self.visit(node.expr, scope) + return typex, var_info.type + + + @visitor.when(BinaryArithNode) + def visit(self, node:BinaryArithNode, scope:Scope): + ltype = self.visit(node.left, scope) + rtype = self.visit(node.right, scope) + if ltype != rtype != IntType(): + error_text = TypesError.BOPERATION_NOT_DEFINED %('Arithmetic', ltype.name, rtype.name) + self.errors.append(TypesError(error_text, *node.pos)) + return ErrorType() + return IntType() + + + @visitor.when(BinaryLogicalNode) + def visit(self, node:BinaryLogicalNode, scope:Scope): + ltype = self.visit(node.left, scope) + rtype = self.visit(node.right, scope) + if ltype != rtype != IntType(): + error_text = TypesError.BOPERATION_NOT_DEFINED %('Logical', ltype.name, rtype.name) + self.errors.append(TypesError(error_text, *node.pos)) + return ErrorType() + + return BoolType() + + + @visitor.when(UnaryLogicalNode) + def visit(self, node:UnaryLogicalNode, scope:Scope): + ltype = self.visit(node.expr, scope) + if ltype != BoolType(): + error_text = TypesError.UOPERATION_NOT_DEFINED %('Logical', ltype.name) + self.errors.append(TypesError(error_text, *node.pos)) + return ErrorType() + + return BoolType() + + + @visitor.when(UnaryArithNode) + def visit(self, node:UnaryArithNode, scope:Scope): + ltype = self.visit(node.expr, scope) + if ltype != IntType(): + error_text = TypesError.UOPERATION_NOT_DEFINED %('Arithmetic', ltype.name) + self.errors.append(TypesError(error_text, *node.pos)) + return ErrorType() return IntType() \ No newline at end of file diff --git a/src/semantic/visitors/type_collector.py b/src/semantic/visitors/type_collector.py index d32b7687..4fe33e0e 100644 --- a/src/semantic/visitors/type_collector.py +++ b/src/semantic/visitors/type_collector.py @@ -1,34 +1,34 @@ -from utils.errors import SemanticError -from semantic.tools import Context -from utils import visitor -from semantic.types import * -from utils.ast import * - -class TypeCollector(object): - def __init__(self, errors=[]): - self.context = None - self.errors = errors - - @visitor.on('node') - def visit(self, node): - pass - - @visitor.when(ProgramNode) - def visit(self, node:ProgramNode): - self.context = Context() - self.context.types['String'] = StringType() - self.context.types['Int'] = IntType() - self.context.types['Object'] = ObjectType() - self.context.types['Bool'] = BoolType() - self.context.types['SELF_TYPE'] = SelfType() - self.context.types['IO'] = IOType() - # self.context.create_type('SELF_TYPE', (0, 0)) - for dec in node.declarations: - self.visit(dec) - - @visitor.when(ClassDeclarationNode) - def visit(self, node:ClassDeclarationNode): - try: - self.context.create_type(node.id, node.pos) - except SemanticError as e: +from utils.errors import SemanticError +from semantic.tools import Context +from utils import visitor +from semantic.types import * +from utils.ast import * + +class TypeCollector(object): + def __init__(self, errors=[]): + self.context = None + self.errors = errors + + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node:ProgramNode): + self.context = Context() + self.context.types['String'] = StringType() + self.context.types['Int'] = IntType() + self.context.types['Object'] = ObjectType() + self.context.types['Bool'] = BoolType() + self.context.types['SELF_TYPE'] = SelfType() + self.context.types['IO'] = IOType() + # self.context.create_type('SELF_TYPE', (0, 0)) + for dec in node.declarations: + self.visit(dec) + + @visitor.when(ClassDeclarationNode) + def visit(self, node:ClassDeclarationNode): + try: + self.context.create_type(node.id, node.pos) + except SemanticError as e: self.errors.append(e) \ No newline at end of file diff --git a/src/semantic/visitors/var_collector.py b/src/semantic/visitors/var_collector.py index a2f67e4e..d1526ab9 100644 --- a/src/semantic/visitors/var_collector.py +++ b/src/semantic/visitors/var_collector.py @@ -1,238 +1,238 @@ -from utils import visitor -from semantic.tools import * -from semantic.types import Type, ErrorType, IntType, StringType, BoolType -from utils.errors import SemanticError, AttributesError, TypesError, NamesError -from utils.ast import * -from ply.lex import LexToken - -class VarCollector: - def __init__(self, context=Context, errors=[]): - self.context = context - self.current_type = None - self.current_method = None - self.errors = errors - self.current_index = None # Lleva - - @visitor.on('node') - def visit(self, node, scope): - pass - - @visitor.when(ProgramNode) - def visit(self, node:ProgramNode, scope:Scope=None): - scope = Scope() - for declaration in node.declarations: - self.visit(declaration, scope.create_child()) - return scope - - - def copy_scope(self, scope:Scope, parent:Type): - if parent is None: - return - for attr in parent.attributes: - if scope.find_variable(attr.name) is None: - scope.define_attribute(attr) - self.copy_scope(scope, parent.parent) - - - @visitor.when(ClassDeclarationNode) - def visit(self, node:ClassDeclarationNode, scope:Scope): - self.current_type = self._get_type(node.id, node.pos) - scope.define_variable('self', self.current_type) - - for feat in node.features: - if isinstance(feat, AttrDeclarationNode): - self.visit(feat, scope) - - self.copy_scope(scope, self.current_type.parent) - - for feat in node.features: - if isinstance(feat, FuncDeclarationNode): - self.visit(feat, scope) - - - def _define_default_value(self, typex, node): - if typex == IntType(): - node.expr = ConstantNumNode(0) - elif typex == StringType(): - node.expr = ConstantStrNode("") - elif typex == BoolType(): - node.expr = ConstantBoolNode('false') - else: - node.expr = ConstantVoidNode() - - @visitor.when(AttrDeclarationNode) - def visit(self, node:AttrDeclarationNode, scope:Scope): - attr = self.current_type.get_attribute(node.id, node.pos) - if node.expr is None: - self._define_default_value(attr.type, node) - else: - self.visit(node.expr, scope) - attr.expr = node.expr - scope.define_attribute(attr) - - - @visitor.when(FuncDeclarationNode) - def visit(self, node:FuncDeclarationNode, scope:Scope): - # Ver si el método está definido en el padre - parent = self.current_type.parent - pnames = [param[0] for param in node.params] - ptypes = [param[1] for param in node.params] - - self.current_method = self.current_type.get_method(node.id, node.pos) - - new_scope = scope.create_child() - scope.functions[node.id] = new_scope - - # Añadir las variables de argumento - for pname, ptype in node.params: - new_scope.define_variable(pname, self._get_type(ptype.value, ptype.pos)) - - self.visit(node.body, new_scope) - - - def _get_type(self, ntype, pos): - try: - return self.context.get_type(ntype, pos) - except SemanticError as e: - self.errors.append(e) - return ErrorType() - - - @visitor.when(VarDeclarationNode) - def visit(self, node:VarDeclarationNode, scope:Scope): - if node.id == 'self': - error_text = SemanticError.SELF_IS_READONLY - self.errors.append(SemanticError(error_text, *node.pos)) - return - - if scope.is_defined(node.id): - var = scope.find_variable(node.id) - if var.type != ErrorType(): - error_text = SemanticError.LOCAL_ALREADY_DEFINED %(node.id, self.current_method.name) - self.errors.append(SemanticError(error_text, *node.pos)) - return - - vtype = self._get_type(node.type, node.type_pos) - var_info = scope.define_variable(node.id, vtype) - - if node.expr is not None: - self.visit(node.expr, scope) - else: - self._define_default_value(vtype, node) - - - @visitor.when(AssignNode) - def visit(self, node:AssignNode, scope:Scope): - if node.id == 'self': - error_text = SemanticError.SELF_IS_READONLY - self.errors.append(SemanticError(error_text, *node.pos)) - return - - vinfo = scope.find_variable(node.id) - if vinfo is None: - error_text = NamesError.VARIABLE_NOT_DEFINED %(node.id, self.current_method.name) - self.errors.append(NamesError(error_text, *node.pos)) - vtype = ErrorType() - scope.define_variable(node.id, vtype) - else: - vtype = vinfo.type - - self.visit(node.expr, scope) - - @visitor.when(BlockNode) - def visit(self, node:BlockNode, scope:Scope): - for exp in node.expr_list: - self.visit(exp, scope) - - - @visitor.when(LetNode) - def visit(self, node:LetNode, scope:Scope): - n_scope = scope.create_child() - scope.expr_dict[node] = n_scope - for init in node.init_list: - self.visit(init, n_scope) - - self.visit(node.expr, n_scope) - - #no necesario - @visitor.when(BinaryNode) - def visit(self, node:BinaryNode, scope:Scope): - self.visit(node.left, scope) - self.visit(node.right, scope) - - - @visitor.when(UnaryNode) - def visit(self, node:UnaryNode, scope:Scope): - self.visit(node.expr, scope) - - - @visitor.when(VariableNode) - def visit(self, node:VariableNode, scope:Scope): - try: - return self.current_type.get_attribute(node.lex, node.pos).type - except AttributesError: - if not scope.is_defined(node.lex): - error_text = NamesError.VARIABLE_NOT_DEFINED %(node.lex, self.current_method.name) - self.errors.append(NamesError(error_text, *node.pos)) - vinfo = scope.define_variable(node.lex, ErrorType(node.pos)) - else: - vinfo = scope.find_variable(node.lex) - return vinfo.type - - - @visitor.when(WhileNode) - def visit(self, node:WhileNode, scope:Scope): - self.visit(node.cond, scope) - self.visit(node.expr, scope) - - - @visitor.when(ConditionalNode) - def visit(self, node:ConditionalNode, scope:Scope): - self.visit(node.cond, scope) - self.visit(node.stm, scope) - self.visit(node.else_stm, scope) - - @visitor.when(IsVoidNode) - def visit(self, node:IsVoidNode, scope:Scope): - self.visit(node.expr, scope) - - @visitor.when(CallNode) - def visit(self, node:CallNode, scope:Scope): - self.visit(node.obj, scope) - for arg in node.args: - self.visit(arg, scope) - - - @visitor.when(BaseCallNode) - def visit(self, node:BaseCallNode, scope:Scope): - self.visit(node.obj, scope) - for arg in node.args: - self.visit(arg, scope) - - - @visitor.when(StaticCallNode) - def visit(self, node:StaticCallNode, scope:Scope): - for arg in node.args: - self.visit(arg, scope) - - - @visitor.when(CaseNode) - def visit(self, node:CaseNode, scope:Scope): - self.visit(node.expr, scope) - - new_scp = scope.create_child() - scope.expr_dict[node] = new_scp - - for case in node.case_list: - self.visit(case, new_scp.create_child()) - - - @visitor.when(OptionNode) - def visit(self, node:OptionNode, scope:Scope): - typex = self.context.get_type(node.typex, node.type_pos) - - self.visit(node.expr, scope) - scope.define_variable(node.id, typex) - - +from utils import visitor +from semantic.tools import * +from semantic.types import Type, ErrorType, IntType, StringType, BoolType +from utils.errors import SemanticError, AttributesError, TypesError, NamesError +from utils.ast import * +from ply.lex import LexToken + +class VarCollector: + def __init__(self, context=Context, errors=[]): + self.context = context + self.current_type = None + self.current_method = None + self.errors = errors + self.current_index = None # Lleva + + @visitor.on('node') + def visit(self, node, scope): + pass + + @visitor.when(ProgramNode) + def visit(self, node:ProgramNode, scope:Scope=None): + scope = Scope() + for declaration in node.declarations: + self.visit(declaration, scope.create_child()) + return scope + + + def copy_scope(self, scope:Scope, parent:Type): + if parent is None: + return + for attr in parent.attributes: + if scope.find_variable(attr.name) is None: + scope.define_attribute(attr) + self.copy_scope(scope, parent.parent) + + + @visitor.when(ClassDeclarationNode) + def visit(self, node:ClassDeclarationNode, scope:Scope): + self.current_type = self._get_type(node.id, node.pos) + scope.define_variable('self', self.current_type) + + for feat in node.features: + if isinstance(feat, AttrDeclarationNode): + self.visit(feat, scope) + + self.copy_scope(scope, self.current_type.parent) + + for feat in node.features: + if isinstance(feat, FuncDeclarationNode): + self.visit(feat, scope) + + + def _define_default_value(self, typex, node): + if typex == IntType(): + node.expr = ConstantNumNode(0) + elif typex == StringType(): + node.expr = ConstantStrNode("") + elif typex == BoolType(): + node.expr = ConstantBoolNode('false') + else: + node.expr = ConstantVoidNode() + + @visitor.when(AttrDeclarationNode) + def visit(self, node:AttrDeclarationNode, scope:Scope): + attr = self.current_type.get_attribute(node.id, node.pos) + if node.expr is None: + self._define_default_value(attr.type, node) + else: + self.visit(node.expr, scope) + attr.expr = node.expr + scope.define_attribute(attr) + + + @visitor.when(FuncDeclarationNode) + def visit(self, node:FuncDeclarationNode, scope:Scope): + # Ver si el método está definido en el padre + parent = self.current_type.parent + pnames = [param[0] for param in node.params] + ptypes = [param[1] for param in node.params] + + self.current_method = self.current_type.get_method(node.id, node.pos) + + new_scope = scope.create_child() + scope.functions[node.id] = new_scope + + # Añadir las variables de argumento + for pname, ptype in node.params: + new_scope.define_variable(pname, self._get_type(ptype.value, ptype.pos)) + + self.visit(node.body, new_scope) + + + def _get_type(self, ntype, pos): + try: + return self.context.get_type(ntype, pos) + except SemanticError as e: + self.errors.append(e) + return ErrorType() + + + @visitor.when(VarDeclarationNode) + def visit(self, node:VarDeclarationNode, scope:Scope): + if node.id == 'self': + error_text = SemanticError.SELF_IS_READONLY + self.errors.append(SemanticError(error_text, *node.pos)) + return + + if scope.is_defined(node.id): + var = scope.find_variable(node.id) + if var.type != ErrorType(): + error_text = SemanticError.LOCAL_ALREADY_DEFINED %(node.id, self.current_method.name) + self.errors.append(SemanticError(error_text, *node.pos)) + return + + vtype = self._get_type(node.type, node.type_pos) + var_info = scope.define_variable(node.id, vtype) + + if node.expr is not None: + self.visit(node.expr, scope) + else: + self._define_default_value(vtype, node) + + + @visitor.when(AssignNode) + def visit(self, node:AssignNode, scope:Scope): + if node.id == 'self': + error_text = SemanticError.SELF_IS_READONLY + self.errors.append(SemanticError(error_text, *node.pos)) + return + + vinfo = scope.find_variable(node.id) + if vinfo is None: + error_text = NamesError.VARIABLE_NOT_DEFINED %(node.id, self.current_method.name) + self.errors.append(NamesError(error_text, *node.pos)) + vtype = ErrorType() + scope.define_variable(node.id, vtype) + else: + vtype = vinfo.type + + self.visit(node.expr, scope) + + @visitor.when(BlockNode) + def visit(self, node:BlockNode, scope:Scope): + for exp in node.expr_list: + self.visit(exp, scope) + + + @visitor.when(LetNode) + def visit(self, node:LetNode, scope:Scope): + n_scope = scope.create_child() + scope.expr_dict[node] = n_scope + for init in node.init_list: + self.visit(init, n_scope) + + self.visit(node.expr, n_scope) + + #no necesario + @visitor.when(BinaryNode) + def visit(self, node:BinaryNode, scope:Scope): + self.visit(node.left, scope) + self.visit(node.right, scope) + + + @visitor.when(UnaryNode) + def visit(self, node:UnaryNode, scope:Scope): + self.visit(node.expr, scope) + + + @visitor.when(VariableNode) + def visit(self, node:VariableNode, scope:Scope): + try: + return self.current_type.get_attribute(node.lex, node.pos).type + except AttributesError: + if not scope.is_defined(node.lex): + error_text = NamesError.VARIABLE_NOT_DEFINED %(node.lex, self.current_method.name) + self.errors.append(NamesError(error_text, *node.pos)) + vinfo = scope.define_variable(node.lex, ErrorType(node.pos)) + else: + vinfo = scope.find_variable(node.lex) + return vinfo.type + + + @visitor.when(WhileNode) + def visit(self, node:WhileNode, scope:Scope): + self.visit(node.cond, scope) + self.visit(node.expr, scope) + + + @visitor.when(ConditionalNode) + def visit(self, node:ConditionalNode, scope:Scope): + self.visit(node.cond, scope) + self.visit(node.stm, scope) + self.visit(node.else_stm, scope) + + @visitor.when(IsVoidNode) + def visit(self, node:IsVoidNode, scope:Scope): + self.visit(node.expr, scope) + + @visitor.when(CallNode) + def visit(self, node:CallNode, scope:Scope): + self.visit(node.obj, scope) + for arg in node.args: + self.visit(arg, scope) + + + @visitor.when(BaseCallNode) + def visit(self, node:BaseCallNode, scope:Scope): + self.visit(node.obj, scope) + for arg in node.args: + self.visit(arg, scope) + + + @visitor.when(StaticCallNode) + def visit(self, node:StaticCallNode, scope:Scope): + for arg in node.args: + self.visit(arg, scope) + + + @visitor.when(CaseNode) + def visit(self, node:CaseNode, scope:Scope): + self.visit(node.expr, scope) + + new_scp = scope.create_child() + scope.expr_dict[node] = new_scp + + for case in node.case_list: + self.visit(case, new_scp.create_child()) + + + @visitor.when(OptionNode) + def visit(self, node:OptionNode, scope:Scope): + typex = self.context.get_type(node.typex, node.type_pos) + + self.visit(node.expr, scope) + scope.define_variable(node.id, typex) + + \ No newline at end of file diff --git a/src/test.cl b/src/test.cl index 0105a944..69d1aea2 100644 --- a/src/test.cl +++ b/src/test.cl @@ -1,40 +1,40 @@ -class Main { - - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Int; - test2: Int <- test3; - - testing1(): Int { - 2 - 2 - }; - - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - let count: Int, pow: Int <- 1 -- Initialization must be an expression - in { - count <- 0; - } - }; - - testing3(): Int { - testing2(new Alpha, 2) - }; - - testing4(): Int { - test1 <- ~(1 + 2 + 3 + 4 + 5) -- The left side must be an expression - }; -}; - -class Alpha inherits IO { - x : Int <- 0; - print() : Object { - out_string("reached!!\n") - }; +class Main { + + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Int; + test2: Int <- test3; + + testing1(): Int { + 2 - 2 + }; + + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + let count: Int, pow: Int <- 1 -- Initialization must be an expression + in { + count <- 0; + } + }; + + testing3(): Int { + testing2(new Alpha, 2) + }; + + testing4(): Int { + test1 <- ~(1 + 2 + 3 + 4 + 5) -- The left side must be an expression + }; +}; + +class Alpha inherits IO { + x : Int <- 0; + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/src/utils/ast.py b/src/utils/ast.py index 5daef3f7..a1fa03ae 100644 --- a/src/utils/ast.py +++ b/src/utils/ast.py @@ -1,221 +1,221 @@ -from ply.lex import LexToken - -class Node: - pass - -class ProgramNode(Node): - def __init__(self, declarations): - self.declarations = declarations - -class DeclarationNode(Node): - pass - -class ExpressionNode(Node): - pass - -class ErrorNode(Node): - pass - -class ClassDeclarationNode(DeclarationNode): - def __init__(self, idx:LexToken, features, parent=None): - self.id = idx.value - self.pos = (idx.lineno, idx.column) - if parent: - self.parent = parent.value - self.parent_pos = (parent.lineno, parent.column) - else: - self.parent = None - self.parent_pos = (0, 0) - self.features = features - -class _Param: - def __init__(self, tok): - self.value = tok.value - self.pos = (tok.lineno, tok.column) - -class FuncDeclarationNode(DeclarationNode): - def __init__(self, idx:LexToken, params, return_type, body): - self.id = idx.value - self.pos = (idx.lineno, idx.column) - self.params = [(pname.value, _Param(ptype)) for pname, ptype in params] - self.type = return_type.value - self.type_pos = (return_type.lineno, return_type.column) - self.body = body - - -class AttrDeclarationNode(DeclarationNode): - def __init__(self, idx:LexToken, typex, expr=None): - self.id = idx.value - self.pos = (idx.lineno, idx.column) - self.type = typex.value - self.type_pos = (typex.lineno, typex.column) - self.expr = expr - -class VarDeclarationNode(ExpressionNode): - def __init__(self, idx:LexToken, typex, expr=None): - self.id = idx.value - self.pos = (idx.lineno, idx.column) - self.type = typex.value - self.type_pos = (typex.lineno, typex.column) - self.expr = expr - -class AssignNode(ExpressionNode): - def __init__(self, idx:LexToken, expr): - self.id = idx.value - self.pos = (idx.lineno, idx.column) - self.expr = expr - -class CallNode(ExpressionNode): - def __init__(self, obj, idx:LexToken, args): - self.obj = obj - self.id = idx.value - self.pos = (idx.lineno, idx.column) - self.args = args - -class BlockNode(ExpressionNode): - def __init__(self, expr_list, tok): - self.expr_list = expr_list - self.pos = (tok.lineno, tok.column) - -class BaseCallNode(ExpressionNode): - def __init__(self, obj, typex:LexToken, idx:LexToken, args): - self.obj = obj - self.id = idx.value - self.pos = (idx.lineno, idx.column) - self.args = args - self.type = typex.value - self.type_pos = (typex.lineno, typex.column) - - -class StaticCallNode(ExpressionNode): - def __init__(self, idx:LexToken, args): - self.id = idx.value - self.pos = (idx.lineno, idx.column) - self.args = args - - -class AtomicNode(ExpressionNode): - def __init__(self, lex): - try: - self.lex = lex.value - self.pos = (lex.lineno, lex.column) - except AttributeError: - self.lex = lex - self.pos = (0, 0) - -class BinaryNode(ExpressionNode): - def __init__(self, left, right): - self.left = left - self.right = right - self.pos = left.pos - -class BinaryLogicalNode(BinaryNode): - pass - -class BinaryArithNode(BinaryNode): - pass - -class UnaryNode(ExpressionNode): - def __init__(self, expr, tok): - self.expr = expr - self.pos = (tok.lineno, tok.column) - -class UnaryLogicalNode(UnaryNode): - pass - -class UnaryArithNode(UnaryNode): - pass - -# -------- - -class WhileNode(ExpressionNode): - def __init__(self, cond, expr, tok): - self.cond = cond - self.expr = expr - self.pos = (tok.lineno, tok.column) - -class ConditionalNode(ExpressionNode): - def __init__(self, cond, stm, else_stm, tok): - self.cond = cond - self.stm = stm - self.else_stm = else_stm - self.pos = (tok.lineno, tok.column) - -class CaseNode(ExpressionNode): - def __init__(self, expr, case_list, tok): - self.expr = expr - self.case_list = case_list - self.pos = (tok.lineno, tok.column) - - def __hash__(self): - return id(self) - -class OptionNode(ExpressionNode): - def __init__(self, idx:LexToken, typex, expr): - self.id = idx.value - self.pos = (idx.lineno, idx.column) - self.typex = typex.value - self.type_pos = (typex.lineno, typex.column) - self.expr = expr - - -class LetNode(ExpressionNode): - def __init__(self, init_list, expr, tok): - self.init_list = init_list - self.expr = expr - self.pos = (tok.lineno, tok.column) - - def __hash__(self): - return id(self) - -class ConstantNumNode(AtomicNode): - pass - -class ConstantBoolNode(AtomicNode): - pass - -class ConstantStrNode(AtomicNode): - pass - -class ConstantVoidNode(AtomicNode): - def __init__(self): - super().__init__('void') - -class VariableNode(AtomicNode): - pass - -class TypeNode(AtomicNode): - pass - -class InstantiateNode(AtomicNode): - pass - -class BinaryNotNode(UnaryArithNode): - pass - -class NotNode(UnaryLogicalNode): - pass - -class IsVoidNode(UnaryLogicalNode): - pass - -class PlusNode(BinaryArithNode): - pass - -class MinusNode(BinaryArithNode): - pass - -class StarNode(BinaryArithNode): - pass - -class DivNode(BinaryArithNode): - pass - -class LessNode(BinaryLogicalNode): - pass - -class LessEqNode(BinaryLogicalNode): - pass - -class EqualNode(BinaryLogicalNode): +from ply.lex import LexToken + +class Node: + pass + +class ProgramNode(Node): + def __init__(self, declarations): + self.declarations = declarations + +class DeclarationNode(Node): + pass + +class ExpressionNode(Node): + pass + +class ErrorNode(Node): + pass + +class ClassDeclarationNode(DeclarationNode): + def __init__(self, idx:LexToken, features, parent=None): + self.id = idx.value + self.pos = (idx.lineno, idx.column) + if parent: + self.parent = parent.value + self.parent_pos = (parent.lineno, parent.column) + else: + self.parent = None + self.parent_pos = (0, 0) + self.features = features + +class _Param: + def __init__(self, tok): + self.value = tok.value + self.pos = (tok.lineno, tok.column) + +class FuncDeclarationNode(DeclarationNode): + def __init__(self, idx:LexToken, params, return_type, body): + self.id = idx.value + self.pos = (idx.lineno, idx.column) + self.params = [(pname.value, _Param(ptype)) for pname, ptype in params] + self.type = return_type.value + self.type_pos = (return_type.lineno, return_type.column) + self.body = body + + +class AttrDeclarationNode(DeclarationNode): + def __init__(self, idx:LexToken, typex, expr=None): + self.id = idx.value + self.pos = (idx.lineno, idx.column) + self.type = typex.value + self.type_pos = (typex.lineno, typex.column) + self.expr = expr + +class VarDeclarationNode(ExpressionNode): + def __init__(self, idx:LexToken, typex, expr=None): + self.id = idx.value + self.pos = (idx.lineno, idx.column) + self.type = typex.value + self.type_pos = (typex.lineno, typex.column) + self.expr = expr + +class AssignNode(ExpressionNode): + def __init__(self, idx:LexToken, expr): + self.id = idx.value + self.pos = (idx.lineno, idx.column) + self.expr = expr + +class CallNode(ExpressionNode): + def __init__(self, obj, idx:LexToken, args): + self.obj = obj + self.id = idx.value + self.pos = (idx.lineno, idx.column) + self.args = args + +class BlockNode(ExpressionNode): + def __init__(self, expr_list, tok): + self.expr_list = expr_list + self.pos = (tok.lineno, tok.column) + +class BaseCallNode(ExpressionNode): + def __init__(self, obj, typex:LexToken, idx:LexToken, args): + self.obj = obj + self.id = idx.value + self.pos = (idx.lineno, idx.column) + self.args = args + self.type = typex.value + self.type_pos = (typex.lineno, typex.column) + + +class StaticCallNode(ExpressionNode): + def __init__(self, idx:LexToken, args): + self.id = idx.value + self.pos = (idx.lineno, idx.column) + self.args = args + + +class AtomicNode(ExpressionNode): + def __init__(self, lex): + try: + self.lex = lex.value + self.pos = (lex.lineno, lex.column) + except AttributeError: + self.lex = lex + self.pos = (0, 0) + +class BinaryNode(ExpressionNode): + def __init__(self, left, right): + self.left = left + self.right = right + self.pos = left.pos + +class BinaryLogicalNode(BinaryNode): + pass + +class BinaryArithNode(BinaryNode): + pass + +class UnaryNode(ExpressionNode): + def __init__(self, expr, tok): + self.expr = expr + self.pos = (tok.lineno, tok.column) + +class UnaryLogicalNode(UnaryNode): + pass + +class UnaryArithNode(UnaryNode): + pass + +# -------- + +class WhileNode(ExpressionNode): + def __init__(self, cond, expr, tok): + self.cond = cond + self.expr = expr + self.pos = (tok.lineno, tok.column) + +class ConditionalNode(ExpressionNode): + def __init__(self, cond, stm, else_stm, tok): + self.cond = cond + self.stm = stm + self.else_stm = else_stm + self.pos = (tok.lineno, tok.column) + +class CaseNode(ExpressionNode): + def __init__(self, expr, case_list, tok): + self.expr = expr + self.case_list = case_list + self.pos = (tok.lineno, tok.column) + + def __hash__(self): + return id(self) + +class OptionNode(ExpressionNode): + def __init__(self, idx:LexToken, typex, expr): + self.id = idx.value + self.pos = (idx.lineno, idx.column) + self.typex = typex.value + self.type_pos = (typex.lineno, typex.column) + self.expr = expr + + +class LetNode(ExpressionNode): + def __init__(self, init_list, expr, tok): + self.init_list = init_list + self.expr = expr + self.pos = (tok.lineno, tok.column) + + def __hash__(self): + return id(self) + +class ConstantNumNode(AtomicNode): + pass + +class ConstantBoolNode(AtomicNode): + pass + +class ConstantStrNode(AtomicNode): + pass + +class ConstantVoidNode(AtomicNode): + def __init__(self): + super().__init__('void') + +class VariableNode(AtomicNode): + pass + +class TypeNode(AtomicNode): + pass + +class InstantiateNode(AtomicNode): + pass + +class BinaryNotNode(UnaryArithNode): + pass + +class NotNode(UnaryLogicalNode): + pass + +class IsVoidNode(UnaryLogicalNode): + pass + +class PlusNode(BinaryArithNode): + pass + +class MinusNode(BinaryArithNode): + pass + +class StarNode(BinaryArithNode): + pass + +class DivNode(BinaryArithNode): + pass + +class LessNode(BinaryLogicalNode): + pass + +class LessEqNode(BinaryLogicalNode): + pass + +class EqualNode(BinaryLogicalNode): pass \ No newline at end of file diff --git a/src/utils/errors.py b/src/utils/errors.py index 2ae75f38..66cd9c6d 100644 --- a/src/utils/errors.py +++ b/src/utils/errors.py @@ -1,112 +1,112 @@ -class CoolError(Exception): - def __init__(self, text, line, column): - super().__init__(text) - self.line = line - self.column = column - - @property - def error_type(self): - return 'CoolError' - - @property - def text(self): - return self.args[0] - - def __str__(self): - return f'({self.line}, {self.column}) - {self.error_type}: {self.text}' - - def __repr__(self): - return str(self) - - -class CompilerError(CoolError): - 'Se reporta al presentar alguna anomalia con la entrada del compilador' - - UNKNOWN_FILE = 'The file "%s" does not exist' - - @property - def error_type(self): - return 'CompilerError' - - -class LexicographicError(CoolError): - 'Errores detectados por el lexer' - - UNKNOWN_TOKEN = 'ERROR "%s"' - UNDETERMINATED_STRING = 'Undeterminated string constant' - EOF_COMMENT = 'EOF in comment' - EOF_STRING = 'EOF in string constant' - NULL_STRING = 'String contains null character' - - @property - def error_type(self): - return 'LexicographicError' - - -class SyntaticError(CoolError): - 'Errores detectados en el cool_parser' - - ERROR = 'ERROR at or near "%s"' - - @property - def error_type(self): - return 'SyntacticError' - - -class SemanticError(CoolError): - 'Otros errores semanticos' - - SELF_IS_READONLY = 'Variable "self" is read-only.' - LOCAL_ALREADY_DEFINED = 'Variable "%s" is already defined in method "%s".' - MISSING_PARAMETER = 'Missing argument "%s" in function call "%s"' - TOO_MANY_ARGUMENTS = 'Too many arguments for function call "%s"' - - @property - def error_type(self): - return 'SemanticError' - - -class NamesError(SemanticError): - 'Se reporta al referenciar a un identificador en un ambito en el que no es visible' - - USED_BEFORE_ASSIGNMENT = 'Variable "%s" used before being assigned' - VARIABLE_NOT_DEFINED = 'Variable "%s" is not defined in "%s".' - - @property - def error_type(self): - return 'NameError' - - -class TypesError(SemanticError): - 'Se reporta al detectar un problema de tipos' - - INVALID_OPERATION = 'Operation is not defined between "%s" and "%s".' - INCOMPATIBLE_TYPES = 'Cannot convert "%s" into "%s".' - INCORRECT_TYPE = 'Incorrect type "%s" waiting "%s"' - BOPERATION_NOT_DEFINED = '%s operations are not defined between "%s" and "%s"' - UOPERATION_NOT_DEFINED = '%s operations are not defined for "%s"' - CIRCULAR_DEPENDENCY = 'Circular dependency between %s and %s' - - PARENT_ALREADY_DEFINED = 'Parent type is already set for "%s"' - TYPE_ALREADY_DEFINED = 'Type with the same name (%s) already in context.' - TYPE_NOT_DEFINED = 'Type "%s" is not defined.' - - @property - def error_type(self): - return 'TypeError' - - -class AttributesError(SemanticError): - 'Se reporta cuando un atributo o método se referencia pero no está definido' - - WRONG_SIGNATURE = 'Method "%s" already defined in "%s" with a different signature.' - - METHOD_ALREADY_DEFINED = 'Method "%s" is already defined in class "%s"' - METHOD_NOT_DEFINED = 'Method "%s" is not defined in "%s"' - ATTRIBUTE_ALREADY_DEFINED = 'Attribute "%s" is already defined in %s' - ATTRIBUTE_NOT_DEFINED = 'Attribute "%s" is not defined in %s' - - @property - def error_type(self): - return 'AttributeError' +class CoolError(Exception): + def __init__(self, text, line, column): + super().__init__(text) + self.line = line + self.column = column + + @property + def error_type(self): + return 'CoolError' + + @property + def text(self): + return self.args[0] + + def __str__(self): + return f'({self.line}, {self.column}) - {self.error_type}: {self.text}' + + def __repr__(self): + return str(self) + + +class CompilerError(CoolError): + 'Se reporta al presentar alguna anomalia con la entrada del compilador' + + UNKNOWN_FILE = 'The file "%s" does not exist' + + @property + def error_type(self): + return 'CompilerError' + + +class LexicographicError(CoolError): + 'Errores detectados por el lexer' + + UNKNOWN_TOKEN = 'ERROR "%s"' + UNDETERMINATED_STRING = 'Undeterminated string constant' + EOF_COMMENT = 'EOF in comment' + EOF_STRING = 'EOF in string constant' + NULL_STRING = 'String contains null character' + + @property + def error_type(self): + return 'LexicographicError' + + +class SyntaticError(CoolError): + 'Errores detectados en el cool_parser' + + ERROR = 'ERROR at or near "%s"' + + @property + def error_type(self): + return 'SyntacticError' + + +class SemanticError(CoolError): + 'Otros errores semanticos' + + SELF_IS_READONLY = 'Variable "self" is read-only.' + LOCAL_ALREADY_DEFINED = 'Variable "%s" is already defined in method "%s".' + MISSING_PARAMETER = 'Missing argument "%s" in function call "%s"' + TOO_MANY_ARGUMENTS = 'Too many arguments for function call "%s"' + + @property + def error_type(self): + return 'SemanticError' + + +class NamesError(SemanticError): + 'Se reporta al referenciar a un identificador en un ambito en el que no es visible' + + USED_BEFORE_ASSIGNMENT = 'Variable "%s" used before being assigned' + VARIABLE_NOT_DEFINED = 'Variable "%s" is not defined in "%s".' + + @property + def error_type(self): + return 'NameError' + + +class TypesError(SemanticError): + 'Se reporta al detectar un problema de tipos' + + INVALID_OPERATION = 'Operation is not defined between "%s" and "%s".' + INCOMPATIBLE_TYPES = 'Cannot convert "%s" into "%s".' + INCORRECT_TYPE = 'Incorrect type "%s" waiting "%s"' + BOPERATION_NOT_DEFINED = '%s operations are not defined between "%s" and "%s"' + UOPERATION_NOT_DEFINED = '%s operations are not defined for "%s"' + CIRCULAR_DEPENDENCY = 'Circular dependency between %s and %s' + + PARENT_ALREADY_DEFINED = 'Parent type is already set for "%s"' + TYPE_ALREADY_DEFINED = 'Type with the same name (%s) already in context.' + TYPE_NOT_DEFINED = 'Type "%s" is not defined.' + + @property + def error_type(self): + return 'TypeError' + + +class AttributesError(SemanticError): + 'Se reporta cuando un atributo o método se referencia pero no está definido' + + WRONG_SIGNATURE = 'Method "%s" already defined in "%s" with a different signature.' + + METHOD_ALREADY_DEFINED = 'Method "%s" is already defined in class "%s"' + METHOD_NOT_DEFINED = 'Method "%s" is not defined in "%s"' + ATTRIBUTE_ALREADY_DEFINED = 'Attribute "%s" is already defined in %s' + ATTRIBUTE_NOT_DEFINED = 'Attribute "%s" is not defined in %s' + + @property + def error_type(self): + return 'AttributeError' \ No newline at end of file diff --git a/src/utils/tokens.py b/src/utils/tokens.py index 0b258bc7..747cc5f1 100644 --- a/src/utils/tokens.py +++ b/src/utils/tokens.py @@ -1,60 +1,61 @@ -reserved = { - 'class': 'class', - 'else': 'else', - 'false': 'false', - 'fi': 'fi', - 'if': 'if', - 'in': 'in', - 'inherits': 'inherits', - 'isvoid': 'isvoid', - 'let': 'let', - 'loop': 'loop', - 'pool': 'pool', - 'then': 'then', - 'while': 'while', - 'case': 'case', - 'esac': 'esac', - 'new': 'new', - 'of': 'of', - 'not': 'not', - 'true': 'true' -} - -tokens = [ - 'semi', # '; ' - 'colon', # ': ' - 'comma', # ', ' - 'dot', # '. ' - 'opar', # '( ' - 'cpar', # ') ' - 'ocur', # '{' - 'ccur', # '} ' - 'larrow', # '<-' - 'arroba', # '@' - 'rarrow', # '=> ' - 'nox', # '~' - 'equal', # '=' - 'plus', # '+' - 'minus', # '-' - 'star', # '\*' - 'div', # '/ ' - 'less', # '<' - 'lesseq', # '<=' - 'id', - 'type', - 'num', - 'string' -] + list(reserved.values()) - -class Token: - def __init__(self, lex, type_, lineno, pos): - self.lex = lex - self.type = type_ - self.lineno = lineno - self.pos = pos - - def __str__(self): - return f'{self.type}: {self.lex} ({self.lineno}, {self.pos})' - - def __repr__(self): +reserved = { + 'class': 'class', + 'else': 'else', + 'false': 'false', + 'fi': 'fi', + 'if': 'if', + 'in': 'in', + 'inherits': 'inherits', + 'isvoid': 'isvoid', + 'let': 'let', + 'loop': 'loop', + 'pool': 'pool', + 'then': 'then', + 'while': 'while', + 'case': 'case', + 'esac': 'esac', + 'new': 'new', + 'of': 'of', + 'not': 'not', + 'true': 'true' +} + +tokens = [ + 'semi', # '; ' + 'colon', # ': ' + 'comma', # ', ' + 'dot', # '. ' + 'opar', # '( ' + 'cpar', # ') ' + 'ocur', # '{' + 'ccur', # '} ' + 'larrow', # '<-' + 'arroba', # '@' + 'rarrow', # '=> ' + 'nox', # '~' + 'equal', # '=' + 'plus', # '+' + 'minus', # '-' + 'star', # '\*' + 'div', # '/ ' + 'less', # '<' + 'lesseq', # '<=' + 'id', + 'type', + 'num', + 'string' +] + list(reserved.values()) + + +class Token: + def __init__(self, lex, type_, lineno, pos): + self.lex = lex + self.type = type_ + self.lineno = lineno + self.pos = pos + + def __str__(self): + return f'{self.type}: {self.lex} ({self.lineno}, {self.pos})' + + def __repr__(self): return str(self) \ No newline at end of file diff --git a/src/utils/utils.py b/src/utils/utils.py index 85c5bc35..a963c217 100644 --- a/src/utils/utils.py +++ b/src/utils/utils.py @@ -1,35 +1,35 @@ -import itertools -from semantic.types import Type, SelfType - - -def find_column(lexer, token): - line_start = lexer.lexdata.rfind('\n', 0, token.lexpos) - return token.lexpos - line_start - - -def path_to_objet(typex): - path = [] - c_type = typex - - while c_type: - path.append(c_type) - c_type = c_type.parent - - path.reverse() - return path - - -def get_common_basetype(types): - paths = [path_to_objet(typex) for typex in types] - tuples = zip(*paths) - - for i, t in enumerate(tuples): - gr = itertools.groupby(t) - if len(list(gr)) > 1: - return paths[0][i-1] - - return paths[0][-1] - - -def get_type(typex: Type, current_type: Type) -> Type: - return current_type if typex == SelfType() else typex +import itertools +from semantic.types import Type, SelfType + + +def find_column(lexer, token): + line_start = lexer.lexdata.rfind('\n', 0, token.lexpos) + return token.lexpos - line_start + + +def path_to_objet(typex): + path = [] + c_type = typex + + while c_type: + path.append(c_type) + c_type = c_type.parent + + path.reverse() + return path + + +def get_common_basetype(types): + paths = [path_to_objet(typex) for typex in types] + tuples = zip(*paths) + + for i, t in enumerate(tuples): + gr = itertools.groupby(t) + if len(list(gr)) > 1: + return paths[0][i-1] + + return paths[0][-1] + + +def get_type(typex: Type, current_type: Type) -> Type: + return current_type if typex == SelfType() else typex diff --git a/src/utils/visitor.py b/src/utils/visitor.py index 96484283..500298bc 100644 --- a/src/utils/visitor.py +++ b/src/utils/visitor.py @@ -1,80 +1,80 @@ -# The MIT License (MIT) -# -# Copyright (c) 2013 Curtis Schlak -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -import inspect - -__all__ = ['on', 'when'] - -def on(param_name): - def f(fn): - dispatcher = Dispatcher(param_name, fn) - return dispatcher - return f - - -def when(param_type): - def f(fn): - frame = inspect.currentframe().f_back - func_name = fn.func_name if 'func_name' in dir(fn) else fn.__name__ - dispatcher = frame.f_locals[func_name] - if not isinstance(dispatcher, Dispatcher): - dispatcher = dispatcher.dispatcher - dispatcher.add_target(param_type, fn) - def ff(*args, **kw): - return dispatcher(*args, **kw) - ff.dispatcher = dispatcher - return ff - return f - - -class Dispatcher(object): - def __init__(self, param_name, fn): - frame = inspect.currentframe().f_back.f_back - top_level = frame.f_locals == frame.f_globals - self.param_index = self.__argspec(fn).args.index(param_name) - self.param_name = param_name - self.targets = {} - - def __call__(self, *args, **kw): - typ = args[self.param_index].__class__ - d = self.targets.get(typ) - if d is not None: - return d(*args, **kw) - else: - issub = issubclass - t = self.targets - ks = t.keys() - ans = [t[k](*args, **kw) for k in ks if issub(typ, k)] - if len(ans) == 1: - return ans.pop() - return ans - - def add_target(self, typ, target): - self.targets[typ] = target - - @staticmethod - def __argspec(fn): - # Support for Python 3 type hints requires inspect.getfullargspec - if hasattr(inspect, 'getfullargspec'): - return inspect.getfullargspec(fn) - else: - return inspect.getargspec(fn) +# The MIT License (MIT) +# +# Copyright (c) 2013 Curtis Schlak +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +import inspect + +__all__ = ['on', 'when'] + +def on(param_name): + def f(fn): + dispatcher = Dispatcher(param_name, fn) + return dispatcher + return f + + +def when(param_type): + def f(fn): + frame = inspect.currentframe().f_back + func_name = fn.func_name if 'func_name' in dir(fn) else fn.__name__ + dispatcher = frame.f_locals[func_name] + if not isinstance(dispatcher, Dispatcher): + dispatcher = dispatcher.dispatcher + dispatcher.add_target(param_type, fn) + def ff(*args, **kw): + return dispatcher(*args, **kw) + ff.dispatcher = dispatcher + return ff + return f + + +class Dispatcher(object): + def __init__(self, param_name, fn): + frame = inspect.currentframe().f_back.f_back + top_level = frame.f_locals == frame.f_globals + self.param_index = self.__argspec(fn).args.index(param_name) + self.param_name = param_name + self.targets = {} + + def __call__(self, *args, **kw): + typ = args[self.param_index].__class__ + d = self.targets.get(typ) + if d is not None: + return d(*args, **kw) + else: + issub = issubclass + t = self.targets + ks = t.keys() + ans = [t[k](*args, **kw) for k in ks if issub(typ, k)] + if len(ans) == 1: + return ans.pop() + return ans + + def add_target(self, typ, target): + self.targets[typ] = target + + @staticmethod + def __argspec(fn): + # Support for Python 3 type hints requires inspect.getfullargspec + if hasattr(inspect, 'getfullargspec'): + return inspect.getfullargspec(fn) + else: + return inspect.getargspec(fn) diff --git a/tests/.gitignore b/tests/.gitignore index 2fc88380..7a5c8f3a 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -1,456 +1,456 @@ -# File created using '.gitignore Generator' for Visual Studio Code: https://bit.ly/vscode-gig - -# Created by https://www.gitignore.io/api/visualstudiocode,linux,latex,python -# Edit at https://www.gitignore.io/?templates=visualstudiocode,linux,latex,python - -### LaTeX ### -## Core latex/pdflatex auxiliary files: -*.aux -*.lof -*.log -*.lot -*.fls -*.out -*.toc -*.fmt -*.fot -*.cb -*.cb2 -.*.lb - -## Intermediate documents: -*.dvi -*.xdv -*-converted-to.* -# these rules might exclude image files for figures etc. -# *.ps -# *.eps -# *.pdf - -## Generated if empty string is given at "Please type another file name for output:" -.pdf - -## Bibliography auxiliary files (bibtex/biblatex/biber): -*.bbl -*.bcf -*.blg -*-blx.aux -*-blx.bib -*.run.xml - -## Build tool auxiliary files: -*.fdb_latexmk -*.synctex -*.synctex(busy) -*.synctex.gz -*.synctex.gz(busy) -*.pdfsync - -## Build tool directories for auxiliary files -# latexrun -latex.out/ - -## Auxiliary and intermediate files from other packages: -# algorithms -*.alg -*.loa - -# achemso -acs-*.bib - -# amsthm -*.thm - -# beamer -*.nav -*.pre -*.snm -*.vrb - -# changes -*.soc - -# comment -*.cut - -# cprotect -*.cpt - -# elsarticle (documentclass of Elsevier journals) -*.spl - -# endnotes -*.ent - -# fixme -*.lox - -# feynmf/feynmp -*.mf -*.mp -*.t[1-9] -*.t[1-9][0-9] -*.tfm - -#(r)(e)ledmac/(r)(e)ledpar -*.end -*.?end -*.[1-9] -*.[1-9][0-9] -*.[1-9][0-9][0-9] -*.[1-9]R -*.[1-9][0-9]R -*.[1-9][0-9][0-9]R -*.eledsec[1-9] -*.eledsec[1-9]R -*.eledsec[1-9][0-9] -*.eledsec[1-9][0-9]R -*.eledsec[1-9][0-9][0-9] -*.eledsec[1-9][0-9][0-9]R - -# glossaries -*.acn -*.acr -*.glg -*.glo -*.gls -*.glsdefs - -# uncomment this for glossaries-extra (will ignore makeindex's style files!) -# *.ist - -# gnuplottex -*-gnuplottex-* - -# gregoriotex -*.gaux -*.gtex - -# htlatex -*.4ct -*.4tc -*.idv -*.lg -*.trc -*.xref - -# hyperref -*.brf - -# knitr -*-concordance.tex -# TODO Comment the next line if you want to keep your tikz graphics files -*.tikz -*-tikzDictionary - -# listings -*.lol - -# luatexja-ruby -*.ltjruby - -# makeidx -*.idx -*.ilg -*.ind - -# minitoc -*.maf -*.mlf -*.mlt -*.mtc[0-9]* -*.slf[0-9]* -*.slt[0-9]* -*.stc[0-9]* - -# minted -_minted* -*.pyg - -# morewrites -*.mw - -# nomencl -*.nlg -*.nlo -*.nls - -# pax -*.pax - -# pdfpcnotes -*.pdfpc - -# sagetex -*.sagetex.sage -*.sagetex.py -*.sagetex.scmd - -# scrwfile -*.wrt - -# sympy -*.sout -*.sympy -sympy-plots-for-*.tex/ - -# pdfcomment -*.upa -*.upb - -# pythontex -*.pytxcode -pythontex-files-*/ - -# tcolorbox -*.listing - -# thmtools -*.loe - -# TikZ & PGF -*.dpth -*.md5 -*.auxlock - -# todonotes -*.tdo - -# vhistory -*.hst -*.ver - -# easy-todo -*.lod - -# xcolor -*.xcp - -# xmpincl -*.xmpi - -# xindy -*.xdy - -# xypic precompiled matrices -*.xyc - -# endfloat -*.ttt -*.fff - -# Latexian -TSWLatexianTemp* - -## Editors: -# WinEdt -*.bak -*.sav - -# Texpad -.texpadtmp - -# LyX -*.lyx~ - -# Kile -*.backup - -# KBibTeX -*~[0-9]* - -# auto folder when using emacs and auctex -./auto/* -*.el - -# expex forward references with \gathertags -*-tags.tex - -# standalone packages -*.sta - -### LaTeX Patch ### -# glossaries -*.glstex - -### Linux ### -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* - -### Python ### -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -<<<<<<< HEAD -pip-wheel-metadata/ -share/python-wheels/ -======= ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -<<<<<<< HEAD -.nox/ -======= ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -.hypothesis/ -.pytest_cache/ - -# Translations -*.mo -*.pot - -<<<<<<< HEAD -======= -# Django stuff: -*.log -local_settings.py -db.sqlite3 - -# Flask stuff: -instance/ -.webassets-cache - ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -<<<<<<< HEAD -# pyenv -.python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -======= -# Jupyter Notebook -.ipynb_checkpoints - -# pyenv -.python-version - ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e -# celery beat schedule file -celerybeat-schedule - -# SageMath parsed files -*.sage.py - -<<<<<<< HEAD -======= -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -<<<<<<< HEAD -# Mr Developer -.mr.developer.cfg -.project -.pydevproject - -======= ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e -# mkdocs documentation -/site - -# mypy -<<<<<<< HEAD -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -### VisualStudioCode Patch ### -# Ignore all local history of files -.history - -# End of https://www.gitignore.io/api/visualstudiocode,linux,latex,python - -# Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option) - -======= -.mypy_cache/ ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +# File created using '.gitignore Generator' for Visual Studio Code: https://bit.ly/vscode-gig + +# Created by https://www.gitignore.io/api/visualstudiocode,linux,latex,python +# Edit at https://www.gitignore.io/?templates=visualstudiocode,linux,latex,python + +### LaTeX ### +## Core latex/pdflatex auxiliary files: +*.aux +*.lof +*.log +*.lot +*.fls +*.out +*.toc +*.fmt +*.fot +*.cb +*.cb2 +.*.lb + +## Intermediate documents: +*.dvi +*.xdv +*-converted-to.* +# these rules might exclude image files for figures etc. +# *.ps +# *.eps +# *.pdf + +## Generated if empty string is given at "Please type another file name for output:" +.pdf + +## Bibliography auxiliary files (bibtex/biblatex/biber): +*.bbl +*.bcf +*.blg +*-blx.aux +*-blx.bib +*.run.xml + +## Build tool auxiliary files: +*.fdb_latexmk +*.synctex +*.synctex(busy) +*.synctex.gz +*.synctex.gz(busy) +*.pdfsync + +## Build tool directories for auxiliary files +# latexrun +latex.out/ + +## Auxiliary and intermediate files from other packages: +# algorithms +*.alg +*.loa + +# achemso +acs-*.bib + +# amsthm +*.thm + +# beamer +*.nav +*.pre +*.snm +*.vrb + +# changes +*.soc + +# comment +*.cut + +# cprotect +*.cpt + +# elsarticle (documentclass of Elsevier journals) +*.spl + +# endnotes +*.ent + +# fixme +*.lox + +# feynmf/feynmp +*.mf +*.mp +*.t[1-9] +*.t[1-9][0-9] +*.tfm + +#(r)(e)ledmac/(r)(e)ledpar +*.end +*.?end +*.[1-9] +*.[1-9][0-9] +*.[1-9][0-9][0-9] +*.[1-9]R +*.[1-9][0-9]R +*.[1-9][0-9][0-9]R +*.eledsec[1-9] +*.eledsec[1-9]R +*.eledsec[1-9][0-9] +*.eledsec[1-9][0-9]R +*.eledsec[1-9][0-9][0-9] +*.eledsec[1-9][0-9][0-9]R + +# glossaries +*.acn +*.acr +*.glg +*.glo +*.gls +*.glsdefs + +# uncomment this for glossaries-extra (will ignore makeindex's style files!) +# *.ist + +# gnuplottex +*-gnuplottex-* + +# gregoriotex +*.gaux +*.gtex + +# htlatex +*.4ct +*.4tc +*.idv +*.lg +*.trc +*.xref + +# hyperref +*.brf + +# knitr +*-concordance.tex +# TODO Comment the next line if you want to keep your tikz graphics files +*.tikz +*-tikzDictionary + +# listings +*.lol + +# luatexja-ruby +*.ltjruby + +# makeidx +*.idx +*.ilg +*.ind + +# minitoc +*.maf +*.mlf +*.mlt +*.mtc[0-9]* +*.slf[0-9]* +*.slt[0-9]* +*.stc[0-9]* + +# minted +_minted* +*.pyg + +# morewrites +*.mw + +# nomencl +*.nlg +*.nlo +*.nls + +# pax +*.pax + +# pdfpcnotes +*.pdfpc + +# sagetex +*.sagetex.sage +*.sagetex.py +*.sagetex.scmd + +# scrwfile +*.wrt + +# sympy +*.sout +*.sympy +sympy-plots-for-*.tex/ + +# pdfcomment +*.upa +*.upb + +# pythontex +*.pytxcode +pythontex-files-*/ + +# tcolorbox +*.listing + +# thmtools +*.loe + +# TikZ & PGF +*.dpth +*.md5 +*.auxlock + +# todonotes +*.tdo + +# vhistory +*.hst +*.ver + +# easy-todo +*.lod + +# xcolor +*.xcp + +# xmpincl +*.xmpi + +# xindy +*.xdy + +# xypic precompiled matrices +*.xyc + +# endfloat +*.ttt +*.fff + +# Latexian +TSWLatexianTemp* + +## Editors: +# WinEdt +*.bak +*.sav + +# Texpad +.texpadtmp + +# LyX +*.lyx~ + +# Kile +*.backup + +# KBibTeX +*~[0-9]* + +# auto folder when using emacs and auctex +./auto/* +*.el + +# expex forward references with \gathertags +*-tags.tex + +# standalone packages +*.sta + +### LaTeX Patch ### +# glossaries +*.glstex + +### Linux ### +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +<<<<<<< HEAD +pip-wheel-metadata/ +share/python-wheels/ +======= +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +<<<<<<< HEAD +.nox/ +======= +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +<<<<<<< HEAD +======= +# Django stuff: +*.log +local_settings.py +db.sqlite3 + +# Flask stuff: +instance/ +.webassets-cache + +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +<<<<<<< HEAD +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +======= +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +<<<<<<< HEAD +======= +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +<<<<<<< HEAD +# Mr Developer +.mr.developer.cfg +.project +.pydevproject + +======= +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +# mkdocs documentation +/site + +# mypy +<<<<<<< HEAD +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history + +# End of https://www.gitignore.io/api/visualstudiocode,linux,latex,python + +# Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option) + +======= +.mypy_cache/ +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e diff --git a/tests/codegen/arith.cl b/tests/codegen/arith.cl index af5951cf..0d9f5dd3 100644 --- a/tests/codegen/arith.cl +++ b/tests/codegen/arith.cl @@ -1,430 +1,430 @@ -(* - * A contribution from Anne Sheets (sheets@cory) - * - * Tests the arithmetic operations and various other things - *) - -class A { - - var : Int <- 0; - - value() : Int { var }; - - set_var(num : Int) : A{ - { - var <- num; - self; - } - }; - - method1(num : Int) : A { -- same - self - }; - - method2(num1 : Int, num2 : Int) : A { -- plus - (let x : Int in - { - x <- num1 + num2; - (new B).set_var(x); - } - ) - }; - - method3(num : Int) : A { -- negate - (let x : Int in - { - x <- ~num; - (new C).set_var(x); - } - ) - }; - - method4(num1 : Int, num2 : Int) : A { -- diff - if num2 < num1 then - (let x : Int in - { - x <- num1 - num2; - (new D).set_var(x); - } - ) - else - (let x : Int in - { - x <- num2 - num1; - (new D).set_var(x); - } - ) - fi - }; - - method5(num : Int) : A { -- factorial - (let x : Int <- 1 in - { - (let y : Int <- 1 in - while y <= num loop - { - x <- x * y; - y <- y + 1; - } - pool - ); - (new E).set_var(x); - } - ) - }; - -}; - -class B inherits A { -- B is a number squared - - method5(num : Int) : A { -- square - (let x : Int in - { - x <- num * num; - (new E).set_var(x); - } - ) - }; - -}; - -class C inherits B { - - method6(num : Int) : A { -- negate - (let x : Int in - { - x <- ~num; - (new A).set_var(x); - } - ) - }; - - method5(num : Int) : A { -- cube - (let x : Int in - { - x <- num * num * num; - (new E).set_var(x); - } - ) - }; - -}; - -class D inherits B { - - method7(num : Int) : Bool { -- divisible by 3 - (let x : Int <- num in - if x < 0 then method7(~x) else - if 0 = x then true else - if 1 = x then false else - if 2 = x then false else - method7(x - 3) - fi fi fi fi - ) - }; - -}; - -class E inherits D { - - method6(num : Int) : A { -- division - (let x : Int in - { - x <- num / 8; - (new A).set_var(x); - } - ) - }; - -}; - -(* The following code is from atoi.cl in ~cs164/examples *) - -(* - The class A2I provides integer-to-string and string-to-integer -conversion routines. To use these routines, either inherit them -in the class where needed, have a dummy variable bound to -something of type A2I, or simpl write (new A2I).method(argument). -*) - - -(* - c2i Converts a 1-character string to an integer. Aborts - if the string is not "0" through "9" -*) -class A2I { - - c2i(char : String) : Int { - if char = "0" then 0 else - if char = "1" then 1 else - if char = "2" then 2 else - if char = "3" then 3 else - if char = "4" then 4 else - if char = "5" then 5 else - if char = "6" then 6 else - if char = "7" then 7 else - if char = "8" then 8 else - if char = "9" then 9 else - { abort(); 0; } (* the 0 is needed to satisfy the - typchecker *) - fi fi fi fi fi fi fi fi fi fi - }; - -(* - i2c is the inverse of c2i. -*) - i2c(i : Int) : String { - if i = 0 then "0" else - if i = 1 then "1" else - if i = 2 then "2" else - if i = 3 then "3" else - if i = 4 then "4" else - if i = 5 then "5" else - if i = 6 then "6" else - if i = 7 then "7" else - if i = 8 then "8" else - if i = 9 then "9" else - { abort(); ""; } -- the "" is needed to satisfy the typchecker - fi fi fi fi fi fi fi fi fi fi - }; - -(* - a2i converts an ASCII string into an integer. The empty string -is converted to 0. Signed and unsigned strings are handled. The -method aborts if the string does not represent an integer. Very -long strings of digits produce strange answers because of arithmetic -overflow. - -*) - a2i(s : String) : Int { - if s.length() = 0 then 0 else - if s.substr(0,1) = "-" then ~a2i_aux(s.substr(1,s.length()-1)) else - if s.substr(0,1) = "+" then a2i_aux(s.substr(1,s.length()-1)) else - a2i_aux(s) - fi fi fi - }; - -(* a2i_aux converts the usigned portion of the string. As a - programming example, this method is written iteratively. *) - - - a2i_aux(s : String) : Int { - (let int : Int <- 0 in - { - (let j : Int <- s.length() in - (let i : Int <- 0 in - while i < j loop - { - int <- int * 10 + c2i(s.substr(i,1)); - i <- i + 1; - } - pool - ) - ); - int; - } - ) - }; - -(* i2a converts an integer to a string. Positive and negative - numbers are handled correctly. *) - - i2a(i : Int) : String { - if i = 0 then "0" else - if 0 < i then i2a_aux(i) else - "-".concat(i2a_aux(i * ~1)) - fi fi - }; - -(* i2a_aux is an example using recursion. *) - - i2a_aux(i : Int) : String { - if i = 0 then "" else - (let next : Int <- i / 10 in - i2a_aux(next).concat(i2c(i - next * 10)) - ) - fi - }; - -}; - -class Main inherits IO { - - char : String; - avar : A; - a_var : A; - flag : Bool <- true; - - - menu() : String { - { - out_string("\n\tTo add a number to "); - print(avar); - out_string("...enter a:\n"); - out_string("\tTo negate "); - print(avar); - out_string("...enter b:\n"); - out_string("\tTo find the difference between "); - print(avar); - out_string("and another number...enter c:\n"); - out_string("\tTo find the factorial of "); - print(avar); - out_string("...enter d:\n"); - out_string("\tTo square "); - print(avar); - out_string("...enter e:\n"); - out_string("\tTo cube "); - print(avar); - out_string("...enter f:\n"); - out_string("\tTo find out if "); - print(avar); - out_string("is a multiple of 3...enter g:\n"); - out_string("\tTo divide "); - print(avar); - out_string("by 8...enter h:\n"); - out_string("\tTo get a new number...enter j:\n"); - out_string("\tTo quit...enter q:\n\n"); - in_string(); - } - }; - - prompt() : String { - { - out_string("\n"); - out_string("Please enter a number... "); - in_string(); - } - }; - - get_int() : Int { - { - (let z : A2I <- new A2I in - (let s : String <- prompt() in - z.a2i(s) - ) - ); - } - }; - - is_even(num : Int) : Bool { - (let x : Int <- num in - if x < 0 then is_even(~x) else - if 0 = x then true else - if 1 = x then false else - is_even(x - 2) - fi fi fi - ) - }; - - class_type(var : A) : IO { - case var of - a : A => out_string("Class type is now A\n"); - b : B => out_string("Class type is now B\n"); - c : C => out_string("Class type is now C\n"); - d : D => out_string("Class type is now D\n"); - e : E => out_string("Class type is now E\n"); - o : Object => out_string("Oooops\n"); - esac - }; - - print(var : A) : IO { - (let z : A2I <- new A2I in - { - out_string(z.i2a(var.value())); - out_string(" "); - } - ) - }; - - main() : Object { - { - avar <- (new A); - while flag loop - { - -- avar <- (new A).set_var(get_int()); - out_string("number "); - print(avar); - if is_even(avar.value()) then - out_string("is even!\n") - else - out_string("is odd!\n") - fi; - -- print(avar); -- prints out answer - class_type(avar); - char <- menu(); - if char = "a" then -- add - { - a_var <- (new A).set_var(get_int()); - avar <- (new B).method2(avar.value(), a_var.value()); - } else - if char = "b" then -- negate - case avar of - c : C => avar <- c.method6(c.value()); - a : A => avar <- a.method3(a.value()); - o : Object => { - out_string("Oooops\n"); - abort(); 0; - }; - esac else - if char = "c" then -- diff - { - a_var <- (new A).set_var(get_int()); - avar <- (new D).method4(avar.value(), a_var.value()); - } else - if char = "d" then avar <- (new C)@A.method5(avar.value()) else - -- factorial - if char = "e" then avar <- (new C)@B.method5(avar.value()) else - -- square - if char = "f" then avar <- (new C)@C.method5(avar.value()) else - -- cube - if char = "g" then -- multiple of 3? - if ((new D).method7(avar.value())) - then -- avar <- (new A).method1(avar.value()) - { - out_string("number "); - print(avar); - out_string("is divisible by 3.\n"); - } - else -- avar <- (new A).set_var(0) - { - out_string("number "); - print(avar); - out_string("is not divisible by 3.\n"); - } - fi else - if char = "h" then - (let x : A in - { - x <- (new E).method6(avar.value()); - (let r : Int <- (avar.value() - (x.value() * 8)) in - { - out_string("number "); - print(avar); - out_string("is equal to "); - print(x); - out_string("times 8 with a remainder of "); - (let a : A2I <- new A2I in - { - out_string(a.i2a(r)); - out_string("\n"); - } - ); -- end let a: - } - ); -- end let r: - avar <- x; - } - ) -- end let x: - else - if char = "j" then avar <- (new A) - else - if char = "q" then flag <- false - else - avar <- (new A).method1(avar.value()) -- divide/8 - fi fi fi fi fi fi fi fi fi fi; - } - pool; - } - }; - -}; - +(* + * A contribution from Anne Sheets (sheets@cory) + * + * Tests the arithmetic operations and various other things + *) + +class A { + + var : Int <- 0; + + value() : Int { var }; + + set_var(num : Int) : A{ + { + var <- num; + self; + } + }; + + method1(num : Int) : A { -- same + self + }; + + method2(num1 : Int, num2 : Int) : A { -- plus + (let x : Int in + { + x <- num1 + num2; + (new B).set_var(x); + } + ) + }; + + method3(num : Int) : A { -- negate + (let x : Int in + { + x <- ~num; + (new C).set_var(x); + } + ) + }; + + method4(num1 : Int, num2 : Int) : A { -- diff + if num2 < num1 then + (let x : Int in + { + x <- num1 - num2; + (new D).set_var(x); + } + ) + else + (let x : Int in + { + x <- num2 - num1; + (new D).set_var(x); + } + ) + fi + }; + + method5(num : Int) : A { -- factorial + (let x : Int <- 1 in + { + (let y : Int <- 1 in + while y <= num loop + { + x <- x * y; + y <- y + 1; + } + pool + ); + (new E).set_var(x); + } + ) + }; + +}; + +class B inherits A { -- B is a number squared + + method5(num : Int) : A { -- square + (let x : Int in + { + x <- num * num; + (new E).set_var(x); + } + ) + }; + +}; + +class C inherits B { + + method6(num : Int) : A { -- negate + (let x : Int in + { + x <- ~num; + (new A).set_var(x); + } + ) + }; + + method5(num : Int) : A { -- cube + (let x : Int in + { + x <- num * num * num; + (new E).set_var(x); + } + ) + }; + +}; + +class D inherits B { + + method7(num : Int) : Bool { -- divisible by 3 + (let x : Int <- num in + if x < 0 then method7(~x) else + if 0 = x then true else + if 1 = x then false else + if 2 = x then false else + method7(x - 3) + fi fi fi fi + ) + }; + +}; + +class E inherits D { + + method6(num : Int) : A { -- division + (let x : Int in + { + x <- num / 8; + (new A).set_var(x); + } + ) + }; + +}; + +(* The following code is from atoi.cl in ~cs164/examples *) + +(* + The class A2I provides integer-to-string and string-to-integer +conversion routines. To use these routines, either inherit them +in the class where needed, have a dummy variable bound to +something of type A2I, or simpl write (new A2I).method(argument). +*) + + +(* + c2i Converts a 1-character string to an integer. Aborts + if the string is not "0" through "9" +*) +class A2I { + + c2i(char : String) : Int { + if char = "0" then 0 else + if char = "1" then 1 else + if char = "2" then 2 else + if char = "3" then 3 else + if char = "4" then 4 else + if char = "5" then 5 else + if char = "6" then 6 else + if char = "7" then 7 else + if char = "8" then 8 else + if char = "9" then 9 else + { abort(); 0; } (* the 0 is needed to satisfy the + typchecker *) + fi fi fi fi fi fi fi fi fi fi + }; + +(* + i2c is the inverse of c2i. +*) + i2c(i : Int) : String { + if i = 0 then "0" else + if i = 1 then "1" else + if i = 2 then "2" else + if i = 3 then "3" else + if i = 4 then "4" else + if i = 5 then "5" else + if i = 6 then "6" else + if i = 7 then "7" else + if i = 8 then "8" else + if i = 9 then "9" else + { abort(); ""; } -- the "" is needed to satisfy the typchecker + fi fi fi fi fi fi fi fi fi fi + }; + +(* + a2i converts an ASCII string into an integer. The empty string +is converted to 0. Signed and unsigned strings are handled. The +method aborts if the string does not represent an integer. Very +long strings of digits produce strange answers because of arithmetic +overflow. + +*) + a2i(s : String) : Int { + if s.length() = 0 then 0 else + if s.substr(0,1) = "-" then ~a2i_aux(s.substr(1,s.length()-1)) else + if s.substr(0,1) = "+" then a2i_aux(s.substr(1,s.length()-1)) else + a2i_aux(s) + fi fi fi + }; + +(* a2i_aux converts the usigned portion of the string. As a + programming example, this method is written iteratively. *) + + + a2i_aux(s : String) : Int { + (let int : Int <- 0 in + { + (let j : Int <- s.length() in + (let i : Int <- 0 in + while i < j loop + { + int <- int * 10 + c2i(s.substr(i,1)); + i <- i + 1; + } + pool + ) + ); + int; + } + ) + }; + +(* i2a converts an integer to a string. Positive and negative + numbers are handled correctly. *) + + i2a(i : Int) : String { + if i = 0 then "0" else + if 0 < i then i2a_aux(i) else + "-".concat(i2a_aux(i * ~1)) + fi fi + }; + +(* i2a_aux is an example using recursion. *) + + i2a_aux(i : Int) : String { + if i = 0 then "" else + (let next : Int <- i / 10 in + i2a_aux(next).concat(i2c(i - next * 10)) + ) + fi + }; + +}; + +class Main inherits IO { + + char : String; + avar : A; + a_var : A; + flag : Bool <- true; + + + menu() : String { + { + out_string("\n\tTo add a number to "); + print(avar); + out_string("...enter a:\n"); + out_string("\tTo negate "); + print(avar); + out_string("...enter b:\n"); + out_string("\tTo find the difference between "); + print(avar); + out_string("and another number...enter c:\n"); + out_string("\tTo find the factorial of "); + print(avar); + out_string("...enter d:\n"); + out_string("\tTo square "); + print(avar); + out_string("...enter e:\n"); + out_string("\tTo cube "); + print(avar); + out_string("...enter f:\n"); + out_string("\tTo find out if "); + print(avar); + out_string("is a multiple of 3...enter g:\n"); + out_string("\tTo divide "); + print(avar); + out_string("by 8...enter h:\n"); + out_string("\tTo get a new number...enter j:\n"); + out_string("\tTo quit...enter q:\n\n"); + in_string(); + } + }; + + prompt() : String { + { + out_string("\n"); + out_string("Please enter a number... "); + in_string(); + } + }; + + get_int() : Int { + { + (let z : A2I <- new A2I in + (let s : String <- prompt() in + z.a2i(s) + ) + ); + } + }; + + is_even(num : Int) : Bool { + (let x : Int <- num in + if x < 0 then is_even(~x) else + if 0 = x then true else + if 1 = x then false else + is_even(x - 2) + fi fi fi + ) + }; + + class_type(var : A) : IO { + case var of + a : A => out_string("Class type is now A\n"); + b : B => out_string("Class type is now B\n"); + c : C => out_string("Class type is now C\n"); + d : D => out_string("Class type is now D\n"); + e : E => out_string("Class type is now E\n"); + o : Object => out_string("Oooops\n"); + esac + }; + + print(var : A) : IO { + (let z : A2I <- new A2I in + { + out_string(z.i2a(var.value())); + out_string(" "); + } + ) + }; + + main() : Object { + { + avar <- (new A); + while flag loop + { + -- avar <- (new A).set_var(get_int()); + out_string("number "); + print(avar); + if is_even(avar.value()) then + out_string("is even!\n") + else + out_string("is odd!\n") + fi; + -- print(avar); -- prints out answer + class_type(avar); + char <- menu(); + if char = "a" then -- add + { + a_var <- (new A).set_var(get_int()); + avar <- (new B).method2(avar.value(), a_var.value()); + } else + if char = "b" then -- negate + case avar of + c : C => avar <- c.method6(c.value()); + a : A => avar <- a.method3(a.value()); + o : Object => { + out_string("Oooops\n"); + abort(); 0; + }; + esac else + if char = "c" then -- diff + { + a_var <- (new A).set_var(get_int()); + avar <- (new D).method4(avar.value(), a_var.value()); + } else + if char = "d" then avar <- (new C)@A.method5(avar.value()) else + -- factorial + if char = "e" then avar <- (new C)@B.method5(avar.value()) else + -- square + if char = "f" then avar <- (new C)@C.method5(avar.value()) else + -- cube + if char = "g" then -- multiple of 3? + if ((new D).method7(avar.value())) + then -- avar <- (new A).method1(avar.value()) + { + out_string("number "); + print(avar); + out_string("is divisible by 3.\n"); + } + else -- avar <- (new A).set_var(0) + { + out_string("number "); + print(avar); + out_string("is not divisible by 3.\n"); + } + fi else + if char = "h" then + (let x : A in + { + x <- (new E).method6(avar.value()); + (let r : Int <- (avar.value() - (x.value() * 8)) in + { + out_string("number "); + print(avar); + out_string("is equal to "); + print(x); + out_string("times 8 with a remainder of "); + (let a : A2I <- new A2I in + { + out_string(a.i2a(r)); + out_string("\n"); + } + ); -- end let a: + } + ); -- end let r: + avar <- x; + } + ) -- end let x: + else + if char = "j" then avar <- (new A) + else + if char = "q" then flag <- false + else + avar <- (new A).method1(avar.value()) -- divide/8 + fi fi fi fi fi fi fi fi fi fi; + } + pool; + } + }; + +}; + diff --git a/tests/codegen/atoi.cl b/tests/codegen/atoi.cl index f4125a2f..fd8b2ea4 100644 --- a/tests/codegen/atoi.cl +++ b/tests/codegen/atoi.cl @@ -1,121 +1,121 @@ -(* - The class A2I provides integer-to-string and string-to-integer -conversion routines. To use these routines, either inherit them -in the class where needed, have a dummy variable bound to -something of type A2I, or simpl write (new A2I).method(argument). -*) - - -(* - c2i Converts a 1-character string to an integer. Aborts - if the string is not "0" through "9" -*) -class A2I { - - c2i(char : String) : Int { - if char = "0" then 0 else - if char = "1" then 1 else - if char = "2" then 2 else - if char = "3" then 3 else - if char = "4" then 4 else - if char = "5" then 5 else - if char = "6" then 6 else - if char = "7" then 7 else - if char = "8" then 8 else - if char = "9" then 9 else - { abort(); 0; } -- the 0 is needed to satisfy the typchecker - fi fi fi fi fi fi fi fi fi fi - }; - -(* - i2c is the inverse of c2i. -*) - i2c(i : Int) : String { - if i = 0 then "0" else - if i = 1 then "1" else - if i = 2 then "2" else - if i = 3 then "3" else - if i = 4 then "4" else - if i = 5 then "5" else - if i = 6 then "6" else - if i = 7 then "7" else - if i = 8 then "8" else - if i = 9 then "9" else - { abort(); ""; } -- the "" is needed to satisfy the typchecker - fi fi fi fi fi fi fi fi fi fi - }; - -(* - a2i converts an ASCII string into an integer. The empty string -is converted to 0. Signed and unsigned strings are handled. The -method aborts if the string does not represent an integer. Very -long strings of digits produce strange answers because of arithmetic -overflow. - -*) - a2i(s : String) : Int { - if s.length() = 0 then 0 else - if s.substr(0,1) = "-" then ~a2i_aux(s.substr(1,s.length()-1)) else - if s.substr(0,1) = "+" then a2i_aux(s.substr(1,s.length()-1)) else - a2i_aux(s) - fi fi fi - }; - -(* - a2i_aux converts the usigned portion of the string. As a programming -example, this method is written iteratively. -*) - a2i_aux(s : String) : Int { - (let int : Int <- 0 in - { - (let j : Int <- s.length() in - (let i : Int <- 0 in - while i < j loop - { - int <- int * 10 + c2i(s.substr(i,1)); - i <- i + 1; - } - pool - ) - ); - int; - } - ) - }; - -(* - i2a converts an integer to a string. Positive and negative -numbers are handled correctly. -*) - i2a(i : Int) : String { - if i = 0 then "0" else - if 0 < i then i2a_aux(i) else - "-".concat(i2a_aux(i * ~1)) - fi fi - }; - -(* - i2a_aux is an example using recursion. -*) - i2a_aux(i : Int) : String { - if i = 0 then "" else - (let next : Int <- i / 10 in - i2a_aux(next).concat(i2c(i - next * 10)) - ) - fi - }; - -}; - -class Main inherits IO { - main () : Object { - let a : Int <- (new A2I).a2i("678987"), - b : String <- (new A2I).i2a(678987) in - { - out_int(a) ; - out_string(" == ") ; - out_string(b) ; - out_string("\n"); - } - } ; -} ; +(* + The class A2I provides integer-to-string and string-to-integer +conversion routines. To use these routines, either inherit them +in the class where needed, have a dummy variable bound to +something of type A2I, or simpl write (new A2I).method(argument). +*) + + +(* + c2i Converts a 1-character string to an integer. Aborts + if the string is not "0" through "9" +*) +class A2I { + + c2i(char : String) : Int { + if char = "0" then 0 else + if char = "1" then 1 else + if char = "2" then 2 else + if char = "3" then 3 else + if char = "4" then 4 else + if char = "5" then 5 else + if char = "6" then 6 else + if char = "7" then 7 else + if char = "8" then 8 else + if char = "9" then 9 else + { abort(); 0; } -- the 0 is needed to satisfy the typchecker + fi fi fi fi fi fi fi fi fi fi + }; + +(* + i2c is the inverse of c2i. +*) + i2c(i : Int) : String { + if i = 0 then "0" else + if i = 1 then "1" else + if i = 2 then "2" else + if i = 3 then "3" else + if i = 4 then "4" else + if i = 5 then "5" else + if i = 6 then "6" else + if i = 7 then "7" else + if i = 8 then "8" else + if i = 9 then "9" else + { abort(); ""; } -- the "" is needed to satisfy the typchecker + fi fi fi fi fi fi fi fi fi fi + }; + +(* + a2i converts an ASCII string into an integer. The empty string +is converted to 0. Signed and unsigned strings are handled. The +method aborts if the string does not represent an integer. Very +long strings of digits produce strange answers because of arithmetic +overflow. + +*) + a2i(s : String) : Int { + if s.length() = 0 then 0 else + if s.substr(0,1) = "-" then ~a2i_aux(s.substr(1,s.length()-1)) else + if s.substr(0,1) = "+" then a2i_aux(s.substr(1,s.length()-1)) else + a2i_aux(s) + fi fi fi + }; + +(* + a2i_aux converts the usigned portion of the string. As a programming +example, this method is written iteratively. +*) + a2i_aux(s : String) : Int { + (let int : Int <- 0 in + { + (let j : Int <- s.length() in + (let i : Int <- 0 in + while i < j loop + { + int <- int * 10 + c2i(s.substr(i,1)); + i <- i + 1; + } + pool + ) + ); + int; + } + ) + }; + +(* + i2a converts an integer to a string. Positive and negative +numbers are handled correctly. +*) + i2a(i : Int) : String { + if i = 0 then "0" else + if 0 < i then i2a_aux(i) else + "-".concat(i2a_aux(i * ~1)) + fi fi + }; + +(* + i2a_aux is an example using recursion. +*) + i2a_aux(i : Int) : String { + if i = 0 then "" else + (let next : Int <- i / 10 in + i2a_aux(next).concat(i2c(i - next * 10)) + ) + fi + }; + +}; + +class Main inherits IO { + main () : Object { + let a : Int <- (new A2I).a2i("678987"), + b : String <- (new A2I).i2a(678987) in + { + out_int(a) ; + out_string(" == ") ; + out_string(b) ; + out_string("\n"); + } + } ; +} ; diff --git a/tests/codegen/atoi2.cl b/tests/codegen/atoi2.cl index 47e9d0fa..577aa29f 100644 --- a/tests/codegen/atoi2.cl +++ b/tests/codegen/atoi2.cl @@ -1,92 +1,92 @@ -class JustThere { -- class can have no features. -}; - -class A2I { - - c2i(char : String) : Int { - if char = "0" then 0 else - if char = "1" then 1 else - if char = "2" then 2 else - if char = "3" then 3 else - if char = "4" then 4 else - if char = "5" then 5 else - if char = "6" then 6 else - if char = "7" then 7 else - if char = "8" then 8 else - if char = "9" then 9 else - { abort(); 0; } -- Here the formal list is optional. - fi fi fi fi fi fi fi fi fi fi - }; - - - i2c(i : Int) : String { - if i = 0 then "0" else - if i = 1 then "1" else - if i = 2 then "2" else - if i = 3 then "3" else - if i = 4 then "4" else - if i = 5 then "5" else - if i = 6 then "6" else - if i = 7 then "7" else - if i = 8 then "8" else - if i = 9 then "9" else - { abort(); ""; } -- demonstrates an expression block - fi fi fi fi fi fi fi fi fi fi - }; - - a2i(s : String) : Int { - if s.length() = 0 then 0 else - if s.substr(0,1) = "-" then ~a2i_aux(s.substr(1,s.length()-1)) else - if s.substr(0,1) = "+" then a2i_aux(s.substr(1,s.length()-1)) else - a2i_aux(s) - fi fi fi - }; - - a2i_aux(s : String) : Int { - (let int : Int <- 0 in - { - (let j : Int <- s.length() in - (let i : Int <- 0 in - while i < j loop - { - int <- int * 10 + c2i(s.substr(i,1)); -- demonstrates dispatch - i <- i + 1; - } - pool - ) - ); - int; - } - ) - }; - - i2a(i : Int) : String { - if i = 0 then "0" else - if 0 < i then i2a_aux(i) else - "-".concat(i2a_aux(i * ~1)) - fi fi - }; - - - i2a_aux(i : Int) : String { - if i = 0 then "" else - (let next : Int <- i / 10 in - i2a_aux(next).concat(i2c(i - next * 10)) - ) - fi - }; - -}; - -class Main inherits IO { - main () : Object { - let a : Int <- (new A2I).a2i("678987"), - b : String <- (new A2I).i2a(678987) in -- the let expression. Translated to let a: ... in let b: ... in expr. - { - out_int(a) ; - out_string(" == ") ; - out_string(b) ; - out_string("\n"); - } - } ; -} ; +class JustThere { -- class can have no features. +}; + +class A2I { + + c2i(char : String) : Int { + if char = "0" then 0 else + if char = "1" then 1 else + if char = "2" then 2 else + if char = "3" then 3 else + if char = "4" then 4 else + if char = "5" then 5 else + if char = "6" then 6 else + if char = "7" then 7 else + if char = "8" then 8 else + if char = "9" then 9 else + { abort(); 0; } -- Here the formal list is optional. + fi fi fi fi fi fi fi fi fi fi + }; + + + i2c(i : Int) : String { + if i = 0 then "0" else + if i = 1 then "1" else + if i = 2 then "2" else + if i = 3 then "3" else + if i = 4 then "4" else + if i = 5 then "5" else + if i = 6 then "6" else + if i = 7 then "7" else + if i = 8 then "8" else + if i = 9 then "9" else + { abort(); ""; } -- demonstrates an expression block + fi fi fi fi fi fi fi fi fi fi + }; + + a2i(s : String) : Int { + if s.length() = 0 then 0 else + if s.substr(0,1) = "-" then ~a2i_aux(s.substr(1,s.length()-1)) else + if s.substr(0,1) = "+" then a2i_aux(s.substr(1,s.length()-1)) else + a2i_aux(s) + fi fi fi + }; + + a2i_aux(s : String) : Int { + (let int : Int <- 0 in + { + (let j : Int <- s.length() in + (let i : Int <- 0 in + while i < j loop + { + int <- int * 10 + c2i(s.substr(i,1)); -- demonstrates dispatch + i <- i + 1; + } + pool + ) + ); + int; + } + ) + }; + + i2a(i : Int) : String { + if i = 0 then "0" else + if 0 < i then i2a_aux(i) else + "-".concat(i2a_aux(i * ~1)) + fi fi + }; + + + i2a_aux(i : Int) : String { + if i = 0 then "" else + (let next : Int <- i / 10 in + i2a_aux(next).concat(i2c(i - next * 10)) + ) + fi + }; + +}; + +class Main inherits IO { + main () : Object { + let a : Int <- (new A2I).a2i("678987"), + b : String <- (new A2I).i2a(678987) in -- the let expression. Translated to let a: ... in let b: ... in expr. + { + out_int(a) ; + out_string(" == ") ; + out_string(b) ; + out_string("\n"); + } + } ; +} ; diff --git a/tests/codegen/book_list.cl b/tests/codegen/book_list.cl index 025ea169..d39f86bb 100644 --- a/tests/codegen/book_list.cl +++ b/tests/codegen/book_list.cl @@ -1,132 +1,132 @@ --- example of static and dynamic type differing for a dispatch - -Class Book inherits IO { - title : String; - author : String; - - initBook(title_p : String, author_p : String) : Book { - { - title <- title_p; - author <- author_p; - self; - } - }; - - print() : Book { - { - out_string("title: ").out_string(title).out_string("\n"); - out_string("author: ").out_string(author).out_string("\n"); - self; - } - }; -}; - -Class Article inherits Book { - per_title : String; - - initArticle(title_p : String, author_p : String, - per_title_p : String) : Article { - { - initBook(title_p, author_p); - per_title <- per_title_p; - self; - } - }; - - print() : Book { - { - self@Book.print(); - out_string("periodical: ").out_string(per_title).out_string("\n"); - self; - } - }; -}; - -Class BookList inherits IO { - (* Since abort "returns" type Object, we have to add - an expression of type Bool here to satisfy the typechecker. - This code is unreachable, since abort() halts the program. - *) - isNil() : Bool { { abort(); true; } }; - - cons(hd : Book) : Cons { - (let new_cell : Cons <- new Cons in - new_cell.init(hd,self) - ) - }; - - (* Since abort "returns" type Object, we have to add - an expression of type Book here to satisfy the typechecker. - This code is unreachable, since abort() halts the program. - *) - car() : Book { { abort(); new Book; } }; - - (* Since abort "returns" type Object, we have to add - an expression of type BookList here to satisfy the typechecker. - This code is unreachable, since abort() halts the program. - *) - cdr() : BookList { { abort(); new BookList; } }; - - print_list() : Object { abort() }; -}; - -Class Cons inherits BookList { - xcar : Book; -- We keep the car and cdr in attributes. - xcdr : BookList; -- Because methods and features must have different names, - -- we use xcar and xcdr for the attributes and reserve - -- car and cdr for the features. - - isNil() : Bool { false }; - - init(hd : Book, tl : BookList) : Cons { - { - xcar <- hd; - xcdr <- tl; - self; - } - }; - - car() : Book { xcar }; - - cdr() : BookList { xcdr }; - - print_list() : Object { - { - case xcar.print() of - dummy : Book => out_string("- dynamic type was Book -\n"); - dummy : Article => out_string("- dynamic type was Article -\n"); - esac; - xcdr.print_list(); - } - }; -}; - -Class Nil inherits BookList { - isNil() : Bool { true }; - - print_list() : Object { true }; -}; - - -Class Main { - - books : BookList; - - main() : Object { - (let a_book : Book <- - (new Book).initBook("Compilers, Principles, Techniques, and Tools", - "Aho, Sethi, and Ullman") - in - (let an_article : Article <- - (new Article).initArticle("The Top 100 CD_ROMs", - "Ulanoff", - "PC Magazine") - in - { - books <- (new Nil).cons(a_book).cons(an_article); - books.print_list(); - } - ) -- end let an_article - ) -- end let a_book - }; -}; +-- example of static and dynamic type differing for a dispatch + +Class Book inherits IO { + title : String; + author : String; + + initBook(title_p : String, author_p : String) : Book { + { + title <- title_p; + author <- author_p; + self; + } + }; + + print() : Book { + { + out_string("title: ").out_string(title).out_string("\n"); + out_string("author: ").out_string(author).out_string("\n"); + self; + } + }; +}; + +Class Article inherits Book { + per_title : String; + + initArticle(title_p : String, author_p : String, + per_title_p : String) : Article { + { + initBook(title_p, author_p); + per_title <- per_title_p; + self; + } + }; + + print() : Book { + { + self@Book.print(); + out_string("periodical: ").out_string(per_title).out_string("\n"); + self; + } + }; +}; + +Class BookList inherits IO { + (* Since abort "returns" type Object, we have to add + an expression of type Bool here to satisfy the typechecker. + This code is unreachable, since abort() halts the program. + *) + isNil() : Bool { { abort(); true; } }; + + cons(hd : Book) : Cons { + (let new_cell : Cons <- new Cons in + new_cell.init(hd,self) + ) + }; + + (* Since abort "returns" type Object, we have to add + an expression of type Book here to satisfy the typechecker. + This code is unreachable, since abort() halts the program. + *) + car() : Book { { abort(); new Book; } }; + + (* Since abort "returns" type Object, we have to add + an expression of type BookList here to satisfy the typechecker. + This code is unreachable, since abort() halts the program. + *) + cdr() : BookList { { abort(); new BookList; } }; + + print_list() : Object { abort() }; +}; + +Class Cons inherits BookList { + xcar : Book; -- We keep the car and cdr in attributes. + xcdr : BookList; -- Because methods and features must have different names, + -- we use xcar and xcdr for the attributes and reserve + -- car and cdr for the features. + + isNil() : Bool { false }; + + init(hd : Book, tl : BookList) : Cons { + { + xcar <- hd; + xcdr <- tl; + self; + } + }; + + car() : Book { xcar }; + + cdr() : BookList { xcdr }; + + print_list() : Object { + { + case xcar.print() of + dummy : Book => out_string("- dynamic type was Book -\n"); + dummy : Article => out_string("- dynamic type was Article -\n"); + esac; + xcdr.print_list(); + } + }; +}; + +Class Nil inherits BookList { + isNil() : Bool { true }; + + print_list() : Object { true }; +}; + + +Class Main { + + books : BookList; + + main() : Object { + (let a_book : Book <- + (new Book).initBook("Compilers, Principles, Techniques, and Tools", + "Aho, Sethi, and Ullman") + in + (let an_article : Article <- + (new Article).initArticle("The Top 100 CD_ROMs", + "Ulanoff", + "PC Magazine") + in + { + books <- (new Nil).cons(a_book).cons(an_article); + books.print_list(); + } + ) -- end let an_article + ) -- end let a_book + }; +}; diff --git a/tests/codegen/cells.cl b/tests/codegen/cells.cl index 9fd6741b..bcd89149 100644 --- a/tests/codegen/cells.cl +++ b/tests/codegen/cells.cl @@ -1,97 +1,97 @@ -(* models one-dimensional cellular automaton on a circle of finite radius - arrays are faked as Strings, - X's respresent live cells, dots represent dead cells, - no error checking is done *) -class CellularAutomaton inherits IO { - population_map : String; - - init(map : String) : CellularAutomaton { - { - population_map <- map; - self; - } - }; - - print() : CellularAutomaton { - { - out_string(population_map.concat("\n")); - self; - } - }; - - num_cells() : Int { - population_map.length() - }; - - cell(position : Int) : String { - population_map.substr(position, 1) - }; - - cell_left_neighbor(position : Int) : String { - if position = 0 then - cell(num_cells() - 1) - else - cell(position - 1) - fi - }; - - cell_right_neighbor(position : Int) : String { - if position = num_cells() - 1 then - cell(0) - else - cell(position + 1) - fi - }; - - (* a cell will live if exactly 1 of itself and it's immediate - neighbors are alive *) - cell_at_next_evolution(position : Int) : String { - if (if cell(position) = "X" then 1 else 0 fi - + if cell_left_neighbor(position) = "X" then 1 else 0 fi - + if cell_right_neighbor(position) = "X" then 1 else 0 fi - = 1) - then - "X" - else - "." - fi - }; - - evolve() : CellularAutomaton { - (let position : Int in - (let num : Int <- num_cells() in - (let temp : String in - { - while position < num loop - { - temp <- temp.concat(cell_at_next_evolution(position)); - position <- position + 1; - } - pool; - population_map <- temp; - self; - } - ) ) ) - }; -}; - -class Main { - cells : CellularAutomaton; - - main() : Main { - { - cells <- (new CellularAutomaton).init(" X "); - cells.print(); - (let countdown : Int <- 20 in - while 0 < countdown loop - { - cells.evolve(); - cells.print(); - countdown <- countdown - 1; - } - pool - ); - self; - } - }; -}; +(* models one-dimensional cellular automaton on a circle of finite radius + arrays are faked as Strings, + X's respresent live cells, dots represent dead cells, + no error checking is done *) +class CellularAutomaton inherits IO { + population_map : String; + + init(map : String) : CellularAutomaton { + { + population_map <- map; + self; + } + }; + + print() : CellularAutomaton { + { + out_string(population_map.concat("\n")); + self; + } + }; + + num_cells() : Int { + population_map.length() + }; + + cell(position : Int) : String { + population_map.substr(position, 1) + }; + + cell_left_neighbor(position : Int) : String { + if position = 0 then + cell(num_cells() - 1) + else + cell(position - 1) + fi + }; + + cell_right_neighbor(position : Int) : String { + if position = num_cells() - 1 then + cell(0) + else + cell(position + 1) + fi + }; + + (* a cell will live if exactly 1 of itself and it's immediate + neighbors are alive *) + cell_at_next_evolution(position : Int) : String { + if (if cell(position) = "X" then 1 else 0 fi + + if cell_left_neighbor(position) = "X" then 1 else 0 fi + + if cell_right_neighbor(position) = "X" then 1 else 0 fi + = 1) + then + "X" + else + "." + fi + }; + + evolve() : CellularAutomaton { + (let position : Int in + (let num : Int <- num_cells() in + (let temp : String in + { + while position < num loop + { + temp <- temp.concat(cell_at_next_evolution(position)); + position <- position + 1; + } + pool; + population_map <- temp; + self; + } + ) ) ) + }; +}; + +class Main { + cells : CellularAutomaton; + + main() : Main { + { + cells <- (new CellularAutomaton).init(" X "); + cells.print(); + (let countdown : Int <- 20 in + while 0 < countdown loop + { + cells.evolve(); + cells.print(); + countdown <- countdown - 1; + } + pool + ); + self; + } + }; +}; diff --git a/tests/codegen/complex.cl b/tests/codegen/complex.cl index 0b7aa44e..9edb6151 100644 --- a/tests/codegen/complex.cl +++ b/tests/codegen/complex.cl @@ -1,52 +1,52 @@ -class Main inherits IO { - main() : IO { - (let c : Complex <- (new Complex).init(1, 1) in - if c.reflect_X().reflect_Y() = c.reflect_0() - then out_string("=)\n") - else out_string("=(\n") - fi - ) - }; -}; - -class Complex inherits IO { - x : Int; - y : Int; - - init(a : Int, b : Int) : Complex { - { - x = a; - y = b; - self; - } - }; - - print() : Object { - if y = 0 - then out_int(x) - else out_int(x).out_string("+").out_int(y).out_string("I") - fi - }; - - reflect_0() : Complex { - { - x = ~x; - y = ~y; - self; - } - }; - - reflect_X() : Complex { - { - y = ~y; - self; - } - }; - - reflect_Y() : Complex { - { - x = ~x; - self; - } - }; -}; +class Main inherits IO { + main() : IO { + (let c : Complex <- (new Complex).init(1, 1) in + if c.reflect_X().reflect_Y() = c.reflect_0() + then out_string("=)\n") + else out_string("=(\n") + fi + ) + }; +}; + +class Complex inherits IO { + x : Int; + y : Int; + + init(a : Int, b : Int) : Complex { + { + x = a; + y = b; + self; + } + }; + + print() : Object { + if y = 0 + then out_int(x) + else out_int(x).out_string("+").out_int(y).out_string("I") + fi + }; + + reflect_0() : Complex { + { + x = ~x; + y = ~y; + self; + } + }; + + reflect_X() : Complex { + { + y = ~y; + self; + } + }; + + reflect_Y() : Complex { + { + x = ~x; + self; + } + }; +}; diff --git a/tests/codegen/fib.cl b/tests/codegen/fib.cl index 08ceaede..ced8cee4 100644 --- a/tests/codegen/fib.cl +++ b/tests/codegen/fib.cl @@ -1,29 +1,29 @@ -class Main inherits IO { - -- the class has features. Only methods in this case. - main(): Object { - { - out_string("Enter n to find nth fibonacci number!\n"); - out_int(fib(in_int())); - out_string("\n"); - } - }; - - fib(i : Int) : Int { -- list of formals. And the return type of the method. - let a : Int <- 1, - b : Int <- 0, - c : Int <- 0 - in - { - while (not (i = 0)) loop -- expressions are nested. - { - c <- a + b; - i <- i - 1; - b <- a; - a <- c; - } - pool; - c; - } - }; - -}; +class Main inherits IO { + -- the class has features. Only methods in this case. + main(): Object { + { + out_string("Enter n to find nth fibonacci number!\n"); + out_int(fib(in_int())); + out_string("\n"); + } + }; + + fib(i : Int) : Int { -- list of formals. And the return type of the method. + let a : Int <- 1, + b : Int <- 0, + c : Int <- 0 + in + { + while (not (i = 0)) loop -- expressions are nested. + { + c <- a + b; + i <- i - 1; + b <- a; + a <- c; + } + pool; + c; + } + }; + +}; diff --git a/tests/codegen/graph.cl b/tests/codegen/graph.cl index 8e511358..59e29bbf 100644 --- a/tests/codegen/graph.cl +++ b/tests/codegen/graph.cl @@ -1,381 +1,381 @@ -(* - * Cool program reading descriptions of weighted directed graphs - * from stdin. It builds up a graph objects with a list of vertices - * and a list of edges. Every vertice has a list of outgoing edges. - * - * INPUT FORMAT - * Every line has the form vertice successor* - * Where vertice is an int, and successor is vertice,weight - * - * An empty line or EOF terminates the input. - * - * The list of vertices and the edge list is printed out by the Main - * class. - * - * TEST - * Once compiled, the file g1.graph can be fed to the program. - * The output should look like this: - -nautilus.CS.Berkeley.EDU 53# spim -file graph.s (new Bar); - n : Foo => (new Razz); - n : Bar => n; - esac; - - b : Int <- a.doh() + g.doh() + doh() + printh(); - - doh() : Int { (let i : Int <- h in { h <- h + 2; i; } ) }; - -}; - -class Bar inherits Razz { - - c : Int <- doh(); - - d : Object <- printh(); -}; - - -class Razz inherits Foo { - - e : Bar <- case self of - n : Razz => (new Bar); - n : Bar => n; - esac; - - f : Int <- a@Bazz.doh() + g.doh() + e.doh() + doh() + printh(); - -}; - -class Bazz inherits IO { - - h : Int <- 1; - - g : Foo <- case self of - n : Bazz => (new Foo); - n : Razz => (new Bar); - n : Foo => (new Razz); - n : Bar => n; - esac; - - i : Object <- printh(); - - printh() : Int { { out_int(h); 0; } }; - - doh() : Int { (let i: Int <- h in { h <- h + 1; i; } ) }; -}; - -(* scary . . . *) -class Main { - a : Bazz <- new Bazz; - b : Foo <- new Foo; - c : Razz <- new Razz; - d : Bar <- new Bar; - - main(): String { "do nothing" }; - -}; - - - - - +(* hairy . . .*) + +class Foo inherits Bazz { + a : Razz <- case self of + n : Razz => (new Bar); + n : Foo => (new Razz); + n : Bar => n; + esac; + + b : Int <- a.doh() + g.doh() + doh() + printh(); + + doh() : Int { (let i : Int <- h in { h <- h + 2; i; } ) }; + +}; + +class Bar inherits Razz { + + c : Int <- doh(); + + d : Object <- printh(); +}; + + +class Razz inherits Foo { + + e : Bar <- case self of + n : Razz => (new Bar); + n : Bar => n; + esac; + + f : Int <- a@Bazz.doh() + g.doh() + e.doh() + doh() + printh(); + +}; + +class Bazz inherits IO { + + h : Int <- 1; + + g : Foo <- case self of + n : Bazz => (new Foo); + n : Razz => (new Bar); + n : Foo => (new Razz); + n : Bar => n; + esac; + + i : Object <- printh(); + + printh() : Int { { out_int(h); 0; } }; + + doh() : Int { (let i: Int <- h in { h <- h + 1; i; } ) }; +}; + +(* scary . . . *) +class Main { + a : Bazz <- new Bazz; + b : Foo <- new Foo; + c : Razz <- new Razz; + d : Bar <- new Bar; + + main(): String { "do nothing" }; + +}; + + + + + diff --git a/tests/codegen/hello_world.cl b/tests/codegen/hello_world.cl index 0c818f90..b0a180a2 100644 --- a/tests/codegen/hello_world.cl +++ b/tests/codegen/hello_world.cl @@ -1,5 +1,5 @@ -class Main inherits IO { - main(): IO { - out_string("Hello, World.\n") - }; -}; +class Main inherits IO { + main(): IO { + out_string("Hello, World.\n") + }; +}; diff --git a/tests/codegen/helloworld.cl b/tests/codegen/helloworld.cl index 61d42108..41bc1d44 100644 --- a/tests/codegen/helloworld.cl +++ b/tests/codegen/helloworld.cl @@ -1,6 +1,6 @@ -class Main { - main():IO { - new IO.out_string("Hello world!\n") - }; -}; - +class Main { + main():IO { + new IO.out_string("Hello world!\n") + }; +}; + diff --git a/tests/codegen/io.cl b/tests/codegen/io.cl index 7f0de869..42ee6854 100644 --- a/tests/codegen/io.cl +++ b/tests/codegen/io.cl @@ -1,103 +1,103 @@ -(* - * The IO class is predefined and has 4 methods: - * - * out_string(s : String) : SELF_TYPE - * out_int(i : Int) : SELF_TYPE - * in_string() : String - * in_int() : Int - * - * The out operations print their argument to the terminal. The - * in_string method reads an entire line from the terminal and returns a - * string not containing the new line. The in_int method also reads - * an entire line from the terminal and returns the integer - * corresponding to the first non blank word on the line. If that - * word is not an integer, it returns 0. - * - * - * Because our language is object oriented, we need an object of type - * IO in order to call any of these methods. - * - * There are basically two ways of getting access to IO in a class C. - * - * 1) Define C to Inherit from IO. This way the IO methods become - * methods of C, and they can be called using the abbreviated - * dispatch, i.e. - * - * class C inherits IO is - * ... - * out_string("Hello world\n") - * ... - * end; - * - * 2) If your class C does not directly or indirectly inherit from - * IO, the best way to access IO is through an initialized - * attribute of type IO. - * - * class C inherits Foo is - * io : IO <- new IO; - * ... - * io.out_string("Hello world\n"); - * ... - * end; - * - * Approach 1) is most often used, in particular when you need IO - * functions in the Main class. - * - *) - - -class A { - - -- Let's assume that we don't want A to not inherit from IO. - - io : IO <- new IO; - - out_a() : Object { io.out_string("A: Hello world\n") }; - -}; - - -class B inherits A { - - -- B does not have to an extra attribute, since it inherits io from A. - - out_b() : Object { io.out_string("B: Hello world\n") }; - -}; - - -class C inherits IO { - - -- Now the IO methods are part of C. - - out_c() : Object { out_string("C: Hello world\n") }; - - -- Note that out_string(...) is just a shorthand for self.out_string(...) - -}; - - -class D inherits C { - - -- Inherits IO methods from C. - - out_d() : Object { out_string("D: Hello world\n") }; - -}; - - -class Main inherits IO { - - -- Same case as class C. - - main() : Object { - { - (new A).out_a(); - (new B).out_b(); - (new C).out_c(); - (new D).out_d(); - out_string("Done.\n"); - } - }; - -}; +(* + * The IO class is predefined and has 4 methods: + * + * out_string(s : String) : SELF_TYPE + * out_int(i : Int) : SELF_TYPE + * in_string() : String + * in_int() : Int + * + * The out operations print their argument to the terminal. The + * in_string method reads an entire line from the terminal and returns a + * string not containing the new line. The in_int method also reads + * an entire line from the terminal and returns the integer + * corresponding to the first non blank word on the line. If that + * word is not an integer, it returns 0. + * + * + * Because our language is object oriented, we need an object of type + * IO in order to call any of these methods. + * + * There are basically two ways of getting access to IO in a class C. + * + * 1) Define C to Inherit from IO. This way the IO methods become + * methods of C, and they can be called using the abbreviated + * dispatch, i.e. + * + * class C inherits IO is + * ... + * out_string("Hello world\n") + * ... + * end; + * + * 2) If your class C does not directly or indirectly inherit from + * IO, the best way to access IO is through an initialized + * attribute of type IO. + * + * class C inherits Foo is + * io : IO <- new IO; + * ... + * io.out_string("Hello world\n"); + * ... + * end; + * + * Approach 1) is most often used, in particular when you need IO + * functions in the Main class. + * + *) + + +class A { + + -- Let's assume that we don't want A to not inherit from IO. + + io : IO <- new IO; + + out_a() : Object { io.out_string("A: Hello world\n") }; + +}; + + +class B inherits A { + + -- B does not have to an extra attribute, since it inherits io from A. + + out_b() : Object { io.out_string("B: Hello world\n") }; + +}; + + +class C inherits IO { + + -- Now the IO methods are part of C. + + out_c() : Object { out_string("C: Hello world\n") }; + + -- Note that out_string(...) is just a shorthand for self.out_string(...) + +}; + + +class D inherits C { + + -- Inherits IO methods from C. + + out_d() : Object { out_string("D: Hello world\n") }; + +}; + + +class Main inherits IO { + + -- Same case as class C. + + main() : Object { + { + (new A).out_a(); + (new B).out_b(); + (new C).out_c(); + (new D).out_d(); + out_string("Done.\n"); + } + }; + +}; diff --git a/tests/codegen/life.cl b/tests/codegen/life.cl index b83d9795..7d7a41fd 100644 --- a/tests/codegen/life.cl +++ b/tests/codegen/life.cl @@ -1,436 +1,436 @@ -(* The Game of Life - Tendo Kayiira, Summer '95 - With code taken from /private/cool/class/examples/cells.cl - - This introduction was taken off the internet. It gives a brief - description of the Game Of Life. It also gives the rules by which - this particular game follows. - - Introduction - - John Conway's Game of Life is a mathematical amusement, but it - is also much more: an insight into how a system of simple - cellualar automata can create complex, odd, and often aesthetically - pleasing patterns. It is played on a cartesian grid of cells - which are either 'on' or 'off' The game gets it's name from the - similarity between the behaviour of these cells and the behaviour - of living organisms. - - The Rules - - The playfield is a cartesian grid of arbitrary size. Each cell in - this grid can be in an 'on' state or an 'off' state. On each 'turn' - (called a generation,) the state of each cell changes simultaneously - depending on it's state and the state of all cells adjacent to it. - - For 'on' cells, - If the cell has 0 or 1 neighbours which are 'on', the cell turns - 'off'. ('dies of loneliness') - If the cell has 2 or 3 neighbours which are 'on', the cell stays - 'on'. (nothing happens to that cell) - If the cell has 4, 5, 6, 7, 8, or 9 neighbours which are 'on', - the cell turns 'off'. ('dies of overcrowding') - - For 'off' cells, - If the cell has 0, 1, 2, 4, 5, 6, 7, 8, or 9 neighbours which - are 'on', the cell stays 'off'. (nothing happens to that cell) - If the cell has 3 neighbours which are 'on', the cell turns - 'on'. (3 neighbouring 'alive' cells 'give birth' to a fourth.) - - Repeat for as many generations as desired. - - *) - - -class Board inherits IO { - - rows : Int; - columns : Int; - board_size : Int; - - size_of_board(initial : String) : Int { - initial.length() - }; - - board_init(start : String) : Board { - (let size :Int <- size_of_board(start) in - { - if size = 15 then - { - rows <- 3; - columns <- 5; - board_size <- size; - } - else if size = 16 then - { - rows <- 4; - columns <- 4; - board_size <- size; - } - else if size = 20 then - { - rows <- 4; - columns <- 5; - board_size <- size; - } - else if size = 21 then - { - rows <- 3; - columns <- 7; - board_size <- size; - } - else if size = 25 then - { - rows <- 5; - columns <- 5; - board_size <- size; - } - else if size = 28 then - { - rows <- 7; - columns <- 4; - board_size <- size; - } - else -- If none of the above fit, then just give - { -- the configuration of the most common board - rows <- 5; - columns <- 5; - board_size <- size; - } - fi fi fi fi fi fi; - self; - } - ) - }; - -}; - - - -class CellularAutomaton inherits Board { - population_map : String; - - init(map : String) : CellularAutomaton { - { - population_map <- map; - board_init(map); - self; - } - }; - - - - - print() : CellularAutomaton { - - (let i : Int <- 0 in - (let num : Int <- board_size in - { - out_string("\n"); - while i < num loop - { - out_string(population_map.substr(i,columns)); - out_string("\n"); - i <- i + columns; - } - pool; - out_string("\n"); - self; - } - ) ) - }; - - num_cells() : Int { - population_map.length() - }; - - cell(position : Int) : String { - if board_size - 1 < position then - " " - else - population_map.substr(position, 1) - fi - }; - - north(position : Int): String { - if (position - columns) < 0 then - " " - else - cell(position - columns) - fi - }; - - south(position : Int): String { - if board_size < (position + columns) then - " " - else - cell(position + columns) - fi - }; - - east(position : Int): String { - if (((position + 1) /columns ) * columns) = (position + 1) then - " " - else - cell(position + 1) - fi - }; - - west(position : Int): String { - if position = 0 then - " " - else - if ((position / columns) * columns) = position then - " " - else - cell(position - 1) - fi fi - }; - - northwest(position : Int): String { - if (position - columns) < 0 then - " " - else if ((position / columns) * columns) = position then - " " - else - north(position - 1) - fi fi - }; - - northeast(position : Int): String { - if (position - columns) < 0 then - " " - else if (((position + 1) /columns ) * columns) = (position + 1) then - " " - else - north(position + 1) - fi fi - }; - - southeast(position : Int): String { - if board_size < (position + columns) then - " " - else if (((position + 1) /columns ) * columns) = (position + 1) then - " " - else - south(position + 1) - fi fi - }; - - southwest(position : Int): String { - if board_size < (position + columns) then - " " - else if ((position / columns) * columns) = position then - " " - else - south(position - 1) - fi fi - }; - - neighbors(position: Int): Int { - { - if north(position) = "X" then 1 else 0 fi - + if south(position) = "X" then 1 else 0 fi - + if east(position) = "X" then 1 else 0 fi - + if west(position) = "X" then 1 else 0 fi - + if northeast(position) = "X" then 1 else 0 fi - + if northwest(position) = "X" then 1 else 0 fi - + if southeast(position) = "X" then 1 else 0 fi - + if southwest(position) = "X" then 1 else 0 fi; - } - }; - - -(* A cell will live if 2 or 3 of it's neighbors are alive. It dies - otherwise. A cell is born if only 3 of it's neighbors are alive. *) - - cell_at_next_evolution(position : Int) : String { - - if neighbors(position) = 3 then - "X" - else - if neighbors(position) = 2 then - if cell(position) = "X" then - "X" - else - "-" - fi - else - "-" - fi fi - }; - - - evolve() : CellularAutomaton { - (let position : Int <- 0 in - (let num : Int <- num_cells() in - (let temp : String in - { - while position < num loop - { - temp <- temp.concat(cell_at_next_evolution(position)); - position <- position + 1; - } - pool; - population_map <- temp; - self; - } - ) ) ) - }; - -(* This is where the background pattern is detremined by the user. More - patterns can be added as long as whoever adds keeps the board either - 3x5, 4x5, 5x5, 3x7, 7x4, 4x4 with the row first then column. *) - option(): String { - { - (let num : Int in - { - out_string("\nPlease chose a number:\n"); - out_string("\t1: A cross\n"); - out_string("\t2: A slash from the upper left to lower right\n"); - out_string("\t3: A slash from the upper right to lower left\n"); - out_string("\t4: An X\n"); - out_string("\t5: A greater than sign \n"); - out_string("\t6: A less than sign\n"); - out_string("\t7: Two greater than signs\n"); - out_string("\t8: Two less than signs\n"); - out_string("\t9: A 'V'\n"); - out_string("\t10: An inverse 'V'\n"); - out_string("\t11: Numbers 9 and 10 combined\n"); - out_string("\t12: A full grid\n"); - out_string("\t13: A 'T'\n"); - out_string("\t14: A plus '+'\n"); - out_string("\t15: A 'W'\n"); - out_string("\t16: An 'M'\n"); - out_string("\t17: An 'E'\n"); - out_string("\t18: A '3'\n"); - out_string("\t19: An 'O'\n"); - out_string("\t20: An '8'\n"); - out_string("\t21: An 'S'\n"); - out_string("Your choice => "); - num <- in_int(); - out_string("\n"); - if num = 1 then - " XX XXXX XXXX XX " - else if num = 2 then - " X X X X X " - else if num = 3 then - "X X X X X" - else if num = 4 then - "X X X X X X X X X" - else if num = 5 then - "X X X X X " - else if num = 6 then - " X X X X X" - else if num = 7 then - "X X X XX X " - else if num = 8 then - " X XX X X X " - else if num = 9 then - "X X X X X " - else if num = 10 then - " X X X X X" - else if num = 11 then - "X X X X X X X X" - else if num = 12 then - "XXXXXXXXXXXXXXXXXXXXXXXXX" - else if num = 13 then - "XXXXX X X X X " - else if num = 14 then - " X X XXXXX X X " - else if num = 15 then - "X X X X X X X " - else if num = 16 then - " X X X X X X X" - else if num = 17 then - "XXXXX X XXXXX X XXXX" - else if num = 18 then - "XXX X X X X XXXX " - else if num = 19 then - " XX X XX X XX " - else if num = 20 then - " XX X XX X XX X XX X XX " - else if num = 21 then - " XXXX X XX X XXXX " - else - " " - fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi; - } - ); - } - }; - - - - - prompt() : Bool { - { - (let ans : String in - { - out_string("Would you like to continue with the next generation? \n"); - out_string("Please use lowercase y or n for your answer [y]: "); - ans <- in_string(); - out_string("\n"); - if ans = "n" then - false - else - true - fi; - } - ); - } - }; - - - prompt2() : Bool { - (let ans : String in - { - out_string("\n\n"); - out_string("Would you like to choose a background pattern? \n"); - out_string("Please use lowercase y or n for your answer [n]: "); - ans <- in_string(); - if ans = "y" then - true - else - false - fi; - } - ) - }; - - -}; - -class Main inherits CellularAutomaton { - cells : CellularAutomaton; - - main() : Main { - { - (let continue : Bool in - (let choice : String in - { - out_string("Welcome to the Game of Life.\n"); - out_string("There are many initial states to choose from. \n"); - while prompt2() loop - { - continue <- true; - choice <- option(); - cells <- (new CellularAutomaton).init(choice); - cells.print(); - while continue loop - if prompt() then - { - cells.evolve(); - cells.print(); - } - else - continue <- false - fi - pool; - } - pool; - self; - } ) ); } - }; -}; - +(* The Game of Life + Tendo Kayiira, Summer '95 + With code taken from /private/cool/class/examples/cells.cl + + This introduction was taken off the internet. It gives a brief + description of the Game Of Life. It also gives the rules by which + this particular game follows. + + Introduction + + John Conway's Game of Life is a mathematical amusement, but it + is also much more: an insight into how a system of simple + cellualar automata can create complex, odd, and often aesthetically + pleasing patterns. It is played on a cartesian grid of cells + which are either 'on' or 'off' The game gets it's name from the + similarity between the behaviour of these cells and the behaviour + of living organisms. + + The Rules + + The playfield is a cartesian grid of arbitrary size. Each cell in + this grid can be in an 'on' state or an 'off' state. On each 'turn' + (called a generation,) the state of each cell changes simultaneously + depending on it's state and the state of all cells adjacent to it. + + For 'on' cells, + If the cell has 0 or 1 neighbours which are 'on', the cell turns + 'off'. ('dies of loneliness') + If the cell has 2 or 3 neighbours which are 'on', the cell stays + 'on'. (nothing happens to that cell) + If the cell has 4, 5, 6, 7, 8, or 9 neighbours which are 'on', + the cell turns 'off'. ('dies of overcrowding') + + For 'off' cells, + If the cell has 0, 1, 2, 4, 5, 6, 7, 8, or 9 neighbours which + are 'on', the cell stays 'off'. (nothing happens to that cell) + If the cell has 3 neighbours which are 'on', the cell turns + 'on'. (3 neighbouring 'alive' cells 'give birth' to a fourth.) + + Repeat for as many generations as desired. + + *) + + +class Board inherits IO { + + rows : Int; + columns : Int; + board_size : Int; + + size_of_board(initial : String) : Int { + initial.length() + }; + + board_init(start : String) : Board { + (let size :Int <- size_of_board(start) in + { + if size = 15 then + { + rows <- 3; + columns <- 5; + board_size <- size; + } + else if size = 16 then + { + rows <- 4; + columns <- 4; + board_size <- size; + } + else if size = 20 then + { + rows <- 4; + columns <- 5; + board_size <- size; + } + else if size = 21 then + { + rows <- 3; + columns <- 7; + board_size <- size; + } + else if size = 25 then + { + rows <- 5; + columns <- 5; + board_size <- size; + } + else if size = 28 then + { + rows <- 7; + columns <- 4; + board_size <- size; + } + else -- If none of the above fit, then just give + { -- the configuration of the most common board + rows <- 5; + columns <- 5; + board_size <- size; + } + fi fi fi fi fi fi; + self; + } + ) + }; + +}; + + + +class CellularAutomaton inherits Board { + population_map : String; + + init(map : String) : CellularAutomaton { + { + population_map <- map; + board_init(map); + self; + } + }; + + + + + print() : CellularAutomaton { + + (let i : Int <- 0 in + (let num : Int <- board_size in + { + out_string("\n"); + while i < num loop + { + out_string(population_map.substr(i,columns)); + out_string("\n"); + i <- i + columns; + } + pool; + out_string("\n"); + self; + } + ) ) + }; + + num_cells() : Int { + population_map.length() + }; + + cell(position : Int) : String { + if board_size - 1 < position then + " " + else + population_map.substr(position, 1) + fi + }; + + north(position : Int): String { + if (position - columns) < 0 then + " " + else + cell(position - columns) + fi + }; + + south(position : Int): String { + if board_size < (position + columns) then + " " + else + cell(position + columns) + fi + }; + + east(position : Int): String { + if (((position + 1) /columns ) * columns) = (position + 1) then + " " + else + cell(position + 1) + fi + }; + + west(position : Int): String { + if position = 0 then + " " + else + if ((position / columns) * columns) = position then + " " + else + cell(position - 1) + fi fi + }; + + northwest(position : Int): String { + if (position - columns) < 0 then + " " + else if ((position / columns) * columns) = position then + " " + else + north(position - 1) + fi fi + }; + + northeast(position : Int): String { + if (position - columns) < 0 then + " " + else if (((position + 1) /columns ) * columns) = (position + 1) then + " " + else + north(position + 1) + fi fi + }; + + southeast(position : Int): String { + if board_size < (position + columns) then + " " + else if (((position + 1) /columns ) * columns) = (position + 1) then + " " + else + south(position + 1) + fi fi + }; + + southwest(position : Int): String { + if board_size < (position + columns) then + " " + else if ((position / columns) * columns) = position then + " " + else + south(position - 1) + fi fi + }; + + neighbors(position: Int): Int { + { + if north(position) = "X" then 1 else 0 fi + + if south(position) = "X" then 1 else 0 fi + + if east(position) = "X" then 1 else 0 fi + + if west(position) = "X" then 1 else 0 fi + + if northeast(position) = "X" then 1 else 0 fi + + if northwest(position) = "X" then 1 else 0 fi + + if southeast(position) = "X" then 1 else 0 fi + + if southwest(position) = "X" then 1 else 0 fi; + } + }; + + +(* A cell will live if 2 or 3 of it's neighbors are alive. It dies + otherwise. A cell is born if only 3 of it's neighbors are alive. *) + + cell_at_next_evolution(position : Int) : String { + + if neighbors(position) = 3 then + "X" + else + if neighbors(position) = 2 then + if cell(position) = "X" then + "X" + else + "-" + fi + else + "-" + fi fi + }; + + + evolve() : CellularAutomaton { + (let position : Int <- 0 in + (let num : Int <- num_cells() in + (let temp : String in + { + while position < num loop + { + temp <- temp.concat(cell_at_next_evolution(position)); + position <- position + 1; + } + pool; + population_map <- temp; + self; + } + ) ) ) + }; + +(* This is where the background pattern is detremined by the user. More + patterns can be added as long as whoever adds keeps the board either + 3x5, 4x5, 5x5, 3x7, 7x4, 4x4 with the row first then column. *) + option(): String { + { + (let num : Int in + { + out_string("\nPlease chose a number:\n"); + out_string("\t1: A cross\n"); + out_string("\t2: A slash from the upper left to lower right\n"); + out_string("\t3: A slash from the upper right to lower left\n"); + out_string("\t4: An X\n"); + out_string("\t5: A greater than sign \n"); + out_string("\t6: A less than sign\n"); + out_string("\t7: Two greater than signs\n"); + out_string("\t8: Two less than signs\n"); + out_string("\t9: A 'V'\n"); + out_string("\t10: An inverse 'V'\n"); + out_string("\t11: Numbers 9 and 10 combined\n"); + out_string("\t12: A full grid\n"); + out_string("\t13: A 'T'\n"); + out_string("\t14: A plus '+'\n"); + out_string("\t15: A 'W'\n"); + out_string("\t16: An 'M'\n"); + out_string("\t17: An 'E'\n"); + out_string("\t18: A '3'\n"); + out_string("\t19: An 'O'\n"); + out_string("\t20: An '8'\n"); + out_string("\t21: An 'S'\n"); + out_string("Your choice => "); + num <- in_int(); + out_string("\n"); + if num = 1 then + " XX XXXX XXXX XX " + else if num = 2 then + " X X X X X " + else if num = 3 then + "X X X X X" + else if num = 4 then + "X X X X X X X X X" + else if num = 5 then + "X X X X X " + else if num = 6 then + " X X X X X" + else if num = 7 then + "X X X XX X " + else if num = 8 then + " X XX X X X " + else if num = 9 then + "X X X X X " + else if num = 10 then + " X X X X X" + else if num = 11 then + "X X X X X X X X" + else if num = 12 then + "XXXXXXXXXXXXXXXXXXXXXXXXX" + else if num = 13 then + "XXXXX X X X X " + else if num = 14 then + " X X XXXXX X X " + else if num = 15 then + "X X X X X X X " + else if num = 16 then + " X X X X X X X" + else if num = 17 then + "XXXXX X XXXXX X XXXX" + else if num = 18 then + "XXX X X X X XXXX " + else if num = 19 then + " XX X XX X XX " + else if num = 20 then + " XX X XX X XX X XX X XX " + else if num = 21 then + " XXXX X XX X XXXX " + else + " " + fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi; + } + ); + } + }; + + + + + prompt() : Bool { + { + (let ans : String in + { + out_string("Would you like to continue with the next generation? \n"); + out_string("Please use lowercase y or n for your answer [y]: "); + ans <- in_string(); + out_string("\n"); + if ans = "n" then + false + else + true + fi; + } + ); + } + }; + + + prompt2() : Bool { + (let ans : String in + { + out_string("\n\n"); + out_string("Would you like to choose a background pattern? \n"); + out_string("Please use lowercase y or n for your answer [n]: "); + ans <- in_string(); + if ans = "y" then + true + else + false + fi; + } + ) + }; + + +}; + +class Main inherits CellularAutomaton { + cells : CellularAutomaton; + + main() : Main { + { + (let continue : Bool in + (let choice : String in + { + out_string("Welcome to the Game of Life.\n"); + out_string("There are many initial states to choose from. \n"); + while prompt2() loop + { + continue <- true; + choice <- option(); + cells <- (new CellularAutomaton).init(choice); + cells.print(); + while continue loop + if prompt() then + { + cells.evolve(); + cells.print(); + } + else + continue <- false + fi + pool; + } + pool; + self; + } ) ); } + }; +}; + diff --git a/tests/codegen/list.cl b/tests/codegen/list.cl index e8bbcb84..b384dac6 100644 --- a/tests/codegen/list.cl +++ b/tests/codegen/list.cl @@ -1,141 +1,141 @@ -(* - * This file shows how to implement a list data type for lists of integers. - * It makes use of INHERITANCE and DYNAMIC DISPATCH. - * - * The List class has 4 operations defined on List objects. If 'l' is - * a list, then the methods dispatched on 'l' have the following effects: - * - * isNil() : Bool Returns true if 'l' is empty, false otherwise. - * head() : Int Returns the integer at the head of 'l'. - * If 'l' is empty, execution aborts. - * tail() : List Returns the remainder of the 'l', - * i.e. without the first element. - * cons(i : Int) : List Return a new list containing i as the - * first element, followed by the - * elements in 'l'. - * - * There are 2 kinds of lists, the empty list and a non-empty - * list. We can think of the non-empty list as a specialization of - * the empty list. - * The class List defines the operations on empty list. The class - * Cons inherits from List and redefines things to handle non-empty - * lists. - *) - - -class List { - -- Define operations on empty lists. - - isNil() : Bool { true }; - - -- Since abort() has return type Object and head() has return type - -- Int, we need to have an Int as the result of the method body, - -- even though abort() never returns. - - head() : Int { { abort(); 0; } }; - - -- As for head(), the self is just to make sure the return type of - -- tail() is correct. - - tail() : List { { abort(); self; } }; - - -- When we cons and element onto the empty list we get a non-empty - -- list. The (new Cons) expression creates a new list cell of class - -- Cons, which is initialized by a dispatch to init(). - -- The result of init() is an element of class Cons, but it - -- conforms to the return type List, because Cons is a subclass of - -- List. - - cons(i : Int) : List { - (new Cons).init(i, self) - }; - -}; - - -(* - * Cons inherits all operations from List. We can reuse only the cons - * method though, because adding an element to the front of an emtpy - * list is the same as adding it to the front of a non empty - * list. All other methods have to be redefined, since the behaviour - * for them is different from the empty list. - * - * Cons needs two attributes to hold the integer of this list - * cell and to hold the rest of the list. - * - * The init() method is used by the cons() method to initialize the - * cell. - *) - -class Cons inherits List { - - car : Int; -- The element in this list cell - - cdr : List; -- The rest of the list - - isNil() : Bool { false }; - - head() : Int { car }; - - tail() : List { cdr }; - - init(i : Int, rest : List) : List { - { - car <- i; - cdr <- rest; - self; - } - }; - -}; - - - -(* - * The Main class shows how to use the List class. It creates a small - * list and then repeatedly prints out its elements and takes off the - * first element of the list. - *) - -class Main inherits IO { - - mylist : List; - - -- Print all elements of the list. Calls itself recursively with - -- the tail of the list, until the end of the list is reached. - - print_list(l : List) : Object { - if l.isNil() then out_string("\n") - else { - out_int(l.head()); - out_string(" "); - print_list(l.tail()); - } - fi - }; - - -- Note how the dynamic dispatch mechanism is responsible to end - -- the while loop. As long as mylist is bound to an object of - -- dynamic type Cons, the dispatch to isNil calls the isNil method of - -- the Cons class, which returns false. However when we reach the - -- end of the list, mylist gets bound to the object that was - -- created by the (new List) expression. This object is of dynamic type - -- List, and thus the method isNil in the List class is called and - -- returns true. - - main() : Object { - { - mylist <- new List.cons(1).cons(2).cons(3).cons(4).cons(5); - while (not mylist.isNil()) loop - { - print_list(mylist); - mylist <- mylist.tail(); - } - pool; - } - }; - -}; - - - +(* + * This file shows how to implement a list data type for lists of integers. + * It makes use of INHERITANCE and DYNAMIC DISPATCH. + * + * The List class has 4 operations defined on List objects. If 'l' is + * a list, then the methods dispatched on 'l' have the following effects: + * + * isNil() : Bool Returns true if 'l' is empty, false otherwise. + * head() : Int Returns the integer at the head of 'l'. + * If 'l' is empty, execution aborts. + * tail() : List Returns the remainder of the 'l', + * i.e. without the first element. + * cons(i : Int) : List Return a new list containing i as the + * first element, followed by the + * elements in 'l'. + * + * There are 2 kinds of lists, the empty list and a non-empty + * list. We can think of the non-empty list as a specialization of + * the empty list. + * The class List defines the operations on empty list. The class + * Cons inherits from List and redefines things to handle non-empty + * lists. + *) + + +class List { + -- Define operations on empty lists. + + isNil() : Bool { true }; + + -- Since abort() has return type Object and head() has return type + -- Int, we need to have an Int as the result of the method body, + -- even though abort() never returns. + + head() : Int { { abort(); 0; } }; + + -- As for head(), the self is just to make sure the return type of + -- tail() is correct. + + tail() : List { { abort(); self; } }; + + -- When we cons and element onto the empty list we get a non-empty + -- list. The (new Cons) expression creates a new list cell of class + -- Cons, which is initialized by a dispatch to init(). + -- The result of init() is an element of class Cons, but it + -- conforms to the return type List, because Cons is a subclass of + -- List. + + cons(i : Int) : List { + (new Cons).init(i, self) + }; + +}; + + +(* + * Cons inherits all operations from List. We can reuse only the cons + * method though, because adding an element to the front of an emtpy + * list is the same as adding it to the front of a non empty + * list. All other methods have to be redefined, since the behaviour + * for them is different from the empty list. + * + * Cons needs two attributes to hold the integer of this list + * cell and to hold the rest of the list. + * + * The init() method is used by the cons() method to initialize the + * cell. + *) + +class Cons inherits List { + + car : Int; -- The element in this list cell + + cdr : List; -- The rest of the list + + isNil() : Bool { false }; + + head() : Int { car }; + + tail() : List { cdr }; + + init(i : Int, rest : List) : List { + { + car <- i; + cdr <- rest; + self; + } + }; + +}; + + + +(* + * The Main class shows how to use the List class. It creates a small + * list and then repeatedly prints out its elements and takes off the + * first element of the list. + *) + +class Main inherits IO { + + mylist : List; + + -- Print all elements of the list. Calls itself recursively with + -- the tail of the list, until the end of the list is reached. + + print_list(l : List) : Object { + if l.isNil() then out_string("\n") + else { + out_int(l.head()); + out_string(" "); + print_list(l.tail()); + } + fi + }; + + -- Note how the dynamic dispatch mechanism is responsible to end + -- the while loop. As long as mylist is bound to an object of + -- dynamic type Cons, the dispatch to isNil calls the isNil method of + -- the Cons class, which returns false. However when we reach the + -- end of the list, mylist gets bound to the object that was + -- created by the (new List) expression. This object is of dynamic type + -- List, and thus the method isNil in the List class is called and + -- returns true. + + main() : Object { + { + mylist <- new List.cons(1).cons(2).cons(3).cons(4).cons(5); + while (not mylist.isNil()) loop + { + print_list(mylist); + mylist <- mylist.tail(); + } + pool; + } + }; + +}; + + + diff --git a/tests/codegen/new_complex.cl b/tests/codegen/new_complex.cl index a4fe714c..ad7035b5 100644 --- a/tests/codegen/new_complex.cl +++ b/tests/codegen/new_complex.cl @@ -1,79 +1,79 @@ -class Main inherits IO { - main() : IO { - (let c : Complex <- (new Complex).init(1, 1) in - { - -- trivially equal (see CoolAid) - if c.reflect_X() = c.reflect_0() - then out_string("=)\n") - else out_string("=(\n") - fi; - -- equal - if c.reflect_X().reflect_Y().equal(c.reflect_0()) - then out_string("=)\n") - else out_string("=(\n") - fi; - } - ) - }; -}; - -class Complex inherits IO { - x : Int; - y : Int; - - init(a : Int, b : Int) : Complex { - { - x = a; - y = b; - self; - } - }; - - print() : Object { - if y = 0 - then out_int(x) - else out_int(x).out_string("+").out_int(y).out_string("I") - fi - }; - - reflect_0() : Complex { - { - x = ~x; - y = ~y; - self; - } - }; - - reflect_X() : Complex { - { - y = ~y; - self; - } - }; - - reflect_Y() : Complex { - { - x = ~x; - self; - } - }; - - equal(d : Complex) : Bool { - if x = d.x_value() - then - if y = d.y_value() - then true - else false - fi - else false - fi - }; - - x_value() : Int { - x - }; - - y_value() : Int { - y - }; -}; +class Main inherits IO { + main() : IO { + (let c : Complex <- (new Complex).init(1, 1) in + { + -- trivially equal (see CoolAid) + if c.reflect_X() = c.reflect_0() + then out_string("=)\n") + else out_string("=(\n") + fi; + -- equal + if c.reflect_X().reflect_Y().equal(c.reflect_0()) + then out_string("=)\n") + else out_string("=(\n") + fi; + } + ) + }; +}; + +class Complex inherits IO { + x : Int; + y : Int; + + init(a : Int, b : Int) : Complex { + { + x = a; + y = b; + self; + } + }; + + print() : Object { + if y = 0 + then out_int(x) + else out_int(x).out_string("+").out_int(y).out_string("I") + fi + }; + + reflect_0() : Complex { + { + x = ~x; + y = ~y; + self; + } + }; + + reflect_X() : Complex { + { + y = ~y; + self; + } + }; + + reflect_Y() : Complex { + { + x = ~x; + self; + } + }; + + equal(d : Complex) : Bool { + if x = d.x_value() + then + if y = d.y_value() + then true + else false + fi + else false + fi + }; + + x_value() : Int { + x + }; + + y_value() : Int { + y + }; +}; diff --git a/tests/codegen/palindrome.cl b/tests/codegen/palindrome.cl index 7f24789f..6acbeb73 100644 --- a/tests/codegen/palindrome.cl +++ b/tests/codegen/palindrome.cl @@ -1,25 +1,25 @@ -class Main inherits IO { - pal(s : String) : Bool { - if s.length() = 0 - then true - else if s.length() = 1 - then true - else if s.substr(0, 1) = s.substr(s.length() - 1, 1) - then pal(s.substr(1, s.length() -2)) - else false - fi fi fi - }; - - i : Int; - - main() : IO { - { - i <- ~1; - out_string("enter a string\n"); - if pal(in_string()) - then out_string("that was a palindrome\n") - else out_string("that was not a palindrome\n") - fi; - } - }; -}; +class Main inherits IO { + pal(s : String) : Bool { + if s.length() = 0 + then true + else if s.length() = 1 + then true + else if s.substr(0, 1) = s.substr(s.length() - 1, 1) + then pal(s.substr(1, s.length() -2)) + else false + fi fi fi + }; + + i : Int; + + main() : IO { + { + i <- ~1; + out_string("enter a string\n"); + if pal(in_string()) + then out_string("that was a palindrome\n") + else out_string("that was not a palindrome\n") + fi; + } + }; +}; diff --git a/tests/codegen/primes.cl b/tests/codegen/primes.cl index ea953329..8b9254d5 100644 --- a/tests/codegen/primes.cl +++ b/tests/codegen/primes.cl @@ -1,84 +1,84 @@ - -(* - * methodless-primes.cl - * - * Designed by Jesse H. Willett, jhw@cory, 11103234, with - * Istvan Siposs, isiposs@cory, 12342921. - * - * This program generates primes in order without using any methods. - * Actually, it does use three methods: those of IO to print out each - * prime, and abort() to halt the program. These methods are incidental, - * however, to the information-processing functionality of the program. We - * could regard the attribute 'out's sequential values as our output, and - * the string "halt" as our terminate signal. - * - * Naturally, using Cool this way is a real waste, basically reducing it - * to assembly without the benefit of compilation. - * - * There could even be a subroutine-like construction, in that different - * code could be in the assign fields of attributes of other classes, - * and it could be executed by calling 'new Sub', but no parameters - * could be passed to the subroutine, and it could only return itself. - * but returning itself would be useless since we couldn't call methods - * and the only operators we have are for Int and Bool, which do nothing - * interesting when we initialize them! - *) - -class Main inherits IO { - - main() : Int { -- main() is an atrophied method so we can parse. - 0 - }; - - out : Int <- -- out is our 'output'. Its values are the primes. - { - out_string("2 is trivially prime.\n"); - 2; - }; - - testee : Int <- out; -- testee is a number to be tested for primeness. - - divisor : Int; -- divisor is a number which may factor testee. - - stop : Int <- 500; -- stop is an arbitrary value limiting testee. - - m : Object <- -- m supplants the main method. - while true loop - { - - testee <- testee + 1; - divisor <- 2; - - while - if testee < divisor * divisor - then false -- can stop if divisor > sqrt(testee). - else if testee - divisor*(testee/divisor) = 0 - then false -- can stop if divisor divides testee. - else true - fi fi - loop - divisor <- divisor + 1 - pool; - - if testee < divisor * divisor -- which reason did we stop for? - then -- testee has no factors less than sqrt(testee). - { - out <- testee; -- we could think of out itself as the output. - out_int(out); - out_string(" is prime.\n"); - } - else -- the loop halted on testee/divisor = 0, testee isn't prime. - 0 -- testee isn't prime, do nothing. - fi; - - if stop <= testee then - "halt".abort() -- we could think of "halt" as SIGTERM. - else - "continue" - fi; - - } - pool; - -}; (* end of Main *) - + +(* + * methodless-primes.cl + * + * Designed by Jesse H. Willett, jhw@cory, 11103234, with + * Istvan Siposs, isiposs@cory, 12342921. + * + * This program generates primes in order without using any methods. + * Actually, it does use three methods: those of IO to print out each + * prime, and abort() to halt the program. These methods are incidental, + * however, to the information-processing functionality of the program. We + * could regard the attribute 'out's sequential values as our output, and + * the string "halt" as our terminate signal. + * + * Naturally, using Cool this way is a real waste, basically reducing it + * to assembly without the benefit of compilation. + * + * There could even be a subroutine-like construction, in that different + * code could be in the assign fields of attributes of other classes, + * and it could be executed by calling 'new Sub', but no parameters + * could be passed to the subroutine, and it could only return itself. + * but returning itself would be useless since we couldn't call methods + * and the only operators we have are for Int and Bool, which do nothing + * interesting when we initialize them! + *) + +class Main inherits IO { + + main() : Int { -- main() is an atrophied method so we can parse. + 0 + }; + + out : Int <- -- out is our 'output'. Its values are the primes. + { + out_string("2 is trivially prime.\n"); + 2; + }; + + testee : Int <- out; -- testee is a number to be tested for primeness. + + divisor : Int; -- divisor is a number which may factor testee. + + stop : Int <- 500; -- stop is an arbitrary value limiting testee. + + m : Object <- -- m supplants the main method. + while true loop + { + + testee <- testee + 1; + divisor <- 2; + + while + if testee < divisor * divisor + then false -- can stop if divisor > sqrt(testee). + else if testee - divisor*(testee/divisor) = 0 + then false -- can stop if divisor divides testee. + else true + fi fi + loop + divisor <- divisor + 1 + pool; + + if testee < divisor * divisor -- which reason did we stop for? + then -- testee has no factors less than sqrt(testee). + { + out <- testee; -- we could think of out itself as the output. + out_int(out); + out_string(" is prime.\n"); + } + else -- the loop halted on testee/divisor = 0, testee isn't prime. + 0 -- testee isn't prime, do nothing. + fi; + + if stop <= testee then + "halt".abort() -- we could think of "halt" as SIGTERM. + else + "continue" + fi; + + } + pool; + +}; (* end of Main *) + diff --git a/tests/codegen/print-cool.cl b/tests/codegen/print-cool.cl index 8d7a336f..76194e96 100644 --- a/tests/codegen/print-cool.cl +++ b/tests/codegen/print-cool.cl @@ -1,9 +1,9 @@ -class Main inherits IO { - main() : IO { - { - out_string((new Object).type_name().substr(4,1)). - out_string((isvoid self).type_name().substr(1,3)); -- demonstrates the dispatch rules. - out_string("\n"); - } - }; -}; +class Main inherits IO { + main() : IO { + { + out_string((new Object).type_name().substr(4,1)). + out_string((isvoid self).type_name().substr(1,3)); -- demonstrates the dispatch rules. + out_string("\n"); + } + }; +}; diff --git a/tests/codegen/sort-list.cl b/tests/codegen/sort-list.cl index d49d56c4..7cf7b20a 100644 --- a/tests/codegen/sort-list.cl +++ b/tests/codegen/sort-list.cl @@ -1,146 +1,146 @@ -(* - This file presents a fairly large example of Cool programming. The -class List defines the names of standard list operations ala Scheme: -car, cdr, cons, isNil, rev, sort, rcons (add an element to the end of -the list), and print_list. In the List class most of these functions -are just stubs that abort if ever called. The classes Nil and Cons -inherit from List and define the same operations, but now as -appropriate to the empty list (for the Nil class) and for cons cells (for -the Cons class). - -The Main class puts all of this code through the following silly -test exercise: - - 1. prompt for a number N - 2. generate a list of numbers 0..N-1 - 3. reverse the list - 4. sort the list - 5. print the sorted list - -Because the sort used is a quadratic space insertion sort, sorting -moderately large lists can be quite slow. -*) - -Class List inherits IO { - (* Since abort() returns Object, we need something of - type Bool at the end of the block to satisfy the typechecker. - This code is unreachable, since abort() halts the program. *) - isNil() : Bool { { abort(); true; } }; - - cons(hd : Int) : Cons { - (let new_cell : Cons <- new Cons in - new_cell.init(hd,self) - ) - }; - - (* - Since abort "returns" type Object, we have to add - an expression of type Int here to satisfy the typechecker. - This code is, of course, unreachable. - *) - car() : Int { { abort(); new Int; } }; - - cdr() : List { { abort(); new List; } }; - - rev() : List { cdr() }; - - sort() : List { cdr() }; - - insert(i : Int) : List { cdr() }; - - rcons(i : Int) : List { cdr() }; - - print_list() : Object { abort() }; -}; - -Class Cons inherits List { - xcar : Int; -- We keep the car in cdr in attributes. - xcdr : List; - - isNil() : Bool { false }; - - init(hd : Int, tl : List) : Cons { - { - xcar <- hd; - xcdr <- tl; - self; - } - }; - - car() : Int { xcar }; - - cdr() : List { xcdr }; - - rev() : List { (xcdr.rev()).rcons(xcar) }; - - sort() : List { (xcdr.sort()).insert(xcar) }; - - insert(i : Int) : List { - if i < xcar then - (new Cons).init(i,self) - else - (new Cons).init(xcar,xcdr.insert(i)) - fi - }; - - - rcons(i : Int) : List { (new Cons).init(xcar, xcdr.rcons(i)) }; - - print_list() : Object { - { - out_int(xcar); - out_string("\n"); - xcdr.print_list(); - } - }; -}; - -Class Nil inherits List { - isNil() : Bool { true }; - - rev() : List { self }; - - sort() : List { self }; - - insert(i : Int) : List { rcons(i) }; - - rcons(i : Int) : List { (new Cons).init(i,self) }; - - print_list() : Object { true }; - -}; - - -Class Main inherits IO { - - l : List; - - (* iota maps its integer argument n into the list 0..n-1 *) - iota(i : Int) : List { - { - l <- new Nil; - (let j : Int <- 0 in - while j < i - loop - { - l <- (new Cons).init(j,l); - j <- j + 1; - } - pool - ); - l; - } - }; - - main() : Object { - { - out_string("How many numbers to sort? "); - iota(in_int()).rev().sort().print_list(); - } - }; -}; - - - - - +(* + This file presents a fairly large example of Cool programming. The +class List defines the names of standard list operations ala Scheme: +car, cdr, cons, isNil, rev, sort, rcons (add an element to the end of +the list), and print_list. In the List class most of these functions +are just stubs that abort if ever called. The classes Nil and Cons +inherit from List and define the same operations, but now as +appropriate to the empty list (for the Nil class) and for cons cells (for +the Cons class). + +The Main class puts all of this code through the following silly +test exercise: + + 1. prompt for a number N + 2. generate a list of numbers 0..N-1 + 3. reverse the list + 4. sort the list + 5. print the sorted list + +Because the sort used is a quadratic space insertion sort, sorting +moderately large lists can be quite slow. +*) + +Class List inherits IO { + (* Since abort() returns Object, we need something of + type Bool at the end of the block to satisfy the typechecker. + This code is unreachable, since abort() halts the program. *) + isNil() : Bool { { abort(); true; } }; + + cons(hd : Int) : Cons { + (let new_cell : Cons <- new Cons in + new_cell.init(hd,self) + ) + }; + + (* + Since abort "returns" type Object, we have to add + an expression of type Int here to satisfy the typechecker. + This code is, of course, unreachable. + *) + car() : Int { { abort(); new Int; } }; + + cdr() : List { { abort(); new List; } }; + + rev() : List { cdr() }; + + sort() : List { cdr() }; + + insert(i : Int) : List { cdr() }; + + rcons(i : Int) : List { cdr() }; + + print_list() : Object { abort() }; +}; + +Class Cons inherits List { + xcar : Int; -- We keep the car in cdr in attributes. + xcdr : List; + + isNil() : Bool { false }; + + init(hd : Int, tl : List) : Cons { + { + xcar <- hd; + xcdr <- tl; + self; + } + }; + + car() : Int { xcar }; + + cdr() : List { xcdr }; + + rev() : List { (xcdr.rev()).rcons(xcar) }; + + sort() : List { (xcdr.sort()).insert(xcar) }; + + insert(i : Int) : List { + if i < xcar then + (new Cons).init(i,self) + else + (new Cons).init(xcar,xcdr.insert(i)) + fi + }; + + + rcons(i : Int) : List { (new Cons).init(xcar, xcdr.rcons(i)) }; + + print_list() : Object { + { + out_int(xcar); + out_string("\n"); + xcdr.print_list(); + } + }; +}; + +Class Nil inherits List { + isNil() : Bool { true }; + + rev() : List { self }; + + sort() : List { self }; + + insert(i : Int) : List { rcons(i) }; + + rcons(i : Int) : List { (new Cons).init(i,self) }; + + print_list() : Object { true }; + +}; + + +Class Main inherits IO { + + l : List; + + (* iota maps its integer argument n into the list 0..n-1 *) + iota(i : Int) : List { + { + l <- new Nil; + (let j : Int <- 0 in + while j < i + loop + { + l <- (new Cons).init(j,l); + j <- j + 1; + } + pool + ); + l; + } + }; + + main() : Object { + { + out_string("How many numbers to sort? "); + iota(in_int()).rev().sort().print_list(); + } + }; +}; + + + + + diff --git a/tests/codegen/test.cl b/tests/codegen/test.cl index 4f76ffe0..9c2e0fd8 100644 --- a/tests/codegen/test.cl +++ b/tests/codegen/test.cl @@ -1,19 +1,19 @@ -class Main inherits IO { - - main () : Object { - { - let x:A <- new B in out_string( x.f().m() ); - let x:A <- new A in out_string( x.f().m() ); - } - - }; -}; - -class A { - m () : String { "A" }; - f () : A { new A }; -}; - -class B inherits A { - m () : String { "B" }; -}; +class Main inherits IO { + + main () : Object { + { + let x:A <- new B in out_string( x.f().m() ); + let x:A <- new A in out_string( x.f().m() ); + } + + }; +}; + +class A { + m () : String { "A" }; + f () : A { new A }; +}; + +class B inherits A { + m () : String { "B" }; +}; diff --git a/tests/codegen_test.py b/tests/codegen_test.py index 6d864cb0..e2fa3423 100644 --- a/tests/codegen_test.py +++ b/tests/codegen_test.py @@ -1,15 +1,15 @@ -import pytest -import os -from utils import compare_errors - -tests_dir = __file__.rpartition('/')[0] + '/codegen/' -tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] - -# @pytest.mark.lexer -# @pytest.mark.parser -# @pytest.mark.semantic -@pytest.mark.ok -@pytest.mark.run(order=4) -@pytest.mark.parametrize("cool_file", tests) -def test_codegen(compiler_path, cool_file): +import pytest +import os +from utils import compare_errors + +tests_dir = __file__.rpartition('/')[0] + '/codegen/' +tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] + +# @pytest.mark.lexer +# @pytest.mark.parser +# @pytest.mark.semantic +@pytest.mark.ok +@pytest.mark.run(order=4) +@pytest.mark.parametrize("cool_file", tests) +def test_codegen(compiler_path, cool_file): compare_errors(compiler_path, tests_dir + cool_file, None) \ No newline at end of file diff --git a/tests/conftest.py b/tests/conftest.py index 1f44eeb7..561d8baf 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,6 +1,6 @@ -import pytest -import os - -@pytest.fixture -def compiler_path(): +import pytest +import os + +@pytest.fixture +def compiler_path(): return os.path.abspath('./coolc.sh') \ No newline at end of file diff --git a/tests/lexer/mixed1_error.txt b/tests/lexer/mixed1_error.txt index 99af5fbd..a142c2ed 100644 --- a/tests/lexer/mixed1_error.txt +++ b/tests/lexer/mixed1_error.txt @@ -1 +1 @@ -(2, 10) - LexicographicError: ERROR "#" +(2, 10) - LexicographicError: ERROR "#" diff --git a/tests/semantic/hello_world.cl b/tests/semantic/hello_world.cl index 0c818f90..b0a180a2 100644 --- a/tests/semantic/hello_world.cl +++ b/tests/semantic/hello_world.cl @@ -1,5 +1,5 @@ -class Main inherits IO { - main(): IO { - out_string("Hello, World.\n") - }; -}; +class Main inherits IO { + main(): IO { + out_string("Hello, World.\n") + }; +}; From 0190977f00a9e63ed6bbbbfab52b4a8a606bb3e5 Mon Sep 17 00:00:00 2001 From: Amanda Date: Wed, 28 Oct 2020 17:06:01 -0600 Subject: [PATCH 25/60] I dont know why this files are changed --- .gitignore | 560 +- .travis.yml | 44 +- LICENSE | 42 +- Pipfile | 24 +- Pipfile.lock | 58 +- ast.py | 384 +- doc/Readme.md | 78 +- doc/report/report.aux | 38 +- doc/report/report.tex | 380 +- doc/report/resources/luftballons.pl | 42 +- doc/report/resources/parser.py | 4 +- doc/report/structure.tex | 184 +- requirements.txt | 6 +- src/Readme.md | 156 +- src/codegen/__init__.py | 18 +- src/codegen/cil_ast.py | 432 +- src/codegen/visitors/base_cil_visitor.py | 252 +- src/codegen/visitors/cil_format_visitor.py | 206 +- src/codegen/visitors/cil_visitor.py | 694 +- src/cool_parser/__init__.py | 2 +- src/cool_parser/base_parser.py | 50 +- src/cool_parser/logger.py | 26 +- src/cool_parser/output_parser/parselog.txt | 15642 +++++++++---------- src/cool_parser/output_parser/parser.out | 10912 ++++++------- src/cool_parser/output_parser/parsetab.py | 252 +- src/cool_parser/parser.py | 804 +- src/coolc.sh | 28 +- src/lexer/lexer.py | 648 +- src/main.py | 66 +- src/makefile | 18 +- src/self.cl | 16 +- src/semantic/semantic.py | 96 +- src/semantic/tools.py | 240 +- src/semantic/types.py | 568 +- src/semantic/visitors/__init__.py | 10 +- src/semantic/visitors/format_visitor.py | 256 +- src/semantic/visitors/selftype_visitor.py | 214 +- src/semantic/visitors/type_builder.py | 164 +- src/semantic/visitors/type_checker.py | 682 +- src/semantic/visitors/type_collector.py | 66 +- src/semantic/visitors/var_collector.py | 474 +- src/test.cl | 78 +- src/utils/ast.py | 440 +- src/utils/errors.py | 222 +- src/utils/tokens.py | 120 +- src/utils/utils.py | 70 +- src/utils/visitor.py | 160 +- tests/.gitignore | 912 +- tests/codegen/arith.cl | 860 +- tests/codegen/atoi.cl | 242 +- tests/codegen/atoi2.cl | 184 +- tests/codegen/book_list.cl | 264 +- tests/codegen/cells.cl | 194 +- tests/codegen/complex.cl | 104 +- tests/codegen/fib.cl | 58 +- tests/codegen/graph.cl | 762 +- tests/codegen/hairyscary.cl | 134 +- tests/codegen/hello_world.cl | 10 +- tests/codegen/helloworld.cl | 12 +- tests/codegen/io.cl | 206 +- tests/codegen/life.cl | 872 +- tests/codegen/list.cl | 282 +- tests/codegen/new_complex.cl | 158 +- tests/codegen/palindrome.cl | 50 +- tests/codegen/primes.cl | 168 +- tests/codegen/print-cool.cl | 18 +- tests/codegen/sort-list.cl | 292 +- tests/codegen/test.cl | 38 +- tests/codegen_test.py | 28 +- tests/conftest.py | 10 +- tests/lexer/mixed1_error.txt | 2 +- tests/semantic/hello_world.cl | 10 +- 72 files changed, 20898 insertions(+), 20898 deletions(-) diff --git a/.gitignore b/.gitignore index f28ab696..0a7b0c0d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,280 +1,280 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -*.py,cover -.hypothesis/ -.pytest_cache/ -cover/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 -db.sqlite3-journal - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -.pybuilder/ -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -# For a library or package, you might want to ignore these files since the code is -# intended to run in multiple environments; otherwise, check them in: -# .python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow -__pypackages__/ - -# Celery stuff -celerybeat-schedule -celerybeat.pid - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# Pycharm -.idea/ - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -# pytype static type analyzer -.pytype/ - -# Cython debug symbols -cython_debug/ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -.dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -*.py,cover -.hypothesis/ -.pytest_cache/ -cover/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 -db.sqlite3-journal - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -.pybuilder/ -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -# For a library or package, you might want to ignore these files since the code is -# intended to run in multiple environments; otherwise, check them in: -# .python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow -__pypackages__/ - -# Celery stuff -celerybeat-schedule -celerybeat.pid - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -# pytype static type analyzer -.pytype/ - -# Cython debug symbols -cython_debug/ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# Pycharm +.idea/ + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +.dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ diff --git a/.travis.yml b/.travis.yml index 27b0b96d..52b5ba1b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,23 +1,23 @@ -language: python -python: - - "3.7" -# command to install dependencies -install: - - pip install -r requirements.txt -# command to run tests -jobs: - include: - - stage: "Lexer" - name: "Lexer" - script: - - cd src - - make clean - - make - - make test TAG=lexer - - stage: "Parser" - name: "Parser" - script: - - cd src - - make clean - - make +language: python +python: + - "3.7" +# command to install dependencies +install: + - pip install -r requirements.txt +# command to run tests +jobs: + include: + - stage: "Lexer" + name: "Lexer" + script: + - cd src + - make clean + - make + - make test TAG=lexer + - stage: "Parser" + name: "Parser" + script: + - cd src + - make clean + - make - make test TAG=parser \ No newline at end of file diff --git a/LICENSE b/LICENSE index ad9e4865..f543cdb4 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,21 @@ -MIT License - -Copyright (c) 2020 School of Math and Computer Science, University of Havana - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +MIT License + +Copyright (c) 2020 School of Math and Computer Science, University of Havana + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Pipfile b/Pipfile index 5b7ff3c2..6ad89606 100644 --- a/Pipfile +++ b/Pipfile @@ -1,12 +1,12 @@ -[[source]] -name = "pypi" -url = "https://pypi.org/simple" -verify_ssl = true - -[dev-packages] - -[packages] -ply = "*" - -[requires] -python_version = "3.7" +[[source]] +name = "pypi" +url = "https://pypi.org/simple" +verify_ssl = true + +[dev-packages] + +[packages] +ply = "*" + +[requires] +python_version = "3.7" diff --git a/Pipfile.lock b/Pipfile.lock index e971880a..8b110a67 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,29 +1,29 @@ -{ - "_meta": { - "hash": { - "sha256": "768c4b66d0ce858fbbf1b8a8998ffa9616166666555d0dc7bd1b92a9316518c8" - }, - "pipfile-spec": 6, - "requires": { - "python_version": "3.7" - }, - "sources": [ - { - "name": "pypi", - "url": "https://pypi.org/simple", - "verify_ssl": true - } - ] - }, - "default": { - "ply": { - "hashes": [ - "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", - "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce" - ], - "index": "pypi", - "version": "==3.11" - } - }, - "develop": {} -} +{ + "_meta": { + "hash": { + "sha256": "768c4b66d0ce858fbbf1b8a8998ffa9616166666555d0dc7bd1b92a9316518c8" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.7" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "ply": { + "hashes": [ + "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", + "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce" + ], + "index": "pypi", + "version": "==3.11" + } + }, + "develop": {} +} diff --git a/ast.py b/ast.py index ffd00871..59ea976e 100644 --- a/ast.py +++ b/ast.py @@ -1,193 +1,193 @@ -class Node: - pass - -class ProgramNode(Node): - def __init__(self, declarations): - self.declarations = declarations - -class DeclarationNode(Node): - pass - -class ExpressionNode(Node): - pass - -class ErrorNode(Node): - pass - -class ClassDeclarationNode(DeclarationNode): - def __init__(self, idx, features, pos, parent=None): - self.id = idx - self.parent = parent - self.features = features - self.pos = pos - -class FuncDeclarationNode(DeclarationNode): - def __init__(self, idx, params, return_type, body, pos): - self.id = idx - self.params = params - self.type = return_type - self.body = body - self.pos = pos - self.pos = pos - -class AttrDeclarationNode(DeclarationNode): - def __init__(self, idx, typex, pos, expr=None): - self.id = idx - self.type = typex - self.expr = expr - self.pos = pos - -class VarDeclarationNode(ExpressionNode): - def __init__(self, idx, typex, pos, expr=None): - self.id = idx - self.type = typex - self.expr = expr - self.pos = pos - -class AssignNode(ExpressionNode): - def __init__(self, idx, expr, pos): - self.id = idx - self.expr = expr - self.pos = pos - -class CallNode(ExpressionNode): - def __init__(self, obj, idx, args, pos): - self.obj = obj - self.id = idx - self.args = args - self.pos = pos - -class BlockNode(ExpressionNode): - def __init__(self, expr_list, pos): - self.expr_list = expr_list - self.pos = pos - -class BaseCallNode(ExpressionNode): - def __init__(self, obj, typex, idx, args, pos): - self.obj = obj - self.id = idx - self.args = args - self.type = typex - self.pos = pos - - -class StaticCallNode(ExpressionNode): - def __init__(self, idx, args, pos): - self.id = idx - self.args = args - self.pos = pos - - -class AtomicNode(ExpressionNode): - def __init__(self, lex, pos): - self.lex = lex - self.pos = pos - -class BinaryNode(ExpressionNode): - def __init__(self, left, right, pos): - self.left = left - self.right = right - self.pos = pos - -class BinaryLogicalNode(BinaryNode): - def __init__(self, left, right, pos): - super().__init__(left, right, pos) - -class BinaryArithNode(BinaryNode): - def __init__(self, left, right, pos): - super().__init__(left, right, pos) - -class UnaryNode(ExpressionNode): - def __init__(self, expr, pos): - self.expr = expr - self.pos = pos - -class UnaryLogicalNode(UnaryNode): - def __init__(self, operand, pos): - super().__init__(operand, pos) - -class UnaryArithNode(UnaryNode): - def __init__(self, operand, pos): - super().__init__(operand) - -class WhileNode(ExpressionNode): - def __init__(self, cond, expr): - self.cond = cond - self.expr = expr - -class ConditionalNode(ExpressionNode): - def __init__(self, cond, stm, else_stm): - self.cond = cond - self.stm = stm - self.else_stm = else_stm - -class CaseNode(ExpressionNode): - def __init__(self, expr, case_list): - self.expr = expr - self.case_list = case_list - - def __hash__(self): - return id(self) - -class OptionNode(ExpressionNode): - def __init__(self, idx, typex, expr): - self.id = idx - self.typex = typex - self.expr = expr - - -class LetNode(ExpressionNode): - def __init__(self, init_list, expr): - self.init_list = init_list - self.expr = expr - - def __hash__(self): - return id(self) - -class ConstantNumNode(AtomicNode): - pass - -class ConstantBoolNode(AtomicNode): - pass - -class ConstantStrNode(AtomicNode): - pass - -class VariableNode(AtomicNode): - pass - -class TypeNode(AtomicNode): - pass - -class InstantiateNode(AtomicNode): - pass - -class BinaryNotNode(UnaryArithNode): - pass - -class NotNode(UnaryLogicalNode): - pass - -class IsVoidNode(UnaryArithNode): - pass - -class PlusNode(BinaryArithNode): - pass - -class MinusNode(BinaryArithNode): - pass - -class StarNode(BinaryArithNode): - pass - -class DivNode(BinaryArithNode): - pass - -class LessNode(BinaryLogicalNode): - pass - -class LessEqNode(BinaryLogicalNode): - pass - -class EqualNode(BinaryLogicalNode): +class Node: + pass + +class ProgramNode(Node): + def __init__(self, declarations): + self.declarations = declarations + +class DeclarationNode(Node): + pass + +class ExpressionNode(Node): + pass + +class ErrorNode(Node): + pass + +class ClassDeclarationNode(DeclarationNode): + def __init__(self, idx, features, pos, parent=None): + self.id = idx + self.parent = parent + self.features = features + self.pos = pos + +class FuncDeclarationNode(DeclarationNode): + def __init__(self, idx, params, return_type, body, pos): + self.id = idx + self.params = params + self.type = return_type + self.body = body + self.pos = pos + self.pos = pos + +class AttrDeclarationNode(DeclarationNode): + def __init__(self, idx, typex, pos, expr=None): + self.id = idx + self.type = typex + self.expr = expr + self.pos = pos + +class VarDeclarationNode(ExpressionNode): + def __init__(self, idx, typex, pos, expr=None): + self.id = idx + self.type = typex + self.expr = expr + self.pos = pos + +class AssignNode(ExpressionNode): + def __init__(self, idx, expr, pos): + self.id = idx + self.expr = expr + self.pos = pos + +class CallNode(ExpressionNode): + def __init__(self, obj, idx, args, pos): + self.obj = obj + self.id = idx + self.args = args + self.pos = pos + +class BlockNode(ExpressionNode): + def __init__(self, expr_list, pos): + self.expr_list = expr_list + self.pos = pos + +class BaseCallNode(ExpressionNode): + def __init__(self, obj, typex, idx, args, pos): + self.obj = obj + self.id = idx + self.args = args + self.type = typex + self.pos = pos + + +class StaticCallNode(ExpressionNode): + def __init__(self, idx, args, pos): + self.id = idx + self.args = args + self.pos = pos + + +class AtomicNode(ExpressionNode): + def __init__(self, lex, pos): + self.lex = lex + self.pos = pos + +class BinaryNode(ExpressionNode): + def __init__(self, left, right, pos): + self.left = left + self.right = right + self.pos = pos + +class BinaryLogicalNode(BinaryNode): + def __init__(self, left, right, pos): + super().__init__(left, right, pos) + +class BinaryArithNode(BinaryNode): + def __init__(self, left, right, pos): + super().__init__(left, right, pos) + +class UnaryNode(ExpressionNode): + def __init__(self, expr, pos): + self.expr = expr + self.pos = pos + +class UnaryLogicalNode(UnaryNode): + def __init__(self, operand, pos): + super().__init__(operand, pos) + +class UnaryArithNode(UnaryNode): + def __init__(self, operand, pos): + super().__init__(operand) + +class WhileNode(ExpressionNode): + def __init__(self, cond, expr): + self.cond = cond + self.expr = expr + +class ConditionalNode(ExpressionNode): + def __init__(self, cond, stm, else_stm): + self.cond = cond + self.stm = stm + self.else_stm = else_stm + +class CaseNode(ExpressionNode): + def __init__(self, expr, case_list): + self.expr = expr + self.case_list = case_list + + def __hash__(self): + return id(self) + +class OptionNode(ExpressionNode): + def __init__(self, idx, typex, expr): + self.id = idx + self.typex = typex + self.expr = expr + + +class LetNode(ExpressionNode): + def __init__(self, init_list, expr): + self.init_list = init_list + self.expr = expr + + def __hash__(self): + return id(self) + +class ConstantNumNode(AtomicNode): + pass + +class ConstantBoolNode(AtomicNode): + pass + +class ConstantStrNode(AtomicNode): + pass + +class VariableNode(AtomicNode): + pass + +class TypeNode(AtomicNode): + pass + +class InstantiateNode(AtomicNode): + pass + +class BinaryNotNode(UnaryArithNode): + pass + +class NotNode(UnaryLogicalNode): + pass + +class IsVoidNode(UnaryArithNode): + pass + +class PlusNode(BinaryArithNode): + pass + +class MinusNode(BinaryArithNode): + pass + +class StarNode(BinaryArithNode): + pass + +class DivNode(BinaryArithNode): + pass + +class LessNode(BinaryLogicalNode): + pass + +class LessEqNode(BinaryLogicalNode): + pass + +class EqualNode(BinaryLogicalNode): pass \ No newline at end of file diff --git a/doc/Readme.md b/doc/Readme.md index efe7ea6f..5c2d6c9d 100644 --- a/doc/Readme.md +++ b/doc/Readme.md @@ -1,39 +1,39 @@ -# Documentación - -> Introduzca sus datos (de todo el equipo) en la siguiente tabla: - -**Nombre** | **Grupo** | **Github** ---|--|-- -Loraine Monteagudo García | C411 | [@lorainemg](https://github.com/lorainemg) -Amanda Marrero Santos | C411 | [@amymsantos42](https://github.com/amymsantos42) -Manuel Fernández Arias | C411 | [@nolyfdezarias](https://github.com/nolyfdezarias) - -## Readme - -Modifique el contenido de este documento para documentar de forma clara y concisa los siguientes aspectos: - -- Cómo ejecutar (y compilar si es necesario) su compilador. -- Requisitos adicionales, dependencias, configuración, etc. -- Opciones adicionales que tenga su compilador. - -### Sobre los Equipos de Desarrollo - -Para desarrollar el compilador del lenguaje COOL se trabajará en equipos de 2 o 3 integrantes. El proyecto de Compilación será recogido y evaluado únicamente a través de Github. Es imprescindible tener una cuenta de Github para cada participante, y que su proyecto esté correctamente hosteado en esta plataforma. Próximamente les daremos las instrucciones mínimas necesarias para ello. - -### Sobre los Materiales a Entregar - -Para la evaluación del proyecto Ud. debe entregar un informe en formato PDF (`report.pdf`) que resuma de manera organizada y comprensible la arquitectura e implementación de su compilador. -El documento **NO** debe exceder las 5 cuartillas. -En él explicará en más detalle su solución a los problemas que, durante la implementación de cada una de las fases del proceso de compilación, hayan requerido de Ud. especial atención. - -### Estructura del reporte - -Usted es libre de estructurar su reporte escrito como más conveniente le parezca. A continuación le sugerimos algunas secciones que no deberían faltar, aunque puede mezclar, renombrar y organizarlas de la manera que mejor le parezca: - -- **Uso del compilador**: detalles sobre las opciones de líneas de comando, si tiene opciones adicionales (e.j., `--ast` genera un AST en JSON, etc.). Básicamente lo mismo que pondrá en este Readme. -- **Arquitectura del compilador**: una explicación general de la arquitectura, en cuántos módulos se divide el proyecto, cuantas fases tiene, qué tipo de gramática se utiliza, y en general, como se organiza el proyecto. Una buena imagen siempre ayuda. -- **Problemas técnicos**: detalles sobre cualquier problema teórico o técnico interesante que haya necesitado resolver de forma particular. - -## Sobre la Fecha de Entrega - -Se realizarán recogidas parciales del proyecto a lo largo del curso. En el Canal de Telegram [@matcom_cmp](https://t.me/matcom_cmp) se anunciará la fecha y requisitos de cada primera entrega. +# Documentación + +> Introduzca sus datos (de todo el equipo) en la siguiente tabla: + +**Nombre** | **Grupo** | **Github** +--|--|-- +Loraine Monteagudo García | C411 | [@lorainemg](https://github.com/lorainemg) +Amanda Marrero Santos | C411 | [@amymsantos42](https://github.com/amymsantos42) +Manuel Fernández Arias | C411 | [@nolyfdezarias](https://github.com/nolyfdezarias) + +## Readme + +Modifique el contenido de este documento para documentar de forma clara y concisa los siguientes aspectos: + +- Cómo ejecutar (y compilar si es necesario) su compilador. +- Requisitos adicionales, dependencias, configuración, etc. +- Opciones adicionales que tenga su compilador. + +### Sobre los Equipos de Desarrollo + +Para desarrollar el compilador del lenguaje COOL se trabajará en equipos de 2 o 3 integrantes. El proyecto de Compilación será recogido y evaluado únicamente a través de Github. Es imprescindible tener una cuenta de Github para cada participante, y que su proyecto esté correctamente hosteado en esta plataforma. Próximamente les daremos las instrucciones mínimas necesarias para ello. + +### Sobre los Materiales a Entregar + +Para la evaluación del proyecto Ud. debe entregar un informe en formato PDF (`report.pdf`) que resuma de manera organizada y comprensible la arquitectura e implementación de su compilador. +El documento **NO** debe exceder las 5 cuartillas. +En él explicará en más detalle su solución a los problemas que, durante la implementación de cada una de las fases del proceso de compilación, hayan requerido de Ud. especial atención. + +### Estructura del reporte + +Usted es libre de estructurar su reporte escrito como más conveniente le parezca. A continuación le sugerimos algunas secciones que no deberían faltar, aunque puede mezclar, renombrar y organizarlas de la manera que mejor le parezca: + +- **Uso del compilador**: detalles sobre las opciones de líneas de comando, si tiene opciones adicionales (e.j., `--ast` genera un AST en JSON, etc.). Básicamente lo mismo que pondrá en este Readme. +- **Arquitectura del compilador**: una explicación general de la arquitectura, en cuántos módulos se divide el proyecto, cuantas fases tiene, qué tipo de gramática se utiliza, y en general, como se organiza el proyecto. Una buena imagen siempre ayuda. +- **Problemas técnicos**: detalles sobre cualquier problema teórico o técnico interesante que haya necesitado resolver de forma particular. + +## Sobre la Fecha de Entrega + +Se realizarán recogidas parciales del proyecto a lo largo del curso. En el Canal de Telegram [@matcom_cmp](https://t.me/matcom_cmp) se anunciará la fecha y requisitos de cada primera entrega. diff --git a/doc/report/report.aux b/doc/report/report.aux index f11b7251..67a09bbc 100644 --- a/doc/report/report.aux +++ b/doc/report/report.aux @@ -1,19 +1,19 @@ -\relax -\select@language{english} -\@writefile{toc}{\select@language{english}} -\@writefile{lof}{\select@language{english}} -\@writefile{lot}{\select@language{english}} -\@writefile{toc}{\contentsline {section}{\numberline {1}Uso del compilador}{1}} -\@writefile{toc}{\contentsline {section}{\numberline {2}Arquitectura del compilador}{1}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}An\IeC {\'a}lisis sint\IeC {\'a}ctico}{1}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.1}An\IeC {\'a}lisis l\IeC {\'e}xico}{2}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.2}Parsing}{2}} -\newlabel{lst:parser}{{1}{3}} -\@writefile{lol}{\contentsline {lstlisting}{\numberline {1}Funci\IeC {\'o}n de una regla gramatical en PLY}{3}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}An\IeC {\'a}lisis sem\IeC {\'a}ntico}{3}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Generaci\IeC {\'o}n de c\IeC {\'o}digo}{4}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.3.1}C\IeC {\'o}digo Intermedio}{4}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.3.2}C\IeC {\'o}digo de M\IeC {\'a}quina}{4}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}Optimizaci\IeC {\'o}n}{4}} -\@writefile{toc}{\contentsline {section}{\numberline {3}Problemas t\IeC {\'e}cnicos}{4}} -\@writefile{toc}{\contentsline {paragraph}{Detalles sobre cualquier problema te\IeC {\'o}rico o t\IeC {\'e}cnico interesante que haya necesitado resolver de forma particular.}{4}} +\relax +\select@language{english} +\@writefile{toc}{\select@language{english}} +\@writefile{lof}{\select@language{english}} +\@writefile{lot}{\select@language{english}} +\@writefile{toc}{\contentsline {section}{\numberline {1}Uso del compilador}{1}} +\@writefile{toc}{\contentsline {section}{\numberline {2}Arquitectura del compilador}{1}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}An\IeC {\'a}lisis sint\IeC {\'a}ctico}{1}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.1}An\IeC {\'a}lisis l\IeC {\'e}xico}{2}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.2}Parsing}{2}} +\newlabel{lst:parser}{{1}{3}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {1}Funci\IeC {\'o}n de una regla gramatical en PLY}{3}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}An\IeC {\'a}lisis sem\IeC {\'a}ntico}{3}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Generaci\IeC {\'o}n de c\IeC {\'o}digo}{4}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.3.1}C\IeC {\'o}digo Intermedio}{4}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.3.2}C\IeC {\'o}digo de M\IeC {\'a}quina}{4}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}Optimizaci\IeC {\'o}n}{4}} +\@writefile{toc}{\contentsline {section}{\numberline {3}Problemas t\IeC {\'e}cnicos}{4}} +\@writefile{toc}{\contentsline {paragraph}{Detalles sobre cualquier problema te\IeC {\'o}rico o t\IeC {\'e}cnico interesante que haya necesitado resolver de forma particular.}{4}} diff --git a/doc/report/report.tex b/doc/report/report.tex index c0894594..5ee5f549 100644 --- a/doc/report/report.tex +++ b/doc/report/report.tex @@ -1,190 +1,190 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Wenneker Assignment -% LaTeX Template -% Version 2.0 (12/1/2019) -% -% This template originates from: -% http://www.LaTeXTemplates.com -% -% Authors: -% Vel (vel@LaTeXTemplates.com) -% Frits Wenneker -% -% License: -% CC BY-NC-SA 3.0 (http://creativecommons.org/licenses/by-nc-sa/3.0/) -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%---------------------------------------------------------------------------------------- -% PACKAGES AND OTHER DOCUMENT CONFIGURATIONS -%---------------------------------------------------------------------------------------- - -\documentclass[11pt]{scrartcl} % Font size - -\input{structure.tex} % Include the file specifying the document structure and custom commands - -%---------------------------------------------------------------------------------------- -% TITLE SECTION -%---------------------------------------------------------------------------------------- - -\title{ - \normalfont\normalsize - \textsc{Universidad de La Habana}\\ % Your university, school and/or department name(s) - \vspace{25pt} % Whitespace - \rule{\linewidth}{0.5pt}\\ % Thin top horizontal rule - \vspace{20pt} % Whitespace - {\huge Compilador de COOL}\\ % The assignment title - \vspace{12pt} % Whitespace - \rule{\linewidth}{2pt}\\ % Thick bottom horizontal rule - \vspace{12pt} % Whitespace -} - -\author{\textit{Amanda Marrero Santos} - C411 \\ \textit{Manuel Fernández Arias} - C411 \\ \textit{Loraine Monteagudo García} - C411 } % Your name - -\date{} % Today's date (\today) or a custom date - -\begin{document} - -\maketitle % Print the title - -%---------------------------------------------------------------------------------------- -% Uso del Compilador -%---------------------------------------------------------------------------------------- - -\section{Uso del compilador} - -\paragraph*{Detalles sobre las opciones de líneas de comando, si tiene opciones adicionales...} - -%---------------------------------------------------------------------------------------- -% Arquitectura del compilador -%---------------------------------------------------------------------------------------- - -\section{Arquitectura del compilador} - -\paragraph*{Una explicación general de la arquitectura, en cuántos módulos se divide el proyecto, cuantas fases tiene, qué tipo de gramática se utiliza y en general, como se organiza el proyecto. Una buena imagen siempre ayuda.} - - -Para el desarrollo del compilador se usó PLY, que es una implementación de Python pura del constructor de compilación lex and yacc. Incluye soporte al parser LALR(1) así como herramientas para el análisis léxico de validación de entrada y para el reporte de errores. - -El proceso de compilación se desarrolla en 4 fases: - -\begin{enumerate} - \item Análisis sintáctico: se trata de la comprobación del programa fuente hasta su representación en un árbol de derivación. Incluye desde la definición de la gramática hasta la construcción del lexer y el parser. - \item Análisis semántico: consiste en la revisión de las sentencias aceptadas en la fase anterior mediante la validación de que los predicados semánticos se cumplan. - \item Generación de código: después de la validación del programa fuente se genera el código intermedio para la posterior creación del código de máquina. - \item Optimización: se busca tener un código lo más eficiente posible. -\end{enumerate} - -Hablar de las fases de compilación. Cada una de estas fases se dividen en módulos independientes, que se integran en el archivo principal \texttt{main.py} - -%---------------------------------------------------------------------------------------- -\subsection{Análisis sintáctico} - -En la fase de análisis sintáctico del compilador se definen aquellas reglas que podemos llamar "sintácticas": los métodos empiezan por un identificador, las funciones contienen una sola instrucción, etc. Son aquellas reglas que determinan la forma de la instrucción. Para este conjunto de reglas existe un mecanismo formal que nos permite describirlas: las gramáticas libres del contexto. Justamente, la fase de análisis sintáctico se encarga de validar que los predicados sintácticos se cumplan. - -El análisis sintáctico se divide en 2 fases: en una se realiza el análisis léxico, con la construcción de un lexer y en la otra se realiza el proceso de parsing, definiendo la gramática e implementado un parser para la construcción del Ãrbol de Sintaxis Abstracta (AST). - -\subsubsection{Análisis léxico} - -En esta fase se procesa el programa fuente de izquierda a derecha y se agrupa en componentes léxicos (\textit{tokens}) que son secuencias de caracteres que tienen un significado. Todos los espacios en blanco, comentarios y demás información innecesaria se elimina del programa fuente. El lexer, por lo tanto, convierte una secuencia de caracteres (strings) en una secuencia de tokens. - -Después de determinar los caracteres especiales de COOL especificados en su documentación se deciden las propiedades necesarias para representar un token. Un token tiene un lexema, que no es más que el string que se hace corresponder al token y un tipo para agrupar los que tienen una característica similar. Este último puede ser igual o diferente al lexema: en las palabras reservadas sucede que su lexema es igual a su tipo, mientras que en los strings y en los números estos son diferentes. Mientras que un token puede tener infinitos lexemas, los distintos tipos son predeterminados. Además, para el reporte de errores se guarda la fila y la columna de cada token. - -La construcción del lexer se realiza mediante las herramientas de PLY. Para su construcción es necesario la definición de una variable \texttt{tokens} que es una lista con los distintos tipos de tokens. Después se especifica cuales secuencias de caracteres le corresponderán a cada tipo de token, esto se especifica mediante expresiones regulares. Para cada tipo de token se definió una función mediante la convención de PLY de nombrar \texttt{t\_tipo}, donde \texttt{tipo} es el tipo de token, y en el docstring la expresión regular que lo describe. - -\begin{itemize} - \item Hablar del sistema interno de PLY, cómo construye un autómata finito determinista para formar el lexer. En general, hablar un poco más de cómo realiza el análisis PLY por detrás - \item Hablar de las particularidades de los comentarios y el parseo de los strings -\end{itemize} - -%---------------------------------------------------------------------------------------- -\subsubsection{Parsing} - -El proceso de parsing consiste en analizar una secuencia de tokens y producir un árbol de derivación. Por lo tanto, se comprueba si lo obtenido en la fase anterior es sintácticamente correcto según la gramática del lenguaje. - -El parser también se implementó mediante PLY, especificando la gramática y las acciones para cada producción. Para cada regla gramatical hay una función cuyo nombre empieza con \texttt{p\_}. El docstring de la función contiene la forma de la producción, escrita en \textbf{EBNF} (Extended Backus-Naur Form). PLY usa los dos puntos (:) para separar la parte izquierda y la derecha de la producción gramatical. El símbolo del lado izquierdo de la primera función es considerado el símbolo inicial. El cuerpo de esa función contiene código que realiza la acción de esa producción. - -En cada producción se construye un nodo del árbol de sintaxis abstracta, como se hace en Listing \ref{lst:parser}. El parámetro \texttt{p} de la función contiene los resultados de las acciones que se realizaron para parsear el lado derecho de la producción. Se puede indexar en \texttt{p} para acceder a estos resultados, empezando con \texttt{p[1]} para el primer símbolo de la parte derecha. Para especificar el resultado de la acción actual se accede a \texttt{p[0]}. Así, por ejemplo, en la producción \texttt{program : class\_list} construimos el nodo \texttt{ProgramNode} conteniendo la lista de clases obtenida en \texttt{p[1]} y asignamos \texttt{ProgramNode} a \texttt{p[0]} - -\lstinputlisting[ -label=lst:parser, % Label for referencing this listing -language=Python, % Use Perl functions/syntax highlighting -frame=single, % Frame around the code listing -showstringspaces=false, % Don't put marks in string spaces -%numbers=left, % Line numbers on left -numberstyle=\tiny, % Line numbers styling -caption=Función de una regla gramatical en PLY, % Caption above the listing -]{resources/parser.py} - -El procesador de parser de PLY procesa la gramática y genera un parser que usa el algoritmo de shift-reduce LALR(1), que es uno de los más usados en la actualidad. Aunque LALR(1) no puede manejar todas las gramáticas libres de contexto la gramática de COOL usada fue refactorizada para ser procesada por LALR(1) sin errores. - -La gramática especificada en el manual de COOL fue reconstruida para eliminar cualquier ambigüedad y teniendo en cuenta la precedencia de los operadores presentes. - -Para la construcción del árbol de derivación se definieron cada uno de los nodos. El objetivo de dicho árbol es describir la forma en que la cadena es generada por la gramática. Intuitivamente, esta información nos permite "entender" sin ambigüedad el significado de la cadena. - - - -%---------------------------------------------------------------------------------------- -\subsection{Análisis semántico} - -A parte de las reglas sintácticas mencionadas anteriormente para que el compilador determine que programas son válidas en el lenguaje tenemos reglas que no son del todo sintácticas: la consistencia en el uso de los tipos, que cierta función debe devolver un valor por todos los posibles caminos de ejecución. Estas reglas son consideradas "semánticas", porque de cierta forma nos indican cuál es el significado "real" del lenguaje. Mientras que para los predicados sintácticos podemos construir una gramática libre del contexto que los reconozcan los predicados semánticos no pueden ser descritos por este tipo de gramática, dado que estas relaciones son intrínsecamente dependientes del contexto. - -El objetivo del análisis semántico es validar que los predicados semánticos se cumplan. Para esto construye estructuras que permitan reunir y validar información sobre los tipos para la posterior fase de generación de código. - -El árbol de derivación es una estructura conveniente para ser explorada. Por lo tanto, el procedimiento para validar los predicados semánticos es recorrer cada nodo. La mayoría de las reglas semánticas nos hablan sobre las definiciones y uso de las variables y funciones, por lo que se hace necesario acceder a un "scope", donde están definidas las funciones y variables que se usan en dicho nodo. Además se usa un "contexto" para definir los distintos tipos que se construyen a lo largo del programa. En el mismo recorrido en que se valida las reglas semánticas se construyen estas estructuras auxiliares. - -Para realizar los recorridos en el árbol de derivación se hace uso del patrón visitor. Este patrón nos permite abstraer el concepto de procesamiento de un nodo. Se crean distintas clases implementando este patrón, haciendo cada una de ellas una pasada en el árbol para implementar varias funciones. - -En la primera pasada solamente recolectamos todos los tipos definidos. A este visitor, \texttt{TypeCollector} solamente le interesan los nodos \texttt{ProgramNode} y \texttt{ClassNode}. Su tarea consiste en crear el contexto y definir en este contexto todos los tipos que se encuentre. - -Luego en \texttt{TypeBuilder} se construyen todo el contexto de métodos y atributos. En este caso nos interesa además los nodos \texttt{FuncDeclarationNode} y \texttt{AttrDeclarationNode}. - -En el tercer recorrido se define el visitor \texttt{VarCollector} en el que se procede a la construcción de los scopes recolectando las variables definidas en el programa teniendo en cuenta la visibilidad de cada uno de ellos. - -Por último, en \texttt{TypeChecker} se verifica la consistencia de tipos en todos los nodos del AST. Con el objetivo de detectar la mayor cantidad de errores en cada corrida se toman acciones como definir \texttt{ErrorType} para expresar un tipo que presentó algún error semántico. - -%---------------------------------------------------------------------------------------- -\subsection{Generación de código} - -\begin{itemize} - \item Hablar del objetivo de la generación de código. - \item Introducir y justificar la necesidad de la generación de código intermedio. -\end{itemize} - -\subsubsection{Código Intermedio} - -\begin{itemize} - \item Hablar de la estructura del código intermedio. - \item Explicar el visitor que se utiliza para generarlo. -\end{itemize} - -\subsubsection{Código de Máquina} - -\begin{itemize} - \item Describir el código Mips que se genera. - \item Explicar como se llegó a implementar con un visitor. -\end{itemize} - -\subsection{Optimización} - -\begin{itemize} - \item No tengo ni idea de qué poner aquí. -\end{itemize} - -%---------------------------------------------------------------------------------------- -% Problemas técnicos -%---------------------------------------------------------------------------------------- - -\section{Problemas técnicos} - -\paragraph{Detalles sobre cualquier problema teórico o técnico interesante que haya necesitado resolver de forma particular.} - -\begin{itemize} - \item Hablar de los comentarios y los strings en el lexer. - \item Hablar de la recuperación de errores en la gramática de PLY. - \item Hablar de cómo se implementaron los tipos \textit{built-in}. -\end{itemize} - -%---------------------------------------------------------------------------------------- - -\end{document} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Wenneker Assignment +% LaTeX Template +% Version 2.0 (12/1/2019) +% +% This template originates from: +% http://www.LaTeXTemplates.com +% +% Authors: +% Vel (vel@LaTeXTemplates.com) +% Frits Wenneker +% +% License: +% CC BY-NC-SA 3.0 (http://creativecommons.org/licenses/by-nc-sa/3.0/) +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%---------------------------------------------------------------------------------------- +% PACKAGES AND OTHER DOCUMENT CONFIGURATIONS +%---------------------------------------------------------------------------------------- + +\documentclass[11pt]{scrartcl} % Font size + +\input{structure.tex} % Include the file specifying the document structure and custom commands + +%---------------------------------------------------------------------------------------- +% TITLE SECTION +%---------------------------------------------------------------------------------------- + +\title{ + \normalfont\normalsize + \textsc{Universidad de La Habana}\\ % Your university, school and/or department name(s) + \vspace{25pt} % Whitespace + \rule{\linewidth}{0.5pt}\\ % Thin top horizontal rule + \vspace{20pt} % Whitespace + {\huge Compilador de COOL}\\ % The assignment title + \vspace{12pt} % Whitespace + \rule{\linewidth}{2pt}\\ % Thick bottom horizontal rule + \vspace{12pt} % Whitespace +} + +\author{\textit{Amanda Marrero Santos} - C411 \\ \textit{Manuel Fernández Arias} - C411 \\ \textit{Loraine Monteagudo García} - C411 } % Your name + +\date{} % Today's date (\today) or a custom date + +\begin{document} + +\maketitle % Print the title + +%---------------------------------------------------------------------------------------- +% Uso del Compilador +%---------------------------------------------------------------------------------------- + +\section{Uso del compilador} + +\paragraph*{Detalles sobre las opciones de líneas de comando, si tiene opciones adicionales...} + +%---------------------------------------------------------------------------------------- +% Arquitectura del compilador +%---------------------------------------------------------------------------------------- + +\section{Arquitectura del compilador} + +\paragraph*{Una explicación general de la arquitectura, en cuántos módulos se divide el proyecto, cuantas fases tiene, qué tipo de gramática se utiliza y en general, como se organiza el proyecto. Una buena imagen siempre ayuda.} + + +Para el desarrollo del compilador se usó PLY, que es una implementación de Python pura del constructor de compilación lex and yacc. Incluye soporte al parser LALR(1) así como herramientas para el análisis léxico de validación de entrada y para el reporte de errores. + +El proceso de compilación se desarrolla en 4 fases: + +\begin{enumerate} + \item Análisis sintáctico: se trata de la comprobación del programa fuente hasta su representación en un árbol de derivación. Incluye desde la definición de la gramática hasta la construcción del lexer y el parser. + \item Análisis semántico: consiste en la revisión de las sentencias aceptadas en la fase anterior mediante la validación de que los predicados semánticos se cumplan. + \item Generación de código: después de la validación del programa fuente se genera el código intermedio para la posterior creación del código de máquina. + \item Optimización: se busca tener un código lo más eficiente posible. +\end{enumerate} + +Hablar de las fases de compilación. Cada una de estas fases se dividen en módulos independientes, que se integran en el archivo principal \texttt{main.py} + +%---------------------------------------------------------------------------------------- +\subsection{Análisis sintáctico} + +En la fase de análisis sintáctico del compilador se definen aquellas reglas que podemos llamar "sintácticas": los métodos empiezan por un identificador, las funciones contienen una sola instrucción, etc. Son aquellas reglas que determinan la forma de la instrucción. Para este conjunto de reglas existe un mecanismo formal que nos permite describirlas: las gramáticas libres del contexto. Justamente, la fase de análisis sintáctico se encarga de validar que los predicados sintácticos se cumplan. + +El análisis sintáctico se divide en 2 fases: en una se realiza el análisis léxico, con la construcción de un lexer y en la otra se realiza el proceso de parsing, definiendo la gramática e implementado un parser para la construcción del Ãrbol de Sintaxis Abstracta (AST). + +\subsubsection{Análisis léxico} + +En esta fase se procesa el programa fuente de izquierda a derecha y se agrupa en componentes léxicos (\textit{tokens}) que son secuencias de caracteres que tienen un significado. Todos los espacios en blanco, comentarios y demás información innecesaria se elimina del programa fuente. El lexer, por lo tanto, convierte una secuencia de caracteres (strings) en una secuencia de tokens. + +Después de determinar los caracteres especiales de COOL especificados en su documentación se deciden las propiedades necesarias para representar un token. Un token tiene un lexema, que no es más que el string que se hace corresponder al token y un tipo para agrupar los que tienen una característica similar. Este último puede ser igual o diferente al lexema: en las palabras reservadas sucede que su lexema es igual a su tipo, mientras que en los strings y en los números estos son diferentes. Mientras que un token puede tener infinitos lexemas, los distintos tipos son predeterminados. Además, para el reporte de errores se guarda la fila y la columna de cada token. + +La construcción del lexer se realiza mediante las herramientas de PLY. Para su construcción es necesario la definición de una variable \texttt{tokens} que es una lista con los distintos tipos de tokens. Después se especifica cuales secuencias de caracteres le corresponderán a cada tipo de token, esto se especifica mediante expresiones regulares. Para cada tipo de token se definió una función mediante la convención de PLY de nombrar \texttt{t\_tipo}, donde \texttt{tipo} es el tipo de token, y en el docstring la expresión regular que lo describe. + +\begin{itemize} + \item Hablar del sistema interno de PLY, cómo construye un autómata finito determinista para formar el lexer. En general, hablar un poco más de cómo realiza el análisis PLY por detrás + \item Hablar de las particularidades de los comentarios y el parseo de los strings +\end{itemize} + +%---------------------------------------------------------------------------------------- +\subsubsection{Parsing} + +El proceso de parsing consiste en analizar una secuencia de tokens y producir un árbol de derivación. Por lo tanto, se comprueba si lo obtenido en la fase anterior es sintácticamente correcto según la gramática del lenguaje. + +El parser también se implementó mediante PLY, especificando la gramática y las acciones para cada producción. Para cada regla gramatical hay una función cuyo nombre empieza con \texttt{p\_}. El docstring de la función contiene la forma de la producción, escrita en \textbf{EBNF} (Extended Backus-Naur Form). PLY usa los dos puntos (:) para separar la parte izquierda y la derecha de la producción gramatical. El símbolo del lado izquierdo de la primera función es considerado el símbolo inicial. El cuerpo de esa función contiene código que realiza la acción de esa producción. + +En cada producción se construye un nodo del árbol de sintaxis abstracta, como se hace en Listing \ref{lst:parser}. El parámetro \texttt{p} de la función contiene los resultados de las acciones que se realizaron para parsear el lado derecho de la producción. Se puede indexar en \texttt{p} para acceder a estos resultados, empezando con \texttt{p[1]} para el primer símbolo de la parte derecha. Para especificar el resultado de la acción actual se accede a \texttt{p[0]}. Así, por ejemplo, en la producción \texttt{program : class\_list} construimos el nodo \texttt{ProgramNode} conteniendo la lista de clases obtenida en \texttt{p[1]} y asignamos \texttt{ProgramNode} a \texttt{p[0]} + +\lstinputlisting[ +label=lst:parser, % Label for referencing this listing +language=Python, % Use Perl functions/syntax highlighting +frame=single, % Frame around the code listing +showstringspaces=false, % Don't put marks in string spaces +%numbers=left, % Line numbers on left +numberstyle=\tiny, % Line numbers styling +caption=Función de una regla gramatical en PLY, % Caption above the listing +]{resources/parser.py} + +El procesador de parser de PLY procesa la gramática y genera un parser que usa el algoritmo de shift-reduce LALR(1), que es uno de los más usados en la actualidad. Aunque LALR(1) no puede manejar todas las gramáticas libres de contexto la gramática de COOL usada fue refactorizada para ser procesada por LALR(1) sin errores. + +La gramática especificada en el manual de COOL fue reconstruida para eliminar cualquier ambigüedad y teniendo en cuenta la precedencia de los operadores presentes. + +Para la construcción del árbol de derivación se definieron cada uno de los nodos. El objetivo de dicho árbol es describir la forma en que la cadena es generada por la gramática. Intuitivamente, esta información nos permite "entender" sin ambigüedad el significado de la cadena. + + + +%---------------------------------------------------------------------------------------- +\subsection{Análisis semántico} + +A parte de las reglas sintácticas mencionadas anteriormente para que el compilador determine que programas son válidas en el lenguaje tenemos reglas que no son del todo sintácticas: la consistencia en el uso de los tipos, que cierta función debe devolver un valor por todos los posibles caminos de ejecución. Estas reglas son consideradas "semánticas", porque de cierta forma nos indican cuál es el significado "real" del lenguaje. Mientras que para los predicados sintácticos podemos construir una gramática libre del contexto que los reconozcan los predicados semánticos no pueden ser descritos por este tipo de gramática, dado que estas relaciones son intrínsecamente dependientes del contexto. + +El objetivo del análisis semántico es validar que los predicados semánticos se cumplan. Para esto construye estructuras que permitan reunir y validar información sobre los tipos para la posterior fase de generación de código. + +El árbol de derivación es una estructura conveniente para ser explorada. Por lo tanto, el procedimiento para validar los predicados semánticos es recorrer cada nodo. La mayoría de las reglas semánticas nos hablan sobre las definiciones y uso de las variables y funciones, por lo que se hace necesario acceder a un "scope", donde están definidas las funciones y variables que se usan en dicho nodo. Además se usa un "contexto" para definir los distintos tipos que se construyen a lo largo del programa. En el mismo recorrido en que se valida las reglas semánticas se construyen estas estructuras auxiliares. + +Para realizar los recorridos en el árbol de derivación se hace uso del patrón visitor. Este patrón nos permite abstraer el concepto de procesamiento de un nodo. Se crean distintas clases implementando este patrón, haciendo cada una de ellas una pasada en el árbol para implementar varias funciones. + +En la primera pasada solamente recolectamos todos los tipos definidos. A este visitor, \texttt{TypeCollector} solamente le interesan los nodos \texttt{ProgramNode} y \texttt{ClassNode}. Su tarea consiste en crear el contexto y definir en este contexto todos los tipos que se encuentre. + +Luego en \texttt{TypeBuilder} se construyen todo el contexto de métodos y atributos. En este caso nos interesa además los nodos \texttt{FuncDeclarationNode} y \texttt{AttrDeclarationNode}. + +En el tercer recorrido se define el visitor \texttt{VarCollector} en el que se procede a la construcción de los scopes recolectando las variables definidas en el programa teniendo en cuenta la visibilidad de cada uno de ellos. + +Por último, en \texttt{TypeChecker} se verifica la consistencia de tipos en todos los nodos del AST. Con el objetivo de detectar la mayor cantidad de errores en cada corrida se toman acciones como definir \texttt{ErrorType} para expresar un tipo que presentó algún error semántico. + +%---------------------------------------------------------------------------------------- +\subsection{Generación de código} + +\begin{itemize} + \item Hablar del objetivo de la generación de código. + \item Introducir y justificar la necesidad de la generación de código intermedio. +\end{itemize} + +\subsubsection{Código Intermedio} + +\begin{itemize} + \item Hablar de la estructura del código intermedio. + \item Explicar el visitor que se utiliza para generarlo. +\end{itemize} + +\subsubsection{Código de Máquina} + +\begin{itemize} + \item Describir el código Mips que se genera. + \item Explicar como se llegó a implementar con un visitor. +\end{itemize} + +\subsection{Optimización} + +\begin{itemize} + \item No tengo ni idea de qué poner aquí. +\end{itemize} + +%---------------------------------------------------------------------------------------- +% Problemas técnicos +%---------------------------------------------------------------------------------------- + +\section{Problemas técnicos} + +\paragraph{Detalles sobre cualquier problema teórico o técnico interesante que haya necesitado resolver de forma particular.} + +\begin{itemize} + \item Hablar de los comentarios y los strings en el lexer. + \item Hablar de la recuperación de errores en la gramática de PLY. + \item Hablar de cómo se implementaron los tipos \textit{built-in}. +\end{itemize} + +%---------------------------------------------------------------------------------------- + +\end{document} diff --git a/doc/report/resources/luftballons.pl b/doc/report/resources/luftballons.pl index a6937f9c..534e2974 100644 --- a/doc/report/resources/luftballons.pl +++ b/doc/report/resources/luftballons.pl @@ -1,22 +1,22 @@ -#!/usr/bin/perl - -use strict; -use warnings; - -for (1..99) { print $_." Luftballons\n"; } - -# This is a commented line - -my $string = "Hello World!"; - -print $string."\n\n"; - -$string =~ s/Hello/Goodbye Cruel/; - -print $string."\n\n"; - -finale(); - -exit; - +#!/usr/bin/perl + +use strict; +use warnings; + +for (1..99) { print $_." Luftballons\n"; } + +# This is a commented line + +my $string = "Hello World!"; + +print $string."\n\n"; + +$string =~ s/Hello/Goodbye Cruel/; + +print $string."\n\n"; + +finale(); + +exit; + sub finale { print "Fin.\n"; } \ No newline at end of file diff --git a/doc/report/resources/parser.py b/doc/report/resources/parser.py index 6bb42aad..8aac7357 100644 --- a/doc/report/resources/parser.py +++ b/doc/report/resources/parser.py @@ -1,3 +1,3 @@ -def p_program(self, p): - 'program : class_list' +def p_program(self, p): + 'program : class_list' p[0] = ProgramNode(p[1]) \ No newline at end of file diff --git a/doc/report/structure.tex b/doc/report/structure.tex index ba0e7b9d..fb822a30 100644 --- a/doc/report/structure.tex +++ b/doc/report/structure.tex @@ -1,92 +1,92 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Wenneker Assignment -% Structure Specification File -% Version 2.0 (12/1/2019) -% -% This template originates from: -% http://www.LaTeXTemplates.com -% -% Authors: -% Vel (vel@LaTeXTemplates.com) -% Frits Wenneker -% -% License: -% CC BY-NC-SA 3.0 (http://creativecommons.org/licenses/by-nc-sa/3.0/) -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%---------------------------------------------------------------------------------------- -% PACKAGES AND OTHER DOCUMENT CONFIGURATIONS -%---------------------------------------------------------------------------------------- - -\usepackage{amsmath, amsfonts, amsthm} % Math packages - -\usepackage{listings} % Code listings, with syntax highlighting - -\usepackage[english]{babel} % English language hyphenation - -\usepackage{graphicx} % Required for inserting images -\graphicspath{{Figures/}{./}} % Specifies where to look for included images (trailing slash required) - -\usepackage{booktabs} % Required for better horizontal rules in tables - -\numberwithin{equation}{section} % Number equations within sections (i.e. 1.1, 1.2, 2.1, 2.2 instead of 1, 2, 3, 4) -\numberwithin{figure}{section} % Number figures within sections (i.e. 1.1, 1.2, 2.1, 2.2 instead of 1, 2, 3, 4) -\numberwithin{table}{section} % Number tables within sections (i.e. 1.1, 1.2, 2.1, 2.2 instead of 1, 2, 3, 4) - -\setlength\parindent{0pt} % Removes all indentation from paragraphs - -\usepackage{enumitem} % Required for list customisation -\setlist{noitemsep} % No spacing between list items - -%---------------------------------------------------------------------------------------- -% DOCUMENT MARGINS -%---------------------------------------------------------------------------------------- - -\usepackage{geometry} % Required for adjusting page dimensions and margins - -\geometry{ - paper=a4paper, % Paper size, change to letterpaper for US letter size - top=2.5cm, % Top margin - bottom=3cm, % Bottom margin - left=3cm, % Left margin - right=3cm, % Right margin - headheight=0.75cm, % Header height - footskip=1.5cm, % Space from the bottom margin to the baseline of the footer - headsep=0.75cm, % Space from the top margin to the baseline of the header - %showframe, % Uncomment to show how the type block is set on the page -} - -%---------------------------------------------------------------------------------------- -% FONTS -%---------------------------------------------------------------------------------------- - -\usepackage[utf8]{inputenc} % Required for inputting international characters -\usepackage[T1]{fontenc} % Use 8-bit encoding - -\usepackage{fourier} % Use the Adobe Utopia font for the document - -%---------------------------------------------------------------------------------------- -% SECTION TITLES -%---------------------------------------------------------------------------------------- - -\usepackage{sectsty} % Allows customising section commands - -\sectionfont{\vspace{6pt}\centering\normalfont\scshape} % \section{} styling -\subsectionfont{\normalfont\bfseries} % \subsection{} styling -\subsubsectionfont{\normalfont\itshape} % \subsubsection{} styling -\paragraphfont{\normalfont\scshape} % \paragraph{} styling - -%---------------------------------------------------------------------------------------- -% HEADERS AND FOOTERS -%---------------------------------------------------------------------------------------- - -%\usepackage{scrlayer-scrpage} % Required for customising headers and footers - -%\ohead*{} % Right header -%\ihead*{} % Left header -%\chead*{} % Centre header - -%\ofoot*{} % Right footer -%\ifoot*{} % Left footer -%\cfoot*{\pagemark} % Centre footer +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Wenneker Assignment +% Structure Specification File +% Version 2.0 (12/1/2019) +% +% This template originates from: +% http://www.LaTeXTemplates.com +% +% Authors: +% Vel (vel@LaTeXTemplates.com) +% Frits Wenneker +% +% License: +% CC BY-NC-SA 3.0 (http://creativecommons.org/licenses/by-nc-sa/3.0/) +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%---------------------------------------------------------------------------------------- +% PACKAGES AND OTHER DOCUMENT CONFIGURATIONS +%---------------------------------------------------------------------------------------- + +\usepackage{amsmath, amsfonts, amsthm} % Math packages + +\usepackage{listings} % Code listings, with syntax highlighting + +\usepackage[english]{babel} % English language hyphenation + +\usepackage{graphicx} % Required for inserting images +\graphicspath{{Figures/}{./}} % Specifies where to look for included images (trailing slash required) + +\usepackage{booktabs} % Required for better horizontal rules in tables + +\numberwithin{equation}{section} % Number equations within sections (i.e. 1.1, 1.2, 2.1, 2.2 instead of 1, 2, 3, 4) +\numberwithin{figure}{section} % Number figures within sections (i.e. 1.1, 1.2, 2.1, 2.2 instead of 1, 2, 3, 4) +\numberwithin{table}{section} % Number tables within sections (i.e. 1.1, 1.2, 2.1, 2.2 instead of 1, 2, 3, 4) + +\setlength\parindent{0pt} % Removes all indentation from paragraphs + +\usepackage{enumitem} % Required for list customisation +\setlist{noitemsep} % No spacing between list items + +%---------------------------------------------------------------------------------------- +% DOCUMENT MARGINS +%---------------------------------------------------------------------------------------- + +\usepackage{geometry} % Required for adjusting page dimensions and margins + +\geometry{ + paper=a4paper, % Paper size, change to letterpaper for US letter size + top=2.5cm, % Top margin + bottom=3cm, % Bottom margin + left=3cm, % Left margin + right=3cm, % Right margin + headheight=0.75cm, % Header height + footskip=1.5cm, % Space from the bottom margin to the baseline of the footer + headsep=0.75cm, % Space from the top margin to the baseline of the header + %showframe, % Uncomment to show how the type block is set on the page +} + +%---------------------------------------------------------------------------------------- +% FONTS +%---------------------------------------------------------------------------------------- + +\usepackage[utf8]{inputenc} % Required for inputting international characters +\usepackage[T1]{fontenc} % Use 8-bit encoding + +\usepackage{fourier} % Use the Adobe Utopia font for the document + +%---------------------------------------------------------------------------------------- +% SECTION TITLES +%---------------------------------------------------------------------------------------- + +\usepackage{sectsty} % Allows customising section commands + +\sectionfont{\vspace{6pt}\centering\normalfont\scshape} % \section{} styling +\subsectionfont{\normalfont\bfseries} % \subsection{} styling +\subsubsectionfont{\normalfont\itshape} % \subsubsection{} styling +\paragraphfont{\normalfont\scshape} % \paragraph{} styling + +%---------------------------------------------------------------------------------------- +% HEADERS AND FOOTERS +%---------------------------------------------------------------------------------------- + +%\usepackage{scrlayer-scrpage} % Required for customising headers and footers + +%\ohead*{} % Right header +%\ihead*{} % Left header +%\chead*{} % Centre header + +%\ofoot*{} % Right footer +%\ifoot*{} % Left footer +%\cfoot*{\pagemark} % Centre footer diff --git a/requirements.txt b/requirements.txt index cba16ee2..f23029c8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -pytest -pytest-ordering -ply +pytest +pytest-ordering +ply diff --git a/src/Readme.md b/src/Readme.md index 1200371b..cdca282e 100644 --- a/src/Readme.md +++ b/src/Readme.md @@ -1,78 +1,78 @@ -# COOL: Proyecto de Compilación - -La evaluación de la asignatura Complementos de Compilación, inscrita en el programa del 4to año de la Licenciatura en Ciencia de la Computación de la Facultad de Matemática y Computación de la -Universidad de La Habana, consiste este curso en la implementación de un compilador completamente -funcional para el lenguaje _COOL_. - -_COOL (Classroom Object-Oriented Language)_ es un pequeño lenguaje que puede ser implementado con un esfuerzo razonable en un semestre del curso. Aun así, _COOL_ mantiene muchas de las características de los lenguajes de programación modernos, incluyendo orientación a objetos, tipado estático y manejo automático de memoria. - -### Sobre el Lenguaje COOL - -Ud. podrá encontrar la especificación formal del lenguaje COOL en el documento _"COOL Language Reference Manual"_, que se distribuye junto con el presente texto. - -## Código Fuente - -### Compilando su proyecto - -Si es necesario compilar su proyecto, incluya todas las instrucciones necesarias en un archivo [`/src/makefile`](/src/makefile). -Durante la evaluación su proyecto se compilará ejecutando la siguiente secuencia: - -```bash -$ cd source -$ make clean -$ make -``` - -### Ejecutando su proyecto - -Incluya en un archivo [`/src/coolc.sh`](/src/coolc.sh) todas las instrucciones que hacen falta para lanzar su compilador. Recibirá como entrada un archivo con extensión `.cl` y debe generar como salida un archivo `.mips` cuyo nombre será el mismo que la entrada. - -Para lanzar el compilador, se ejecutará la siguiente instrucción: - -```bash -$ cd source -$ ./coolc.sh -``` - -### Sobre el Compilador de COOL - -El compilador de COOL se ejecutará como se ha definido anteriormente. -En caso de que no ocurran errores durante la operación del compilador, **coolc.sh** deberá terminar con código de salida 0, generar (o sobrescribir si ya existe) en la misma carpeta del archivo **.cl** procesado, y con el mismo nombre que éste, un archivo con extension **.mips** que pueda ser ejecutado con **spim**. Además, reportar a la salida estándar solamente lo siguiente: - - - - -En caso de que ocurran errores durante la operación del compilador, **coolc.sh** deberá terminar con código -de salida (exit code) 1 y reportar a la salida estándar (standard output stream) lo que sigue... - - - - _1 - ... - _n - -... donde `_i` tiene el siguiente formato: - - (,) - : - -Los campos `` y `` indican la ubicación del error en el fichero **.cl** procesado. En caso -de que la naturaleza del error sea tal que no pueda asociárselo a una línea y columna en el archivo de -código fuente, el valor de dichos campos debe ser 0. - -El campo `` será alguno entre: - -- `CompilerError`: se reporta al detectar alguna anomalía con la entrada del compilador. Por ejemplo, si el fichero a compilar no existe. -- `LexicographicError`: errores detectados por el lexer. -- `SyntacticError`: errores detectados por el parser. -- `NameError`: se reporta al referenciar un `identificador` en un ámbito en el que no es visible. -- `TypeError`: se reporta al detectar un problema de tipos. Incluye: - - incompatibilidad de tipos entre `rvalue` y `lvalue`, - - operación no definida entre objetos de ciertos tipos, y - - tipo referenciado pero no definido. -- `AttributeError`: se reporta cuando un atributo o método se referencia pero no está definido. -- `SemanticError`: cualquier otro error semántico. - -### Sobre la Implementación del Compilador de COOL - -El compilador debe estar implementado en `python`. Usted debe utilizar una herramienta generadora de analizadores -lexicográficos y sintácticos. Puede utilizar la que sea de su preferencia. +# COOL: Proyecto de Compilación + +La evaluación de la asignatura Complementos de Compilación, inscrita en el programa del 4to año de la Licenciatura en Ciencia de la Computación de la Facultad de Matemática y Computación de la +Universidad de La Habana, consiste este curso en la implementación de un compilador completamente +funcional para el lenguaje _COOL_. + +_COOL (Classroom Object-Oriented Language)_ es un pequeño lenguaje que puede ser implementado con un esfuerzo razonable en un semestre del curso. Aun así, _COOL_ mantiene muchas de las características de los lenguajes de programación modernos, incluyendo orientación a objetos, tipado estático y manejo automático de memoria. + +### Sobre el Lenguaje COOL + +Ud. podrá encontrar la especificación formal del lenguaje COOL en el documento _"COOL Language Reference Manual"_, que se distribuye junto con el presente texto. + +## Código Fuente + +### Compilando su proyecto + +Si es necesario compilar su proyecto, incluya todas las instrucciones necesarias en un archivo [`/src/makefile`](/src/makefile). +Durante la evaluación su proyecto se compilará ejecutando la siguiente secuencia: + +```bash +$ cd source +$ make clean +$ make +``` + +### Ejecutando su proyecto + +Incluya en un archivo [`/src/coolc.sh`](/src/coolc.sh) todas las instrucciones que hacen falta para lanzar su compilador. Recibirá como entrada un archivo con extensión `.cl` y debe generar como salida un archivo `.mips` cuyo nombre será el mismo que la entrada. + +Para lanzar el compilador, se ejecutará la siguiente instrucción: + +```bash +$ cd source +$ ./coolc.sh +``` + +### Sobre el Compilador de COOL + +El compilador de COOL se ejecutará como se ha definido anteriormente. +En caso de que no ocurran errores durante la operación del compilador, **coolc.sh** deberá terminar con código de salida 0, generar (o sobrescribir si ya existe) en la misma carpeta del archivo **.cl** procesado, y con el mismo nombre que éste, un archivo con extension **.mips** que pueda ser ejecutado con **spim**. Además, reportar a la salida estándar solamente lo siguiente: + + + + +En caso de que ocurran errores durante la operación del compilador, **coolc.sh** deberá terminar con código +de salida (exit code) 1 y reportar a la salida estándar (standard output stream) lo que sigue... + + + + _1 + ... + _n + +... donde `_i` tiene el siguiente formato: + + (,) - : + +Los campos `` y `` indican la ubicación del error en el fichero **.cl** procesado. En caso +de que la naturaleza del error sea tal que no pueda asociárselo a una línea y columna en el archivo de +código fuente, el valor de dichos campos debe ser 0. + +El campo `` será alguno entre: + +- `CompilerError`: se reporta al detectar alguna anomalía con la entrada del compilador. Por ejemplo, si el fichero a compilar no existe. +- `LexicographicError`: errores detectados por el lexer. +- `SyntacticError`: errores detectados por el parser. +- `NameError`: se reporta al referenciar un `identificador` en un ámbito en el que no es visible. +- `TypeError`: se reporta al detectar un problema de tipos. Incluye: + - incompatibilidad de tipos entre `rvalue` y `lvalue`, + - operación no definida entre objetos de ciertos tipos, y + - tipo referenciado pero no definido. +- `AttributeError`: se reporta cuando un atributo o método se referencia pero no está definido. +- `SemanticError`: cualquier otro error semántico. + +### Sobre la Implementación del Compilador de COOL + +El compilador debe estar implementado en `python`. Usted debe utilizar una herramienta generadora de analizadores +lexicográficos y sintácticos. Puede utilizar la que sea de su preferencia. diff --git a/src/codegen/__init__.py b/src/codegen/__init__.py index 166cefdd..7fd6b7c0 100644 --- a/src/codegen/__init__.py +++ b/src/codegen/__init__.py @@ -1,10 +1,10 @@ -from codegen.visitors.cil_visitor import COOLToCILVisitor -from codegen.visitors.cil_format_visitor import get_formatter - -def codegen_pipeline(context, ast, scope): - print('============= TRANSFORMING TO CIL =============') - cool_to_cil = COOLToCILVisitor(context) - cil_ast = cool_to_cil.visit(ast, scope) - formatter = get_formatter() - print(formatter(cil_ast)) +from codegen.visitors.cil_visitor import COOLToCILVisitor +from codegen.visitors.cil_format_visitor import get_formatter + +def codegen_pipeline(context, ast, scope): + print('============= TRANSFORMING TO CIL =============') + cool_to_cil = COOLToCILVisitor(context) + cil_ast = cool_to_cil.visit(ast, scope) + formatter = get_formatter() + print(formatter(cil_ast)) return ast, context, scope, cil_ast \ No newline at end of file diff --git a/src/codegen/cil_ast.py b/src/codegen/cil_ast.py index f19e35b4..bea35209 100644 --- a/src/codegen/cil_ast.py +++ b/src/codegen/cil_ast.py @@ -1,217 +1,217 @@ -class Node: - pass - - -class ProgramNode(Node): - def __init__(self, dottypes, dotdata, dotcode): - self.dottypes = dottypes - self.dotdata = dotdata - self.dotcode = dotcode - - -class TypeNode(Node): - def __init__(self, name): - self.name = name - self.attributes = [] - self.methods = [] - - -class DataNode(Node): - def __init__(self, vname, value): - self.name = vname - self.value = value - - -class FunctionNode(Node): - def __init__(self, fname, params, localvars, instructions): - self.name = fname - self.params = params - self.localvars = localvars - self.instructions = instructions - - -class ParamNode(Node): - def __init__(self, name): - self.name = name - - -class LocalNode(Node): - def __init__(self, name): - self.name = name - - -class InstructionNode(Node): - pass - - -class AssignNode(InstructionNode): - def __init__(self, dest, source): - self.dest = dest - self.source = source - - -class UnaryNode(InstructionNode): - def __init__(self, dest, expr): - self.dest = dest - self.expr = expr - - -class NotNode(UnaryNode): - pass - - -class BinaryNotNode(UnaryNode): - pass - - -class IsVoidNode(UnaryNode): - pass - - -class BinaryNode(InstructionNode): - def __init__(self, dest, left, right): - self.dest = dest - self.left = left - self.right = right - - -class PlusNode(BinaryNode): - pass - - -class MinusNode(BinaryNode): - pass - - -class StarNode(BinaryNode): - pass - - -class DivNode(BinaryNode): - pass - - -class GetAttribNode(InstructionNode): - def __init__(self, obj, attr, dest): - self.obj = obj - self.attr = attr - self.dest = dest - - -class SetAttribNode(InstructionNode): - def __init__(self, obj, attr, value): - self.obj = obj - self.attr = attr - self.value = value - - -class GetIndexNode(InstructionNode): - pass - - -class SetIndexNode(InstructionNode): - pass - - -class AllocateNode(InstructionNode): - def __init__(self, itype, dest): - self.type = itype - self.dest = dest - - -class ArrayNode(InstructionNode): - pass - - -class TypeOfNode(InstructionNode): - def __init__(self, obj, dest): - self.obj = obj - self.dest = dest - - -class LabelNode(InstructionNode): - def __init__(self, label): - self.label = label - - -class GotoNode(InstructionNode): - def __init__(self, label): - self.label = label - - -class GotoIfNode(InstructionNode): - def __init__(self, cond, label): - self.cond = cond - self.label = label - - -class StaticCallNode(InstructionNode): - def __init__(self, function, dest): - self.function = function - self.dest = dest - - -class DynamicCallNode(InstructionNode): - def __init__(self, xtype, method, dest): - self.type = xtype - self.method = method - self.dest = dest - - -class ArgNode(InstructionNode): - def __init__(self, name): - self.name = name - - -class ReturnNode(InstructionNode): - def __init__(self, value=None): - self.value = value - - -class LoadNode(InstructionNode): - def __init__(self, dest, msg): - self.dest = dest - self.msg = msg - - -class LengthNode(InstructionNode): - def __init__(self, dest, arg): - self.dest = dest - self.arg = arg - - -class ConcatNode(InstructionNode): - def __init__(self, dest, arg1, arg2): - self.dest = dest - self.arg1 = arg1 - self.arg2 = arg2 - - -class PrefixNode(InstructionNode): - def __init__(self, dest, word, n): - self.dest = dest - self.word = word - self.n = n - - -class SubstringNode(InstructionNode): - def __init__(self, dest, word, n): - self.dest = dest - self.word = word - self.n = n - - -class ToStrNode(InstructionNode): - def __init__(self, dest, ivalue): - self.dest = dest - self.ivalue = ivalue - - -class ReadNode(InstructionNode): - def __init__(self, dest): - self.dest = dest - - -class PrintNode(InstructionNode): - def __init__(self, str_addr): +class Node: + pass + + +class ProgramNode(Node): + def __init__(self, dottypes, dotdata, dotcode): + self.dottypes = dottypes + self.dotdata = dotdata + self.dotcode = dotcode + + +class TypeNode(Node): + def __init__(self, name): + self.name = name + self.attributes = [] + self.methods = [] + + +class DataNode(Node): + def __init__(self, vname, value): + self.name = vname + self.value = value + + +class FunctionNode(Node): + def __init__(self, fname, params, localvars, instructions): + self.name = fname + self.params = params + self.localvars = localvars + self.instructions = instructions + + +class ParamNode(Node): + def __init__(self, name): + self.name = name + + +class LocalNode(Node): + def __init__(self, name): + self.name = name + + +class InstructionNode(Node): + pass + + +class AssignNode(InstructionNode): + def __init__(self, dest, source): + self.dest = dest + self.source = source + + +class UnaryNode(InstructionNode): + def __init__(self, dest, expr): + self.dest = dest + self.expr = expr + + +class NotNode(UnaryNode): + pass + + +class BinaryNotNode(UnaryNode): + pass + + +class IsVoidNode(UnaryNode): + pass + + +class BinaryNode(InstructionNode): + def __init__(self, dest, left, right): + self.dest = dest + self.left = left + self.right = right + + +class PlusNode(BinaryNode): + pass + + +class MinusNode(BinaryNode): + pass + + +class StarNode(BinaryNode): + pass + + +class DivNode(BinaryNode): + pass + + +class GetAttribNode(InstructionNode): + def __init__(self, obj, attr, dest): + self.obj = obj + self.attr = attr + self.dest = dest + + +class SetAttribNode(InstructionNode): + def __init__(self, obj, attr, value): + self.obj = obj + self.attr = attr + self.value = value + + +class GetIndexNode(InstructionNode): + pass + + +class SetIndexNode(InstructionNode): + pass + + +class AllocateNode(InstructionNode): + def __init__(self, itype, dest): + self.type = itype + self.dest = dest + + +class ArrayNode(InstructionNode): + pass + + +class TypeOfNode(InstructionNode): + def __init__(self, obj, dest): + self.obj = obj + self.dest = dest + + +class LabelNode(InstructionNode): + def __init__(self, label): + self.label = label + + +class GotoNode(InstructionNode): + def __init__(self, label): + self.label = label + + +class GotoIfNode(InstructionNode): + def __init__(self, cond, label): + self.cond = cond + self.label = label + + +class StaticCallNode(InstructionNode): + def __init__(self, function, dest): + self.function = function + self.dest = dest + + +class DynamicCallNode(InstructionNode): + def __init__(self, xtype, method, dest): + self.type = xtype + self.method = method + self.dest = dest + + +class ArgNode(InstructionNode): + def __init__(self, name): + self.name = name + + +class ReturnNode(InstructionNode): + def __init__(self, value=None): + self.value = value + + +class LoadNode(InstructionNode): + def __init__(self, dest, msg): + self.dest = dest + self.msg = msg + + +class LengthNode(InstructionNode): + def __init__(self, dest, arg): + self.dest = dest + self.arg = arg + + +class ConcatNode(InstructionNode): + def __init__(self, dest, arg1, arg2): + self.dest = dest + self.arg1 = arg1 + self.arg2 = arg2 + + +class PrefixNode(InstructionNode): + def __init__(self, dest, word, n): + self.dest = dest + self.word = word + self.n = n + + +class SubstringNode(InstructionNode): + def __init__(self, dest, word, n): + self.dest = dest + self.word = word + self.n = n + + +class ToStrNode(InstructionNode): + def __init__(self, dest, ivalue): + self.dest = dest + self.ivalue = ivalue + + +class ReadNode(InstructionNode): + def __init__(self, dest): + self.dest = dest + + +class PrintNode(InstructionNode): + def __init__(self, str_addr): self.str_addr = str_addr \ No newline at end of file diff --git a/src/codegen/visitors/base_cil_visitor.py b/src/codegen/visitors/base_cil_visitor.py index 75edd2f2..2392cd50 100644 --- a/src/codegen/visitors/base_cil_visitor.py +++ b/src/codegen/visitors/base_cil_visitor.py @@ -1,126 +1,126 @@ -from codegen.cil_ast import ParamNode, LocalNode, FunctionNode, TypeNode, DataNode -from semantic.tools import VariableInfo, Scope -from semantic.types import Type, StringType, ObjectType, IOType -from codegen import cil_ast as cil -from utils.ast import BinaryNode, UnaryNode - - -class BaseCOOLToCILVisitor: - def __init__(self, context): - self.dottypes = [] - self.dotdata = [] - self.dotcode = [] - self.current_type = None - self.current_method = None - self.current_function = None - self.context = context - - @property - def params(self): - return self.current_function.params - - @property - def localvars(self): - return self.current_function.localvars - - @property - def instructions(self): - return self.current_function.instructions - - def register_param(self, vinfo): - param_node = ParamNode(vinfo.name) - vinfo.name = f'param_{self.current_function.name[9:]}_{vinfo.name}_{len(self.params)}' - self.params.append(param_node) - return vinfo.name - - def register_local(self, vinfo): - name = f'local_{self.current_function.name[9:]}_{vinfo.name}_{len(self.localvars)}' - local_node = LocalNode(name) - self.localvars.append(local_node) - return name - - def define_internal_local(self): - vinfo = VariableInfo('internal', None) - return self.register_local(vinfo) - - def register_instruction(self, instruction): - self.instructions.append(instruction) - return instruction - - def to_attr_name(self, attr_name, type_name): - return f'attribute_{attr_name}_{type_name}' - - def to_function_name(self, method_name, type_name): - return f'function_{method_name}_{type_name}' - - def register_function(self, function_name): - function_node = FunctionNode(function_name, [], [], []) - self.dotcode.append(function_node) - return function_node - - def register_type(self, name): - type_node = TypeNode(name) - self.dottypes.append(type_node) - return type_node - - def register_data(self, value): - vname = f'data_{len(self.dotdata)}' - data_node = DataNode(vname, value) - self.dotdata.append(data_node) - return data_node - - def _define_binary_node(self, node: BinaryNode, scope: Scope, cil_node: cil.Node): - result = self.define_internal_local() - left, typex = self.visit(node.left, scope) - right, typex = self.visit(node.right, scope) - self.register_instruction(cil_node(result, left, right)) - return result, typex - - def _define_unary_node(self, node: UnaryNode, scope: Scope, cil_node): - result = self.define_internal_local() - expr, typex = self.visit(node.expr, scope) - self.register_instruction(cil_node(result, expr)) - return result, typex - - def native_methods(self, typex: Type, name: str, *args): - if typex == StringType(): - return self.string_methods(name, *args) - elif typex == ObjectType(): - return self.object_methods(name, *args) - elif typex == IOType(): - return self.io_methods(name, *args) - - def string_methods(self, name, *args): - result = self.define_internal_local() - if name == 'length': - self.register_instruction(cil.LengthNode(result, *args)) - elif name == 'concat': - self.register_instruction(cil.ConcatNode(result, *args)) - elif name == 'substr': - self.register_instruction(cil.SubstringNode(result, *args)) - return result - - def object_methods(self, name, result, *args): - if name == 'abort': - pass - elif name == 'type_name': - pass - elif name == 'copy': - pass - - def io_methods(self, name, result, *args): - # ? Not sure of the difference between string and int - if name == 'out_string': - self.register_instruction(cil.PrintNode(*args)) - elif name == 'out_int': - aux = self.define_internal_local() - self.register_instruction(cil.ToStrNode(aux, *args)) - self.register_instruction(cil.PrintNode(aux)) - elif name == 'in_string': - result = self.define_internal_local() - self.register_instruction(cil.ReadNode(result)) - return result - elif name == 'in_int': - result = self.define_internal_local() - self.register_instruction(cil.ReadNode(result)) - return result +from codegen.cil_ast import ParamNode, LocalNode, FunctionNode, TypeNode, DataNode +from semantic.tools import VariableInfo, Scope +from semantic.types import Type, StringType, ObjectType, IOType +from codegen import cil_ast as cil +from utils.ast import BinaryNode, UnaryNode + + +class BaseCOOLToCILVisitor: + def __init__(self, context): + self.dottypes = [] + self.dotdata = [] + self.dotcode = [] + self.current_type = None + self.current_method = None + self.current_function = None + self.context = context + + @property + def params(self): + return self.current_function.params + + @property + def localvars(self): + return self.current_function.localvars + + @property + def instructions(self): + return self.current_function.instructions + + def register_param(self, vinfo): + param_node = ParamNode(vinfo.name) + vinfo.name = f'param_{self.current_function.name[9:]}_{vinfo.name}_{len(self.params)}' + self.params.append(param_node) + return vinfo.name + + def register_local(self, vinfo): + name = f'local_{self.current_function.name[9:]}_{vinfo.name}_{len(self.localvars)}' + local_node = LocalNode(name) + self.localvars.append(local_node) + return name + + def define_internal_local(self): + vinfo = VariableInfo('internal', None) + return self.register_local(vinfo) + + def register_instruction(self, instruction): + self.instructions.append(instruction) + return instruction + + def to_attr_name(self, attr_name, type_name): + return f'attribute_{attr_name}_{type_name}' + + def to_function_name(self, method_name, type_name): + return f'function_{method_name}_{type_name}' + + def register_function(self, function_name): + function_node = FunctionNode(function_name, [], [], []) + self.dotcode.append(function_node) + return function_node + + def register_type(self, name): + type_node = TypeNode(name) + self.dottypes.append(type_node) + return type_node + + def register_data(self, value): + vname = f'data_{len(self.dotdata)}' + data_node = DataNode(vname, value) + self.dotdata.append(data_node) + return data_node + + def _define_binary_node(self, node: BinaryNode, scope: Scope, cil_node: cil.Node): + result = self.define_internal_local() + left, typex = self.visit(node.left, scope) + right, typex = self.visit(node.right, scope) + self.register_instruction(cil_node(result, left, right)) + return result, typex + + def _define_unary_node(self, node: UnaryNode, scope: Scope, cil_node): + result = self.define_internal_local() + expr, typex = self.visit(node.expr, scope) + self.register_instruction(cil_node(result, expr)) + return result, typex + + def native_methods(self, typex: Type, name: str, *args): + if typex == StringType(): + return self.string_methods(name, *args) + elif typex == ObjectType(): + return self.object_methods(name, *args) + elif typex == IOType(): + return self.io_methods(name, *args) + + def string_methods(self, name, *args): + result = self.define_internal_local() + if name == 'length': + self.register_instruction(cil.LengthNode(result, *args)) + elif name == 'concat': + self.register_instruction(cil.ConcatNode(result, *args)) + elif name == 'substr': + self.register_instruction(cil.SubstringNode(result, *args)) + return result + + def object_methods(self, name, result, *args): + if name == 'abort': + pass + elif name == 'type_name': + pass + elif name == 'copy': + pass + + def io_methods(self, name, result, *args): + # ? Not sure of the difference between string and int + if name == 'out_string': + self.register_instruction(cil.PrintNode(*args)) + elif name == 'out_int': + aux = self.define_internal_local() + self.register_instruction(cil.ToStrNode(aux, *args)) + self.register_instruction(cil.PrintNode(aux)) + elif name == 'in_string': + result = self.define_internal_local() + self.register_instruction(cil.ReadNode(result)) + return result + elif name == 'in_int': + result = self.define_internal_local() + self.register_instruction(cil.ReadNode(result)) + return result diff --git a/src/codegen/visitors/cil_format_visitor.py b/src/codegen/visitors/cil_format_visitor.py index 480ce678..c83616f8 100644 --- a/src/codegen/visitors/cil_format_visitor.py +++ b/src/codegen/visitors/cil_format_visitor.py @@ -1,103 +1,103 @@ -from utils import visitor -from codegen.cil_ast import * - -def get_formatter(): - - class PrintVisitor(object): - @visitor.on('node') - def visit(self, node): - pass - - @visitor.when(ProgramNode) - def visit(self, node: ProgramNode): - dottypes = '\n'.join(self.visit(t) for t in node.dottypes) - dotdata = '\n'.join(self.visit(t) for t in node.dotdata) - dotcode = '\n'.join(self.visit(t) for t in node.dotcode) - - return f'.TYPES\n{dottypes}\n\n.DATA\n{dotdata}\n\n.CODE\n{dotcode}' - - @visitor.when(TypeNode) - def visit(self, node: TypeNode): - attributes = '\n\t'.join(f'attribute {x}: {y}' for x, y in node.attributes) - methods = '\n\t'.join(f'method {x}: {y}' for x, y in node.methods) - - return f'type {node.name} {{\n\t{attributes}\n\n\t{methods}\n}}' - - @visitor.when(FunctionNode) - def visit(self, node: FunctionNode): - params = '\n\t'.join(self.visit(x) for x in node.params) - localvars = '\n\t'.join(self.visit(x) for x in node.localvars) - instructions = '\n\t'.join(self.visit(x) for x in node.instructions) - - return f'function {node.name} {{\n\t{params}\n\n\t{localvars}\n\n\t{instructions}\n}}' - - @visitor.when(DataNode) - def visit(self, node: DataNode): - return f'{node.name} = "{node.value}"' - - @visitor.when(ParamNode) - def visit(self, node: ParamNode): - return f'PARAM {node.name}' - - @visitor.when(LocalNode) - def visit(self, node: LocalNode): - return f'LOCAL {node.name}' - - @visitor.when(AssignNode) - def visit(self, node: AssignNode): - return f'{node.dest} = {node.source}' - - @visitor.when(PlusNode) - def visit(self, node: PlusNode): - return f'{node.dest} = {node.left} + {node.right}' - - @visitor.when(MinusNode) - def visit(self, node: MinusNode): - return f'{node.dest} = {node.left} - {node.right}' - - @visitor.when(StarNode) - def visit(self, node: StarNode): - return f'{node.dest} = {node.left} * {node.right}' - - @visitor.when(DivNode) - def visit(self, node: DivNode): - return f'{node.dest} = {node.left} / {node.right}' - - @visitor.when(AllocateNode) - def visit(self, node: AllocateNode): - return f'{node.dest} = ALLOCATE {node.type}' - - @visitor.when(TypeOfNode) - def visit(self, node: TypeOfNode): - return f'{node.dest} = TYPEOF {node.obj}' - - @visitor.when(StaticCallNode) - def visit(self, node: StaticCallNode): - return f'{node.dest} = CALL {node.function}' - - @visitor.when(LoadNode) - def visit(self, node: LoadNode): - return f'{node.dest} = LOAD {node.msg}' - - @visitor.when(DynamicCallNode) - def visit(self, node: DynamicCallNode): - return f'{node.dest} = VCALL {node.type} {node.method}' - - @visitor.when(ArgNode) - def visit(self, node: ArgNode): - return f'ARG {node.name}' - - @visitor.when(ReturnNode) - def visit(self, node: ReturnNode): - return f'RETURN {node.value if node.value is not None else ""}' - - @visitor.when(GetAttribNode) - def visit(self, node: GetAttribNode): - return f'{node.dest} = GETATTR {node.obj} {node.attr.name}' - - @visitor.when(SetAttribNode) - def visit(self, node: SetAttribNode): - return f'SETATTR {node.obj} {node.attr.name} = {node.value}' - - printer = PrintVisitor() - return lambda ast: printer.visit(ast) +from utils import visitor +from codegen.cil_ast import * + +def get_formatter(): + + class PrintVisitor(object): + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node: ProgramNode): + dottypes = '\n'.join(self.visit(t) for t in node.dottypes) + dotdata = '\n'.join(self.visit(t) for t in node.dotdata) + dotcode = '\n'.join(self.visit(t) for t in node.dotcode) + + return f'.TYPES\n{dottypes}\n\n.DATA\n{dotdata}\n\n.CODE\n{dotcode}' + + @visitor.when(TypeNode) + def visit(self, node: TypeNode): + attributes = '\n\t'.join(f'attribute {x}: {y}' for x, y in node.attributes) + methods = '\n\t'.join(f'method {x}: {y}' for x, y in node.methods) + + return f'type {node.name} {{\n\t{attributes}\n\n\t{methods}\n}}' + + @visitor.when(FunctionNode) + def visit(self, node: FunctionNode): + params = '\n\t'.join(self.visit(x) for x in node.params) + localvars = '\n\t'.join(self.visit(x) for x in node.localvars) + instructions = '\n\t'.join(self.visit(x) for x in node.instructions) + + return f'function {node.name} {{\n\t{params}\n\n\t{localvars}\n\n\t{instructions}\n}}' + + @visitor.when(DataNode) + def visit(self, node: DataNode): + return f'{node.name} = "{node.value}"' + + @visitor.when(ParamNode) + def visit(self, node: ParamNode): + return f'PARAM {node.name}' + + @visitor.when(LocalNode) + def visit(self, node: LocalNode): + return f'LOCAL {node.name}' + + @visitor.when(AssignNode) + def visit(self, node: AssignNode): + return f'{node.dest} = {node.source}' + + @visitor.when(PlusNode) + def visit(self, node: PlusNode): + return f'{node.dest} = {node.left} + {node.right}' + + @visitor.when(MinusNode) + def visit(self, node: MinusNode): + return f'{node.dest} = {node.left} - {node.right}' + + @visitor.when(StarNode) + def visit(self, node: StarNode): + return f'{node.dest} = {node.left} * {node.right}' + + @visitor.when(DivNode) + def visit(self, node: DivNode): + return f'{node.dest} = {node.left} / {node.right}' + + @visitor.when(AllocateNode) + def visit(self, node: AllocateNode): + return f'{node.dest} = ALLOCATE {node.type}' + + @visitor.when(TypeOfNode) + def visit(self, node: TypeOfNode): + return f'{node.dest} = TYPEOF {node.obj}' + + @visitor.when(StaticCallNode) + def visit(self, node: StaticCallNode): + return f'{node.dest} = CALL {node.function}' + + @visitor.when(LoadNode) + def visit(self, node: LoadNode): + return f'{node.dest} = LOAD {node.msg}' + + @visitor.when(DynamicCallNode) + def visit(self, node: DynamicCallNode): + return f'{node.dest} = VCALL {node.type} {node.method}' + + @visitor.when(ArgNode) + def visit(self, node: ArgNode): + return f'ARG {node.name}' + + @visitor.when(ReturnNode) + def visit(self, node: ReturnNode): + return f'RETURN {node.value if node.value is not None else ""}' + + @visitor.when(GetAttribNode) + def visit(self, node: GetAttribNode): + return f'{node.dest} = GETATTR {node.obj} {node.attr.name}' + + @visitor.when(SetAttribNode) + def visit(self, node: SetAttribNode): + return f'SETATTR {node.obj} {node.attr.name} = {node.value}' + + printer = PrintVisitor() + return lambda ast: printer.visit(ast) diff --git a/src/codegen/visitors/cil_visitor.py b/src/codegen/visitors/cil_visitor.py index d95643f6..e5431ec3 100644 --- a/src/codegen/visitors/cil_visitor.py +++ b/src/codegen/visitors/cil_visitor.py @@ -1,347 +1,347 @@ -import codegen.cil_ast as cil -from codegen.visitors.base_cil_visitor import BaseCOOLToCILVisitor -from utils.ast import * -from semantic.tools import Scope, VariableInfo -from semantic.types import * -from utils import visitor -from utils.utils import get_type, get_common_basetype - - -class COOLToCILVisitor(BaseCOOLToCILVisitor): - @visitor.on('node') - def visit(self, node): - pass - - @visitor.when(ProgramNode) - def visit(self, node: ProgramNode, scope: Scope): - self.current_function = self.register_function('entry') - instance = self.define_internal_local() - result = self.define_internal_local() - self.register_instruction(cil.AllocateNode('Main', instance)) - self.register_instruction(cil.ArgNode(instance)) - name = self.to_function_name('main', 'Main') - self.register_instruction(cil.StaticCallNode(name, result)) - self.register_instruction(cil.ReturnNode(0)) - self.current_function = None - - for declaration, child_scope in zip(node.declarations, scope.children): - self.visit(declaration, child_scope) - - return cil.ProgramNode(self.dottypes, self.dotdata, self.dotcode) - - @visitor.when(ClassDeclarationNode) - def visit(self, node: ClassDeclarationNode, scope: Scope): - self.current_type = self.context.get_type(node.id, node.pos) - - cil_type = self.register_type(node.id) - - for method, mtype in self.current_type.all_methods(): - cil_type.methods.append((method.name, self.to_function_name(method.name, mtype.name))) - - for a_name, a_type in self.current_type.all_attributes(): - cil_type.attributes.append((a_name.name, self.to_attr_name(a_name.name, a_type.name))) - - func_declarations = (f for f in node.features if isinstance(f, FuncDeclarationNode)) - for feature, child_scope in zip(func_declarations, scope.children): - self.visit(feature, child_scope) - - @visitor.when(FuncDeclarationNode) - def visit(self, node: FuncDeclarationNode, scope: Scope): - self.current_method = self.current_type.get_method(node.id, node.pos) - - name = self.to_function_name(node.id, self.current_type.name) - self.current_function = self.register_function(name) - - # Handle PARAMS - self.register_param(VariableInfo('self', self.current_type)) - for p_name, p_type in node.params: - self.register_param(VariableInfo(p_name, p_type)) - - value, _ = self.visit(node.body, scope) - - # Handle RETURN - self.register_instruction(cil.ReturnNode(value)) - self.current_method = None - - @visitor.when(VarDeclarationNode) - def visit(self, node: VarDeclarationNode, scope: Scope): - #? Aquí son solo locals o attributes también - var_info = scope.find_variable(node.id) - vtype = get_type(var_info.type, self.current_type) - local_var = self.register_local(VariableInfo(var_info.name, vtype)) - - value, _ = self.visit(node.expr, scope) - self.register_instruction(cil.AssignNode(local_var, value)) - return local_var, vtype - - - @visitor.when(AssignNode) - def visit(self, node: AssignNode, scope: Scope): - var_info = scope.find_local(node.id) - if var_info is None: - var_info = scope.find_attribute(node.id) - value, typex = self.visit(node.expr, scope) - self.register_instruction(cil.SetAttribNode(VariableInfo('self', self.current_type), var_info, value)) - else: - value, typex = self.visit(node.expr, scope) - return value, typex - - def _return_type(self, typex: Type, node): - meth = typex.get_method(node.id, node.pos) - return get_type(meth.return_type, self.current_type) - - @visitor.when(CallNode) - def visit(self, node: CallNode, scope: Scope): - result = self.define_internal_local() - obj, otype = self.visit(node.obj, scope) - - args = [self.visit(arg, scope)[0] for arg in node.args] - - self.register_instruction(cil.ArgNode(obj)) - for arg in args: - self.register_instruction(cil.ArgNode(arg)) - - name = self.to_function_name(node.id, otype.name) - self.register_instruction(cil.DynamicCallNode(otype.name, name, result)) - return result, self._return_type(otype, node) - - @visitor.when(BaseCallNode) - def visit(self, node: BaseCallNode, scope: Scope): - result = self.define_internal_local() - obj, otype = self.visit(node.obj, scope) - - args = [self.visit(arg, scope)[0] for arg in node.args] - - self.register_instruction(cil.ArgNode(obj)) - for arg in args: - self.register_instruction(cil.ArgNode(arg)) - - name = self.to_function_name(node.id, node.type) - self.register_instruction(cil.DynamicCallNode(node.type, name, result)) - return result, self._return_type(otype, node) - - @visitor.when(StaticCallNode) - def visit(self, node: StaticCallNode, scope: Scope): - result = self.define_internal_local() - - args = [self.visit(arg, scope)[0] for arg in node.args] - - self.register_instruction(cil.ArgNode('self')) - for arg in args: - self.register_instruction(cil.ArgNode(arg)) - - name = self.to_function_name(node.id, self.current_type.name) - self.register_instruction(cil.StaticCallNode(name, result)) - return result, self._return_type(self.current_type, node) - - @visitor.when(ConstantNumNode) - def visit(self, node: ConstantNumNode, scope: Scope): - return int(node.lex), IntType() - - @visitor.when(ConstantBoolNode) - def visit(self, node: ConstantBoolNode, scope: Scope): - return 1 if node.lex == 'true' else 0, BoolType() - - @visitor.when(ConstantStrNode) - def visit(self, node: ConstantStrNode, scope: Scope): - data = self.register_data(node.lex) - result = self.define_internal_local() - self.register_instruction(cil.LoadNode(result, data.name)) - return result, StringType() - - @visitor.when(VariableNode) - def visit(self, node: VariableNode, scope: Scope): - try: - typex = scope.find_local(node.lex).type - return node.lex, get_type(typex, self.current_type) - except: - var_info = scope.find_attribute(node.lex) - local_var = self.register_local(var_info) - self.register_instruction(cil.GetAttribNode('self', var_info, local_var)) - return local_var, get_type(var_info.type, self.current_type) - - @visitor.when(InstantiateNode) - def visit(self, node: InstantiateNode, scope: Scope): - instance = self.define_internal_local() - typex = self.context.get_type(node.lex, node.pos) - typex = get_type(typex, self.current_type) - self.register_instruction(cil.AllocateNode(typex.name, instance)) - - for attr, _ in typex.all_attributes(clean=True): - expr, _ = self.visit(attr.expr, scope) - self.register_instruction(cil.SetAttribNode(instance, attr, expr)) - return instance, typex - - - @visitor.when(WhileNode) - def visit(self, node: WhileNode, scope: Scope): - ''' - LABEL start - IF GOTO continue - GOTO end - LABEL continue - res = - GOTO start - LABEL end - ''' - start_label = cil.LabelNode('start') - continue_label = cil.LabelNode('continue') - end_label = cil.LabelNode('end') - - result = self.define_internal_local() - self.register_instruction(cil.AssignNode(result, ConstantVoidNode())) - self.register_instruction(start_label) - - cond, _ = self.visit(node.cond, scope) - self.register_instruction(cil.GotoIfNode(cond, continue_label)) - self.register_instruction(cil.GotoNode(end_label)) - self.register_instruction(continue_label) - expr, typex = self.visit(node.expr, scope) - self.register_instruction(cil.GotoNode(start_label)) - self.register_instruction(end_label) - - self.register_instruction(cil.AssignNode(result, expr)) - return result, typex - - @visitor.when(ConditionalNode) - def visit(self, node: ConditionalNode, scope: Scope): - ''' - IF cond GOTO true - result = - GOTO end - LABEL true - result = - LABEL end - ''' - cond, _ = self.visit(node.cond, scope) - - true_label = cil.LabelNode("true") - end_label = cil.LabelNode("end") - - result = self.define_internal_local() - self.register_instruction(cil.GotoIfNode(cond, true_label)) - - false_expr, ftypex = self.visit(node.else_stm, scope) - self.register_instruction(cil.AssignNode(result, false_expr)) - self.register_instruction(cil.GotoNode(end_label)) - self.register_instruction(true_label) - - true_expr, ttypex = self.visit(node.stm, scope) - self.register_instruction(cil.AssignNode(result, true_expr)) - self.register_instruction(end_label) - return result, get_common_basetype([ttypex, ftypex]) - - @visitor.when(BlockNode) - def visit(self, node: BlockNode, scope: Scope): - result = self.define_internal_local() - value = None - for exp in node.expr_list: - value, typex = self.visit(exp, scope) - self.register_instruction(cil.AssignNode(result, value)) - return result, typex - - @visitor.when(LetNode) - def visit(self, node: LetNode, scope: Scope): - child_scope = scope.expr_dict[node] - for init in node.init_list: - self.visit(init, child_scope) - - result = self.define_internal_local() - expr, typex = self.visit(node.expr, child_scope) - self.register_instruction(cil.AssignNode(result, expr)) - return result, typex - - @visitor.when(CaseNode) - def visit(self, node: CaseNode, scope: Scope): - expr, typex = self.visit(node.expr, scope) - result = self.define_internal_local() - etype = self.define_internal_local() - end_label = cil.LabelNode('end') - self.register_instruction(cil.TypeOfNode(expr, etype)) - - new_scope = scope.expr_dict[node] - for i, (case, c_scope) in enumerate(zip(node.case_list, new_scope.children)): - next_label = cil.LabelNode(f'next_{i}') - expr_i, label = self.visit(case, c_scope, expr, etype, next_label) - self.register_instruction(cil.AssignNode(result, expr_i)) - self.register_instruction(cil.GotoNode(end_label)) - self.register_instruction(label) - self.register_instruction(end_label) - return result, typex - - @visitor.when(OptionNode) - def visit(self, node: OptionNode, scope: Scope, expr, expr_type, next_label): - aux = self.define_internal_local() - # TODO: Buscar una forma de representar conforms in cil - self.register_instruction(cil.MinusNode(aux, expr_type, node.typex)) - - self.register_instruction(cil.GotoIfNode(aux, next_label)) - var_info = scope.find_variable(node.id) - local_var = self.register_local(var_info) - self.register_instruction(cil.AssignNode(node.id, expr)) - - expr_i, typex = self.visit(node.expr, scope) - return exp_i, next_label - - @visitor.when(NotNode) - def visit(self, node: NotNode, scope: Scope): - """ - expr = - IF expr GOTO true - res = 1 - GOTO end - LABEL true - res = 0 - LABEL end - """ - #? No sé si representar un no... - result = self.define_internal_local() - expr, _ = self.visit(node.expr, scope) - - true_label = cil.LabelNode('true') - end_label = cil.LabelNode('end') - self.register_instruction(cil.GotoIfNode(expr, true_label)) - self.register_instruction(cil.AssignNode(result, 1)) - self.register_instruction(cil.GotoNode(end_label)) - self.register_instruction(true_label) - self.register_instruction(cil.AssignNode(result, 0)) - self.register_instruction(end_label) - # return self._define_unary_node(node, scope, cil.NotNode) - return result, BoolType() - - @visitor.when(BinaryNotNode) - def visit(self, node: NotNode, scope: Scope): - return self._define_unary_node(node, scope, cil.BinaryNotNode) - - - @visitor.when(IsVoidNode) - def visit(self, node: IsVoidNode, scope: Scope): - return self._define_unary_node(node, scope, cil.IsVoidNode) - - @visitor.when(PlusNode) - def visit(self, node: PlusNode, scope: Scope): - return self._define_binary_node(node, scope, cil.PlusNode) - - @visitor.when(MinusNode) - def visit(self, node: MinusNode, scope: Scope): - return self._define_binary_node(node, scope, cil.MinusNode) - - @visitor.when(StarNode) - def visit(self, node: StarNode, scope: Scope): - return self._define_binary_node(node, scope, cil.StarNode) - - @visitor.when(DivNode) - def visit(self, node: DivNode, scope: Scope): - return self._define_binary_node(node, scope, cil.DivNode) - - @visitor.when(LessNode) - def visit(self, node: LessNode, scope: Scope): - return self._define_binary_node(node, scope, cil.MinusNode) - - @visitor.when(LessEqNode) - def visit(self, node: LessEqNode, scope: Scope): - return self._define_binary_node(node, scope, cil.LessEqNode) - - @visitor.when(EqualNode) - def visit(self, node: EqualNode, scope: Scope): - return self._define_binary_node(node, scope, cil.MinusNode) +import codegen.cil_ast as cil +from codegen.visitors.base_cil_visitor import BaseCOOLToCILVisitor +from utils.ast import * +from semantic.tools import Scope, VariableInfo +from semantic.types import * +from utils import visitor +from utils.utils import get_type, get_common_basetype + + +class COOLToCILVisitor(BaseCOOLToCILVisitor): + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node: ProgramNode, scope: Scope): + self.current_function = self.register_function('entry') + instance = self.define_internal_local() + result = self.define_internal_local() + self.register_instruction(cil.AllocateNode('Main', instance)) + self.register_instruction(cil.ArgNode(instance)) + name = self.to_function_name('main', 'Main') + self.register_instruction(cil.StaticCallNode(name, result)) + self.register_instruction(cil.ReturnNode(0)) + self.current_function = None + + for declaration, child_scope in zip(node.declarations, scope.children): + self.visit(declaration, child_scope) + + return cil.ProgramNode(self.dottypes, self.dotdata, self.dotcode) + + @visitor.when(ClassDeclarationNode) + def visit(self, node: ClassDeclarationNode, scope: Scope): + self.current_type = self.context.get_type(node.id, node.pos) + + cil_type = self.register_type(node.id) + + for method, mtype in self.current_type.all_methods(): + cil_type.methods.append((method.name, self.to_function_name(method.name, mtype.name))) + + for a_name, a_type in self.current_type.all_attributes(): + cil_type.attributes.append((a_name.name, self.to_attr_name(a_name.name, a_type.name))) + + func_declarations = (f for f in node.features if isinstance(f, FuncDeclarationNode)) + for feature, child_scope in zip(func_declarations, scope.children): + self.visit(feature, child_scope) + + @visitor.when(FuncDeclarationNode) + def visit(self, node: FuncDeclarationNode, scope: Scope): + self.current_method = self.current_type.get_method(node.id, node.pos) + + name = self.to_function_name(node.id, self.current_type.name) + self.current_function = self.register_function(name) + + # Handle PARAMS + self.register_param(VariableInfo('self', self.current_type)) + for p_name, p_type in node.params: + self.register_param(VariableInfo(p_name, p_type)) + + value, _ = self.visit(node.body, scope) + + # Handle RETURN + self.register_instruction(cil.ReturnNode(value)) + self.current_method = None + + @visitor.when(VarDeclarationNode) + def visit(self, node: VarDeclarationNode, scope: Scope): + #? Aquí son solo locals o attributes también + var_info = scope.find_variable(node.id) + vtype = get_type(var_info.type, self.current_type) + local_var = self.register_local(VariableInfo(var_info.name, vtype)) + + value, _ = self.visit(node.expr, scope) + self.register_instruction(cil.AssignNode(local_var, value)) + return local_var, vtype + + + @visitor.when(AssignNode) + def visit(self, node: AssignNode, scope: Scope): + var_info = scope.find_local(node.id) + if var_info is None: + var_info = scope.find_attribute(node.id) + value, typex = self.visit(node.expr, scope) + self.register_instruction(cil.SetAttribNode(VariableInfo('self', self.current_type), var_info, value)) + else: + value, typex = self.visit(node.expr, scope) + return value, typex + + def _return_type(self, typex: Type, node): + meth = typex.get_method(node.id, node.pos) + return get_type(meth.return_type, self.current_type) + + @visitor.when(CallNode) + def visit(self, node: CallNode, scope: Scope): + result = self.define_internal_local() + obj, otype = self.visit(node.obj, scope) + + args = [self.visit(arg, scope)[0] for arg in node.args] + + self.register_instruction(cil.ArgNode(obj)) + for arg in args: + self.register_instruction(cil.ArgNode(arg)) + + name = self.to_function_name(node.id, otype.name) + self.register_instruction(cil.DynamicCallNode(otype.name, name, result)) + return result, self._return_type(otype, node) + + @visitor.when(BaseCallNode) + def visit(self, node: BaseCallNode, scope: Scope): + result = self.define_internal_local() + obj, otype = self.visit(node.obj, scope) + + args = [self.visit(arg, scope)[0] for arg in node.args] + + self.register_instruction(cil.ArgNode(obj)) + for arg in args: + self.register_instruction(cil.ArgNode(arg)) + + name = self.to_function_name(node.id, node.type) + self.register_instruction(cil.DynamicCallNode(node.type, name, result)) + return result, self._return_type(otype, node) + + @visitor.when(StaticCallNode) + def visit(self, node: StaticCallNode, scope: Scope): + result = self.define_internal_local() + + args = [self.visit(arg, scope)[0] for arg in node.args] + + self.register_instruction(cil.ArgNode('self')) + for arg in args: + self.register_instruction(cil.ArgNode(arg)) + + name = self.to_function_name(node.id, self.current_type.name) + self.register_instruction(cil.StaticCallNode(name, result)) + return result, self._return_type(self.current_type, node) + + @visitor.when(ConstantNumNode) + def visit(self, node: ConstantNumNode, scope: Scope): + return int(node.lex), IntType() + + @visitor.when(ConstantBoolNode) + def visit(self, node: ConstantBoolNode, scope: Scope): + return 1 if node.lex == 'true' else 0, BoolType() + + @visitor.when(ConstantStrNode) + def visit(self, node: ConstantStrNode, scope: Scope): + data = self.register_data(node.lex) + result = self.define_internal_local() + self.register_instruction(cil.LoadNode(result, data.name)) + return result, StringType() + + @visitor.when(VariableNode) + def visit(self, node: VariableNode, scope: Scope): + try: + typex = scope.find_local(node.lex).type + return node.lex, get_type(typex, self.current_type) + except: + var_info = scope.find_attribute(node.lex) + local_var = self.register_local(var_info) + self.register_instruction(cil.GetAttribNode('self', var_info, local_var)) + return local_var, get_type(var_info.type, self.current_type) + + @visitor.when(InstantiateNode) + def visit(self, node: InstantiateNode, scope: Scope): + instance = self.define_internal_local() + typex = self.context.get_type(node.lex, node.pos) + typex = get_type(typex, self.current_type) + self.register_instruction(cil.AllocateNode(typex.name, instance)) + + for attr, _ in typex.all_attributes(clean=True): + expr, _ = self.visit(attr.expr, scope) + self.register_instruction(cil.SetAttribNode(instance, attr, expr)) + return instance, typex + + + @visitor.when(WhileNode) + def visit(self, node: WhileNode, scope: Scope): + ''' + LABEL start + IF GOTO continue + GOTO end + LABEL continue + res = + GOTO start + LABEL end + ''' + start_label = cil.LabelNode('start') + continue_label = cil.LabelNode('continue') + end_label = cil.LabelNode('end') + + result = self.define_internal_local() + self.register_instruction(cil.AssignNode(result, ConstantVoidNode())) + self.register_instruction(start_label) + + cond, _ = self.visit(node.cond, scope) + self.register_instruction(cil.GotoIfNode(cond, continue_label)) + self.register_instruction(cil.GotoNode(end_label)) + self.register_instruction(continue_label) + expr, typex = self.visit(node.expr, scope) + self.register_instruction(cil.GotoNode(start_label)) + self.register_instruction(end_label) + + self.register_instruction(cil.AssignNode(result, expr)) + return result, typex + + @visitor.when(ConditionalNode) + def visit(self, node: ConditionalNode, scope: Scope): + ''' + IF cond GOTO true + result = + GOTO end + LABEL true + result = + LABEL end + ''' + cond, _ = self.visit(node.cond, scope) + + true_label = cil.LabelNode("true") + end_label = cil.LabelNode("end") + + result = self.define_internal_local() + self.register_instruction(cil.GotoIfNode(cond, true_label)) + + false_expr, ftypex = self.visit(node.else_stm, scope) + self.register_instruction(cil.AssignNode(result, false_expr)) + self.register_instruction(cil.GotoNode(end_label)) + self.register_instruction(true_label) + + true_expr, ttypex = self.visit(node.stm, scope) + self.register_instruction(cil.AssignNode(result, true_expr)) + self.register_instruction(end_label) + return result, get_common_basetype([ttypex, ftypex]) + + @visitor.when(BlockNode) + def visit(self, node: BlockNode, scope: Scope): + result = self.define_internal_local() + value = None + for exp in node.expr_list: + value, typex = self.visit(exp, scope) + self.register_instruction(cil.AssignNode(result, value)) + return result, typex + + @visitor.when(LetNode) + def visit(self, node: LetNode, scope: Scope): + child_scope = scope.expr_dict[node] + for init in node.init_list: + self.visit(init, child_scope) + + result = self.define_internal_local() + expr, typex = self.visit(node.expr, child_scope) + self.register_instruction(cil.AssignNode(result, expr)) + return result, typex + + @visitor.when(CaseNode) + def visit(self, node: CaseNode, scope: Scope): + expr, typex = self.visit(node.expr, scope) + result = self.define_internal_local() + etype = self.define_internal_local() + end_label = cil.LabelNode('end') + self.register_instruction(cil.TypeOfNode(expr, etype)) + + new_scope = scope.expr_dict[node] + for i, (case, c_scope) in enumerate(zip(node.case_list, new_scope.children)): + next_label = cil.LabelNode(f'next_{i}') + expr_i, label = self.visit(case, c_scope, expr, etype, next_label) + self.register_instruction(cil.AssignNode(result, expr_i)) + self.register_instruction(cil.GotoNode(end_label)) + self.register_instruction(label) + self.register_instruction(end_label) + return result, typex + + @visitor.when(OptionNode) + def visit(self, node: OptionNode, scope: Scope, expr, expr_type, next_label): + aux = self.define_internal_local() + # TODO: Buscar una forma de representar conforms in cil + self.register_instruction(cil.MinusNode(aux, expr_type, node.typex)) + + self.register_instruction(cil.GotoIfNode(aux, next_label)) + var_info = scope.find_variable(node.id) + local_var = self.register_local(var_info) + self.register_instruction(cil.AssignNode(node.id, expr)) + + expr_i, typex = self.visit(node.expr, scope) + return exp_i, next_label + + @visitor.when(NotNode) + def visit(self, node: NotNode, scope: Scope): + """ + expr = + IF expr GOTO true + res = 1 + GOTO end + LABEL true + res = 0 + LABEL end + """ + #? No sé si representar un no... + result = self.define_internal_local() + expr, _ = self.visit(node.expr, scope) + + true_label = cil.LabelNode('true') + end_label = cil.LabelNode('end') + self.register_instruction(cil.GotoIfNode(expr, true_label)) + self.register_instruction(cil.AssignNode(result, 1)) + self.register_instruction(cil.GotoNode(end_label)) + self.register_instruction(true_label) + self.register_instruction(cil.AssignNode(result, 0)) + self.register_instruction(end_label) + # return self._define_unary_node(node, scope, cil.NotNode) + return result, BoolType() + + @visitor.when(BinaryNotNode) + def visit(self, node: NotNode, scope: Scope): + return self._define_unary_node(node, scope, cil.BinaryNotNode) + + + @visitor.when(IsVoidNode) + def visit(self, node: IsVoidNode, scope: Scope): + return self._define_unary_node(node, scope, cil.IsVoidNode) + + @visitor.when(PlusNode) + def visit(self, node: PlusNode, scope: Scope): + return self._define_binary_node(node, scope, cil.PlusNode) + + @visitor.when(MinusNode) + def visit(self, node: MinusNode, scope: Scope): + return self._define_binary_node(node, scope, cil.MinusNode) + + @visitor.when(StarNode) + def visit(self, node: StarNode, scope: Scope): + return self._define_binary_node(node, scope, cil.StarNode) + + @visitor.when(DivNode) + def visit(self, node: DivNode, scope: Scope): + return self._define_binary_node(node, scope, cil.DivNode) + + @visitor.when(LessNode) + def visit(self, node: LessNode, scope: Scope): + return self._define_binary_node(node, scope, cil.MinusNode) + + @visitor.when(LessEqNode) + def visit(self, node: LessEqNode, scope: Scope): + return self._define_binary_node(node, scope, cil.LessEqNode) + + @visitor.when(EqualNode) + def visit(self, node: EqualNode, scope: Scope): + return self._define_binary_node(node, scope, cil.MinusNode) diff --git a/src/cool_parser/__init__.py b/src/cool_parser/__init__.py index a589d8b8..ce456e07 100644 --- a/src/cool_parser/__init__.py +++ b/src/cool_parser/__init__.py @@ -1 +1 @@ -from cool_parser.parser import CoolParser +from cool_parser.parser import CoolParser diff --git a/src/cool_parser/base_parser.py b/src/cool_parser/base_parser.py index c0243856..29188afe 100644 --- a/src/cool_parser/base_parser.py +++ b/src/cool_parser/base_parser.py @@ -1,26 +1,26 @@ -from utils.tokens import tokens -import os -import ply.yacc as yacc - -from cool_parser.logger import log -from lexer.lexer import CoolLexer -from utils.tokens import tokens - -class Parser: - def __init__(self, lexer=None): - self.lexer = lexer if lexer else CoolLexer() - self.outputdir = 'cool_parser/output_parser' - self.tokens = tokens - self.errors = False - self.parser = yacc.yacc(start='program', - module=self, - outputdir=self.outputdir, - optimize=1, - debuglog=log, - errorlog=log) - - - def parse(self, program, debug=False): - self.errors = False - # tokens = self.lexer.tokenize_text(program) +from utils.tokens import tokens +import os +import ply.yacc as yacc + +from cool_parser.logger import log +from lexer.lexer import CoolLexer +from utils.tokens import tokens + +class Parser: + def __init__(self, lexer=None): + self.lexer = lexer if lexer else CoolLexer() + self.outputdir = 'cool_parser/output_parser' + self.tokens = tokens + self.errors = False + self.parser = yacc.yacc(start='program', + module=self, + outputdir=self.outputdir, + optimize=1, + debuglog=log, + errorlog=log) + + + def parse(self, program, debug=False): + self.errors = False + # tokens = self.lexer.tokenize_text(program) return self.parser.parse(program, self.lexer.lexer, debug=log) \ No newline at end of file diff --git a/src/cool_parser/logger.py b/src/cool_parser/logger.py index 7a3cf13d..e1d62278 100644 --- a/src/cool_parser/logger.py +++ b/src/cool_parser/logger.py @@ -1,13 +1,13 @@ - # Set up a logging object -import logging -import os - -cwd = os.getcwd() - -logging.basicConfig( - level = logging.DEBUG, - filename = f"cool_parser/output_parser/parselog.txt", - filemode = "w", - format = "%(filename)10s:%(lineno)4d:%(message)s" - ) -log = logging.getLogger() + # Set up a logging object +import logging +import os + +cwd = os.getcwd() + +logging.basicConfig( + level = logging.DEBUG, + filename = f"cool_parser/output_parser/parselog.txt", + filemode = "w", + format = "%(filename)10s:%(lineno)4d:%(message)s" + ) +log = logging.getLogger() diff --git a/src/cool_parser/output_parser/parselog.txt b/src/cool_parser/output_parser/parselog.txt index f6919260..8e2b175c 100644 --- a/src/cool_parser/output_parser/parselog.txt +++ b/src/cool_parser/output_parser/parselog.txt @@ -1,7821 +1,7821 @@ - yacc.py:3317:Created by PLY version 3.11 (http://www.dabeaz.com/ply) - yacc.py:3377: - yacc.py:3378:Grammar - yacc.py:3379: - yacc.py:3381:Rule 0 S' -> program - yacc.py:3381:Rule 1 program -> class_list - yacc.py:3381:Rule 2 epsilon -> - yacc.py:3381:Rule 3 class_list -> def_class class_list - yacc.py:3381:Rule 4 class_list -> def_class - yacc.py:3381:Rule 5 class_list -> error class_list - yacc.py:3381:Rule 6 def_class -> class type ocur feature_list ccur semi - yacc.py:3381:Rule 7 def_class -> class type inherits type ocur feature_list ccur semi - yacc.py:3381:Rule 8 def_class -> class error ocur feature_list ccur semi - yacc.py:3381:Rule 9 def_class -> class type ocur feature_list ccur error - yacc.py:3381:Rule 10 def_class -> class error inherits type ocur feature_list ccur semi - yacc.py:3381:Rule 11 def_class -> class error inherits error ocur feature_list ccur semi - yacc.py:3381:Rule 12 def_class -> class type inherits error ocur feature_list ccur semi - yacc.py:3381:Rule 13 def_class -> class type inherits type ocur feature_list ccur error - yacc.py:3381:Rule 14 feature_list -> epsilon - yacc.py:3381:Rule 15 feature_list -> def_attr semi feature_list - yacc.py:3381:Rule 16 feature_list -> def_func semi feature_list - yacc.py:3381:Rule 17 feature_list -> error feature_list - yacc.py:3381:Rule 18 def_attr -> id colon type - yacc.py:3381:Rule 19 def_attr -> id colon type larrow expr - yacc.py:3381:Rule 20 def_attr -> error colon type - yacc.py:3381:Rule 21 def_attr -> id colon error - yacc.py:3381:Rule 22 def_attr -> error colon type larrow expr - yacc.py:3381:Rule 23 def_attr -> id colon error larrow expr - yacc.py:3381:Rule 24 def_attr -> id colon type larrow error - yacc.py:3381:Rule 25 def_func -> id opar formals cpar colon type ocur expr ccur - yacc.py:3381:Rule 26 def_func -> error opar formals cpar colon type ocur expr ccur - yacc.py:3381:Rule 27 def_func -> id opar error cpar colon type ocur expr ccur - yacc.py:3381:Rule 28 def_func -> id opar formals cpar colon error ocur expr ccur - yacc.py:3381:Rule 29 def_func -> id opar formals cpar colon type ocur error ccur - yacc.py:3381:Rule 30 formals -> param_list - yacc.py:3381:Rule 31 formals -> param_list_empty - yacc.py:3381:Rule 32 param_list -> param - yacc.py:3381:Rule 33 param_list -> param comma param_list - yacc.py:3381:Rule 34 param_list_empty -> epsilon - yacc.py:3381:Rule 35 param -> id colon type - yacc.py:3381:Rule 36 let_list -> let_assign - yacc.py:3381:Rule 37 let_list -> let_assign comma let_list - yacc.py:3381:Rule 38 let_assign -> param larrow expr - yacc.py:3381:Rule 39 let_assign -> param - yacc.py:3381:Rule 40 cases_list -> casep semi - yacc.py:3381:Rule 41 cases_list -> casep semi cases_list - yacc.py:3381:Rule 42 cases_list -> error cases_list - yacc.py:3381:Rule 43 cases_list -> error semi - yacc.py:3381:Rule 44 casep -> id colon type rarrow expr - yacc.py:3381:Rule 45 expr -> id larrow expr - yacc.py:3381:Rule 46 expr -> comp - yacc.py:3381:Rule 47 comp -> comp less op - yacc.py:3381:Rule 48 comp -> comp lesseq op - yacc.py:3381:Rule 49 comp -> comp equal op - yacc.py:3381:Rule 50 comp -> op - yacc.py:3381:Rule 51 op -> op plus term - yacc.py:3381:Rule 52 op -> op minus term - yacc.py:3381:Rule 53 op -> term - yacc.py:3381:Rule 54 term -> term star base_call - yacc.py:3381:Rule 55 term -> term div base_call - yacc.py:3381:Rule 56 term -> base_call - yacc.py:3381:Rule 57 term -> term star error - yacc.py:3381:Rule 58 term -> term div error - yacc.py:3381:Rule 59 base_call -> factor arroba type dot func_call - yacc.py:3381:Rule 60 base_call -> factor - yacc.py:3381:Rule 61 base_call -> error arroba type dot func_call - yacc.py:3381:Rule 62 base_call -> factor arroba error dot func_call - yacc.py:3381:Rule 63 factor -> atom - yacc.py:3381:Rule 64 factor -> opar expr cpar - yacc.py:3381:Rule 65 factor -> factor dot func_call - yacc.py:3381:Rule 66 factor -> not expr - yacc.py:3381:Rule 67 factor -> func_call - yacc.py:3381:Rule 68 factor -> isvoid base_call - yacc.py:3381:Rule 69 factor -> nox base_call - yacc.py:3381:Rule 70 factor -> let let_list in expr - yacc.py:3381:Rule 71 factor -> case expr of cases_list esac - yacc.py:3381:Rule 72 factor -> if expr then expr else expr fi - yacc.py:3381:Rule 73 factor -> while expr loop expr pool - yacc.py:3381:Rule 74 atom -> num - yacc.py:3381:Rule 75 atom -> id - yacc.py:3381:Rule 76 atom -> new type - yacc.py:3381:Rule 77 atom -> ocur block ccur - yacc.py:3381:Rule 78 atom -> error block ccur - yacc.py:3381:Rule 79 atom -> ocur error ccur - yacc.py:3381:Rule 80 atom -> ocur block error - yacc.py:3381:Rule 81 atom -> true - yacc.py:3381:Rule 82 atom -> false - yacc.py:3381:Rule 83 atom -> string - yacc.py:3381:Rule 84 block -> expr semi - yacc.py:3381:Rule 85 block -> expr semi block - yacc.py:3381:Rule 86 block -> error block - yacc.py:3381:Rule 87 block -> error semi - yacc.py:3381:Rule 88 func_call -> id opar args cpar - yacc.py:3381:Rule 89 func_call -> id opar error cpar - yacc.py:3381:Rule 90 func_call -> error opar args cpar - yacc.py:3381:Rule 91 args -> arg_list - yacc.py:3381:Rule 92 args -> arg_list_empty - yacc.py:3381:Rule 93 arg_list -> expr - yacc.py:3381:Rule 94 arg_list -> expr comma arg_list - yacc.py:3381:Rule 95 arg_list -> error arg_list - yacc.py:3381:Rule 96 arg_list_empty -> epsilon - yacc.py:3399: - yacc.py:3400:Terminals, with rules where they appear - yacc.py:3401: - yacc.py:3405:arroba : 59 61 62 - yacc.py:3405:case : 71 - yacc.py:3405:ccur : 6 7 8 9 10 11 12 13 25 26 27 28 29 77 78 79 - yacc.py:3405:class : 6 7 8 9 10 11 12 13 - yacc.py:3405:colon : 18 19 20 21 22 23 24 25 26 27 28 29 35 44 - yacc.py:3405:comma : 33 37 94 - yacc.py:3405:cpar : 25 26 27 28 29 64 88 89 90 - yacc.py:3405:div : 55 58 - yacc.py:3405:dot : 59 61 62 65 - yacc.py:3405:else : 72 - yacc.py:3405:equal : 49 - yacc.py:3405:error : 5 8 9 10 11 11 12 13 17 20 21 22 23 24 26 27 28 29 42 43 57 58 61 62 78 79 80 86 87 89 90 95 - yacc.py:3405:esac : 71 - yacc.py:3405:false : 82 - yacc.py:3405:fi : 72 - yacc.py:3405:id : 18 19 21 23 24 25 27 28 29 35 44 45 75 88 89 - yacc.py:3405:if : 72 - yacc.py:3405:in : 70 - yacc.py:3405:inherits : 7 10 11 12 13 - yacc.py:3405:isvoid : 68 - yacc.py:3405:larrow : 19 22 23 24 38 45 - yacc.py:3405:less : 47 - yacc.py:3405:lesseq : 48 - yacc.py:3405:let : 70 - yacc.py:3405:loop : 73 - yacc.py:3405:minus : 52 - yacc.py:3405:new : 76 - yacc.py:3405:not : 66 - yacc.py:3405:nox : 69 - yacc.py:3405:num : 74 - yacc.py:3405:ocur : 6 7 8 9 10 11 12 13 25 26 27 28 29 77 79 80 - yacc.py:3405:of : 71 - yacc.py:3405:opar : 25 26 27 28 29 64 88 89 90 - yacc.py:3405:plus : 51 - yacc.py:3405:pool : 73 - yacc.py:3405:rarrow : 44 - yacc.py:3405:semi : 6 7 8 10 11 12 15 16 40 41 43 84 85 87 - yacc.py:3405:star : 54 57 - yacc.py:3405:string : 83 - yacc.py:3405:then : 72 - yacc.py:3405:true : 81 - yacc.py:3405:type : 6 7 7 9 10 12 13 13 18 19 20 22 24 25 26 27 29 35 44 59 61 76 - yacc.py:3405:while : 73 - yacc.py:3407: - yacc.py:3408:Nonterminals, with rules where they appear - yacc.py:3409: - yacc.py:3413:arg_list : 91 94 95 - yacc.py:3413:arg_list_empty : 92 - yacc.py:3413:args : 88 90 - yacc.py:3413:atom : 63 - yacc.py:3413:base_call : 54 55 56 68 69 - yacc.py:3413:block : 77 78 80 85 86 - yacc.py:3413:casep : 40 41 - yacc.py:3413:cases_list : 41 42 71 - yacc.py:3413:class_list : 1 3 5 - yacc.py:3413:comp : 46 47 48 49 - yacc.py:3413:def_attr : 15 - yacc.py:3413:def_class : 3 4 - yacc.py:3413:def_func : 16 - yacc.py:3413:epsilon : 14 34 96 - yacc.py:3413:expr : 19 22 23 25 26 27 28 38 44 45 64 66 70 71 72 72 72 73 73 84 85 93 94 - yacc.py:3413:factor : 59 60 62 65 - yacc.py:3413:feature_list : 6 7 8 9 10 11 12 13 15 16 17 - yacc.py:3413:formals : 25 26 28 29 - yacc.py:3413:func_call : 59 61 62 65 67 - yacc.py:3413:let_assign : 36 37 - yacc.py:3413:let_list : 37 70 - yacc.py:3413:op : 47 48 49 50 51 52 - yacc.py:3413:param : 32 33 38 39 - yacc.py:3413:param_list : 30 33 - yacc.py:3413:param_list_empty : 31 - yacc.py:3413:program : 0 - yacc.py:3413:term : 51 52 53 54 55 57 58 - yacc.py:3414: - yacc.py:3436:Generating LALR tables - yacc.py:2543:Parsing method: LALR - yacc.py:2561: - yacc.py:2562:state 0 - yacc.py:2563: - yacc.py:2565: (0) S' -> . program - yacc.py:2565: (1) program -> . class_list - yacc.py:2565: (3) class_list -> . def_class class_list - yacc.py:2565: (4) class_list -> . def_class - yacc.py:2565: (5) class_list -> . error class_list - yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi - yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi - yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi - yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error - yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi - yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: error shift and go to state 4 - yacc.py:2687: class shift and go to state 5 - yacc.py:2689: - yacc.py:2714: program shift and go to state 1 - yacc.py:2714: class_list shift and go to state 2 - yacc.py:2714: def_class shift and go to state 3 - yacc.py:2561: - yacc.py:2562:state 1 - yacc.py:2563: - yacc.py:2565: (0) S' -> program . - yacc.py:2566: - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 2 - yacc.py:2563: - yacc.py:2565: (1) program -> class_list . - yacc.py:2566: - yacc.py:2687: $end reduce using rule 1 (program -> class_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 3 - yacc.py:2563: - yacc.py:2565: (3) class_list -> def_class . class_list - yacc.py:2565: (4) class_list -> def_class . - yacc.py:2565: (3) class_list -> . def_class class_list - yacc.py:2565: (4) class_list -> . def_class - yacc.py:2565: (5) class_list -> . error class_list - yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi - yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi - yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi - yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error - yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi - yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: $end reduce using rule 4 (class_list -> def_class .) - yacc.py:2687: error shift and go to state 4 - yacc.py:2687: class shift and go to state 5 - yacc.py:2689: - yacc.py:2714: def_class shift and go to state 3 - yacc.py:2714: class_list shift and go to state 6 - yacc.py:2561: - yacc.py:2562:state 4 - yacc.py:2563: - yacc.py:2565: (5) class_list -> error . class_list - yacc.py:2565: (3) class_list -> . def_class class_list - yacc.py:2565: (4) class_list -> . def_class - yacc.py:2565: (5) class_list -> . error class_list - yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi - yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi - yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi - yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error - yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi - yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: error shift and go to state 4 - yacc.py:2687: class shift and go to state 5 - yacc.py:2689: - yacc.py:2714: class_list shift and go to state 7 - yacc.py:2714: def_class shift and go to state 3 - yacc.py:2561: - yacc.py:2562:state 5 - yacc.py:2563: - yacc.py:2565: (6) def_class -> class . type ocur feature_list ccur semi - yacc.py:2565: (7) def_class -> class . type inherits type ocur feature_list ccur semi - yacc.py:2565: (8) def_class -> class . error ocur feature_list ccur semi - yacc.py:2565: (9) def_class -> class . type ocur feature_list ccur error - yacc.py:2565: (10) def_class -> class . error inherits type ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> class . error inherits error ocur feature_list ccur semi - yacc.py:2565: (12) def_class -> class . type inherits error ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> class . type inherits type ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: type shift and go to state 8 - yacc.py:2687: error shift and go to state 9 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 6 - yacc.py:2563: - yacc.py:2565: (3) class_list -> def_class class_list . - yacc.py:2566: - yacc.py:2687: $end reduce using rule 3 (class_list -> def_class class_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 7 - yacc.py:2563: - yacc.py:2565: (5) class_list -> error class_list . - yacc.py:2566: - yacc.py:2687: $end reduce using rule 5 (class_list -> error class_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 8 - yacc.py:2563: - yacc.py:2565: (6) def_class -> class type . ocur feature_list ccur semi - yacc.py:2565: (7) def_class -> class type . inherits type ocur feature_list ccur semi - yacc.py:2565: (9) def_class -> class type . ocur feature_list ccur error - yacc.py:2565: (12) def_class -> class type . inherits error ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> class type . inherits type ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 10 - yacc.py:2687: inherits shift and go to state 11 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 9 - yacc.py:2563: - yacc.py:2565: (8) def_class -> class error . ocur feature_list ccur semi - yacc.py:2565: (10) def_class -> class error . inherits type ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> class error . inherits error ocur feature_list ccur semi - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 12 - yacc.py:2687: inherits shift and go to state 13 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 10 - yacc.py:2563: - yacc.py:2565: (6) def_class -> class type ocur . feature_list ccur semi - yacc.py:2565: (9) def_class -> class type ocur . feature_list ccur error - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 14 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 11 - yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits . type ocur feature_list ccur semi - yacc.py:2565: (12) def_class -> class type inherits . error ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> class type inherits . type ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: type shift and go to state 20 - yacc.py:2687: error shift and go to state 21 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 12 - yacc.py:2563: - yacc.py:2565: (8) def_class -> class error ocur . feature_list ccur semi - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 22 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 13 - yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits . type ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> class error inherits . error ocur feature_list ccur semi - yacc.py:2566: - yacc.py:2687: type shift and go to state 24 - yacc.py:2687: error shift and go to state 23 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 14 - yacc.py:2563: - yacc.py:2565: (6) def_class -> class type ocur feature_list . ccur semi - yacc.py:2565: (9) def_class -> class type ocur feature_list . ccur error - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 25 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 15 - yacc.py:2563: - yacc.py:2565: (17) feature_list -> error . feature_list - yacc.py:2565: (20) def_attr -> error . colon type - yacc.py:2565: (22) def_attr -> error . colon type larrow expr - yacc.py:2565: (26) def_func -> error . opar formals cpar colon type ocur expr ccur - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: colon shift and go to state 27 - yacc.py:2687: opar shift and go to state 28 - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 26 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 16 - yacc.py:2563: - yacc.py:2565: (14) feature_list -> epsilon . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 14 (feature_list -> epsilon .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 17 - yacc.py:2563: - yacc.py:2565: (15) feature_list -> def_attr . semi feature_list - yacc.py:2566: - yacc.py:2687: semi shift and go to state 29 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 18 - yacc.py:2563: - yacc.py:2565: (16) feature_list -> def_func . semi feature_list - yacc.py:2566: - yacc.py:2687: semi shift and go to state 30 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 19 - yacc.py:2563: - yacc.py:2565: (18) def_attr -> id . colon type - yacc.py:2565: (19) def_attr -> id . colon type larrow expr - yacc.py:2565: (21) def_attr -> id . colon error - yacc.py:2565: (23) def_attr -> id . colon error larrow expr - yacc.py:2565: (24) def_attr -> id . colon type larrow error - yacc.py:2565: (25) def_func -> id . opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> id . opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> id . opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> id . opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: colon shift and go to state 31 - yacc.py:2687: opar shift and go to state 32 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 20 - yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits type . ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> class type inherits type . ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 33 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 21 - yacc.py:2563: - yacc.py:2565: (12) def_class -> class type inherits error . ocur feature_list ccur semi - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 34 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 22 - yacc.py:2563: - yacc.py:2565: (8) def_class -> class error ocur feature_list . ccur semi - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 35 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 23 - yacc.py:2563: - yacc.py:2565: (11) def_class -> class error inherits error . ocur feature_list ccur semi - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 36 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 24 - yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits type . ocur feature_list ccur semi - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 37 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 25 - yacc.py:2563: - yacc.py:2565: (6) def_class -> class type ocur feature_list ccur . semi - yacc.py:2565: (9) def_class -> class type ocur feature_list ccur . error - yacc.py:2566: - yacc.py:2687: semi shift and go to state 38 - yacc.py:2687: error shift and go to state 39 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 26 - yacc.py:2563: - yacc.py:2565: (17) feature_list -> error feature_list . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 17 (feature_list -> error feature_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 27 - yacc.py:2563: - yacc.py:2565: (20) def_attr -> error colon . type - yacc.py:2565: (22) def_attr -> error colon . type larrow expr - yacc.py:2566: - yacc.py:2687: type shift and go to state 40 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 28 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar . formals cpar colon type ocur expr ccur - yacc.py:2565: (30) formals -> . param_list - yacc.py:2565: (31) formals -> . param_list_empty - yacc.py:2565: (32) param_list -> . param - yacc.py:2565: (33) param_list -> . param comma param_list - yacc.py:2565: (34) param_list_empty -> . epsilon - yacc.py:2565: (35) param -> . id colon type - yacc.py:2565: (2) epsilon -> . - yacc.py:2566: - yacc.py:2687: id shift and go to state 46 - yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2689: - yacc.py:2714: formals shift and go to state 41 - yacc.py:2714: param_list shift and go to state 42 - yacc.py:2714: param_list_empty shift and go to state 43 - yacc.py:2714: param shift and go to state 44 - yacc.py:2714: epsilon shift and go to state 45 - yacc.py:2561: - yacc.py:2562:state 29 - yacc.py:2563: - yacc.py:2565: (15) feature_list -> def_attr semi . feature_list - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: feature_list shift and go to state 47 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 30 - yacc.py:2563: - yacc.py:2565: (16) feature_list -> def_func semi . feature_list - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2714: feature_list shift and go to state 48 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2561: - yacc.py:2562:state 31 - yacc.py:2563: - yacc.py:2565: (18) def_attr -> id colon . type - yacc.py:2565: (19) def_attr -> id colon . type larrow expr - yacc.py:2565: (21) def_attr -> id colon . error - yacc.py:2565: (23) def_attr -> id colon . error larrow expr - yacc.py:2565: (24) def_attr -> id colon . type larrow error - yacc.py:2566: - yacc.py:2687: type shift and go to state 49 - yacc.py:2687: error shift and go to state 50 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 32 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar . formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> id opar . error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> id opar . formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> id opar . formals cpar colon type ocur error ccur - yacc.py:2565: (30) formals -> . param_list - yacc.py:2565: (31) formals -> . param_list_empty - yacc.py:2565: (32) param_list -> . param - yacc.py:2565: (33) param_list -> . param comma param_list - yacc.py:2565: (34) param_list_empty -> . epsilon - yacc.py:2565: (35) param -> . id colon type - yacc.py:2565: (2) epsilon -> . - yacc.py:2566: - yacc.py:2687: error shift and go to state 52 - yacc.py:2687: id shift and go to state 46 - yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2689: - yacc.py:2714: formals shift and go to state 51 - yacc.py:2714: param_list shift and go to state 42 - yacc.py:2714: param_list_empty shift and go to state 43 - yacc.py:2714: param shift and go to state 44 - yacc.py:2714: epsilon shift and go to state 45 - yacc.py:2561: - yacc.py:2562:state 33 - yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits type ocur . feature_list ccur semi - yacc.py:2565: (13) def_class -> class type inherits type ocur . feature_list ccur error - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 53 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 34 - yacc.py:2563: - yacc.py:2565: (12) def_class -> class type inherits error ocur . feature_list ccur semi - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 54 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 35 - yacc.py:2563: - yacc.py:2565: (8) def_class -> class error ocur feature_list ccur . semi - yacc.py:2566: - yacc.py:2687: semi shift and go to state 55 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 36 - yacc.py:2563: - yacc.py:2565: (11) def_class -> class error inherits error ocur . feature_list ccur semi - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 56 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 37 - yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits type ocur . feature_list ccur semi - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 57 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 38 - yacc.py:2563: - yacc.py:2565: (6) def_class -> class type ocur feature_list ccur semi . - yacc.py:2566: - yacc.py:2687: error reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 39 - yacc.py:2563: - yacc.py:2565: (9) def_class -> class type ocur feature_list ccur error . - yacc.py:2566: - yacc.py:2687: error reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) - yacc.py:2687: class reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) - yacc.py:2687: $end reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 40 - yacc.py:2563: - yacc.py:2565: (20) def_attr -> error colon type . - yacc.py:2565: (22) def_attr -> error colon type . larrow expr - yacc.py:2566: - yacc.py:2687: semi reduce using rule 20 (def_attr -> error colon type .) - yacc.py:2687: larrow shift and go to state 58 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 41 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals . cpar colon type ocur expr ccur - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 59 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 42 - yacc.py:2563: - yacc.py:2565: (30) formals -> param_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 30 (formals -> param_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 43 - yacc.py:2563: - yacc.py:2565: (31) formals -> param_list_empty . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 31 (formals -> param_list_empty .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 44 - yacc.py:2563: - yacc.py:2565: (32) param_list -> param . - yacc.py:2565: (33) param_list -> param . comma param_list - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 32 (param_list -> param .) - yacc.py:2687: comma shift and go to state 60 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 45 - yacc.py:2563: - yacc.py:2565: (34) param_list_empty -> epsilon . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 34 (param_list_empty -> epsilon .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 46 - yacc.py:2563: - yacc.py:2565: (35) param -> id . colon type - yacc.py:2566: - yacc.py:2687: colon shift and go to state 61 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 47 - yacc.py:2563: - yacc.py:2565: (15) feature_list -> def_attr semi feature_list . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 15 (feature_list -> def_attr semi feature_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 48 - yacc.py:2563: - yacc.py:2565: (16) feature_list -> def_func semi feature_list . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 16 (feature_list -> def_func semi feature_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 49 - yacc.py:2563: - yacc.py:2565: (18) def_attr -> id colon type . - yacc.py:2565: (19) def_attr -> id colon type . larrow expr - yacc.py:2565: (24) def_attr -> id colon type . larrow error - yacc.py:2566: - yacc.py:2687: semi reduce using rule 18 (def_attr -> id colon type .) - yacc.py:2687: larrow shift and go to state 62 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 50 - yacc.py:2563: - yacc.py:2565: (21) def_attr -> id colon error . - yacc.py:2565: (23) def_attr -> id colon error . larrow expr - yacc.py:2566: - yacc.py:2687: semi reduce using rule 21 (def_attr -> id colon error .) - yacc.py:2687: larrow shift and go to state 63 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 51 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals . cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> id opar formals . cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> id opar formals . cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 64 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 52 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error . cpar colon type ocur expr ccur - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 65 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 53 - yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list . ccur semi - yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list . ccur error - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 66 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 54 - yacc.py:2563: - yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list . ccur semi - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 67 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 55 - yacc.py:2563: - yacc.py:2565: (8) def_class -> class error ocur feature_list ccur semi . - yacc.py:2566: - yacc.py:2687: error reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 56 - yacc.py:2563: - yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list . ccur semi - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 68 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 57 - yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list . ccur semi - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 69 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 58 - yacc.py:2563: - yacc.py:2565: (22) def_attr -> error colon type larrow . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 71 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 59 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar . colon type ocur expr ccur - yacc.py:2566: - yacc.py:2687: colon shift and go to state 94 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 60 - yacc.py:2563: - yacc.py:2565: (33) param_list -> param comma . param_list - yacc.py:2565: (32) param_list -> . param - yacc.py:2565: (33) param_list -> . param comma param_list - yacc.py:2565: (35) param -> . id colon type - yacc.py:2566: - yacc.py:2687: id shift and go to state 46 - yacc.py:2689: - yacc.py:2714: param shift and go to state 44 - yacc.py:2714: param_list shift and go to state 95 - yacc.py:2561: - yacc.py:2562:state 61 - yacc.py:2563: - yacc.py:2565: (35) param -> id colon . type - yacc.py:2566: - yacc.py:2687: type shift and go to state 96 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 62 - yacc.py:2563: - yacc.py:2565: (19) def_attr -> id colon type larrow . expr - yacc.py:2565: (24) def_attr -> id colon type larrow . error - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 98 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 97 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 63 - yacc.py:2563: - yacc.py:2565: (23) def_attr -> id colon error larrow . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 99 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 64 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar . colon type ocur expr ccur - yacc.py:2565: (28) def_func -> id opar formals cpar . colon error ocur expr ccur - yacc.py:2565: (29) def_func -> id opar formals cpar . colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: colon shift and go to state 100 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 65 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar . colon type ocur expr ccur - yacc.py:2566: - yacc.py:2687: colon shift and go to state 101 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 66 - yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list ccur . semi - yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list ccur . error - yacc.py:2566: - yacc.py:2687: semi shift and go to state 102 - yacc.py:2687: error shift and go to state 103 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 67 - yacc.py:2563: - yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list ccur . semi - yacc.py:2566: - yacc.py:2687: semi shift and go to state 104 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 68 - yacc.py:2563: - yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list ccur . semi - yacc.py:2566: - yacc.py:2687: semi shift and go to state 105 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 69 - yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list ccur . semi - yacc.py:2566: - yacc.py:2687: semi shift and go to state 106 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 70 - yacc.py:2563: - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 71 - yacc.py:2563: - yacc.py:2565: (22) def_attr -> error colon type larrow expr . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 22 (def_attr -> error colon type larrow expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 72 - yacc.py:2563: - yacc.py:2565: (45) expr -> id . larrow expr - yacc.py:2565: (75) atom -> id . - yacc.py:2565: (88) func_call -> id . opar args cpar - yacc.py:2565: (89) func_call -> id . opar error cpar - yacc.py:2566: - yacc.py:2687: larrow shift and go to state 112 - yacc.py:2687: arroba reduce using rule 75 (atom -> id .) - yacc.py:2687: dot reduce using rule 75 (atom -> id .) - yacc.py:2687: star reduce using rule 75 (atom -> id .) - yacc.py:2687: div reduce using rule 75 (atom -> id .) - yacc.py:2687: plus reduce using rule 75 (atom -> id .) - yacc.py:2687: minus reduce using rule 75 (atom -> id .) - yacc.py:2687: less reduce using rule 75 (atom -> id .) - yacc.py:2687: lesseq reduce using rule 75 (atom -> id .) - yacc.py:2687: equal reduce using rule 75 (atom -> id .) - yacc.py:2687: semi reduce using rule 75 (atom -> id .) - yacc.py:2687: cpar reduce using rule 75 (atom -> id .) - yacc.py:2687: of reduce using rule 75 (atom -> id .) - yacc.py:2687: then reduce using rule 75 (atom -> id .) - yacc.py:2687: loop reduce using rule 75 (atom -> id .) - yacc.py:2687: comma reduce using rule 75 (atom -> id .) - yacc.py:2687: in reduce using rule 75 (atom -> id .) - yacc.py:2687: else reduce using rule 75 (atom -> id .) - yacc.py:2687: pool reduce using rule 75 (atom -> id .) - yacc.py:2687: ccur reduce using rule 75 (atom -> id .) - yacc.py:2687: fi reduce using rule 75 (atom -> id .) - yacc.py:2687: opar shift and go to state 113 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 73 - yacc.py:2563: - yacc.py:2565: (46) expr -> comp . - yacc.py:2565: (47) comp -> comp . less op - yacc.py:2565: (48) comp -> comp . lesseq op - yacc.py:2565: (49) comp -> comp . equal op - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for less resolved as shift - yacc.py:2666: ! shift/reduce conflict for lesseq resolved as shift - yacc.py:2666: ! shift/reduce conflict for equal resolved as shift - yacc.py:2687: semi reduce using rule 46 (expr -> comp .) - yacc.py:2687: cpar reduce using rule 46 (expr -> comp .) - yacc.py:2687: arroba reduce using rule 46 (expr -> comp .) - yacc.py:2687: dot reduce using rule 46 (expr -> comp .) - yacc.py:2687: star reduce using rule 46 (expr -> comp .) - yacc.py:2687: div reduce using rule 46 (expr -> comp .) - yacc.py:2687: plus reduce using rule 46 (expr -> comp .) - yacc.py:2687: minus reduce using rule 46 (expr -> comp .) - yacc.py:2687: of reduce using rule 46 (expr -> comp .) - yacc.py:2687: then reduce using rule 46 (expr -> comp .) - yacc.py:2687: loop reduce using rule 46 (expr -> comp .) - yacc.py:2687: comma reduce using rule 46 (expr -> comp .) - yacc.py:2687: in reduce using rule 46 (expr -> comp .) - yacc.py:2687: else reduce using rule 46 (expr -> comp .) - yacc.py:2687: pool reduce using rule 46 (expr -> comp .) - yacc.py:2687: ccur reduce using rule 46 (expr -> comp .) - yacc.py:2687: fi reduce using rule 46 (expr -> comp .) - yacc.py:2687: less shift and go to state 114 - yacc.py:2687: lesseq shift and go to state 115 - yacc.py:2687: equal shift and go to state 116 - yacc.py:2689: - yacc.py:2696: ! less [ reduce using rule 46 (expr -> comp .) ] - yacc.py:2696: ! lesseq [ reduce using rule 46 (expr -> comp .) ] - yacc.py:2696: ! equal [ reduce using rule 46 (expr -> comp .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 74 - yacc.py:2563: - yacc.py:2565: (50) comp -> op . - yacc.py:2565: (51) op -> op . plus term - yacc.py:2565: (52) op -> op . minus term - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for plus resolved as shift - yacc.py:2666: ! shift/reduce conflict for minus resolved as shift - yacc.py:2687: less reduce using rule 50 (comp -> op .) - yacc.py:2687: lesseq reduce using rule 50 (comp -> op .) - yacc.py:2687: equal reduce using rule 50 (comp -> op .) - yacc.py:2687: semi reduce using rule 50 (comp -> op .) - yacc.py:2687: cpar reduce using rule 50 (comp -> op .) - yacc.py:2687: arroba reduce using rule 50 (comp -> op .) - yacc.py:2687: dot reduce using rule 50 (comp -> op .) - yacc.py:2687: star reduce using rule 50 (comp -> op .) - yacc.py:2687: div reduce using rule 50 (comp -> op .) - yacc.py:2687: of reduce using rule 50 (comp -> op .) - yacc.py:2687: then reduce using rule 50 (comp -> op .) - yacc.py:2687: loop reduce using rule 50 (comp -> op .) - yacc.py:2687: comma reduce using rule 50 (comp -> op .) - yacc.py:2687: in reduce using rule 50 (comp -> op .) - yacc.py:2687: else reduce using rule 50 (comp -> op .) - yacc.py:2687: pool reduce using rule 50 (comp -> op .) - yacc.py:2687: ccur reduce using rule 50 (comp -> op .) - yacc.py:2687: fi reduce using rule 50 (comp -> op .) - yacc.py:2687: plus shift and go to state 117 - yacc.py:2687: minus shift and go to state 118 - yacc.py:2689: - yacc.py:2696: ! plus [ reduce using rule 50 (comp -> op .) ] - yacc.py:2696: ! minus [ reduce using rule 50 (comp -> op .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 75 - yacc.py:2563: - yacc.py:2565: (53) op -> term . - yacc.py:2565: (54) term -> term . star base_call - yacc.py:2565: (55) term -> term . div base_call - yacc.py:2565: (57) term -> term . star error - yacc.py:2565: (58) term -> term . div error - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for star resolved as shift - yacc.py:2666: ! shift/reduce conflict for div resolved as shift - yacc.py:2687: plus reduce using rule 53 (op -> term .) - yacc.py:2687: minus reduce using rule 53 (op -> term .) - yacc.py:2687: less reduce using rule 53 (op -> term .) - yacc.py:2687: lesseq reduce using rule 53 (op -> term .) - yacc.py:2687: equal reduce using rule 53 (op -> term .) - yacc.py:2687: semi reduce using rule 53 (op -> term .) - yacc.py:2687: cpar reduce using rule 53 (op -> term .) - yacc.py:2687: arroba reduce using rule 53 (op -> term .) - yacc.py:2687: dot reduce using rule 53 (op -> term .) - yacc.py:2687: of reduce using rule 53 (op -> term .) - yacc.py:2687: then reduce using rule 53 (op -> term .) - yacc.py:2687: loop reduce using rule 53 (op -> term .) - yacc.py:2687: comma reduce using rule 53 (op -> term .) - yacc.py:2687: in reduce using rule 53 (op -> term .) - yacc.py:2687: else reduce using rule 53 (op -> term .) - yacc.py:2687: pool reduce using rule 53 (op -> term .) - yacc.py:2687: ccur reduce using rule 53 (op -> term .) - yacc.py:2687: fi reduce using rule 53 (op -> term .) - yacc.py:2687: star shift and go to state 119 - yacc.py:2687: div shift and go to state 120 - yacc.py:2689: - yacc.py:2696: ! star [ reduce using rule 53 (op -> term .) ] - yacc.py:2696: ! div [ reduce using rule 53 (op -> term .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 76 - yacc.py:2563: - yacc.py:2565: (56) term -> base_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 56 (term -> base_call .) - yacc.py:2687: div reduce using rule 56 (term -> base_call .) - yacc.py:2687: plus reduce using rule 56 (term -> base_call .) - yacc.py:2687: minus reduce using rule 56 (term -> base_call .) - yacc.py:2687: less reduce using rule 56 (term -> base_call .) - yacc.py:2687: lesseq reduce using rule 56 (term -> base_call .) - yacc.py:2687: equal reduce using rule 56 (term -> base_call .) - yacc.py:2687: semi reduce using rule 56 (term -> base_call .) - yacc.py:2687: cpar reduce using rule 56 (term -> base_call .) - yacc.py:2687: arroba reduce using rule 56 (term -> base_call .) - yacc.py:2687: dot reduce using rule 56 (term -> base_call .) - yacc.py:2687: of reduce using rule 56 (term -> base_call .) - yacc.py:2687: then reduce using rule 56 (term -> base_call .) - yacc.py:2687: loop reduce using rule 56 (term -> base_call .) - yacc.py:2687: comma reduce using rule 56 (term -> base_call .) - yacc.py:2687: in reduce using rule 56 (term -> base_call .) - yacc.py:2687: else reduce using rule 56 (term -> base_call .) - yacc.py:2687: pool reduce using rule 56 (term -> base_call .) - yacc.py:2687: ccur reduce using rule 56 (term -> base_call .) - yacc.py:2687: fi reduce using rule 56 (term -> base_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 77 - yacc.py:2563: - yacc.py:2565: (59) base_call -> factor . arroba type dot func_call - yacc.py:2565: (60) base_call -> factor . - yacc.py:2565: (62) base_call -> factor . arroba error dot func_call - yacc.py:2565: (65) factor -> factor . dot func_call - yacc.py:2566: - yacc.py:2609: ! shift/reduce conflict for arroba resolved as shift - yacc.py:2666: ! shift/reduce conflict for dot resolved as shift - yacc.py:2687: arroba shift and go to state 121 - yacc.py:2687: star reduce using rule 60 (base_call -> factor .) - yacc.py:2687: div reduce using rule 60 (base_call -> factor .) - yacc.py:2687: plus reduce using rule 60 (base_call -> factor .) - yacc.py:2687: minus reduce using rule 60 (base_call -> factor .) - yacc.py:2687: less reduce using rule 60 (base_call -> factor .) - yacc.py:2687: lesseq reduce using rule 60 (base_call -> factor .) - yacc.py:2687: equal reduce using rule 60 (base_call -> factor .) - yacc.py:2687: semi reduce using rule 60 (base_call -> factor .) - yacc.py:2687: cpar reduce using rule 60 (base_call -> factor .) - yacc.py:2687: of reduce using rule 60 (base_call -> factor .) - yacc.py:2687: then reduce using rule 60 (base_call -> factor .) - yacc.py:2687: loop reduce using rule 60 (base_call -> factor .) - yacc.py:2687: comma reduce using rule 60 (base_call -> factor .) - yacc.py:2687: in reduce using rule 60 (base_call -> factor .) - yacc.py:2687: else reduce using rule 60 (base_call -> factor .) - yacc.py:2687: pool reduce using rule 60 (base_call -> factor .) - yacc.py:2687: ccur reduce using rule 60 (base_call -> factor .) - yacc.py:2687: fi reduce using rule 60 (base_call -> factor .) - yacc.py:2687: dot shift and go to state 122 - yacc.py:2689: - yacc.py:2696: ! arroba [ reduce using rule 60 (base_call -> factor .) ] - yacc.py:2696: ! dot [ reduce using rule 60 (base_call -> factor .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 78 - yacc.py:2563: - yacc.py:2565: (67) factor -> func_call . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 67 (factor -> func_call .) - yacc.py:2687: dot reduce using rule 67 (factor -> func_call .) - yacc.py:2687: star reduce using rule 67 (factor -> func_call .) - yacc.py:2687: div reduce using rule 67 (factor -> func_call .) - yacc.py:2687: plus reduce using rule 67 (factor -> func_call .) - yacc.py:2687: minus reduce using rule 67 (factor -> func_call .) - yacc.py:2687: less reduce using rule 67 (factor -> func_call .) - yacc.py:2687: lesseq reduce using rule 67 (factor -> func_call .) - yacc.py:2687: equal reduce using rule 67 (factor -> func_call .) - yacc.py:2687: semi reduce using rule 67 (factor -> func_call .) - yacc.py:2687: cpar reduce using rule 67 (factor -> func_call .) - yacc.py:2687: of reduce using rule 67 (factor -> func_call .) - yacc.py:2687: then reduce using rule 67 (factor -> func_call .) - yacc.py:2687: loop reduce using rule 67 (factor -> func_call .) - yacc.py:2687: comma reduce using rule 67 (factor -> func_call .) - yacc.py:2687: in reduce using rule 67 (factor -> func_call .) - yacc.py:2687: else reduce using rule 67 (factor -> func_call .) - yacc.py:2687: pool reduce using rule 67 (factor -> func_call .) - yacc.py:2687: ccur reduce using rule 67 (factor -> func_call .) - yacc.py:2687: fi reduce using rule 67 (factor -> func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 79 - yacc.py:2563: - yacc.py:2565: (63) factor -> atom . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 63 (factor -> atom .) - yacc.py:2687: dot reduce using rule 63 (factor -> atom .) - yacc.py:2687: star reduce using rule 63 (factor -> atom .) - yacc.py:2687: div reduce using rule 63 (factor -> atom .) - yacc.py:2687: plus reduce using rule 63 (factor -> atom .) - yacc.py:2687: minus reduce using rule 63 (factor -> atom .) - yacc.py:2687: less reduce using rule 63 (factor -> atom .) - yacc.py:2687: lesseq reduce using rule 63 (factor -> atom .) - yacc.py:2687: equal reduce using rule 63 (factor -> atom .) - yacc.py:2687: semi reduce using rule 63 (factor -> atom .) - yacc.py:2687: cpar reduce using rule 63 (factor -> atom .) - yacc.py:2687: of reduce using rule 63 (factor -> atom .) - yacc.py:2687: then reduce using rule 63 (factor -> atom .) - yacc.py:2687: loop reduce using rule 63 (factor -> atom .) - yacc.py:2687: comma reduce using rule 63 (factor -> atom .) - yacc.py:2687: in reduce using rule 63 (factor -> atom .) - yacc.py:2687: else reduce using rule 63 (factor -> atom .) - yacc.py:2687: pool reduce using rule 63 (factor -> atom .) - yacc.py:2687: ccur reduce using rule 63 (factor -> atom .) - yacc.py:2687: fi reduce using rule 63 (factor -> atom .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 80 - yacc.py:2563: - yacc.py:2565: (64) factor -> opar . expr cpar - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 123 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 81 - yacc.py:2563: - yacc.py:2565: (66) factor -> not . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 124 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 82 - yacc.py:2563: - yacc.py:2565: (68) factor -> isvoid . base_call - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: base_call shift and go to state 125 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 83 - yacc.py:2563: - yacc.py:2565: (69) factor -> nox . base_call - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: base_call shift and go to state 127 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 84 - yacc.py:2563: - yacc.py:2565: (70) factor -> let . let_list in expr - yacc.py:2565: (36) let_list -> . let_assign - yacc.py:2565: (37) let_list -> . let_assign comma let_list - yacc.py:2565: (38) let_assign -> . param larrow expr - yacc.py:2565: (39) let_assign -> . param - yacc.py:2565: (35) param -> . id colon type - yacc.py:2566: - yacc.py:2687: id shift and go to state 46 - yacc.py:2689: - yacc.py:2714: let_list shift and go to state 128 - yacc.py:2714: let_assign shift and go to state 129 - yacc.py:2714: param shift and go to state 130 - yacc.py:2561: - yacc.py:2562:state 85 - yacc.py:2563: - yacc.py:2565: (71) factor -> case . expr of cases_list esac - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 131 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 86 - yacc.py:2563: - yacc.py:2565: (72) factor -> if . expr then expr else expr fi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 132 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 87 - yacc.py:2563: - yacc.py:2565: (73) factor -> while . expr loop expr pool - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 133 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 88 - yacc.py:2563: - yacc.py:2565: (74) atom -> num . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 74 (atom -> num .) - yacc.py:2687: dot reduce using rule 74 (atom -> num .) - yacc.py:2687: star reduce using rule 74 (atom -> num .) - yacc.py:2687: div reduce using rule 74 (atom -> num .) - yacc.py:2687: plus reduce using rule 74 (atom -> num .) - yacc.py:2687: minus reduce using rule 74 (atom -> num .) - yacc.py:2687: less reduce using rule 74 (atom -> num .) - yacc.py:2687: lesseq reduce using rule 74 (atom -> num .) - yacc.py:2687: equal reduce using rule 74 (atom -> num .) - yacc.py:2687: semi reduce using rule 74 (atom -> num .) - yacc.py:2687: cpar reduce using rule 74 (atom -> num .) - yacc.py:2687: of reduce using rule 74 (atom -> num .) - yacc.py:2687: then reduce using rule 74 (atom -> num .) - yacc.py:2687: loop reduce using rule 74 (atom -> num .) - yacc.py:2687: comma reduce using rule 74 (atom -> num .) - yacc.py:2687: in reduce using rule 74 (atom -> num .) - yacc.py:2687: else reduce using rule 74 (atom -> num .) - yacc.py:2687: pool reduce using rule 74 (atom -> num .) - yacc.py:2687: ccur reduce using rule 74 (atom -> num .) - yacc.py:2687: fi reduce using rule 74 (atom -> num .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 89 - yacc.py:2563: - yacc.py:2565: (76) atom -> new . type - yacc.py:2566: - yacc.py:2687: type shift and go to state 134 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 90 - yacc.py:2563: - yacc.py:2565: (77) atom -> ocur . block ccur - yacc.py:2565: (79) atom -> ocur . error ccur - yacc.py:2565: (80) atom -> ocur . block error - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 136 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: block shift and go to state 135 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 91 - yacc.py:2563: - yacc.py:2565: (81) atom -> true . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 81 (atom -> true .) - yacc.py:2687: dot reduce using rule 81 (atom -> true .) - yacc.py:2687: star reduce using rule 81 (atom -> true .) - yacc.py:2687: div reduce using rule 81 (atom -> true .) - yacc.py:2687: plus reduce using rule 81 (atom -> true .) - yacc.py:2687: minus reduce using rule 81 (atom -> true .) - yacc.py:2687: less reduce using rule 81 (atom -> true .) - yacc.py:2687: lesseq reduce using rule 81 (atom -> true .) - yacc.py:2687: equal reduce using rule 81 (atom -> true .) - yacc.py:2687: semi reduce using rule 81 (atom -> true .) - yacc.py:2687: cpar reduce using rule 81 (atom -> true .) - yacc.py:2687: of reduce using rule 81 (atom -> true .) - yacc.py:2687: then reduce using rule 81 (atom -> true .) - yacc.py:2687: loop reduce using rule 81 (atom -> true .) - yacc.py:2687: comma reduce using rule 81 (atom -> true .) - yacc.py:2687: in reduce using rule 81 (atom -> true .) - yacc.py:2687: else reduce using rule 81 (atom -> true .) - yacc.py:2687: pool reduce using rule 81 (atom -> true .) - yacc.py:2687: ccur reduce using rule 81 (atom -> true .) - yacc.py:2687: fi reduce using rule 81 (atom -> true .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 92 - yacc.py:2563: - yacc.py:2565: (82) atom -> false . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 82 (atom -> false .) - yacc.py:2687: dot reduce using rule 82 (atom -> false .) - yacc.py:2687: star reduce using rule 82 (atom -> false .) - yacc.py:2687: div reduce using rule 82 (atom -> false .) - yacc.py:2687: plus reduce using rule 82 (atom -> false .) - yacc.py:2687: minus reduce using rule 82 (atom -> false .) - yacc.py:2687: less reduce using rule 82 (atom -> false .) - yacc.py:2687: lesseq reduce using rule 82 (atom -> false .) - yacc.py:2687: equal reduce using rule 82 (atom -> false .) - yacc.py:2687: semi reduce using rule 82 (atom -> false .) - yacc.py:2687: cpar reduce using rule 82 (atom -> false .) - yacc.py:2687: of reduce using rule 82 (atom -> false .) - yacc.py:2687: then reduce using rule 82 (atom -> false .) - yacc.py:2687: loop reduce using rule 82 (atom -> false .) - yacc.py:2687: comma reduce using rule 82 (atom -> false .) - yacc.py:2687: in reduce using rule 82 (atom -> false .) - yacc.py:2687: else reduce using rule 82 (atom -> false .) - yacc.py:2687: pool reduce using rule 82 (atom -> false .) - yacc.py:2687: ccur reduce using rule 82 (atom -> false .) - yacc.py:2687: fi reduce using rule 82 (atom -> false .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 93 - yacc.py:2563: - yacc.py:2565: (83) atom -> string . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 83 (atom -> string .) - yacc.py:2687: dot reduce using rule 83 (atom -> string .) - yacc.py:2687: star reduce using rule 83 (atom -> string .) - yacc.py:2687: div reduce using rule 83 (atom -> string .) - yacc.py:2687: plus reduce using rule 83 (atom -> string .) - yacc.py:2687: minus reduce using rule 83 (atom -> string .) - yacc.py:2687: less reduce using rule 83 (atom -> string .) - yacc.py:2687: lesseq reduce using rule 83 (atom -> string .) - yacc.py:2687: equal reduce using rule 83 (atom -> string .) - yacc.py:2687: semi reduce using rule 83 (atom -> string .) - yacc.py:2687: cpar reduce using rule 83 (atom -> string .) - yacc.py:2687: of reduce using rule 83 (atom -> string .) - yacc.py:2687: then reduce using rule 83 (atom -> string .) - yacc.py:2687: loop reduce using rule 83 (atom -> string .) - yacc.py:2687: comma reduce using rule 83 (atom -> string .) - yacc.py:2687: in reduce using rule 83 (atom -> string .) - yacc.py:2687: else reduce using rule 83 (atom -> string .) - yacc.py:2687: pool reduce using rule 83 (atom -> string .) - yacc.py:2687: ccur reduce using rule 83 (atom -> string .) - yacc.py:2687: fi reduce using rule 83 (atom -> string .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 94 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon . type ocur expr ccur - yacc.py:2566: - yacc.py:2687: type shift and go to state 137 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 95 - yacc.py:2563: - yacc.py:2565: (33) param_list -> param comma param_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 33 (param_list -> param comma param_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 96 - yacc.py:2563: - yacc.py:2565: (35) param -> id colon type . - yacc.py:2566: - yacc.py:2687: comma reduce using rule 35 (param -> id colon type .) - yacc.py:2687: cpar reduce using rule 35 (param -> id colon type .) - yacc.py:2687: larrow reduce using rule 35 (param -> id colon type .) - yacc.py:2687: in reduce using rule 35 (param -> id colon type .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 97 - yacc.py:2563: - yacc.py:2565: (19) def_attr -> id colon type larrow expr . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 19 (def_attr -> id colon type larrow expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 98 - yacc.py:2563: - yacc.py:2565: (24) def_attr -> id colon type larrow error . - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: semi reduce using rule 24 (def_attr -> id colon type larrow error .) - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 99 - yacc.py:2563: - yacc.py:2565: (23) def_attr -> id colon error larrow expr . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 23 (def_attr -> id colon error larrow expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 100 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon . type ocur expr ccur - yacc.py:2565: (28) def_func -> id opar formals cpar colon . error ocur expr ccur - yacc.py:2565: (29) def_func -> id opar formals cpar colon . type ocur error ccur - yacc.py:2566: - yacc.py:2687: type shift and go to state 138 - yacc.py:2687: error shift and go to state 139 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 101 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon . type ocur expr ccur - yacc.py:2566: - yacc.py:2687: type shift and go to state 140 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 102 - yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list ccur semi . - yacc.py:2566: - yacc.py:2687: error reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 103 - yacc.py:2563: - yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list ccur error . - yacc.py:2566: - yacc.py:2687: error reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) - yacc.py:2687: class reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) - yacc.py:2687: $end reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 104 - yacc.py:2563: - yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list ccur semi . - yacc.py:2566: - yacc.py:2687: error reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 105 - yacc.py:2563: - yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list ccur semi . - yacc.py:2566: - yacc.py:2687: error reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 106 - yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list ccur semi . - yacc.py:2566: - yacc.py:2687: error reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 107 - yacc.py:2563: - yacc.py:2565: (86) block -> error . block - yacc.py:2565: (87) block -> error . semi - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: semi shift and go to state 142 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: block shift and go to state 141 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 108 - yacc.py:2563: - yacc.py:2565: (61) base_call -> error arroba . type dot func_call - yacc.py:2566: - yacc.py:2687: type shift and go to state 143 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 109 - yacc.py:2563: - yacc.py:2565: (78) atom -> error block . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 144 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 110 - yacc.py:2563: - yacc.py:2565: (90) func_call -> error opar . args cpar - yacc.py:2565: (64) factor -> opar . expr cpar - yacc.py:2565: (91) args -> . arg_list - yacc.py:2565: (92) args -> . arg_list_empty - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (96) arg_list_empty -> . epsilon - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 145 - yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: args shift and go to state 146 - yacc.py:2714: expr shift and go to state 147 - yacc.py:2714: arg_list shift and go to state 148 - yacc.py:2714: arg_list_empty shift and go to state 149 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: epsilon shift and go to state 150 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 111 - yacc.py:2563: - yacc.py:2565: (84) block -> expr . semi - yacc.py:2565: (85) block -> expr . semi block - yacc.py:2566: - yacc.py:2687: semi shift and go to state 151 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 112 - yacc.py:2563: - yacc.py:2565: (45) expr -> id larrow . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 152 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 113 - yacc.py:2563: - yacc.py:2565: (88) func_call -> id opar . args cpar - yacc.py:2565: (89) func_call -> id opar . error cpar - yacc.py:2565: (91) args -> . arg_list - yacc.py:2565: (92) args -> . arg_list_empty - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (96) arg_list_empty -> . epsilon - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 154 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: args shift and go to state 153 - yacc.py:2714: arg_list shift and go to state 148 - yacc.py:2714: arg_list_empty shift and go to state 149 - yacc.py:2714: expr shift and go to state 155 - yacc.py:2714: epsilon shift and go to state 150 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 114 - yacc.py:2563: - yacc.py:2565: (47) comp -> comp less . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: op shift and go to state 156 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 115 - yacc.py:2563: - yacc.py:2565: (48) comp -> comp lesseq . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: op shift and go to state 157 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 116 - yacc.py:2563: - yacc.py:2565: (49) comp -> comp equal . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: op shift and go to state 158 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 117 - yacc.py:2563: - yacc.py:2565: (51) op -> op plus . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: term shift and go to state 159 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 118 - yacc.py:2563: - yacc.py:2565: (52) op -> op minus . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: term shift and go to state 160 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 119 - yacc.py:2563: - yacc.py:2565: (54) term -> term star . base_call - yacc.py:2565: (57) term -> term star . error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 162 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: base_call shift and go to state 161 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 120 - yacc.py:2563: - yacc.py:2565: (55) term -> term div . base_call - yacc.py:2565: (58) term -> term div . error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 164 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: base_call shift and go to state 163 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 121 - yacc.py:2563: - yacc.py:2565: (59) base_call -> factor arroba . type dot func_call - yacc.py:2565: (62) base_call -> factor arroba . error dot func_call - yacc.py:2566: - yacc.py:2687: type shift and go to state 165 - yacc.py:2687: error shift and go to state 166 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 122 - yacc.py:2563: - yacc.py:2565: (65) factor -> factor dot . func_call - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 168 - yacc.py:2687: error shift and go to state 169 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 167 - yacc.py:2561: - yacc.py:2562:state 123 - yacc.py:2563: - yacc.py:2565: (64) factor -> opar expr . cpar - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 170 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 124 - yacc.py:2563: - yacc.py:2565: (66) factor -> not expr . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 66 (factor -> not expr .) - yacc.py:2687: dot reduce using rule 66 (factor -> not expr .) - yacc.py:2687: star reduce using rule 66 (factor -> not expr .) - yacc.py:2687: div reduce using rule 66 (factor -> not expr .) - yacc.py:2687: plus reduce using rule 66 (factor -> not expr .) - yacc.py:2687: minus reduce using rule 66 (factor -> not expr .) - yacc.py:2687: less reduce using rule 66 (factor -> not expr .) - yacc.py:2687: lesseq reduce using rule 66 (factor -> not expr .) - yacc.py:2687: equal reduce using rule 66 (factor -> not expr .) - yacc.py:2687: semi reduce using rule 66 (factor -> not expr .) - yacc.py:2687: cpar reduce using rule 66 (factor -> not expr .) - yacc.py:2687: of reduce using rule 66 (factor -> not expr .) - yacc.py:2687: then reduce using rule 66 (factor -> not expr .) - yacc.py:2687: loop reduce using rule 66 (factor -> not expr .) - yacc.py:2687: comma reduce using rule 66 (factor -> not expr .) - yacc.py:2687: in reduce using rule 66 (factor -> not expr .) - yacc.py:2687: else reduce using rule 66 (factor -> not expr .) - yacc.py:2687: pool reduce using rule 66 (factor -> not expr .) - yacc.py:2687: ccur reduce using rule 66 (factor -> not expr .) - yacc.py:2687: fi reduce using rule 66 (factor -> not expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 125 - yacc.py:2563: - yacc.py:2565: (68) factor -> isvoid base_call . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: dot reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: star reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: div reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: plus reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: minus reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: less reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: lesseq reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: equal reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: semi reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: cpar reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: of reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: then reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: loop reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: comma reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: in reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: else reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: pool reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: ccur reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: fi reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 126 - yacc.py:2563: - yacc.py:2565: (75) atom -> id . - yacc.py:2565: (88) func_call -> id . opar args cpar - yacc.py:2565: (89) func_call -> id . opar error cpar - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 75 (atom -> id .) - yacc.py:2687: dot reduce using rule 75 (atom -> id .) - yacc.py:2687: star reduce using rule 75 (atom -> id .) - yacc.py:2687: div reduce using rule 75 (atom -> id .) - yacc.py:2687: plus reduce using rule 75 (atom -> id .) - yacc.py:2687: minus reduce using rule 75 (atom -> id .) - yacc.py:2687: less reduce using rule 75 (atom -> id .) - yacc.py:2687: lesseq reduce using rule 75 (atom -> id .) - yacc.py:2687: equal reduce using rule 75 (atom -> id .) - yacc.py:2687: semi reduce using rule 75 (atom -> id .) - yacc.py:2687: cpar reduce using rule 75 (atom -> id .) - yacc.py:2687: of reduce using rule 75 (atom -> id .) - yacc.py:2687: then reduce using rule 75 (atom -> id .) - yacc.py:2687: loop reduce using rule 75 (atom -> id .) - yacc.py:2687: comma reduce using rule 75 (atom -> id .) - yacc.py:2687: in reduce using rule 75 (atom -> id .) - yacc.py:2687: else reduce using rule 75 (atom -> id .) - yacc.py:2687: pool reduce using rule 75 (atom -> id .) - yacc.py:2687: ccur reduce using rule 75 (atom -> id .) - yacc.py:2687: fi reduce using rule 75 (atom -> id .) - yacc.py:2687: opar shift and go to state 113 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 127 - yacc.py:2563: - yacc.py:2565: (69) factor -> nox base_call . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: dot reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: star reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: div reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: plus reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: minus reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: less reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: lesseq reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: equal reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: semi reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: cpar reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: of reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: then reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: loop reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: comma reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: in reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: else reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: pool reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: ccur reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: fi reduce using rule 69 (factor -> nox base_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 128 - yacc.py:2563: - yacc.py:2565: (70) factor -> let let_list . in expr - yacc.py:2566: - yacc.py:2687: in shift and go to state 171 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 129 - yacc.py:2563: - yacc.py:2565: (36) let_list -> let_assign . - yacc.py:2565: (37) let_list -> let_assign . comma let_list - yacc.py:2566: - yacc.py:2687: in reduce using rule 36 (let_list -> let_assign .) - yacc.py:2687: comma shift and go to state 172 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 130 - yacc.py:2563: - yacc.py:2565: (38) let_assign -> param . larrow expr - yacc.py:2565: (39) let_assign -> param . - yacc.py:2566: - yacc.py:2687: larrow shift and go to state 173 - yacc.py:2687: comma reduce using rule 39 (let_assign -> param .) - yacc.py:2687: in reduce using rule 39 (let_assign -> param .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 131 - yacc.py:2563: - yacc.py:2565: (71) factor -> case expr . of cases_list esac - yacc.py:2566: - yacc.py:2687: of shift and go to state 174 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 132 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr . then expr else expr fi - yacc.py:2566: - yacc.py:2687: then shift and go to state 175 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 133 - yacc.py:2563: - yacc.py:2565: (73) factor -> while expr . loop expr pool - yacc.py:2566: - yacc.py:2687: loop shift and go to state 176 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 134 - yacc.py:2563: - yacc.py:2565: (76) atom -> new type . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 76 (atom -> new type .) - yacc.py:2687: dot reduce using rule 76 (atom -> new type .) - yacc.py:2687: star reduce using rule 76 (atom -> new type .) - yacc.py:2687: div reduce using rule 76 (atom -> new type .) - yacc.py:2687: plus reduce using rule 76 (atom -> new type .) - yacc.py:2687: minus reduce using rule 76 (atom -> new type .) - yacc.py:2687: less reduce using rule 76 (atom -> new type .) - yacc.py:2687: lesseq reduce using rule 76 (atom -> new type .) - yacc.py:2687: equal reduce using rule 76 (atom -> new type .) - yacc.py:2687: semi reduce using rule 76 (atom -> new type .) - yacc.py:2687: cpar reduce using rule 76 (atom -> new type .) - yacc.py:2687: of reduce using rule 76 (atom -> new type .) - yacc.py:2687: then reduce using rule 76 (atom -> new type .) - yacc.py:2687: loop reduce using rule 76 (atom -> new type .) - yacc.py:2687: comma reduce using rule 76 (atom -> new type .) - yacc.py:2687: in reduce using rule 76 (atom -> new type .) - yacc.py:2687: else reduce using rule 76 (atom -> new type .) - yacc.py:2687: pool reduce using rule 76 (atom -> new type .) - yacc.py:2687: ccur reduce using rule 76 (atom -> new type .) - yacc.py:2687: fi reduce using rule 76 (atom -> new type .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 135 - yacc.py:2563: - yacc.py:2565: (77) atom -> ocur block . ccur - yacc.py:2565: (80) atom -> ocur block . error - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 177 - yacc.py:2687: error shift and go to state 178 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 136 - yacc.py:2563: - yacc.py:2565: (79) atom -> ocur error . ccur - yacc.py:2565: (86) block -> error . block - yacc.py:2565: (87) block -> error . semi - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 179 - yacc.py:2687: semi shift and go to state 142 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: block shift and go to state 141 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 137 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon type . ocur expr ccur - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 180 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 138 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon type . ocur expr ccur - yacc.py:2565: (29) def_func -> id opar formals cpar colon type . ocur error ccur - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 181 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 139 - yacc.py:2563: - yacc.py:2565: (28) def_func -> id opar formals cpar colon error . ocur expr ccur - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 182 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 140 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon type . ocur expr ccur - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 183 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 141 - yacc.py:2563: - yacc.py:2565: (86) block -> error block . - yacc.py:2565: (78) atom -> error block . ccur - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for ccur resolved as shift - yacc.py:2687: error reduce using rule 86 (block -> error block .) - yacc.py:2687: ccur shift and go to state 144 - yacc.py:2689: - yacc.py:2696: ! ccur [ reduce using rule 86 (block -> error block .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 142 - yacc.py:2563: - yacc.py:2565: (87) block -> error semi . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 87 (block -> error semi .) - yacc.py:2687: error reduce using rule 87 (block -> error semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 143 - yacc.py:2563: - yacc.py:2565: (61) base_call -> error arroba type . dot func_call - yacc.py:2566: - yacc.py:2687: dot shift and go to state 184 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 144 - yacc.py:2563: - yacc.py:2565: (78) atom -> error block ccur . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: dot reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: star reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: div reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: plus reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: minus reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: less reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: lesseq reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: equal reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: semi reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: cpar reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: of reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: then reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: loop reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: comma reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: in reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: else reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: pool reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: ccur reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: fi reduce using rule 78 (atom -> error block ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 145 - yacc.py:2563: - yacc.py:2565: (95) arg_list -> error . arg_list - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 185 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: arg_list shift and go to state 186 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 187 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 146 - yacc.py:2563: - yacc.py:2565: (90) func_call -> error opar args . cpar - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 188 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 147 - yacc.py:2563: - yacc.py:2565: (64) factor -> opar expr . cpar - yacc.py:2565: (93) arg_list -> expr . - yacc.py:2565: (94) arg_list -> expr . comma arg_list - yacc.py:2566: - yacc.py:2609: ! shift/reduce conflict for cpar resolved as shift - yacc.py:2687: cpar shift and go to state 170 - yacc.py:2687: comma shift and go to state 189 - yacc.py:2689: - yacc.py:2696: ! cpar [ reduce using rule 93 (arg_list -> expr .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 148 - yacc.py:2563: - yacc.py:2565: (91) args -> arg_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 91 (args -> arg_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 149 - yacc.py:2563: - yacc.py:2565: (92) args -> arg_list_empty . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 92 (args -> arg_list_empty .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 150 - yacc.py:2563: - yacc.py:2565: (96) arg_list_empty -> epsilon . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 96 (arg_list_empty -> epsilon .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 151 - yacc.py:2563: - yacc.py:2565: (84) block -> expr semi . - yacc.py:2565: (85) block -> expr semi . block - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for error resolved as shift - yacc.py:2687: ccur reduce using rule 84 (block -> expr semi .) - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2696: ! error [ reduce using rule 84 (block -> expr semi .) ] - yacc.py:2700: - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: block shift and go to state 190 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 152 - yacc.py:2563: - yacc.py:2565: (45) expr -> id larrow expr . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: cpar reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: arroba reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: dot reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: star reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: div reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: plus reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: minus reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: less reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: lesseq reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: equal reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: of reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: then reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: loop reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: comma reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: in reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: else reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: pool reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: ccur reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: fi reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 153 - yacc.py:2563: - yacc.py:2565: (88) func_call -> id opar args . cpar - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 191 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 154 - yacc.py:2563: - yacc.py:2565: (89) func_call -> id opar error . cpar - yacc.py:2565: (95) arg_list -> error . arg_list - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 192 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 185 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: arg_list shift and go to state 186 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 187 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 155 - yacc.py:2563: - yacc.py:2565: (93) arg_list -> expr . - yacc.py:2565: (94) arg_list -> expr . comma arg_list - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 93 (arg_list -> expr .) - yacc.py:2687: comma shift and go to state 189 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 156 - yacc.py:2563: - yacc.py:2565: (47) comp -> comp less op . - yacc.py:2565: (51) op -> op . plus term - yacc.py:2565: (52) op -> op . minus term - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for plus resolved as shift - yacc.py:2666: ! shift/reduce conflict for minus resolved as shift - yacc.py:2687: less reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: lesseq reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: equal reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: semi reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: cpar reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: arroba reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: dot reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: star reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: div reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: of reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: then reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: loop reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: comma reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: in reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: else reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: pool reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: ccur reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: fi reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: plus shift and go to state 117 - yacc.py:2687: minus shift and go to state 118 - yacc.py:2689: - yacc.py:2696: ! plus [ reduce using rule 47 (comp -> comp less op .) ] - yacc.py:2696: ! minus [ reduce using rule 47 (comp -> comp less op .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 157 - yacc.py:2563: - yacc.py:2565: (48) comp -> comp lesseq op . - yacc.py:2565: (51) op -> op . plus term - yacc.py:2565: (52) op -> op . minus term - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for plus resolved as shift - yacc.py:2666: ! shift/reduce conflict for minus resolved as shift - yacc.py:2687: less reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: lesseq reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: equal reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: semi reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: cpar reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: arroba reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: dot reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: star reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: div reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: of reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: then reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: loop reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: comma reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: in reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: else reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: pool reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: ccur reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: fi reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: plus shift and go to state 117 - yacc.py:2687: minus shift and go to state 118 - yacc.py:2689: - yacc.py:2696: ! plus [ reduce using rule 48 (comp -> comp lesseq op .) ] - yacc.py:2696: ! minus [ reduce using rule 48 (comp -> comp lesseq op .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 158 - yacc.py:2563: - yacc.py:2565: (49) comp -> comp equal op . - yacc.py:2565: (51) op -> op . plus term - yacc.py:2565: (52) op -> op . minus term - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for plus resolved as shift - yacc.py:2666: ! shift/reduce conflict for minus resolved as shift - yacc.py:2687: less reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: lesseq reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: equal reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: semi reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: cpar reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: arroba reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: dot reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: star reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: div reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: of reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: then reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: loop reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: comma reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: in reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: else reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: pool reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: ccur reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: fi reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: plus shift and go to state 117 - yacc.py:2687: minus shift and go to state 118 - yacc.py:2689: - yacc.py:2696: ! plus [ reduce using rule 49 (comp -> comp equal op .) ] - yacc.py:2696: ! minus [ reduce using rule 49 (comp -> comp equal op .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 159 - yacc.py:2563: - yacc.py:2565: (51) op -> op plus term . - yacc.py:2565: (54) term -> term . star base_call - yacc.py:2565: (55) term -> term . div base_call - yacc.py:2565: (57) term -> term . star error - yacc.py:2565: (58) term -> term . div error - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for star resolved as shift - yacc.py:2666: ! shift/reduce conflict for div resolved as shift - yacc.py:2687: plus reduce using rule 51 (op -> op plus term .) - yacc.py:2687: minus reduce using rule 51 (op -> op plus term .) - yacc.py:2687: less reduce using rule 51 (op -> op plus term .) - yacc.py:2687: lesseq reduce using rule 51 (op -> op plus term .) - yacc.py:2687: equal reduce using rule 51 (op -> op plus term .) - yacc.py:2687: semi reduce using rule 51 (op -> op plus term .) - yacc.py:2687: cpar reduce using rule 51 (op -> op plus term .) - yacc.py:2687: arroba reduce using rule 51 (op -> op plus term .) - yacc.py:2687: dot reduce using rule 51 (op -> op plus term .) - yacc.py:2687: of reduce using rule 51 (op -> op plus term .) - yacc.py:2687: then reduce using rule 51 (op -> op plus term .) - yacc.py:2687: loop reduce using rule 51 (op -> op plus term .) - yacc.py:2687: comma reduce using rule 51 (op -> op plus term .) - yacc.py:2687: in reduce using rule 51 (op -> op plus term .) - yacc.py:2687: else reduce using rule 51 (op -> op plus term .) - yacc.py:2687: pool reduce using rule 51 (op -> op plus term .) - yacc.py:2687: ccur reduce using rule 51 (op -> op plus term .) - yacc.py:2687: fi reduce using rule 51 (op -> op plus term .) - yacc.py:2687: star shift and go to state 119 - yacc.py:2687: div shift and go to state 120 - yacc.py:2689: - yacc.py:2696: ! star [ reduce using rule 51 (op -> op plus term .) ] - yacc.py:2696: ! div [ reduce using rule 51 (op -> op plus term .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 160 - yacc.py:2563: - yacc.py:2565: (52) op -> op minus term . - yacc.py:2565: (54) term -> term . star base_call - yacc.py:2565: (55) term -> term . div base_call - yacc.py:2565: (57) term -> term . star error - yacc.py:2565: (58) term -> term . div error - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for star resolved as shift - yacc.py:2666: ! shift/reduce conflict for div resolved as shift - yacc.py:2687: plus reduce using rule 52 (op -> op minus term .) - yacc.py:2687: minus reduce using rule 52 (op -> op minus term .) - yacc.py:2687: less reduce using rule 52 (op -> op minus term .) - yacc.py:2687: lesseq reduce using rule 52 (op -> op minus term .) - yacc.py:2687: equal reduce using rule 52 (op -> op minus term .) - yacc.py:2687: semi reduce using rule 52 (op -> op minus term .) - yacc.py:2687: cpar reduce using rule 52 (op -> op minus term .) - yacc.py:2687: arroba reduce using rule 52 (op -> op minus term .) - yacc.py:2687: dot reduce using rule 52 (op -> op minus term .) - yacc.py:2687: of reduce using rule 52 (op -> op minus term .) - yacc.py:2687: then reduce using rule 52 (op -> op minus term .) - yacc.py:2687: loop reduce using rule 52 (op -> op minus term .) - yacc.py:2687: comma reduce using rule 52 (op -> op minus term .) - yacc.py:2687: in reduce using rule 52 (op -> op minus term .) - yacc.py:2687: else reduce using rule 52 (op -> op minus term .) - yacc.py:2687: pool reduce using rule 52 (op -> op minus term .) - yacc.py:2687: ccur reduce using rule 52 (op -> op minus term .) - yacc.py:2687: fi reduce using rule 52 (op -> op minus term .) - yacc.py:2687: star shift and go to state 119 - yacc.py:2687: div shift and go to state 120 - yacc.py:2689: - yacc.py:2696: ! star [ reduce using rule 52 (op -> op minus term .) ] - yacc.py:2696: ! div [ reduce using rule 52 (op -> op minus term .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 161 - yacc.py:2563: - yacc.py:2565: (54) term -> term star base_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: div reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: plus reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: minus reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: less reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: lesseq reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: equal reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: semi reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: cpar reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: arroba reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: dot reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: of reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: then reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: loop reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: comma reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: in reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: else reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: pool reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: ccur reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: fi reduce using rule 54 (term -> term star base_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 162 - yacc.py:2563: - yacc.py:2565: (57) term -> term star error . - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift - yacc.py:2687: star reduce using rule 57 (term -> term star error .) - yacc.py:2687: div reduce using rule 57 (term -> term star error .) - yacc.py:2687: plus reduce using rule 57 (term -> term star error .) - yacc.py:2687: minus reduce using rule 57 (term -> term star error .) - yacc.py:2687: less reduce using rule 57 (term -> term star error .) - yacc.py:2687: lesseq reduce using rule 57 (term -> term star error .) - yacc.py:2687: equal reduce using rule 57 (term -> term star error .) - yacc.py:2687: semi reduce using rule 57 (term -> term star error .) - yacc.py:2687: cpar reduce using rule 57 (term -> term star error .) - yacc.py:2687: dot reduce using rule 57 (term -> term star error .) - yacc.py:2687: of reduce using rule 57 (term -> term star error .) - yacc.py:2687: then reduce using rule 57 (term -> term star error .) - yacc.py:2687: loop reduce using rule 57 (term -> term star error .) - yacc.py:2687: comma reduce using rule 57 (term -> term star error .) - yacc.py:2687: in reduce using rule 57 (term -> term star error .) - yacc.py:2687: else reduce using rule 57 (term -> term star error .) - yacc.py:2687: pool reduce using rule 57 (term -> term star error .) - yacc.py:2687: ccur reduce using rule 57 (term -> term star error .) - yacc.py:2687: fi reduce using rule 57 (term -> term star error .) - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2696: ! arroba [ reduce using rule 57 (term -> term star error .) ] - yacc.py:2700: - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 163 - yacc.py:2563: - yacc.py:2565: (55) term -> term div base_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: div reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: plus reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: minus reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: less reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: lesseq reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: equal reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: semi reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: cpar reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: arroba reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: dot reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: of reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: then reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: loop reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: comma reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: in reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: else reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: pool reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: ccur reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: fi reduce using rule 55 (term -> term div base_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 164 - yacc.py:2563: - yacc.py:2565: (58) term -> term div error . - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift - yacc.py:2687: star reduce using rule 58 (term -> term div error .) - yacc.py:2687: div reduce using rule 58 (term -> term div error .) - yacc.py:2687: plus reduce using rule 58 (term -> term div error .) - yacc.py:2687: minus reduce using rule 58 (term -> term div error .) - yacc.py:2687: less reduce using rule 58 (term -> term div error .) - yacc.py:2687: lesseq reduce using rule 58 (term -> term div error .) - yacc.py:2687: equal reduce using rule 58 (term -> term div error .) - yacc.py:2687: semi reduce using rule 58 (term -> term div error .) - yacc.py:2687: cpar reduce using rule 58 (term -> term div error .) - yacc.py:2687: dot reduce using rule 58 (term -> term div error .) - yacc.py:2687: of reduce using rule 58 (term -> term div error .) - yacc.py:2687: then reduce using rule 58 (term -> term div error .) - yacc.py:2687: loop reduce using rule 58 (term -> term div error .) - yacc.py:2687: comma reduce using rule 58 (term -> term div error .) - yacc.py:2687: in reduce using rule 58 (term -> term div error .) - yacc.py:2687: else reduce using rule 58 (term -> term div error .) - yacc.py:2687: pool reduce using rule 58 (term -> term div error .) - yacc.py:2687: ccur reduce using rule 58 (term -> term div error .) - yacc.py:2687: fi reduce using rule 58 (term -> term div error .) - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2696: ! arroba [ reduce using rule 58 (term -> term div error .) ] - yacc.py:2700: - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 165 - yacc.py:2563: - yacc.py:2565: (59) base_call -> factor arroba type . dot func_call - yacc.py:2566: - yacc.py:2687: dot shift and go to state 193 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 166 - yacc.py:2563: - yacc.py:2565: (62) base_call -> factor arroba error . dot func_call - yacc.py:2566: - yacc.py:2687: dot shift and go to state 194 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 167 - yacc.py:2563: - yacc.py:2565: (65) factor -> factor dot func_call . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: dot reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: star reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: div reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: plus reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: minus reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: less reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: lesseq reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: equal reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: semi reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: cpar reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: of reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: then reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: loop reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: comma reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: in reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: else reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: pool reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: ccur reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: fi reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 168 - yacc.py:2563: - yacc.py:2565: (88) func_call -> id . opar args cpar - yacc.py:2565: (89) func_call -> id . opar error cpar - yacc.py:2566: - yacc.py:2687: opar shift and go to state 113 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 169 - yacc.py:2563: - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2566: - yacc.py:2687: opar shift and go to state 195 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 170 - yacc.py:2563: - yacc.py:2565: (64) factor -> opar expr cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: dot reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: star reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: div reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: plus reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: minus reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: less reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: lesseq reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: equal reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: semi reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: cpar reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: of reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: then reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: loop reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: comma reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: in reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: else reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: pool reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: ccur reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: fi reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 171 - yacc.py:2563: - yacc.py:2565: (70) factor -> let let_list in . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 196 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 172 - yacc.py:2563: - yacc.py:2565: (37) let_list -> let_assign comma . let_list - yacc.py:2565: (36) let_list -> . let_assign - yacc.py:2565: (37) let_list -> . let_assign comma let_list - yacc.py:2565: (38) let_assign -> . param larrow expr - yacc.py:2565: (39) let_assign -> . param - yacc.py:2565: (35) param -> . id colon type - yacc.py:2566: - yacc.py:2687: id shift and go to state 46 - yacc.py:2689: - yacc.py:2714: let_assign shift and go to state 129 - yacc.py:2714: let_list shift and go to state 197 - yacc.py:2714: param shift and go to state 130 - yacc.py:2561: - yacc.py:2562:state 173 - yacc.py:2563: - yacc.py:2565: (38) let_assign -> param larrow . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 198 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 174 - yacc.py:2563: - yacc.py:2565: (71) factor -> case expr of . cases_list esac - yacc.py:2565: (40) cases_list -> . casep semi - yacc.py:2565: (41) cases_list -> . casep semi cases_list - yacc.py:2565: (42) cases_list -> . error cases_list - yacc.py:2565: (43) cases_list -> . error semi - yacc.py:2565: (44) casep -> . id colon type rarrow expr - yacc.py:2566: - yacc.py:2687: error shift and go to state 201 - yacc.py:2687: id shift and go to state 202 - yacc.py:2689: - yacc.py:2714: cases_list shift and go to state 199 - yacc.py:2714: casep shift and go to state 200 - yacc.py:2561: - yacc.py:2562:state 175 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr then . expr else expr fi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 203 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 176 - yacc.py:2563: - yacc.py:2565: (73) factor -> while expr loop . expr pool - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 204 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 177 - yacc.py:2563: - yacc.py:2565: (77) atom -> ocur block ccur . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: dot reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: star reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: div reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: plus reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: minus reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: less reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: lesseq reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: equal reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: semi reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: cpar reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: of reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: then reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: loop reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: comma reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: in reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: else reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: pool reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: ccur reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: fi reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 178 - yacc.py:2563: - yacc.py:2565: (80) atom -> ocur block error . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: dot reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: star reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: div reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: plus reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: minus reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: less reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: lesseq reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: equal reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: semi reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: cpar reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: of reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: then reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: loop reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: comma reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: in reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: else reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: pool reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: ccur reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: fi reduce using rule 80 (atom -> ocur block error .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 179 - yacc.py:2563: - yacc.py:2565: (79) atom -> ocur error ccur . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: dot reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: star reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: div reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: plus reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: minus reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: less reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: lesseq reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: equal reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: semi reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: cpar reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: of reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: then reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: loop reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: comma reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: in reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: else reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: pool reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: ccur reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: fi reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 180 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur . expr ccur - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 205 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 181 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur . expr ccur - yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur . error ccur - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 207 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 206 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 182 - yacc.py:2563: - yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur . expr ccur - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 208 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 183 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur . expr ccur - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 209 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 184 - yacc.py:2563: - yacc.py:2565: (61) base_call -> error arroba type dot . func_call - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 168 - yacc.py:2687: error shift and go to state 169 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 210 - yacc.py:2561: - yacc.py:2562:state 185 - yacc.py:2563: - yacc.py:2565: (95) arg_list -> error . arg_list - yacc.py:2565: (86) block -> error . block - yacc.py:2565: (87) block -> error . semi - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: semi shift and go to state 142 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 185 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: arg_list shift and go to state 186 - yacc.py:2714: block shift and go to state 141 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: expr shift and go to state 187 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 186 - yacc.py:2563: - yacc.py:2565: (95) arg_list -> error arg_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 95 (arg_list -> error arg_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 187 - yacc.py:2563: - yacc.py:2565: (93) arg_list -> expr . - yacc.py:2565: (94) arg_list -> expr . comma arg_list - yacc.py:2565: (84) block -> expr . semi - yacc.py:2565: (85) block -> expr . semi block - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 93 (arg_list -> expr .) - yacc.py:2687: comma shift and go to state 189 - yacc.py:2687: semi shift and go to state 151 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 188 - yacc.py:2563: - yacc.py:2565: (90) func_call -> error opar args cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: dot reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: star reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: div reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: plus reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: minus reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: less reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: lesseq reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: equal reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: semi reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: cpar reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: of reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: then reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: loop reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: comma reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: in reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: else reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: pool reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: ccur reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: fi reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 189 - yacc.py:2563: - yacc.py:2565: (94) arg_list -> expr comma . arg_list - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 145 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 155 - yacc.py:2714: arg_list shift and go to state 211 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 190 - yacc.py:2563: - yacc.py:2565: (85) block -> expr semi block . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 85 (block -> expr semi block .) - yacc.py:2687: error reduce using rule 85 (block -> expr semi block .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 191 - yacc.py:2563: - yacc.py:2565: (88) func_call -> id opar args cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: dot reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: star reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: div reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: plus reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: minus reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: less reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: lesseq reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: equal reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: semi reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: cpar reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: of reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: then reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: loop reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: comma reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: in reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: else reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: pool reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: ccur reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: fi reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 192 - yacc.py:2563: - yacc.py:2565: (89) func_call -> id opar error cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: dot reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: star reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: div reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: plus reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: minus reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: less reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: lesseq reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: equal reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: semi reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: cpar reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: of reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: then reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: loop reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: comma reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: in reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: else reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: pool reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: ccur reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: fi reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 193 - yacc.py:2563: - yacc.py:2565: (59) base_call -> factor arroba type dot . func_call - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 168 - yacc.py:2687: error shift and go to state 169 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 212 - yacc.py:2561: - yacc.py:2562:state 194 - yacc.py:2563: - yacc.py:2565: (62) base_call -> factor arroba error dot . func_call - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 168 - yacc.py:2687: error shift and go to state 169 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 213 - yacc.py:2561: - yacc.py:2562:state 195 - yacc.py:2563: - yacc.py:2565: (90) func_call -> error opar . args cpar - yacc.py:2565: (91) args -> . arg_list - yacc.py:2565: (92) args -> . arg_list_empty - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (96) arg_list_empty -> . epsilon - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 145 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: args shift and go to state 146 - yacc.py:2714: arg_list shift and go to state 148 - yacc.py:2714: arg_list_empty shift and go to state 149 - yacc.py:2714: expr shift and go to state 155 - yacc.py:2714: epsilon shift and go to state 150 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 196 - yacc.py:2563: - yacc.py:2565: (70) factor -> let let_list in expr . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: dot reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: star reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: div reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: plus reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: minus reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: less reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: lesseq reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: equal reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: semi reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: cpar reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: of reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: then reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: loop reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: comma reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: in reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: else reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: pool reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: ccur reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: fi reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 197 - yacc.py:2563: - yacc.py:2565: (37) let_list -> let_assign comma let_list . - yacc.py:2566: - yacc.py:2687: in reduce using rule 37 (let_list -> let_assign comma let_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 198 - yacc.py:2563: - yacc.py:2565: (38) let_assign -> param larrow expr . - yacc.py:2566: - yacc.py:2687: comma reduce using rule 38 (let_assign -> param larrow expr .) - yacc.py:2687: in reduce using rule 38 (let_assign -> param larrow expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 199 - yacc.py:2563: - yacc.py:2565: (71) factor -> case expr of cases_list . esac - yacc.py:2566: - yacc.py:2687: esac shift and go to state 214 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 200 - yacc.py:2563: - yacc.py:2565: (40) cases_list -> casep . semi - yacc.py:2565: (41) cases_list -> casep . semi cases_list - yacc.py:2566: - yacc.py:2687: semi shift and go to state 215 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 201 - yacc.py:2563: - yacc.py:2565: (42) cases_list -> error . cases_list - yacc.py:2565: (43) cases_list -> error . semi - yacc.py:2565: (40) cases_list -> . casep semi - yacc.py:2565: (41) cases_list -> . casep semi cases_list - yacc.py:2565: (42) cases_list -> . error cases_list - yacc.py:2565: (43) cases_list -> . error semi - yacc.py:2565: (44) casep -> . id colon type rarrow expr - yacc.py:2566: - yacc.py:2687: semi shift and go to state 217 - yacc.py:2687: error shift and go to state 201 - yacc.py:2687: id shift and go to state 202 - yacc.py:2689: - yacc.py:2714: cases_list shift and go to state 216 - yacc.py:2714: casep shift and go to state 200 - yacc.py:2561: - yacc.py:2562:state 202 - yacc.py:2563: - yacc.py:2565: (44) casep -> id . colon type rarrow expr - yacc.py:2566: - yacc.py:2687: colon shift and go to state 218 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 203 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr then expr . else expr fi - yacc.py:2566: - yacc.py:2687: else shift and go to state 219 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 204 - yacc.py:2563: - yacc.py:2565: (73) factor -> while expr loop expr . pool - yacc.py:2566: - yacc.py:2687: pool shift and go to state 220 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 205 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur expr . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 221 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 206 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur expr . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 222 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 207 - yacc.py:2563: - yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur error . ccur - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 223 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 208 - yacc.py:2563: - yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur expr . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 224 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 209 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur expr . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 225 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 210 - yacc.py:2563: - yacc.py:2565: (61) base_call -> error arroba type dot func_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: div reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: plus reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: minus reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: less reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: lesseq reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: equal reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: semi reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: cpar reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: arroba reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: dot reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: of reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: then reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: loop reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: comma reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: in reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: else reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: pool reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: ccur reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: fi reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 211 - yacc.py:2563: - yacc.py:2565: (94) arg_list -> expr comma arg_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 94 (arg_list -> expr comma arg_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 212 - yacc.py:2563: - yacc.py:2565: (59) base_call -> factor arroba type dot func_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: div reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: plus reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: minus reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: less reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: lesseq reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: equal reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: semi reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: cpar reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: arroba reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: dot reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: of reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: then reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: loop reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: comma reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: in reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: else reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: pool reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: ccur reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: fi reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 213 - yacc.py:2563: - yacc.py:2565: (62) base_call -> factor arroba error dot func_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: div reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: plus reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: minus reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: less reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: lesseq reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: equal reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: semi reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: cpar reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: arroba reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: dot reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: of reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: then reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: loop reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: comma reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: in reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: else reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: pool reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: ccur reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: fi reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 214 - yacc.py:2563: - yacc.py:2565: (71) factor -> case expr of cases_list esac . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: dot reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: star reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: div reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: plus reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: minus reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: less reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: lesseq reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: equal reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: semi reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: cpar reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: of reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: then reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: loop reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: comma reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: in reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: else reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: pool reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: ccur reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: fi reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 215 - yacc.py:2563: - yacc.py:2565: (40) cases_list -> casep semi . - yacc.py:2565: (41) cases_list -> casep semi . cases_list - yacc.py:2565: (40) cases_list -> . casep semi - yacc.py:2565: (41) cases_list -> . casep semi cases_list - yacc.py:2565: (42) cases_list -> . error cases_list - yacc.py:2565: (43) cases_list -> . error semi - yacc.py:2565: (44) casep -> . id colon type rarrow expr - yacc.py:2566: - yacc.py:2687: esac reduce using rule 40 (cases_list -> casep semi .) - yacc.py:2687: error shift and go to state 201 - yacc.py:2687: id shift and go to state 202 - yacc.py:2689: - yacc.py:2714: casep shift and go to state 200 - yacc.py:2714: cases_list shift and go to state 226 - yacc.py:2561: - yacc.py:2562:state 216 - yacc.py:2563: - yacc.py:2565: (42) cases_list -> error cases_list . - yacc.py:2566: - yacc.py:2687: esac reduce using rule 42 (cases_list -> error cases_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 217 - yacc.py:2563: - yacc.py:2565: (43) cases_list -> error semi . - yacc.py:2566: - yacc.py:2687: esac reduce using rule 43 (cases_list -> error semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 218 - yacc.py:2563: - yacc.py:2565: (44) casep -> id colon . type rarrow expr - yacc.py:2566: - yacc.py:2687: type shift and go to state 227 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 219 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr then expr else . expr fi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 228 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 220 - yacc.py:2563: - yacc.py:2565: (73) factor -> while expr loop expr pool . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: dot reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: star reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: div reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: plus reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: minus reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: less reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: lesseq reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: equal reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: semi reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: cpar reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: of reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: then reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: loop reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: comma reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: in reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: else reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: pool reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: ccur reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: fi reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 221 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur expr ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 26 (def_func -> error opar formals cpar colon type ocur expr ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 222 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur expr ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 25 (def_func -> id opar formals cpar colon type ocur expr ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 223 - yacc.py:2563: - yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur error ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 29 (def_func -> id opar formals cpar colon type ocur error ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 224 - yacc.py:2563: - yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur expr ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 28 (def_func -> id opar formals cpar colon error ocur expr ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 225 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur expr ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 27 (def_func -> id opar error cpar colon type ocur expr ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 226 - yacc.py:2563: - yacc.py:2565: (41) cases_list -> casep semi cases_list . - yacc.py:2566: - yacc.py:2687: esac reduce using rule 41 (cases_list -> casep semi cases_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 227 - yacc.py:2563: - yacc.py:2565: (44) casep -> id colon type . rarrow expr - yacc.py:2566: - yacc.py:2687: rarrow shift and go to state 229 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 228 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr then expr else expr . fi - yacc.py:2566: - yacc.py:2687: fi shift and go to state 230 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 229 - yacc.py:2563: - yacc.py:2565: (44) casep -> id colon type rarrow . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 231 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 230 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr then expr else expr fi . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: dot reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: star reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: div reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: plus reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: minus reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: less reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: lesseq reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: equal reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: semi reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: cpar reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: of reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: then reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: loop reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: comma reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: in reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: else reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: pool reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: ccur reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: fi reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 231 - yacc.py:2563: - yacc.py:2565: (44) casep -> id colon type rarrow expr . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 44 (casep -> id colon type rarrow expr .) - yacc.py:2689: - yacc.py:3447:24 shift/reduce conflicts - yacc.py:3457: - yacc.py:3458:Conflicts: - yacc.py:3459: - yacc.py:3462:shift/reduce conflict for less in state 73 resolved as shift - yacc.py:3462:shift/reduce conflict for lesseq in state 73 resolved as shift - yacc.py:3462:shift/reduce conflict for equal in state 73 resolved as shift - yacc.py:3462:shift/reduce conflict for plus in state 74 resolved as shift - yacc.py:3462:shift/reduce conflict for minus in state 74 resolved as shift - yacc.py:3462:shift/reduce conflict for star in state 75 resolved as shift - yacc.py:3462:shift/reduce conflict for div in state 75 resolved as shift - yacc.py:3462:shift/reduce conflict for arroba in state 77 resolved as shift - yacc.py:3462:shift/reduce conflict for dot in state 77 resolved as shift - yacc.py:3462:shift/reduce conflict for ccur in state 141 resolved as shift - yacc.py:3462:shift/reduce conflict for cpar in state 147 resolved as shift - yacc.py:3462:shift/reduce conflict for error in state 151 resolved as shift - yacc.py:3462:shift/reduce conflict for plus in state 156 resolved as shift - yacc.py:3462:shift/reduce conflict for minus in state 156 resolved as shift - yacc.py:3462:shift/reduce conflict for plus in state 157 resolved as shift - yacc.py:3462:shift/reduce conflict for minus in state 157 resolved as shift - yacc.py:3462:shift/reduce conflict for plus in state 158 resolved as shift - yacc.py:3462:shift/reduce conflict for minus in state 158 resolved as shift - yacc.py:3462:shift/reduce conflict for star in state 159 resolved as shift - yacc.py:3462:shift/reduce conflict for div in state 159 resolved as shift - yacc.py:3462:shift/reduce conflict for star in state 160 resolved as shift - yacc.py:3462:shift/reduce conflict for div in state 160 resolved as shift - yacc.py:3462:shift/reduce conflict for arroba in state 162 resolved as shift - yacc.py:3462:shift/reduce conflict for arroba in state 164 resolved as shift - yacc.py: 362:PLY: PARSE DEBUG START - yacc.py: 410: - yacc.py: 411:State : 0 - yacc.py: 435:Stack : . LexToken(class,'class',1,0) - yacc.py: 445:Action : Shift and goto state 5 - yacc.py: 410: - yacc.py: 411:State : 5 - yacc.py: 435:Stack : class . LexToken(type,'Main',1,6) - yacc.py: 445:Action : Shift and goto state 8 - yacc.py: 410: - yacc.py: 411:State : 8 - yacc.py: 435:Stack : class type . LexToken(ocur,'{',1,11) - yacc.py: 445:Action : Shift and goto state 10 - yacc.py: 410: - yacc.py: 411:State : 10 - yacc.py: 435:Stack : class type ocur . LexToken(id,'main',3,18) - yacc.py: 445:Action : Shift and goto state 19 - yacc.py: 410: - yacc.py: 411:State : 19 - yacc.py: 435:Stack : class type ocur id . LexToken(opar,'(',3,22) - yacc.py: 445:Action : Shift and goto state 32 - yacc.py: 410: - yacc.py: 411:State : 32 - yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',3,23) - yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',3,23) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',3,23) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',3,23) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : class type ocur id opar formals cpar . LexToken(colon,':',3,24) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon . LexToken(type,'Object',3,26) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type . LexToken(ocur,'{',3,33) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur . LexToken(opar,'(',4,43) - yacc.py: 445:Action : Shift and goto state 80 - yacc.py: 410: - yacc.py: 411:State : 80 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar . LexToken(new,'new',4,44) - yacc.py: 445:Action : Shift and goto state 89 - yacc.py: 410: - yacc.py: 411:State : 89 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new . LexToken(type,'Alpha',4,48) - yacc.py: 445:Action : Shift and goto state 134 - yacc.py: 410: - yacc.py: 411:State : 134 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',4,53) - yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 150 - yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar epsilon . LexToken(cpar,')',4,61) - yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 149 - yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar arg_list_empty . LexToken(cpar,')',4,61) - yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args . LexToken(cpar,')',4,61) - yacc.py: 445:Action : Shift and goto state 191 - yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args cpar . LexToken(ccur,'}',5,67) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['print','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) - yacc.py: 410: - yacc.py: 411:State : 167 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot func_call . LexToken(ccur,'}',5,67) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 16 - yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : class type ocur def_func semi epsilon . LexToken(ccur,'}',6,70) - yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 48 - yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : class type ocur def_func semi feature_list . LexToken(ccur,'}',6,70) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 14 - yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( id colon type] with ['test1',':','Int'] and goto state 17 - yacc.py: 506:Result : ( id] with ['test3'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',12,146) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',12,146) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',12,146) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar . LexToken(colon,':',12,147) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon . LexToken(type,'Int',12,149) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',12,153) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur . LexToken(num,2.0,13,163) - yacc.py: 445:Action : Shift and goto state 88 - yacc.py: 410: - yacc.py: 411:State : 88 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur num . LexToken(minus,'-',13,165) - yacc.py: 471:Action : Reduce rule [atom -> num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 160 - yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( string] with ['1'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type] with ['a',':','Alpha'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) - yacc.py: 410: - yacc.py: 411:State : 44 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param . LexToken(comma,',',19,226) - yacc.py: 445:Action : Shift and goto state 60 - yacc.py: 410: - yacc.py: 411:State : 60 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma . LexToken(id,'b',19,228) - yacc.py: 445:Action : Shift and goto state 46 - yacc.py: 410: - yacc.py: 411:State : 46 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id . LexToken(colon,':',19,229) - yacc.py: 445:Action : Shift and goto state 61 - yacc.py: 410: - yacc.py: 411:State : 61 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon . LexToken(type,'Int',19,231) - yacc.py: 445:Action : Shift and goto state 96 - yacc.py: 410: - yacc.py: 411:State : 96 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon type . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['b',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) - yacc.py: 410: - yacc.py: 411:State : 44 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 - yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) - yacc.py: 410: - yacc.py: 411:State : 95 - yacc.py: 430:Defaulted state 95: Reduce using 33 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) - yacc.py: 410: - yacc.py: 411:State : 42 - yacc.py: 430:Defaulted state 42: Reduce using 30 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals . LexToken(cpar,')',19,234) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar . LexToken(colon,':',19,235) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon . LexToken(type,'Int',19,237) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',19,241) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur . LexToken(let,'let',20,251) - yacc.py: 445:Action : Shift and goto state 84 - yacc.py: 410: - yacc.py: 411:State : 84 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let . LexToken(id,'count',20,255) - yacc.py: 445:Action : Shift and goto state 46 - yacc.py: 410: - yacc.py: 411:State : 46 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id . LexToken(colon,':',20,260) - yacc.py: 445:Action : Shift and goto state 61 - yacc.py: 410: - yacc.py: 411:State : 61 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon . LexToken(type,'Int',20,262) - yacc.py: 445:Action : Shift and goto state 96 - yacc.py: 410: - yacc.py: 411:State : 96 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon type . LexToken(comma,',',20,265) - yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['count',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) - yacc.py: 410: - yacc.py: 411:State : 130 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let param . LexToken(comma,',',20,265) - yacc.py: 471:Action : Reduce rule [let_assign -> param] with [] and goto state 129 - yacc.py: 506:Result : ( id colon type] with ['pow',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) - yacc.py: 410: - yacc.py: 411:State : 130 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param . LexToken(larrow,'<-',20,276) - yacc.py: 445:Action : Shift and goto state 173 - yacc.py: 410: - yacc.py: 411:State : 173 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow . LexToken(num,1.0,20,279) - yacc.py: 445:Action : Shift and goto state 88 - yacc.py: 410: - yacc.py: 411:State : 88 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow num . LexToken(in,'in',21,329) - yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 - yacc.py: 506:Result : ( let_assign] with [] and goto state 197 - yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 - yacc.py: 506:Result : ([ num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 - yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 135 - yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 196 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',26,389) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',26,389) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',26,389) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar . LexToken(colon,':',26,390) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon . LexToken(type,'Int',26,392) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',26,396) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'testing2',27,406) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id . LexToken(opar,'(',27,414) - yacc.py: 445:Action : Shift and goto state 113 - yacc.py: 410: - yacc.py: 411:State : 113 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar . LexToken(new,'new',27,415) - yacc.py: 445:Action : Shift and goto state 89 - yacc.py: 410: - yacc.py: 411:State : 89 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new . LexToken(type,'Alpha',27,419) - yacc.py: 445:Action : Shift and goto state 134 - yacc.py: 410: - yacc.py: 411:State : 134 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new type . LexToken(comma,',',27,424) - yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',30,450) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',30,450) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',30,450) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',30,451) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'Int',30,453) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',30,457) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'test1',31,467) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(larrow,'<-',31,473) - yacc.py: 445:Action : Shift and goto state 112 - yacc.py: 410: - yacc.py: 411:State : 112 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow . LexToken(opar,'(',31,477) - yacc.py: 445:Action : Shift and goto state 80 - yacc.py: 410: - yacc.py: 411:State : 80 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar . LexToken(num,1.0,31,478) - yacc.py: 445:Action : Shift and goto state 88 - yacc.py: 410: - yacc.py: 411:State : 88 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar num . LexToken(plus,'+',31,480) - yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 16 - yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',33,543) - yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 48 - yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',33,543) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar epsilon . LexToken(cpar,')',37,601) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list_empty . LexToken(cpar,')',37,601) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',37,601) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar . LexToken(colon,':',37,603) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon . LexToken(type,'Object',37,605) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',37,612) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur . LexToken(id,'out_string',38,622) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id . LexToken(opar,'(',38,632) - yacc.py: 445:Action : Shift and goto state 113 - yacc.py: 410: - yacc.py: 411:State : 113 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id opar . LexToken(string,'reached!!\n',38,645) - yacc.py: 445:Action : Shift and goto state 93 - yacc.py: 410: - yacc.py: 411:State : 93 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id opar string . LexToken(cpar,')',38,646) - yacc.py: 471:Action : Reduce rule [atom -> string] with ['reached!!\n'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 16 - yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi epsilon . LexToken(ccur,'}',40,655) - yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 48 - yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi feature_list . LexToken(ccur,'}',40,655) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( ( program + yacc.py:3381:Rule 1 program -> class_list + yacc.py:3381:Rule 2 epsilon -> + yacc.py:3381:Rule 3 class_list -> def_class class_list + yacc.py:3381:Rule 4 class_list -> def_class + yacc.py:3381:Rule 5 class_list -> error class_list + yacc.py:3381:Rule 6 def_class -> class type ocur feature_list ccur semi + yacc.py:3381:Rule 7 def_class -> class type inherits type ocur feature_list ccur semi + yacc.py:3381:Rule 8 def_class -> class error ocur feature_list ccur semi + yacc.py:3381:Rule 9 def_class -> class type ocur feature_list ccur error + yacc.py:3381:Rule 10 def_class -> class error inherits type ocur feature_list ccur semi + yacc.py:3381:Rule 11 def_class -> class error inherits error ocur feature_list ccur semi + yacc.py:3381:Rule 12 def_class -> class type inherits error ocur feature_list ccur semi + yacc.py:3381:Rule 13 def_class -> class type inherits type ocur feature_list ccur error + yacc.py:3381:Rule 14 feature_list -> epsilon + yacc.py:3381:Rule 15 feature_list -> def_attr semi feature_list + yacc.py:3381:Rule 16 feature_list -> def_func semi feature_list + yacc.py:3381:Rule 17 feature_list -> error feature_list + yacc.py:3381:Rule 18 def_attr -> id colon type + yacc.py:3381:Rule 19 def_attr -> id colon type larrow expr + yacc.py:3381:Rule 20 def_attr -> error colon type + yacc.py:3381:Rule 21 def_attr -> id colon error + yacc.py:3381:Rule 22 def_attr -> error colon type larrow expr + yacc.py:3381:Rule 23 def_attr -> id colon error larrow expr + yacc.py:3381:Rule 24 def_attr -> id colon type larrow error + yacc.py:3381:Rule 25 def_func -> id opar formals cpar colon type ocur expr ccur + yacc.py:3381:Rule 26 def_func -> error opar formals cpar colon type ocur expr ccur + yacc.py:3381:Rule 27 def_func -> id opar error cpar colon type ocur expr ccur + yacc.py:3381:Rule 28 def_func -> id opar formals cpar colon error ocur expr ccur + yacc.py:3381:Rule 29 def_func -> id opar formals cpar colon type ocur error ccur + yacc.py:3381:Rule 30 formals -> param_list + yacc.py:3381:Rule 31 formals -> param_list_empty + yacc.py:3381:Rule 32 param_list -> param + yacc.py:3381:Rule 33 param_list -> param comma param_list + yacc.py:3381:Rule 34 param_list_empty -> epsilon + yacc.py:3381:Rule 35 param -> id colon type + yacc.py:3381:Rule 36 let_list -> let_assign + yacc.py:3381:Rule 37 let_list -> let_assign comma let_list + yacc.py:3381:Rule 38 let_assign -> param larrow expr + yacc.py:3381:Rule 39 let_assign -> param + yacc.py:3381:Rule 40 cases_list -> casep semi + yacc.py:3381:Rule 41 cases_list -> casep semi cases_list + yacc.py:3381:Rule 42 cases_list -> error cases_list + yacc.py:3381:Rule 43 cases_list -> error semi + yacc.py:3381:Rule 44 casep -> id colon type rarrow expr + yacc.py:3381:Rule 45 expr -> id larrow expr + yacc.py:3381:Rule 46 expr -> comp + yacc.py:3381:Rule 47 comp -> comp less op + yacc.py:3381:Rule 48 comp -> comp lesseq op + yacc.py:3381:Rule 49 comp -> comp equal op + yacc.py:3381:Rule 50 comp -> op + yacc.py:3381:Rule 51 op -> op plus term + yacc.py:3381:Rule 52 op -> op minus term + yacc.py:3381:Rule 53 op -> term + yacc.py:3381:Rule 54 term -> term star base_call + yacc.py:3381:Rule 55 term -> term div base_call + yacc.py:3381:Rule 56 term -> base_call + yacc.py:3381:Rule 57 term -> term star error + yacc.py:3381:Rule 58 term -> term div error + yacc.py:3381:Rule 59 base_call -> factor arroba type dot func_call + yacc.py:3381:Rule 60 base_call -> factor + yacc.py:3381:Rule 61 base_call -> error arroba type dot func_call + yacc.py:3381:Rule 62 base_call -> factor arroba error dot func_call + yacc.py:3381:Rule 63 factor -> atom + yacc.py:3381:Rule 64 factor -> opar expr cpar + yacc.py:3381:Rule 65 factor -> factor dot func_call + yacc.py:3381:Rule 66 factor -> not expr + yacc.py:3381:Rule 67 factor -> func_call + yacc.py:3381:Rule 68 factor -> isvoid base_call + yacc.py:3381:Rule 69 factor -> nox base_call + yacc.py:3381:Rule 70 factor -> let let_list in expr + yacc.py:3381:Rule 71 factor -> case expr of cases_list esac + yacc.py:3381:Rule 72 factor -> if expr then expr else expr fi + yacc.py:3381:Rule 73 factor -> while expr loop expr pool + yacc.py:3381:Rule 74 atom -> num + yacc.py:3381:Rule 75 atom -> id + yacc.py:3381:Rule 76 atom -> new type + yacc.py:3381:Rule 77 atom -> ocur block ccur + yacc.py:3381:Rule 78 atom -> error block ccur + yacc.py:3381:Rule 79 atom -> ocur error ccur + yacc.py:3381:Rule 80 atom -> ocur block error + yacc.py:3381:Rule 81 atom -> true + yacc.py:3381:Rule 82 atom -> false + yacc.py:3381:Rule 83 atom -> string + yacc.py:3381:Rule 84 block -> expr semi + yacc.py:3381:Rule 85 block -> expr semi block + yacc.py:3381:Rule 86 block -> error block + yacc.py:3381:Rule 87 block -> error semi + yacc.py:3381:Rule 88 func_call -> id opar args cpar + yacc.py:3381:Rule 89 func_call -> id opar error cpar + yacc.py:3381:Rule 90 func_call -> error opar args cpar + yacc.py:3381:Rule 91 args -> arg_list + yacc.py:3381:Rule 92 args -> arg_list_empty + yacc.py:3381:Rule 93 arg_list -> expr + yacc.py:3381:Rule 94 arg_list -> expr comma arg_list + yacc.py:3381:Rule 95 arg_list -> error arg_list + yacc.py:3381:Rule 96 arg_list_empty -> epsilon + yacc.py:3399: + yacc.py:3400:Terminals, with rules where they appear + yacc.py:3401: + yacc.py:3405:arroba : 59 61 62 + yacc.py:3405:case : 71 + yacc.py:3405:ccur : 6 7 8 9 10 11 12 13 25 26 27 28 29 77 78 79 + yacc.py:3405:class : 6 7 8 9 10 11 12 13 + yacc.py:3405:colon : 18 19 20 21 22 23 24 25 26 27 28 29 35 44 + yacc.py:3405:comma : 33 37 94 + yacc.py:3405:cpar : 25 26 27 28 29 64 88 89 90 + yacc.py:3405:div : 55 58 + yacc.py:3405:dot : 59 61 62 65 + yacc.py:3405:else : 72 + yacc.py:3405:equal : 49 + yacc.py:3405:error : 5 8 9 10 11 11 12 13 17 20 21 22 23 24 26 27 28 29 42 43 57 58 61 62 78 79 80 86 87 89 90 95 + yacc.py:3405:esac : 71 + yacc.py:3405:false : 82 + yacc.py:3405:fi : 72 + yacc.py:3405:id : 18 19 21 23 24 25 27 28 29 35 44 45 75 88 89 + yacc.py:3405:if : 72 + yacc.py:3405:in : 70 + yacc.py:3405:inherits : 7 10 11 12 13 + yacc.py:3405:isvoid : 68 + yacc.py:3405:larrow : 19 22 23 24 38 45 + yacc.py:3405:less : 47 + yacc.py:3405:lesseq : 48 + yacc.py:3405:let : 70 + yacc.py:3405:loop : 73 + yacc.py:3405:minus : 52 + yacc.py:3405:new : 76 + yacc.py:3405:not : 66 + yacc.py:3405:nox : 69 + yacc.py:3405:num : 74 + yacc.py:3405:ocur : 6 7 8 9 10 11 12 13 25 26 27 28 29 77 79 80 + yacc.py:3405:of : 71 + yacc.py:3405:opar : 25 26 27 28 29 64 88 89 90 + yacc.py:3405:plus : 51 + yacc.py:3405:pool : 73 + yacc.py:3405:rarrow : 44 + yacc.py:3405:semi : 6 7 8 10 11 12 15 16 40 41 43 84 85 87 + yacc.py:3405:star : 54 57 + yacc.py:3405:string : 83 + yacc.py:3405:then : 72 + yacc.py:3405:true : 81 + yacc.py:3405:type : 6 7 7 9 10 12 13 13 18 19 20 22 24 25 26 27 29 35 44 59 61 76 + yacc.py:3405:while : 73 + yacc.py:3407: + yacc.py:3408:Nonterminals, with rules where they appear + yacc.py:3409: + yacc.py:3413:arg_list : 91 94 95 + yacc.py:3413:arg_list_empty : 92 + yacc.py:3413:args : 88 90 + yacc.py:3413:atom : 63 + yacc.py:3413:base_call : 54 55 56 68 69 + yacc.py:3413:block : 77 78 80 85 86 + yacc.py:3413:casep : 40 41 + yacc.py:3413:cases_list : 41 42 71 + yacc.py:3413:class_list : 1 3 5 + yacc.py:3413:comp : 46 47 48 49 + yacc.py:3413:def_attr : 15 + yacc.py:3413:def_class : 3 4 + yacc.py:3413:def_func : 16 + yacc.py:3413:epsilon : 14 34 96 + yacc.py:3413:expr : 19 22 23 25 26 27 28 38 44 45 64 66 70 71 72 72 72 73 73 84 85 93 94 + yacc.py:3413:factor : 59 60 62 65 + yacc.py:3413:feature_list : 6 7 8 9 10 11 12 13 15 16 17 + yacc.py:3413:formals : 25 26 28 29 + yacc.py:3413:func_call : 59 61 62 65 67 + yacc.py:3413:let_assign : 36 37 + yacc.py:3413:let_list : 37 70 + yacc.py:3413:op : 47 48 49 50 51 52 + yacc.py:3413:param : 32 33 38 39 + yacc.py:3413:param_list : 30 33 + yacc.py:3413:param_list_empty : 31 + yacc.py:3413:program : 0 + yacc.py:3413:term : 51 52 53 54 55 57 58 + yacc.py:3414: + yacc.py:3436:Generating LALR tables + yacc.py:2543:Parsing method: LALR + yacc.py:2561: + yacc.py:2562:state 0 + yacc.py:2563: + yacc.py:2565: (0) S' -> . program + yacc.py:2565: (1) program -> . class_list + yacc.py:2565: (3) class_list -> . def_class class_list + yacc.py:2565: (4) class_list -> . def_class + yacc.py:2565: (5) class_list -> . error class_list + yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi + yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi + yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error + yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi + yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: error shift and go to state 4 + yacc.py:2687: class shift and go to state 5 + yacc.py:2689: + yacc.py:2714: program shift and go to state 1 + yacc.py:2714: class_list shift and go to state 2 + yacc.py:2714: def_class shift and go to state 3 + yacc.py:2561: + yacc.py:2562:state 1 + yacc.py:2563: + yacc.py:2565: (0) S' -> program . + yacc.py:2566: + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 2 + yacc.py:2563: + yacc.py:2565: (1) program -> class_list . + yacc.py:2566: + yacc.py:2687: $end reduce using rule 1 (program -> class_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 3 + yacc.py:2563: + yacc.py:2565: (3) class_list -> def_class . class_list + yacc.py:2565: (4) class_list -> def_class . + yacc.py:2565: (3) class_list -> . def_class class_list + yacc.py:2565: (4) class_list -> . def_class + yacc.py:2565: (5) class_list -> . error class_list + yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi + yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi + yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error + yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi + yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: $end reduce using rule 4 (class_list -> def_class .) + yacc.py:2687: error shift and go to state 4 + yacc.py:2687: class shift and go to state 5 + yacc.py:2689: + yacc.py:2714: def_class shift and go to state 3 + yacc.py:2714: class_list shift and go to state 6 + yacc.py:2561: + yacc.py:2562:state 4 + yacc.py:2563: + yacc.py:2565: (5) class_list -> error . class_list + yacc.py:2565: (3) class_list -> . def_class class_list + yacc.py:2565: (4) class_list -> . def_class + yacc.py:2565: (5) class_list -> . error class_list + yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi + yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi + yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error + yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi + yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: error shift and go to state 4 + yacc.py:2687: class shift and go to state 5 + yacc.py:2689: + yacc.py:2714: class_list shift and go to state 7 + yacc.py:2714: def_class shift and go to state 3 + yacc.py:2561: + yacc.py:2562:state 5 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class . type ocur feature_list ccur semi + yacc.py:2565: (7) def_class -> class . type inherits type ocur feature_list ccur semi + yacc.py:2565: (8) def_class -> class . error ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> class . type ocur feature_list ccur error + yacc.py:2565: (10) def_class -> class . error inherits type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> class . error inherits error ocur feature_list ccur semi + yacc.py:2565: (12) def_class -> class . type inherits error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> class . type inherits type ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: type shift and go to state 8 + yacc.py:2687: error shift and go to state 9 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 6 + yacc.py:2563: + yacc.py:2565: (3) class_list -> def_class class_list . + yacc.py:2566: + yacc.py:2687: $end reduce using rule 3 (class_list -> def_class class_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 7 + yacc.py:2563: + yacc.py:2565: (5) class_list -> error class_list . + yacc.py:2566: + yacc.py:2687: $end reduce using rule 5 (class_list -> error class_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 8 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class type . ocur feature_list ccur semi + yacc.py:2565: (7) def_class -> class type . inherits type ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> class type . ocur feature_list ccur error + yacc.py:2565: (12) def_class -> class type . inherits error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> class type . inherits type ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 10 + yacc.py:2687: inherits shift and go to state 11 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 9 + yacc.py:2563: + yacc.py:2565: (8) def_class -> class error . ocur feature_list ccur semi + yacc.py:2565: (10) def_class -> class error . inherits type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> class error . inherits error ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 12 + yacc.py:2687: inherits shift and go to state 13 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 10 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class type ocur . feature_list ccur semi + yacc.py:2565: (9) def_class -> class type ocur . feature_list ccur error + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 14 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 11 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits . type ocur feature_list ccur semi + yacc.py:2565: (12) def_class -> class type inherits . error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> class type inherits . type ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: type shift and go to state 20 + yacc.py:2687: error shift and go to state 21 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 12 + yacc.py:2563: + yacc.py:2565: (8) def_class -> class error ocur . feature_list ccur semi + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 22 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 13 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits . type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> class error inherits . error ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: type shift and go to state 24 + yacc.py:2687: error shift and go to state 23 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 14 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class type ocur feature_list . ccur semi + yacc.py:2565: (9) def_class -> class type ocur feature_list . ccur error + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 25 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 15 + yacc.py:2563: + yacc.py:2565: (17) feature_list -> error . feature_list + yacc.py:2565: (20) def_attr -> error . colon type + yacc.py:2565: (22) def_attr -> error . colon type larrow expr + yacc.py:2565: (26) def_func -> error . opar formals cpar colon type ocur expr ccur + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: colon shift and go to state 27 + yacc.py:2687: opar shift and go to state 28 + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 26 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 16 + yacc.py:2563: + yacc.py:2565: (14) feature_list -> epsilon . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 14 (feature_list -> epsilon .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 17 + yacc.py:2563: + yacc.py:2565: (15) feature_list -> def_attr . semi feature_list + yacc.py:2566: + yacc.py:2687: semi shift and go to state 29 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 18 + yacc.py:2563: + yacc.py:2565: (16) feature_list -> def_func . semi feature_list + yacc.py:2566: + yacc.py:2687: semi shift and go to state 30 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 19 + yacc.py:2563: + yacc.py:2565: (18) def_attr -> id . colon type + yacc.py:2565: (19) def_attr -> id . colon type larrow expr + yacc.py:2565: (21) def_attr -> id . colon error + yacc.py:2565: (23) def_attr -> id . colon error larrow expr + yacc.py:2565: (24) def_attr -> id . colon type larrow error + yacc.py:2565: (25) def_func -> id . opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> id . opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> id . opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> id . opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: colon shift and go to state 31 + yacc.py:2687: opar shift and go to state 32 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 20 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits type . ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> class type inherits type . ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 33 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 21 + yacc.py:2563: + yacc.py:2565: (12) def_class -> class type inherits error . ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 34 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 22 + yacc.py:2563: + yacc.py:2565: (8) def_class -> class error ocur feature_list . ccur semi + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 35 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 23 + yacc.py:2563: + yacc.py:2565: (11) def_class -> class error inherits error . ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 36 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 24 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits type . ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 37 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 25 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class type ocur feature_list ccur . semi + yacc.py:2565: (9) def_class -> class type ocur feature_list ccur . error + yacc.py:2566: + yacc.py:2687: semi shift and go to state 38 + yacc.py:2687: error shift and go to state 39 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 26 + yacc.py:2563: + yacc.py:2565: (17) feature_list -> error feature_list . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 17 (feature_list -> error feature_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 27 + yacc.py:2563: + yacc.py:2565: (20) def_attr -> error colon . type + yacc.py:2565: (22) def_attr -> error colon . type larrow expr + yacc.py:2566: + yacc.py:2687: type shift and go to state 40 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 28 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar . formals cpar colon type ocur expr ccur + yacc.py:2565: (30) formals -> . param_list + yacc.py:2565: (31) formals -> . param_list_empty + yacc.py:2565: (32) param_list -> . param + yacc.py:2565: (33) param_list -> . param comma param_list + yacc.py:2565: (34) param_list_empty -> . epsilon + yacc.py:2565: (35) param -> . id colon type + yacc.py:2565: (2) epsilon -> . + yacc.py:2566: + yacc.py:2687: id shift and go to state 46 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2689: + yacc.py:2714: formals shift and go to state 41 + yacc.py:2714: param_list shift and go to state 42 + yacc.py:2714: param_list_empty shift and go to state 43 + yacc.py:2714: param shift and go to state 44 + yacc.py:2714: epsilon shift and go to state 45 + yacc.py:2561: + yacc.py:2562:state 29 + yacc.py:2563: + yacc.py:2565: (15) feature_list -> def_attr semi . feature_list + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: feature_list shift and go to state 47 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 30 + yacc.py:2563: + yacc.py:2565: (16) feature_list -> def_func semi . feature_list + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2714: feature_list shift and go to state 48 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2561: + yacc.py:2562:state 31 + yacc.py:2563: + yacc.py:2565: (18) def_attr -> id colon . type + yacc.py:2565: (19) def_attr -> id colon . type larrow expr + yacc.py:2565: (21) def_attr -> id colon . error + yacc.py:2565: (23) def_attr -> id colon . error larrow expr + yacc.py:2565: (24) def_attr -> id colon . type larrow error + yacc.py:2566: + yacc.py:2687: type shift and go to state 49 + yacc.py:2687: error shift and go to state 50 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 32 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar . formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> id opar . error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> id opar . formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> id opar . formals cpar colon type ocur error ccur + yacc.py:2565: (30) formals -> . param_list + yacc.py:2565: (31) formals -> . param_list_empty + yacc.py:2565: (32) param_list -> . param + yacc.py:2565: (33) param_list -> . param comma param_list + yacc.py:2565: (34) param_list_empty -> . epsilon + yacc.py:2565: (35) param -> . id colon type + yacc.py:2565: (2) epsilon -> . + yacc.py:2566: + yacc.py:2687: error shift and go to state 52 + yacc.py:2687: id shift and go to state 46 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2689: + yacc.py:2714: formals shift and go to state 51 + yacc.py:2714: param_list shift and go to state 42 + yacc.py:2714: param_list_empty shift and go to state 43 + yacc.py:2714: param shift and go to state 44 + yacc.py:2714: epsilon shift and go to state 45 + yacc.py:2561: + yacc.py:2562:state 33 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits type ocur . feature_list ccur semi + yacc.py:2565: (13) def_class -> class type inherits type ocur . feature_list ccur error + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 53 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 34 + yacc.py:2563: + yacc.py:2565: (12) def_class -> class type inherits error ocur . feature_list ccur semi + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 54 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 35 + yacc.py:2563: + yacc.py:2565: (8) def_class -> class error ocur feature_list ccur . semi + yacc.py:2566: + yacc.py:2687: semi shift and go to state 55 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 36 + yacc.py:2563: + yacc.py:2565: (11) def_class -> class error inherits error ocur . feature_list ccur semi + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 56 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 37 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits type ocur . feature_list ccur semi + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 57 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 38 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class type ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 39 + yacc.py:2563: + yacc.py:2565: (9) def_class -> class type ocur feature_list ccur error . + yacc.py:2566: + yacc.py:2687: error reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) + yacc.py:2687: class reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) + yacc.py:2687: $end reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 40 + yacc.py:2563: + yacc.py:2565: (20) def_attr -> error colon type . + yacc.py:2565: (22) def_attr -> error colon type . larrow expr + yacc.py:2566: + yacc.py:2687: semi reduce using rule 20 (def_attr -> error colon type .) + yacc.py:2687: larrow shift and go to state 58 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 41 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals . cpar colon type ocur expr ccur + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 59 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 42 + yacc.py:2563: + yacc.py:2565: (30) formals -> param_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 30 (formals -> param_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 43 + yacc.py:2563: + yacc.py:2565: (31) formals -> param_list_empty . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 31 (formals -> param_list_empty .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 44 + yacc.py:2563: + yacc.py:2565: (32) param_list -> param . + yacc.py:2565: (33) param_list -> param . comma param_list + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 32 (param_list -> param .) + yacc.py:2687: comma shift and go to state 60 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 45 + yacc.py:2563: + yacc.py:2565: (34) param_list_empty -> epsilon . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 34 (param_list_empty -> epsilon .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 46 + yacc.py:2563: + yacc.py:2565: (35) param -> id . colon type + yacc.py:2566: + yacc.py:2687: colon shift and go to state 61 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 47 + yacc.py:2563: + yacc.py:2565: (15) feature_list -> def_attr semi feature_list . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 15 (feature_list -> def_attr semi feature_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 48 + yacc.py:2563: + yacc.py:2565: (16) feature_list -> def_func semi feature_list . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 16 (feature_list -> def_func semi feature_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 49 + yacc.py:2563: + yacc.py:2565: (18) def_attr -> id colon type . + yacc.py:2565: (19) def_attr -> id colon type . larrow expr + yacc.py:2565: (24) def_attr -> id colon type . larrow error + yacc.py:2566: + yacc.py:2687: semi reduce using rule 18 (def_attr -> id colon type .) + yacc.py:2687: larrow shift and go to state 62 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 50 + yacc.py:2563: + yacc.py:2565: (21) def_attr -> id colon error . + yacc.py:2565: (23) def_attr -> id colon error . larrow expr + yacc.py:2566: + yacc.py:2687: semi reduce using rule 21 (def_attr -> id colon error .) + yacc.py:2687: larrow shift and go to state 63 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 51 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals . cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> id opar formals . cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> id opar formals . cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 64 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 52 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error . cpar colon type ocur expr ccur + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 65 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 53 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list . ccur semi + yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list . ccur error + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 66 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 54 + yacc.py:2563: + yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list . ccur semi + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 67 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 55 + yacc.py:2563: + yacc.py:2565: (8) def_class -> class error ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 56 + yacc.py:2563: + yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list . ccur semi + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 68 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 57 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list . ccur semi + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 69 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 58 + yacc.py:2563: + yacc.py:2565: (22) def_attr -> error colon type larrow . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 71 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 59 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar . colon type ocur expr ccur + yacc.py:2566: + yacc.py:2687: colon shift and go to state 94 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 60 + yacc.py:2563: + yacc.py:2565: (33) param_list -> param comma . param_list + yacc.py:2565: (32) param_list -> . param + yacc.py:2565: (33) param_list -> . param comma param_list + yacc.py:2565: (35) param -> . id colon type + yacc.py:2566: + yacc.py:2687: id shift and go to state 46 + yacc.py:2689: + yacc.py:2714: param shift and go to state 44 + yacc.py:2714: param_list shift and go to state 95 + yacc.py:2561: + yacc.py:2562:state 61 + yacc.py:2563: + yacc.py:2565: (35) param -> id colon . type + yacc.py:2566: + yacc.py:2687: type shift and go to state 96 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 62 + yacc.py:2563: + yacc.py:2565: (19) def_attr -> id colon type larrow . expr + yacc.py:2565: (24) def_attr -> id colon type larrow . error + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 98 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 97 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 63 + yacc.py:2563: + yacc.py:2565: (23) def_attr -> id colon error larrow . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 99 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 64 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar . colon type ocur expr ccur + yacc.py:2565: (28) def_func -> id opar formals cpar . colon error ocur expr ccur + yacc.py:2565: (29) def_func -> id opar formals cpar . colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: colon shift and go to state 100 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 65 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar . colon type ocur expr ccur + yacc.py:2566: + yacc.py:2687: colon shift and go to state 101 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 66 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list ccur . semi + yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list ccur . error + yacc.py:2566: + yacc.py:2687: semi shift and go to state 102 + yacc.py:2687: error shift and go to state 103 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 67 + yacc.py:2563: + yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list ccur . semi + yacc.py:2566: + yacc.py:2687: semi shift and go to state 104 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 68 + yacc.py:2563: + yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list ccur . semi + yacc.py:2566: + yacc.py:2687: semi shift and go to state 105 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 69 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list ccur . semi + yacc.py:2566: + yacc.py:2687: semi shift and go to state 106 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 70 + yacc.py:2563: + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 71 + yacc.py:2563: + yacc.py:2565: (22) def_attr -> error colon type larrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 22 (def_attr -> error colon type larrow expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 72 + yacc.py:2563: + yacc.py:2565: (45) expr -> id . larrow expr + yacc.py:2565: (75) atom -> id . + yacc.py:2565: (88) func_call -> id . opar args cpar + yacc.py:2565: (89) func_call -> id . opar error cpar + yacc.py:2566: + yacc.py:2687: larrow shift and go to state 112 + yacc.py:2687: arroba reduce using rule 75 (atom -> id .) + yacc.py:2687: dot reduce using rule 75 (atom -> id .) + yacc.py:2687: star reduce using rule 75 (atom -> id .) + yacc.py:2687: div reduce using rule 75 (atom -> id .) + yacc.py:2687: plus reduce using rule 75 (atom -> id .) + yacc.py:2687: minus reduce using rule 75 (atom -> id .) + yacc.py:2687: less reduce using rule 75 (atom -> id .) + yacc.py:2687: lesseq reduce using rule 75 (atom -> id .) + yacc.py:2687: equal reduce using rule 75 (atom -> id .) + yacc.py:2687: semi reduce using rule 75 (atom -> id .) + yacc.py:2687: cpar reduce using rule 75 (atom -> id .) + yacc.py:2687: of reduce using rule 75 (atom -> id .) + yacc.py:2687: then reduce using rule 75 (atom -> id .) + yacc.py:2687: loop reduce using rule 75 (atom -> id .) + yacc.py:2687: comma reduce using rule 75 (atom -> id .) + yacc.py:2687: in reduce using rule 75 (atom -> id .) + yacc.py:2687: else reduce using rule 75 (atom -> id .) + yacc.py:2687: pool reduce using rule 75 (atom -> id .) + yacc.py:2687: ccur reduce using rule 75 (atom -> id .) + yacc.py:2687: fi reduce using rule 75 (atom -> id .) + yacc.py:2687: opar shift and go to state 113 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 73 + yacc.py:2563: + yacc.py:2565: (46) expr -> comp . + yacc.py:2565: (47) comp -> comp . less op + yacc.py:2565: (48) comp -> comp . lesseq op + yacc.py:2565: (49) comp -> comp . equal op + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for less resolved as shift + yacc.py:2666: ! shift/reduce conflict for lesseq resolved as shift + yacc.py:2666: ! shift/reduce conflict for equal resolved as shift + yacc.py:2687: semi reduce using rule 46 (expr -> comp .) + yacc.py:2687: cpar reduce using rule 46 (expr -> comp .) + yacc.py:2687: arroba reduce using rule 46 (expr -> comp .) + yacc.py:2687: dot reduce using rule 46 (expr -> comp .) + yacc.py:2687: star reduce using rule 46 (expr -> comp .) + yacc.py:2687: div reduce using rule 46 (expr -> comp .) + yacc.py:2687: plus reduce using rule 46 (expr -> comp .) + yacc.py:2687: minus reduce using rule 46 (expr -> comp .) + yacc.py:2687: of reduce using rule 46 (expr -> comp .) + yacc.py:2687: then reduce using rule 46 (expr -> comp .) + yacc.py:2687: loop reduce using rule 46 (expr -> comp .) + yacc.py:2687: comma reduce using rule 46 (expr -> comp .) + yacc.py:2687: in reduce using rule 46 (expr -> comp .) + yacc.py:2687: else reduce using rule 46 (expr -> comp .) + yacc.py:2687: pool reduce using rule 46 (expr -> comp .) + yacc.py:2687: ccur reduce using rule 46 (expr -> comp .) + yacc.py:2687: fi reduce using rule 46 (expr -> comp .) + yacc.py:2687: less shift and go to state 114 + yacc.py:2687: lesseq shift and go to state 115 + yacc.py:2687: equal shift and go to state 116 + yacc.py:2689: + yacc.py:2696: ! less [ reduce using rule 46 (expr -> comp .) ] + yacc.py:2696: ! lesseq [ reduce using rule 46 (expr -> comp .) ] + yacc.py:2696: ! equal [ reduce using rule 46 (expr -> comp .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 74 + yacc.py:2563: + yacc.py:2565: (50) comp -> op . + yacc.py:2565: (51) op -> op . plus term + yacc.py:2565: (52) op -> op . minus term + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for plus resolved as shift + yacc.py:2666: ! shift/reduce conflict for minus resolved as shift + yacc.py:2687: less reduce using rule 50 (comp -> op .) + yacc.py:2687: lesseq reduce using rule 50 (comp -> op .) + yacc.py:2687: equal reduce using rule 50 (comp -> op .) + yacc.py:2687: semi reduce using rule 50 (comp -> op .) + yacc.py:2687: cpar reduce using rule 50 (comp -> op .) + yacc.py:2687: arroba reduce using rule 50 (comp -> op .) + yacc.py:2687: dot reduce using rule 50 (comp -> op .) + yacc.py:2687: star reduce using rule 50 (comp -> op .) + yacc.py:2687: div reduce using rule 50 (comp -> op .) + yacc.py:2687: of reduce using rule 50 (comp -> op .) + yacc.py:2687: then reduce using rule 50 (comp -> op .) + yacc.py:2687: loop reduce using rule 50 (comp -> op .) + yacc.py:2687: comma reduce using rule 50 (comp -> op .) + yacc.py:2687: in reduce using rule 50 (comp -> op .) + yacc.py:2687: else reduce using rule 50 (comp -> op .) + yacc.py:2687: pool reduce using rule 50 (comp -> op .) + yacc.py:2687: ccur reduce using rule 50 (comp -> op .) + yacc.py:2687: fi reduce using rule 50 (comp -> op .) + yacc.py:2687: plus shift and go to state 117 + yacc.py:2687: minus shift and go to state 118 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 50 (comp -> op .) ] + yacc.py:2696: ! minus [ reduce using rule 50 (comp -> op .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 75 + yacc.py:2563: + yacc.py:2565: (53) op -> term . + yacc.py:2565: (54) term -> term . star base_call + yacc.py:2565: (55) term -> term . div base_call + yacc.py:2565: (57) term -> term . star error + yacc.py:2565: (58) term -> term . div error + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for star resolved as shift + yacc.py:2666: ! shift/reduce conflict for div resolved as shift + yacc.py:2687: plus reduce using rule 53 (op -> term .) + yacc.py:2687: minus reduce using rule 53 (op -> term .) + yacc.py:2687: less reduce using rule 53 (op -> term .) + yacc.py:2687: lesseq reduce using rule 53 (op -> term .) + yacc.py:2687: equal reduce using rule 53 (op -> term .) + yacc.py:2687: semi reduce using rule 53 (op -> term .) + yacc.py:2687: cpar reduce using rule 53 (op -> term .) + yacc.py:2687: arroba reduce using rule 53 (op -> term .) + yacc.py:2687: dot reduce using rule 53 (op -> term .) + yacc.py:2687: of reduce using rule 53 (op -> term .) + yacc.py:2687: then reduce using rule 53 (op -> term .) + yacc.py:2687: loop reduce using rule 53 (op -> term .) + yacc.py:2687: comma reduce using rule 53 (op -> term .) + yacc.py:2687: in reduce using rule 53 (op -> term .) + yacc.py:2687: else reduce using rule 53 (op -> term .) + yacc.py:2687: pool reduce using rule 53 (op -> term .) + yacc.py:2687: ccur reduce using rule 53 (op -> term .) + yacc.py:2687: fi reduce using rule 53 (op -> term .) + yacc.py:2687: star shift and go to state 119 + yacc.py:2687: div shift and go to state 120 + yacc.py:2689: + yacc.py:2696: ! star [ reduce using rule 53 (op -> term .) ] + yacc.py:2696: ! div [ reduce using rule 53 (op -> term .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 76 + yacc.py:2563: + yacc.py:2565: (56) term -> base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 56 (term -> base_call .) + yacc.py:2687: div reduce using rule 56 (term -> base_call .) + yacc.py:2687: plus reduce using rule 56 (term -> base_call .) + yacc.py:2687: minus reduce using rule 56 (term -> base_call .) + yacc.py:2687: less reduce using rule 56 (term -> base_call .) + yacc.py:2687: lesseq reduce using rule 56 (term -> base_call .) + yacc.py:2687: equal reduce using rule 56 (term -> base_call .) + yacc.py:2687: semi reduce using rule 56 (term -> base_call .) + yacc.py:2687: cpar reduce using rule 56 (term -> base_call .) + yacc.py:2687: arroba reduce using rule 56 (term -> base_call .) + yacc.py:2687: dot reduce using rule 56 (term -> base_call .) + yacc.py:2687: of reduce using rule 56 (term -> base_call .) + yacc.py:2687: then reduce using rule 56 (term -> base_call .) + yacc.py:2687: loop reduce using rule 56 (term -> base_call .) + yacc.py:2687: comma reduce using rule 56 (term -> base_call .) + yacc.py:2687: in reduce using rule 56 (term -> base_call .) + yacc.py:2687: else reduce using rule 56 (term -> base_call .) + yacc.py:2687: pool reduce using rule 56 (term -> base_call .) + yacc.py:2687: ccur reduce using rule 56 (term -> base_call .) + yacc.py:2687: fi reduce using rule 56 (term -> base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 77 + yacc.py:2563: + yacc.py:2565: (59) base_call -> factor . arroba type dot func_call + yacc.py:2565: (60) base_call -> factor . + yacc.py:2565: (62) base_call -> factor . arroba error dot func_call + yacc.py:2565: (65) factor -> factor . dot func_call + yacc.py:2566: + yacc.py:2609: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2666: ! shift/reduce conflict for dot resolved as shift + yacc.py:2687: arroba shift and go to state 121 + yacc.py:2687: star reduce using rule 60 (base_call -> factor .) + yacc.py:2687: div reduce using rule 60 (base_call -> factor .) + yacc.py:2687: plus reduce using rule 60 (base_call -> factor .) + yacc.py:2687: minus reduce using rule 60 (base_call -> factor .) + yacc.py:2687: less reduce using rule 60 (base_call -> factor .) + yacc.py:2687: lesseq reduce using rule 60 (base_call -> factor .) + yacc.py:2687: equal reduce using rule 60 (base_call -> factor .) + yacc.py:2687: semi reduce using rule 60 (base_call -> factor .) + yacc.py:2687: cpar reduce using rule 60 (base_call -> factor .) + yacc.py:2687: of reduce using rule 60 (base_call -> factor .) + yacc.py:2687: then reduce using rule 60 (base_call -> factor .) + yacc.py:2687: loop reduce using rule 60 (base_call -> factor .) + yacc.py:2687: comma reduce using rule 60 (base_call -> factor .) + yacc.py:2687: in reduce using rule 60 (base_call -> factor .) + yacc.py:2687: else reduce using rule 60 (base_call -> factor .) + yacc.py:2687: pool reduce using rule 60 (base_call -> factor .) + yacc.py:2687: ccur reduce using rule 60 (base_call -> factor .) + yacc.py:2687: fi reduce using rule 60 (base_call -> factor .) + yacc.py:2687: dot shift and go to state 122 + yacc.py:2689: + yacc.py:2696: ! arroba [ reduce using rule 60 (base_call -> factor .) ] + yacc.py:2696: ! dot [ reduce using rule 60 (base_call -> factor .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 78 + yacc.py:2563: + yacc.py:2565: (67) factor -> func_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 67 (factor -> func_call .) + yacc.py:2687: dot reduce using rule 67 (factor -> func_call .) + yacc.py:2687: star reduce using rule 67 (factor -> func_call .) + yacc.py:2687: div reduce using rule 67 (factor -> func_call .) + yacc.py:2687: plus reduce using rule 67 (factor -> func_call .) + yacc.py:2687: minus reduce using rule 67 (factor -> func_call .) + yacc.py:2687: less reduce using rule 67 (factor -> func_call .) + yacc.py:2687: lesseq reduce using rule 67 (factor -> func_call .) + yacc.py:2687: equal reduce using rule 67 (factor -> func_call .) + yacc.py:2687: semi reduce using rule 67 (factor -> func_call .) + yacc.py:2687: cpar reduce using rule 67 (factor -> func_call .) + yacc.py:2687: of reduce using rule 67 (factor -> func_call .) + yacc.py:2687: then reduce using rule 67 (factor -> func_call .) + yacc.py:2687: loop reduce using rule 67 (factor -> func_call .) + yacc.py:2687: comma reduce using rule 67 (factor -> func_call .) + yacc.py:2687: in reduce using rule 67 (factor -> func_call .) + yacc.py:2687: else reduce using rule 67 (factor -> func_call .) + yacc.py:2687: pool reduce using rule 67 (factor -> func_call .) + yacc.py:2687: ccur reduce using rule 67 (factor -> func_call .) + yacc.py:2687: fi reduce using rule 67 (factor -> func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 79 + yacc.py:2563: + yacc.py:2565: (63) factor -> atom . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 63 (factor -> atom .) + yacc.py:2687: dot reduce using rule 63 (factor -> atom .) + yacc.py:2687: star reduce using rule 63 (factor -> atom .) + yacc.py:2687: div reduce using rule 63 (factor -> atom .) + yacc.py:2687: plus reduce using rule 63 (factor -> atom .) + yacc.py:2687: minus reduce using rule 63 (factor -> atom .) + yacc.py:2687: less reduce using rule 63 (factor -> atom .) + yacc.py:2687: lesseq reduce using rule 63 (factor -> atom .) + yacc.py:2687: equal reduce using rule 63 (factor -> atom .) + yacc.py:2687: semi reduce using rule 63 (factor -> atom .) + yacc.py:2687: cpar reduce using rule 63 (factor -> atom .) + yacc.py:2687: of reduce using rule 63 (factor -> atom .) + yacc.py:2687: then reduce using rule 63 (factor -> atom .) + yacc.py:2687: loop reduce using rule 63 (factor -> atom .) + yacc.py:2687: comma reduce using rule 63 (factor -> atom .) + yacc.py:2687: in reduce using rule 63 (factor -> atom .) + yacc.py:2687: else reduce using rule 63 (factor -> atom .) + yacc.py:2687: pool reduce using rule 63 (factor -> atom .) + yacc.py:2687: ccur reduce using rule 63 (factor -> atom .) + yacc.py:2687: fi reduce using rule 63 (factor -> atom .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 80 + yacc.py:2563: + yacc.py:2565: (64) factor -> opar . expr cpar + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 123 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 81 + yacc.py:2563: + yacc.py:2565: (66) factor -> not . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 124 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 82 + yacc.py:2563: + yacc.py:2565: (68) factor -> isvoid . base_call + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 125 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 83 + yacc.py:2563: + yacc.py:2565: (69) factor -> nox . base_call + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 127 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 84 + yacc.py:2563: + yacc.py:2565: (70) factor -> let . let_list in expr + yacc.py:2565: (36) let_list -> . let_assign + yacc.py:2565: (37) let_list -> . let_assign comma let_list + yacc.py:2565: (38) let_assign -> . param larrow expr + yacc.py:2565: (39) let_assign -> . param + yacc.py:2565: (35) param -> . id colon type + yacc.py:2566: + yacc.py:2687: id shift and go to state 46 + yacc.py:2689: + yacc.py:2714: let_list shift and go to state 128 + yacc.py:2714: let_assign shift and go to state 129 + yacc.py:2714: param shift and go to state 130 + yacc.py:2561: + yacc.py:2562:state 85 + yacc.py:2563: + yacc.py:2565: (71) factor -> case . expr of cases_list esac + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 131 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 86 + yacc.py:2563: + yacc.py:2565: (72) factor -> if . expr then expr else expr fi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 132 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 87 + yacc.py:2563: + yacc.py:2565: (73) factor -> while . expr loop expr pool + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 133 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 88 + yacc.py:2563: + yacc.py:2565: (74) atom -> num . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 74 (atom -> num .) + yacc.py:2687: dot reduce using rule 74 (atom -> num .) + yacc.py:2687: star reduce using rule 74 (atom -> num .) + yacc.py:2687: div reduce using rule 74 (atom -> num .) + yacc.py:2687: plus reduce using rule 74 (atom -> num .) + yacc.py:2687: minus reduce using rule 74 (atom -> num .) + yacc.py:2687: less reduce using rule 74 (atom -> num .) + yacc.py:2687: lesseq reduce using rule 74 (atom -> num .) + yacc.py:2687: equal reduce using rule 74 (atom -> num .) + yacc.py:2687: semi reduce using rule 74 (atom -> num .) + yacc.py:2687: cpar reduce using rule 74 (atom -> num .) + yacc.py:2687: of reduce using rule 74 (atom -> num .) + yacc.py:2687: then reduce using rule 74 (atom -> num .) + yacc.py:2687: loop reduce using rule 74 (atom -> num .) + yacc.py:2687: comma reduce using rule 74 (atom -> num .) + yacc.py:2687: in reduce using rule 74 (atom -> num .) + yacc.py:2687: else reduce using rule 74 (atom -> num .) + yacc.py:2687: pool reduce using rule 74 (atom -> num .) + yacc.py:2687: ccur reduce using rule 74 (atom -> num .) + yacc.py:2687: fi reduce using rule 74 (atom -> num .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 89 + yacc.py:2563: + yacc.py:2565: (76) atom -> new . type + yacc.py:2566: + yacc.py:2687: type shift and go to state 134 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 90 + yacc.py:2563: + yacc.py:2565: (77) atom -> ocur . block ccur + yacc.py:2565: (79) atom -> ocur . error ccur + yacc.py:2565: (80) atom -> ocur . block error + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 136 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: block shift and go to state 135 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 91 + yacc.py:2563: + yacc.py:2565: (81) atom -> true . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 81 (atom -> true .) + yacc.py:2687: dot reduce using rule 81 (atom -> true .) + yacc.py:2687: star reduce using rule 81 (atom -> true .) + yacc.py:2687: div reduce using rule 81 (atom -> true .) + yacc.py:2687: plus reduce using rule 81 (atom -> true .) + yacc.py:2687: minus reduce using rule 81 (atom -> true .) + yacc.py:2687: less reduce using rule 81 (atom -> true .) + yacc.py:2687: lesseq reduce using rule 81 (atom -> true .) + yacc.py:2687: equal reduce using rule 81 (atom -> true .) + yacc.py:2687: semi reduce using rule 81 (atom -> true .) + yacc.py:2687: cpar reduce using rule 81 (atom -> true .) + yacc.py:2687: of reduce using rule 81 (atom -> true .) + yacc.py:2687: then reduce using rule 81 (atom -> true .) + yacc.py:2687: loop reduce using rule 81 (atom -> true .) + yacc.py:2687: comma reduce using rule 81 (atom -> true .) + yacc.py:2687: in reduce using rule 81 (atom -> true .) + yacc.py:2687: else reduce using rule 81 (atom -> true .) + yacc.py:2687: pool reduce using rule 81 (atom -> true .) + yacc.py:2687: ccur reduce using rule 81 (atom -> true .) + yacc.py:2687: fi reduce using rule 81 (atom -> true .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 92 + yacc.py:2563: + yacc.py:2565: (82) atom -> false . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 82 (atom -> false .) + yacc.py:2687: dot reduce using rule 82 (atom -> false .) + yacc.py:2687: star reduce using rule 82 (atom -> false .) + yacc.py:2687: div reduce using rule 82 (atom -> false .) + yacc.py:2687: plus reduce using rule 82 (atom -> false .) + yacc.py:2687: minus reduce using rule 82 (atom -> false .) + yacc.py:2687: less reduce using rule 82 (atom -> false .) + yacc.py:2687: lesseq reduce using rule 82 (atom -> false .) + yacc.py:2687: equal reduce using rule 82 (atom -> false .) + yacc.py:2687: semi reduce using rule 82 (atom -> false .) + yacc.py:2687: cpar reduce using rule 82 (atom -> false .) + yacc.py:2687: of reduce using rule 82 (atom -> false .) + yacc.py:2687: then reduce using rule 82 (atom -> false .) + yacc.py:2687: loop reduce using rule 82 (atom -> false .) + yacc.py:2687: comma reduce using rule 82 (atom -> false .) + yacc.py:2687: in reduce using rule 82 (atom -> false .) + yacc.py:2687: else reduce using rule 82 (atom -> false .) + yacc.py:2687: pool reduce using rule 82 (atom -> false .) + yacc.py:2687: ccur reduce using rule 82 (atom -> false .) + yacc.py:2687: fi reduce using rule 82 (atom -> false .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 93 + yacc.py:2563: + yacc.py:2565: (83) atom -> string . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 83 (atom -> string .) + yacc.py:2687: dot reduce using rule 83 (atom -> string .) + yacc.py:2687: star reduce using rule 83 (atom -> string .) + yacc.py:2687: div reduce using rule 83 (atom -> string .) + yacc.py:2687: plus reduce using rule 83 (atom -> string .) + yacc.py:2687: minus reduce using rule 83 (atom -> string .) + yacc.py:2687: less reduce using rule 83 (atom -> string .) + yacc.py:2687: lesseq reduce using rule 83 (atom -> string .) + yacc.py:2687: equal reduce using rule 83 (atom -> string .) + yacc.py:2687: semi reduce using rule 83 (atom -> string .) + yacc.py:2687: cpar reduce using rule 83 (atom -> string .) + yacc.py:2687: of reduce using rule 83 (atom -> string .) + yacc.py:2687: then reduce using rule 83 (atom -> string .) + yacc.py:2687: loop reduce using rule 83 (atom -> string .) + yacc.py:2687: comma reduce using rule 83 (atom -> string .) + yacc.py:2687: in reduce using rule 83 (atom -> string .) + yacc.py:2687: else reduce using rule 83 (atom -> string .) + yacc.py:2687: pool reduce using rule 83 (atom -> string .) + yacc.py:2687: ccur reduce using rule 83 (atom -> string .) + yacc.py:2687: fi reduce using rule 83 (atom -> string .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 94 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar colon . type ocur expr ccur + yacc.py:2566: + yacc.py:2687: type shift and go to state 137 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 95 + yacc.py:2563: + yacc.py:2565: (33) param_list -> param comma param_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 33 (param_list -> param comma param_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 96 + yacc.py:2563: + yacc.py:2565: (35) param -> id colon type . + yacc.py:2566: + yacc.py:2687: comma reduce using rule 35 (param -> id colon type .) + yacc.py:2687: cpar reduce using rule 35 (param -> id colon type .) + yacc.py:2687: larrow reduce using rule 35 (param -> id colon type .) + yacc.py:2687: in reduce using rule 35 (param -> id colon type .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 97 + yacc.py:2563: + yacc.py:2565: (19) def_attr -> id colon type larrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 19 (def_attr -> id colon type larrow expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 98 + yacc.py:2563: + yacc.py:2565: (24) def_attr -> id colon type larrow error . + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: semi reduce using rule 24 (def_attr -> id colon type larrow error .) + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 99 + yacc.py:2563: + yacc.py:2565: (23) def_attr -> id colon error larrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 23 (def_attr -> id colon error larrow expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 100 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar colon . type ocur expr ccur + yacc.py:2565: (28) def_func -> id opar formals cpar colon . error ocur expr ccur + yacc.py:2565: (29) def_func -> id opar formals cpar colon . type ocur error ccur + yacc.py:2566: + yacc.py:2687: type shift and go to state 138 + yacc.py:2687: error shift and go to state 139 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 101 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar colon . type ocur expr ccur + yacc.py:2566: + yacc.py:2687: type shift and go to state 140 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 102 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 103 + yacc.py:2563: + yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list ccur error . + yacc.py:2566: + yacc.py:2687: error reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) + yacc.py:2687: class reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) + yacc.py:2687: $end reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 104 + yacc.py:2563: + yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 105 + yacc.py:2563: + yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 106 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 107 + yacc.py:2563: + yacc.py:2565: (86) block -> error . block + yacc.py:2565: (87) block -> error . semi + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: semi shift and go to state 142 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: block shift and go to state 141 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 108 + yacc.py:2563: + yacc.py:2565: (61) base_call -> error arroba . type dot func_call + yacc.py:2566: + yacc.py:2687: type shift and go to state 143 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 109 + yacc.py:2563: + yacc.py:2565: (78) atom -> error block . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 144 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 110 + yacc.py:2563: + yacc.py:2565: (90) func_call -> error opar . args cpar + yacc.py:2565: (64) factor -> opar . expr cpar + yacc.py:2565: (91) args -> . arg_list + yacc.py:2565: (92) args -> . arg_list_empty + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (96) arg_list_empty -> . epsilon + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 145 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: args shift and go to state 146 + yacc.py:2714: expr shift and go to state 147 + yacc.py:2714: arg_list shift and go to state 148 + yacc.py:2714: arg_list_empty shift and go to state 149 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: epsilon shift and go to state 150 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 111 + yacc.py:2563: + yacc.py:2565: (84) block -> expr . semi + yacc.py:2565: (85) block -> expr . semi block + yacc.py:2566: + yacc.py:2687: semi shift and go to state 151 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 112 + yacc.py:2563: + yacc.py:2565: (45) expr -> id larrow . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 152 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 113 + yacc.py:2563: + yacc.py:2565: (88) func_call -> id opar . args cpar + yacc.py:2565: (89) func_call -> id opar . error cpar + yacc.py:2565: (91) args -> . arg_list + yacc.py:2565: (92) args -> . arg_list_empty + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (96) arg_list_empty -> . epsilon + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 154 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: args shift and go to state 153 + yacc.py:2714: arg_list shift and go to state 148 + yacc.py:2714: arg_list_empty shift and go to state 149 + yacc.py:2714: expr shift and go to state 155 + yacc.py:2714: epsilon shift and go to state 150 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 114 + yacc.py:2563: + yacc.py:2565: (47) comp -> comp less . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: op shift and go to state 156 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 115 + yacc.py:2563: + yacc.py:2565: (48) comp -> comp lesseq . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: op shift and go to state 157 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 116 + yacc.py:2563: + yacc.py:2565: (49) comp -> comp equal . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: op shift and go to state 158 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 117 + yacc.py:2563: + yacc.py:2565: (51) op -> op plus . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: term shift and go to state 159 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 118 + yacc.py:2563: + yacc.py:2565: (52) op -> op minus . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: term shift and go to state 160 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 119 + yacc.py:2563: + yacc.py:2565: (54) term -> term star . base_call + yacc.py:2565: (57) term -> term star . error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 162 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 161 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 120 + yacc.py:2563: + yacc.py:2565: (55) term -> term div . base_call + yacc.py:2565: (58) term -> term div . error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 164 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 163 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 121 + yacc.py:2563: + yacc.py:2565: (59) base_call -> factor arroba . type dot func_call + yacc.py:2565: (62) base_call -> factor arroba . error dot func_call + yacc.py:2566: + yacc.py:2687: type shift and go to state 165 + yacc.py:2687: error shift and go to state 166 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 122 + yacc.py:2563: + yacc.py:2565: (65) factor -> factor dot . func_call + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 168 + yacc.py:2687: error shift and go to state 169 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 167 + yacc.py:2561: + yacc.py:2562:state 123 + yacc.py:2563: + yacc.py:2565: (64) factor -> opar expr . cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 170 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 124 + yacc.py:2563: + yacc.py:2565: (66) factor -> not expr . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 66 (factor -> not expr .) + yacc.py:2687: dot reduce using rule 66 (factor -> not expr .) + yacc.py:2687: star reduce using rule 66 (factor -> not expr .) + yacc.py:2687: div reduce using rule 66 (factor -> not expr .) + yacc.py:2687: plus reduce using rule 66 (factor -> not expr .) + yacc.py:2687: minus reduce using rule 66 (factor -> not expr .) + yacc.py:2687: less reduce using rule 66 (factor -> not expr .) + yacc.py:2687: lesseq reduce using rule 66 (factor -> not expr .) + yacc.py:2687: equal reduce using rule 66 (factor -> not expr .) + yacc.py:2687: semi reduce using rule 66 (factor -> not expr .) + yacc.py:2687: cpar reduce using rule 66 (factor -> not expr .) + yacc.py:2687: of reduce using rule 66 (factor -> not expr .) + yacc.py:2687: then reduce using rule 66 (factor -> not expr .) + yacc.py:2687: loop reduce using rule 66 (factor -> not expr .) + yacc.py:2687: comma reduce using rule 66 (factor -> not expr .) + yacc.py:2687: in reduce using rule 66 (factor -> not expr .) + yacc.py:2687: else reduce using rule 66 (factor -> not expr .) + yacc.py:2687: pool reduce using rule 66 (factor -> not expr .) + yacc.py:2687: ccur reduce using rule 66 (factor -> not expr .) + yacc.py:2687: fi reduce using rule 66 (factor -> not expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 125 + yacc.py:2563: + yacc.py:2565: (68) factor -> isvoid base_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: dot reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: star reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: div reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: plus reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: minus reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: less reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: lesseq reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: equal reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: semi reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: cpar reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: of reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: then reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: loop reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: comma reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: in reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: else reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: pool reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: ccur reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: fi reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 126 + yacc.py:2563: + yacc.py:2565: (75) atom -> id . + yacc.py:2565: (88) func_call -> id . opar args cpar + yacc.py:2565: (89) func_call -> id . opar error cpar + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 75 (atom -> id .) + yacc.py:2687: dot reduce using rule 75 (atom -> id .) + yacc.py:2687: star reduce using rule 75 (atom -> id .) + yacc.py:2687: div reduce using rule 75 (atom -> id .) + yacc.py:2687: plus reduce using rule 75 (atom -> id .) + yacc.py:2687: minus reduce using rule 75 (atom -> id .) + yacc.py:2687: less reduce using rule 75 (atom -> id .) + yacc.py:2687: lesseq reduce using rule 75 (atom -> id .) + yacc.py:2687: equal reduce using rule 75 (atom -> id .) + yacc.py:2687: semi reduce using rule 75 (atom -> id .) + yacc.py:2687: cpar reduce using rule 75 (atom -> id .) + yacc.py:2687: of reduce using rule 75 (atom -> id .) + yacc.py:2687: then reduce using rule 75 (atom -> id .) + yacc.py:2687: loop reduce using rule 75 (atom -> id .) + yacc.py:2687: comma reduce using rule 75 (atom -> id .) + yacc.py:2687: in reduce using rule 75 (atom -> id .) + yacc.py:2687: else reduce using rule 75 (atom -> id .) + yacc.py:2687: pool reduce using rule 75 (atom -> id .) + yacc.py:2687: ccur reduce using rule 75 (atom -> id .) + yacc.py:2687: fi reduce using rule 75 (atom -> id .) + yacc.py:2687: opar shift and go to state 113 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 127 + yacc.py:2563: + yacc.py:2565: (69) factor -> nox base_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: dot reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: star reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: div reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: plus reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: minus reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: less reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: lesseq reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: equal reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: semi reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: cpar reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: of reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: then reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: loop reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: comma reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: in reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: else reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: pool reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: ccur reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: fi reduce using rule 69 (factor -> nox base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 128 + yacc.py:2563: + yacc.py:2565: (70) factor -> let let_list . in expr + yacc.py:2566: + yacc.py:2687: in shift and go to state 171 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 129 + yacc.py:2563: + yacc.py:2565: (36) let_list -> let_assign . + yacc.py:2565: (37) let_list -> let_assign . comma let_list + yacc.py:2566: + yacc.py:2687: in reduce using rule 36 (let_list -> let_assign .) + yacc.py:2687: comma shift and go to state 172 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 130 + yacc.py:2563: + yacc.py:2565: (38) let_assign -> param . larrow expr + yacc.py:2565: (39) let_assign -> param . + yacc.py:2566: + yacc.py:2687: larrow shift and go to state 173 + yacc.py:2687: comma reduce using rule 39 (let_assign -> param .) + yacc.py:2687: in reduce using rule 39 (let_assign -> param .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 131 + yacc.py:2563: + yacc.py:2565: (71) factor -> case expr . of cases_list esac + yacc.py:2566: + yacc.py:2687: of shift and go to state 174 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 132 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr . then expr else expr fi + yacc.py:2566: + yacc.py:2687: then shift and go to state 175 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 133 + yacc.py:2563: + yacc.py:2565: (73) factor -> while expr . loop expr pool + yacc.py:2566: + yacc.py:2687: loop shift and go to state 176 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 134 + yacc.py:2563: + yacc.py:2565: (76) atom -> new type . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 76 (atom -> new type .) + yacc.py:2687: dot reduce using rule 76 (atom -> new type .) + yacc.py:2687: star reduce using rule 76 (atom -> new type .) + yacc.py:2687: div reduce using rule 76 (atom -> new type .) + yacc.py:2687: plus reduce using rule 76 (atom -> new type .) + yacc.py:2687: minus reduce using rule 76 (atom -> new type .) + yacc.py:2687: less reduce using rule 76 (atom -> new type .) + yacc.py:2687: lesseq reduce using rule 76 (atom -> new type .) + yacc.py:2687: equal reduce using rule 76 (atom -> new type .) + yacc.py:2687: semi reduce using rule 76 (atom -> new type .) + yacc.py:2687: cpar reduce using rule 76 (atom -> new type .) + yacc.py:2687: of reduce using rule 76 (atom -> new type .) + yacc.py:2687: then reduce using rule 76 (atom -> new type .) + yacc.py:2687: loop reduce using rule 76 (atom -> new type .) + yacc.py:2687: comma reduce using rule 76 (atom -> new type .) + yacc.py:2687: in reduce using rule 76 (atom -> new type .) + yacc.py:2687: else reduce using rule 76 (atom -> new type .) + yacc.py:2687: pool reduce using rule 76 (atom -> new type .) + yacc.py:2687: ccur reduce using rule 76 (atom -> new type .) + yacc.py:2687: fi reduce using rule 76 (atom -> new type .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 135 + yacc.py:2563: + yacc.py:2565: (77) atom -> ocur block . ccur + yacc.py:2565: (80) atom -> ocur block . error + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 177 + yacc.py:2687: error shift and go to state 178 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 136 + yacc.py:2563: + yacc.py:2565: (79) atom -> ocur error . ccur + yacc.py:2565: (86) block -> error . block + yacc.py:2565: (87) block -> error . semi + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 179 + yacc.py:2687: semi shift and go to state 142 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: block shift and go to state 141 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 137 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar colon type . ocur expr ccur + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 180 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 138 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar colon type . ocur expr ccur + yacc.py:2565: (29) def_func -> id opar formals cpar colon type . ocur error ccur + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 181 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 139 + yacc.py:2563: + yacc.py:2565: (28) def_func -> id opar formals cpar colon error . ocur expr ccur + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 182 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 140 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar colon type . ocur expr ccur + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 183 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 141 + yacc.py:2563: + yacc.py:2565: (86) block -> error block . + yacc.py:2565: (78) atom -> error block . ccur + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for ccur resolved as shift + yacc.py:2687: error reduce using rule 86 (block -> error block .) + yacc.py:2687: ccur shift and go to state 144 + yacc.py:2689: + yacc.py:2696: ! ccur [ reduce using rule 86 (block -> error block .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 142 + yacc.py:2563: + yacc.py:2565: (87) block -> error semi . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 87 (block -> error semi .) + yacc.py:2687: error reduce using rule 87 (block -> error semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 143 + yacc.py:2563: + yacc.py:2565: (61) base_call -> error arroba type . dot func_call + yacc.py:2566: + yacc.py:2687: dot shift and go to state 184 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 144 + yacc.py:2563: + yacc.py:2565: (78) atom -> error block ccur . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: dot reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: star reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: div reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: plus reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: minus reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: less reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: lesseq reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: equal reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: semi reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: cpar reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: of reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: then reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: loop reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: comma reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: in reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: else reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: pool reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: ccur reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: fi reduce using rule 78 (atom -> error block ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 145 + yacc.py:2563: + yacc.py:2565: (95) arg_list -> error . arg_list + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 185 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: arg_list shift and go to state 186 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 187 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 146 + yacc.py:2563: + yacc.py:2565: (90) func_call -> error opar args . cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 188 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 147 + yacc.py:2563: + yacc.py:2565: (64) factor -> opar expr . cpar + yacc.py:2565: (93) arg_list -> expr . + yacc.py:2565: (94) arg_list -> expr . comma arg_list + yacc.py:2566: + yacc.py:2609: ! shift/reduce conflict for cpar resolved as shift + yacc.py:2687: cpar shift and go to state 170 + yacc.py:2687: comma shift and go to state 189 + yacc.py:2689: + yacc.py:2696: ! cpar [ reduce using rule 93 (arg_list -> expr .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 148 + yacc.py:2563: + yacc.py:2565: (91) args -> arg_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 91 (args -> arg_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 149 + yacc.py:2563: + yacc.py:2565: (92) args -> arg_list_empty . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 92 (args -> arg_list_empty .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 150 + yacc.py:2563: + yacc.py:2565: (96) arg_list_empty -> epsilon . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 96 (arg_list_empty -> epsilon .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 151 + yacc.py:2563: + yacc.py:2565: (84) block -> expr semi . + yacc.py:2565: (85) block -> expr semi . block + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for error resolved as shift + yacc.py:2687: ccur reduce using rule 84 (block -> expr semi .) + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2696: ! error [ reduce using rule 84 (block -> expr semi .) ] + yacc.py:2700: + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: block shift and go to state 190 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 152 + yacc.py:2563: + yacc.py:2565: (45) expr -> id larrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: cpar reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: arroba reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: dot reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: star reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: div reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: plus reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: minus reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: less reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: lesseq reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: equal reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: of reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: then reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: loop reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: comma reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: in reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: else reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: pool reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: ccur reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: fi reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 153 + yacc.py:2563: + yacc.py:2565: (88) func_call -> id opar args . cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 191 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 154 + yacc.py:2563: + yacc.py:2565: (89) func_call -> id opar error . cpar + yacc.py:2565: (95) arg_list -> error . arg_list + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 192 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 185 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: arg_list shift and go to state 186 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 187 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 155 + yacc.py:2563: + yacc.py:2565: (93) arg_list -> expr . + yacc.py:2565: (94) arg_list -> expr . comma arg_list + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 93 (arg_list -> expr .) + yacc.py:2687: comma shift and go to state 189 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 156 + yacc.py:2563: + yacc.py:2565: (47) comp -> comp less op . + yacc.py:2565: (51) op -> op . plus term + yacc.py:2565: (52) op -> op . minus term + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for plus resolved as shift + yacc.py:2666: ! shift/reduce conflict for minus resolved as shift + yacc.py:2687: less reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: lesseq reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: equal reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: semi reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: cpar reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: arroba reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: dot reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: star reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: div reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: of reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: then reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: loop reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: comma reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: in reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: else reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: pool reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: ccur reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: fi reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: plus shift and go to state 117 + yacc.py:2687: minus shift and go to state 118 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 47 (comp -> comp less op .) ] + yacc.py:2696: ! minus [ reduce using rule 47 (comp -> comp less op .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 157 + yacc.py:2563: + yacc.py:2565: (48) comp -> comp lesseq op . + yacc.py:2565: (51) op -> op . plus term + yacc.py:2565: (52) op -> op . minus term + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for plus resolved as shift + yacc.py:2666: ! shift/reduce conflict for minus resolved as shift + yacc.py:2687: less reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: lesseq reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: equal reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: semi reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: cpar reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: arroba reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: dot reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: star reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: div reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: of reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: then reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: loop reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: comma reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: in reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: else reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: pool reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: ccur reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: fi reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: plus shift and go to state 117 + yacc.py:2687: minus shift and go to state 118 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 48 (comp -> comp lesseq op .) ] + yacc.py:2696: ! minus [ reduce using rule 48 (comp -> comp lesseq op .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 158 + yacc.py:2563: + yacc.py:2565: (49) comp -> comp equal op . + yacc.py:2565: (51) op -> op . plus term + yacc.py:2565: (52) op -> op . minus term + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for plus resolved as shift + yacc.py:2666: ! shift/reduce conflict for minus resolved as shift + yacc.py:2687: less reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: lesseq reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: equal reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: semi reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: cpar reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: arroba reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: dot reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: star reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: div reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: of reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: then reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: loop reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: comma reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: in reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: else reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: pool reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: ccur reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: fi reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: plus shift and go to state 117 + yacc.py:2687: minus shift and go to state 118 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 49 (comp -> comp equal op .) ] + yacc.py:2696: ! minus [ reduce using rule 49 (comp -> comp equal op .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 159 + yacc.py:2563: + yacc.py:2565: (51) op -> op plus term . + yacc.py:2565: (54) term -> term . star base_call + yacc.py:2565: (55) term -> term . div base_call + yacc.py:2565: (57) term -> term . star error + yacc.py:2565: (58) term -> term . div error + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for star resolved as shift + yacc.py:2666: ! shift/reduce conflict for div resolved as shift + yacc.py:2687: plus reduce using rule 51 (op -> op plus term .) + yacc.py:2687: minus reduce using rule 51 (op -> op plus term .) + yacc.py:2687: less reduce using rule 51 (op -> op plus term .) + yacc.py:2687: lesseq reduce using rule 51 (op -> op plus term .) + yacc.py:2687: equal reduce using rule 51 (op -> op plus term .) + yacc.py:2687: semi reduce using rule 51 (op -> op plus term .) + yacc.py:2687: cpar reduce using rule 51 (op -> op plus term .) + yacc.py:2687: arroba reduce using rule 51 (op -> op plus term .) + yacc.py:2687: dot reduce using rule 51 (op -> op plus term .) + yacc.py:2687: of reduce using rule 51 (op -> op plus term .) + yacc.py:2687: then reduce using rule 51 (op -> op plus term .) + yacc.py:2687: loop reduce using rule 51 (op -> op plus term .) + yacc.py:2687: comma reduce using rule 51 (op -> op plus term .) + yacc.py:2687: in reduce using rule 51 (op -> op plus term .) + yacc.py:2687: else reduce using rule 51 (op -> op plus term .) + yacc.py:2687: pool reduce using rule 51 (op -> op plus term .) + yacc.py:2687: ccur reduce using rule 51 (op -> op plus term .) + yacc.py:2687: fi reduce using rule 51 (op -> op plus term .) + yacc.py:2687: star shift and go to state 119 + yacc.py:2687: div shift and go to state 120 + yacc.py:2689: + yacc.py:2696: ! star [ reduce using rule 51 (op -> op plus term .) ] + yacc.py:2696: ! div [ reduce using rule 51 (op -> op plus term .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 160 + yacc.py:2563: + yacc.py:2565: (52) op -> op minus term . + yacc.py:2565: (54) term -> term . star base_call + yacc.py:2565: (55) term -> term . div base_call + yacc.py:2565: (57) term -> term . star error + yacc.py:2565: (58) term -> term . div error + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for star resolved as shift + yacc.py:2666: ! shift/reduce conflict for div resolved as shift + yacc.py:2687: plus reduce using rule 52 (op -> op minus term .) + yacc.py:2687: minus reduce using rule 52 (op -> op minus term .) + yacc.py:2687: less reduce using rule 52 (op -> op minus term .) + yacc.py:2687: lesseq reduce using rule 52 (op -> op minus term .) + yacc.py:2687: equal reduce using rule 52 (op -> op minus term .) + yacc.py:2687: semi reduce using rule 52 (op -> op minus term .) + yacc.py:2687: cpar reduce using rule 52 (op -> op minus term .) + yacc.py:2687: arroba reduce using rule 52 (op -> op minus term .) + yacc.py:2687: dot reduce using rule 52 (op -> op minus term .) + yacc.py:2687: of reduce using rule 52 (op -> op minus term .) + yacc.py:2687: then reduce using rule 52 (op -> op minus term .) + yacc.py:2687: loop reduce using rule 52 (op -> op minus term .) + yacc.py:2687: comma reduce using rule 52 (op -> op minus term .) + yacc.py:2687: in reduce using rule 52 (op -> op minus term .) + yacc.py:2687: else reduce using rule 52 (op -> op minus term .) + yacc.py:2687: pool reduce using rule 52 (op -> op minus term .) + yacc.py:2687: ccur reduce using rule 52 (op -> op minus term .) + yacc.py:2687: fi reduce using rule 52 (op -> op minus term .) + yacc.py:2687: star shift and go to state 119 + yacc.py:2687: div shift and go to state 120 + yacc.py:2689: + yacc.py:2696: ! star [ reduce using rule 52 (op -> op minus term .) ] + yacc.py:2696: ! div [ reduce using rule 52 (op -> op minus term .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 161 + yacc.py:2563: + yacc.py:2565: (54) term -> term star base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: div reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: plus reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: minus reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: less reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: lesseq reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: equal reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: semi reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: cpar reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: arroba reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: dot reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: of reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: then reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: loop reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: comma reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: in reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: else reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: pool reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: ccur reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: fi reduce using rule 54 (term -> term star base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 162 + yacc.py:2563: + yacc.py:2565: (57) term -> term star error . + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2687: star reduce using rule 57 (term -> term star error .) + yacc.py:2687: div reduce using rule 57 (term -> term star error .) + yacc.py:2687: plus reduce using rule 57 (term -> term star error .) + yacc.py:2687: minus reduce using rule 57 (term -> term star error .) + yacc.py:2687: less reduce using rule 57 (term -> term star error .) + yacc.py:2687: lesseq reduce using rule 57 (term -> term star error .) + yacc.py:2687: equal reduce using rule 57 (term -> term star error .) + yacc.py:2687: semi reduce using rule 57 (term -> term star error .) + yacc.py:2687: cpar reduce using rule 57 (term -> term star error .) + yacc.py:2687: dot reduce using rule 57 (term -> term star error .) + yacc.py:2687: of reduce using rule 57 (term -> term star error .) + yacc.py:2687: then reduce using rule 57 (term -> term star error .) + yacc.py:2687: loop reduce using rule 57 (term -> term star error .) + yacc.py:2687: comma reduce using rule 57 (term -> term star error .) + yacc.py:2687: in reduce using rule 57 (term -> term star error .) + yacc.py:2687: else reduce using rule 57 (term -> term star error .) + yacc.py:2687: pool reduce using rule 57 (term -> term star error .) + yacc.py:2687: ccur reduce using rule 57 (term -> term star error .) + yacc.py:2687: fi reduce using rule 57 (term -> term star error .) + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2696: ! arroba [ reduce using rule 57 (term -> term star error .) ] + yacc.py:2700: + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 163 + yacc.py:2563: + yacc.py:2565: (55) term -> term div base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: div reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: plus reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: minus reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: less reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: lesseq reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: equal reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: semi reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: cpar reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: arroba reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: dot reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: of reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: then reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: loop reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: comma reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: in reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: else reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: pool reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: ccur reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: fi reduce using rule 55 (term -> term div base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 164 + yacc.py:2563: + yacc.py:2565: (58) term -> term div error . + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2687: star reduce using rule 58 (term -> term div error .) + yacc.py:2687: div reduce using rule 58 (term -> term div error .) + yacc.py:2687: plus reduce using rule 58 (term -> term div error .) + yacc.py:2687: minus reduce using rule 58 (term -> term div error .) + yacc.py:2687: less reduce using rule 58 (term -> term div error .) + yacc.py:2687: lesseq reduce using rule 58 (term -> term div error .) + yacc.py:2687: equal reduce using rule 58 (term -> term div error .) + yacc.py:2687: semi reduce using rule 58 (term -> term div error .) + yacc.py:2687: cpar reduce using rule 58 (term -> term div error .) + yacc.py:2687: dot reduce using rule 58 (term -> term div error .) + yacc.py:2687: of reduce using rule 58 (term -> term div error .) + yacc.py:2687: then reduce using rule 58 (term -> term div error .) + yacc.py:2687: loop reduce using rule 58 (term -> term div error .) + yacc.py:2687: comma reduce using rule 58 (term -> term div error .) + yacc.py:2687: in reduce using rule 58 (term -> term div error .) + yacc.py:2687: else reduce using rule 58 (term -> term div error .) + yacc.py:2687: pool reduce using rule 58 (term -> term div error .) + yacc.py:2687: ccur reduce using rule 58 (term -> term div error .) + yacc.py:2687: fi reduce using rule 58 (term -> term div error .) + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2696: ! arroba [ reduce using rule 58 (term -> term div error .) ] + yacc.py:2700: + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 165 + yacc.py:2563: + yacc.py:2565: (59) base_call -> factor arroba type . dot func_call + yacc.py:2566: + yacc.py:2687: dot shift and go to state 193 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 166 + yacc.py:2563: + yacc.py:2565: (62) base_call -> factor arroba error . dot func_call + yacc.py:2566: + yacc.py:2687: dot shift and go to state 194 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 167 + yacc.py:2563: + yacc.py:2565: (65) factor -> factor dot func_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: dot reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: star reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: div reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: plus reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: minus reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: less reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: lesseq reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: equal reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: semi reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: cpar reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: of reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: then reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: loop reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: comma reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: in reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: else reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: pool reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: ccur reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: fi reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 168 + yacc.py:2563: + yacc.py:2565: (88) func_call -> id . opar args cpar + yacc.py:2565: (89) func_call -> id . opar error cpar + yacc.py:2566: + yacc.py:2687: opar shift and go to state 113 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 169 + yacc.py:2563: + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2566: + yacc.py:2687: opar shift and go to state 195 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 170 + yacc.py:2563: + yacc.py:2565: (64) factor -> opar expr cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: dot reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: star reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: div reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: plus reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: minus reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: less reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: lesseq reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: equal reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: semi reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: cpar reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: of reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: then reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: loop reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: comma reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: in reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: else reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: pool reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: ccur reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: fi reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 171 + yacc.py:2563: + yacc.py:2565: (70) factor -> let let_list in . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 196 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 172 + yacc.py:2563: + yacc.py:2565: (37) let_list -> let_assign comma . let_list + yacc.py:2565: (36) let_list -> . let_assign + yacc.py:2565: (37) let_list -> . let_assign comma let_list + yacc.py:2565: (38) let_assign -> . param larrow expr + yacc.py:2565: (39) let_assign -> . param + yacc.py:2565: (35) param -> . id colon type + yacc.py:2566: + yacc.py:2687: id shift and go to state 46 + yacc.py:2689: + yacc.py:2714: let_assign shift and go to state 129 + yacc.py:2714: let_list shift and go to state 197 + yacc.py:2714: param shift and go to state 130 + yacc.py:2561: + yacc.py:2562:state 173 + yacc.py:2563: + yacc.py:2565: (38) let_assign -> param larrow . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 198 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 174 + yacc.py:2563: + yacc.py:2565: (71) factor -> case expr of . cases_list esac + yacc.py:2565: (40) cases_list -> . casep semi + yacc.py:2565: (41) cases_list -> . casep semi cases_list + yacc.py:2565: (42) cases_list -> . error cases_list + yacc.py:2565: (43) cases_list -> . error semi + yacc.py:2565: (44) casep -> . id colon type rarrow expr + yacc.py:2566: + yacc.py:2687: error shift and go to state 201 + yacc.py:2687: id shift and go to state 202 + yacc.py:2689: + yacc.py:2714: cases_list shift and go to state 199 + yacc.py:2714: casep shift and go to state 200 + yacc.py:2561: + yacc.py:2562:state 175 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr then . expr else expr fi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 203 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 176 + yacc.py:2563: + yacc.py:2565: (73) factor -> while expr loop . expr pool + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 204 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 177 + yacc.py:2563: + yacc.py:2565: (77) atom -> ocur block ccur . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: dot reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: star reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: div reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: plus reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: minus reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: less reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: lesseq reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: equal reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: semi reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: cpar reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: of reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: then reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: loop reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: comma reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: in reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: else reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: pool reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: ccur reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: fi reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 178 + yacc.py:2563: + yacc.py:2565: (80) atom -> ocur block error . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: dot reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: star reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: div reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: plus reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: minus reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: less reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: lesseq reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: equal reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: semi reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: cpar reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: of reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: then reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: loop reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: comma reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: in reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: else reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: pool reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: ccur reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: fi reduce using rule 80 (atom -> ocur block error .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 179 + yacc.py:2563: + yacc.py:2565: (79) atom -> ocur error ccur . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: dot reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: star reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: div reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: plus reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: minus reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: less reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: lesseq reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: equal reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: semi reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: cpar reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: of reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: then reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: loop reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: comma reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: in reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: else reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: pool reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: ccur reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: fi reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 180 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur . expr ccur + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 205 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 181 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur . expr ccur + yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur . error ccur + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 207 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 206 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 182 + yacc.py:2563: + yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur . expr ccur + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 208 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 183 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur . expr ccur + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 209 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 184 + yacc.py:2563: + yacc.py:2565: (61) base_call -> error arroba type dot . func_call + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 168 + yacc.py:2687: error shift and go to state 169 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 210 + yacc.py:2561: + yacc.py:2562:state 185 + yacc.py:2563: + yacc.py:2565: (95) arg_list -> error . arg_list + yacc.py:2565: (86) block -> error . block + yacc.py:2565: (87) block -> error . semi + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: semi shift and go to state 142 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 185 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: arg_list shift and go to state 186 + yacc.py:2714: block shift and go to state 141 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: expr shift and go to state 187 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 186 + yacc.py:2563: + yacc.py:2565: (95) arg_list -> error arg_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 95 (arg_list -> error arg_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 187 + yacc.py:2563: + yacc.py:2565: (93) arg_list -> expr . + yacc.py:2565: (94) arg_list -> expr . comma arg_list + yacc.py:2565: (84) block -> expr . semi + yacc.py:2565: (85) block -> expr . semi block + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 93 (arg_list -> expr .) + yacc.py:2687: comma shift and go to state 189 + yacc.py:2687: semi shift and go to state 151 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 188 + yacc.py:2563: + yacc.py:2565: (90) func_call -> error opar args cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: dot reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: star reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: div reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: plus reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: minus reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: less reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: lesseq reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: equal reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: semi reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: cpar reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: of reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: then reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: loop reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: comma reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: in reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: else reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: pool reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: ccur reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: fi reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 189 + yacc.py:2563: + yacc.py:2565: (94) arg_list -> expr comma . arg_list + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 145 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 155 + yacc.py:2714: arg_list shift and go to state 211 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 190 + yacc.py:2563: + yacc.py:2565: (85) block -> expr semi block . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 85 (block -> expr semi block .) + yacc.py:2687: error reduce using rule 85 (block -> expr semi block .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 191 + yacc.py:2563: + yacc.py:2565: (88) func_call -> id opar args cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: dot reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: star reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: div reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: plus reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: minus reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: less reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: lesseq reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: equal reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: semi reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: cpar reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: of reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: then reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: loop reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: comma reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: in reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: else reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: pool reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: ccur reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: fi reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 192 + yacc.py:2563: + yacc.py:2565: (89) func_call -> id opar error cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: dot reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: star reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: div reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: plus reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: minus reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: less reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: lesseq reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: equal reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: semi reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: cpar reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: of reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: then reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: loop reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: comma reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: in reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: else reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: pool reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: ccur reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: fi reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 193 + yacc.py:2563: + yacc.py:2565: (59) base_call -> factor arroba type dot . func_call + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 168 + yacc.py:2687: error shift and go to state 169 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 212 + yacc.py:2561: + yacc.py:2562:state 194 + yacc.py:2563: + yacc.py:2565: (62) base_call -> factor arroba error dot . func_call + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 168 + yacc.py:2687: error shift and go to state 169 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 213 + yacc.py:2561: + yacc.py:2562:state 195 + yacc.py:2563: + yacc.py:2565: (90) func_call -> error opar . args cpar + yacc.py:2565: (91) args -> . arg_list + yacc.py:2565: (92) args -> . arg_list_empty + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (96) arg_list_empty -> . epsilon + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 145 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: args shift and go to state 146 + yacc.py:2714: arg_list shift and go to state 148 + yacc.py:2714: arg_list_empty shift and go to state 149 + yacc.py:2714: expr shift and go to state 155 + yacc.py:2714: epsilon shift and go to state 150 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 196 + yacc.py:2563: + yacc.py:2565: (70) factor -> let let_list in expr . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: dot reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: star reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: div reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: plus reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: minus reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: less reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: lesseq reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: equal reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: semi reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: cpar reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: of reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: then reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: loop reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: comma reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: in reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: else reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: pool reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: ccur reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: fi reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 197 + yacc.py:2563: + yacc.py:2565: (37) let_list -> let_assign comma let_list . + yacc.py:2566: + yacc.py:2687: in reduce using rule 37 (let_list -> let_assign comma let_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 198 + yacc.py:2563: + yacc.py:2565: (38) let_assign -> param larrow expr . + yacc.py:2566: + yacc.py:2687: comma reduce using rule 38 (let_assign -> param larrow expr .) + yacc.py:2687: in reduce using rule 38 (let_assign -> param larrow expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 199 + yacc.py:2563: + yacc.py:2565: (71) factor -> case expr of cases_list . esac + yacc.py:2566: + yacc.py:2687: esac shift and go to state 214 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 200 + yacc.py:2563: + yacc.py:2565: (40) cases_list -> casep . semi + yacc.py:2565: (41) cases_list -> casep . semi cases_list + yacc.py:2566: + yacc.py:2687: semi shift and go to state 215 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 201 + yacc.py:2563: + yacc.py:2565: (42) cases_list -> error . cases_list + yacc.py:2565: (43) cases_list -> error . semi + yacc.py:2565: (40) cases_list -> . casep semi + yacc.py:2565: (41) cases_list -> . casep semi cases_list + yacc.py:2565: (42) cases_list -> . error cases_list + yacc.py:2565: (43) cases_list -> . error semi + yacc.py:2565: (44) casep -> . id colon type rarrow expr + yacc.py:2566: + yacc.py:2687: semi shift and go to state 217 + yacc.py:2687: error shift and go to state 201 + yacc.py:2687: id shift and go to state 202 + yacc.py:2689: + yacc.py:2714: cases_list shift and go to state 216 + yacc.py:2714: casep shift and go to state 200 + yacc.py:2561: + yacc.py:2562:state 202 + yacc.py:2563: + yacc.py:2565: (44) casep -> id . colon type rarrow expr + yacc.py:2566: + yacc.py:2687: colon shift and go to state 218 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 203 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr then expr . else expr fi + yacc.py:2566: + yacc.py:2687: else shift and go to state 219 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 204 + yacc.py:2563: + yacc.py:2565: (73) factor -> while expr loop expr . pool + yacc.py:2566: + yacc.py:2687: pool shift and go to state 220 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 205 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 221 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 206 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 222 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 207 + yacc.py:2563: + yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur error . ccur + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 223 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 208 + yacc.py:2563: + yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 224 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 209 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 225 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 210 + yacc.py:2563: + yacc.py:2565: (61) base_call -> error arroba type dot func_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: div reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: plus reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: minus reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: less reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: lesseq reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: equal reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: semi reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: cpar reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: arroba reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: dot reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: of reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: then reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: loop reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: comma reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: in reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: else reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: pool reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: ccur reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: fi reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 211 + yacc.py:2563: + yacc.py:2565: (94) arg_list -> expr comma arg_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 94 (arg_list -> expr comma arg_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 212 + yacc.py:2563: + yacc.py:2565: (59) base_call -> factor arroba type dot func_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: div reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: plus reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: minus reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: less reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: lesseq reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: equal reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: semi reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: cpar reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: arroba reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: dot reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: of reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: then reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: loop reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: comma reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: in reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: else reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: pool reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: ccur reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: fi reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 213 + yacc.py:2563: + yacc.py:2565: (62) base_call -> factor arroba error dot func_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: div reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: plus reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: minus reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: less reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: lesseq reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: equal reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: semi reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: cpar reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: arroba reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: dot reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: of reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: then reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: loop reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: comma reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: in reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: else reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: pool reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: ccur reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: fi reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 214 + yacc.py:2563: + yacc.py:2565: (71) factor -> case expr of cases_list esac . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: dot reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: star reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: div reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: plus reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: minus reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: less reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: lesseq reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: equal reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: semi reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: cpar reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: of reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: then reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: loop reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: comma reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: in reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: else reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: pool reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: ccur reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: fi reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 215 + yacc.py:2563: + yacc.py:2565: (40) cases_list -> casep semi . + yacc.py:2565: (41) cases_list -> casep semi . cases_list + yacc.py:2565: (40) cases_list -> . casep semi + yacc.py:2565: (41) cases_list -> . casep semi cases_list + yacc.py:2565: (42) cases_list -> . error cases_list + yacc.py:2565: (43) cases_list -> . error semi + yacc.py:2565: (44) casep -> . id colon type rarrow expr + yacc.py:2566: + yacc.py:2687: esac reduce using rule 40 (cases_list -> casep semi .) + yacc.py:2687: error shift and go to state 201 + yacc.py:2687: id shift and go to state 202 + yacc.py:2689: + yacc.py:2714: casep shift and go to state 200 + yacc.py:2714: cases_list shift and go to state 226 + yacc.py:2561: + yacc.py:2562:state 216 + yacc.py:2563: + yacc.py:2565: (42) cases_list -> error cases_list . + yacc.py:2566: + yacc.py:2687: esac reduce using rule 42 (cases_list -> error cases_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 217 + yacc.py:2563: + yacc.py:2565: (43) cases_list -> error semi . + yacc.py:2566: + yacc.py:2687: esac reduce using rule 43 (cases_list -> error semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 218 + yacc.py:2563: + yacc.py:2565: (44) casep -> id colon . type rarrow expr + yacc.py:2566: + yacc.py:2687: type shift and go to state 227 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 219 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr then expr else . expr fi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 228 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 220 + yacc.py:2563: + yacc.py:2565: (73) factor -> while expr loop expr pool . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: dot reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: star reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: div reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: plus reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: minus reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: less reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: lesseq reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: equal reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: semi reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: cpar reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: of reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: then reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: loop reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: comma reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: in reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: else reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: pool reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: ccur reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: fi reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 221 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 26 (def_func -> error opar formals cpar colon type ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 222 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 25 (def_func -> id opar formals cpar colon type ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 223 + yacc.py:2563: + yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur error ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 29 (def_func -> id opar formals cpar colon type ocur error ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 224 + yacc.py:2563: + yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 28 (def_func -> id opar formals cpar colon error ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 225 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 27 (def_func -> id opar error cpar colon type ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 226 + yacc.py:2563: + yacc.py:2565: (41) cases_list -> casep semi cases_list . + yacc.py:2566: + yacc.py:2687: esac reduce using rule 41 (cases_list -> casep semi cases_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 227 + yacc.py:2563: + yacc.py:2565: (44) casep -> id colon type . rarrow expr + yacc.py:2566: + yacc.py:2687: rarrow shift and go to state 229 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 228 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr then expr else expr . fi + yacc.py:2566: + yacc.py:2687: fi shift and go to state 230 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 229 + yacc.py:2563: + yacc.py:2565: (44) casep -> id colon type rarrow . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 231 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 230 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr then expr else expr fi . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: dot reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: star reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: div reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: plus reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: minus reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: less reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: lesseq reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: equal reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: semi reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: cpar reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: of reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: then reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: loop reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: comma reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: in reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: else reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: pool reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: ccur reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: fi reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 231 + yacc.py:2563: + yacc.py:2565: (44) casep -> id colon type rarrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 44 (casep -> id colon type rarrow expr .) + yacc.py:2689: + yacc.py:3447:24 shift/reduce conflicts + yacc.py:3457: + yacc.py:3458:Conflicts: + yacc.py:3459: + yacc.py:3462:shift/reduce conflict for less in state 73 resolved as shift + yacc.py:3462:shift/reduce conflict for lesseq in state 73 resolved as shift + yacc.py:3462:shift/reduce conflict for equal in state 73 resolved as shift + yacc.py:3462:shift/reduce conflict for plus in state 74 resolved as shift + yacc.py:3462:shift/reduce conflict for minus in state 74 resolved as shift + yacc.py:3462:shift/reduce conflict for star in state 75 resolved as shift + yacc.py:3462:shift/reduce conflict for div in state 75 resolved as shift + yacc.py:3462:shift/reduce conflict for arroba in state 77 resolved as shift + yacc.py:3462:shift/reduce conflict for dot in state 77 resolved as shift + yacc.py:3462:shift/reduce conflict for ccur in state 141 resolved as shift + yacc.py:3462:shift/reduce conflict for cpar in state 147 resolved as shift + yacc.py:3462:shift/reduce conflict for error in state 151 resolved as shift + yacc.py:3462:shift/reduce conflict for plus in state 156 resolved as shift + yacc.py:3462:shift/reduce conflict for minus in state 156 resolved as shift + yacc.py:3462:shift/reduce conflict for plus in state 157 resolved as shift + yacc.py:3462:shift/reduce conflict for minus in state 157 resolved as shift + yacc.py:3462:shift/reduce conflict for plus in state 158 resolved as shift + yacc.py:3462:shift/reduce conflict for minus in state 158 resolved as shift + yacc.py:3462:shift/reduce conflict for star in state 159 resolved as shift + yacc.py:3462:shift/reduce conflict for div in state 159 resolved as shift + yacc.py:3462:shift/reduce conflict for star in state 160 resolved as shift + yacc.py:3462:shift/reduce conflict for div in state 160 resolved as shift + yacc.py:3462:shift/reduce conflict for arroba in state 162 resolved as shift + yacc.py:3462:shift/reduce conflict for arroba in state 164 resolved as shift + yacc.py: 362:PLY: PARSE DEBUG START + yacc.py: 410: + yacc.py: 411:State : 0 + yacc.py: 435:Stack : . LexToken(class,'class',1,0) + yacc.py: 445:Action : Shift and goto state 5 + yacc.py: 410: + yacc.py: 411:State : 5 + yacc.py: 435:Stack : class . LexToken(type,'Main',1,6) + yacc.py: 445:Action : Shift and goto state 8 + yacc.py: 410: + yacc.py: 411:State : 8 + yacc.py: 435:Stack : class type . LexToken(ocur,'{',1,11) + yacc.py: 445:Action : Shift and goto state 10 + yacc.py: 410: + yacc.py: 411:State : 10 + yacc.py: 435:Stack : class type ocur . LexToken(id,'main',3,18) + yacc.py: 445:Action : Shift and goto state 19 + yacc.py: 410: + yacc.py: 411:State : 19 + yacc.py: 435:Stack : class type ocur id . LexToken(opar,'(',3,22) + yacc.py: 445:Action : Shift and goto state 32 + yacc.py: 410: + yacc.py: 411:State : 32 + yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',3,23) + yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',3,23) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',3,23) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',3,23) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : class type ocur id opar formals cpar . LexToken(colon,':',3,24) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon . LexToken(type,'Object',3,26) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type . LexToken(ocur,'{',3,33) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur . LexToken(opar,'(',4,43) + yacc.py: 445:Action : Shift and goto state 80 + yacc.py: 410: + yacc.py: 411:State : 80 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar . LexToken(new,'new',4,44) + yacc.py: 445:Action : Shift and goto state 89 + yacc.py: 410: + yacc.py: 411:State : 89 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new . LexToken(type,'Alpha',4,48) + yacc.py: 445:Action : Shift and goto state 134 + yacc.py: 410: + yacc.py: 411:State : 134 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',4,53) + yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar epsilon . LexToken(cpar,')',4,61) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar arg_list_empty . LexToken(cpar,')',4,61) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args . LexToken(cpar,')',4,61) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args cpar . LexToken(ccur,'}',5,67) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['print','(',[],')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) + yacc.py: 410: + yacc.py: 411:State : 167 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot func_call . LexToken(ccur,'}',5,67) + yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 16 + yacc.py: 430:Defaulted state 16: Reduce using 14 + yacc.py: 435:Stack : class type ocur def_func semi epsilon . LexToken(ccur,'}',6,70) + yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 48 + yacc.py: 430:Defaulted state 48: Reduce using 16 + yacc.py: 435:Stack : class type ocur def_func semi feature_list . LexToken(ccur,'}',6,70) + yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['test1',':','Int'] and goto state 17 + yacc.py: 506:Result : ( id] with ['test3'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',12,146) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',12,146) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',12,146) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar . LexToken(colon,':',12,147) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon . LexToken(type,'Int',12,149) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',12,153) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur . LexToken(num,2.0,13,163) + yacc.py: 445:Action : Shift and goto state 88 + yacc.py: 410: + yacc.py: 411:State : 88 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur num . LexToken(minus,'-',13,165) + yacc.py: 471:Action : Reduce rule [atom -> num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 160 + yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( string] with ['1'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 + yacc.py: 506:Result : ( id colon type] with ['a',':','Alpha'] and goto state 44 + yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param . LexToken(comma,',',19,226) + yacc.py: 445:Action : Shift and goto state 60 + yacc.py: 410: + yacc.py: 411:State : 60 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma . LexToken(id,'b',19,228) + yacc.py: 445:Action : Shift and goto state 46 + yacc.py: 410: + yacc.py: 411:State : 46 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id . LexToken(colon,':',19,229) + yacc.py: 445:Action : Shift and goto state 61 + yacc.py: 410: + yacc.py: 411:State : 61 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon . LexToken(type,'Int',19,231) + yacc.py: 445:Action : Shift and goto state 96 + yacc.py: 410: + yacc.py: 411:State : 96 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon type . LexToken(cpar,')',19,234) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['b',':','Int'] and goto state 44 + yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param . LexToken(cpar,')',19,234) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 + yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) + yacc.py: 410: + yacc.py: 411:State : 95 + yacc.py: 430:Defaulted state 95: Reduce using 33 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param_list . LexToken(cpar,')',19,234) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 410: + yacc.py: 411:State : 42 + yacc.py: 430:Defaulted state 42: Reduce using 30 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param_list . LexToken(cpar,')',19,234) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals . LexToken(cpar,')',19,234) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar . LexToken(colon,':',19,235) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon . LexToken(type,'Int',19,237) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',19,241) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur . LexToken(let,'let',20,251) + yacc.py: 445:Action : Shift and goto state 84 + yacc.py: 410: + yacc.py: 411:State : 84 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let . LexToken(id,'count',20,255) + yacc.py: 445:Action : Shift and goto state 46 + yacc.py: 410: + yacc.py: 411:State : 46 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id . LexToken(colon,':',20,260) + yacc.py: 445:Action : Shift and goto state 61 + yacc.py: 410: + yacc.py: 411:State : 61 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon . LexToken(type,'Int',20,262) + yacc.py: 445:Action : Shift and goto state 96 + yacc.py: 410: + yacc.py: 411:State : 96 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon type . LexToken(comma,',',20,265) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['count',':','Int'] and goto state 130 + yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) + yacc.py: 410: + yacc.py: 411:State : 130 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let param . LexToken(comma,',',20,265) + yacc.py: 471:Action : Reduce rule [let_assign -> param] with [] and goto state 129 + yacc.py: 506:Result : ( id colon type] with ['pow',':','Int'] and goto state 130 + yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) + yacc.py: 410: + yacc.py: 411:State : 130 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param . LexToken(larrow,'<-',20,276) + yacc.py: 445:Action : Shift and goto state 173 + yacc.py: 410: + yacc.py: 411:State : 173 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow . LexToken(num,1.0,20,279) + yacc.py: 445:Action : Shift and goto state 88 + yacc.py: 410: + yacc.py: 411:State : 88 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow num . LexToken(in,'in',21,329) + yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 + yacc.py: 506:Result : ( let_assign] with [] and goto state 197 + yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 + yacc.py: 506:Result : ([ num] with [0.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 196 + yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',26,389) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',26,389) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',26,389) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar . LexToken(colon,':',26,390) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon . LexToken(type,'Int',26,392) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',26,396) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'testing2',27,406) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id . LexToken(opar,'(',27,414) + yacc.py: 445:Action : Shift and goto state 113 + yacc.py: 410: + yacc.py: 411:State : 113 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar . LexToken(new,'new',27,415) + yacc.py: 445:Action : Shift and goto state 89 + yacc.py: 410: + yacc.py: 411:State : 89 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new . LexToken(type,'Alpha',27,419) + yacc.py: 445:Action : Shift and goto state 134 + yacc.py: 410: + yacc.py: 411:State : 134 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new type . LexToken(comma,',',27,424) + yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',30,450) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',30,450) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',30,450) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',30,451) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'Int',30,453) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',30,457) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'test1',31,467) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(larrow,'<-',31,473) + yacc.py: 445:Action : Shift and goto state 112 + yacc.py: 410: + yacc.py: 411:State : 112 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow . LexToken(opar,'(',31,477) + yacc.py: 445:Action : Shift and goto state 80 + yacc.py: 410: + yacc.py: 411:State : 80 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar . LexToken(num,1.0,31,478) + yacc.py: 445:Action : Shift and goto state 88 + yacc.py: 410: + yacc.py: 411:State : 88 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar num . LexToken(plus,'+',31,480) + yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 16 + yacc.py: 430:Defaulted state 16: Reduce using 14 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',33,543) + yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 48 + yacc.py: 430:Defaulted state 48: Reduce using 16 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',33,543) + yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar epsilon . LexToken(cpar,')',37,601) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list_empty . LexToken(cpar,')',37,601) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',37,601) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar . LexToken(colon,':',37,603) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon . LexToken(type,'Object',37,605) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',37,612) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur . LexToken(id,'out_string',38,622) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id . LexToken(opar,'(',38,632) + yacc.py: 445:Action : Shift and goto state 113 + yacc.py: 410: + yacc.py: 411:State : 113 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id opar . LexToken(string,'reached!!\n',38,645) + yacc.py: 445:Action : Shift and goto state 93 + yacc.py: 410: + yacc.py: 411:State : 93 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id opar string . LexToken(cpar,')',38,646) + yacc.py: 471:Action : Reduce rule [atom -> string] with ['reached!!\n'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 16 + yacc.py: 430:Defaulted state 16: Reduce using 14 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi epsilon . LexToken(ccur,'}',40,655) + yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 48 + yacc.py: 430:Defaulted state 48: Reduce using 16 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi feature_list . LexToken(ccur,'}',40,655) + yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( program -Rule 1 program -> class_list -Rule 2 epsilon -> -Rule 3 class_list -> def_class class_list -Rule 4 class_list -> def_class -Rule 5 class_list -> error class_list -Rule 6 def_class -> class type ocur feature_list ccur semi -Rule 7 def_class -> class type inherits type ocur feature_list ccur semi -Rule 8 def_class -> class error ocur feature_list ccur semi -Rule 9 def_class -> class error inherits type ocur feature_list ccur semi -Rule 10 def_class -> class error inherits error ocur feature_list ccur semi -Rule 11 def_class -> class type inherits error ocur feature_list ccur semi -Rule 12 feature_list -> epsilon -Rule 13 feature_list -> def_attr semi feature_list -Rule 14 feature_list -> def_func semi feature_list -Rule 15 feature_list -> error feature_list -Rule 16 def_attr -> id colon type -Rule 17 def_attr -> id colon type larrow expr -Rule 18 def_attr -> error colon type -Rule 19 def_attr -> id colon error -Rule 20 def_attr -> error colon type larrow expr -Rule 21 def_attr -> id colon error larrow expr -Rule 22 def_attr -> id colon type larrow error -Rule 23 def_func -> id opar formals cpar colon type ocur expr ccur -Rule 24 def_func -> error opar formals cpar colon type ocur expr ccur -Rule 25 def_func -> id opar error cpar colon type ocur expr ccur -Rule 26 def_func -> id opar formals cpar colon error ocur expr ccur -Rule 27 def_func -> id opar formals cpar colon type ocur error ccur -Rule 28 formals -> param_list -Rule 29 formals -> param_list_empty -Rule 30 param_list -> param -Rule 31 param_list -> param comma param_list -Rule 32 param_list -> error param_list -Rule 33 param_list_empty -> epsilon -Rule 34 param -> id colon type -Rule 35 expr -> let let_list in expr -Rule 36 expr -> let error in expr -Rule 37 expr -> let let_list in error -Rule 38 expr -> case expr of cases_list esac -Rule 39 expr -> case error of cases_list esac -Rule 40 expr -> case expr of error esac -Rule 41 expr -> if expr then expr else expr fi -Rule 42 expr -> if error then expr else expr fi -Rule 43 expr -> if expr then error else expr fi -Rule 44 expr -> if expr then expr else error fi -Rule 45 expr -> while expr loop expr pool -Rule 46 expr -> while error loop expr pool -Rule 47 expr -> while expr loop error pool -Rule 48 expr -> while expr loop expr error -Rule 49 expr -> arith -Rule 50 let_list -> let_assign -Rule 51 let_list -> let_assign comma let_list -Rule 52 let_list -> error let_list -Rule 53 let_assign -> param larrow expr -Rule 54 let_assign -> param -Rule 55 cases_list -> casep semi -Rule 56 cases_list -> casep semi cases_list -Rule 57 cases_list -> error cases_list -Rule 58 casep -> id colon type rarrow expr -Rule 59 arith -> id larrow expr -Rule 60 arith -> not comp -Rule 61 arith -> comp -Rule 62 comp -> comp less op -Rule 63 comp -> comp lesseq op -Rule 64 comp -> comp equal op -Rule 65 comp -> op -Rule 66 op -> op plus term -Rule 67 op -> op minus term -Rule 68 op -> term -Rule 69 term -> term star base_call -Rule 70 term -> term div base_call -Rule 71 term -> isvoid base_call -Rule 72 term -> nox base_call -Rule 73 term -> base_call -Rule 74 base_call -> factor arroba type dot func_call -Rule 75 base_call -> factor -Rule 76 factor -> atom -Rule 77 factor -> opar expr cpar -Rule 78 factor -> factor dot func_call -Rule 79 factor -> func_call -Rule 80 atom -> num -Rule 81 atom -> id -Rule 82 atom -> new type -Rule 83 atom -> new error -Rule 84 atom -> ocur block ccur -Rule 85 atom -> true -Rule 86 atom -> false -Rule 87 atom -> string -Rule 88 block -> expr semi -Rule 89 block -> expr semi block -Rule 90 block -> error block -Rule 91 block -> error -Rule 92 func_call -> id opar args cpar -Rule 93 args -> arg_list -Rule 94 args -> arg_list_empty -Rule 95 arg_list -> expr -Rule 96 arg_list -> expr comma arg_list -Rule 97 arg_list -> error arg_list -Rule 98 arg_list_empty -> epsilon - -Terminals, with rules where they appear - -arroba : 74 -case : 38 39 40 -ccur : 6 7 8 9 10 11 23 24 25 26 27 84 -class : 6 7 8 9 10 11 -colon : 16 17 18 19 20 21 22 23 24 25 26 27 34 58 -comma : 31 51 96 -cpar : 23 24 25 26 27 77 92 -div : 70 -dot : 74 78 -else : 41 42 43 44 -equal : 64 -error : 5 8 9 10 10 11 15 18 19 20 21 22 24 25 26 27 32 36 37 39 40 42 43 44 46 47 48 52 57 83 90 91 97 -esac : 38 39 40 -false : 86 -fi : 41 42 43 44 -id : 16 17 19 21 22 23 25 26 27 34 58 59 81 92 -if : 41 42 43 44 -in : 35 36 37 -inherits : 7 9 10 11 -isvoid : 71 -larrow : 17 20 21 22 53 59 -less : 62 -lesseq : 63 -let : 35 36 37 -loop : 45 46 47 48 -minus : 67 -new : 82 83 -not : 60 -nox : 72 -num : 80 -ocur : 6 7 8 9 10 11 23 24 25 26 27 84 -of : 38 39 40 -opar : 23 24 25 26 27 77 92 -plus : 66 -pool : 45 46 47 -rarrow : 58 -semi : 6 7 8 9 10 11 13 14 55 56 88 89 -star : 69 -string : 87 -then : 41 42 43 44 -true : 85 -type : 6 7 7 9 11 16 17 18 20 22 23 24 25 27 34 58 74 82 -while : 45 46 47 48 - -Nonterminals, with rules where they appear - -arg_list : 93 96 97 -arg_list_empty : 94 -args : 92 -arith : 49 -atom : 76 -base_call : 69 70 71 72 73 -block : 84 89 90 -casep : 55 56 -cases_list : 38 39 56 57 -class_list : 1 3 5 -comp : 60 61 62 63 64 -def_attr : 13 -def_class : 3 4 -def_func : 14 -epsilon : 12 33 98 -expr : 17 20 21 23 24 25 26 35 36 38 40 41 41 41 42 42 43 43 44 44 45 45 46 47 48 48 53 58 59 77 88 89 95 96 -factor : 74 75 78 -feature_list : 6 7 8 9 10 11 13 14 15 -formals : 23 24 26 27 -func_call : 74 78 79 -let_assign : 50 51 -let_list : 35 37 51 52 -op : 62 63 64 65 66 67 -param : 30 31 53 54 -param_list : 28 31 32 -param_list_empty : 29 -program : 0 -term : 66 67 68 69 70 - -Parsing method: LALR - -state 0 - - (0) S' -> . program - (1) program -> . class_list - (3) class_list -> . def_class class_list - (4) class_list -> . def_class - (5) class_list -> . error class_list - (6) def_class -> . class type ocur feature_list ccur semi - (7) def_class -> . class type inherits type ocur feature_list ccur semi - (8) def_class -> . class error ocur feature_list ccur semi - (9) def_class -> . class error inherits type ocur feature_list ccur semi - (10) def_class -> . class error inherits error ocur feature_list ccur semi - (11) def_class -> . class type inherits error ocur feature_list ccur semi - - error shift and go to state 4 - class shift and go to state 5 - - program shift and go to state 1 - class_list shift and go to state 2 - def_class shift and go to state 3 - -state 1 - - (0) S' -> program . - - - -state 2 - - (1) program -> class_list . - - $end reduce using rule 1 (program -> class_list .) - - -state 3 - - (3) class_list -> def_class . class_list - (4) class_list -> def_class . - (3) class_list -> . def_class class_list - (4) class_list -> . def_class - (5) class_list -> . error class_list - (6) def_class -> . class type ocur feature_list ccur semi - (7) def_class -> . class type inherits type ocur feature_list ccur semi - (8) def_class -> . class error ocur feature_list ccur semi - (9) def_class -> . class error inherits type ocur feature_list ccur semi - (10) def_class -> . class error inherits error ocur feature_list ccur semi - (11) def_class -> . class type inherits error ocur feature_list ccur semi - - $end reduce using rule 4 (class_list -> def_class .) - error shift and go to state 4 - class shift and go to state 5 - - def_class shift and go to state 3 - class_list shift and go to state 6 - -state 4 - - (5) class_list -> error . class_list - (3) class_list -> . def_class class_list - (4) class_list -> . def_class - (5) class_list -> . error class_list - (6) def_class -> . class type ocur feature_list ccur semi - (7) def_class -> . class type inherits type ocur feature_list ccur semi - (8) def_class -> . class error ocur feature_list ccur semi - (9) def_class -> . class error inherits type ocur feature_list ccur semi - (10) def_class -> . class error inherits error ocur feature_list ccur semi - (11) def_class -> . class type inherits error ocur feature_list ccur semi - - error shift and go to state 4 - class shift and go to state 5 - - class_list shift and go to state 7 - def_class shift and go to state 3 - -state 5 - - (6) def_class -> class . type ocur feature_list ccur semi - (7) def_class -> class . type inherits type ocur feature_list ccur semi - (8) def_class -> class . error ocur feature_list ccur semi - (9) def_class -> class . error inherits type ocur feature_list ccur semi - (10) def_class -> class . error inherits error ocur feature_list ccur semi - (11) def_class -> class . type inherits error ocur feature_list ccur semi - - type shift and go to state 8 - error shift and go to state 9 - - -state 6 - - (3) class_list -> def_class class_list . - - $end reduce using rule 3 (class_list -> def_class class_list .) - - -state 7 - - (5) class_list -> error class_list . - - $end reduce using rule 5 (class_list -> error class_list .) - - -state 8 - - (6) def_class -> class type . ocur feature_list ccur semi - (7) def_class -> class type . inherits type ocur feature_list ccur semi - (11) def_class -> class type . inherits error ocur feature_list ccur semi - - ocur shift and go to state 10 - inherits shift and go to state 11 - - -state 9 - - (8) def_class -> class error . ocur feature_list ccur semi - (9) def_class -> class error . inherits type ocur feature_list ccur semi - (10) def_class -> class error . inherits error ocur feature_list ccur semi - - ocur shift and go to state 12 - inherits shift and go to state 13 - - -state 10 - - (6) def_class -> class type ocur . feature_list ccur semi - (12) feature_list -> . epsilon - (13) feature_list -> . def_attr semi feature_list - (14) feature_list -> . def_func semi feature_list - (15) feature_list -> . error feature_list - (2) epsilon -> . - (16) def_attr -> . id colon type - (17) def_attr -> . id colon type larrow expr - (18) def_attr -> . error colon type - (19) def_attr -> . id colon error - (20) def_attr -> . error colon type larrow expr - (21) def_attr -> . id colon error larrow expr - (22) def_attr -> . id colon type larrow error - (23) def_func -> . id opar formals cpar colon type ocur expr ccur - (24) def_func -> . error opar formals cpar colon type ocur expr ccur - (25) def_func -> . id opar error cpar colon type ocur expr ccur - (26) def_func -> . id opar formals cpar colon error ocur expr ccur - (27) def_func -> . id opar formals cpar colon type ocur error ccur - - error shift and go to state 18 - ccur reduce using rule 2 (epsilon -> .) - id shift and go to state 19 - - feature_list shift and go to state 14 - epsilon shift and go to state 15 - def_attr shift and go to state 16 - def_func shift and go to state 17 - -state 11 - - (7) def_class -> class type inherits . type ocur feature_list ccur semi - (11) def_class -> class type inherits . error ocur feature_list ccur semi - - type shift and go to state 20 - error shift and go to state 21 - - -state 12 - - (8) def_class -> class error ocur . feature_list ccur semi - (12) feature_list -> . epsilon - (13) feature_list -> . def_attr semi feature_list - (14) feature_list -> . def_func semi feature_list - (15) feature_list -> . error feature_list - (2) epsilon -> . - (16) def_attr -> . id colon type - (17) def_attr -> . id colon type larrow expr - (18) def_attr -> . error colon type - (19) def_attr -> . id colon error - (20) def_attr -> . error colon type larrow expr - (21) def_attr -> . id colon error larrow expr - (22) def_attr -> . id colon type larrow error - (23) def_func -> . id opar formals cpar colon type ocur expr ccur - (24) def_func -> . error opar formals cpar colon type ocur expr ccur - (25) def_func -> . id opar error cpar colon type ocur expr ccur - (26) def_func -> . id opar formals cpar colon error ocur expr ccur - (27) def_func -> . id opar formals cpar colon type ocur error ccur - - error shift and go to state 18 - ccur reduce using rule 2 (epsilon -> .) - id shift and go to state 19 - - feature_list shift and go to state 22 - epsilon shift and go to state 15 - def_attr shift and go to state 16 - def_func shift and go to state 17 - -state 13 - - (9) def_class -> class error inherits . type ocur feature_list ccur semi - (10) def_class -> class error inherits . error ocur feature_list ccur semi - - type shift and go to state 24 - error shift and go to state 23 - - -state 14 - - (6) def_class -> class type ocur feature_list . ccur semi - - ccur shift and go to state 25 - - -state 15 - - (12) feature_list -> epsilon . - - ccur reduce using rule 12 (feature_list -> epsilon .) - - -state 16 - - (13) feature_list -> def_attr . semi feature_list - - semi shift and go to state 26 - - -state 17 - - (14) feature_list -> def_func . semi feature_list - - semi shift and go to state 27 - - -state 18 - - (15) feature_list -> error . feature_list - (18) def_attr -> error . colon type - (20) def_attr -> error . colon type larrow expr - (24) def_func -> error . opar formals cpar colon type ocur expr ccur - (12) feature_list -> . epsilon - (13) feature_list -> . def_attr semi feature_list - (14) feature_list -> . def_func semi feature_list - (15) feature_list -> . error feature_list - (2) epsilon -> . - (16) def_attr -> . id colon type - (17) def_attr -> . id colon type larrow expr - (18) def_attr -> . error colon type - (19) def_attr -> . id colon error - (20) def_attr -> . error colon type larrow expr - (21) def_attr -> . id colon error larrow expr - (22) def_attr -> . id colon type larrow error - (23) def_func -> . id opar formals cpar colon type ocur expr ccur - (24) def_func -> . error opar formals cpar colon type ocur expr ccur - (25) def_func -> . id opar error cpar colon type ocur expr ccur - (26) def_func -> . id opar formals cpar colon error ocur expr ccur - (27) def_func -> . id opar formals cpar colon type ocur error ccur - - colon shift and go to state 29 - opar shift and go to state 30 - error shift and go to state 18 - ccur reduce using rule 2 (epsilon -> .) - id shift and go to state 19 - - feature_list shift and go to state 28 - epsilon shift and go to state 15 - def_attr shift and go to state 16 - def_func shift and go to state 17 - -state 19 - - (16) def_attr -> id . colon type - (17) def_attr -> id . colon type larrow expr - (19) def_attr -> id . colon error - (21) def_attr -> id . colon error larrow expr - (22) def_attr -> id . colon type larrow error - (23) def_func -> id . opar formals cpar colon type ocur expr ccur - (25) def_func -> id . opar error cpar colon type ocur expr ccur - (26) def_func -> id . opar formals cpar colon error ocur expr ccur - (27) def_func -> id . opar formals cpar colon type ocur error ccur - - colon shift and go to state 31 - opar shift and go to state 32 - - -state 20 - - (7) def_class -> class type inherits type . ocur feature_list ccur semi - - ocur shift and go to state 33 - - -state 21 - - (11) def_class -> class type inherits error . ocur feature_list ccur semi - - ocur shift and go to state 34 - - -state 22 - - (8) def_class -> class error ocur feature_list . ccur semi - - ccur shift and go to state 35 - - -state 23 - - (10) def_class -> class error inherits error . ocur feature_list ccur semi - - ocur shift and go to state 36 - - -state 24 - - (9) def_class -> class error inherits type . ocur feature_list ccur semi - - ocur shift and go to state 37 - - -state 25 - - (6) def_class -> class type ocur feature_list ccur . semi - - semi shift and go to state 38 - - -state 26 - - (13) feature_list -> def_attr semi . feature_list - (12) feature_list -> . epsilon - (13) feature_list -> . def_attr semi feature_list - (14) feature_list -> . def_func semi feature_list - (15) feature_list -> . error feature_list - (2) epsilon -> . - (16) def_attr -> . id colon type - (17) def_attr -> . id colon type larrow expr - (18) def_attr -> . error colon type - (19) def_attr -> . id colon error - (20) def_attr -> . error colon type larrow expr - (21) def_attr -> . id colon error larrow expr - (22) def_attr -> . id colon type larrow error - (23) def_func -> . id opar formals cpar colon type ocur expr ccur - (24) def_func -> . error opar formals cpar colon type ocur expr ccur - (25) def_func -> . id opar error cpar colon type ocur expr ccur - (26) def_func -> . id opar formals cpar colon error ocur expr ccur - (27) def_func -> . id opar formals cpar colon type ocur error ccur - - error shift and go to state 18 - ccur reduce using rule 2 (epsilon -> .) - id shift and go to state 19 - - def_attr shift and go to state 16 - feature_list shift and go to state 39 - epsilon shift and go to state 15 - def_func shift and go to state 17 - -state 27 - - (14) feature_list -> def_func semi . feature_list - (12) feature_list -> . epsilon - (13) feature_list -> . def_attr semi feature_list - (14) feature_list -> . def_func semi feature_list - (15) feature_list -> . error feature_list - (2) epsilon -> . - (16) def_attr -> . id colon type - (17) def_attr -> . id colon type larrow expr - (18) def_attr -> . error colon type - (19) def_attr -> . id colon error - (20) def_attr -> . error colon type larrow expr - (21) def_attr -> . id colon error larrow expr - (22) def_attr -> . id colon type larrow error - (23) def_func -> . id opar formals cpar colon type ocur expr ccur - (24) def_func -> . error opar formals cpar colon type ocur expr ccur - (25) def_func -> . id opar error cpar colon type ocur expr ccur - (26) def_func -> . id opar formals cpar colon error ocur expr ccur - (27) def_func -> . id opar formals cpar colon type ocur error ccur - - error shift and go to state 18 - ccur reduce using rule 2 (epsilon -> .) - id shift and go to state 19 - - def_func shift and go to state 17 - feature_list shift and go to state 40 - epsilon shift and go to state 15 - def_attr shift and go to state 16 - -state 28 - - (15) feature_list -> error feature_list . - - ccur reduce using rule 15 (feature_list -> error feature_list .) - - -state 29 - - (18) def_attr -> error colon . type - (20) def_attr -> error colon . type larrow expr - - type shift and go to state 41 - - -state 30 - - (24) def_func -> error opar . formals cpar colon type ocur expr ccur - (28) formals -> . param_list - (29) formals -> . param_list_empty - (30) param_list -> . param - (31) param_list -> . param comma param_list - (32) param_list -> . error param_list - (33) param_list_empty -> . epsilon - (34) param -> . id colon type - (2) epsilon -> . - - error shift and go to state 42 - id shift and go to state 48 - cpar reduce using rule 2 (epsilon -> .) - - formals shift and go to state 43 - param_list shift and go to state 44 - param_list_empty shift and go to state 45 - param shift and go to state 46 - epsilon shift and go to state 47 - -state 31 - - (16) def_attr -> id colon . type - (17) def_attr -> id colon . type larrow expr - (19) def_attr -> id colon . error - (21) def_attr -> id colon . error larrow expr - (22) def_attr -> id colon . type larrow error - - type shift and go to state 49 - error shift and go to state 50 - - -state 32 - - (23) def_func -> id opar . formals cpar colon type ocur expr ccur - (25) def_func -> id opar . error cpar colon type ocur expr ccur - (26) def_func -> id opar . formals cpar colon error ocur expr ccur - (27) def_func -> id opar . formals cpar colon type ocur error ccur - (28) formals -> . param_list - (29) formals -> . param_list_empty - (30) param_list -> . param - (31) param_list -> . param comma param_list - (32) param_list -> . error param_list - (33) param_list_empty -> . epsilon - (34) param -> . id colon type - (2) epsilon -> . - - error shift and go to state 52 - id shift and go to state 48 - cpar reduce using rule 2 (epsilon -> .) - - formals shift and go to state 51 - param_list shift and go to state 44 - param_list_empty shift and go to state 45 - param shift and go to state 46 - epsilon shift and go to state 47 - -state 33 - - (7) def_class -> class type inherits type ocur . feature_list ccur semi - (12) feature_list -> . epsilon - (13) feature_list -> . def_attr semi feature_list - (14) feature_list -> . def_func semi feature_list - (15) feature_list -> . error feature_list - (2) epsilon -> . - (16) def_attr -> . id colon type - (17) def_attr -> . id colon type larrow expr - (18) def_attr -> . error colon type - (19) def_attr -> . id colon error - (20) def_attr -> . error colon type larrow expr - (21) def_attr -> . id colon error larrow expr - (22) def_attr -> . id colon type larrow error - (23) def_func -> . id opar formals cpar colon type ocur expr ccur - (24) def_func -> . error opar formals cpar colon type ocur expr ccur - (25) def_func -> . id opar error cpar colon type ocur expr ccur - (26) def_func -> . id opar formals cpar colon error ocur expr ccur - (27) def_func -> . id opar formals cpar colon type ocur error ccur - - error shift and go to state 18 - ccur reduce using rule 2 (epsilon -> .) - id shift and go to state 19 - - feature_list shift and go to state 53 - epsilon shift and go to state 15 - def_attr shift and go to state 16 - def_func shift and go to state 17 - -state 34 - - (11) def_class -> class type inherits error ocur . feature_list ccur semi - (12) feature_list -> . epsilon - (13) feature_list -> . def_attr semi feature_list - (14) feature_list -> . def_func semi feature_list - (15) feature_list -> . error feature_list - (2) epsilon -> . - (16) def_attr -> . id colon type - (17) def_attr -> . id colon type larrow expr - (18) def_attr -> . error colon type - (19) def_attr -> . id colon error - (20) def_attr -> . error colon type larrow expr - (21) def_attr -> . id colon error larrow expr - (22) def_attr -> . id colon type larrow error - (23) def_func -> . id opar formals cpar colon type ocur expr ccur - (24) def_func -> . error opar formals cpar colon type ocur expr ccur - (25) def_func -> . id opar error cpar colon type ocur expr ccur - (26) def_func -> . id opar formals cpar colon error ocur expr ccur - (27) def_func -> . id opar formals cpar colon type ocur error ccur - - error shift and go to state 18 - ccur reduce using rule 2 (epsilon -> .) - id shift and go to state 19 - - feature_list shift and go to state 54 - epsilon shift and go to state 15 - def_attr shift and go to state 16 - def_func shift and go to state 17 - -state 35 - - (8) def_class -> class error ocur feature_list ccur . semi - - semi shift and go to state 55 - - -state 36 - - (10) def_class -> class error inherits error ocur . feature_list ccur semi - (12) feature_list -> . epsilon - (13) feature_list -> . def_attr semi feature_list - (14) feature_list -> . def_func semi feature_list - (15) feature_list -> . error feature_list - (2) epsilon -> . - (16) def_attr -> . id colon type - (17) def_attr -> . id colon type larrow expr - (18) def_attr -> . error colon type - (19) def_attr -> . id colon error - (20) def_attr -> . error colon type larrow expr - (21) def_attr -> . id colon error larrow expr - (22) def_attr -> . id colon type larrow error - (23) def_func -> . id opar formals cpar colon type ocur expr ccur - (24) def_func -> . error opar formals cpar colon type ocur expr ccur - (25) def_func -> . id opar error cpar colon type ocur expr ccur - (26) def_func -> . id opar formals cpar colon error ocur expr ccur - (27) def_func -> . id opar formals cpar colon type ocur error ccur - - error shift and go to state 18 - ccur reduce using rule 2 (epsilon -> .) - id shift and go to state 19 - - feature_list shift and go to state 56 - epsilon shift and go to state 15 - def_attr shift and go to state 16 - def_func shift and go to state 17 - -state 37 - - (9) def_class -> class error inherits type ocur . feature_list ccur semi - (12) feature_list -> . epsilon - (13) feature_list -> . def_attr semi feature_list - (14) feature_list -> . def_func semi feature_list - (15) feature_list -> . error feature_list - (2) epsilon -> . - (16) def_attr -> . id colon type - (17) def_attr -> . id colon type larrow expr - (18) def_attr -> . error colon type - (19) def_attr -> . id colon error - (20) def_attr -> . error colon type larrow expr - (21) def_attr -> . id colon error larrow expr - (22) def_attr -> . id colon type larrow error - (23) def_func -> . id opar formals cpar colon type ocur expr ccur - (24) def_func -> . error opar formals cpar colon type ocur expr ccur - (25) def_func -> . id opar error cpar colon type ocur expr ccur - (26) def_func -> . id opar formals cpar colon error ocur expr ccur - (27) def_func -> . id opar formals cpar colon type ocur error ccur - - error shift and go to state 18 - ccur reduce using rule 2 (epsilon -> .) - id shift and go to state 19 - - feature_list shift and go to state 57 - epsilon shift and go to state 15 - def_attr shift and go to state 16 - def_func shift and go to state 17 - -state 38 - - (6) def_class -> class type ocur feature_list ccur semi . - - error reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) - class reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) - $end reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) - - -state 39 - - (13) feature_list -> def_attr semi feature_list . - - ccur reduce using rule 13 (feature_list -> def_attr semi feature_list .) - - -state 40 - - (14) feature_list -> def_func semi feature_list . - - ccur reduce using rule 14 (feature_list -> def_func semi feature_list .) - - -state 41 - - (18) def_attr -> error colon type . - (20) def_attr -> error colon type . larrow expr - - semi reduce using rule 18 (def_attr -> error colon type .) - larrow shift and go to state 58 - - -state 42 - - (32) param_list -> error . param_list - (30) param_list -> . param - (31) param_list -> . param comma param_list - (32) param_list -> . error param_list - (34) param -> . id colon type - - error shift and go to state 42 - id shift and go to state 48 - - param_list shift and go to state 59 - param shift and go to state 46 - -state 43 - - (24) def_func -> error opar formals . cpar colon type ocur expr ccur - - cpar shift and go to state 60 - - -state 44 - - (28) formals -> param_list . - - cpar reduce using rule 28 (formals -> param_list .) - - -state 45 - - (29) formals -> param_list_empty . - - cpar reduce using rule 29 (formals -> param_list_empty .) - - -state 46 - - (30) param_list -> param . - (31) param_list -> param . comma param_list - - cpar reduce using rule 30 (param_list -> param .) - comma shift and go to state 61 - - -state 47 - - (33) param_list_empty -> epsilon . - - cpar reduce using rule 33 (param_list_empty -> epsilon .) - - -state 48 - - (34) param -> id . colon type - - colon shift and go to state 62 - - -state 49 - - (16) def_attr -> id colon type . - (17) def_attr -> id colon type . larrow expr - (22) def_attr -> id colon type . larrow error - - semi reduce using rule 16 (def_attr -> id colon type .) - larrow shift and go to state 63 - - -state 50 - - (19) def_attr -> id colon error . - (21) def_attr -> id colon error . larrow expr - - semi reduce using rule 19 (def_attr -> id colon error .) - larrow shift and go to state 64 - - -state 51 - - (23) def_func -> id opar formals . cpar colon type ocur expr ccur - (26) def_func -> id opar formals . cpar colon error ocur expr ccur - (27) def_func -> id opar formals . cpar colon type ocur error ccur - - cpar shift and go to state 65 - - -state 52 - - (25) def_func -> id opar error . cpar colon type ocur expr ccur - (32) param_list -> error . param_list - (30) param_list -> . param - (31) param_list -> . param comma param_list - (32) param_list -> . error param_list - (34) param -> . id colon type - - cpar shift and go to state 66 - error shift and go to state 42 - id shift and go to state 48 - - param_list shift and go to state 59 - param shift and go to state 46 - -state 53 - - (7) def_class -> class type inherits type ocur feature_list . ccur semi - - ccur shift and go to state 67 - - -state 54 - - (11) def_class -> class type inherits error ocur feature_list . ccur semi - - ccur shift and go to state 68 - - -state 55 - - (8) def_class -> class error ocur feature_list ccur semi . - - error reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) - class reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) - $end reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) - - -state 56 - - (10) def_class -> class error inherits error ocur feature_list . ccur semi - - ccur shift and go to state 69 - - -state 57 - - (9) def_class -> class error inherits type ocur feature_list . ccur semi - - ccur shift and go to state 70 - - -state 58 - - (20) def_attr -> error colon type larrow . expr - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 71 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 59 - - (32) param_list -> error param_list . - - cpar reduce using rule 32 (param_list -> error param_list .) - - -state 60 - - (24) def_func -> error opar formals cpar . colon type ocur expr ccur - - colon shift and go to state 95 - - -state 61 - - (31) param_list -> param comma . param_list - (30) param_list -> . param - (31) param_list -> . param comma param_list - (32) param_list -> . error param_list - (34) param -> . id colon type - - error shift and go to state 42 - id shift and go to state 48 - - param shift and go to state 46 - param_list shift and go to state 96 - -state 62 - - (34) param -> id colon . type - - type shift and go to state 97 - - -state 63 - - (17) def_attr -> id colon type larrow . expr - (22) def_attr -> id colon type larrow . error - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - error shift and go to state 99 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 98 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 64 - - (21) def_attr -> id colon error larrow . expr - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 100 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 65 - - (23) def_func -> id opar formals cpar . colon type ocur expr ccur - (26) def_func -> id opar formals cpar . colon error ocur expr ccur - (27) def_func -> id opar formals cpar . colon type ocur error ccur - - colon shift and go to state 101 - - -state 66 - - (25) def_func -> id opar error cpar . colon type ocur expr ccur - - colon shift and go to state 102 - - -state 67 - - (7) def_class -> class type inherits type ocur feature_list ccur . semi - - semi shift and go to state 103 - - -state 68 - - (11) def_class -> class type inherits error ocur feature_list ccur . semi - - semi shift and go to state 104 - - -state 69 - - (10) def_class -> class error inherits error ocur feature_list ccur . semi - - semi shift and go to state 105 - - -state 70 - - (9) def_class -> class error inherits type ocur feature_list ccur . semi - - semi shift and go to state 106 - - -state 71 - - (20) def_attr -> error colon type larrow expr . - - semi reduce using rule 20 (def_attr -> error colon type larrow expr .) - - -state 72 - - (35) expr -> let . let_list in expr - (36) expr -> let . error in expr - (37) expr -> let . let_list in error - (50) let_list -> . let_assign - (51) let_list -> . let_assign comma let_list - (52) let_list -> . error let_list - (53) let_assign -> . param larrow expr - (54) let_assign -> . param - (34) param -> . id colon type - - error shift and go to state 108 - id shift and go to state 48 - - let_list shift and go to state 107 - let_assign shift and go to state 109 - param shift and go to state 110 - -state 73 - - (38) expr -> case . expr of cases_list esac - (39) expr -> case . error of cases_list esac - (40) expr -> case . expr of error esac - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - error shift and go to state 112 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 111 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 74 - - (41) expr -> if . expr then expr else expr fi - (42) expr -> if . error then expr else expr fi - (43) expr -> if . expr then error else expr fi - (44) expr -> if . expr then expr else error fi - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - error shift and go to state 114 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 113 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 75 - - (45) expr -> while . expr loop expr pool - (46) expr -> while . error loop expr pool - (47) expr -> while . expr loop error pool - (48) expr -> while . expr loop expr error - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - error shift and go to state 116 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 115 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 76 - - (49) expr -> arith . - - semi reduce using rule 49 (expr -> arith .) - of reduce using rule 49 (expr -> arith .) - then reduce using rule 49 (expr -> arith .) - loop reduce using rule 49 (expr -> arith .) - cpar reduce using rule 49 (expr -> arith .) - comma reduce using rule 49 (expr -> arith .) - in reduce using rule 49 (expr -> arith .) - else reduce using rule 49 (expr -> arith .) - pool reduce using rule 49 (expr -> arith .) - error reduce using rule 49 (expr -> arith .) - ccur reduce using rule 49 (expr -> arith .) - fi reduce using rule 49 (expr -> arith .) - - -state 77 - - (59) arith -> id . larrow expr - (81) atom -> id . - (92) func_call -> id . opar args cpar - - larrow shift and go to state 117 - arroba reduce using rule 81 (atom -> id .) - dot reduce using rule 81 (atom -> id .) - star reduce using rule 81 (atom -> id .) - div reduce using rule 81 (atom -> id .) - plus reduce using rule 81 (atom -> id .) - minus reduce using rule 81 (atom -> id .) - less reduce using rule 81 (atom -> id .) - lesseq reduce using rule 81 (atom -> id .) - equal reduce using rule 81 (atom -> id .) - semi reduce using rule 81 (atom -> id .) - of reduce using rule 81 (atom -> id .) - then reduce using rule 81 (atom -> id .) - loop reduce using rule 81 (atom -> id .) - cpar reduce using rule 81 (atom -> id .) - comma reduce using rule 81 (atom -> id .) - in reduce using rule 81 (atom -> id .) - else reduce using rule 81 (atom -> id .) - pool reduce using rule 81 (atom -> id .) - error reduce using rule 81 (atom -> id .) - ccur reduce using rule 81 (atom -> id .) - fi reduce using rule 81 (atom -> id .) - opar shift and go to state 118 - - -state 78 - - (60) arith -> not . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - id shift and go to state 120 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - comp shift and go to state 119 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 79 - - (61) arith -> comp . - (62) comp -> comp . less op - (63) comp -> comp . lesseq op - (64) comp -> comp . equal op - - semi reduce using rule 61 (arith -> comp .) - of reduce using rule 61 (arith -> comp .) - then reduce using rule 61 (arith -> comp .) - loop reduce using rule 61 (arith -> comp .) - cpar reduce using rule 61 (arith -> comp .) - comma reduce using rule 61 (arith -> comp .) - in reduce using rule 61 (arith -> comp .) - else reduce using rule 61 (arith -> comp .) - pool reduce using rule 61 (arith -> comp .) - error reduce using rule 61 (arith -> comp .) - ccur reduce using rule 61 (arith -> comp .) - fi reduce using rule 61 (arith -> comp .) - less shift and go to state 121 - lesseq shift and go to state 122 - equal shift and go to state 123 - - -state 80 - - (65) comp -> op . - (66) op -> op . plus term - (67) op -> op . minus term - - less reduce using rule 65 (comp -> op .) - lesseq reduce using rule 65 (comp -> op .) - equal reduce using rule 65 (comp -> op .) - semi reduce using rule 65 (comp -> op .) - of reduce using rule 65 (comp -> op .) - then reduce using rule 65 (comp -> op .) - loop reduce using rule 65 (comp -> op .) - cpar reduce using rule 65 (comp -> op .) - comma reduce using rule 65 (comp -> op .) - in reduce using rule 65 (comp -> op .) - else reduce using rule 65 (comp -> op .) - pool reduce using rule 65 (comp -> op .) - error reduce using rule 65 (comp -> op .) - ccur reduce using rule 65 (comp -> op .) - fi reduce using rule 65 (comp -> op .) - plus shift and go to state 124 - minus shift and go to state 125 - - -state 81 - - (68) op -> term . - (69) term -> term . star base_call - (70) term -> term . div base_call - - plus reduce using rule 68 (op -> term .) - minus reduce using rule 68 (op -> term .) - less reduce using rule 68 (op -> term .) - lesseq reduce using rule 68 (op -> term .) - equal reduce using rule 68 (op -> term .) - semi reduce using rule 68 (op -> term .) - of reduce using rule 68 (op -> term .) - then reduce using rule 68 (op -> term .) - loop reduce using rule 68 (op -> term .) - cpar reduce using rule 68 (op -> term .) - comma reduce using rule 68 (op -> term .) - in reduce using rule 68 (op -> term .) - else reduce using rule 68 (op -> term .) - pool reduce using rule 68 (op -> term .) - error reduce using rule 68 (op -> term .) - ccur reduce using rule 68 (op -> term .) - fi reduce using rule 68 (op -> term .) - star shift and go to state 126 - div shift and go to state 127 - - -state 82 - - (73) term -> base_call . - - star reduce using rule 73 (term -> base_call .) - div reduce using rule 73 (term -> base_call .) - plus reduce using rule 73 (term -> base_call .) - minus reduce using rule 73 (term -> base_call .) - less reduce using rule 73 (term -> base_call .) - lesseq reduce using rule 73 (term -> base_call .) - equal reduce using rule 73 (term -> base_call .) - semi reduce using rule 73 (term -> base_call .) - of reduce using rule 73 (term -> base_call .) - then reduce using rule 73 (term -> base_call .) - loop reduce using rule 73 (term -> base_call .) - cpar reduce using rule 73 (term -> base_call .) - comma reduce using rule 73 (term -> base_call .) - in reduce using rule 73 (term -> base_call .) - else reduce using rule 73 (term -> base_call .) - pool reduce using rule 73 (term -> base_call .) - error reduce using rule 73 (term -> base_call .) - ccur reduce using rule 73 (term -> base_call .) - fi reduce using rule 73 (term -> base_call .) - - -state 83 - - (71) term -> isvoid . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - opar shift and go to state 88 - num shift and go to state 89 - id shift and go to state 120 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - base_call shift and go to state 128 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 84 - - (72) term -> nox . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - opar shift and go to state 88 - num shift and go to state 89 - id shift and go to state 120 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - base_call shift and go to state 129 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 85 - - (74) base_call -> factor . arroba type dot func_call - (75) base_call -> factor . - (78) factor -> factor . dot func_call - - arroba shift and go to state 130 - star reduce using rule 75 (base_call -> factor .) - div reduce using rule 75 (base_call -> factor .) - plus reduce using rule 75 (base_call -> factor .) - minus reduce using rule 75 (base_call -> factor .) - less reduce using rule 75 (base_call -> factor .) - lesseq reduce using rule 75 (base_call -> factor .) - equal reduce using rule 75 (base_call -> factor .) - semi reduce using rule 75 (base_call -> factor .) - of reduce using rule 75 (base_call -> factor .) - then reduce using rule 75 (base_call -> factor .) - loop reduce using rule 75 (base_call -> factor .) - cpar reduce using rule 75 (base_call -> factor .) - comma reduce using rule 75 (base_call -> factor .) - in reduce using rule 75 (base_call -> factor .) - else reduce using rule 75 (base_call -> factor .) - pool reduce using rule 75 (base_call -> factor .) - error reduce using rule 75 (base_call -> factor .) - ccur reduce using rule 75 (base_call -> factor .) - fi reduce using rule 75 (base_call -> factor .) - dot shift and go to state 131 - - -state 86 - - (79) factor -> func_call . - - arroba reduce using rule 79 (factor -> func_call .) - dot reduce using rule 79 (factor -> func_call .) - star reduce using rule 79 (factor -> func_call .) - div reduce using rule 79 (factor -> func_call .) - plus reduce using rule 79 (factor -> func_call .) - minus reduce using rule 79 (factor -> func_call .) - less reduce using rule 79 (factor -> func_call .) - lesseq reduce using rule 79 (factor -> func_call .) - equal reduce using rule 79 (factor -> func_call .) - semi reduce using rule 79 (factor -> func_call .) - of reduce using rule 79 (factor -> func_call .) - then reduce using rule 79 (factor -> func_call .) - loop reduce using rule 79 (factor -> func_call .) - cpar reduce using rule 79 (factor -> func_call .) - comma reduce using rule 79 (factor -> func_call .) - in reduce using rule 79 (factor -> func_call .) - else reduce using rule 79 (factor -> func_call .) - pool reduce using rule 79 (factor -> func_call .) - error reduce using rule 79 (factor -> func_call .) - ccur reduce using rule 79 (factor -> func_call .) - fi reduce using rule 79 (factor -> func_call .) - - -state 87 - - (76) factor -> atom . - - arroba reduce using rule 76 (factor -> atom .) - dot reduce using rule 76 (factor -> atom .) - star reduce using rule 76 (factor -> atom .) - div reduce using rule 76 (factor -> atom .) - plus reduce using rule 76 (factor -> atom .) - minus reduce using rule 76 (factor -> atom .) - less reduce using rule 76 (factor -> atom .) - lesseq reduce using rule 76 (factor -> atom .) - equal reduce using rule 76 (factor -> atom .) - semi reduce using rule 76 (factor -> atom .) - of reduce using rule 76 (factor -> atom .) - then reduce using rule 76 (factor -> atom .) - loop reduce using rule 76 (factor -> atom .) - cpar reduce using rule 76 (factor -> atom .) - comma reduce using rule 76 (factor -> atom .) - in reduce using rule 76 (factor -> atom .) - else reduce using rule 76 (factor -> atom .) - pool reduce using rule 76 (factor -> atom .) - error reduce using rule 76 (factor -> atom .) - ccur reduce using rule 76 (factor -> atom .) - fi reduce using rule 76 (factor -> atom .) - - -state 88 - - (77) factor -> opar . expr cpar - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 132 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 89 - - (80) atom -> num . - - arroba reduce using rule 80 (atom -> num .) - dot reduce using rule 80 (atom -> num .) - star reduce using rule 80 (atom -> num .) - div reduce using rule 80 (atom -> num .) - plus reduce using rule 80 (atom -> num .) - minus reduce using rule 80 (atom -> num .) - less reduce using rule 80 (atom -> num .) - lesseq reduce using rule 80 (atom -> num .) - equal reduce using rule 80 (atom -> num .) - semi reduce using rule 80 (atom -> num .) - of reduce using rule 80 (atom -> num .) - then reduce using rule 80 (atom -> num .) - loop reduce using rule 80 (atom -> num .) - cpar reduce using rule 80 (atom -> num .) - comma reduce using rule 80 (atom -> num .) - in reduce using rule 80 (atom -> num .) - else reduce using rule 80 (atom -> num .) - pool reduce using rule 80 (atom -> num .) - error reduce using rule 80 (atom -> num .) - ccur reduce using rule 80 (atom -> num .) - fi reduce using rule 80 (atom -> num .) - - -state 90 - - (82) atom -> new . type - (83) atom -> new . error - - type shift and go to state 133 - error shift and go to state 134 - - -state 91 - - (84) atom -> ocur . block ccur - (88) block -> . expr semi - (89) block -> . expr semi block - (90) block -> . error block - (91) block -> . error - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - error shift and go to state 137 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - block shift and go to state 135 - expr shift and go to state 136 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 92 - - (85) atom -> true . - - arroba reduce using rule 85 (atom -> true .) - dot reduce using rule 85 (atom -> true .) - star reduce using rule 85 (atom -> true .) - div reduce using rule 85 (atom -> true .) - plus reduce using rule 85 (atom -> true .) - minus reduce using rule 85 (atom -> true .) - less reduce using rule 85 (atom -> true .) - lesseq reduce using rule 85 (atom -> true .) - equal reduce using rule 85 (atom -> true .) - semi reduce using rule 85 (atom -> true .) - of reduce using rule 85 (atom -> true .) - then reduce using rule 85 (atom -> true .) - loop reduce using rule 85 (atom -> true .) - cpar reduce using rule 85 (atom -> true .) - comma reduce using rule 85 (atom -> true .) - in reduce using rule 85 (atom -> true .) - else reduce using rule 85 (atom -> true .) - pool reduce using rule 85 (atom -> true .) - error reduce using rule 85 (atom -> true .) - ccur reduce using rule 85 (atom -> true .) - fi reduce using rule 85 (atom -> true .) - - -state 93 - - (86) atom -> false . - - arroba reduce using rule 86 (atom -> false .) - dot reduce using rule 86 (atom -> false .) - star reduce using rule 86 (atom -> false .) - div reduce using rule 86 (atom -> false .) - plus reduce using rule 86 (atom -> false .) - minus reduce using rule 86 (atom -> false .) - less reduce using rule 86 (atom -> false .) - lesseq reduce using rule 86 (atom -> false .) - equal reduce using rule 86 (atom -> false .) - semi reduce using rule 86 (atom -> false .) - of reduce using rule 86 (atom -> false .) - then reduce using rule 86 (atom -> false .) - loop reduce using rule 86 (atom -> false .) - cpar reduce using rule 86 (atom -> false .) - comma reduce using rule 86 (atom -> false .) - in reduce using rule 86 (atom -> false .) - else reduce using rule 86 (atom -> false .) - pool reduce using rule 86 (atom -> false .) - error reduce using rule 86 (atom -> false .) - ccur reduce using rule 86 (atom -> false .) - fi reduce using rule 86 (atom -> false .) - - -state 94 - - (87) atom -> string . - - arroba reduce using rule 87 (atom -> string .) - dot reduce using rule 87 (atom -> string .) - star reduce using rule 87 (atom -> string .) - div reduce using rule 87 (atom -> string .) - plus reduce using rule 87 (atom -> string .) - minus reduce using rule 87 (atom -> string .) - less reduce using rule 87 (atom -> string .) - lesseq reduce using rule 87 (atom -> string .) - equal reduce using rule 87 (atom -> string .) - semi reduce using rule 87 (atom -> string .) - of reduce using rule 87 (atom -> string .) - then reduce using rule 87 (atom -> string .) - loop reduce using rule 87 (atom -> string .) - cpar reduce using rule 87 (atom -> string .) - comma reduce using rule 87 (atom -> string .) - in reduce using rule 87 (atom -> string .) - else reduce using rule 87 (atom -> string .) - pool reduce using rule 87 (atom -> string .) - error reduce using rule 87 (atom -> string .) - ccur reduce using rule 87 (atom -> string .) - fi reduce using rule 87 (atom -> string .) - - -state 95 - - (24) def_func -> error opar formals cpar colon . type ocur expr ccur - - type shift and go to state 138 - - -state 96 - - (31) param_list -> param comma param_list . - - cpar reduce using rule 31 (param_list -> param comma param_list .) - - -state 97 - - (34) param -> id colon type . - - comma reduce using rule 34 (param -> id colon type .) - cpar reduce using rule 34 (param -> id colon type .) - larrow reduce using rule 34 (param -> id colon type .) - in reduce using rule 34 (param -> id colon type .) - - -state 98 - - (17) def_attr -> id colon type larrow expr . - - semi reduce using rule 17 (def_attr -> id colon type larrow expr .) - - -state 99 - - (22) def_attr -> id colon type larrow error . - - semi reduce using rule 22 (def_attr -> id colon type larrow error .) - - -state 100 - - (21) def_attr -> id colon error larrow expr . - - semi reduce using rule 21 (def_attr -> id colon error larrow expr .) - - -state 101 - - (23) def_func -> id opar formals cpar colon . type ocur expr ccur - (26) def_func -> id opar formals cpar colon . error ocur expr ccur - (27) def_func -> id opar formals cpar colon . type ocur error ccur - - type shift and go to state 139 - error shift and go to state 140 - - -state 102 - - (25) def_func -> id opar error cpar colon . type ocur expr ccur - - type shift and go to state 141 - - -state 103 - - (7) def_class -> class type inherits type ocur feature_list ccur semi . - - error reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) - class reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) - $end reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) - - -state 104 - - (11) def_class -> class type inherits error ocur feature_list ccur semi . - - error reduce using rule 11 (def_class -> class type inherits error ocur feature_list ccur semi .) - class reduce using rule 11 (def_class -> class type inherits error ocur feature_list ccur semi .) - $end reduce using rule 11 (def_class -> class type inherits error ocur feature_list ccur semi .) - - -state 105 - - (10) def_class -> class error inherits error ocur feature_list ccur semi . - - error reduce using rule 10 (def_class -> class error inherits error ocur feature_list ccur semi .) - class reduce using rule 10 (def_class -> class error inherits error ocur feature_list ccur semi .) - $end reduce using rule 10 (def_class -> class error inherits error ocur feature_list ccur semi .) - - -state 106 - - (9) def_class -> class error inherits type ocur feature_list ccur semi . - - error reduce using rule 9 (def_class -> class error inherits type ocur feature_list ccur semi .) - class reduce using rule 9 (def_class -> class error inherits type ocur feature_list ccur semi .) - $end reduce using rule 9 (def_class -> class error inherits type ocur feature_list ccur semi .) - - -state 107 - - (35) expr -> let let_list . in expr - (37) expr -> let let_list . in error - - in shift and go to state 142 - - -state 108 - - (36) expr -> let error . in expr - (52) let_list -> error . let_list - (50) let_list -> . let_assign - (51) let_list -> . let_assign comma let_list - (52) let_list -> . error let_list - (53) let_assign -> . param larrow expr - (54) let_assign -> . param - (34) param -> . id colon type - - in shift and go to state 144 - error shift and go to state 143 - id shift and go to state 48 - - let_list shift and go to state 145 - let_assign shift and go to state 109 - param shift and go to state 110 - -state 109 - - (50) let_list -> let_assign . - (51) let_list -> let_assign . comma let_list - - in reduce using rule 50 (let_list -> let_assign .) - comma shift and go to state 146 - - -state 110 - - (53) let_assign -> param . larrow expr - (54) let_assign -> param . - - larrow shift and go to state 147 - comma reduce using rule 54 (let_assign -> param .) - in reduce using rule 54 (let_assign -> param .) - - -state 111 - - (38) expr -> case expr . of cases_list esac - (40) expr -> case expr . of error esac - - of shift and go to state 148 - - -state 112 - - (39) expr -> case error . of cases_list esac - - of shift and go to state 149 - - -state 113 - - (41) expr -> if expr . then expr else expr fi - (43) expr -> if expr . then error else expr fi - (44) expr -> if expr . then expr else error fi - - then shift and go to state 150 - - -state 114 - - (42) expr -> if error . then expr else expr fi - - then shift and go to state 151 - - -state 115 - - (45) expr -> while expr . loop expr pool - (47) expr -> while expr . loop error pool - (48) expr -> while expr . loop expr error - - loop shift and go to state 152 - - -state 116 - - (46) expr -> while error . loop expr pool - - loop shift and go to state 153 - - -state 117 - - (59) arith -> id larrow . expr - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 154 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 118 - - (92) func_call -> id opar . args cpar - (93) args -> . arg_list - (94) args -> . arg_list_empty - (95) arg_list -> . expr - (96) arg_list -> . expr comma arg_list - (97) arg_list -> . error arg_list - (98) arg_list_empty -> . epsilon - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (2) epsilon -> . - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - error shift and go to state 159 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - cpar reduce using rule 2 (epsilon -> .) - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - args shift and go to state 155 - arg_list shift and go to state 156 - arg_list_empty shift and go to state 157 - expr shift and go to state 158 - epsilon shift and go to state 160 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 119 - - (60) arith -> not comp . - (62) comp -> comp . less op - (63) comp -> comp . lesseq op - (64) comp -> comp . equal op - - semi reduce using rule 60 (arith -> not comp .) - of reduce using rule 60 (arith -> not comp .) - then reduce using rule 60 (arith -> not comp .) - loop reduce using rule 60 (arith -> not comp .) - cpar reduce using rule 60 (arith -> not comp .) - comma reduce using rule 60 (arith -> not comp .) - in reduce using rule 60 (arith -> not comp .) - else reduce using rule 60 (arith -> not comp .) - pool reduce using rule 60 (arith -> not comp .) - error reduce using rule 60 (arith -> not comp .) - ccur reduce using rule 60 (arith -> not comp .) - fi reduce using rule 60 (arith -> not comp .) - less shift and go to state 121 - lesseq shift and go to state 122 - equal shift and go to state 123 - - -state 120 - - (81) atom -> id . - (92) func_call -> id . opar args cpar - - arroba reduce using rule 81 (atom -> id .) - dot reduce using rule 81 (atom -> id .) - star reduce using rule 81 (atom -> id .) - div reduce using rule 81 (atom -> id .) - plus reduce using rule 81 (atom -> id .) - minus reduce using rule 81 (atom -> id .) - less reduce using rule 81 (atom -> id .) - lesseq reduce using rule 81 (atom -> id .) - equal reduce using rule 81 (atom -> id .) - semi reduce using rule 81 (atom -> id .) - of reduce using rule 81 (atom -> id .) - then reduce using rule 81 (atom -> id .) - loop reduce using rule 81 (atom -> id .) - cpar reduce using rule 81 (atom -> id .) - comma reduce using rule 81 (atom -> id .) - in reduce using rule 81 (atom -> id .) - else reduce using rule 81 (atom -> id .) - pool reduce using rule 81 (atom -> id .) - error reduce using rule 81 (atom -> id .) - ccur reduce using rule 81 (atom -> id .) - fi reduce using rule 81 (atom -> id .) - opar shift and go to state 118 - - -state 121 - - (62) comp -> comp less . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - id shift and go to state 120 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - op shift and go to state 161 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 122 - - (63) comp -> comp lesseq . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - id shift and go to state 120 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - op shift and go to state 162 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 123 - - (64) comp -> comp equal . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - id shift and go to state 120 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - op shift and go to state 163 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 124 - - (66) op -> op plus . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - id shift and go to state 120 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - term shift and go to state 164 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 125 - - (67) op -> op minus . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - id shift and go to state 120 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - term shift and go to state 165 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 126 - - (69) term -> term star . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - opar shift and go to state 88 - num shift and go to state 89 - id shift and go to state 120 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - base_call shift and go to state 166 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 127 - - (70) term -> term div . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - opar shift and go to state 88 - num shift and go to state 89 - id shift and go to state 120 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - base_call shift and go to state 167 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 128 - - (71) term -> isvoid base_call . - - star reduce using rule 71 (term -> isvoid base_call .) - div reduce using rule 71 (term -> isvoid base_call .) - plus reduce using rule 71 (term -> isvoid base_call .) - minus reduce using rule 71 (term -> isvoid base_call .) - less reduce using rule 71 (term -> isvoid base_call .) - lesseq reduce using rule 71 (term -> isvoid base_call .) - equal reduce using rule 71 (term -> isvoid base_call .) - semi reduce using rule 71 (term -> isvoid base_call .) - of reduce using rule 71 (term -> isvoid base_call .) - then reduce using rule 71 (term -> isvoid base_call .) - loop reduce using rule 71 (term -> isvoid base_call .) - cpar reduce using rule 71 (term -> isvoid base_call .) - comma reduce using rule 71 (term -> isvoid base_call .) - in reduce using rule 71 (term -> isvoid base_call .) - else reduce using rule 71 (term -> isvoid base_call .) - pool reduce using rule 71 (term -> isvoid base_call .) - error reduce using rule 71 (term -> isvoid base_call .) - ccur reduce using rule 71 (term -> isvoid base_call .) - fi reduce using rule 71 (term -> isvoid base_call .) - - -state 129 - - (72) term -> nox base_call . - - star reduce using rule 72 (term -> nox base_call .) - div reduce using rule 72 (term -> nox base_call .) - plus reduce using rule 72 (term -> nox base_call .) - minus reduce using rule 72 (term -> nox base_call .) - less reduce using rule 72 (term -> nox base_call .) - lesseq reduce using rule 72 (term -> nox base_call .) - equal reduce using rule 72 (term -> nox base_call .) - semi reduce using rule 72 (term -> nox base_call .) - of reduce using rule 72 (term -> nox base_call .) - then reduce using rule 72 (term -> nox base_call .) - loop reduce using rule 72 (term -> nox base_call .) - cpar reduce using rule 72 (term -> nox base_call .) - comma reduce using rule 72 (term -> nox base_call .) - in reduce using rule 72 (term -> nox base_call .) - else reduce using rule 72 (term -> nox base_call .) - pool reduce using rule 72 (term -> nox base_call .) - error reduce using rule 72 (term -> nox base_call .) - ccur reduce using rule 72 (term -> nox base_call .) - fi reduce using rule 72 (term -> nox base_call .) - - -state 130 - - (74) base_call -> factor arroba . type dot func_call - - type shift and go to state 168 - - -state 131 - - (78) factor -> factor dot . func_call - (92) func_call -> . id opar args cpar - - id shift and go to state 170 - - func_call shift and go to state 169 - -state 132 - - (77) factor -> opar expr . cpar - - cpar shift and go to state 171 - - -state 133 - - (82) atom -> new type . - - arroba reduce using rule 82 (atom -> new type .) - dot reduce using rule 82 (atom -> new type .) - star reduce using rule 82 (atom -> new type .) - div reduce using rule 82 (atom -> new type .) - plus reduce using rule 82 (atom -> new type .) - minus reduce using rule 82 (atom -> new type .) - less reduce using rule 82 (atom -> new type .) - lesseq reduce using rule 82 (atom -> new type .) - equal reduce using rule 82 (atom -> new type .) - semi reduce using rule 82 (atom -> new type .) - of reduce using rule 82 (atom -> new type .) - then reduce using rule 82 (atom -> new type .) - loop reduce using rule 82 (atom -> new type .) - cpar reduce using rule 82 (atom -> new type .) - comma reduce using rule 82 (atom -> new type .) - in reduce using rule 82 (atom -> new type .) - else reduce using rule 82 (atom -> new type .) - pool reduce using rule 82 (atom -> new type .) - error reduce using rule 82 (atom -> new type .) - ccur reduce using rule 82 (atom -> new type .) - fi reduce using rule 82 (atom -> new type .) - - -state 134 - - (83) atom -> new error . - - arroba reduce using rule 83 (atom -> new error .) - dot reduce using rule 83 (atom -> new error .) - star reduce using rule 83 (atom -> new error .) - div reduce using rule 83 (atom -> new error .) - plus reduce using rule 83 (atom -> new error .) - minus reduce using rule 83 (atom -> new error .) - less reduce using rule 83 (atom -> new error .) - lesseq reduce using rule 83 (atom -> new error .) - equal reduce using rule 83 (atom -> new error .) - semi reduce using rule 83 (atom -> new error .) - of reduce using rule 83 (atom -> new error .) - then reduce using rule 83 (atom -> new error .) - loop reduce using rule 83 (atom -> new error .) - cpar reduce using rule 83 (atom -> new error .) - comma reduce using rule 83 (atom -> new error .) - in reduce using rule 83 (atom -> new error .) - else reduce using rule 83 (atom -> new error .) - pool reduce using rule 83 (atom -> new error .) - error reduce using rule 83 (atom -> new error .) - ccur reduce using rule 83 (atom -> new error .) - fi reduce using rule 83 (atom -> new error .) - - -state 135 - - (84) atom -> ocur block . ccur - - ccur shift and go to state 172 - - -state 136 - - (88) block -> expr . semi - (89) block -> expr . semi block - - semi shift and go to state 173 - - -state 137 - - (90) block -> error . block - (91) block -> error . - (88) block -> . expr semi - (89) block -> . expr semi block - (90) block -> . error block - (91) block -> . error - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - ccur reduce using rule 91 (block -> error .) - error shift and go to state 137 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - block shift and go to state 174 - expr shift and go to state 136 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 138 - - (24) def_func -> error opar formals cpar colon type . ocur expr ccur - - ocur shift and go to state 175 - - -state 139 - - (23) def_func -> id opar formals cpar colon type . ocur expr ccur - (27) def_func -> id opar formals cpar colon type . ocur error ccur - - ocur shift and go to state 176 - - -state 140 - - (26) def_func -> id opar formals cpar colon error . ocur expr ccur - - ocur shift and go to state 177 - - -state 141 - - (25) def_func -> id opar error cpar colon type . ocur expr ccur - - ocur shift and go to state 178 - - -state 142 - - (35) expr -> let let_list in . expr - (37) expr -> let let_list in . error - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - error shift and go to state 180 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 179 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 143 - - (52) let_list -> error . let_list - (50) let_list -> . let_assign - (51) let_list -> . let_assign comma let_list - (52) let_list -> . error let_list - (53) let_assign -> . param larrow expr - (54) let_assign -> . param - (34) param -> . id colon type - - error shift and go to state 143 - id shift and go to state 48 - - let_list shift and go to state 145 - let_assign shift and go to state 109 - param shift and go to state 110 - -state 144 - - (36) expr -> let error in . expr - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 181 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 145 - - (52) let_list -> error let_list . - - in reduce using rule 52 (let_list -> error let_list .) - - -state 146 - - (51) let_list -> let_assign comma . let_list - (50) let_list -> . let_assign - (51) let_list -> . let_assign comma let_list - (52) let_list -> . error let_list - (53) let_assign -> . param larrow expr - (54) let_assign -> . param - (34) param -> . id colon type - - error shift and go to state 143 - id shift and go to state 48 - - let_assign shift and go to state 109 - let_list shift and go to state 182 - param shift and go to state 110 - -state 147 - - (53) let_assign -> param larrow . expr - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 183 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 148 - - (38) expr -> case expr of . cases_list esac - (40) expr -> case expr of . error esac - (55) cases_list -> . casep semi - (56) cases_list -> . casep semi cases_list - (57) cases_list -> . error cases_list - (58) casep -> . id colon type rarrow expr - - error shift and go to state 185 - id shift and go to state 187 - - cases_list shift and go to state 184 - casep shift and go to state 186 - -state 149 - - (39) expr -> case error of . cases_list esac - (55) cases_list -> . casep semi - (56) cases_list -> . casep semi cases_list - (57) cases_list -> . error cases_list - (58) casep -> . id colon type rarrow expr - - error shift and go to state 188 - id shift and go to state 187 - - cases_list shift and go to state 189 - casep shift and go to state 186 - -state 150 - - (41) expr -> if expr then . expr else expr fi - (43) expr -> if expr then . error else expr fi - (44) expr -> if expr then . expr else error fi - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - error shift and go to state 191 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 190 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 151 - - (42) expr -> if error then . expr else expr fi - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 192 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 152 - - (45) expr -> while expr loop . expr pool - (47) expr -> while expr loop . error pool - (48) expr -> while expr loop . expr error - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - error shift and go to state 194 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 193 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 153 - - (46) expr -> while error loop . expr pool - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 195 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 154 - - (59) arith -> id larrow expr . - - semi reduce using rule 59 (arith -> id larrow expr .) - of reduce using rule 59 (arith -> id larrow expr .) - then reduce using rule 59 (arith -> id larrow expr .) - loop reduce using rule 59 (arith -> id larrow expr .) - cpar reduce using rule 59 (arith -> id larrow expr .) - comma reduce using rule 59 (arith -> id larrow expr .) - in reduce using rule 59 (arith -> id larrow expr .) - else reduce using rule 59 (arith -> id larrow expr .) - pool reduce using rule 59 (arith -> id larrow expr .) - error reduce using rule 59 (arith -> id larrow expr .) - ccur reduce using rule 59 (arith -> id larrow expr .) - fi reduce using rule 59 (arith -> id larrow expr .) - - -state 155 - - (92) func_call -> id opar args . cpar - - cpar shift and go to state 196 - - -state 156 - - (93) args -> arg_list . - - cpar reduce using rule 93 (args -> arg_list .) - - -state 157 - - (94) args -> arg_list_empty . - - cpar reduce using rule 94 (args -> arg_list_empty .) - - -state 158 - - (95) arg_list -> expr . - (96) arg_list -> expr . comma arg_list - - cpar reduce using rule 95 (arg_list -> expr .) - comma shift and go to state 197 - - -state 159 - - (97) arg_list -> error . arg_list - (95) arg_list -> . expr - (96) arg_list -> . expr comma arg_list - (97) arg_list -> . error arg_list - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - error shift and go to state 159 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - arg_list shift and go to state 198 - expr shift and go to state 158 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 160 - - (98) arg_list_empty -> epsilon . - - cpar reduce using rule 98 (arg_list_empty -> epsilon .) - - -state 161 - - (62) comp -> comp less op . - (66) op -> op . plus term - (67) op -> op . minus term - - less reduce using rule 62 (comp -> comp less op .) - lesseq reduce using rule 62 (comp -> comp less op .) - equal reduce using rule 62 (comp -> comp less op .) - semi reduce using rule 62 (comp -> comp less op .) - of reduce using rule 62 (comp -> comp less op .) - then reduce using rule 62 (comp -> comp less op .) - loop reduce using rule 62 (comp -> comp less op .) - cpar reduce using rule 62 (comp -> comp less op .) - comma reduce using rule 62 (comp -> comp less op .) - in reduce using rule 62 (comp -> comp less op .) - else reduce using rule 62 (comp -> comp less op .) - pool reduce using rule 62 (comp -> comp less op .) - error reduce using rule 62 (comp -> comp less op .) - ccur reduce using rule 62 (comp -> comp less op .) - fi reduce using rule 62 (comp -> comp less op .) - plus shift and go to state 124 - minus shift and go to state 125 - - -state 162 - - (63) comp -> comp lesseq op . - (66) op -> op . plus term - (67) op -> op . minus term - - less reduce using rule 63 (comp -> comp lesseq op .) - lesseq reduce using rule 63 (comp -> comp lesseq op .) - equal reduce using rule 63 (comp -> comp lesseq op .) - semi reduce using rule 63 (comp -> comp lesseq op .) - of reduce using rule 63 (comp -> comp lesseq op .) - then reduce using rule 63 (comp -> comp lesseq op .) - loop reduce using rule 63 (comp -> comp lesseq op .) - cpar reduce using rule 63 (comp -> comp lesseq op .) - comma reduce using rule 63 (comp -> comp lesseq op .) - in reduce using rule 63 (comp -> comp lesseq op .) - else reduce using rule 63 (comp -> comp lesseq op .) - pool reduce using rule 63 (comp -> comp lesseq op .) - error reduce using rule 63 (comp -> comp lesseq op .) - ccur reduce using rule 63 (comp -> comp lesseq op .) - fi reduce using rule 63 (comp -> comp lesseq op .) - plus shift and go to state 124 - minus shift and go to state 125 - - -state 163 - - (64) comp -> comp equal op . - (66) op -> op . plus term - (67) op -> op . minus term - - less reduce using rule 64 (comp -> comp equal op .) - lesseq reduce using rule 64 (comp -> comp equal op .) - equal reduce using rule 64 (comp -> comp equal op .) - semi reduce using rule 64 (comp -> comp equal op .) - of reduce using rule 64 (comp -> comp equal op .) - then reduce using rule 64 (comp -> comp equal op .) - loop reduce using rule 64 (comp -> comp equal op .) - cpar reduce using rule 64 (comp -> comp equal op .) - comma reduce using rule 64 (comp -> comp equal op .) - in reduce using rule 64 (comp -> comp equal op .) - else reduce using rule 64 (comp -> comp equal op .) - pool reduce using rule 64 (comp -> comp equal op .) - error reduce using rule 64 (comp -> comp equal op .) - ccur reduce using rule 64 (comp -> comp equal op .) - fi reduce using rule 64 (comp -> comp equal op .) - plus shift and go to state 124 - minus shift and go to state 125 - - -state 164 - - (66) op -> op plus term . - (69) term -> term . star base_call - (70) term -> term . div base_call - - plus reduce using rule 66 (op -> op plus term .) - minus reduce using rule 66 (op -> op plus term .) - less reduce using rule 66 (op -> op plus term .) - lesseq reduce using rule 66 (op -> op plus term .) - equal reduce using rule 66 (op -> op plus term .) - semi reduce using rule 66 (op -> op plus term .) - of reduce using rule 66 (op -> op plus term .) - then reduce using rule 66 (op -> op plus term .) - loop reduce using rule 66 (op -> op plus term .) - cpar reduce using rule 66 (op -> op plus term .) - comma reduce using rule 66 (op -> op plus term .) - in reduce using rule 66 (op -> op plus term .) - else reduce using rule 66 (op -> op plus term .) - pool reduce using rule 66 (op -> op plus term .) - error reduce using rule 66 (op -> op plus term .) - ccur reduce using rule 66 (op -> op plus term .) - fi reduce using rule 66 (op -> op plus term .) - star shift and go to state 126 - div shift and go to state 127 - - -state 165 - - (67) op -> op minus term . - (69) term -> term . star base_call - (70) term -> term . div base_call - - plus reduce using rule 67 (op -> op minus term .) - minus reduce using rule 67 (op -> op minus term .) - less reduce using rule 67 (op -> op minus term .) - lesseq reduce using rule 67 (op -> op minus term .) - equal reduce using rule 67 (op -> op minus term .) - semi reduce using rule 67 (op -> op minus term .) - of reduce using rule 67 (op -> op minus term .) - then reduce using rule 67 (op -> op minus term .) - loop reduce using rule 67 (op -> op minus term .) - cpar reduce using rule 67 (op -> op minus term .) - comma reduce using rule 67 (op -> op minus term .) - in reduce using rule 67 (op -> op minus term .) - else reduce using rule 67 (op -> op minus term .) - pool reduce using rule 67 (op -> op minus term .) - error reduce using rule 67 (op -> op minus term .) - ccur reduce using rule 67 (op -> op minus term .) - fi reduce using rule 67 (op -> op minus term .) - star shift and go to state 126 - div shift and go to state 127 - - -state 166 - - (69) term -> term star base_call . - - star reduce using rule 69 (term -> term star base_call .) - div reduce using rule 69 (term -> term star base_call .) - plus reduce using rule 69 (term -> term star base_call .) - minus reduce using rule 69 (term -> term star base_call .) - less reduce using rule 69 (term -> term star base_call .) - lesseq reduce using rule 69 (term -> term star base_call .) - equal reduce using rule 69 (term -> term star base_call .) - semi reduce using rule 69 (term -> term star base_call .) - of reduce using rule 69 (term -> term star base_call .) - then reduce using rule 69 (term -> term star base_call .) - loop reduce using rule 69 (term -> term star base_call .) - cpar reduce using rule 69 (term -> term star base_call .) - comma reduce using rule 69 (term -> term star base_call .) - in reduce using rule 69 (term -> term star base_call .) - else reduce using rule 69 (term -> term star base_call .) - pool reduce using rule 69 (term -> term star base_call .) - error reduce using rule 69 (term -> term star base_call .) - ccur reduce using rule 69 (term -> term star base_call .) - fi reduce using rule 69 (term -> term star base_call .) - - -state 167 - - (70) term -> term div base_call . - - star reduce using rule 70 (term -> term div base_call .) - div reduce using rule 70 (term -> term div base_call .) - plus reduce using rule 70 (term -> term div base_call .) - minus reduce using rule 70 (term -> term div base_call .) - less reduce using rule 70 (term -> term div base_call .) - lesseq reduce using rule 70 (term -> term div base_call .) - equal reduce using rule 70 (term -> term div base_call .) - semi reduce using rule 70 (term -> term div base_call .) - of reduce using rule 70 (term -> term div base_call .) - then reduce using rule 70 (term -> term div base_call .) - loop reduce using rule 70 (term -> term div base_call .) - cpar reduce using rule 70 (term -> term div base_call .) - comma reduce using rule 70 (term -> term div base_call .) - in reduce using rule 70 (term -> term div base_call .) - else reduce using rule 70 (term -> term div base_call .) - pool reduce using rule 70 (term -> term div base_call .) - error reduce using rule 70 (term -> term div base_call .) - ccur reduce using rule 70 (term -> term div base_call .) - fi reduce using rule 70 (term -> term div base_call .) - - -state 168 - - (74) base_call -> factor arroba type . dot func_call - - dot shift and go to state 199 - - -state 169 - - (78) factor -> factor dot func_call . - - arroba reduce using rule 78 (factor -> factor dot func_call .) - dot reduce using rule 78 (factor -> factor dot func_call .) - star reduce using rule 78 (factor -> factor dot func_call .) - div reduce using rule 78 (factor -> factor dot func_call .) - plus reduce using rule 78 (factor -> factor dot func_call .) - minus reduce using rule 78 (factor -> factor dot func_call .) - less reduce using rule 78 (factor -> factor dot func_call .) - lesseq reduce using rule 78 (factor -> factor dot func_call .) - equal reduce using rule 78 (factor -> factor dot func_call .) - semi reduce using rule 78 (factor -> factor dot func_call .) - of reduce using rule 78 (factor -> factor dot func_call .) - then reduce using rule 78 (factor -> factor dot func_call .) - loop reduce using rule 78 (factor -> factor dot func_call .) - cpar reduce using rule 78 (factor -> factor dot func_call .) - comma reduce using rule 78 (factor -> factor dot func_call .) - in reduce using rule 78 (factor -> factor dot func_call .) - else reduce using rule 78 (factor -> factor dot func_call .) - pool reduce using rule 78 (factor -> factor dot func_call .) - error reduce using rule 78 (factor -> factor dot func_call .) - ccur reduce using rule 78 (factor -> factor dot func_call .) - fi reduce using rule 78 (factor -> factor dot func_call .) - - -state 170 - - (92) func_call -> id . opar args cpar - - opar shift and go to state 118 - - -state 171 - - (77) factor -> opar expr cpar . - - arroba reduce using rule 77 (factor -> opar expr cpar .) - dot reduce using rule 77 (factor -> opar expr cpar .) - star reduce using rule 77 (factor -> opar expr cpar .) - div reduce using rule 77 (factor -> opar expr cpar .) - plus reduce using rule 77 (factor -> opar expr cpar .) - minus reduce using rule 77 (factor -> opar expr cpar .) - less reduce using rule 77 (factor -> opar expr cpar .) - lesseq reduce using rule 77 (factor -> opar expr cpar .) - equal reduce using rule 77 (factor -> opar expr cpar .) - semi reduce using rule 77 (factor -> opar expr cpar .) - of reduce using rule 77 (factor -> opar expr cpar .) - then reduce using rule 77 (factor -> opar expr cpar .) - loop reduce using rule 77 (factor -> opar expr cpar .) - cpar reduce using rule 77 (factor -> opar expr cpar .) - comma reduce using rule 77 (factor -> opar expr cpar .) - in reduce using rule 77 (factor -> opar expr cpar .) - else reduce using rule 77 (factor -> opar expr cpar .) - pool reduce using rule 77 (factor -> opar expr cpar .) - error reduce using rule 77 (factor -> opar expr cpar .) - ccur reduce using rule 77 (factor -> opar expr cpar .) - fi reduce using rule 77 (factor -> opar expr cpar .) - - -state 172 - - (84) atom -> ocur block ccur . - - arroba reduce using rule 84 (atom -> ocur block ccur .) - dot reduce using rule 84 (atom -> ocur block ccur .) - star reduce using rule 84 (atom -> ocur block ccur .) - div reduce using rule 84 (atom -> ocur block ccur .) - plus reduce using rule 84 (atom -> ocur block ccur .) - minus reduce using rule 84 (atom -> ocur block ccur .) - less reduce using rule 84 (atom -> ocur block ccur .) - lesseq reduce using rule 84 (atom -> ocur block ccur .) - equal reduce using rule 84 (atom -> ocur block ccur .) - semi reduce using rule 84 (atom -> ocur block ccur .) - of reduce using rule 84 (atom -> ocur block ccur .) - then reduce using rule 84 (atom -> ocur block ccur .) - loop reduce using rule 84 (atom -> ocur block ccur .) - cpar reduce using rule 84 (atom -> ocur block ccur .) - comma reduce using rule 84 (atom -> ocur block ccur .) - in reduce using rule 84 (atom -> ocur block ccur .) - else reduce using rule 84 (atom -> ocur block ccur .) - pool reduce using rule 84 (atom -> ocur block ccur .) - error reduce using rule 84 (atom -> ocur block ccur .) - ccur reduce using rule 84 (atom -> ocur block ccur .) - fi reduce using rule 84 (atom -> ocur block ccur .) - - -state 173 - - (88) block -> expr semi . - (89) block -> expr semi . block - (88) block -> . expr semi - (89) block -> . expr semi block - (90) block -> . error block - (91) block -> . error - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - ccur reduce using rule 88 (block -> expr semi .) - error shift and go to state 137 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 136 - block shift and go to state 200 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 174 - - (90) block -> error block . - - ccur reduce using rule 90 (block -> error block .) - - -state 175 - - (24) def_func -> error opar formals cpar colon type ocur . expr ccur - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 201 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 176 - - (23) def_func -> id opar formals cpar colon type ocur . expr ccur - (27) def_func -> id opar formals cpar colon type ocur . error ccur - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - error shift and go to state 203 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 202 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 177 - - (26) def_func -> id opar formals cpar colon error ocur . expr ccur - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 204 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 178 - - (25) def_func -> id opar error cpar colon type ocur . expr ccur - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 205 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 179 - - (35) expr -> let let_list in expr . - - semi reduce using rule 35 (expr -> let let_list in expr .) - of reduce using rule 35 (expr -> let let_list in expr .) - then reduce using rule 35 (expr -> let let_list in expr .) - loop reduce using rule 35 (expr -> let let_list in expr .) - cpar reduce using rule 35 (expr -> let let_list in expr .) - comma reduce using rule 35 (expr -> let let_list in expr .) - in reduce using rule 35 (expr -> let let_list in expr .) - else reduce using rule 35 (expr -> let let_list in expr .) - pool reduce using rule 35 (expr -> let let_list in expr .) - error reduce using rule 35 (expr -> let let_list in expr .) - ccur reduce using rule 35 (expr -> let let_list in expr .) - fi reduce using rule 35 (expr -> let let_list in expr .) - - -state 180 - - (37) expr -> let let_list in error . - - semi reduce using rule 37 (expr -> let let_list in error .) - of reduce using rule 37 (expr -> let let_list in error .) - then reduce using rule 37 (expr -> let let_list in error .) - loop reduce using rule 37 (expr -> let let_list in error .) - cpar reduce using rule 37 (expr -> let let_list in error .) - comma reduce using rule 37 (expr -> let let_list in error .) - in reduce using rule 37 (expr -> let let_list in error .) - else reduce using rule 37 (expr -> let let_list in error .) - pool reduce using rule 37 (expr -> let let_list in error .) - error reduce using rule 37 (expr -> let let_list in error .) - ccur reduce using rule 37 (expr -> let let_list in error .) - fi reduce using rule 37 (expr -> let let_list in error .) - - -state 181 - - (36) expr -> let error in expr . - - semi reduce using rule 36 (expr -> let error in expr .) - of reduce using rule 36 (expr -> let error in expr .) - then reduce using rule 36 (expr -> let error in expr .) - loop reduce using rule 36 (expr -> let error in expr .) - cpar reduce using rule 36 (expr -> let error in expr .) - comma reduce using rule 36 (expr -> let error in expr .) - in reduce using rule 36 (expr -> let error in expr .) - else reduce using rule 36 (expr -> let error in expr .) - pool reduce using rule 36 (expr -> let error in expr .) - error reduce using rule 36 (expr -> let error in expr .) - ccur reduce using rule 36 (expr -> let error in expr .) - fi reduce using rule 36 (expr -> let error in expr .) - - -state 182 - - (51) let_list -> let_assign comma let_list . - - in reduce using rule 51 (let_list -> let_assign comma let_list .) - - -state 183 - - (53) let_assign -> param larrow expr . - - comma reduce using rule 53 (let_assign -> param larrow expr .) - in reduce using rule 53 (let_assign -> param larrow expr .) - - -state 184 - - (38) expr -> case expr of cases_list . esac - - esac shift and go to state 206 - - -state 185 - - (40) expr -> case expr of error . esac - (57) cases_list -> error . cases_list - (55) cases_list -> . casep semi - (56) cases_list -> . casep semi cases_list - (57) cases_list -> . error cases_list - (58) casep -> . id colon type rarrow expr - - esac shift and go to state 207 - error shift and go to state 188 - id shift and go to state 187 - - cases_list shift and go to state 208 - casep shift and go to state 186 - -state 186 - - (55) cases_list -> casep . semi - (56) cases_list -> casep . semi cases_list - - semi shift and go to state 209 - - -state 187 - - (58) casep -> id . colon type rarrow expr - - colon shift and go to state 210 - - -state 188 - - (57) cases_list -> error . cases_list - (55) cases_list -> . casep semi - (56) cases_list -> . casep semi cases_list - (57) cases_list -> . error cases_list - (58) casep -> . id colon type rarrow expr - - error shift and go to state 188 - id shift and go to state 187 - - cases_list shift and go to state 208 - casep shift and go to state 186 - -state 189 - - (39) expr -> case error of cases_list . esac - - esac shift and go to state 211 - - -state 190 - - (41) expr -> if expr then expr . else expr fi - (44) expr -> if expr then expr . else error fi - - else shift and go to state 212 - - -state 191 - - (43) expr -> if expr then error . else expr fi - - else shift and go to state 213 - - -state 192 - - (42) expr -> if error then expr . else expr fi - - else shift and go to state 214 - - -state 193 - - (45) expr -> while expr loop expr . pool - (48) expr -> while expr loop expr . error - - pool shift and go to state 215 - error shift and go to state 216 - - -state 194 - - (47) expr -> while expr loop error . pool - - pool shift and go to state 217 - - -state 195 - - (46) expr -> while error loop expr . pool - - pool shift and go to state 218 - - -state 196 - - (92) func_call -> id opar args cpar . - - arroba reduce using rule 92 (func_call -> id opar args cpar .) - dot reduce using rule 92 (func_call -> id opar args cpar .) - star reduce using rule 92 (func_call -> id opar args cpar .) - div reduce using rule 92 (func_call -> id opar args cpar .) - plus reduce using rule 92 (func_call -> id opar args cpar .) - minus reduce using rule 92 (func_call -> id opar args cpar .) - less reduce using rule 92 (func_call -> id opar args cpar .) - lesseq reduce using rule 92 (func_call -> id opar args cpar .) - equal reduce using rule 92 (func_call -> id opar args cpar .) - semi reduce using rule 92 (func_call -> id opar args cpar .) - of reduce using rule 92 (func_call -> id opar args cpar .) - then reduce using rule 92 (func_call -> id opar args cpar .) - loop reduce using rule 92 (func_call -> id opar args cpar .) - cpar reduce using rule 92 (func_call -> id opar args cpar .) - comma reduce using rule 92 (func_call -> id opar args cpar .) - in reduce using rule 92 (func_call -> id opar args cpar .) - else reduce using rule 92 (func_call -> id opar args cpar .) - pool reduce using rule 92 (func_call -> id opar args cpar .) - error reduce using rule 92 (func_call -> id opar args cpar .) - ccur reduce using rule 92 (func_call -> id opar args cpar .) - fi reduce using rule 92 (func_call -> id opar args cpar .) - - -state 197 - - (96) arg_list -> expr comma . arg_list - (95) arg_list -> . expr - (96) arg_list -> . expr comma arg_list - (97) arg_list -> . error arg_list - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - error shift and go to state 159 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 158 - arg_list shift and go to state 219 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 198 - - (97) arg_list -> error arg_list . - - cpar reduce using rule 97 (arg_list -> error arg_list .) - - -state 199 - - (74) base_call -> factor arroba type dot . func_call - (92) func_call -> . id opar args cpar - - id shift and go to state 170 - - func_call shift and go to state 220 - -state 200 - - (89) block -> expr semi block . - - ccur reduce using rule 89 (block -> expr semi block .) - - -state 201 - - (24) def_func -> error opar formals cpar colon type ocur expr . ccur - - ccur shift and go to state 221 - - -state 202 - - (23) def_func -> id opar formals cpar colon type ocur expr . ccur - - ccur shift and go to state 222 - - -state 203 - - (27) def_func -> id opar formals cpar colon type ocur error . ccur - - ccur shift and go to state 223 - - -state 204 - - (26) def_func -> id opar formals cpar colon error ocur expr . ccur - - ccur shift and go to state 224 - - -state 205 - - (25) def_func -> id opar error cpar colon type ocur expr . ccur - - ccur shift and go to state 225 - - -state 206 - - (38) expr -> case expr of cases_list esac . - - semi reduce using rule 38 (expr -> case expr of cases_list esac .) - of reduce using rule 38 (expr -> case expr of cases_list esac .) - then reduce using rule 38 (expr -> case expr of cases_list esac .) - loop reduce using rule 38 (expr -> case expr of cases_list esac .) - cpar reduce using rule 38 (expr -> case expr of cases_list esac .) - comma reduce using rule 38 (expr -> case expr of cases_list esac .) - in reduce using rule 38 (expr -> case expr of cases_list esac .) - else reduce using rule 38 (expr -> case expr of cases_list esac .) - pool reduce using rule 38 (expr -> case expr of cases_list esac .) - error reduce using rule 38 (expr -> case expr of cases_list esac .) - ccur reduce using rule 38 (expr -> case expr of cases_list esac .) - fi reduce using rule 38 (expr -> case expr of cases_list esac .) - - -state 207 - - (40) expr -> case expr of error esac . - - semi reduce using rule 40 (expr -> case expr of error esac .) - of reduce using rule 40 (expr -> case expr of error esac .) - then reduce using rule 40 (expr -> case expr of error esac .) - loop reduce using rule 40 (expr -> case expr of error esac .) - cpar reduce using rule 40 (expr -> case expr of error esac .) - comma reduce using rule 40 (expr -> case expr of error esac .) - in reduce using rule 40 (expr -> case expr of error esac .) - else reduce using rule 40 (expr -> case expr of error esac .) - pool reduce using rule 40 (expr -> case expr of error esac .) - error reduce using rule 40 (expr -> case expr of error esac .) - ccur reduce using rule 40 (expr -> case expr of error esac .) - fi reduce using rule 40 (expr -> case expr of error esac .) - - -state 208 - - (57) cases_list -> error cases_list . - - esac reduce using rule 57 (cases_list -> error cases_list .) - - -state 209 - - (55) cases_list -> casep semi . - (56) cases_list -> casep semi . cases_list - (55) cases_list -> . casep semi - (56) cases_list -> . casep semi cases_list - (57) cases_list -> . error cases_list - (58) casep -> . id colon type rarrow expr - - esac reduce using rule 55 (cases_list -> casep semi .) - error shift and go to state 188 - id shift and go to state 187 - - casep shift and go to state 186 - cases_list shift and go to state 226 - -state 210 - - (58) casep -> id colon . type rarrow expr - - type shift and go to state 227 - - -state 211 - - (39) expr -> case error of cases_list esac . - - semi reduce using rule 39 (expr -> case error of cases_list esac .) - of reduce using rule 39 (expr -> case error of cases_list esac .) - then reduce using rule 39 (expr -> case error of cases_list esac .) - loop reduce using rule 39 (expr -> case error of cases_list esac .) - cpar reduce using rule 39 (expr -> case error of cases_list esac .) - comma reduce using rule 39 (expr -> case error of cases_list esac .) - in reduce using rule 39 (expr -> case error of cases_list esac .) - else reduce using rule 39 (expr -> case error of cases_list esac .) - pool reduce using rule 39 (expr -> case error of cases_list esac .) - error reduce using rule 39 (expr -> case error of cases_list esac .) - ccur reduce using rule 39 (expr -> case error of cases_list esac .) - fi reduce using rule 39 (expr -> case error of cases_list esac .) - - -state 212 - - (41) expr -> if expr then expr else . expr fi - (44) expr -> if expr then expr else . error fi - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - error shift and go to state 229 - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 228 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 213 - - (43) expr -> if expr then error else . expr fi - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 230 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 214 - - (42) expr -> if error then expr else . expr fi - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 231 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 215 - - (45) expr -> while expr loop expr pool . - - semi reduce using rule 45 (expr -> while expr loop expr pool .) - of reduce using rule 45 (expr -> while expr loop expr pool .) - then reduce using rule 45 (expr -> while expr loop expr pool .) - loop reduce using rule 45 (expr -> while expr loop expr pool .) - cpar reduce using rule 45 (expr -> while expr loop expr pool .) - comma reduce using rule 45 (expr -> while expr loop expr pool .) - in reduce using rule 45 (expr -> while expr loop expr pool .) - else reduce using rule 45 (expr -> while expr loop expr pool .) - pool reduce using rule 45 (expr -> while expr loop expr pool .) - error reduce using rule 45 (expr -> while expr loop expr pool .) - ccur reduce using rule 45 (expr -> while expr loop expr pool .) - fi reduce using rule 45 (expr -> while expr loop expr pool .) - - -state 216 - - (48) expr -> while expr loop expr error . - - semi reduce using rule 48 (expr -> while expr loop expr error .) - of reduce using rule 48 (expr -> while expr loop expr error .) - then reduce using rule 48 (expr -> while expr loop expr error .) - loop reduce using rule 48 (expr -> while expr loop expr error .) - cpar reduce using rule 48 (expr -> while expr loop expr error .) - comma reduce using rule 48 (expr -> while expr loop expr error .) - in reduce using rule 48 (expr -> while expr loop expr error .) - else reduce using rule 48 (expr -> while expr loop expr error .) - pool reduce using rule 48 (expr -> while expr loop expr error .) - error reduce using rule 48 (expr -> while expr loop expr error .) - ccur reduce using rule 48 (expr -> while expr loop expr error .) - fi reduce using rule 48 (expr -> while expr loop expr error .) - - -state 217 - - (47) expr -> while expr loop error pool . - - semi reduce using rule 47 (expr -> while expr loop error pool .) - of reduce using rule 47 (expr -> while expr loop error pool .) - then reduce using rule 47 (expr -> while expr loop error pool .) - loop reduce using rule 47 (expr -> while expr loop error pool .) - cpar reduce using rule 47 (expr -> while expr loop error pool .) - comma reduce using rule 47 (expr -> while expr loop error pool .) - in reduce using rule 47 (expr -> while expr loop error pool .) - else reduce using rule 47 (expr -> while expr loop error pool .) - pool reduce using rule 47 (expr -> while expr loop error pool .) - error reduce using rule 47 (expr -> while expr loop error pool .) - ccur reduce using rule 47 (expr -> while expr loop error pool .) - fi reduce using rule 47 (expr -> while expr loop error pool .) - - -state 218 - - (46) expr -> while error loop expr pool . - - semi reduce using rule 46 (expr -> while error loop expr pool .) - of reduce using rule 46 (expr -> while error loop expr pool .) - then reduce using rule 46 (expr -> while error loop expr pool .) - loop reduce using rule 46 (expr -> while error loop expr pool .) - cpar reduce using rule 46 (expr -> while error loop expr pool .) - comma reduce using rule 46 (expr -> while error loop expr pool .) - in reduce using rule 46 (expr -> while error loop expr pool .) - else reduce using rule 46 (expr -> while error loop expr pool .) - pool reduce using rule 46 (expr -> while error loop expr pool .) - error reduce using rule 46 (expr -> while error loop expr pool .) - ccur reduce using rule 46 (expr -> while error loop expr pool .) - fi reduce using rule 46 (expr -> while error loop expr pool .) - - -state 219 - - (96) arg_list -> expr comma arg_list . - - cpar reduce using rule 96 (arg_list -> expr comma arg_list .) - - -state 220 - - (74) base_call -> factor arroba type dot func_call . - - star reduce using rule 74 (base_call -> factor arroba type dot func_call .) - div reduce using rule 74 (base_call -> factor arroba type dot func_call .) - plus reduce using rule 74 (base_call -> factor arroba type dot func_call .) - minus reduce using rule 74 (base_call -> factor arroba type dot func_call .) - less reduce using rule 74 (base_call -> factor arroba type dot func_call .) - lesseq reduce using rule 74 (base_call -> factor arroba type dot func_call .) - equal reduce using rule 74 (base_call -> factor arroba type dot func_call .) - semi reduce using rule 74 (base_call -> factor arroba type dot func_call .) - of reduce using rule 74 (base_call -> factor arroba type dot func_call .) - then reduce using rule 74 (base_call -> factor arroba type dot func_call .) - loop reduce using rule 74 (base_call -> factor arroba type dot func_call .) - cpar reduce using rule 74 (base_call -> factor arroba type dot func_call .) - comma reduce using rule 74 (base_call -> factor arroba type dot func_call .) - in reduce using rule 74 (base_call -> factor arroba type dot func_call .) - else reduce using rule 74 (base_call -> factor arroba type dot func_call .) - pool reduce using rule 74 (base_call -> factor arroba type dot func_call .) - error reduce using rule 74 (base_call -> factor arroba type dot func_call .) - ccur reduce using rule 74 (base_call -> factor arroba type dot func_call .) - fi reduce using rule 74 (base_call -> factor arroba type dot func_call .) - - -state 221 - - (24) def_func -> error opar formals cpar colon type ocur expr ccur . - - semi reduce using rule 24 (def_func -> error opar formals cpar colon type ocur expr ccur .) - - -state 222 - - (23) def_func -> id opar formals cpar colon type ocur expr ccur . - - semi reduce using rule 23 (def_func -> id opar formals cpar colon type ocur expr ccur .) - - -state 223 - - (27) def_func -> id opar formals cpar colon type ocur error ccur . - - semi reduce using rule 27 (def_func -> id opar formals cpar colon type ocur error ccur .) - - -state 224 - - (26) def_func -> id opar formals cpar colon error ocur expr ccur . - - semi reduce using rule 26 (def_func -> id opar formals cpar colon error ocur expr ccur .) - - -state 225 - - (25) def_func -> id opar error cpar colon type ocur expr ccur . - - semi reduce using rule 25 (def_func -> id opar error cpar colon type ocur expr ccur .) - - -state 226 - - (56) cases_list -> casep semi cases_list . - - esac reduce using rule 56 (cases_list -> casep semi cases_list .) - - -state 227 - - (58) casep -> id colon type . rarrow expr - - rarrow shift and go to state 232 - - -state 228 - - (41) expr -> if expr then expr else expr . fi - - fi shift and go to state 233 - - -state 229 - - (44) expr -> if expr then expr else error . fi - - fi shift and go to state 234 - - -state 230 - - (43) expr -> if expr then error else expr . fi - - fi shift and go to state 235 - - -state 231 - - (42) expr -> if error then expr else expr . fi - - fi shift and go to state 236 - - -state 232 - - (58) casep -> id colon type rarrow . expr - (35) expr -> . let let_list in expr - (36) expr -> . let error in expr - (37) expr -> . let let_list in error - (38) expr -> . case expr of cases_list esac - (39) expr -> . case error of cases_list esac - (40) expr -> . case expr of error esac - (41) expr -> . if expr then expr else expr fi - (42) expr -> . if error then expr else expr fi - (43) expr -> . if expr then error else expr fi - (44) expr -> . if expr then expr else error fi - (45) expr -> . while expr loop expr pool - (46) expr -> . while error loop expr pool - (47) expr -> . while expr loop error pool - (48) expr -> . while expr loop expr error - (49) expr -> . arith - (59) arith -> . id larrow expr - (60) arith -> . not comp - (61) arith -> . comp - (62) comp -> . comp less op - (63) comp -> . comp lesseq op - (64) comp -> . comp equal op - (65) comp -> . op - (66) op -> . op plus term - (67) op -> . op minus term - (68) op -> . term - (69) term -> . term star base_call - (70) term -> . term div base_call - (71) term -> . isvoid base_call - (72) term -> . nox base_call - (73) term -> . base_call - (74) base_call -> . factor arroba type dot func_call - (75) base_call -> . factor - (76) factor -> . atom - (77) factor -> . opar expr cpar - (78) factor -> . factor dot func_call - (79) factor -> . func_call - (80) atom -> . num - (81) atom -> . id - (82) atom -> . new type - (83) atom -> . new error - (84) atom -> . ocur block ccur - (85) atom -> . true - (86) atom -> . false - (87) atom -> . string - (92) func_call -> . id opar args cpar - - let shift and go to state 72 - case shift and go to state 73 - if shift and go to state 74 - while shift and go to state 75 - id shift and go to state 77 - not shift and go to state 78 - isvoid shift and go to state 83 - nox shift and go to state 84 - opar shift and go to state 88 - num shift and go to state 89 - new shift and go to state 90 - ocur shift and go to state 91 - true shift and go to state 92 - false shift and go to state 93 - string shift and go to state 94 - - expr shift and go to state 237 - arith shift and go to state 76 - comp shift and go to state 79 - op shift and go to state 80 - term shift and go to state 81 - base_call shift and go to state 82 - factor shift and go to state 85 - func_call shift and go to state 86 - atom shift and go to state 87 - -state 233 - - (41) expr -> if expr then expr else expr fi . - - semi reduce using rule 41 (expr -> if expr then expr else expr fi .) - of reduce using rule 41 (expr -> if expr then expr else expr fi .) - then reduce using rule 41 (expr -> if expr then expr else expr fi .) - loop reduce using rule 41 (expr -> if expr then expr else expr fi .) - cpar reduce using rule 41 (expr -> if expr then expr else expr fi .) - comma reduce using rule 41 (expr -> if expr then expr else expr fi .) - in reduce using rule 41 (expr -> if expr then expr else expr fi .) - else reduce using rule 41 (expr -> if expr then expr else expr fi .) - pool reduce using rule 41 (expr -> if expr then expr else expr fi .) - error reduce using rule 41 (expr -> if expr then expr else expr fi .) - ccur reduce using rule 41 (expr -> if expr then expr else expr fi .) - fi reduce using rule 41 (expr -> if expr then expr else expr fi .) - - -state 234 - - (44) expr -> if expr then expr else error fi . - - semi reduce using rule 44 (expr -> if expr then expr else error fi .) - of reduce using rule 44 (expr -> if expr then expr else error fi .) - then reduce using rule 44 (expr -> if expr then expr else error fi .) - loop reduce using rule 44 (expr -> if expr then expr else error fi .) - cpar reduce using rule 44 (expr -> if expr then expr else error fi .) - comma reduce using rule 44 (expr -> if expr then expr else error fi .) - in reduce using rule 44 (expr -> if expr then expr else error fi .) - else reduce using rule 44 (expr -> if expr then expr else error fi .) - pool reduce using rule 44 (expr -> if expr then expr else error fi .) - error reduce using rule 44 (expr -> if expr then expr else error fi .) - ccur reduce using rule 44 (expr -> if expr then expr else error fi .) - fi reduce using rule 44 (expr -> if expr then expr else error fi .) - - -state 235 - - (43) expr -> if expr then error else expr fi . - - semi reduce using rule 43 (expr -> if expr then error else expr fi .) - of reduce using rule 43 (expr -> if expr then error else expr fi .) - then reduce using rule 43 (expr -> if expr then error else expr fi .) - loop reduce using rule 43 (expr -> if expr then error else expr fi .) - cpar reduce using rule 43 (expr -> if expr then error else expr fi .) - comma reduce using rule 43 (expr -> if expr then error else expr fi .) - in reduce using rule 43 (expr -> if expr then error else expr fi .) - else reduce using rule 43 (expr -> if expr then error else expr fi .) - pool reduce using rule 43 (expr -> if expr then error else expr fi .) - error reduce using rule 43 (expr -> if expr then error else expr fi .) - ccur reduce using rule 43 (expr -> if expr then error else expr fi .) - fi reduce using rule 43 (expr -> if expr then error else expr fi .) - - -state 236 - - (42) expr -> if error then expr else expr fi . - - semi reduce using rule 42 (expr -> if error then expr else expr fi .) - of reduce using rule 42 (expr -> if error then expr else expr fi .) - then reduce using rule 42 (expr -> if error then expr else expr fi .) - loop reduce using rule 42 (expr -> if error then expr else expr fi .) - cpar reduce using rule 42 (expr -> if error then expr else expr fi .) - comma reduce using rule 42 (expr -> if error then expr else expr fi .) - in reduce using rule 42 (expr -> if error then expr else expr fi .) - else reduce using rule 42 (expr -> if error then expr else expr fi .) - pool reduce using rule 42 (expr -> if error then expr else expr fi .) - error reduce using rule 42 (expr -> if error then expr else expr fi .) - ccur reduce using rule 42 (expr -> if error then expr else expr fi .) - fi reduce using rule 42 (expr -> if error then expr else expr fi .) - - -state 237 - - (58) casep -> id colon type rarrow expr . - - semi reduce using rule 58 (casep -> id colon type rarrow expr .) - +Created by PLY version 3.11 (http://www.dabeaz.com/ply) + +Grammar + +Rule 0 S' -> program +Rule 1 program -> class_list +Rule 2 epsilon -> +Rule 3 class_list -> def_class class_list +Rule 4 class_list -> def_class +Rule 5 class_list -> error class_list +Rule 6 def_class -> class type ocur feature_list ccur semi +Rule 7 def_class -> class type inherits type ocur feature_list ccur semi +Rule 8 def_class -> class error ocur feature_list ccur semi +Rule 9 def_class -> class error inherits type ocur feature_list ccur semi +Rule 10 def_class -> class error inherits error ocur feature_list ccur semi +Rule 11 def_class -> class type inherits error ocur feature_list ccur semi +Rule 12 feature_list -> epsilon +Rule 13 feature_list -> def_attr semi feature_list +Rule 14 feature_list -> def_func semi feature_list +Rule 15 feature_list -> error feature_list +Rule 16 def_attr -> id colon type +Rule 17 def_attr -> id colon type larrow expr +Rule 18 def_attr -> error colon type +Rule 19 def_attr -> id colon error +Rule 20 def_attr -> error colon type larrow expr +Rule 21 def_attr -> id colon error larrow expr +Rule 22 def_attr -> id colon type larrow error +Rule 23 def_func -> id opar formals cpar colon type ocur expr ccur +Rule 24 def_func -> error opar formals cpar colon type ocur expr ccur +Rule 25 def_func -> id opar error cpar colon type ocur expr ccur +Rule 26 def_func -> id opar formals cpar colon error ocur expr ccur +Rule 27 def_func -> id opar formals cpar colon type ocur error ccur +Rule 28 formals -> param_list +Rule 29 formals -> param_list_empty +Rule 30 param_list -> param +Rule 31 param_list -> param comma param_list +Rule 32 param_list -> error param_list +Rule 33 param_list_empty -> epsilon +Rule 34 param -> id colon type +Rule 35 expr -> let let_list in expr +Rule 36 expr -> let error in expr +Rule 37 expr -> let let_list in error +Rule 38 expr -> case expr of cases_list esac +Rule 39 expr -> case error of cases_list esac +Rule 40 expr -> case expr of error esac +Rule 41 expr -> if expr then expr else expr fi +Rule 42 expr -> if error then expr else expr fi +Rule 43 expr -> if expr then error else expr fi +Rule 44 expr -> if expr then expr else error fi +Rule 45 expr -> while expr loop expr pool +Rule 46 expr -> while error loop expr pool +Rule 47 expr -> while expr loop error pool +Rule 48 expr -> while expr loop expr error +Rule 49 expr -> arith +Rule 50 let_list -> let_assign +Rule 51 let_list -> let_assign comma let_list +Rule 52 let_list -> error let_list +Rule 53 let_assign -> param larrow expr +Rule 54 let_assign -> param +Rule 55 cases_list -> casep semi +Rule 56 cases_list -> casep semi cases_list +Rule 57 cases_list -> error cases_list +Rule 58 casep -> id colon type rarrow expr +Rule 59 arith -> id larrow expr +Rule 60 arith -> not comp +Rule 61 arith -> comp +Rule 62 comp -> comp less op +Rule 63 comp -> comp lesseq op +Rule 64 comp -> comp equal op +Rule 65 comp -> op +Rule 66 op -> op plus term +Rule 67 op -> op minus term +Rule 68 op -> term +Rule 69 term -> term star base_call +Rule 70 term -> term div base_call +Rule 71 term -> isvoid base_call +Rule 72 term -> nox base_call +Rule 73 term -> base_call +Rule 74 base_call -> factor arroba type dot func_call +Rule 75 base_call -> factor +Rule 76 factor -> atom +Rule 77 factor -> opar expr cpar +Rule 78 factor -> factor dot func_call +Rule 79 factor -> func_call +Rule 80 atom -> num +Rule 81 atom -> id +Rule 82 atom -> new type +Rule 83 atom -> new error +Rule 84 atom -> ocur block ccur +Rule 85 atom -> true +Rule 86 atom -> false +Rule 87 atom -> string +Rule 88 block -> expr semi +Rule 89 block -> expr semi block +Rule 90 block -> error block +Rule 91 block -> error +Rule 92 func_call -> id opar args cpar +Rule 93 args -> arg_list +Rule 94 args -> arg_list_empty +Rule 95 arg_list -> expr +Rule 96 arg_list -> expr comma arg_list +Rule 97 arg_list -> error arg_list +Rule 98 arg_list_empty -> epsilon + +Terminals, with rules where they appear + +arroba : 74 +case : 38 39 40 +ccur : 6 7 8 9 10 11 23 24 25 26 27 84 +class : 6 7 8 9 10 11 +colon : 16 17 18 19 20 21 22 23 24 25 26 27 34 58 +comma : 31 51 96 +cpar : 23 24 25 26 27 77 92 +div : 70 +dot : 74 78 +else : 41 42 43 44 +equal : 64 +error : 5 8 9 10 10 11 15 18 19 20 21 22 24 25 26 27 32 36 37 39 40 42 43 44 46 47 48 52 57 83 90 91 97 +esac : 38 39 40 +false : 86 +fi : 41 42 43 44 +id : 16 17 19 21 22 23 25 26 27 34 58 59 81 92 +if : 41 42 43 44 +in : 35 36 37 +inherits : 7 9 10 11 +isvoid : 71 +larrow : 17 20 21 22 53 59 +less : 62 +lesseq : 63 +let : 35 36 37 +loop : 45 46 47 48 +minus : 67 +new : 82 83 +not : 60 +nox : 72 +num : 80 +ocur : 6 7 8 9 10 11 23 24 25 26 27 84 +of : 38 39 40 +opar : 23 24 25 26 27 77 92 +plus : 66 +pool : 45 46 47 +rarrow : 58 +semi : 6 7 8 9 10 11 13 14 55 56 88 89 +star : 69 +string : 87 +then : 41 42 43 44 +true : 85 +type : 6 7 7 9 11 16 17 18 20 22 23 24 25 27 34 58 74 82 +while : 45 46 47 48 + +Nonterminals, with rules where they appear + +arg_list : 93 96 97 +arg_list_empty : 94 +args : 92 +arith : 49 +atom : 76 +base_call : 69 70 71 72 73 +block : 84 89 90 +casep : 55 56 +cases_list : 38 39 56 57 +class_list : 1 3 5 +comp : 60 61 62 63 64 +def_attr : 13 +def_class : 3 4 +def_func : 14 +epsilon : 12 33 98 +expr : 17 20 21 23 24 25 26 35 36 38 40 41 41 41 42 42 43 43 44 44 45 45 46 47 48 48 53 58 59 77 88 89 95 96 +factor : 74 75 78 +feature_list : 6 7 8 9 10 11 13 14 15 +formals : 23 24 26 27 +func_call : 74 78 79 +let_assign : 50 51 +let_list : 35 37 51 52 +op : 62 63 64 65 66 67 +param : 30 31 53 54 +param_list : 28 31 32 +param_list_empty : 29 +program : 0 +term : 66 67 68 69 70 + +Parsing method: LALR + +state 0 + + (0) S' -> . program + (1) program -> . class_list + (3) class_list -> . def_class class_list + (4) class_list -> . def_class + (5) class_list -> . error class_list + (6) def_class -> . class type ocur feature_list ccur semi + (7) def_class -> . class type inherits type ocur feature_list ccur semi + (8) def_class -> . class error ocur feature_list ccur semi + (9) def_class -> . class error inherits type ocur feature_list ccur semi + (10) def_class -> . class error inherits error ocur feature_list ccur semi + (11) def_class -> . class type inherits error ocur feature_list ccur semi + + error shift and go to state 4 + class shift and go to state 5 + + program shift and go to state 1 + class_list shift and go to state 2 + def_class shift and go to state 3 + +state 1 + + (0) S' -> program . + + + +state 2 + + (1) program -> class_list . + + $end reduce using rule 1 (program -> class_list .) + + +state 3 + + (3) class_list -> def_class . class_list + (4) class_list -> def_class . + (3) class_list -> . def_class class_list + (4) class_list -> . def_class + (5) class_list -> . error class_list + (6) def_class -> . class type ocur feature_list ccur semi + (7) def_class -> . class type inherits type ocur feature_list ccur semi + (8) def_class -> . class error ocur feature_list ccur semi + (9) def_class -> . class error inherits type ocur feature_list ccur semi + (10) def_class -> . class error inherits error ocur feature_list ccur semi + (11) def_class -> . class type inherits error ocur feature_list ccur semi + + $end reduce using rule 4 (class_list -> def_class .) + error shift and go to state 4 + class shift and go to state 5 + + def_class shift and go to state 3 + class_list shift and go to state 6 + +state 4 + + (5) class_list -> error . class_list + (3) class_list -> . def_class class_list + (4) class_list -> . def_class + (5) class_list -> . error class_list + (6) def_class -> . class type ocur feature_list ccur semi + (7) def_class -> . class type inherits type ocur feature_list ccur semi + (8) def_class -> . class error ocur feature_list ccur semi + (9) def_class -> . class error inherits type ocur feature_list ccur semi + (10) def_class -> . class error inherits error ocur feature_list ccur semi + (11) def_class -> . class type inherits error ocur feature_list ccur semi + + error shift and go to state 4 + class shift and go to state 5 + + class_list shift and go to state 7 + def_class shift and go to state 3 + +state 5 + + (6) def_class -> class . type ocur feature_list ccur semi + (7) def_class -> class . type inherits type ocur feature_list ccur semi + (8) def_class -> class . error ocur feature_list ccur semi + (9) def_class -> class . error inherits type ocur feature_list ccur semi + (10) def_class -> class . error inherits error ocur feature_list ccur semi + (11) def_class -> class . type inherits error ocur feature_list ccur semi + + type shift and go to state 8 + error shift and go to state 9 + + +state 6 + + (3) class_list -> def_class class_list . + + $end reduce using rule 3 (class_list -> def_class class_list .) + + +state 7 + + (5) class_list -> error class_list . + + $end reduce using rule 5 (class_list -> error class_list .) + + +state 8 + + (6) def_class -> class type . ocur feature_list ccur semi + (7) def_class -> class type . inherits type ocur feature_list ccur semi + (11) def_class -> class type . inherits error ocur feature_list ccur semi + + ocur shift and go to state 10 + inherits shift and go to state 11 + + +state 9 + + (8) def_class -> class error . ocur feature_list ccur semi + (9) def_class -> class error . inherits type ocur feature_list ccur semi + (10) def_class -> class error . inherits error ocur feature_list ccur semi + + ocur shift and go to state 12 + inherits shift and go to state 13 + + +state 10 + + (6) def_class -> class type ocur . feature_list ccur semi + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + feature_list shift and go to state 14 + epsilon shift and go to state 15 + def_attr shift and go to state 16 + def_func shift and go to state 17 + +state 11 + + (7) def_class -> class type inherits . type ocur feature_list ccur semi + (11) def_class -> class type inherits . error ocur feature_list ccur semi + + type shift and go to state 20 + error shift and go to state 21 + + +state 12 + + (8) def_class -> class error ocur . feature_list ccur semi + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + feature_list shift and go to state 22 + epsilon shift and go to state 15 + def_attr shift and go to state 16 + def_func shift and go to state 17 + +state 13 + + (9) def_class -> class error inherits . type ocur feature_list ccur semi + (10) def_class -> class error inherits . error ocur feature_list ccur semi + + type shift and go to state 24 + error shift and go to state 23 + + +state 14 + + (6) def_class -> class type ocur feature_list . ccur semi + + ccur shift and go to state 25 + + +state 15 + + (12) feature_list -> epsilon . + + ccur reduce using rule 12 (feature_list -> epsilon .) + + +state 16 + + (13) feature_list -> def_attr . semi feature_list + + semi shift and go to state 26 + + +state 17 + + (14) feature_list -> def_func . semi feature_list + + semi shift and go to state 27 + + +state 18 + + (15) feature_list -> error . feature_list + (18) def_attr -> error . colon type + (20) def_attr -> error . colon type larrow expr + (24) def_func -> error . opar formals cpar colon type ocur expr ccur + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + colon shift and go to state 29 + opar shift and go to state 30 + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + feature_list shift and go to state 28 + epsilon shift and go to state 15 + def_attr shift and go to state 16 + def_func shift and go to state 17 + +state 19 + + (16) def_attr -> id . colon type + (17) def_attr -> id . colon type larrow expr + (19) def_attr -> id . colon error + (21) def_attr -> id . colon error larrow expr + (22) def_attr -> id . colon type larrow error + (23) def_func -> id . opar formals cpar colon type ocur expr ccur + (25) def_func -> id . opar error cpar colon type ocur expr ccur + (26) def_func -> id . opar formals cpar colon error ocur expr ccur + (27) def_func -> id . opar formals cpar colon type ocur error ccur + + colon shift and go to state 31 + opar shift and go to state 32 + + +state 20 + + (7) def_class -> class type inherits type . ocur feature_list ccur semi + + ocur shift and go to state 33 + + +state 21 + + (11) def_class -> class type inherits error . ocur feature_list ccur semi + + ocur shift and go to state 34 + + +state 22 + + (8) def_class -> class error ocur feature_list . ccur semi + + ccur shift and go to state 35 + + +state 23 + + (10) def_class -> class error inherits error . ocur feature_list ccur semi + + ocur shift and go to state 36 + + +state 24 + + (9) def_class -> class error inherits type . ocur feature_list ccur semi + + ocur shift and go to state 37 + + +state 25 + + (6) def_class -> class type ocur feature_list ccur . semi + + semi shift and go to state 38 + + +state 26 + + (13) feature_list -> def_attr semi . feature_list + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + def_attr shift and go to state 16 + feature_list shift and go to state 39 + epsilon shift and go to state 15 + def_func shift and go to state 17 + +state 27 + + (14) feature_list -> def_func semi . feature_list + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + def_func shift and go to state 17 + feature_list shift and go to state 40 + epsilon shift and go to state 15 + def_attr shift and go to state 16 + +state 28 + + (15) feature_list -> error feature_list . + + ccur reduce using rule 15 (feature_list -> error feature_list .) + + +state 29 + + (18) def_attr -> error colon . type + (20) def_attr -> error colon . type larrow expr + + type shift and go to state 41 + + +state 30 + + (24) def_func -> error opar . formals cpar colon type ocur expr ccur + (28) formals -> . param_list + (29) formals -> . param_list_empty + (30) param_list -> . param + (31) param_list -> . param comma param_list + (32) param_list -> . error param_list + (33) param_list_empty -> . epsilon + (34) param -> . id colon type + (2) epsilon -> . + + error shift and go to state 42 + id shift and go to state 48 + cpar reduce using rule 2 (epsilon -> .) + + formals shift and go to state 43 + param_list shift and go to state 44 + param_list_empty shift and go to state 45 + param shift and go to state 46 + epsilon shift and go to state 47 + +state 31 + + (16) def_attr -> id colon . type + (17) def_attr -> id colon . type larrow expr + (19) def_attr -> id colon . error + (21) def_attr -> id colon . error larrow expr + (22) def_attr -> id colon . type larrow error + + type shift and go to state 49 + error shift and go to state 50 + + +state 32 + + (23) def_func -> id opar . formals cpar colon type ocur expr ccur + (25) def_func -> id opar . error cpar colon type ocur expr ccur + (26) def_func -> id opar . formals cpar colon error ocur expr ccur + (27) def_func -> id opar . formals cpar colon type ocur error ccur + (28) formals -> . param_list + (29) formals -> . param_list_empty + (30) param_list -> . param + (31) param_list -> . param comma param_list + (32) param_list -> . error param_list + (33) param_list_empty -> . epsilon + (34) param -> . id colon type + (2) epsilon -> . + + error shift and go to state 52 + id shift and go to state 48 + cpar reduce using rule 2 (epsilon -> .) + + formals shift and go to state 51 + param_list shift and go to state 44 + param_list_empty shift and go to state 45 + param shift and go to state 46 + epsilon shift and go to state 47 + +state 33 + + (7) def_class -> class type inherits type ocur . feature_list ccur semi + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + feature_list shift and go to state 53 + epsilon shift and go to state 15 + def_attr shift and go to state 16 + def_func shift and go to state 17 + +state 34 + + (11) def_class -> class type inherits error ocur . feature_list ccur semi + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + feature_list shift and go to state 54 + epsilon shift and go to state 15 + def_attr shift and go to state 16 + def_func shift and go to state 17 + +state 35 + + (8) def_class -> class error ocur feature_list ccur . semi + + semi shift and go to state 55 + + +state 36 + + (10) def_class -> class error inherits error ocur . feature_list ccur semi + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + feature_list shift and go to state 56 + epsilon shift and go to state 15 + def_attr shift and go to state 16 + def_func shift and go to state 17 + +state 37 + + (9) def_class -> class error inherits type ocur . feature_list ccur semi + (12) feature_list -> . epsilon + (13) feature_list -> . def_attr semi feature_list + (14) feature_list -> . def_func semi feature_list + (15) feature_list -> . error feature_list + (2) epsilon -> . + (16) def_attr -> . id colon type + (17) def_attr -> . id colon type larrow expr + (18) def_attr -> . error colon type + (19) def_attr -> . id colon error + (20) def_attr -> . error colon type larrow expr + (21) def_attr -> . id colon error larrow expr + (22) def_attr -> . id colon type larrow error + (23) def_func -> . id opar formals cpar colon type ocur expr ccur + (24) def_func -> . error opar formals cpar colon type ocur expr ccur + (25) def_func -> . id opar error cpar colon type ocur expr ccur + (26) def_func -> . id opar formals cpar colon error ocur expr ccur + (27) def_func -> . id opar formals cpar colon type ocur error ccur + + error shift and go to state 18 + ccur reduce using rule 2 (epsilon -> .) + id shift and go to state 19 + + feature_list shift and go to state 57 + epsilon shift and go to state 15 + def_attr shift and go to state 16 + def_func shift and go to state 17 + +state 38 + + (6) def_class -> class type ocur feature_list ccur semi . + + error reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) + class reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) + $end reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) + + +state 39 + + (13) feature_list -> def_attr semi feature_list . + + ccur reduce using rule 13 (feature_list -> def_attr semi feature_list .) + + +state 40 + + (14) feature_list -> def_func semi feature_list . + + ccur reduce using rule 14 (feature_list -> def_func semi feature_list .) + + +state 41 + + (18) def_attr -> error colon type . + (20) def_attr -> error colon type . larrow expr + + semi reduce using rule 18 (def_attr -> error colon type .) + larrow shift and go to state 58 + + +state 42 + + (32) param_list -> error . param_list + (30) param_list -> . param + (31) param_list -> . param comma param_list + (32) param_list -> . error param_list + (34) param -> . id colon type + + error shift and go to state 42 + id shift and go to state 48 + + param_list shift and go to state 59 + param shift and go to state 46 + +state 43 + + (24) def_func -> error opar formals . cpar colon type ocur expr ccur + + cpar shift and go to state 60 + + +state 44 + + (28) formals -> param_list . + + cpar reduce using rule 28 (formals -> param_list .) + + +state 45 + + (29) formals -> param_list_empty . + + cpar reduce using rule 29 (formals -> param_list_empty .) + + +state 46 + + (30) param_list -> param . + (31) param_list -> param . comma param_list + + cpar reduce using rule 30 (param_list -> param .) + comma shift and go to state 61 + + +state 47 + + (33) param_list_empty -> epsilon . + + cpar reduce using rule 33 (param_list_empty -> epsilon .) + + +state 48 + + (34) param -> id . colon type + + colon shift and go to state 62 + + +state 49 + + (16) def_attr -> id colon type . + (17) def_attr -> id colon type . larrow expr + (22) def_attr -> id colon type . larrow error + + semi reduce using rule 16 (def_attr -> id colon type .) + larrow shift and go to state 63 + + +state 50 + + (19) def_attr -> id colon error . + (21) def_attr -> id colon error . larrow expr + + semi reduce using rule 19 (def_attr -> id colon error .) + larrow shift and go to state 64 + + +state 51 + + (23) def_func -> id opar formals . cpar colon type ocur expr ccur + (26) def_func -> id opar formals . cpar colon error ocur expr ccur + (27) def_func -> id opar formals . cpar colon type ocur error ccur + + cpar shift and go to state 65 + + +state 52 + + (25) def_func -> id opar error . cpar colon type ocur expr ccur + (32) param_list -> error . param_list + (30) param_list -> . param + (31) param_list -> . param comma param_list + (32) param_list -> . error param_list + (34) param -> . id colon type + + cpar shift and go to state 66 + error shift and go to state 42 + id shift and go to state 48 + + param_list shift and go to state 59 + param shift and go to state 46 + +state 53 + + (7) def_class -> class type inherits type ocur feature_list . ccur semi + + ccur shift and go to state 67 + + +state 54 + + (11) def_class -> class type inherits error ocur feature_list . ccur semi + + ccur shift and go to state 68 + + +state 55 + + (8) def_class -> class error ocur feature_list ccur semi . + + error reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + class reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + $end reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + + +state 56 + + (10) def_class -> class error inherits error ocur feature_list . ccur semi + + ccur shift and go to state 69 + + +state 57 + + (9) def_class -> class error inherits type ocur feature_list . ccur semi + + ccur shift and go to state 70 + + +state 58 + + (20) def_attr -> error colon type larrow . expr + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 71 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 59 + + (32) param_list -> error param_list . + + cpar reduce using rule 32 (param_list -> error param_list .) + + +state 60 + + (24) def_func -> error opar formals cpar . colon type ocur expr ccur + + colon shift and go to state 95 + + +state 61 + + (31) param_list -> param comma . param_list + (30) param_list -> . param + (31) param_list -> . param comma param_list + (32) param_list -> . error param_list + (34) param -> . id colon type + + error shift and go to state 42 + id shift and go to state 48 + + param shift and go to state 46 + param_list shift and go to state 96 + +state 62 + + (34) param -> id colon . type + + type shift and go to state 97 + + +state 63 + + (17) def_attr -> id colon type larrow . expr + (22) def_attr -> id colon type larrow . error + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 99 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 98 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 64 + + (21) def_attr -> id colon error larrow . expr + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 100 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 65 + + (23) def_func -> id opar formals cpar . colon type ocur expr ccur + (26) def_func -> id opar formals cpar . colon error ocur expr ccur + (27) def_func -> id opar formals cpar . colon type ocur error ccur + + colon shift and go to state 101 + + +state 66 + + (25) def_func -> id opar error cpar . colon type ocur expr ccur + + colon shift and go to state 102 + + +state 67 + + (7) def_class -> class type inherits type ocur feature_list ccur . semi + + semi shift and go to state 103 + + +state 68 + + (11) def_class -> class type inherits error ocur feature_list ccur . semi + + semi shift and go to state 104 + + +state 69 + + (10) def_class -> class error inherits error ocur feature_list ccur . semi + + semi shift and go to state 105 + + +state 70 + + (9) def_class -> class error inherits type ocur feature_list ccur . semi + + semi shift and go to state 106 + + +state 71 + + (20) def_attr -> error colon type larrow expr . + + semi reduce using rule 20 (def_attr -> error colon type larrow expr .) + + +state 72 + + (35) expr -> let . let_list in expr + (36) expr -> let . error in expr + (37) expr -> let . let_list in error + (50) let_list -> . let_assign + (51) let_list -> . let_assign comma let_list + (52) let_list -> . error let_list + (53) let_assign -> . param larrow expr + (54) let_assign -> . param + (34) param -> . id colon type + + error shift and go to state 108 + id shift and go to state 48 + + let_list shift and go to state 107 + let_assign shift and go to state 109 + param shift and go to state 110 + +state 73 + + (38) expr -> case . expr of cases_list esac + (39) expr -> case . error of cases_list esac + (40) expr -> case . expr of error esac + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 112 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 111 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 74 + + (41) expr -> if . expr then expr else expr fi + (42) expr -> if . error then expr else expr fi + (43) expr -> if . expr then error else expr fi + (44) expr -> if . expr then expr else error fi + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 114 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 113 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 75 + + (45) expr -> while . expr loop expr pool + (46) expr -> while . error loop expr pool + (47) expr -> while . expr loop error pool + (48) expr -> while . expr loop expr error + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 116 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 115 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 76 + + (49) expr -> arith . + + semi reduce using rule 49 (expr -> arith .) + of reduce using rule 49 (expr -> arith .) + then reduce using rule 49 (expr -> arith .) + loop reduce using rule 49 (expr -> arith .) + cpar reduce using rule 49 (expr -> arith .) + comma reduce using rule 49 (expr -> arith .) + in reduce using rule 49 (expr -> arith .) + else reduce using rule 49 (expr -> arith .) + pool reduce using rule 49 (expr -> arith .) + error reduce using rule 49 (expr -> arith .) + ccur reduce using rule 49 (expr -> arith .) + fi reduce using rule 49 (expr -> arith .) + + +state 77 + + (59) arith -> id . larrow expr + (81) atom -> id . + (92) func_call -> id . opar args cpar + + larrow shift and go to state 117 + arroba reduce using rule 81 (atom -> id .) + dot reduce using rule 81 (atom -> id .) + star reduce using rule 81 (atom -> id .) + div reduce using rule 81 (atom -> id .) + plus reduce using rule 81 (atom -> id .) + minus reduce using rule 81 (atom -> id .) + less reduce using rule 81 (atom -> id .) + lesseq reduce using rule 81 (atom -> id .) + equal reduce using rule 81 (atom -> id .) + semi reduce using rule 81 (atom -> id .) + of reduce using rule 81 (atom -> id .) + then reduce using rule 81 (atom -> id .) + loop reduce using rule 81 (atom -> id .) + cpar reduce using rule 81 (atom -> id .) + comma reduce using rule 81 (atom -> id .) + in reduce using rule 81 (atom -> id .) + else reduce using rule 81 (atom -> id .) + pool reduce using rule 81 (atom -> id .) + error reduce using rule 81 (atom -> id .) + ccur reduce using rule 81 (atom -> id .) + fi reduce using rule 81 (atom -> id .) + opar shift and go to state 118 + + +state 78 + + (60) arith -> not . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + comp shift and go to state 119 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 79 + + (61) arith -> comp . + (62) comp -> comp . less op + (63) comp -> comp . lesseq op + (64) comp -> comp . equal op + + semi reduce using rule 61 (arith -> comp .) + of reduce using rule 61 (arith -> comp .) + then reduce using rule 61 (arith -> comp .) + loop reduce using rule 61 (arith -> comp .) + cpar reduce using rule 61 (arith -> comp .) + comma reduce using rule 61 (arith -> comp .) + in reduce using rule 61 (arith -> comp .) + else reduce using rule 61 (arith -> comp .) + pool reduce using rule 61 (arith -> comp .) + error reduce using rule 61 (arith -> comp .) + ccur reduce using rule 61 (arith -> comp .) + fi reduce using rule 61 (arith -> comp .) + less shift and go to state 121 + lesseq shift and go to state 122 + equal shift and go to state 123 + + +state 80 + + (65) comp -> op . + (66) op -> op . plus term + (67) op -> op . minus term + + less reduce using rule 65 (comp -> op .) + lesseq reduce using rule 65 (comp -> op .) + equal reduce using rule 65 (comp -> op .) + semi reduce using rule 65 (comp -> op .) + of reduce using rule 65 (comp -> op .) + then reduce using rule 65 (comp -> op .) + loop reduce using rule 65 (comp -> op .) + cpar reduce using rule 65 (comp -> op .) + comma reduce using rule 65 (comp -> op .) + in reduce using rule 65 (comp -> op .) + else reduce using rule 65 (comp -> op .) + pool reduce using rule 65 (comp -> op .) + error reduce using rule 65 (comp -> op .) + ccur reduce using rule 65 (comp -> op .) + fi reduce using rule 65 (comp -> op .) + plus shift and go to state 124 + minus shift and go to state 125 + + +state 81 + + (68) op -> term . + (69) term -> term . star base_call + (70) term -> term . div base_call + + plus reduce using rule 68 (op -> term .) + minus reduce using rule 68 (op -> term .) + less reduce using rule 68 (op -> term .) + lesseq reduce using rule 68 (op -> term .) + equal reduce using rule 68 (op -> term .) + semi reduce using rule 68 (op -> term .) + of reduce using rule 68 (op -> term .) + then reduce using rule 68 (op -> term .) + loop reduce using rule 68 (op -> term .) + cpar reduce using rule 68 (op -> term .) + comma reduce using rule 68 (op -> term .) + in reduce using rule 68 (op -> term .) + else reduce using rule 68 (op -> term .) + pool reduce using rule 68 (op -> term .) + error reduce using rule 68 (op -> term .) + ccur reduce using rule 68 (op -> term .) + fi reduce using rule 68 (op -> term .) + star shift and go to state 126 + div shift and go to state 127 + + +state 82 + + (73) term -> base_call . + + star reduce using rule 73 (term -> base_call .) + div reduce using rule 73 (term -> base_call .) + plus reduce using rule 73 (term -> base_call .) + minus reduce using rule 73 (term -> base_call .) + less reduce using rule 73 (term -> base_call .) + lesseq reduce using rule 73 (term -> base_call .) + equal reduce using rule 73 (term -> base_call .) + semi reduce using rule 73 (term -> base_call .) + of reduce using rule 73 (term -> base_call .) + then reduce using rule 73 (term -> base_call .) + loop reduce using rule 73 (term -> base_call .) + cpar reduce using rule 73 (term -> base_call .) + comma reduce using rule 73 (term -> base_call .) + in reduce using rule 73 (term -> base_call .) + else reduce using rule 73 (term -> base_call .) + pool reduce using rule 73 (term -> base_call .) + error reduce using rule 73 (term -> base_call .) + ccur reduce using rule 73 (term -> base_call .) + fi reduce using rule 73 (term -> base_call .) + + +state 83 + + (71) term -> isvoid . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + base_call shift and go to state 128 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 84 + + (72) term -> nox . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + base_call shift and go to state 129 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 85 + + (74) base_call -> factor . arroba type dot func_call + (75) base_call -> factor . + (78) factor -> factor . dot func_call + + arroba shift and go to state 130 + star reduce using rule 75 (base_call -> factor .) + div reduce using rule 75 (base_call -> factor .) + plus reduce using rule 75 (base_call -> factor .) + minus reduce using rule 75 (base_call -> factor .) + less reduce using rule 75 (base_call -> factor .) + lesseq reduce using rule 75 (base_call -> factor .) + equal reduce using rule 75 (base_call -> factor .) + semi reduce using rule 75 (base_call -> factor .) + of reduce using rule 75 (base_call -> factor .) + then reduce using rule 75 (base_call -> factor .) + loop reduce using rule 75 (base_call -> factor .) + cpar reduce using rule 75 (base_call -> factor .) + comma reduce using rule 75 (base_call -> factor .) + in reduce using rule 75 (base_call -> factor .) + else reduce using rule 75 (base_call -> factor .) + pool reduce using rule 75 (base_call -> factor .) + error reduce using rule 75 (base_call -> factor .) + ccur reduce using rule 75 (base_call -> factor .) + fi reduce using rule 75 (base_call -> factor .) + dot shift and go to state 131 + + +state 86 + + (79) factor -> func_call . + + arroba reduce using rule 79 (factor -> func_call .) + dot reduce using rule 79 (factor -> func_call .) + star reduce using rule 79 (factor -> func_call .) + div reduce using rule 79 (factor -> func_call .) + plus reduce using rule 79 (factor -> func_call .) + minus reduce using rule 79 (factor -> func_call .) + less reduce using rule 79 (factor -> func_call .) + lesseq reduce using rule 79 (factor -> func_call .) + equal reduce using rule 79 (factor -> func_call .) + semi reduce using rule 79 (factor -> func_call .) + of reduce using rule 79 (factor -> func_call .) + then reduce using rule 79 (factor -> func_call .) + loop reduce using rule 79 (factor -> func_call .) + cpar reduce using rule 79 (factor -> func_call .) + comma reduce using rule 79 (factor -> func_call .) + in reduce using rule 79 (factor -> func_call .) + else reduce using rule 79 (factor -> func_call .) + pool reduce using rule 79 (factor -> func_call .) + error reduce using rule 79 (factor -> func_call .) + ccur reduce using rule 79 (factor -> func_call .) + fi reduce using rule 79 (factor -> func_call .) + + +state 87 + + (76) factor -> atom . + + arroba reduce using rule 76 (factor -> atom .) + dot reduce using rule 76 (factor -> atom .) + star reduce using rule 76 (factor -> atom .) + div reduce using rule 76 (factor -> atom .) + plus reduce using rule 76 (factor -> atom .) + minus reduce using rule 76 (factor -> atom .) + less reduce using rule 76 (factor -> atom .) + lesseq reduce using rule 76 (factor -> atom .) + equal reduce using rule 76 (factor -> atom .) + semi reduce using rule 76 (factor -> atom .) + of reduce using rule 76 (factor -> atom .) + then reduce using rule 76 (factor -> atom .) + loop reduce using rule 76 (factor -> atom .) + cpar reduce using rule 76 (factor -> atom .) + comma reduce using rule 76 (factor -> atom .) + in reduce using rule 76 (factor -> atom .) + else reduce using rule 76 (factor -> atom .) + pool reduce using rule 76 (factor -> atom .) + error reduce using rule 76 (factor -> atom .) + ccur reduce using rule 76 (factor -> atom .) + fi reduce using rule 76 (factor -> atom .) + + +state 88 + + (77) factor -> opar . expr cpar + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 132 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 89 + + (80) atom -> num . + + arroba reduce using rule 80 (atom -> num .) + dot reduce using rule 80 (atom -> num .) + star reduce using rule 80 (atom -> num .) + div reduce using rule 80 (atom -> num .) + plus reduce using rule 80 (atom -> num .) + minus reduce using rule 80 (atom -> num .) + less reduce using rule 80 (atom -> num .) + lesseq reduce using rule 80 (atom -> num .) + equal reduce using rule 80 (atom -> num .) + semi reduce using rule 80 (atom -> num .) + of reduce using rule 80 (atom -> num .) + then reduce using rule 80 (atom -> num .) + loop reduce using rule 80 (atom -> num .) + cpar reduce using rule 80 (atom -> num .) + comma reduce using rule 80 (atom -> num .) + in reduce using rule 80 (atom -> num .) + else reduce using rule 80 (atom -> num .) + pool reduce using rule 80 (atom -> num .) + error reduce using rule 80 (atom -> num .) + ccur reduce using rule 80 (atom -> num .) + fi reduce using rule 80 (atom -> num .) + + +state 90 + + (82) atom -> new . type + (83) atom -> new . error + + type shift and go to state 133 + error shift and go to state 134 + + +state 91 + + (84) atom -> ocur . block ccur + (88) block -> . expr semi + (89) block -> . expr semi block + (90) block -> . error block + (91) block -> . error + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 137 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + block shift and go to state 135 + expr shift and go to state 136 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 92 + + (85) atom -> true . + + arroba reduce using rule 85 (atom -> true .) + dot reduce using rule 85 (atom -> true .) + star reduce using rule 85 (atom -> true .) + div reduce using rule 85 (atom -> true .) + plus reduce using rule 85 (atom -> true .) + minus reduce using rule 85 (atom -> true .) + less reduce using rule 85 (atom -> true .) + lesseq reduce using rule 85 (atom -> true .) + equal reduce using rule 85 (atom -> true .) + semi reduce using rule 85 (atom -> true .) + of reduce using rule 85 (atom -> true .) + then reduce using rule 85 (atom -> true .) + loop reduce using rule 85 (atom -> true .) + cpar reduce using rule 85 (atom -> true .) + comma reduce using rule 85 (atom -> true .) + in reduce using rule 85 (atom -> true .) + else reduce using rule 85 (atom -> true .) + pool reduce using rule 85 (atom -> true .) + error reduce using rule 85 (atom -> true .) + ccur reduce using rule 85 (atom -> true .) + fi reduce using rule 85 (atom -> true .) + + +state 93 + + (86) atom -> false . + + arroba reduce using rule 86 (atom -> false .) + dot reduce using rule 86 (atom -> false .) + star reduce using rule 86 (atom -> false .) + div reduce using rule 86 (atom -> false .) + plus reduce using rule 86 (atom -> false .) + minus reduce using rule 86 (atom -> false .) + less reduce using rule 86 (atom -> false .) + lesseq reduce using rule 86 (atom -> false .) + equal reduce using rule 86 (atom -> false .) + semi reduce using rule 86 (atom -> false .) + of reduce using rule 86 (atom -> false .) + then reduce using rule 86 (atom -> false .) + loop reduce using rule 86 (atom -> false .) + cpar reduce using rule 86 (atom -> false .) + comma reduce using rule 86 (atom -> false .) + in reduce using rule 86 (atom -> false .) + else reduce using rule 86 (atom -> false .) + pool reduce using rule 86 (atom -> false .) + error reduce using rule 86 (atom -> false .) + ccur reduce using rule 86 (atom -> false .) + fi reduce using rule 86 (atom -> false .) + + +state 94 + + (87) atom -> string . + + arroba reduce using rule 87 (atom -> string .) + dot reduce using rule 87 (atom -> string .) + star reduce using rule 87 (atom -> string .) + div reduce using rule 87 (atom -> string .) + plus reduce using rule 87 (atom -> string .) + minus reduce using rule 87 (atom -> string .) + less reduce using rule 87 (atom -> string .) + lesseq reduce using rule 87 (atom -> string .) + equal reduce using rule 87 (atom -> string .) + semi reduce using rule 87 (atom -> string .) + of reduce using rule 87 (atom -> string .) + then reduce using rule 87 (atom -> string .) + loop reduce using rule 87 (atom -> string .) + cpar reduce using rule 87 (atom -> string .) + comma reduce using rule 87 (atom -> string .) + in reduce using rule 87 (atom -> string .) + else reduce using rule 87 (atom -> string .) + pool reduce using rule 87 (atom -> string .) + error reduce using rule 87 (atom -> string .) + ccur reduce using rule 87 (atom -> string .) + fi reduce using rule 87 (atom -> string .) + + +state 95 + + (24) def_func -> error opar formals cpar colon . type ocur expr ccur + + type shift and go to state 138 + + +state 96 + + (31) param_list -> param comma param_list . + + cpar reduce using rule 31 (param_list -> param comma param_list .) + + +state 97 + + (34) param -> id colon type . + + comma reduce using rule 34 (param -> id colon type .) + cpar reduce using rule 34 (param -> id colon type .) + larrow reduce using rule 34 (param -> id colon type .) + in reduce using rule 34 (param -> id colon type .) + + +state 98 + + (17) def_attr -> id colon type larrow expr . + + semi reduce using rule 17 (def_attr -> id colon type larrow expr .) + + +state 99 + + (22) def_attr -> id colon type larrow error . + + semi reduce using rule 22 (def_attr -> id colon type larrow error .) + + +state 100 + + (21) def_attr -> id colon error larrow expr . + + semi reduce using rule 21 (def_attr -> id colon error larrow expr .) + + +state 101 + + (23) def_func -> id opar formals cpar colon . type ocur expr ccur + (26) def_func -> id opar formals cpar colon . error ocur expr ccur + (27) def_func -> id opar formals cpar colon . type ocur error ccur + + type shift and go to state 139 + error shift and go to state 140 + + +state 102 + + (25) def_func -> id opar error cpar colon . type ocur expr ccur + + type shift and go to state 141 + + +state 103 + + (7) def_class -> class type inherits type ocur feature_list ccur semi . + + error reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + class reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + $end reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + + +state 104 + + (11) def_class -> class type inherits error ocur feature_list ccur semi . + + error reduce using rule 11 (def_class -> class type inherits error ocur feature_list ccur semi .) + class reduce using rule 11 (def_class -> class type inherits error ocur feature_list ccur semi .) + $end reduce using rule 11 (def_class -> class type inherits error ocur feature_list ccur semi .) + + +state 105 + + (10) def_class -> class error inherits error ocur feature_list ccur semi . + + error reduce using rule 10 (def_class -> class error inherits error ocur feature_list ccur semi .) + class reduce using rule 10 (def_class -> class error inherits error ocur feature_list ccur semi .) + $end reduce using rule 10 (def_class -> class error inherits error ocur feature_list ccur semi .) + + +state 106 + + (9) def_class -> class error inherits type ocur feature_list ccur semi . + + error reduce using rule 9 (def_class -> class error inherits type ocur feature_list ccur semi .) + class reduce using rule 9 (def_class -> class error inherits type ocur feature_list ccur semi .) + $end reduce using rule 9 (def_class -> class error inherits type ocur feature_list ccur semi .) + + +state 107 + + (35) expr -> let let_list . in expr + (37) expr -> let let_list . in error + + in shift and go to state 142 + + +state 108 + + (36) expr -> let error . in expr + (52) let_list -> error . let_list + (50) let_list -> . let_assign + (51) let_list -> . let_assign comma let_list + (52) let_list -> . error let_list + (53) let_assign -> . param larrow expr + (54) let_assign -> . param + (34) param -> . id colon type + + in shift and go to state 144 + error shift and go to state 143 + id shift and go to state 48 + + let_list shift and go to state 145 + let_assign shift and go to state 109 + param shift and go to state 110 + +state 109 + + (50) let_list -> let_assign . + (51) let_list -> let_assign . comma let_list + + in reduce using rule 50 (let_list -> let_assign .) + comma shift and go to state 146 + + +state 110 + + (53) let_assign -> param . larrow expr + (54) let_assign -> param . + + larrow shift and go to state 147 + comma reduce using rule 54 (let_assign -> param .) + in reduce using rule 54 (let_assign -> param .) + + +state 111 + + (38) expr -> case expr . of cases_list esac + (40) expr -> case expr . of error esac + + of shift and go to state 148 + + +state 112 + + (39) expr -> case error . of cases_list esac + + of shift and go to state 149 + + +state 113 + + (41) expr -> if expr . then expr else expr fi + (43) expr -> if expr . then error else expr fi + (44) expr -> if expr . then expr else error fi + + then shift and go to state 150 + + +state 114 + + (42) expr -> if error . then expr else expr fi + + then shift and go to state 151 + + +state 115 + + (45) expr -> while expr . loop expr pool + (47) expr -> while expr . loop error pool + (48) expr -> while expr . loop expr error + + loop shift and go to state 152 + + +state 116 + + (46) expr -> while error . loop expr pool + + loop shift and go to state 153 + + +state 117 + + (59) arith -> id larrow . expr + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 154 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 118 + + (92) func_call -> id opar . args cpar + (93) args -> . arg_list + (94) args -> . arg_list_empty + (95) arg_list -> . expr + (96) arg_list -> . expr comma arg_list + (97) arg_list -> . error arg_list + (98) arg_list_empty -> . epsilon + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (2) epsilon -> . + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 159 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + cpar reduce using rule 2 (epsilon -> .) + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + args shift and go to state 155 + arg_list shift and go to state 156 + arg_list_empty shift and go to state 157 + expr shift and go to state 158 + epsilon shift and go to state 160 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 119 + + (60) arith -> not comp . + (62) comp -> comp . less op + (63) comp -> comp . lesseq op + (64) comp -> comp . equal op + + semi reduce using rule 60 (arith -> not comp .) + of reduce using rule 60 (arith -> not comp .) + then reduce using rule 60 (arith -> not comp .) + loop reduce using rule 60 (arith -> not comp .) + cpar reduce using rule 60 (arith -> not comp .) + comma reduce using rule 60 (arith -> not comp .) + in reduce using rule 60 (arith -> not comp .) + else reduce using rule 60 (arith -> not comp .) + pool reduce using rule 60 (arith -> not comp .) + error reduce using rule 60 (arith -> not comp .) + ccur reduce using rule 60 (arith -> not comp .) + fi reduce using rule 60 (arith -> not comp .) + less shift and go to state 121 + lesseq shift and go to state 122 + equal shift and go to state 123 + + +state 120 + + (81) atom -> id . + (92) func_call -> id . opar args cpar + + arroba reduce using rule 81 (atom -> id .) + dot reduce using rule 81 (atom -> id .) + star reduce using rule 81 (atom -> id .) + div reduce using rule 81 (atom -> id .) + plus reduce using rule 81 (atom -> id .) + minus reduce using rule 81 (atom -> id .) + less reduce using rule 81 (atom -> id .) + lesseq reduce using rule 81 (atom -> id .) + equal reduce using rule 81 (atom -> id .) + semi reduce using rule 81 (atom -> id .) + of reduce using rule 81 (atom -> id .) + then reduce using rule 81 (atom -> id .) + loop reduce using rule 81 (atom -> id .) + cpar reduce using rule 81 (atom -> id .) + comma reduce using rule 81 (atom -> id .) + in reduce using rule 81 (atom -> id .) + else reduce using rule 81 (atom -> id .) + pool reduce using rule 81 (atom -> id .) + error reduce using rule 81 (atom -> id .) + ccur reduce using rule 81 (atom -> id .) + fi reduce using rule 81 (atom -> id .) + opar shift and go to state 118 + + +state 121 + + (62) comp -> comp less . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + op shift and go to state 161 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 122 + + (63) comp -> comp lesseq . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + op shift and go to state 162 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 123 + + (64) comp -> comp equal . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + op shift and go to state 163 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 124 + + (66) op -> op plus . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + term shift and go to state 164 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 125 + + (67) op -> op minus . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + term shift and go to state 165 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 126 + + (69) term -> term star . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + base_call shift and go to state 166 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 127 + + (70) term -> term div . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + opar shift and go to state 88 + num shift and go to state 89 + id shift and go to state 120 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + base_call shift and go to state 167 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 128 + + (71) term -> isvoid base_call . + + star reduce using rule 71 (term -> isvoid base_call .) + div reduce using rule 71 (term -> isvoid base_call .) + plus reduce using rule 71 (term -> isvoid base_call .) + minus reduce using rule 71 (term -> isvoid base_call .) + less reduce using rule 71 (term -> isvoid base_call .) + lesseq reduce using rule 71 (term -> isvoid base_call .) + equal reduce using rule 71 (term -> isvoid base_call .) + semi reduce using rule 71 (term -> isvoid base_call .) + of reduce using rule 71 (term -> isvoid base_call .) + then reduce using rule 71 (term -> isvoid base_call .) + loop reduce using rule 71 (term -> isvoid base_call .) + cpar reduce using rule 71 (term -> isvoid base_call .) + comma reduce using rule 71 (term -> isvoid base_call .) + in reduce using rule 71 (term -> isvoid base_call .) + else reduce using rule 71 (term -> isvoid base_call .) + pool reduce using rule 71 (term -> isvoid base_call .) + error reduce using rule 71 (term -> isvoid base_call .) + ccur reduce using rule 71 (term -> isvoid base_call .) + fi reduce using rule 71 (term -> isvoid base_call .) + + +state 129 + + (72) term -> nox base_call . + + star reduce using rule 72 (term -> nox base_call .) + div reduce using rule 72 (term -> nox base_call .) + plus reduce using rule 72 (term -> nox base_call .) + minus reduce using rule 72 (term -> nox base_call .) + less reduce using rule 72 (term -> nox base_call .) + lesseq reduce using rule 72 (term -> nox base_call .) + equal reduce using rule 72 (term -> nox base_call .) + semi reduce using rule 72 (term -> nox base_call .) + of reduce using rule 72 (term -> nox base_call .) + then reduce using rule 72 (term -> nox base_call .) + loop reduce using rule 72 (term -> nox base_call .) + cpar reduce using rule 72 (term -> nox base_call .) + comma reduce using rule 72 (term -> nox base_call .) + in reduce using rule 72 (term -> nox base_call .) + else reduce using rule 72 (term -> nox base_call .) + pool reduce using rule 72 (term -> nox base_call .) + error reduce using rule 72 (term -> nox base_call .) + ccur reduce using rule 72 (term -> nox base_call .) + fi reduce using rule 72 (term -> nox base_call .) + + +state 130 + + (74) base_call -> factor arroba . type dot func_call + + type shift and go to state 168 + + +state 131 + + (78) factor -> factor dot . func_call + (92) func_call -> . id opar args cpar + + id shift and go to state 170 + + func_call shift and go to state 169 + +state 132 + + (77) factor -> opar expr . cpar + + cpar shift and go to state 171 + + +state 133 + + (82) atom -> new type . + + arroba reduce using rule 82 (atom -> new type .) + dot reduce using rule 82 (atom -> new type .) + star reduce using rule 82 (atom -> new type .) + div reduce using rule 82 (atom -> new type .) + plus reduce using rule 82 (atom -> new type .) + minus reduce using rule 82 (atom -> new type .) + less reduce using rule 82 (atom -> new type .) + lesseq reduce using rule 82 (atom -> new type .) + equal reduce using rule 82 (atom -> new type .) + semi reduce using rule 82 (atom -> new type .) + of reduce using rule 82 (atom -> new type .) + then reduce using rule 82 (atom -> new type .) + loop reduce using rule 82 (atom -> new type .) + cpar reduce using rule 82 (atom -> new type .) + comma reduce using rule 82 (atom -> new type .) + in reduce using rule 82 (atom -> new type .) + else reduce using rule 82 (atom -> new type .) + pool reduce using rule 82 (atom -> new type .) + error reduce using rule 82 (atom -> new type .) + ccur reduce using rule 82 (atom -> new type .) + fi reduce using rule 82 (atom -> new type .) + + +state 134 + + (83) atom -> new error . + + arroba reduce using rule 83 (atom -> new error .) + dot reduce using rule 83 (atom -> new error .) + star reduce using rule 83 (atom -> new error .) + div reduce using rule 83 (atom -> new error .) + plus reduce using rule 83 (atom -> new error .) + minus reduce using rule 83 (atom -> new error .) + less reduce using rule 83 (atom -> new error .) + lesseq reduce using rule 83 (atom -> new error .) + equal reduce using rule 83 (atom -> new error .) + semi reduce using rule 83 (atom -> new error .) + of reduce using rule 83 (atom -> new error .) + then reduce using rule 83 (atom -> new error .) + loop reduce using rule 83 (atom -> new error .) + cpar reduce using rule 83 (atom -> new error .) + comma reduce using rule 83 (atom -> new error .) + in reduce using rule 83 (atom -> new error .) + else reduce using rule 83 (atom -> new error .) + pool reduce using rule 83 (atom -> new error .) + error reduce using rule 83 (atom -> new error .) + ccur reduce using rule 83 (atom -> new error .) + fi reduce using rule 83 (atom -> new error .) + + +state 135 + + (84) atom -> ocur block . ccur + + ccur shift and go to state 172 + + +state 136 + + (88) block -> expr . semi + (89) block -> expr . semi block + + semi shift and go to state 173 + + +state 137 + + (90) block -> error . block + (91) block -> error . + (88) block -> . expr semi + (89) block -> . expr semi block + (90) block -> . error block + (91) block -> . error + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + ccur reduce using rule 91 (block -> error .) + error shift and go to state 137 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + block shift and go to state 174 + expr shift and go to state 136 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 138 + + (24) def_func -> error opar formals cpar colon type . ocur expr ccur + + ocur shift and go to state 175 + + +state 139 + + (23) def_func -> id opar formals cpar colon type . ocur expr ccur + (27) def_func -> id opar formals cpar colon type . ocur error ccur + + ocur shift and go to state 176 + + +state 140 + + (26) def_func -> id opar formals cpar colon error . ocur expr ccur + + ocur shift and go to state 177 + + +state 141 + + (25) def_func -> id opar error cpar colon type . ocur expr ccur + + ocur shift and go to state 178 + + +state 142 + + (35) expr -> let let_list in . expr + (37) expr -> let let_list in . error + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 180 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 179 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 143 + + (52) let_list -> error . let_list + (50) let_list -> . let_assign + (51) let_list -> . let_assign comma let_list + (52) let_list -> . error let_list + (53) let_assign -> . param larrow expr + (54) let_assign -> . param + (34) param -> . id colon type + + error shift and go to state 143 + id shift and go to state 48 + + let_list shift and go to state 145 + let_assign shift and go to state 109 + param shift and go to state 110 + +state 144 + + (36) expr -> let error in . expr + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 181 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 145 + + (52) let_list -> error let_list . + + in reduce using rule 52 (let_list -> error let_list .) + + +state 146 + + (51) let_list -> let_assign comma . let_list + (50) let_list -> . let_assign + (51) let_list -> . let_assign comma let_list + (52) let_list -> . error let_list + (53) let_assign -> . param larrow expr + (54) let_assign -> . param + (34) param -> . id colon type + + error shift and go to state 143 + id shift and go to state 48 + + let_assign shift and go to state 109 + let_list shift and go to state 182 + param shift and go to state 110 + +state 147 + + (53) let_assign -> param larrow . expr + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 183 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 148 + + (38) expr -> case expr of . cases_list esac + (40) expr -> case expr of . error esac + (55) cases_list -> . casep semi + (56) cases_list -> . casep semi cases_list + (57) cases_list -> . error cases_list + (58) casep -> . id colon type rarrow expr + + error shift and go to state 185 + id shift and go to state 187 + + cases_list shift and go to state 184 + casep shift and go to state 186 + +state 149 + + (39) expr -> case error of . cases_list esac + (55) cases_list -> . casep semi + (56) cases_list -> . casep semi cases_list + (57) cases_list -> . error cases_list + (58) casep -> . id colon type rarrow expr + + error shift and go to state 188 + id shift and go to state 187 + + cases_list shift and go to state 189 + casep shift and go to state 186 + +state 150 + + (41) expr -> if expr then . expr else expr fi + (43) expr -> if expr then . error else expr fi + (44) expr -> if expr then . expr else error fi + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 191 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 190 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 151 + + (42) expr -> if error then . expr else expr fi + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 192 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 152 + + (45) expr -> while expr loop . expr pool + (47) expr -> while expr loop . error pool + (48) expr -> while expr loop . expr error + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 194 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 193 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 153 + + (46) expr -> while error loop . expr pool + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 195 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 154 + + (59) arith -> id larrow expr . + + semi reduce using rule 59 (arith -> id larrow expr .) + of reduce using rule 59 (arith -> id larrow expr .) + then reduce using rule 59 (arith -> id larrow expr .) + loop reduce using rule 59 (arith -> id larrow expr .) + cpar reduce using rule 59 (arith -> id larrow expr .) + comma reduce using rule 59 (arith -> id larrow expr .) + in reduce using rule 59 (arith -> id larrow expr .) + else reduce using rule 59 (arith -> id larrow expr .) + pool reduce using rule 59 (arith -> id larrow expr .) + error reduce using rule 59 (arith -> id larrow expr .) + ccur reduce using rule 59 (arith -> id larrow expr .) + fi reduce using rule 59 (arith -> id larrow expr .) + + +state 155 + + (92) func_call -> id opar args . cpar + + cpar shift and go to state 196 + + +state 156 + + (93) args -> arg_list . + + cpar reduce using rule 93 (args -> arg_list .) + + +state 157 + + (94) args -> arg_list_empty . + + cpar reduce using rule 94 (args -> arg_list_empty .) + + +state 158 + + (95) arg_list -> expr . + (96) arg_list -> expr . comma arg_list + + cpar reduce using rule 95 (arg_list -> expr .) + comma shift and go to state 197 + + +state 159 + + (97) arg_list -> error . arg_list + (95) arg_list -> . expr + (96) arg_list -> . expr comma arg_list + (97) arg_list -> . error arg_list + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 159 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + arg_list shift and go to state 198 + expr shift and go to state 158 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 160 + + (98) arg_list_empty -> epsilon . + + cpar reduce using rule 98 (arg_list_empty -> epsilon .) + + +state 161 + + (62) comp -> comp less op . + (66) op -> op . plus term + (67) op -> op . minus term + + less reduce using rule 62 (comp -> comp less op .) + lesseq reduce using rule 62 (comp -> comp less op .) + equal reduce using rule 62 (comp -> comp less op .) + semi reduce using rule 62 (comp -> comp less op .) + of reduce using rule 62 (comp -> comp less op .) + then reduce using rule 62 (comp -> comp less op .) + loop reduce using rule 62 (comp -> comp less op .) + cpar reduce using rule 62 (comp -> comp less op .) + comma reduce using rule 62 (comp -> comp less op .) + in reduce using rule 62 (comp -> comp less op .) + else reduce using rule 62 (comp -> comp less op .) + pool reduce using rule 62 (comp -> comp less op .) + error reduce using rule 62 (comp -> comp less op .) + ccur reduce using rule 62 (comp -> comp less op .) + fi reduce using rule 62 (comp -> comp less op .) + plus shift and go to state 124 + minus shift and go to state 125 + + +state 162 + + (63) comp -> comp lesseq op . + (66) op -> op . plus term + (67) op -> op . minus term + + less reduce using rule 63 (comp -> comp lesseq op .) + lesseq reduce using rule 63 (comp -> comp lesseq op .) + equal reduce using rule 63 (comp -> comp lesseq op .) + semi reduce using rule 63 (comp -> comp lesseq op .) + of reduce using rule 63 (comp -> comp lesseq op .) + then reduce using rule 63 (comp -> comp lesseq op .) + loop reduce using rule 63 (comp -> comp lesseq op .) + cpar reduce using rule 63 (comp -> comp lesseq op .) + comma reduce using rule 63 (comp -> comp lesseq op .) + in reduce using rule 63 (comp -> comp lesseq op .) + else reduce using rule 63 (comp -> comp lesseq op .) + pool reduce using rule 63 (comp -> comp lesseq op .) + error reduce using rule 63 (comp -> comp lesseq op .) + ccur reduce using rule 63 (comp -> comp lesseq op .) + fi reduce using rule 63 (comp -> comp lesseq op .) + plus shift and go to state 124 + minus shift and go to state 125 + + +state 163 + + (64) comp -> comp equal op . + (66) op -> op . plus term + (67) op -> op . minus term + + less reduce using rule 64 (comp -> comp equal op .) + lesseq reduce using rule 64 (comp -> comp equal op .) + equal reduce using rule 64 (comp -> comp equal op .) + semi reduce using rule 64 (comp -> comp equal op .) + of reduce using rule 64 (comp -> comp equal op .) + then reduce using rule 64 (comp -> comp equal op .) + loop reduce using rule 64 (comp -> comp equal op .) + cpar reduce using rule 64 (comp -> comp equal op .) + comma reduce using rule 64 (comp -> comp equal op .) + in reduce using rule 64 (comp -> comp equal op .) + else reduce using rule 64 (comp -> comp equal op .) + pool reduce using rule 64 (comp -> comp equal op .) + error reduce using rule 64 (comp -> comp equal op .) + ccur reduce using rule 64 (comp -> comp equal op .) + fi reduce using rule 64 (comp -> comp equal op .) + plus shift and go to state 124 + minus shift and go to state 125 + + +state 164 + + (66) op -> op plus term . + (69) term -> term . star base_call + (70) term -> term . div base_call + + plus reduce using rule 66 (op -> op plus term .) + minus reduce using rule 66 (op -> op plus term .) + less reduce using rule 66 (op -> op plus term .) + lesseq reduce using rule 66 (op -> op plus term .) + equal reduce using rule 66 (op -> op plus term .) + semi reduce using rule 66 (op -> op plus term .) + of reduce using rule 66 (op -> op plus term .) + then reduce using rule 66 (op -> op plus term .) + loop reduce using rule 66 (op -> op plus term .) + cpar reduce using rule 66 (op -> op plus term .) + comma reduce using rule 66 (op -> op plus term .) + in reduce using rule 66 (op -> op plus term .) + else reduce using rule 66 (op -> op plus term .) + pool reduce using rule 66 (op -> op plus term .) + error reduce using rule 66 (op -> op plus term .) + ccur reduce using rule 66 (op -> op plus term .) + fi reduce using rule 66 (op -> op plus term .) + star shift and go to state 126 + div shift and go to state 127 + + +state 165 + + (67) op -> op minus term . + (69) term -> term . star base_call + (70) term -> term . div base_call + + plus reduce using rule 67 (op -> op minus term .) + minus reduce using rule 67 (op -> op minus term .) + less reduce using rule 67 (op -> op minus term .) + lesseq reduce using rule 67 (op -> op minus term .) + equal reduce using rule 67 (op -> op minus term .) + semi reduce using rule 67 (op -> op minus term .) + of reduce using rule 67 (op -> op minus term .) + then reduce using rule 67 (op -> op minus term .) + loop reduce using rule 67 (op -> op minus term .) + cpar reduce using rule 67 (op -> op minus term .) + comma reduce using rule 67 (op -> op minus term .) + in reduce using rule 67 (op -> op minus term .) + else reduce using rule 67 (op -> op minus term .) + pool reduce using rule 67 (op -> op minus term .) + error reduce using rule 67 (op -> op minus term .) + ccur reduce using rule 67 (op -> op minus term .) + fi reduce using rule 67 (op -> op minus term .) + star shift and go to state 126 + div shift and go to state 127 + + +state 166 + + (69) term -> term star base_call . + + star reduce using rule 69 (term -> term star base_call .) + div reduce using rule 69 (term -> term star base_call .) + plus reduce using rule 69 (term -> term star base_call .) + minus reduce using rule 69 (term -> term star base_call .) + less reduce using rule 69 (term -> term star base_call .) + lesseq reduce using rule 69 (term -> term star base_call .) + equal reduce using rule 69 (term -> term star base_call .) + semi reduce using rule 69 (term -> term star base_call .) + of reduce using rule 69 (term -> term star base_call .) + then reduce using rule 69 (term -> term star base_call .) + loop reduce using rule 69 (term -> term star base_call .) + cpar reduce using rule 69 (term -> term star base_call .) + comma reduce using rule 69 (term -> term star base_call .) + in reduce using rule 69 (term -> term star base_call .) + else reduce using rule 69 (term -> term star base_call .) + pool reduce using rule 69 (term -> term star base_call .) + error reduce using rule 69 (term -> term star base_call .) + ccur reduce using rule 69 (term -> term star base_call .) + fi reduce using rule 69 (term -> term star base_call .) + + +state 167 + + (70) term -> term div base_call . + + star reduce using rule 70 (term -> term div base_call .) + div reduce using rule 70 (term -> term div base_call .) + plus reduce using rule 70 (term -> term div base_call .) + minus reduce using rule 70 (term -> term div base_call .) + less reduce using rule 70 (term -> term div base_call .) + lesseq reduce using rule 70 (term -> term div base_call .) + equal reduce using rule 70 (term -> term div base_call .) + semi reduce using rule 70 (term -> term div base_call .) + of reduce using rule 70 (term -> term div base_call .) + then reduce using rule 70 (term -> term div base_call .) + loop reduce using rule 70 (term -> term div base_call .) + cpar reduce using rule 70 (term -> term div base_call .) + comma reduce using rule 70 (term -> term div base_call .) + in reduce using rule 70 (term -> term div base_call .) + else reduce using rule 70 (term -> term div base_call .) + pool reduce using rule 70 (term -> term div base_call .) + error reduce using rule 70 (term -> term div base_call .) + ccur reduce using rule 70 (term -> term div base_call .) + fi reduce using rule 70 (term -> term div base_call .) + + +state 168 + + (74) base_call -> factor arroba type . dot func_call + + dot shift and go to state 199 + + +state 169 + + (78) factor -> factor dot func_call . + + arroba reduce using rule 78 (factor -> factor dot func_call .) + dot reduce using rule 78 (factor -> factor dot func_call .) + star reduce using rule 78 (factor -> factor dot func_call .) + div reduce using rule 78 (factor -> factor dot func_call .) + plus reduce using rule 78 (factor -> factor dot func_call .) + minus reduce using rule 78 (factor -> factor dot func_call .) + less reduce using rule 78 (factor -> factor dot func_call .) + lesseq reduce using rule 78 (factor -> factor dot func_call .) + equal reduce using rule 78 (factor -> factor dot func_call .) + semi reduce using rule 78 (factor -> factor dot func_call .) + of reduce using rule 78 (factor -> factor dot func_call .) + then reduce using rule 78 (factor -> factor dot func_call .) + loop reduce using rule 78 (factor -> factor dot func_call .) + cpar reduce using rule 78 (factor -> factor dot func_call .) + comma reduce using rule 78 (factor -> factor dot func_call .) + in reduce using rule 78 (factor -> factor dot func_call .) + else reduce using rule 78 (factor -> factor dot func_call .) + pool reduce using rule 78 (factor -> factor dot func_call .) + error reduce using rule 78 (factor -> factor dot func_call .) + ccur reduce using rule 78 (factor -> factor dot func_call .) + fi reduce using rule 78 (factor -> factor dot func_call .) + + +state 170 + + (92) func_call -> id . opar args cpar + + opar shift and go to state 118 + + +state 171 + + (77) factor -> opar expr cpar . + + arroba reduce using rule 77 (factor -> opar expr cpar .) + dot reduce using rule 77 (factor -> opar expr cpar .) + star reduce using rule 77 (factor -> opar expr cpar .) + div reduce using rule 77 (factor -> opar expr cpar .) + plus reduce using rule 77 (factor -> opar expr cpar .) + minus reduce using rule 77 (factor -> opar expr cpar .) + less reduce using rule 77 (factor -> opar expr cpar .) + lesseq reduce using rule 77 (factor -> opar expr cpar .) + equal reduce using rule 77 (factor -> opar expr cpar .) + semi reduce using rule 77 (factor -> opar expr cpar .) + of reduce using rule 77 (factor -> opar expr cpar .) + then reduce using rule 77 (factor -> opar expr cpar .) + loop reduce using rule 77 (factor -> opar expr cpar .) + cpar reduce using rule 77 (factor -> opar expr cpar .) + comma reduce using rule 77 (factor -> opar expr cpar .) + in reduce using rule 77 (factor -> opar expr cpar .) + else reduce using rule 77 (factor -> opar expr cpar .) + pool reduce using rule 77 (factor -> opar expr cpar .) + error reduce using rule 77 (factor -> opar expr cpar .) + ccur reduce using rule 77 (factor -> opar expr cpar .) + fi reduce using rule 77 (factor -> opar expr cpar .) + + +state 172 + + (84) atom -> ocur block ccur . + + arroba reduce using rule 84 (atom -> ocur block ccur .) + dot reduce using rule 84 (atom -> ocur block ccur .) + star reduce using rule 84 (atom -> ocur block ccur .) + div reduce using rule 84 (atom -> ocur block ccur .) + plus reduce using rule 84 (atom -> ocur block ccur .) + minus reduce using rule 84 (atom -> ocur block ccur .) + less reduce using rule 84 (atom -> ocur block ccur .) + lesseq reduce using rule 84 (atom -> ocur block ccur .) + equal reduce using rule 84 (atom -> ocur block ccur .) + semi reduce using rule 84 (atom -> ocur block ccur .) + of reduce using rule 84 (atom -> ocur block ccur .) + then reduce using rule 84 (atom -> ocur block ccur .) + loop reduce using rule 84 (atom -> ocur block ccur .) + cpar reduce using rule 84 (atom -> ocur block ccur .) + comma reduce using rule 84 (atom -> ocur block ccur .) + in reduce using rule 84 (atom -> ocur block ccur .) + else reduce using rule 84 (atom -> ocur block ccur .) + pool reduce using rule 84 (atom -> ocur block ccur .) + error reduce using rule 84 (atom -> ocur block ccur .) + ccur reduce using rule 84 (atom -> ocur block ccur .) + fi reduce using rule 84 (atom -> ocur block ccur .) + + +state 173 + + (88) block -> expr semi . + (89) block -> expr semi . block + (88) block -> . expr semi + (89) block -> . expr semi block + (90) block -> . error block + (91) block -> . error + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + ccur reduce using rule 88 (block -> expr semi .) + error shift and go to state 137 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 136 + block shift and go to state 200 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 174 + + (90) block -> error block . + + ccur reduce using rule 90 (block -> error block .) + + +state 175 + + (24) def_func -> error opar formals cpar colon type ocur . expr ccur + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 201 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 176 + + (23) def_func -> id opar formals cpar colon type ocur . expr ccur + (27) def_func -> id opar formals cpar colon type ocur . error ccur + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 203 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 202 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 177 + + (26) def_func -> id opar formals cpar colon error ocur . expr ccur + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 204 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 178 + + (25) def_func -> id opar error cpar colon type ocur . expr ccur + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 205 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 179 + + (35) expr -> let let_list in expr . + + semi reduce using rule 35 (expr -> let let_list in expr .) + of reduce using rule 35 (expr -> let let_list in expr .) + then reduce using rule 35 (expr -> let let_list in expr .) + loop reduce using rule 35 (expr -> let let_list in expr .) + cpar reduce using rule 35 (expr -> let let_list in expr .) + comma reduce using rule 35 (expr -> let let_list in expr .) + in reduce using rule 35 (expr -> let let_list in expr .) + else reduce using rule 35 (expr -> let let_list in expr .) + pool reduce using rule 35 (expr -> let let_list in expr .) + error reduce using rule 35 (expr -> let let_list in expr .) + ccur reduce using rule 35 (expr -> let let_list in expr .) + fi reduce using rule 35 (expr -> let let_list in expr .) + + +state 180 + + (37) expr -> let let_list in error . + + semi reduce using rule 37 (expr -> let let_list in error .) + of reduce using rule 37 (expr -> let let_list in error .) + then reduce using rule 37 (expr -> let let_list in error .) + loop reduce using rule 37 (expr -> let let_list in error .) + cpar reduce using rule 37 (expr -> let let_list in error .) + comma reduce using rule 37 (expr -> let let_list in error .) + in reduce using rule 37 (expr -> let let_list in error .) + else reduce using rule 37 (expr -> let let_list in error .) + pool reduce using rule 37 (expr -> let let_list in error .) + error reduce using rule 37 (expr -> let let_list in error .) + ccur reduce using rule 37 (expr -> let let_list in error .) + fi reduce using rule 37 (expr -> let let_list in error .) + + +state 181 + + (36) expr -> let error in expr . + + semi reduce using rule 36 (expr -> let error in expr .) + of reduce using rule 36 (expr -> let error in expr .) + then reduce using rule 36 (expr -> let error in expr .) + loop reduce using rule 36 (expr -> let error in expr .) + cpar reduce using rule 36 (expr -> let error in expr .) + comma reduce using rule 36 (expr -> let error in expr .) + in reduce using rule 36 (expr -> let error in expr .) + else reduce using rule 36 (expr -> let error in expr .) + pool reduce using rule 36 (expr -> let error in expr .) + error reduce using rule 36 (expr -> let error in expr .) + ccur reduce using rule 36 (expr -> let error in expr .) + fi reduce using rule 36 (expr -> let error in expr .) + + +state 182 + + (51) let_list -> let_assign comma let_list . + + in reduce using rule 51 (let_list -> let_assign comma let_list .) + + +state 183 + + (53) let_assign -> param larrow expr . + + comma reduce using rule 53 (let_assign -> param larrow expr .) + in reduce using rule 53 (let_assign -> param larrow expr .) + + +state 184 + + (38) expr -> case expr of cases_list . esac + + esac shift and go to state 206 + + +state 185 + + (40) expr -> case expr of error . esac + (57) cases_list -> error . cases_list + (55) cases_list -> . casep semi + (56) cases_list -> . casep semi cases_list + (57) cases_list -> . error cases_list + (58) casep -> . id colon type rarrow expr + + esac shift and go to state 207 + error shift and go to state 188 + id shift and go to state 187 + + cases_list shift and go to state 208 + casep shift and go to state 186 + +state 186 + + (55) cases_list -> casep . semi + (56) cases_list -> casep . semi cases_list + + semi shift and go to state 209 + + +state 187 + + (58) casep -> id . colon type rarrow expr + + colon shift and go to state 210 + + +state 188 + + (57) cases_list -> error . cases_list + (55) cases_list -> . casep semi + (56) cases_list -> . casep semi cases_list + (57) cases_list -> . error cases_list + (58) casep -> . id colon type rarrow expr + + error shift and go to state 188 + id shift and go to state 187 + + cases_list shift and go to state 208 + casep shift and go to state 186 + +state 189 + + (39) expr -> case error of cases_list . esac + + esac shift and go to state 211 + + +state 190 + + (41) expr -> if expr then expr . else expr fi + (44) expr -> if expr then expr . else error fi + + else shift and go to state 212 + + +state 191 + + (43) expr -> if expr then error . else expr fi + + else shift and go to state 213 + + +state 192 + + (42) expr -> if error then expr . else expr fi + + else shift and go to state 214 + + +state 193 + + (45) expr -> while expr loop expr . pool + (48) expr -> while expr loop expr . error + + pool shift and go to state 215 + error shift and go to state 216 + + +state 194 + + (47) expr -> while expr loop error . pool + + pool shift and go to state 217 + + +state 195 + + (46) expr -> while error loop expr . pool + + pool shift and go to state 218 + + +state 196 + + (92) func_call -> id opar args cpar . + + arroba reduce using rule 92 (func_call -> id opar args cpar .) + dot reduce using rule 92 (func_call -> id opar args cpar .) + star reduce using rule 92 (func_call -> id opar args cpar .) + div reduce using rule 92 (func_call -> id opar args cpar .) + plus reduce using rule 92 (func_call -> id opar args cpar .) + minus reduce using rule 92 (func_call -> id opar args cpar .) + less reduce using rule 92 (func_call -> id opar args cpar .) + lesseq reduce using rule 92 (func_call -> id opar args cpar .) + equal reduce using rule 92 (func_call -> id opar args cpar .) + semi reduce using rule 92 (func_call -> id opar args cpar .) + of reduce using rule 92 (func_call -> id opar args cpar .) + then reduce using rule 92 (func_call -> id opar args cpar .) + loop reduce using rule 92 (func_call -> id opar args cpar .) + cpar reduce using rule 92 (func_call -> id opar args cpar .) + comma reduce using rule 92 (func_call -> id opar args cpar .) + in reduce using rule 92 (func_call -> id opar args cpar .) + else reduce using rule 92 (func_call -> id opar args cpar .) + pool reduce using rule 92 (func_call -> id opar args cpar .) + error reduce using rule 92 (func_call -> id opar args cpar .) + ccur reduce using rule 92 (func_call -> id opar args cpar .) + fi reduce using rule 92 (func_call -> id opar args cpar .) + + +state 197 + + (96) arg_list -> expr comma . arg_list + (95) arg_list -> . expr + (96) arg_list -> . expr comma arg_list + (97) arg_list -> . error arg_list + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 159 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 158 + arg_list shift and go to state 219 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 198 + + (97) arg_list -> error arg_list . + + cpar reduce using rule 97 (arg_list -> error arg_list .) + + +state 199 + + (74) base_call -> factor arroba type dot . func_call + (92) func_call -> . id opar args cpar + + id shift and go to state 170 + + func_call shift and go to state 220 + +state 200 + + (89) block -> expr semi block . + + ccur reduce using rule 89 (block -> expr semi block .) + + +state 201 + + (24) def_func -> error opar formals cpar colon type ocur expr . ccur + + ccur shift and go to state 221 + + +state 202 + + (23) def_func -> id opar formals cpar colon type ocur expr . ccur + + ccur shift and go to state 222 + + +state 203 + + (27) def_func -> id opar formals cpar colon type ocur error . ccur + + ccur shift and go to state 223 + + +state 204 + + (26) def_func -> id opar formals cpar colon error ocur expr . ccur + + ccur shift and go to state 224 + + +state 205 + + (25) def_func -> id opar error cpar colon type ocur expr . ccur + + ccur shift and go to state 225 + + +state 206 + + (38) expr -> case expr of cases_list esac . + + semi reduce using rule 38 (expr -> case expr of cases_list esac .) + of reduce using rule 38 (expr -> case expr of cases_list esac .) + then reduce using rule 38 (expr -> case expr of cases_list esac .) + loop reduce using rule 38 (expr -> case expr of cases_list esac .) + cpar reduce using rule 38 (expr -> case expr of cases_list esac .) + comma reduce using rule 38 (expr -> case expr of cases_list esac .) + in reduce using rule 38 (expr -> case expr of cases_list esac .) + else reduce using rule 38 (expr -> case expr of cases_list esac .) + pool reduce using rule 38 (expr -> case expr of cases_list esac .) + error reduce using rule 38 (expr -> case expr of cases_list esac .) + ccur reduce using rule 38 (expr -> case expr of cases_list esac .) + fi reduce using rule 38 (expr -> case expr of cases_list esac .) + + +state 207 + + (40) expr -> case expr of error esac . + + semi reduce using rule 40 (expr -> case expr of error esac .) + of reduce using rule 40 (expr -> case expr of error esac .) + then reduce using rule 40 (expr -> case expr of error esac .) + loop reduce using rule 40 (expr -> case expr of error esac .) + cpar reduce using rule 40 (expr -> case expr of error esac .) + comma reduce using rule 40 (expr -> case expr of error esac .) + in reduce using rule 40 (expr -> case expr of error esac .) + else reduce using rule 40 (expr -> case expr of error esac .) + pool reduce using rule 40 (expr -> case expr of error esac .) + error reduce using rule 40 (expr -> case expr of error esac .) + ccur reduce using rule 40 (expr -> case expr of error esac .) + fi reduce using rule 40 (expr -> case expr of error esac .) + + +state 208 + + (57) cases_list -> error cases_list . + + esac reduce using rule 57 (cases_list -> error cases_list .) + + +state 209 + + (55) cases_list -> casep semi . + (56) cases_list -> casep semi . cases_list + (55) cases_list -> . casep semi + (56) cases_list -> . casep semi cases_list + (57) cases_list -> . error cases_list + (58) casep -> . id colon type rarrow expr + + esac reduce using rule 55 (cases_list -> casep semi .) + error shift and go to state 188 + id shift and go to state 187 + + casep shift and go to state 186 + cases_list shift and go to state 226 + +state 210 + + (58) casep -> id colon . type rarrow expr + + type shift and go to state 227 + + +state 211 + + (39) expr -> case error of cases_list esac . + + semi reduce using rule 39 (expr -> case error of cases_list esac .) + of reduce using rule 39 (expr -> case error of cases_list esac .) + then reduce using rule 39 (expr -> case error of cases_list esac .) + loop reduce using rule 39 (expr -> case error of cases_list esac .) + cpar reduce using rule 39 (expr -> case error of cases_list esac .) + comma reduce using rule 39 (expr -> case error of cases_list esac .) + in reduce using rule 39 (expr -> case error of cases_list esac .) + else reduce using rule 39 (expr -> case error of cases_list esac .) + pool reduce using rule 39 (expr -> case error of cases_list esac .) + error reduce using rule 39 (expr -> case error of cases_list esac .) + ccur reduce using rule 39 (expr -> case error of cases_list esac .) + fi reduce using rule 39 (expr -> case error of cases_list esac .) + + +state 212 + + (41) expr -> if expr then expr else . expr fi + (44) expr -> if expr then expr else . error fi + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + error shift and go to state 229 + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 228 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 213 + + (43) expr -> if expr then error else . expr fi + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 230 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 214 + + (42) expr -> if error then expr else . expr fi + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 231 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 215 + + (45) expr -> while expr loop expr pool . + + semi reduce using rule 45 (expr -> while expr loop expr pool .) + of reduce using rule 45 (expr -> while expr loop expr pool .) + then reduce using rule 45 (expr -> while expr loop expr pool .) + loop reduce using rule 45 (expr -> while expr loop expr pool .) + cpar reduce using rule 45 (expr -> while expr loop expr pool .) + comma reduce using rule 45 (expr -> while expr loop expr pool .) + in reduce using rule 45 (expr -> while expr loop expr pool .) + else reduce using rule 45 (expr -> while expr loop expr pool .) + pool reduce using rule 45 (expr -> while expr loop expr pool .) + error reduce using rule 45 (expr -> while expr loop expr pool .) + ccur reduce using rule 45 (expr -> while expr loop expr pool .) + fi reduce using rule 45 (expr -> while expr loop expr pool .) + + +state 216 + + (48) expr -> while expr loop expr error . + + semi reduce using rule 48 (expr -> while expr loop expr error .) + of reduce using rule 48 (expr -> while expr loop expr error .) + then reduce using rule 48 (expr -> while expr loop expr error .) + loop reduce using rule 48 (expr -> while expr loop expr error .) + cpar reduce using rule 48 (expr -> while expr loop expr error .) + comma reduce using rule 48 (expr -> while expr loop expr error .) + in reduce using rule 48 (expr -> while expr loop expr error .) + else reduce using rule 48 (expr -> while expr loop expr error .) + pool reduce using rule 48 (expr -> while expr loop expr error .) + error reduce using rule 48 (expr -> while expr loop expr error .) + ccur reduce using rule 48 (expr -> while expr loop expr error .) + fi reduce using rule 48 (expr -> while expr loop expr error .) + + +state 217 + + (47) expr -> while expr loop error pool . + + semi reduce using rule 47 (expr -> while expr loop error pool .) + of reduce using rule 47 (expr -> while expr loop error pool .) + then reduce using rule 47 (expr -> while expr loop error pool .) + loop reduce using rule 47 (expr -> while expr loop error pool .) + cpar reduce using rule 47 (expr -> while expr loop error pool .) + comma reduce using rule 47 (expr -> while expr loop error pool .) + in reduce using rule 47 (expr -> while expr loop error pool .) + else reduce using rule 47 (expr -> while expr loop error pool .) + pool reduce using rule 47 (expr -> while expr loop error pool .) + error reduce using rule 47 (expr -> while expr loop error pool .) + ccur reduce using rule 47 (expr -> while expr loop error pool .) + fi reduce using rule 47 (expr -> while expr loop error pool .) + + +state 218 + + (46) expr -> while error loop expr pool . + + semi reduce using rule 46 (expr -> while error loop expr pool .) + of reduce using rule 46 (expr -> while error loop expr pool .) + then reduce using rule 46 (expr -> while error loop expr pool .) + loop reduce using rule 46 (expr -> while error loop expr pool .) + cpar reduce using rule 46 (expr -> while error loop expr pool .) + comma reduce using rule 46 (expr -> while error loop expr pool .) + in reduce using rule 46 (expr -> while error loop expr pool .) + else reduce using rule 46 (expr -> while error loop expr pool .) + pool reduce using rule 46 (expr -> while error loop expr pool .) + error reduce using rule 46 (expr -> while error loop expr pool .) + ccur reduce using rule 46 (expr -> while error loop expr pool .) + fi reduce using rule 46 (expr -> while error loop expr pool .) + + +state 219 + + (96) arg_list -> expr comma arg_list . + + cpar reduce using rule 96 (arg_list -> expr comma arg_list .) + + +state 220 + + (74) base_call -> factor arroba type dot func_call . + + star reduce using rule 74 (base_call -> factor arroba type dot func_call .) + div reduce using rule 74 (base_call -> factor arroba type dot func_call .) + plus reduce using rule 74 (base_call -> factor arroba type dot func_call .) + minus reduce using rule 74 (base_call -> factor arroba type dot func_call .) + less reduce using rule 74 (base_call -> factor arroba type dot func_call .) + lesseq reduce using rule 74 (base_call -> factor arroba type dot func_call .) + equal reduce using rule 74 (base_call -> factor arroba type dot func_call .) + semi reduce using rule 74 (base_call -> factor arroba type dot func_call .) + of reduce using rule 74 (base_call -> factor arroba type dot func_call .) + then reduce using rule 74 (base_call -> factor arroba type dot func_call .) + loop reduce using rule 74 (base_call -> factor arroba type dot func_call .) + cpar reduce using rule 74 (base_call -> factor arroba type dot func_call .) + comma reduce using rule 74 (base_call -> factor arroba type dot func_call .) + in reduce using rule 74 (base_call -> factor arroba type dot func_call .) + else reduce using rule 74 (base_call -> factor arroba type dot func_call .) + pool reduce using rule 74 (base_call -> factor arroba type dot func_call .) + error reduce using rule 74 (base_call -> factor arroba type dot func_call .) + ccur reduce using rule 74 (base_call -> factor arroba type dot func_call .) + fi reduce using rule 74 (base_call -> factor arroba type dot func_call .) + + +state 221 + + (24) def_func -> error opar formals cpar colon type ocur expr ccur . + + semi reduce using rule 24 (def_func -> error opar formals cpar colon type ocur expr ccur .) + + +state 222 + + (23) def_func -> id opar formals cpar colon type ocur expr ccur . + + semi reduce using rule 23 (def_func -> id opar formals cpar colon type ocur expr ccur .) + + +state 223 + + (27) def_func -> id opar formals cpar colon type ocur error ccur . + + semi reduce using rule 27 (def_func -> id opar formals cpar colon type ocur error ccur .) + + +state 224 + + (26) def_func -> id opar formals cpar colon error ocur expr ccur . + + semi reduce using rule 26 (def_func -> id opar formals cpar colon error ocur expr ccur .) + + +state 225 + + (25) def_func -> id opar error cpar colon type ocur expr ccur . + + semi reduce using rule 25 (def_func -> id opar error cpar colon type ocur expr ccur .) + + +state 226 + + (56) cases_list -> casep semi cases_list . + + esac reduce using rule 56 (cases_list -> casep semi cases_list .) + + +state 227 + + (58) casep -> id colon type . rarrow expr + + rarrow shift and go to state 232 + + +state 228 + + (41) expr -> if expr then expr else expr . fi + + fi shift and go to state 233 + + +state 229 + + (44) expr -> if expr then expr else error . fi + + fi shift and go to state 234 + + +state 230 + + (43) expr -> if expr then error else expr . fi + + fi shift and go to state 235 + + +state 231 + + (42) expr -> if error then expr else expr . fi + + fi shift and go to state 236 + + +state 232 + + (58) casep -> id colon type rarrow . expr + (35) expr -> . let let_list in expr + (36) expr -> . let error in expr + (37) expr -> . let let_list in error + (38) expr -> . case expr of cases_list esac + (39) expr -> . case error of cases_list esac + (40) expr -> . case expr of error esac + (41) expr -> . if expr then expr else expr fi + (42) expr -> . if error then expr else expr fi + (43) expr -> . if expr then error else expr fi + (44) expr -> . if expr then expr else error fi + (45) expr -> . while expr loop expr pool + (46) expr -> . while error loop expr pool + (47) expr -> . while expr loop error pool + (48) expr -> . while expr loop expr error + (49) expr -> . arith + (59) arith -> . id larrow expr + (60) arith -> . not comp + (61) arith -> . comp + (62) comp -> . comp less op + (63) comp -> . comp lesseq op + (64) comp -> . comp equal op + (65) comp -> . op + (66) op -> . op plus term + (67) op -> . op minus term + (68) op -> . term + (69) term -> . term star base_call + (70) term -> . term div base_call + (71) term -> . isvoid base_call + (72) term -> . nox base_call + (73) term -> . base_call + (74) base_call -> . factor arroba type dot func_call + (75) base_call -> . factor + (76) factor -> . atom + (77) factor -> . opar expr cpar + (78) factor -> . factor dot func_call + (79) factor -> . func_call + (80) atom -> . num + (81) atom -> . id + (82) atom -> . new type + (83) atom -> . new error + (84) atom -> . ocur block ccur + (85) atom -> . true + (86) atom -> . false + (87) atom -> . string + (92) func_call -> . id opar args cpar + + let shift and go to state 72 + case shift and go to state 73 + if shift and go to state 74 + while shift and go to state 75 + id shift and go to state 77 + not shift and go to state 78 + isvoid shift and go to state 83 + nox shift and go to state 84 + opar shift and go to state 88 + num shift and go to state 89 + new shift and go to state 90 + ocur shift and go to state 91 + true shift and go to state 92 + false shift and go to state 93 + string shift and go to state 94 + + expr shift and go to state 237 + arith shift and go to state 76 + comp shift and go to state 79 + op shift and go to state 80 + term shift and go to state 81 + base_call shift and go to state 82 + factor shift and go to state 85 + func_call shift and go to state 86 + atom shift and go to state 87 + +state 233 + + (41) expr -> if expr then expr else expr fi . + + semi reduce using rule 41 (expr -> if expr then expr else expr fi .) + of reduce using rule 41 (expr -> if expr then expr else expr fi .) + then reduce using rule 41 (expr -> if expr then expr else expr fi .) + loop reduce using rule 41 (expr -> if expr then expr else expr fi .) + cpar reduce using rule 41 (expr -> if expr then expr else expr fi .) + comma reduce using rule 41 (expr -> if expr then expr else expr fi .) + in reduce using rule 41 (expr -> if expr then expr else expr fi .) + else reduce using rule 41 (expr -> if expr then expr else expr fi .) + pool reduce using rule 41 (expr -> if expr then expr else expr fi .) + error reduce using rule 41 (expr -> if expr then expr else expr fi .) + ccur reduce using rule 41 (expr -> if expr then expr else expr fi .) + fi reduce using rule 41 (expr -> if expr then expr else expr fi .) + + +state 234 + + (44) expr -> if expr then expr else error fi . + + semi reduce using rule 44 (expr -> if expr then expr else error fi .) + of reduce using rule 44 (expr -> if expr then expr else error fi .) + then reduce using rule 44 (expr -> if expr then expr else error fi .) + loop reduce using rule 44 (expr -> if expr then expr else error fi .) + cpar reduce using rule 44 (expr -> if expr then expr else error fi .) + comma reduce using rule 44 (expr -> if expr then expr else error fi .) + in reduce using rule 44 (expr -> if expr then expr else error fi .) + else reduce using rule 44 (expr -> if expr then expr else error fi .) + pool reduce using rule 44 (expr -> if expr then expr else error fi .) + error reduce using rule 44 (expr -> if expr then expr else error fi .) + ccur reduce using rule 44 (expr -> if expr then expr else error fi .) + fi reduce using rule 44 (expr -> if expr then expr else error fi .) + + +state 235 + + (43) expr -> if expr then error else expr fi . + + semi reduce using rule 43 (expr -> if expr then error else expr fi .) + of reduce using rule 43 (expr -> if expr then error else expr fi .) + then reduce using rule 43 (expr -> if expr then error else expr fi .) + loop reduce using rule 43 (expr -> if expr then error else expr fi .) + cpar reduce using rule 43 (expr -> if expr then error else expr fi .) + comma reduce using rule 43 (expr -> if expr then error else expr fi .) + in reduce using rule 43 (expr -> if expr then error else expr fi .) + else reduce using rule 43 (expr -> if expr then error else expr fi .) + pool reduce using rule 43 (expr -> if expr then error else expr fi .) + error reduce using rule 43 (expr -> if expr then error else expr fi .) + ccur reduce using rule 43 (expr -> if expr then error else expr fi .) + fi reduce using rule 43 (expr -> if expr then error else expr fi .) + + +state 236 + + (42) expr -> if error then expr else expr fi . + + semi reduce using rule 42 (expr -> if error then expr else expr fi .) + of reduce using rule 42 (expr -> if error then expr else expr fi .) + then reduce using rule 42 (expr -> if error then expr else expr fi .) + loop reduce using rule 42 (expr -> if error then expr else expr fi .) + cpar reduce using rule 42 (expr -> if error then expr else expr fi .) + comma reduce using rule 42 (expr -> if error then expr else expr fi .) + in reduce using rule 42 (expr -> if error then expr else expr fi .) + else reduce using rule 42 (expr -> if error then expr else expr fi .) + pool reduce using rule 42 (expr -> if error then expr else expr fi .) + error reduce using rule 42 (expr -> if error then expr else expr fi .) + ccur reduce using rule 42 (expr -> if error then expr else expr fi .) + fi reduce using rule 42 (expr -> if error then expr else expr fi .) + + +state 237 + + (58) casep -> id colon type rarrow expr . + + semi reduce using rule 58 (casep -> id colon type rarrow expr .) + diff --git a/src/cool_parser/output_parser/parsetab.py b/src/cool_parser/output_parser/parsetab.py index e9699a3a..357afe60 100644 --- a/src/cool_parser/output_parser/parsetab.py +++ b/src/cool_parser/output_parser/parsetab.py @@ -1,126 +1,126 @@ - -# parsetab.py -# This file is automatically generated. Do not edit. -# pylint: disable=W,C,R -_tabversion = '3.10' - -_lr_method = 'LALR' - -_lr_signature = 'programarroba case ccur class colon comma cpar div dot else equal esac false fi id if in inherits isvoid larrow less lesseq let loop minus new not nox num ocur of opar plus pool rarrow semi star string then true type whileprogram : class_listepsilon :class_list : def_class class_list \n | def_classclass_list : error class_listdef_class : class type ocur feature_list ccur semi \n | class type inherits type ocur feature_list ccur semidef_class : class error ocur feature_list ccur semi \n | class type ocur feature_list ccur error \n | class error inherits type ocur feature_list ccur semi\n | class error inherits error ocur feature_list ccur semi\n | class type inherits error ocur feature_list ccur semi\n | class type inherits type ocur feature_list ccur errorfeature_list : epsilon\n | def_attr semi feature_list\n | def_func semi feature_listfeature_list : error feature_listdef_attr : id colon type\n | id colon type larrow exprdef_attr : error colon type\n | id colon error\n | error colon type larrow expr\n | id colon error larrow expr\n | id colon type larrow errordef_func : id opar formals cpar colon type ocur expr ccurdef_func : error opar formals cpar colon type ocur expr ccur\n | id opar error cpar colon type ocur expr ccur\n | id opar formals cpar colon error ocur expr ccur\n | id opar formals cpar colon type ocur error ccurformals : param_list\n | param_list_empty\n param_list : param\n | param comma param_listparam_list_empty : epsilonparam : id colon typelet_list : let_assign\n | let_assign comma let_listlet_assign : param larrow expr\n | paramcases_list : casep semi\n | casep semi cases_listcases_list : error cases_list\n | error semicasep : id colon type rarrow exprexpr : id larrow expr\n | comp\n comp : comp less op\n | comp lesseq op\n | comp equal op\n | opop : op plus term\n | op minus term\n | termterm : term star base_call\n | term div base_call\n | base_callterm : term star error\n | term div errorbase_call : factor arroba type dot func_call\n | factorbase_call : error arroba type dot func_call\n | factor arroba error dot func_call\n factor : atom\n | opar expr cparfactor : factor dot func_call\n | not expr\n | func_callfactor : isvoid base_call\n | nox base_call\n factor : let let_list in exprfactor : case expr of cases_list esacfactor : if expr then expr else expr fifactor : while expr loop expr poolatom : numatom : idatom : new typeatom : ocur block ccuratom : error block ccur\n | ocur error ccur\n | ocur block erroratom : true\n | falseatom : stringblock : expr semi\n | expr semi blockblock : error block\n | error semifunc_call : id opar args cparfunc_call : id opar error cpar\n | error opar args cparargs : arg_list\n | arg_list_empty\n arg_list : expr \n | expr comma arg_listarg_list : error arg_listarg_list_empty : epsilon' - -_lr_action_items = {'error':([0,3,4,5,10,11,12,13,15,25,29,30,31,32,33,34,36,37,38,39,55,58,62,63,66,70,80,81,82,83,85,86,87,90,98,100,102,103,104,105,106,107,110,112,113,114,115,116,117,118,119,120,121,122,135,136,141,142,145,151,154,162,164,171,173,174,175,176,180,181,182,183,184,185,189,190,193,194,195,201,207,215,219,229,],[4,4,4,9,15,21,15,23,15,39,15,15,50,52,15,15,15,15,-6,-9,-8,70,98,70,103,107,70,70,70,70,70,70,70,136,107,139,-7,-13,-12,-11,-10,107,145,70,154,70,70,70,70,70,162,164,166,169,178,107,-86,-87,185,107,185,107,107,70,70,201,70,70,70,207,70,70,169,185,145,-85,169,169,145,201,107,201,70,70,]),'class':([0,3,4,38,39,55,102,103,104,105,106,],[5,5,5,-6,-9,-8,-7,-13,-12,-11,-10,]),'$end':([1,2,3,6,7,38,39,55,102,103,104,105,106,],[0,-1,-4,-3,-5,-6,-9,-8,-7,-13,-12,-11,-10,]),'type':([5,11,13,27,31,61,89,94,100,101,108,121,218,],[8,20,24,40,49,96,134,137,138,140,143,165,227,]),'ocur':([8,9,20,21,23,24,58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,137,138,139,140,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[10,12,33,34,36,37,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,180,181,182,183,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,]),'inherits':([8,9,],[11,13,]),'ccur':([10,12,14,15,16,22,26,29,30,33,34,36,37,47,48,53,54,56,57,72,73,74,75,76,77,78,79,88,91,92,93,109,124,125,126,127,134,135,136,141,142,144,151,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,190,191,192,196,205,206,207,208,209,210,212,213,214,220,230,],[-2,-2,25,-2,-14,35,-17,-2,-2,-2,-2,-2,-2,-15,-16,66,67,68,69,-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,144,-66,-68,-75,-69,-76,177,179,144,-87,-78,-84,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-85,-88,-89,-70,221,222,223,224,225,-61,-59,-62,-71,-73,-72,]),'id':([10,12,15,28,29,30,32,33,34,36,37,58,60,62,63,70,80,81,82,83,84,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,122,136,145,151,154,162,164,171,172,173,174,175,176,180,181,182,183,184,185,189,193,194,195,201,207,215,219,229,],[19,19,19,46,19,19,46,19,19,19,19,72,46,72,72,72,72,72,126,126,46,72,72,72,72,72,72,72,72,72,126,126,126,126,126,126,126,168,72,72,72,72,72,72,72,46,72,202,72,72,72,72,72,72,168,72,72,168,168,72,202,72,202,72,72,]),'colon':([15,19,46,59,64,65,202,],[27,31,61,94,100,101,218,]),'opar':([15,19,58,62,63,70,72,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,126,136,145,151,154,162,164,168,169,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[28,32,80,80,80,110,113,80,80,80,80,80,80,80,80,110,110,80,80,80,80,80,80,80,80,80,80,113,110,110,80,110,110,110,113,195,80,80,80,80,80,80,80,80,110,80,80,110,80,80,]),'semi':([17,18,25,35,40,49,50,66,67,68,69,71,72,73,74,75,76,77,78,79,88,91,92,93,97,98,99,107,111,124,125,126,127,134,136,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,185,187,188,191,192,196,200,201,210,212,213,214,220,221,222,223,224,225,230,231,],[29,30,38,55,-20,-18,-21,102,104,105,106,-22,-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-19,-24,-23,142,151,-66,-68,-75,-69,-76,142,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,142,151,-90,-88,-89,-70,215,217,-61,-59,-62,-71,-73,-26,-25,-29,-28,-27,-72,-44,]),'cpar':([28,32,41,42,43,44,45,51,52,72,73,74,75,76,77,78,79,88,91,92,93,95,96,110,113,123,124,125,126,127,134,144,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,167,170,177,178,179,186,187,188,191,192,195,196,210,211,212,213,214,220,230,],[-2,-2,59,-30,-31,-32,-34,64,65,-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-33,-35,-2,-2,170,-66,-68,-75,-69,-76,-78,188,170,-91,-92,-96,-45,191,192,-93,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-95,-93,-90,-88,-89,-2,-70,-61,-94,-59,-62,-71,-73,-72,]),'larrow':([40,49,50,72,96,130,],[58,62,63,112,-35,173,]),'comma':([44,72,73,74,75,76,77,78,79,88,91,92,93,96,124,125,126,127,129,130,134,144,147,152,155,156,157,158,159,160,161,162,163,164,167,170,177,178,179,187,188,191,192,196,198,210,212,213,214,220,230,],[60,-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-35,-66,-68,-75,-69,172,-39,-76,-78,189,-45,189,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,189,-90,-88,-89,-70,-38,-61,-59,-62,-71,-73,-72,]),'not':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,]),'isvoid':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,]),'nox':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,]),'let':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,]),'case':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,]),'if':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,]),'while':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,]),'num':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,]),'new':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,]),'true':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,]),'false':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,]),'string':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,]),'arroba':([70,72,73,74,75,76,77,78,79,88,91,92,93,98,107,124,125,126,127,134,136,144,145,152,154,156,157,158,159,160,161,162,163,164,167,170,177,178,179,185,188,191,192,196,207,210,212,213,214,220,230,],[108,-75,-46,-50,-53,-56,121,-67,-63,-74,-81,-82,-83,108,108,-66,-68,-75,-69,-76,108,-78,108,-45,108,-47,-48,-49,-51,-52,-54,108,-55,108,-65,-64,-77,-80,-79,108,-90,-88,-89,-70,108,-61,-59,-62,-71,-73,-72,]),'dot':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,143,144,152,156,157,158,159,160,161,162,163,164,165,166,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,122,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,184,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,193,194,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'star':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,119,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,119,119,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'div':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,120,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,120,120,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'plus':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,117,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,117,117,117,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'minus':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,118,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,118,118,118,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'less':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,114,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'lesseq':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,115,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'equal':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,116,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'of':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,131,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,174,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'then':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,132,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,175,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'loop':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,133,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,176,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'in':([72,73,74,75,76,77,78,79,88,91,92,93,96,124,125,126,127,128,129,130,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,197,198,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-35,-66,-68,-75,-69,171,-36,-39,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-37,-38,-61,-59,-62,-71,-73,-72,]),'else':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,203,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,219,-61,-59,-62,-71,-73,-72,]),'pool':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,204,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,220,-61,-59,-62,-71,-73,-72,]),'fi':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,228,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,230,-72,]),'esac':([199,215,216,217,226,],[214,-40,-42,-43,-41,]),'rarrow':([227,],[229,]),} - -_lr_action = {} -for _k, _v in _lr_action_items.items(): - for _x,_y in zip(_v[0],_v[1]): - if not _x in _lr_action: _lr_action[_x] = {} - _lr_action[_x][_k] = _y -del _lr_action_items - -_lr_goto_items = {'program':([0,],[1,]),'class_list':([0,3,4,],[2,6,7,]),'def_class':([0,3,4,],[3,3,3,]),'feature_list':([10,12,15,29,30,33,34,36,37,],[14,22,26,47,48,53,54,56,57,]),'epsilon':([10,12,15,28,29,30,32,33,34,36,37,110,113,195,],[16,16,16,45,16,16,45,16,16,16,16,150,150,150,]),'def_attr':([10,12,15,29,30,33,34,36,37,],[17,17,17,17,17,17,17,17,17,]),'def_func':([10,12,15,29,30,33,34,36,37,],[18,18,18,18,18,18,18,18,18,]),'formals':([28,32,],[41,51,]),'param_list':([28,32,60,],[42,42,95,]),'param_list_empty':([28,32,],[43,43,]),'param':([28,32,60,84,172,],[44,44,44,130,130,]),'expr':([58,62,63,70,80,81,85,86,87,90,98,107,110,112,113,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[71,97,99,111,123,124,131,132,133,111,111,111,147,152,155,111,187,111,187,111,111,196,198,203,204,205,206,208,209,187,155,155,111,228,231,]),'comp':([58,62,63,70,80,81,85,86,87,90,98,107,110,112,113,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,]),'op':([58,62,63,70,80,81,85,86,87,90,98,107,110,112,113,114,115,116,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,156,157,158,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,]),'term':([58,62,63,70,80,81,85,86,87,90,98,107,110,112,113,114,115,116,117,118,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,159,160,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,]),'base_call':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[76,76,76,76,76,76,125,127,76,76,76,76,76,76,76,76,76,76,76,76,76,76,161,163,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,]),'factor':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,]),'func_call':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,122,136,145,151,154,162,164,171,173,175,176,180,181,182,183,184,185,189,193,194,195,207,219,229,],[78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,167,78,78,78,78,78,78,78,78,78,78,78,78,78,78,210,78,78,212,213,78,78,78,78,]),'atom':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,]),'block':([70,90,98,107,136,145,151,154,162,164,185,207,],[109,135,109,141,141,109,190,109,109,109,141,109,]),'let_list':([84,172,],[128,197,]),'let_assign':([84,172,],[129,129,]),'args':([110,113,195,],[146,153,146,]),'arg_list':([110,113,145,154,185,189,195,],[148,148,186,186,186,211,148,]),'arg_list_empty':([110,113,195,],[149,149,149,]),'cases_list':([174,201,215,],[199,216,226,]),'casep':([174,201,215,],[200,200,200,]),} - -_lr_goto = {} -for _k, _v in _lr_goto_items.items(): - for _x, _y in zip(_v[0], _v[1]): - if not _x in _lr_goto: _lr_goto[_x] = {} - _lr_goto[_x][_k] = _y -del _lr_goto_items -_lr_productions = [ - ("S' -> program","S'",1,None,None,None), - ('program -> class_list','program',1,'p_program','parser.py',8), - ('epsilon -> ','epsilon',0,'p_epsilon','parser.py',12), - ('class_list -> def_class class_list','class_list',2,'p_class_list','parser.py',17), - ('class_list -> def_class','class_list',1,'p_class_list','parser.py',18), - ('class_list -> error class_list','class_list',2,'p_class_list_error','parser.py',23), - ('def_class -> class type ocur feature_list ccur semi','def_class',6,'p_def_class','parser.py',29), - ('def_class -> class type inherits type ocur feature_list ccur semi','def_class',8,'p_def_class','parser.py',30), - ('def_class -> class error ocur feature_list ccur semi','def_class',6,'p_def_class_error','parser.py',38), - ('def_class -> class type ocur feature_list ccur error','def_class',6,'p_def_class_error','parser.py',39), - ('def_class -> class error inherits type ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',40), - ('def_class -> class error inherits error ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',41), - ('def_class -> class type inherits error ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',42), - ('def_class -> class type inherits type ocur feature_list ccur error','def_class',8,'p_def_class_error','parser.py',43), - ('feature_list -> epsilon','feature_list',1,'p_feature_list','parser.py',48), - ('feature_list -> def_attr semi feature_list','feature_list',3,'p_feature_list','parser.py',49), - ('feature_list -> def_func semi feature_list','feature_list',3,'p_feature_list','parser.py',50), - ('feature_list -> error feature_list','feature_list',2,'p_feature_list_error','parser.py',55), - ('def_attr -> id colon type','def_attr',3,'p_def_attr','parser.py',60), - ('def_attr -> id colon type larrow expr','def_attr',5,'p_def_attr','parser.py',61), - ('def_attr -> error colon type','def_attr',3,'p_def_attr_error','parser.py',68), - ('def_attr -> id colon error','def_attr',3,'p_def_attr_error','parser.py',69), - ('def_attr -> error colon type larrow expr','def_attr',5,'p_def_attr_error','parser.py',70), - ('def_attr -> id colon error larrow expr','def_attr',5,'p_def_attr_error','parser.py',71), - ('def_attr -> id colon type larrow error','def_attr',5,'p_def_attr_error','parser.py',72), - ('def_func -> id opar formals cpar colon type ocur expr ccur','def_func',9,'p_def_func','parser.py',77), - ('def_func -> error opar formals cpar colon type ocur expr ccur','def_func',9,'p_def_func_error','parser.py',81), - ('def_func -> id opar error cpar colon type ocur expr ccur','def_func',9,'p_def_func_error','parser.py',82), - ('def_func -> id opar formals cpar colon error ocur expr ccur','def_func',9,'p_def_func_error','parser.py',83), - ('def_func -> id opar formals cpar colon type ocur error ccur','def_func',9,'p_def_func_error','parser.py',84), - ('formals -> param_list','formals',1,'p_formals','parser.py',89), - ('formals -> param_list_empty','formals',1,'p_formals','parser.py',90), - ('param_list -> param','param_list',1,'p_param_list','parser.py',96), - ('param_list -> param comma param_list','param_list',3,'p_param_list','parser.py',97), - ('param_list_empty -> epsilon','param_list_empty',1,'p_param_list_empty','parser.py',106), - ('param -> id colon type','param',3,'p_param','parser.py',110), - ('let_list -> let_assign','let_list',1,'p_let_list','parser.py',115), - ('let_list -> let_assign comma let_list','let_list',3,'p_let_list','parser.py',116), - ('let_assign -> param larrow expr','let_assign',3,'p_let_assign','parser.py',125), - ('let_assign -> param','let_assign',1,'p_let_assign','parser.py',126), - ('cases_list -> casep semi','cases_list',2,'p_cases_list','parser.py',134), - ('cases_list -> casep semi cases_list','cases_list',3,'p_cases_list','parser.py',135), - ('cases_list -> error cases_list','cases_list',2,'p_cases_list_error','parser.py',139), - ('cases_list -> error semi','cases_list',2,'p_cases_list_error','parser.py',140), - ('casep -> id colon type rarrow expr','casep',5,'p_case','parser.py',144), - ('expr -> id larrow expr','expr',3,'p_expr','parser.py',149), - ('expr -> comp','expr',1,'p_expr','parser.py',150), - ('comp -> comp less op','comp',3,'p_comp','parser.py',158), - ('comp -> comp lesseq op','comp',3,'p_comp','parser.py',159), - ('comp -> comp equal op','comp',3,'p_comp','parser.py',160), - ('comp -> op','comp',1,'p_comp','parser.py',161), - ('op -> op plus term','op',3,'p_op','parser.py',180), - ('op -> op minus term','op',3,'p_op','parser.py',181), - ('op -> term','op',1,'p_op','parser.py',182), - ('term -> term star base_call','term',3,'p_term','parser.py',197), - ('term -> term div base_call','term',3,'p_term','parser.py',198), - ('term -> base_call','term',1,'p_term','parser.py',199), - ('term -> term star error','term',3,'p_term_error','parser.py',209), - ('term -> term div error','term',3,'p_term_error','parser.py',210), - ('base_call -> factor arroba type dot func_call','base_call',5,'p_base_call','parser.py',215), - ('base_call -> factor','base_call',1,'p_base_call','parser.py',216), - ('base_call -> error arroba type dot func_call','base_call',5,'p_base_call_error','parser.py',223), - ('base_call -> factor arroba error dot func_call','base_call',5,'p_base_call_error','parser.py',224), - ('factor -> atom','factor',1,'p_factor1','parser.py',229), - ('factor -> opar expr cpar','factor',3,'p_factor1','parser.py',230), - ('factor -> factor dot func_call','factor',3,'p_factor2','parser.py',234), - ('factor -> not expr','factor',2,'p_factor2','parser.py',235), - ('factor -> func_call','factor',1,'p_factor2','parser.py',236), - ('factor -> isvoid base_call','factor',2,'p_factor3','parser.py',245), - ('factor -> nox base_call','factor',2,'p_factor3','parser.py',246), - ('factor -> let let_list in expr','factor',4,'p_expr_let','parser.py',255), - ('factor -> case expr of cases_list esac','factor',5,'p_expr_case','parser.py',267), - ('factor -> if expr then expr else expr fi','factor',7,'p_expr_if','parser.py',279), - ('factor -> while expr loop expr pool','factor',5,'p_expr_while','parser.py',293), - ('atom -> num','atom',1,'p_atom_num','parser.py',306), - ('atom -> id','atom',1,'p_atom_id','parser.py',310), - ('atom -> new type','atom',2,'p_atom_new','parser.py',314), - ('atom -> ocur block ccur','atom',3,'p_atom_block','parser.py',318), - ('atom -> error block ccur','atom',3,'p_atom_block_error','parser.py',322), - ('atom -> ocur error ccur','atom',3,'p_atom_block_error','parser.py',323), - ('atom -> ocur block error','atom',3,'p_atom_block_error','parser.py',324), - ('atom -> true','atom',1,'p_atom_boolean','parser.py',328), - ('atom -> false','atom',1,'p_atom_boolean','parser.py',329), - ('atom -> string','atom',1,'p_atom_string','parser.py',333), - ('block -> expr semi','block',2,'p_block','parser.py',338), - ('block -> expr semi block','block',3,'p_block','parser.py',339), - ('block -> error block','block',2,'p_block_error','parser.py',343), - ('block -> error semi','block',2,'p_block_error','parser.py',344), - ('func_call -> id opar args cpar','func_call',4,'p_func_call','parser.py',349), - ('func_call -> id opar error cpar','func_call',4,'p_func_call_error','parser.py',353), - ('func_call -> error opar args cpar','func_call',4,'p_func_call_error','parser.py',354), - ('args -> arg_list','args',1,'p_args','parser.py',359), - ('args -> arg_list_empty','args',1,'p_args','parser.py',360), - ('arg_list -> expr','arg_list',1,'p_arg_list','parser.py',366), - ('arg_list -> expr comma arg_list','arg_list',3,'p_arg_list','parser.py',367), - ('arg_list -> error arg_list','arg_list',2,'p_arg_list_error','parser.py',374), - ('arg_list_empty -> epsilon','arg_list_empty',1,'p_arg_list_empty','parser.py',378), -] + +# parsetab.py +# This file is automatically generated. Do not edit. +# pylint: disable=W,C,R +_tabversion = '3.10' + +_lr_method = 'LALR' + +_lr_signature = 'programarroba case ccur class colon comma cpar div dot else equal esac false fi id if in inherits isvoid larrow less lesseq let loop minus new not nox num ocur of opar plus pool rarrow semi star string then true type whileprogram : class_listepsilon :class_list : def_class class_list \n | def_classclass_list : error class_listdef_class : class type ocur feature_list ccur semi \n | class type inherits type ocur feature_list ccur semidef_class : class error ocur feature_list ccur semi \n | class type ocur feature_list ccur error \n | class error inherits type ocur feature_list ccur semi\n | class error inherits error ocur feature_list ccur semi\n | class type inherits error ocur feature_list ccur semi\n | class type inherits type ocur feature_list ccur errorfeature_list : epsilon\n | def_attr semi feature_list\n | def_func semi feature_listfeature_list : error feature_listdef_attr : id colon type\n | id colon type larrow exprdef_attr : error colon type\n | id colon error\n | error colon type larrow expr\n | id colon error larrow expr\n | id colon type larrow errordef_func : id opar formals cpar colon type ocur expr ccurdef_func : error opar formals cpar colon type ocur expr ccur\n | id opar error cpar colon type ocur expr ccur\n | id opar formals cpar colon error ocur expr ccur\n | id opar formals cpar colon type ocur error ccurformals : param_list\n | param_list_empty\n param_list : param\n | param comma param_listparam_list_empty : epsilonparam : id colon typelet_list : let_assign\n | let_assign comma let_listlet_assign : param larrow expr\n | paramcases_list : casep semi\n | casep semi cases_listcases_list : error cases_list\n | error semicasep : id colon type rarrow exprexpr : id larrow expr\n | comp\n comp : comp less op\n | comp lesseq op\n | comp equal op\n | opop : op plus term\n | op minus term\n | termterm : term star base_call\n | term div base_call\n | base_callterm : term star error\n | term div errorbase_call : factor arroba type dot func_call\n | factorbase_call : error arroba type dot func_call\n | factor arroba error dot func_call\n factor : atom\n | opar expr cparfactor : factor dot func_call\n | not expr\n | func_callfactor : isvoid base_call\n | nox base_call\n factor : let let_list in exprfactor : case expr of cases_list esacfactor : if expr then expr else expr fifactor : while expr loop expr poolatom : numatom : idatom : new typeatom : ocur block ccuratom : error block ccur\n | ocur error ccur\n | ocur block erroratom : true\n | falseatom : stringblock : expr semi\n | expr semi blockblock : error block\n | error semifunc_call : id opar args cparfunc_call : id opar error cpar\n | error opar args cparargs : arg_list\n | arg_list_empty\n arg_list : expr \n | expr comma arg_listarg_list : error arg_listarg_list_empty : epsilon' + +_lr_action_items = {'error':([0,3,4,5,10,11,12,13,15,25,29,30,31,32,33,34,36,37,38,39,55,58,62,63,66,70,80,81,82,83,85,86,87,90,98,100,102,103,104,105,106,107,110,112,113,114,115,116,117,118,119,120,121,122,135,136,141,142,145,151,154,162,164,171,173,174,175,176,180,181,182,183,184,185,189,190,193,194,195,201,207,215,219,229,],[4,4,4,9,15,21,15,23,15,39,15,15,50,52,15,15,15,15,-6,-9,-8,70,98,70,103,107,70,70,70,70,70,70,70,136,107,139,-7,-13,-12,-11,-10,107,145,70,154,70,70,70,70,70,162,164,166,169,178,107,-86,-87,185,107,185,107,107,70,70,201,70,70,70,207,70,70,169,185,145,-85,169,169,145,201,107,201,70,70,]),'class':([0,3,4,38,39,55,102,103,104,105,106,],[5,5,5,-6,-9,-8,-7,-13,-12,-11,-10,]),'$end':([1,2,3,6,7,38,39,55,102,103,104,105,106,],[0,-1,-4,-3,-5,-6,-9,-8,-7,-13,-12,-11,-10,]),'type':([5,11,13,27,31,61,89,94,100,101,108,121,218,],[8,20,24,40,49,96,134,137,138,140,143,165,227,]),'ocur':([8,9,20,21,23,24,58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,137,138,139,140,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[10,12,33,34,36,37,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,180,181,182,183,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,]),'inherits':([8,9,],[11,13,]),'ccur':([10,12,14,15,16,22,26,29,30,33,34,36,37,47,48,53,54,56,57,72,73,74,75,76,77,78,79,88,91,92,93,109,124,125,126,127,134,135,136,141,142,144,151,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,190,191,192,196,205,206,207,208,209,210,212,213,214,220,230,],[-2,-2,25,-2,-14,35,-17,-2,-2,-2,-2,-2,-2,-15,-16,66,67,68,69,-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,144,-66,-68,-75,-69,-76,177,179,144,-87,-78,-84,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-85,-88,-89,-70,221,222,223,224,225,-61,-59,-62,-71,-73,-72,]),'id':([10,12,15,28,29,30,32,33,34,36,37,58,60,62,63,70,80,81,82,83,84,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,122,136,145,151,154,162,164,171,172,173,174,175,176,180,181,182,183,184,185,189,193,194,195,201,207,215,219,229,],[19,19,19,46,19,19,46,19,19,19,19,72,46,72,72,72,72,72,126,126,46,72,72,72,72,72,72,72,72,72,126,126,126,126,126,126,126,168,72,72,72,72,72,72,72,46,72,202,72,72,72,72,72,72,168,72,72,168,168,72,202,72,202,72,72,]),'colon':([15,19,46,59,64,65,202,],[27,31,61,94,100,101,218,]),'opar':([15,19,58,62,63,70,72,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,126,136,145,151,154,162,164,168,169,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[28,32,80,80,80,110,113,80,80,80,80,80,80,80,80,110,110,80,80,80,80,80,80,80,80,80,80,113,110,110,80,110,110,110,113,195,80,80,80,80,80,80,80,80,110,80,80,110,80,80,]),'semi':([17,18,25,35,40,49,50,66,67,68,69,71,72,73,74,75,76,77,78,79,88,91,92,93,97,98,99,107,111,124,125,126,127,134,136,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,185,187,188,191,192,196,200,201,210,212,213,214,220,221,222,223,224,225,230,231,],[29,30,38,55,-20,-18,-21,102,104,105,106,-22,-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-19,-24,-23,142,151,-66,-68,-75,-69,-76,142,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,142,151,-90,-88,-89,-70,215,217,-61,-59,-62,-71,-73,-26,-25,-29,-28,-27,-72,-44,]),'cpar':([28,32,41,42,43,44,45,51,52,72,73,74,75,76,77,78,79,88,91,92,93,95,96,110,113,123,124,125,126,127,134,144,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,167,170,177,178,179,186,187,188,191,192,195,196,210,211,212,213,214,220,230,],[-2,-2,59,-30,-31,-32,-34,64,65,-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-33,-35,-2,-2,170,-66,-68,-75,-69,-76,-78,188,170,-91,-92,-96,-45,191,192,-93,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-95,-93,-90,-88,-89,-2,-70,-61,-94,-59,-62,-71,-73,-72,]),'larrow':([40,49,50,72,96,130,],[58,62,63,112,-35,173,]),'comma':([44,72,73,74,75,76,77,78,79,88,91,92,93,96,124,125,126,127,129,130,134,144,147,152,155,156,157,158,159,160,161,162,163,164,167,170,177,178,179,187,188,191,192,196,198,210,212,213,214,220,230,],[60,-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-35,-66,-68,-75,-69,172,-39,-76,-78,189,-45,189,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,189,-90,-88,-89,-70,-38,-61,-59,-62,-71,-73,-72,]),'not':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,]),'isvoid':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,]),'nox':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,]),'let':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,]),'case':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,]),'if':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,]),'while':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,]),'num':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,]),'new':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,]),'true':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,]),'false':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,]),'string':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,]),'arroba':([70,72,73,74,75,76,77,78,79,88,91,92,93,98,107,124,125,126,127,134,136,144,145,152,154,156,157,158,159,160,161,162,163,164,167,170,177,178,179,185,188,191,192,196,207,210,212,213,214,220,230,],[108,-75,-46,-50,-53,-56,121,-67,-63,-74,-81,-82,-83,108,108,-66,-68,-75,-69,-76,108,-78,108,-45,108,-47,-48,-49,-51,-52,-54,108,-55,108,-65,-64,-77,-80,-79,108,-90,-88,-89,-70,108,-61,-59,-62,-71,-73,-72,]),'dot':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,143,144,152,156,157,158,159,160,161,162,163,164,165,166,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,122,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,184,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,193,194,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'star':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,119,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,119,119,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'div':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,120,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,120,120,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'plus':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,117,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,117,117,117,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'minus':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,118,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,118,118,118,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'less':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,114,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'lesseq':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,115,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'equal':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,116,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'of':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,131,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,174,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'then':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,132,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,175,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'loop':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,133,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,176,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'in':([72,73,74,75,76,77,78,79,88,91,92,93,96,124,125,126,127,128,129,130,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,197,198,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-35,-66,-68,-75,-69,171,-36,-39,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-37,-38,-61,-59,-62,-71,-73,-72,]),'else':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,203,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,219,-61,-59,-62,-71,-73,-72,]),'pool':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,204,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,220,-61,-59,-62,-71,-73,-72,]),'fi':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,228,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,230,-72,]),'esac':([199,215,216,217,226,],[214,-40,-42,-43,-41,]),'rarrow':([227,],[229,]),} + +_lr_action = {} +for _k, _v in _lr_action_items.items(): + for _x,_y in zip(_v[0],_v[1]): + if not _x in _lr_action: _lr_action[_x] = {} + _lr_action[_x][_k] = _y +del _lr_action_items + +_lr_goto_items = {'program':([0,],[1,]),'class_list':([0,3,4,],[2,6,7,]),'def_class':([0,3,4,],[3,3,3,]),'feature_list':([10,12,15,29,30,33,34,36,37,],[14,22,26,47,48,53,54,56,57,]),'epsilon':([10,12,15,28,29,30,32,33,34,36,37,110,113,195,],[16,16,16,45,16,16,45,16,16,16,16,150,150,150,]),'def_attr':([10,12,15,29,30,33,34,36,37,],[17,17,17,17,17,17,17,17,17,]),'def_func':([10,12,15,29,30,33,34,36,37,],[18,18,18,18,18,18,18,18,18,]),'formals':([28,32,],[41,51,]),'param_list':([28,32,60,],[42,42,95,]),'param_list_empty':([28,32,],[43,43,]),'param':([28,32,60,84,172,],[44,44,44,130,130,]),'expr':([58,62,63,70,80,81,85,86,87,90,98,107,110,112,113,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[71,97,99,111,123,124,131,132,133,111,111,111,147,152,155,111,187,111,187,111,111,196,198,203,204,205,206,208,209,187,155,155,111,228,231,]),'comp':([58,62,63,70,80,81,85,86,87,90,98,107,110,112,113,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,]),'op':([58,62,63,70,80,81,85,86,87,90,98,107,110,112,113,114,115,116,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,156,157,158,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,]),'term':([58,62,63,70,80,81,85,86,87,90,98,107,110,112,113,114,115,116,117,118,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,159,160,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,]),'base_call':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[76,76,76,76,76,76,125,127,76,76,76,76,76,76,76,76,76,76,76,76,76,76,161,163,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,]),'factor':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,]),'func_call':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,122,136,145,151,154,162,164,171,173,175,176,180,181,182,183,184,185,189,193,194,195,207,219,229,],[78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,167,78,78,78,78,78,78,78,78,78,78,78,78,78,78,210,78,78,212,213,78,78,78,78,]),'atom':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,]),'block':([70,90,98,107,136,145,151,154,162,164,185,207,],[109,135,109,141,141,109,190,109,109,109,141,109,]),'let_list':([84,172,],[128,197,]),'let_assign':([84,172,],[129,129,]),'args':([110,113,195,],[146,153,146,]),'arg_list':([110,113,145,154,185,189,195,],[148,148,186,186,186,211,148,]),'arg_list_empty':([110,113,195,],[149,149,149,]),'cases_list':([174,201,215,],[199,216,226,]),'casep':([174,201,215,],[200,200,200,]),} + +_lr_goto = {} +for _k, _v in _lr_goto_items.items(): + for _x, _y in zip(_v[0], _v[1]): + if not _x in _lr_goto: _lr_goto[_x] = {} + _lr_goto[_x][_k] = _y +del _lr_goto_items +_lr_productions = [ + ("S' -> program","S'",1,None,None,None), + ('program -> class_list','program',1,'p_program','parser.py',8), + ('epsilon -> ','epsilon',0,'p_epsilon','parser.py',12), + ('class_list -> def_class class_list','class_list',2,'p_class_list','parser.py',17), + ('class_list -> def_class','class_list',1,'p_class_list','parser.py',18), + ('class_list -> error class_list','class_list',2,'p_class_list_error','parser.py',23), + ('def_class -> class type ocur feature_list ccur semi','def_class',6,'p_def_class','parser.py',29), + ('def_class -> class type inherits type ocur feature_list ccur semi','def_class',8,'p_def_class','parser.py',30), + ('def_class -> class error ocur feature_list ccur semi','def_class',6,'p_def_class_error','parser.py',38), + ('def_class -> class type ocur feature_list ccur error','def_class',6,'p_def_class_error','parser.py',39), + ('def_class -> class error inherits type ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',40), + ('def_class -> class error inherits error ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',41), + ('def_class -> class type inherits error ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',42), + ('def_class -> class type inherits type ocur feature_list ccur error','def_class',8,'p_def_class_error','parser.py',43), + ('feature_list -> epsilon','feature_list',1,'p_feature_list','parser.py',48), + ('feature_list -> def_attr semi feature_list','feature_list',3,'p_feature_list','parser.py',49), + ('feature_list -> def_func semi feature_list','feature_list',3,'p_feature_list','parser.py',50), + ('feature_list -> error feature_list','feature_list',2,'p_feature_list_error','parser.py',55), + ('def_attr -> id colon type','def_attr',3,'p_def_attr','parser.py',60), + ('def_attr -> id colon type larrow expr','def_attr',5,'p_def_attr','parser.py',61), + ('def_attr -> error colon type','def_attr',3,'p_def_attr_error','parser.py',68), + ('def_attr -> id colon error','def_attr',3,'p_def_attr_error','parser.py',69), + ('def_attr -> error colon type larrow expr','def_attr',5,'p_def_attr_error','parser.py',70), + ('def_attr -> id colon error larrow expr','def_attr',5,'p_def_attr_error','parser.py',71), + ('def_attr -> id colon type larrow error','def_attr',5,'p_def_attr_error','parser.py',72), + ('def_func -> id opar formals cpar colon type ocur expr ccur','def_func',9,'p_def_func','parser.py',77), + ('def_func -> error opar formals cpar colon type ocur expr ccur','def_func',9,'p_def_func_error','parser.py',81), + ('def_func -> id opar error cpar colon type ocur expr ccur','def_func',9,'p_def_func_error','parser.py',82), + ('def_func -> id opar formals cpar colon error ocur expr ccur','def_func',9,'p_def_func_error','parser.py',83), + ('def_func -> id opar formals cpar colon type ocur error ccur','def_func',9,'p_def_func_error','parser.py',84), + ('formals -> param_list','formals',1,'p_formals','parser.py',89), + ('formals -> param_list_empty','formals',1,'p_formals','parser.py',90), + ('param_list -> param','param_list',1,'p_param_list','parser.py',96), + ('param_list -> param comma param_list','param_list',3,'p_param_list','parser.py',97), + ('param_list_empty -> epsilon','param_list_empty',1,'p_param_list_empty','parser.py',106), + ('param -> id colon type','param',3,'p_param','parser.py',110), + ('let_list -> let_assign','let_list',1,'p_let_list','parser.py',115), + ('let_list -> let_assign comma let_list','let_list',3,'p_let_list','parser.py',116), + ('let_assign -> param larrow expr','let_assign',3,'p_let_assign','parser.py',125), + ('let_assign -> param','let_assign',1,'p_let_assign','parser.py',126), + ('cases_list -> casep semi','cases_list',2,'p_cases_list','parser.py',134), + ('cases_list -> casep semi cases_list','cases_list',3,'p_cases_list','parser.py',135), + ('cases_list -> error cases_list','cases_list',2,'p_cases_list_error','parser.py',139), + ('cases_list -> error semi','cases_list',2,'p_cases_list_error','parser.py',140), + ('casep -> id colon type rarrow expr','casep',5,'p_case','parser.py',144), + ('expr -> id larrow expr','expr',3,'p_expr','parser.py',149), + ('expr -> comp','expr',1,'p_expr','parser.py',150), + ('comp -> comp less op','comp',3,'p_comp','parser.py',158), + ('comp -> comp lesseq op','comp',3,'p_comp','parser.py',159), + ('comp -> comp equal op','comp',3,'p_comp','parser.py',160), + ('comp -> op','comp',1,'p_comp','parser.py',161), + ('op -> op plus term','op',3,'p_op','parser.py',180), + ('op -> op minus term','op',3,'p_op','parser.py',181), + ('op -> term','op',1,'p_op','parser.py',182), + ('term -> term star base_call','term',3,'p_term','parser.py',197), + ('term -> term div base_call','term',3,'p_term','parser.py',198), + ('term -> base_call','term',1,'p_term','parser.py',199), + ('term -> term star error','term',3,'p_term_error','parser.py',209), + ('term -> term div error','term',3,'p_term_error','parser.py',210), + ('base_call -> factor arroba type dot func_call','base_call',5,'p_base_call','parser.py',215), + ('base_call -> factor','base_call',1,'p_base_call','parser.py',216), + ('base_call -> error arroba type dot func_call','base_call',5,'p_base_call_error','parser.py',223), + ('base_call -> factor arroba error dot func_call','base_call',5,'p_base_call_error','parser.py',224), + ('factor -> atom','factor',1,'p_factor1','parser.py',229), + ('factor -> opar expr cpar','factor',3,'p_factor1','parser.py',230), + ('factor -> factor dot func_call','factor',3,'p_factor2','parser.py',234), + ('factor -> not expr','factor',2,'p_factor2','parser.py',235), + ('factor -> func_call','factor',1,'p_factor2','parser.py',236), + ('factor -> isvoid base_call','factor',2,'p_factor3','parser.py',245), + ('factor -> nox base_call','factor',2,'p_factor3','parser.py',246), + ('factor -> let let_list in expr','factor',4,'p_expr_let','parser.py',255), + ('factor -> case expr of cases_list esac','factor',5,'p_expr_case','parser.py',267), + ('factor -> if expr then expr else expr fi','factor',7,'p_expr_if','parser.py',279), + ('factor -> while expr loop expr pool','factor',5,'p_expr_while','parser.py',293), + ('atom -> num','atom',1,'p_atom_num','parser.py',306), + ('atom -> id','atom',1,'p_atom_id','parser.py',310), + ('atom -> new type','atom',2,'p_atom_new','parser.py',314), + ('atom -> ocur block ccur','atom',3,'p_atom_block','parser.py',318), + ('atom -> error block ccur','atom',3,'p_atom_block_error','parser.py',322), + ('atom -> ocur error ccur','atom',3,'p_atom_block_error','parser.py',323), + ('atom -> ocur block error','atom',3,'p_atom_block_error','parser.py',324), + ('atom -> true','atom',1,'p_atom_boolean','parser.py',328), + ('atom -> false','atom',1,'p_atom_boolean','parser.py',329), + ('atom -> string','atom',1,'p_atom_string','parser.py',333), + ('block -> expr semi','block',2,'p_block','parser.py',338), + ('block -> expr semi block','block',3,'p_block','parser.py',339), + ('block -> error block','block',2,'p_block_error','parser.py',343), + ('block -> error semi','block',2,'p_block_error','parser.py',344), + ('func_call -> id opar args cpar','func_call',4,'p_func_call','parser.py',349), + ('func_call -> id opar error cpar','func_call',4,'p_func_call_error','parser.py',353), + ('func_call -> error opar args cpar','func_call',4,'p_func_call_error','parser.py',354), + ('args -> arg_list','args',1,'p_args','parser.py',359), + ('args -> arg_list_empty','args',1,'p_args','parser.py',360), + ('arg_list -> expr','arg_list',1,'p_arg_list','parser.py',366), + ('arg_list -> expr comma arg_list','arg_list',3,'p_arg_list','parser.py',367), + ('arg_list -> error arg_list','arg_list',2,'p_arg_list_error','parser.py',374), + ('arg_list_empty -> epsilon','arg_list_empty',1,'p_arg_list_empty','parser.py',378), +] diff --git a/src/cool_parser/parser.py b/src/cool_parser/parser.py index 2e2a301a..47fef6d2 100644 --- a/src/cool_parser/parser.py +++ b/src/cool_parser/parser.py @@ -1,403 +1,403 @@ -from utils.ast import * -from utils.errors import SyntaticError -from utils.utils import find_column -from cool_parser.base_parser import Parser - -class CoolParser(Parser): - def p_program(self, p): - 'program : class_list' - p[0] = ProgramNode(p[1]) - - def p_epsilon(self, p): - 'epsilon :' - pass - - - def p_class_list(self, p): - '''class_list : def_class class_list - | def_class''' - p[0] = [p[1]] if len(p) == 2 else [p[1]] + p[2] - - - def p_class_list_error(self, p): - '''class_list : error class_list''' - p[0] = [p[1]] if len(p) == 2 else [p[1]] + p[2] - - - - def p_def_class(self, p): - '''def_class : class type ocur feature_list ccur semi - | class type inherits type ocur feature_list ccur semi''' - if len(p) == 7: - p[0] = ClassDeclarationNode(p.slice[2], p[4]) - else: - p[0] = ClassDeclarationNode(p.slice[2], p[6], p.slice[4]) - - - def p_def_class_error(self, p): - '''def_class : class error ocur feature_list ccur semi - | class type ocur feature_list ccur error - | class error inherits type ocur feature_list ccur semi - | class error inherits error ocur feature_list ccur semi - | class type inherits error ocur feature_list ccur semi - | class type inherits type ocur feature_list ccur error''' - p[0] = ErrorNode() - - - def p_feature_list(self, p): - '''feature_list : epsilon - | def_attr semi feature_list - | def_func semi feature_list''' - p[0] = [] if len(p) == 2 else [p[1]] + p[3] - - - def p_feature_list_error(self, p): - 'feature_list : error feature_list' - p[0] = [p[1]] + p[2] - - - def p_def_attr(self, p): - '''def_attr : id colon type - | id colon type larrow expr''' - if len(p) == 4: - p[0] = AttrDeclarationNode(p.slice[1], p.slice[3]) - else: - p[0] = AttrDeclarationNode(p.slice[1], p.slice[3], p[5]) - - def p_def_attr_error(self, p): - '''def_attr : error colon type - | id colon error - | error colon type larrow expr - | id colon error larrow expr - | id colon type larrow error''' - p[0] = ErrorNode() - - - def p_def_func(self, p): - 'def_func : id opar formals cpar colon type ocur expr ccur' - p[0] = FuncDeclarationNode(p.slice[1], p[3], p.slice[6], p[8]) - - def p_def_func_error(self, p): - '''def_func : error opar formals cpar colon type ocur expr ccur - | id opar error cpar colon type ocur expr ccur - | id opar formals cpar colon error ocur expr ccur - | id opar formals cpar colon type ocur error ccur''' - p[0] = ErrorNode() - - - def p_formals(self, p): - '''formals : param_list - | param_list_empty - ''' - p[0] = p[1] - - - def p_param_list(self, p): - '''param_list : param - | param comma param_list''' - p[0] = [p[1]] if len(p) == 2 else [p[1]] + p[3] - - # def p_param_list_error(self, p): - # '''param_list : error comma param_list''' - # p[0] = [ErrorNode()] - - - def p_param_list_empty(self, p): - 'param_list_empty : epsilon' - p[0] = [] - - def p_param(self, p): - 'param : id colon type' - p[0] = (p.slice[1], p.slice[3]) - - - def p_let_list(self, p): - '''let_list : let_assign - | let_assign comma let_list''' - p[0] = [p[1]] if len(p) == 2 else [p[1]] + p[3] - - # def p_let_list_error(self, p): - # '''let_list : error let_list - # | error''' - # p[0] = [ErrorNode()] - - def p_let_assign(self, p): - '''let_assign : param larrow expr - | param''' - if len(p) == 2: - p[0] = VarDeclarationNode(p[1][0], p[1][1]) - else: - p[0] = VarDeclarationNode(p[1][0], p[1][1], p[3]) - - - def p_cases_list(self, p): - '''cases_list : casep semi - | casep semi cases_list''' - p[0] = [p[1]] if len(p) == 3 else [p[1]] + p[3] - - def p_cases_list_error(self, p): - '''cases_list : error cases_list - | error semi''' - p[0] = [ErrorNode()] - - def p_case(self, p): - 'casep : id colon type rarrow expr' - p[0] = OptionNode(p.slice[1], p.slice[3], p[5]) - - - def p_expr(self, p): - '''expr : id larrow expr - | comp - ''' - if len(p) == 4: - p[0] = AssignNode(p.slice[1], p[3]) - else: - p[0] = p[1] - - def p_comp(self, p): - '''comp : comp less op - | comp lesseq op - | comp equal op - | op''' - if len(p) == 2: - p[0] = p[1] - elif p[2] == '<': - p[0] = LessNode(p[1], p[3]) - elif p[2] == '<=': - p[0] = LessEqNode(p[1], p[3]) - elif p[2] == '=': - p[0] = EqualNode(p[1], p[3]) - - - # def p_comp_error(self, p): - # '''comp : comp less error - # | comp lesseq error - # | comp equal error''' - # p[0] = ErrorNode() - - - def p_op(self, p): - '''op : op plus term - | op minus term - | term''' - if len(p) == 2: - p[0] = p[1] - elif p[2] == '+': - p[0] = PlusNode(p[1], p[3]) - elif p[2] == '-': - p[0] = MinusNode(p[1], p[3]) - - # def p_op_error(self, p): - # '''op : op plus error - # | op minus error''' - # p[0] = ErrorNode() - - - def p_term(self, p): - '''term : term star base_call - | term div base_call - | base_call''' - if len(p) == 2: - p[0] = p[1] - elif p[2] == '*': - p[0] = StarNode(p[1], p[3]) - elif p[2] == '/': - p[0] = DivNode(p[1], p[3]) - - - def p_term_error(self, p): - '''term : term star error - | term div error''' - p[0] = ErrorNode() - - - def p_base_call(self, p): - '''base_call : factor arroba type dot func_call - | factor''' - if len(p) == 2: - p[0] = p[1] - else: - p[0] = BaseCallNode(p[1], p.slice[3], *p[5]) - - def p_base_call_error(self, p): - '''base_call : error arroba type dot func_call - | factor arroba error dot func_call - ''' - p[0] = ErrorNode() - - def p_factor1(self, p): - '''factor : atom - | opar expr cpar''' - p[0] = p[1] if len(p) == 2 else p[2] - - def p_factor2(self, p): - '''factor : factor dot func_call - | not expr - | func_call''' - if len(p) == 2: - p[0] = StaticCallNode(*p[1]) - elif p[1] == 'not': - p[0] = NotNode(p[2], p.slice[1]) - else: - p[0] = CallNode(p[1], *p[3]) - - def p_factor3(self, p): - '''factor : isvoid base_call - | nox base_call - ''' - if p[1] == 'isvoid': - p[0] = IsVoidNode(p[2], p.slice[1]) - else: - p[0] = BinaryNotNode(p[2], p.slice[1]) - - - def p_expr_let(self, p): - 'factor : let let_list in expr' - p[0] = LetNode(p[2], p[4], p.slice[1]) - - - # def p_expr_let_error(self, p): - # '''factor : let error in expr - # | let let_list in error - # | let let_list error expr''' - # p[0] = ErrorNode() - - - def p_expr_case(self, p): - 'factor : case expr of cases_list esac' - p[0] = CaseNode(p[2], p[4], p.slice[1]) - - # def p_expr_case_error(self, p): - # '''factor : case error of cases_list esac - # | case expr of error esac - # | case expr error cases_list esac - # | case expr of cases_list error''' - # p[0] = ErrorNode() - - - def p_expr_if(self, p): - 'factor : if expr then expr else expr fi' - p[0] = ConditionalNode(p[2], p[4], p[6], p.slice[1]) - - # def p_expr_if_error(self, p): - # '''factor : if error then expr else expr fi - # | if expr then error else expr fi - # | if expr then expr else error fi - # | if expr error expr else expr fi - # | if expr then expr error expr fi - # | if expr then expr else expr error''' - # p[0] = ErrorNode() - - - def p_expr_while(self, p): - 'factor : while expr loop expr pool' - p[0] = WhileNode(p[2], p[4], p.slice[1]) - - - # def p_expr_while_error(self, p): - # '''factor : while error loop expr pool - # | while expr loop error pool - # | while expr loop expr error - # | while expr error expr pool''' - # p[0] = ErrorNode() - - - def p_atom_num(self, p): - 'atom : num' - p[0] = ConstantNumNode(p.slice[1]) - - def p_atom_id(self, p): - 'atom : id' - p[0] = VariableNode(p.slice[1]) - - def p_atom_new(self, p): - 'atom : new type' - p[0] = InstantiateNode(p.slice[2]) - - def p_atom_block(self, p): - 'atom : ocur block ccur' - p[0] = BlockNode(p[2], p.slice[1]) - - def p_atom_block_error(self, p): - '''atom : error block ccur - | ocur error ccur - | ocur block error''' - p[0] = ErrorNode() - - def p_atom_boolean(self, p): - '''atom : true - | false''' - p[0] = ConstantBoolNode(p.slice[1]) - - def p_atom_string(self, p): - 'atom : string' - p[0] = ConstantStrNode(p.slice[1]) - - - def p_block(self, p): - '''block : expr semi - | expr semi block''' - p[0] = [p[1]] if len(p) == 3 else [p[1]] + p[3] - - def p_block_error(self, p): - '''block : error block - | error semi''' - p[0] = [ErrorNode()] - - - def p_func_call(self, p): - 'func_call : id opar args cpar' - p[0] = (p.slice[1], p[3]) - - def p_func_call_error(self, p): - '''func_call : id opar error cpar - | error opar args cpar''' - p[0] = (ErrorNode(), ErrorNode()) - - - def p_args(self, p): - '''args : arg_list - | arg_list_empty - ''' - p[0] = p[1] - - - def p_arg_list(self, p): - '''arg_list : expr - | expr comma arg_list''' - if len(p) == 2: - p[0] = [p[1]] - else: - p[0] = [p[1]] + p[3] - - def p_arg_list_error(self, p): - 'arg_list : error arg_list' - p[0] = [ErrorNode()] - - def p_arg_list_empty(self, p): - 'arg_list_empty : epsilon' - p[0] = [] - - # Error rule for syntax errors - def p_error(self, p): - self.errors = True - if p: - self.print_error(p) - else: - error_text = SyntaticError.ERROR % 'EOF' - column = find_column(self.lexer.lexer, self.lexer.lexer) - line = self.lexer.lexer.lineno - print(SyntaticError(error_text, line, column - 1)) - - def print_error(self, tok): - error_text = SyntaticError.ERROR % tok.value - line, column = tok.lineno, tok.column - print(SyntaticError(error_text, line, column)) - - -if __name__ == "__main__": - s = '''''' - # Parser() - parser = CoolParser() - result = parser.parse(s) +from utils.ast import * +from utils.errors import SyntaticError +from utils.utils import find_column +from cool_parser.base_parser import Parser + +class CoolParser(Parser): + def p_program(self, p): + 'program : class_list' + p[0] = ProgramNode(p[1]) + + def p_epsilon(self, p): + 'epsilon :' + pass + + + def p_class_list(self, p): + '''class_list : def_class class_list + | def_class''' + p[0] = [p[1]] if len(p) == 2 else [p[1]] + p[2] + + + def p_class_list_error(self, p): + '''class_list : error class_list''' + p[0] = [p[1]] if len(p) == 2 else [p[1]] + p[2] + + + + def p_def_class(self, p): + '''def_class : class type ocur feature_list ccur semi + | class type inherits type ocur feature_list ccur semi''' + if len(p) == 7: + p[0] = ClassDeclarationNode(p.slice[2], p[4]) + else: + p[0] = ClassDeclarationNode(p.slice[2], p[6], p.slice[4]) + + + def p_def_class_error(self, p): + '''def_class : class error ocur feature_list ccur semi + | class type ocur feature_list ccur error + | class error inherits type ocur feature_list ccur semi + | class error inherits error ocur feature_list ccur semi + | class type inherits error ocur feature_list ccur semi + | class type inherits type ocur feature_list ccur error''' + p[0] = ErrorNode() + + + def p_feature_list(self, p): + '''feature_list : epsilon + | def_attr semi feature_list + | def_func semi feature_list''' + p[0] = [] if len(p) == 2 else [p[1]] + p[3] + + + def p_feature_list_error(self, p): + 'feature_list : error feature_list' + p[0] = [p[1]] + p[2] + + + def p_def_attr(self, p): + '''def_attr : id colon type + | id colon type larrow expr''' + if len(p) == 4: + p[0] = AttrDeclarationNode(p.slice[1], p.slice[3]) + else: + p[0] = AttrDeclarationNode(p.slice[1], p.slice[3], p[5]) + + def p_def_attr_error(self, p): + '''def_attr : error colon type + | id colon error + | error colon type larrow expr + | id colon error larrow expr + | id colon type larrow error''' + p[0] = ErrorNode() + + + def p_def_func(self, p): + 'def_func : id opar formals cpar colon type ocur expr ccur' + p[0] = FuncDeclarationNode(p.slice[1], p[3], p.slice[6], p[8]) + + def p_def_func_error(self, p): + '''def_func : error opar formals cpar colon type ocur expr ccur + | id opar error cpar colon type ocur expr ccur + | id opar formals cpar colon error ocur expr ccur + | id opar formals cpar colon type ocur error ccur''' + p[0] = ErrorNode() + + + def p_formals(self, p): + '''formals : param_list + | param_list_empty + ''' + p[0] = p[1] + + + def p_param_list(self, p): + '''param_list : param + | param comma param_list''' + p[0] = [p[1]] if len(p) == 2 else [p[1]] + p[3] + + # def p_param_list_error(self, p): + # '''param_list : error comma param_list''' + # p[0] = [ErrorNode()] + + + def p_param_list_empty(self, p): + 'param_list_empty : epsilon' + p[0] = [] + + def p_param(self, p): + 'param : id colon type' + p[0] = (p.slice[1], p.slice[3]) + + + def p_let_list(self, p): + '''let_list : let_assign + | let_assign comma let_list''' + p[0] = [p[1]] if len(p) == 2 else [p[1]] + p[3] + + # def p_let_list_error(self, p): + # '''let_list : error let_list + # | error''' + # p[0] = [ErrorNode()] + + def p_let_assign(self, p): + '''let_assign : param larrow expr + | param''' + if len(p) == 2: + p[0] = VarDeclarationNode(p[1][0], p[1][1]) + else: + p[0] = VarDeclarationNode(p[1][0], p[1][1], p[3]) + + + def p_cases_list(self, p): + '''cases_list : casep semi + | casep semi cases_list''' + p[0] = [p[1]] if len(p) == 3 else [p[1]] + p[3] + + def p_cases_list_error(self, p): + '''cases_list : error cases_list + | error semi''' + p[0] = [ErrorNode()] + + def p_case(self, p): + 'casep : id colon type rarrow expr' + p[0] = OptionNode(p.slice[1], p.slice[3], p[5]) + + + def p_expr(self, p): + '''expr : id larrow expr + | comp + ''' + if len(p) == 4: + p[0] = AssignNode(p.slice[1], p[3]) + else: + p[0] = p[1] + + def p_comp(self, p): + '''comp : comp less op + | comp lesseq op + | comp equal op + | op''' + if len(p) == 2: + p[0] = p[1] + elif p[2] == '<': + p[0] = LessNode(p[1], p[3]) + elif p[2] == '<=': + p[0] = LessEqNode(p[1], p[3]) + elif p[2] == '=': + p[0] = EqualNode(p[1], p[3]) + + + # def p_comp_error(self, p): + # '''comp : comp less error + # | comp lesseq error + # | comp equal error''' + # p[0] = ErrorNode() + + + def p_op(self, p): + '''op : op plus term + | op minus term + | term''' + if len(p) == 2: + p[0] = p[1] + elif p[2] == '+': + p[0] = PlusNode(p[1], p[3]) + elif p[2] == '-': + p[0] = MinusNode(p[1], p[3]) + + # def p_op_error(self, p): + # '''op : op plus error + # | op minus error''' + # p[0] = ErrorNode() + + + def p_term(self, p): + '''term : term star base_call + | term div base_call + | base_call''' + if len(p) == 2: + p[0] = p[1] + elif p[2] == '*': + p[0] = StarNode(p[1], p[3]) + elif p[2] == '/': + p[0] = DivNode(p[1], p[3]) + + + def p_term_error(self, p): + '''term : term star error + | term div error''' + p[0] = ErrorNode() + + + def p_base_call(self, p): + '''base_call : factor arroba type dot func_call + | factor''' + if len(p) == 2: + p[0] = p[1] + else: + p[0] = BaseCallNode(p[1], p.slice[3], *p[5]) + + def p_base_call_error(self, p): + '''base_call : error arroba type dot func_call + | factor arroba error dot func_call + ''' + p[0] = ErrorNode() + + def p_factor1(self, p): + '''factor : atom + | opar expr cpar''' + p[0] = p[1] if len(p) == 2 else p[2] + + def p_factor2(self, p): + '''factor : factor dot func_call + | not expr + | func_call''' + if len(p) == 2: + p[0] = StaticCallNode(*p[1]) + elif p[1] == 'not': + p[0] = NotNode(p[2], p.slice[1]) + else: + p[0] = CallNode(p[1], *p[3]) + + def p_factor3(self, p): + '''factor : isvoid base_call + | nox base_call + ''' + if p[1] == 'isvoid': + p[0] = IsVoidNode(p[2], p.slice[1]) + else: + p[0] = BinaryNotNode(p[2], p.slice[1]) + + + def p_expr_let(self, p): + 'factor : let let_list in expr' + p[0] = LetNode(p[2], p[4], p.slice[1]) + + + # def p_expr_let_error(self, p): + # '''factor : let error in expr + # | let let_list in error + # | let let_list error expr''' + # p[0] = ErrorNode() + + + def p_expr_case(self, p): + 'factor : case expr of cases_list esac' + p[0] = CaseNode(p[2], p[4], p.slice[1]) + + # def p_expr_case_error(self, p): + # '''factor : case error of cases_list esac + # | case expr of error esac + # | case expr error cases_list esac + # | case expr of cases_list error''' + # p[0] = ErrorNode() + + + def p_expr_if(self, p): + 'factor : if expr then expr else expr fi' + p[0] = ConditionalNode(p[2], p[4], p[6], p.slice[1]) + + # def p_expr_if_error(self, p): + # '''factor : if error then expr else expr fi + # | if expr then error else expr fi + # | if expr then expr else error fi + # | if expr error expr else expr fi + # | if expr then expr error expr fi + # | if expr then expr else expr error''' + # p[0] = ErrorNode() + + + def p_expr_while(self, p): + 'factor : while expr loop expr pool' + p[0] = WhileNode(p[2], p[4], p.slice[1]) + + + # def p_expr_while_error(self, p): + # '''factor : while error loop expr pool + # | while expr loop error pool + # | while expr loop expr error + # | while expr error expr pool''' + # p[0] = ErrorNode() + + + def p_atom_num(self, p): + 'atom : num' + p[0] = ConstantNumNode(p.slice[1]) + + def p_atom_id(self, p): + 'atom : id' + p[0] = VariableNode(p.slice[1]) + + def p_atom_new(self, p): + 'atom : new type' + p[0] = InstantiateNode(p.slice[2]) + + def p_atom_block(self, p): + 'atom : ocur block ccur' + p[0] = BlockNode(p[2], p.slice[1]) + + def p_atom_block_error(self, p): + '''atom : error block ccur + | ocur error ccur + | ocur block error''' + p[0] = ErrorNode() + + def p_atom_boolean(self, p): + '''atom : true + | false''' + p[0] = ConstantBoolNode(p.slice[1]) + + def p_atom_string(self, p): + 'atom : string' + p[0] = ConstantStrNode(p.slice[1]) + + + def p_block(self, p): + '''block : expr semi + | expr semi block''' + p[0] = [p[1]] if len(p) == 3 else [p[1]] + p[3] + + def p_block_error(self, p): + '''block : error block + | error semi''' + p[0] = [ErrorNode()] + + + def p_func_call(self, p): + 'func_call : id opar args cpar' + p[0] = (p.slice[1], p[3]) + + def p_func_call_error(self, p): + '''func_call : id opar error cpar + | error opar args cpar''' + p[0] = (ErrorNode(), ErrorNode()) + + + def p_args(self, p): + '''args : arg_list + | arg_list_empty + ''' + p[0] = p[1] + + + def p_arg_list(self, p): + '''arg_list : expr + | expr comma arg_list''' + if len(p) == 2: + p[0] = [p[1]] + else: + p[0] = [p[1]] + p[3] + + def p_arg_list_error(self, p): + 'arg_list : error arg_list' + p[0] = [ErrorNode()] + + def p_arg_list_empty(self, p): + 'arg_list_empty : epsilon' + p[0] = [] + + # Error rule for syntax errors + def p_error(self, p): + self.errors = True + if p: + self.print_error(p) + else: + error_text = SyntaticError.ERROR % 'EOF' + column = find_column(self.lexer.lexer, self.lexer.lexer) + line = self.lexer.lexer.lineno + print(SyntaticError(error_text, line, column - 1)) + + def print_error(self, tok): + error_text = SyntaticError.ERROR % tok.value + line, column = tok.lineno, tok.column + print(SyntaticError(error_text, line, column)) + + +if __name__ == "__main__": + s = '''''' + # Parser() + parser = CoolParser() + result = parser.parse(s) # print(result) \ No newline at end of file diff --git a/src/coolc.sh b/src/coolc.sh index 2bc04b9b..c2fb11b3 100644 --- a/src/coolc.sh +++ b/src/coolc.sh @@ -1,15 +1,15 @@ -# Incluye aqui las instrucciones necesarias para ejecutar su compilador - -INPUT_FILE=$1 -OUTPUT_FILE=$INPUT_FILE -# OUTPUT_FILE=${INPUT_FILE:0:-2} - -# Si su compilador no lo hace ya, aquí puede imprimir información de contacto -echo "LINEA_CON_NOMBRE_Y_VERSION_DEL_COMPILADOR" # TODO: Recuerde cambiar estas lineas -echo "Copyright (c) 2019: Loraine Monteagudo, Amanda Marrero, Manuel Fernandez" - -FILE="../src/main.py" -# echo $FILE - -# echo "Compiling $INPUT_FILE into $OUTPUT_FILE" +# Incluye aqui las instrucciones necesarias para ejecutar su compilador + +INPUT_FILE=$1 +OUTPUT_FILE=$INPUT_FILE +# OUTPUT_FILE=${INPUT_FILE:0:-2} + +# Si su compilador no lo hace ya, aquí puede imprimir información de contacto +echo "LINEA_CON_NOMBRE_Y_VERSION_DEL_COMPILADOR" # TODO: Recuerde cambiar estas lineas +echo "Copyright (c) 2019: Loraine Monteagudo, Amanda Marrero, Manuel Fernandez" + +FILE="../src/main.py" +# echo $FILE + +# echo "Compiling $INPUT_FILE into $OUTPUT_FILE" python ${FILE} $INPUT_FILE \ No newline at end of file diff --git a/src/lexer/lexer.py b/src/lexer/lexer.py index 2f749cf7..e0eee13c 100644 --- a/src/lexer/lexer.py +++ b/src/lexer/lexer.py @@ -1,324 +1,324 @@ -import ply.lex as lex -from pprint import pprint - -from utils.tokens import tokens, reserved, Token -from utils.errors import LexicographicError, SyntaticError -from utils.utils import find_column - - -class CoolLexer: - def __init__(self, **kwargs): - self.reserved = reserved - self.tokens = tokens - self.errors = [] - self.lexer = lex.lex(module=self, **kwargs) - self.lexer.lineno = 1 - self.lexer.linestart = 0 - - def _update_column(self, t): - t.column = t.lexpos - t.lexer.linestart + 1 - - states = ( - ('comments', 'exclusive'), - ('strings', 'exclusive') - ) - - # Comments - def t_comment(self, t): - r'--.*($|\n)' - t.lexer.lineno += 1 - t.lexer.linestart = t.lexer.lexpos - - def t_comments(self,t): - r'\(\*' - t.lexer.level = 1 - t.lexer.begin('comments') - - def t_comments_open(self, t): - r'\(\*' - t.lexer.level += 1 - - def t_comments_close(self, t): - r'\*\)' - t.lexer.level -= 1 - - if t.lexer.level == 0: - t.lexer.begin('INITIAL') - - def t_comments_newline(self, t): - r'\n+' - t.lexer.lineno += len(t.value) - t.lexer.linestart = t.lexer.lexpos - - t_comments_ignore = ' \t\f\r\t\v' - - def t_comments_error(self, t): - t.lexer.skip(1) - - def t_comments_eof(self, t): - self._update_column(t) - if t.lexer.level > 0: - error_text = LexicographicError.EOF_COMMENT - self.errors.append(LexicographicError(error_text, t.lineno, t.column)) - - # Strings - t_strings_ignore = '' - - def t_strings(self, t): - r'\"' - t.lexer.str_start = t.lexer.lexpos - t.lexer.myString = '' - t.lexer.backslash = False - t.lexer.begin('strings') - - def t_strings_end(self, t): - r'\"' - self._update_column(t) - - if t.lexer.backslash : - t.lexer.myString += '"' - t.lexer.backslash = False - else: - t.value = t.lexer.myString - t.type = 'string' - t.lexer.begin('INITIAL') - return t - - def t_strings_newline(self, t): - r'\n' - t.lexer.lineno += 1 - self._update_column(t) - - t.lexer.linestart = t.lexer.lexpos - - if not t.lexer.backslash: - error_text = LexicographicError.UNDETERMINATED_STRING - self.errors.append(LexicographicError(error_text, t.lineno, t.column)) - t.lexer.begin('INITIAL') - - def t_strings_nill(self, t): - r'\0' - error_text = LexicographicError.NULL_STRING - self._update_column(t) - - self.errors.append(LexicographicError(error_text, t.lineno, t.column)) - - def t_strings_consume(self, t): - r'[^\n]' - # self._update_column(t) - - if t.lexer.backslash : - if t.value == 'b': - t.lexer.myString += '\b' - - elif t.value == 't': - t.lexer.myString += '\t' - - - elif t.value == 'f': - t.lexer.myString += '\f' - - - elif t.value == 'n': - t.lexer.myString += '\n' - - elif t.value == '\\': - t.lexer.myString += '\\' - else: - t.lexer.myString += t.value - t.lexer.backslash = False - else: - if t.value != '\\': - t.lexer.myString += t.value - else: - t.lexer.backslash = True - - def t_strings_error(self, t): - pass - - def t_strings_eof(self, t): - self._update_column(t) - - error_text = LexicographicError.EOF_STRING - self.errors.append(LexicographicError(error_text, t.lineno, t.column)) - - - t_ignore = ' \t\f\r\t\v' - - - def t_semi(self, t): - r';' - self._update_column(t) - return t - - def t_colon(self, t): - r':' - self._update_column(t) - return t - - def t_comma(self, t): - r',' - self._update_column(t) - return t - - def t_dot(self, t): - r'\.' - self._update_column(t) - return t - - def t_opar(self, t): - r'\(' - self._update_column(t) - return t - - def t_cpar(self, t): - r'\)' - self._update_column(t) - return t - - def t_ocur(self, t): - r'\{' - self._update_column(t) - return t - - def t_ccur(self, t): - r'\}' - self._update_column(t) - return t - - def t_larrow(self, t): - r'<-' - self._update_column(t) - return t - - def t_arroba(self, t): - r'@' - self._update_column(t) - return t - - def t_rarrow(self, t): - r'=>' - self._update_column(t) - return t - - def t_nox(self, t): - r'~' - self._update_column(t) - return - - def t_equal(self, t): - r'=' - self._update_column(t) - return t - - def t_plus(self, t): - r'\+' - self._update_column(t) - return t - - def t_of(self, t): - r'of' - self._update_column(t) - return t - - def t_minus(self, t): - r'-' - self._update_column(t) - return t - - def t_star(self, t): - r'\*' - self._update_column(t) - return t - - def t_div(self, t): - r'/' - self._update_column(t) - return t - - def t_lesseq(self, t): - r'<=' - self._update_column(t) - return t - - def t_less(self, t): - r'<' - self._update_column(t) - return t - - - def t_inherits(self, t): - r'inherits' - self._update_column(t) - return t - - def t_type(self, t): - r'[A-Z][a-zA-Z_0-9]*' - t.type = self.reserved.get(t.value.lower(), 'type') - self._update_column(t) - return t - - # Check for reserved words: - def t_id(self, t): - r'[a-z][a-zA-Z_0-9]*' - t.type = self.reserved.get(t.value.lower(), 'id') - self._update_column(t) - return t - - - # Get Numbers - def t_num(self, t): - r'\d+(\.\d+)? ' - t.value = float(t.value) - self._update_column(t) - return t - - # Define a rule so we can track line numbers - def t_newline(self, t): - r'\n+' - t.lexer.lineno += len(t.value) - t.lexer.linestart = t.lexer.lexpos - - # Error handling rule - def t_error(self, t): - self._update_column(t) - error_text = LexicographicError.UNKNOWN_TOKEN % t.value[0] - - self.errors.append(LexicographicError(error_text, t.lineno, t.column)) - t.lexer.skip(1) - #t.lexer.skip(len(t.value)) - - def tokenize_text(self, text: str) -> list: - self.lexer.input(text) - tokens = [] - for tok in self.lexer: - tokens.append(Token(tok.type, tok.value, tok.lineno, tok.column)) - self.lexer.lineno = 1 - self.lexer.linestart = 0 - return tokens - - def _check_empty_line(self, tokens: list): - if len(tokens) == 0: - error_text = SyntaticError.ERROR % 'EOF' - print(SyntaticError(error_text, 0, 0)) - raise Exception() - - - def run(self, text: str): - tokens = self.tokenize_text(text) - if self.errors: - for error in self.errors: - print(error) - raise Exception() - - self._check_empty_line(tokens) - return tokens - -if __name__ == "__main__": - lexer = CoolLexer() - - data = open('string4.cl',encoding='utf-8') - data = data.read() - res = lexer.tokenize_text(data) - #pprint(res) - pprint(lexer.errors) +import ply.lex as lex +from pprint import pprint + +from utils.tokens import tokens, reserved, Token +from utils.errors import LexicographicError, SyntaticError +from utils.utils import find_column + + +class CoolLexer: + def __init__(self, **kwargs): + self.reserved = reserved + self.tokens = tokens + self.errors = [] + self.lexer = lex.lex(module=self, **kwargs) + self.lexer.lineno = 1 + self.lexer.linestart = 0 + + def _update_column(self, t): + t.column = t.lexpos - t.lexer.linestart + 1 + + states = ( + ('comments', 'exclusive'), + ('strings', 'exclusive') + ) + + # Comments + def t_comment(self, t): + r'--.*($|\n)' + t.lexer.lineno += 1 + t.lexer.linestart = t.lexer.lexpos + + def t_comments(self,t): + r'\(\*' + t.lexer.level = 1 + t.lexer.begin('comments') + + def t_comments_open(self, t): + r'\(\*' + t.lexer.level += 1 + + def t_comments_close(self, t): + r'\*\)' + t.lexer.level -= 1 + + if t.lexer.level == 0: + t.lexer.begin('INITIAL') + + def t_comments_newline(self, t): + r'\n+' + t.lexer.lineno += len(t.value) + t.lexer.linestart = t.lexer.lexpos + + t_comments_ignore = ' \t\f\r\t\v' + + def t_comments_error(self, t): + t.lexer.skip(1) + + def t_comments_eof(self, t): + self._update_column(t) + if t.lexer.level > 0: + error_text = LexicographicError.EOF_COMMENT + self.errors.append(LexicographicError(error_text, t.lineno, t.column)) + + # Strings + t_strings_ignore = '' + + def t_strings(self, t): + r'\"' + t.lexer.str_start = t.lexer.lexpos + t.lexer.myString = '' + t.lexer.backslash = False + t.lexer.begin('strings') + + def t_strings_end(self, t): + r'\"' + self._update_column(t) + + if t.lexer.backslash : + t.lexer.myString += '"' + t.lexer.backslash = False + else: + t.value = t.lexer.myString + t.type = 'string' + t.lexer.begin('INITIAL') + return t + + def t_strings_newline(self, t): + r'\n' + t.lexer.lineno += 1 + self._update_column(t) + + t.lexer.linestart = t.lexer.lexpos + + if not t.lexer.backslash: + error_text = LexicographicError.UNDETERMINATED_STRING + self.errors.append(LexicographicError(error_text, t.lineno, t.column)) + t.lexer.begin('INITIAL') + + def t_strings_nill(self, t): + r'\0' + error_text = LexicographicError.NULL_STRING + self._update_column(t) + + self.errors.append(LexicographicError(error_text, t.lineno, t.column)) + + def t_strings_consume(self, t): + r'[^\n]' + # self._update_column(t) + + if t.lexer.backslash : + if t.value == 'b': + t.lexer.myString += '\b' + + elif t.value == 't': + t.lexer.myString += '\t' + + + elif t.value == 'f': + t.lexer.myString += '\f' + + + elif t.value == 'n': + t.lexer.myString += '\n' + + elif t.value == '\\': + t.lexer.myString += '\\' + else: + t.lexer.myString += t.value + t.lexer.backslash = False + else: + if t.value != '\\': + t.lexer.myString += t.value + else: + t.lexer.backslash = True + + def t_strings_error(self, t): + pass + + def t_strings_eof(self, t): + self._update_column(t) + + error_text = LexicographicError.EOF_STRING + self.errors.append(LexicographicError(error_text, t.lineno, t.column)) + + + t_ignore = ' \t\f\r\t\v' + + + def t_semi(self, t): + r';' + self._update_column(t) + return t + + def t_colon(self, t): + r':' + self._update_column(t) + return t + + def t_comma(self, t): + r',' + self._update_column(t) + return t + + def t_dot(self, t): + r'\.' + self._update_column(t) + return t + + def t_opar(self, t): + r'\(' + self._update_column(t) + return t + + def t_cpar(self, t): + r'\)' + self._update_column(t) + return t + + def t_ocur(self, t): + r'\{' + self._update_column(t) + return t + + def t_ccur(self, t): + r'\}' + self._update_column(t) + return t + + def t_larrow(self, t): + r'<-' + self._update_column(t) + return t + + def t_arroba(self, t): + r'@' + self._update_column(t) + return t + + def t_rarrow(self, t): + r'=>' + self._update_column(t) + return t + + def t_nox(self, t): + r'~' + self._update_column(t) + return + + def t_equal(self, t): + r'=' + self._update_column(t) + return t + + def t_plus(self, t): + r'\+' + self._update_column(t) + return t + + def t_of(self, t): + r'of' + self._update_column(t) + return t + + def t_minus(self, t): + r'-' + self._update_column(t) + return t + + def t_star(self, t): + r'\*' + self._update_column(t) + return t + + def t_div(self, t): + r'/' + self._update_column(t) + return t + + def t_lesseq(self, t): + r'<=' + self._update_column(t) + return t + + def t_less(self, t): + r'<' + self._update_column(t) + return t + + + def t_inherits(self, t): + r'inherits' + self._update_column(t) + return t + + def t_type(self, t): + r'[A-Z][a-zA-Z_0-9]*' + t.type = self.reserved.get(t.value.lower(), 'type') + self._update_column(t) + return t + + # Check for reserved words: + def t_id(self, t): + r'[a-z][a-zA-Z_0-9]*' + t.type = self.reserved.get(t.value.lower(), 'id') + self._update_column(t) + return t + + + # Get Numbers + def t_num(self, t): + r'\d+(\.\d+)? ' + t.value = float(t.value) + self._update_column(t) + return t + + # Define a rule so we can track line numbers + def t_newline(self, t): + r'\n+' + t.lexer.lineno += len(t.value) + t.lexer.linestart = t.lexer.lexpos + + # Error handling rule + def t_error(self, t): + self._update_column(t) + error_text = LexicographicError.UNKNOWN_TOKEN % t.value[0] + + self.errors.append(LexicographicError(error_text, t.lineno, t.column)) + t.lexer.skip(1) + #t.lexer.skip(len(t.value)) + + def tokenize_text(self, text: str) -> list: + self.lexer.input(text) + tokens = [] + for tok in self.lexer: + tokens.append(Token(tok.type, tok.value, tok.lineno, tok.column)) + self.lexer.lineno = 1 + self.lexer.linestart = 0 + return tokens + + def _check_empty_line(self, tokens: list): + if len(tokens) == 0: + error_text = SyntaticError.ERROR % 'EOF' + print(SyntaticError(error_text, 0, 0)) + raise Exception() + + + def run(self, text: str): + tokens = self.tokenize_text(text) + if self.errors: + for error in self.errors: + print(error) + raise Exception() + + self._check_empty_line(tokens) + return tokens + +if __name__ == "__main__": + lexer = CoolLexer() + + data = open('string4.cl',encoding='utf-8') + data = data.read() + res = lexer.tokenize_text(data) + #pprint(res) + pprint(lexer.errors) diff --git a/src/main.py b/src/main.py index bcdec1d0..e6a5648f 100644 --- a/src/main.py +++ b/src/main.py @@ -1,34 +1,34 @@ -from lexer import CoolLexer -from utils.errors import CompilerError -from semantic.semantic import semantic_analysis -from codegen import codegen_pipeline -from cool_parser import CoolParser - -def run_pipeline(input): - try: - with open(input_) as f: - text = f.read() - - lexer = CoolLexer() - tokens = lexer.run(text) - - p = CoolParser(lexer) - - ast = p.parse(text, debug=True) - if p.errors: - raise Exception() - - ast, errors, context, scope = semantic_analysis(ast) - if not errors: - ast, context, scope, cil_ast = codegen_pipeline(context, ast, scope) - - except FileNotFoundError: - error_text = CompilerError.UNKNOWN_FILE % input_ - print(CompilerError(error_text, 0, 0)) - - -if __name__ == "__main__": - # input_ = sys.argv[1] - input_ = f'test.cl' - # output_ = args.output +from lexer import CoolLexer +from utils.errors import CompilerError +from semantic.semantic import semantic_analysis +from codegen import codegen_pipeline +from cool_parser import CoolParser + +def run_pipeline(input): + try: + with open(input_) as f: + text = f.read() + + lexer = CoolLexer() + tokens = lexer.run(text) + + p = CoolParser(lexer) + + ast = p.parse(text, debug=True) + if p.errors: + raise Exception() + + ast, errors, context, scope = semantic_analysis(ast) + if not errors: + ast, context, scope, cil_ast = codegen_pipeline(context, ast, scope) + + except FileNotFoundError: + error_text = CompilerError.UNKNOWN_FILE % input_ + print(CompilerError(error_text, 0, 0)) + + +if __name__ == "__main__": + # input_ = sys.argv[1] + input_ = f'test.cl' + # output_ = args.output run_pipeline(input_) \ No newline at end of file diff --git a/src/makefile b/src/makefile index ff40efc9..ce7d1eca 100644 --- a/src/makefile +++ b/src/makefile @@ -1,10 +1,10 @@ -.PHONY: clean - -main: - # Compiling the compiler :) - -clean: - rm -rf build/* - -test: +.PHONY: clean + +main: + # Compiling the compiler :) + +clean: + rm -rf build/* + +test: pytest ../tests -v --tb=short -m=${TAG} \ No newline at end of file diff --git a/src/self.cl b/src/self.cl index 893f2b06..5026d434 100644 --- a/src/self.cl +++ b/src/self.cl @@ -1,9 +1,9 @@ -class Silly { - copy() : SELF_TYPE { self }; -}; -class Sally inherits Silly { }; - -class Main { - x : Sally <- (new Sally).copy(); - main() : Sally { new SELF_TYPE }; +class Silly { + copy() : SELF_TYPE { self }; +}; +class Sally inherits Silly { }; + +class Main { + x : Sally <- (new Sally).copy(); + main() : Sally { new SELF_TYPE }; }; \ No newline at end of file diff --git a/src/semantic/semantic.py b/src/semantic/semantic.py index 4a98e511..b0306f2d 100644 --- a/src/semantic/semantic.py +++ b/src/semantic/semantic.py @@ -1,48 +1,48 @@ -from semantic.visitors.type_collector import TypeCollector -from semantic.visitors.type_builder import TypeBuilder -from semantic.visitors.var_collector import VarCollector -from semantic.visitors.type_checker import TypeChecker - - -def semantic_analysis(ast): - print('============== COLLECTING TYPES ===============') - errors = [] - collector = TypeCollector(errors) - collector.visit(ast) - context = collector.context - print('Errors: [') - for error in errors: - print('\t', error) - print('=============== BUILDING TYPES ================') - builder = TypeBuilder(context, errors) - builder.visit(ast) - print('Errors: [') - for error in errors: - print('\t', error) - print(']') - print('=============== VAR COLLECTOR ================') - checker = VarCollector(context, errors) - scope = checker.visit(ast) - print('Errors: [') - for error in errors: - print('\t', error) - print(']') - # print('=============== SELF TYPE ================') - # checker = SelfTypeVisitor(context, errors) - # checker.visit(ast, scope) - # print('Errors: [') - # for error in errors: - # print('\t', error) - # print(']') - print('=============== CHECKING TYPES ================') - checker = TypeChecker(context, errors) - checker.visit(ast, scope) - print('Errors: [') - for error in errors: - print('\t', error) - print(']') - print('Context:') - print(context) - print('Scope:') - print(scope) - return ast, errors, context, scope +from semantic.visitors.type_collector import TypeCollector +from semantic.visitors.type_builder import TypeBuilder +from semantic.visitors.var_collector import VarCollector +from semantic.visitors.type_checker import TypeChecker + + +def semantic_analysis(ast): + print('============== COLLECTING TYPES ===============') + errors = [] + collector = TypeCollector(errors) + collector.visit(ast) + context = collector.context + print('Errors: [') + for error in errors: + print('\t', error) + print('=============== BUILDING TYPES ================') + builder = TypeBuilder(context, errors) + builder.visit(ast) + print('Errors: [') + for error in errors: + print('\t', error) + print(']') + print('=============== VAR COLLECTOR ================') + checker = VarCollector(context, errors) + scope = checker.visit(ast) + print('Errors: [') + for error in errors: + print('\t', error) + print(']') + # print('=============== SELF TYPE ================') + # checker = SelfTypeVisitor(context, errors) + # checker.visit(ast, scope) + # print('Errors: [') + # for error in errors: + # print('\t', error) + # print(']') + print('=============== CHECKING TYPES ================') + checker = TypeChecker(context, errors) + checker.visit(ast, scope) + print('Errors: [') + for error in errors: + print('\t', error) + print(']') + print('Context:') + print(context) + print('Scope:') + print(scope) + return ast, errors, context, scope diff --git a/src/semantic/tools.py b/src/semantic/tools.py index 2d3c7d60..e2fef5b1 100644 --- a/src/semantic/tools.py +++ b/src/semantic/tools.py @@ -1,121 +1,121 @@ -import itertools as itt -from utils.errors import SemanticError, AttributesError, TypesError, NamesError -from semantic.types import Type - -class Context: - def __init__(self): - self.types = {} - - def create_type(self, name:str, pos): - if name in self.types: - error_text = TypesError.TYPE_ALREADY_DEFINED % name - raise TypesError(error_text, *pos) - typex = self.types[name] = Type(name, pos) - return typex - - def get_type(self, name:str, pos): - try: - return self.types[name] - except KeyError: - error_text = TypesError.TYPE_NOT_DEFINED % name - raise TypesError(error_text, *pos) - - def __str__(self): - return '{\n\t' + '\n\t'.join(y for x in self.types.values() for y in str(x).split('\n')) + '\n}' - - def __repr__(self): - return str(self) - -class VariableInfo: - def __init__(self, name, vtype, index=None): - self.name = name - self.type = vtype - self.index = index # saves the index in the scope of the variable - - def __str__(self): - return f'{self.name} : {self.type.name}' - - def __repr__(self): - return str(self) - -class Scope: - def __init__(self, parent=None): - self.locals = [] - self.attributes = [] - self.parent = parent - self.children = [] - self.expr_dict = { } - self.functions = { } - self.index = 0 if parent is None else len(parent) - - def __len__(self): - return len(self.locals) - - def __str__(self): - res = '' - for scope in self.children: - try: - classx = scope.locals[0] - name = classx.type.name - except: - name = '1' - res += name + scope.tab_level(1, '', 1) #'\n\t' + ('\n' + '\t').join(str(local) for local in scope.locals) + '\n' - return res - - def tab_level(self, tabs, name, num): - res = ('\t' * tabs) + ('\n' + ('\t' * tabs)).join(str(local) for local in self.locals) - if self.functions: - children = '\n'.join(v.tab_level(tabs + 1, '[method] ' + k, num) for k, v in self.functions.items()) - else: - children = '\n'.join(child.tab_level(tabs + 1, num, num + 1) for child in self.children) - return "\t" * (tabs-1) + f'{name}' + "\t" * tabs + f'\n{res}\n{children}' - - def __repr__(self): - return str(self) - - def create_child(self): - child = Scope(self) - self.children.append(child) - return child - - def define_variable(self, vname, vtype): - info = VariableInfo(vname, vtype) - self.locals.append(info) - return info - - def find_variable(self, vname, index=None): - locals = self.attributes + self.locals - locals = locals if index is None else itt.islice(locals, index) - try: - return next(x for x in locals if x.name == vname) - except StopIteration: - return self.parent.find_variable(vname, self.index) if self.parent else None - - def find_local(self, vname, index=None): - locals = self.locals if index is None else itt.islice(self.locals, index) - try: - return next(x for x in locals if x.name == vname) - except StopIteration: - return self.parent.find_local(vname, self.index) if self.parent else None - - def find_attribute(self, vname, index=None): - locals = self.attributes if index is None else itt.islice(self.attributes, index) - try: - return next(x for x in locals if x.name == vname) - except StopIteration: - return self.parent.find_attribute(vname, self.index) if self.parent else None - - - def get_class_scope(self): - if self.parent == None or self.parent.parent == None: - return self - return self.parent.get_class_scope() - - def is_defined(self, vname): - return self.find_variable(vname) is not None - - def is_local(self, vname): - return any(True for x in self.locals if x.name == vname) - - def define_attribute(self, attr): +import itertools as itt +from utils.errors import SemanticError, AttributesError, TypesError, NamesError +from semantic.types import Type + +class Context: + def __init__(self): + self.types = {} + + def create_type(self, name:str, pos): + if name in self.types: + error_text = TypesError.TYPE_ALREADY_DEFINED % name + raise TypesError(error_text, *pos) + typex = self.types[name] = Type(name, pos) + return typex + + def get_type(self, name:str, pos): + try: + return self.types[name] + except KeyError: + error_text = TypesError.TYPE_NOT_DEFINED % name + raise TypesError(error_text, *pos) + + def __str__(self): + return '{\n\t' + '\n\t'.join(y for x in self.types.values() for y in str(x).split('\n')) + '\n}' + + def __repr__(self): + return str(self) + +class VariableInfo: + def __init__(self, name, vtype, index=None): + self.name = name + self.type = vtype + self.index = index # saves the index in the scope of the variable + + def __str__(self): + return f'{self.name} : {self.type.name}' + + def __repr__(self): + return str(self) + +class Scope: + def __init__(self, parent=None): + self.locals = [] + self.attributes = [] + self.parent = parent + self.children = [] + self.expr_dict = { } + self.functions = { } + self.index = 0 if parent is None else len(parent) + + def __len__(self): + return len(self.locals) + + def __str__(self): + res = '' + for scope in self.children: + try: + classx = scope.locals[0] + name = classx.type.name + except: + name = '1' + res += name + scope.tab_level(1, '', 1) #'\n\t' + ('\n' + '\t').join(str(local) for local in scope.locals) + '\n' + return res + + def tab_level(self, tabs, name, num): + res = ('\t' * tabs) + ('\n' + ('\t' * tabs)).join(str(local) for local in self.locals) + if self.functions: + children = '\n'.join(v.tab_level(tabs + 1, '[method] ' + k, num) for k, v in self.functions.items()) + else: + children = '\n'.join(child.tab_level(tabs + 1, num, num + 1) for child in self.children) + return "\t" * (tabs-1) + f'{name}' + "\t" * tabs + f'\n{res}\n{children}' + + def __repr__(self): + return str(self) + + def create_child(self): + child = Scope(self) + self.children.append(child) + return child + + def define_variable(self, vname, vtype): + info = VariableInfo(vname, vtype) + self.locals.append(info) + return info + + def find_variable(self, vname, index=None): + locals = self.attributes + self.locals + locals = locals if index is None else itt.islice(locals, index) + try: + return next(x for x in locals if x.name == vname) + except StopIteration: + return self.parent.find_variable(vname, self.index) if self.parent else None + + def find_local(self, vname, index=None): + locals = self.locals if index is None else itt.islice(self.locals, index) + try: + return next(x for x in locals if x.name == vname) + except StopIteration: + return self.parent.find_local(vname, self.index) if self.parent else None + + def find_attribute(self, vname, index=None): + locals = self.attributes if index is None else itt.islice(self.attributes, index) + try: + return next(x for x in locals if x.name == vname) + except StopIteration: + return self.parent.find_attribute(vname, self.index) if self.parent else None + + + def get_class_scope(self): + if self.parent == None or self.parent.parent == None: + return self + return self.parent.get_class_scope() + + def is_defined(self, vname): + return self.find_variable(vname) is not None + + def is_local(self, vname): + return any(True for x in self.locals if x.name == vname) + + def define_attribute(self, attr): self.attributes.append(attr) \ No newline at end of file diff --git a/src/semantic/types.py b/src/semantic/types.py index 37a2fee7..c100318b 100644 --- a/src/semantic/types.py +++ b/src/semantic/types.py @@ -1,284 +1,284 @@ -from utils.errors import SemanticError, AttributesError, TypesError, NamesError -from collections import OrderedDict - -class Attribute: - def __init__(self, name, typex, index): - self.name = name - self.type = typex - self.index = index # lugar que ocupa en el scope - self.expr = None - - def __str__(self): - return f'[attrib] {self.name} : {self.type.name};' - - def __repr__(self): - return str(self) - -class Method: - def __init__(self, name, param_names, params_types, return_type): - self.name = name - self.param_names = param_names - self.param_types = params_types - self.return_type = return_type - - def __str__(self): - params = ', '.join(f'{n}:{t.name}' for n,t in zip(self.param_names, self.param_types)) - return f'[method] {self.name}({params}): {self.return_type.name};' - - def __eq__(self, other): - return other.name == self.name and \ - other.return_type == self.return_type and \ - other.param_types == self.param_types - -class MethodError(Method): - def __init__(self, name, param_names, param_types, return_types): - super().__init__(name, param_names, param_types, return_types) - - def __str__(self): - return f'[method] {self.name} ERROR' - -class Type: - def __init__(self, name:str, pos): - if name == 'ObjectType': - return ObjectType(pos) - self.name = name - self.attributes = {} - self.methods = {} - self.parent = ObjectType(pos) - self.pos = pos - - def set_parent(self, parent): - if type(self.parent) != ObjectType and self.parent is not None: - error_text = TypesError.PARENT_ALREADY_DEFINED % self.name - raise TypesError(error_text, *self.pos) - self.parent = parent - - def get_attribute(self, name:str, pos) -> Attribute: - try: - return self.attributes[name] #next(attr for attr in self.attributes if attr.name == name) - except KeyError: - if self.parent is None: - error_text = AttributesError.ATTRIBUTE_NOT_DEFINED % (name, self.name) - raise AttributesError(error_text, *pos) - try: - return self.parent.get_attribute(name, pos) - except AttributesError: - error_text = AttributesError.ATTRIBUTE_NOT_DEFINED % (name, self.name) - raise AttributesError(error_text, *pos) - - def define_attribute(self, name:str, typex, pos): - try: - self.get_attribute(name, pos) - except AttributesError: - self.attributes[name] = attribute = Attribute(name, typex, len(self.attributes)) - # self.attributes.append(attribute) - return attribute - else: - error_text = AttributesError.ATTRIBUTE_ALREADY_DEFINED %(name, self.name) - raise AttributesError(error_text, *pos) - - def get_method(self, name:str, pos) -> Method: - try: - return self.methods[name] - except KeyError: - error_text = AttributesError.METHOD_NOT_DEFINED %(name, self.name) - if self.parent is None: - raise AttributesError(error_text, *pos) - try: - return self.parent.get_method(name, pos) - except AttributesError: - raise AttributesError(error_text, *pos) - - def define_method(self, name:str, param_names:list, param_types:list, return_type): - if name in self.methods: - error_text = AttributesError.METHOD_ALREADY_DEFINED % (name, self.name) - raise AttributesError(error_text, *pos) - - method = self.methods[name] = Method(name, param_names, param_types, return_type) - return method - - def change_type(self, method, nparm, newtype): - idx = method.param_names.index(nparm) - method.param_types[idx] = newtype - - def all_attributes(self, clean=True): - plain = OrderedDict() if self.parent is None else self.parent.all_attributes(False) - for attr in self.attributes.values(): - plain[attr.name] = (attr, self) - return plain.values() if clean else plain - - def all_methods(self, clean=True): - plain = OrderedDict() if self.parent is None else self.parent.all_methods(False) - for method in self.methods.values(): - plain[method.name] = (method, self) - return plain.values() if clean else plain - - - def conforms_to(self, other): - return other.bypass() or self == other or self.parent is not None and self.parent.conforms_to(other) - - def bypass(self): - return False - - def __str__(self): - output = f'type {self.name}' - parent = '' if self.parent is None else f' : {self.parent.name}' - output += parent - output += ' {' - output += '\n\t' if self.attributes or self.methods else '' - output += '\n\t'.join(str(x) for x in self.attributes.values()) - output += '\n\t' if self.attributes else '' - output += '\n\t'.join(str(x) for x in self.methods.values()) - output += '\n' if self.methods else '' - output += '}\n' - return output - - def __repr__(self): - return str(self) - -class ErrorType(Type): - def __init__(self, pos=(0, 0)): - Type.__init__(self, '', pos) - - def conforms_to(self, other): - return True - - def bypass(self): - return True - - def __eq__(self, other): - return isinstance(other, ErrorType) - - def __ne__(self, other): - return not isinstance(other, ErrorType) - -class VoidType(Type): - def __init__(self, pos=(0, 0)): - Type.__init__(self, '', pos) - - def conforms_to(self, other): - return True - - def bypass(self): - return True - - def __eq__(self, other): - return isinstance(other, VoidType) - -class BoolType(Type): - def __init__(self, pos=(0, 0)): - self.name = 'Bool' - self.attributes = {} - self.methods = {} - self.parent = None - self.pos = pos - - def __eq__(self, other): - return other.name == self.name or isinstance(other, BoolType) - - def __ne__(self, other): - return other.name != self.name and not isinstance(other, BoolType) - - -class SelfType(Type): - def __init__(self, pos=(0, 0)): - self.name = 'Self' - self.attributes = {} - self.methods = {} - self.parent = None - self.pos = pos - - def __eq__(self, other): - return other.name == self.name or isinstance(other, SelfType) - - def __ne__(self, other): - return other.name != self.name and not isinstance(other, SelfType) - - -class IntType(Type): - def __init__(self, pos=(0, 0)): - self.name = 'Int' - self.attributes = {} - self.methods = {} - self.parent = None - self.pos = pos - - def __eq__(self, other): - return other.name == self.name or isinstance(other, IntType) - - def __ne__(self, other): - return other.name != self.name and not isinstance(other, IntType) - - -class StringType(Type): - def __init__(self, pos=(0, 0)): - self.name = 'String' - self.attributes = {} - self.methods = {} - self.parent = None - self.pos = pos - self.init_methods() - - def init_methods(self): - self.define_method('length', [], [], IntType()) - self.define_method('concat', ['s'], [self], self) - self.define_method('substr', ['i', 'l'], [IntType(), IntType()], self) - - def __eq__(self, other): - return other.name == self.name or isinstance(other, StringType) - - def __ne__(self, other): - return other.name != self.name and not isinstance(other, StringType) - - -class ObjectType(Type): - def __init__(self, pos=(0, 0)): - self.name = 'Object' - self.attributes = {} - self.methods = {} - self.parent = None - self.pos = pos - self.init_methods() - - def init_methods(self): - self.define_method('abort', [], [], self) - self.define_method('type_name', [], [], StringType()) - self.define_method('copy', [], [], SelfType()) - - def __eq__(self, other): - return other.name == self.name or isinstance(other, ObjectType) - - def __ne__(self, other): - return other.name != self.name and not isinstance(other, ObjectType) - -class AutoType(Type): - def __init__(self): - Type.__init__(self, 'AUTO_TYPE') - - def __eq__(self, other): - return other.name == self.name or isinstance(other, AutoType) - - def __ne__(self, other): - return other.name != self.name and not isinstance(other, AutoType) - - -class IOType(Type): - def __init__(self, pos=(0, 0)): - self.name = 'IO' - self.attributes = {} - self.methods = {} - self.parent = ObjectType(pos) - self.pos = pos - self.init_methods() - - def init_methods(self): - self.define_method('out_string', ['x'], [StringType()], SelfType()) - self.define_method('out_int', ['x'], [IntType()], SelfType()) - self.define_method('in_string', [], [], StringType()) - self.define_method('in_int', [], [], IntType()) - - def __eq__(self, other): - return other.name == self.name or isinstance(other, IOType) - - def __ne__(self, other): - return other.name != self.name and not isinstance(other, IOType) +from utils.errors import SemanticError, AttributesError, TypesError, NamesError +from collections import OrderedDict + +class Attribute: + def __init__(self, name, typex, index): + self.name = name + self.type = typex + self.index = index # lugar que ocupa en el scope + self.expr = None + + def __str__(self): + return f'[attrib] {self.name} : {self.type.name};' + + def __repr__(self): + return str(self) + +class Method: + def __init__(self, name, param_names, params_types, return_type): + self.name = name + self.param_names = param_names + self.param_types = params_types + self.return_type = return_type + + def __str__(self): + params = ', '.join(f'{n}:{t.name}' for n,t in zip(self.param_names, self.param_types)) + return f'[method] {self.name}({params}): {self.return_type.name};' + + def __eq__(self, other): + return other.name == self.name and \ + other.return_type == self.return_type and \ + other.param_types == self.param_types + +class MethodError(Method): + def __init__(self, name, param_names, param_types, return_types): + super().__init__(name, param_names, param_types, return_types) + + def __str__(self): + return f'[method] {self.name} ERROR' + +class Type: + def __init__(self, name:str, pos): + if name == 'ObjectType': + return ObjectType(pos) + self.name = name + self.attributes = {} + self.methods = {} + self.parent = ObjectType(pos) + self.pos = pos + + def set_parent(self, parent): + if type(self.parent) != ObjectType and self.parent is not None: + error_text = TypesError.PARENT_ALREADY_DEFINED % self.name + raise TypesError(error_text, *self.pos) + self.parent = parent + + def get_attribute(self, name:str, pos) -> Attribute: + try: + return self.attributes[name] #next(attr for attr in self.attributes if attr.name == name) + except KeyError: + if self.parent is None: + error_text = AttributesError.ATTRIBUTE_NOT_DEFINED % (name, self.name) + raise AttributesError(error_text, *pos) + try: + return self.parent.get_attribute(name, pos) + except AttributesError: + error_text = AttributesError.ATTRIBUTE_NOT_DEFINED % (name, self.name) + raise AttributesError(error_text, *pos) + + def define_attribute(self, name:str, typex, pos): + try: + self.get_attribute(name, pos) + except AttributesError: + self.attributes[name] = attribute = Attribute(name, typex, len(self.attributes)) + # self.attributes.append(attribute) + return attribute + else: + error_text = AttributesError.ATTRIBUTE_ALREADY_DEFINED %(name, self.name) + raise AttributesError(error_text, *pos) + + def get_method(self, name:str, pos) -> Method: + try: + return self.methods[name] + except KeyError: + error_text = AttributesError.METHOD_NOT_DEFINED %(name, self.name) + if self.parent is None: + raise AttributesError(error_text, *pos) + try: + return self.parent.get_method(name, pos) + except AttributesError: + raise AttributesError(error_text, *pos) + + def define_method(self, name:str, param_names:list, param_types:list, return_type): + if name in self.methods: + error_text = AttributesError.METHOD_ALREADY_DEFINED % (name, self.name) + raise AttributesError(error_text, *pos) + + method = self.methods[name] = Method(name, param_names, param_types, return_type) + return method + + def change_type(self, method, nparm, newtype): + idx = method.param_names.index(nparm) + method.param_types[idx] = newtype + + def all_attributes(self, clean=True): + plain = OrderedDict() if self.parent is None else self.parent.all_attributes(False) + for attr in self.attributes.values(): + plain[attr.name] = (attr, self) + return plain.values() if clean else plain + + def all_methods(self, clean=True): + plain = OrderedDict() if self.parent is None else self.parent.all_methods(False) + for method in self.methods.values(): + plain[method.name] = (method, self) + return plain.values() if clean else plain + + + def conforms_to(self, other): + return other.bypass() or self == other or self.parent is not None and self.parent.conforms_to(other) + + def bypass(self): + return False + + def __str__(self): + output = f'type {self.name}' + parent = '' if self.parent is None else f' : {self.parent.name}' + output += parent + output += ' {' + output += '\n\t' if self.attributes or self.methods else '' + output += '\n\t'.join(str(x) for x in self.attributes.values()) + output += '\n\t' if self.attributes else '' + output += '\n\t'.join(str(x) for x in self.methods.values()) + output += '\n' if self.methods else '' + output += '}\n' + return output + + def __repr__(self): + return str(self) + +class ErrorType(Type): + def __init__(self, pos=(0, 0)): + Type.__init__(self, '', pos) + + def conforms_to(self, other): + return True + + def bypass(self): + return True + + def __eq__(self, other): + return isinstance(other, ErrorType) + + def __ne__(self, other): + return not isinstance(other, ErrorType) + +class VoidType(Type): + def __init__(self, pos=(0, 0)): + Type.__init__(self, '', pos) + + def conforms_to(self, other): + return True + + def bypass(self): + return True + + def __eq__(self, other): + return isinstance(other, VoidType) + +class BoolType(Type): + def __init__(self, pos=(0, 0)): + self.name = 'Bool' + self.attributes = {} + self.methods = {} + self.parent = None + self.pos = pos + + def __eq__(self, other): + return other.name == self.name or isinstance(other, BoolType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, BoolType) + + +class SelfType(Type): + def __init__(self, pos=(0, 0)): + self.name = 'Self' + self.attributes = {} + self.methods = {} + self.parent = None + self.pos = pos + + def __eq__(self, other): + return other.name == self.name or isinstance(other, SelfType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, SelfType) + + +class IntType(Type): + def __init__(self, pos=(0, 0)): + self.name = 'Int' + self.attributes = {} + self.methods = {} + self.parent = None + self.pos = pos + + def __eq__(self, other): + return other.name == self.name or isinstance(other, IntType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, IntType) + + +class StringType(Type): + def __init__(self, pos=(0, 0)): + self.name = 'String' + self.attributes = {} + self.methods = {} + self.parent = None + self.pos = pos + self.init_methods() + + def init_methods(self): + self.define_method('length', [], [], IntType()) + self.define_method('concat', ['s'], [self], self) + self.define_method('substr', ['i', 'l'], [IntType(), IntType()], self) + + def __eq__(self, other): + return other.name == self.name or isinstance(other, StringType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, StringType) + + +class ObjectType(Type): + def __init__(self, pos=(0, 0)): + self.name = 'Object' + self.attributes = {} + self.methods = {} + self.parent = None + self.pos = pos + self.init_methods() + + def init_methods(self): + self.define_method('abort', [], [], self) + self.define_method('type_name', [], [], StringType()) + self.define_method('copy', [], [], SelfType()) + + def __eq__(self, other): + return other.name == self.name or isinstance(other, ObjectType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, ObjectType) + +class AutoType(Type): + def __init__(self): + Type.__init__(self, 'AUTO_TYPE') + + def __eq__(self, other): + return other.name == self.name or isinstance(other, AutoType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, AutoType) + + +class IOType(Type): + def __init__(self, pos=(0, 0)): + self.name = 'IO' + self.attributes = {} + self.methods = {} + self.parent = ObjectType(pos) + self.pos = pos + self.init_methods() + + def init_methods(self): + self.define_method('out_string', ['x'], [StringType()], SelfType()) + self.define_method('out_int', ['x'], [IntType()], SelfType()) + self.define_method('in_string', [], [], StringType()) + self.define_method('in_int', [], [], IntType()) + + def __eq__(self, other): + return other.name == self.name or isinstance(other, IOType) + + def __ne__(self, other): + return other.name != self.name and not isinstance(other, IOType) diff --git a/src/semantic/visitors/__init__.py b/src/semantic/visitors/__init__.py index 488ad081..0aed9818 100644 --- a/src/semantic/visitors/__init__.py +++ b/src/semantic/visitors/__init__.py @@ -1,5 +1,5 @@ -# from semantic.visitors.type_collector import TypeCollector -# from semantic.visitors.type_builder import TypeBuilder -# from semantic.visitors.var_collector import VarCollector -# from semantic.visitors.type_checker import TypeChecker -# from semantic.visitors.selftype_visitor import SelfTypeVisitor +# from semantic.visitors.type_collector import TypeCollector +# from semantic.visitors.type_builder import TypeBuilder +# from semantic.visitors.var_collector import VarCollector +# from semantic.visitors.type_checker import TypeChecker +# from semantic.visitors.selftype_visitor import SelfTypeVisitor diff --git a/src/semantic/visitors/format_visitor.py b/src/semantic/visitors/format_visitor.py index 4de0a36f..ae260a7d 100644 --- a/src/semantic/visitors/format_visitor.py +++ b/src/semantic/visitors/format_visitor.py @@ -1,128 +1,128 @@ -from utils import visitor -from utils.ast import * - -class FormatVisitor(object): - @visitor.on('node') - def visit(self, node, tabs): - ans = '\t' * tabs + f'\\__{node.__class__.__name__}' - return ans - - @visitor.when(ProgramNode) - def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__ProgramNode [ ... ]' - statements = '\n'.join(self.visit(child, tabs + 1) for child in node.declarations) - return f'{ans}\n{statements}' - - @visitor.when(ClassDeclarationNode) - def visit(self, node, tabs=0): - parent = '' if node.parent is None else f": {node.parent}" - ans = '\t' * tabs + f'\\__ClassDeclarationNode: class {node.id} {parent} {{ ... }}' - features = '\n'.join(self.visit(child, tabs + 1) for child in node.features) - return f'{ans}\n{features}' - - @visitor.when(AttrDeclarationNode) - def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__AttrDeclarationNode: {node.id} : {node.type}' - return f'{ans}' - - @visitor.when(VarDeclarationNode) - def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__VarDeclarationNode: {node.id} : {node.type} = ' - expr = self.visit(node.expr, tabs + 1) - return f'{ans}\n{expr}' - - @visitor.when(AssignNode) - def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__AssignNode: {node.id} <- ' - expr = self.visit(node.expr, tabs + 1) - return f'{ans}\n{expr}' - - @visitor.when(FuncDeclarationNode) - def visit(self, node, tabs=0): - params = ', '.join(':'.join(param) for param in node.params) - ans = '\t' * tabs + f'\\__FuncDeclarationNode: {node.id}({params}) : {node.type} -> ' - body = f'{self.visit(node.body, tabs + 1)}' - # body = f'\n'#{self.visit(node.body, tabs + 1)}' #.join(self.visit(child, tabs + 1) for child in node.body) - return f'{ans}\n{body}' - - @visitor.when(BinaryNode) - def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__ {node.__class__.__name__} ' - left = self.visit(node.left, tabs + 1) - right = self.visit(node.right, tabs + 1) - return f'{ans}\n{left}\n{right}' - - @visitor.when(UnaryNode) - def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__{node.__class__.__name__} ' - expr = self.visit(node.expr, tabs + 1) - return f'{ans}\n{expr}' - - @visitor.when(WhileNode) - def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__{node.__class__.__name__}: while loop pool' - cond = self.visit(node.cond, tabs + 1) - expr = self.visit(node.expr, tabs + 1) - return f'{ans}\n{cond}\n{expr}' - - @visitor.when(ConditionalNode) - def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__ {node.__class__.__name__}: if then else fi' - cond = self.visit(node.cond, tabs + 1) - stm = self.visit(node.stm, tabs + 1) - else_stm = self.visit(node.else_stm, tabs + 1) - return f'{ans}\n{cond}\n{stm}\n{else_stm}' - - @visitor.when(CaseNode) - def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__ {node.__class__.__name__}: case of esac' - expr = self.visit(node.expr, tabs + 1) - case_list = '\n'.join(self.visit(child, tabs + 1) for child in node.case_list) - return f'{ans}\n{expr}\n{case_list}' - - @visitor.when(OptionNode) - def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__ {node.__class__.__name__}: {node.id} : {node.typex} -> ' - expr = self.visit(node.expr, tabs + 1) - return f'{ans}\n{expr}' - - @visitor.when(BlockNode) - def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__ {node.__class__.__name__} ' + '{ }' - expr = '\n'.join(self.visit(child, tabs + 1) for child in node.expr_list) - return f'{ans}\n{expr}' - - @visitor.when(AtomicNode) - def visit(self, node, tabs=0): - return '\t' * tabs + f'\\__ {node.__class__.__name__}: {node.lex}' - - @visitor.when(BaseCallNode) - def visit(self, node, tabs=0): - obj = self.visit(node.obj, tabs + 1) - ans = '\t' * tabs + f'\\__BaseCallNode: @{node.type}.{node.id}(, ..., )' - args = '\n'.join(self.visit(arg, tabs + 1) for arg in node.args) - return f'{ans}\n{obj}\n{args}' - - @visitor.when(CallNode) - def visit(self, node, tabs=0): - obj = self.visit(node.obj, tabs + 1) - ans = '\t' * tabs + f'\\__CallNode: .{node.id}(, ..., )' - args = '\n'.join(self.visit(arg, tabs + 1) for arg in node.args) - return f'{ans}\n{obj}\n{args}' - - @visitor.when(StaticCallNode) - def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__StaticCallNode: {node.id}(, ..., )' - args = '\n'.join(self.visit(arg, tabs + 1) for arg in node.args) - return f'{ans}\n{args}' - - @visitor.when(InstantiateNode) - def visit(self, node, tabs=0): - return '\t' * tabs + f'\\__ InstantiateNode: new {node.lex}()' - - @visitor.when(LetNode) - def visit(self, node, tabs=0): - ans = '\t' * tabs + f'\\__ {node.__class__.__name__} let in ' - init_list = '\n'.join(self.visit(arg, tabs + 1) for arg in node.init_list) - expr = self.visit(node.expr, tabs + 1) - return f'{ans}\n{init_list}\n{expr}' +from utils import visitor +from utils.ast import * + +class FormatVisitor(object): + @visitor.on('node') + def visit(self, node, tabs): + ans = '\t' * tabs + f'\\__{node.__class__.__name__}' + return ans + + @visitor.when(ProgramNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ProgramNode [ ... ]' + statements = '\n'.join(self.visit(child, tabs + 1) for child in node.declarations) + return f'{ans}\n{statements}' + + @visitor.when(ClassDeclarationNode) + def visit(self, node, tabs=0): + parent = '' if node.parent is None else f": {node.parent}" + ans = '\t' * tabs + f'\\__ClassDeclarationNode: class {node.id} {parent} {{ ... }}' + features = '\n'.join(self.visit(child, tabs + 1) for child in node.features) + return f'{ans}\n{features}' + + @visitor.when(AttrDeclarationNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__AttrDeclarationNode: {node.id} : {node.type}' + return f'{ans}' + + @visitor.when(VarDeclarationNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__VarDeclarationNode: {node.id} : {node.type} = ' + expr = self.visit(node.expr, tabs + 1) + return f'{ans}\n{expr}' + + @visitor.when(AssignNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__AssignNode: {node.id} <- ' + expr = self.visit(node.expr, tabs + 1) + return f'{ans}\n{expr}' + + @visitor.when(FuncDeclarationNode) + def visit(self, node, tabs=0): + params = ', '.join(':'.join(param) for param in node.params) + ans = '\t' * tabs + f'\\__FuncDeclarationNode: {node.id}({params}) : {node.type} -> ' + body = f'{self.visit(node.body, tabs + 1)}' + # body = f'\n'#{self.visit(node.body, tabs + 1)}' #.join(self.visit(child, tabs + 1) for child in node.body) + return f'{ans}\n{body}' + + @visitor.when(BinaryNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ {node.__class__.__name__} ' + left = self.visit(node.left, tabs + 1) + right = self.visit(node.right, tabs + 1) + return f'{ans}\n{left}\n{right}' + + @visitor.when(UnaryNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__{node.__class__.__name__} ' + expr = self.visit(node.expr, tabs + 1) + return f'{ans}\n{expr}' + + @visitor.when(WhileNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__{node.__class__.__name__}: while loop pool' + cond = self.visit(node.cond, tabs + 1) + expr = self.visit(node.expr, tabs + 1) + return f'{ans}\n{cond}\n{expr}' + + @visitor.when(ConditionalNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ {node.__class__.__name__}: if then else fi' + cond = self.visit(node.cond, tabs + 1) + stm = self.visit(node.stm, tabs + 1) + else_stm = self.visit(node.else_stm, tabs + 1) + return f'{ans}\n{cond}\n{stm}\n{else_stm}' + + @visitor.when(CaseNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ {node.__class__.__name__}: case of esac' + expr = self.visit(node.expr, tabs + 1) + case_list = '\n'.join(self.visit(child, tabs + 1) for child in node.case_list) + return f'{ans}\n{expr}\n{case_list}' + + @visitor.when(OptionNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ {node.__class__.__name__}: {node.id} : {node.typex} -> ' + expr = self.visit(node.expr, tabs + 1) + return f'{ans}\n{expr}' + + @visitor.when(BlockNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ {node.__class__.__name__} ' + '{ }' + expr = '\n'.join(self.visit(child, tabs + 1) for child in node.expr_list) + return f'{ans}\n{expr}' + + @visitor.when(AtomicNode) + def visit(self, node, tabs=0): + return '\t' * tabs + f'\\__ {node.__class__.__name__}: {node.lex}' + + @visitor.when(BaseCallNode) + def visit(self, node, tabs=0): + obj = self.visit(node.obj, tabs + 1) + ans = '\t' * tabs + f'\\__BaseCallNode: @{node.type}.{node.id}(, ..., )' + args = '\n'.join(self.visit(arg, tabs + 1) for arg in node.args) + return f'{ans}\n{obj}\n{args}' + + @visitor.when(CallNode) + def visit(self, node, tabs=0): + obj = self.visit(node.obj, tabs + 1) + ans = '\t' * tabs + f'\\__CallNode: .{node.id}(, ..., )' + args = '\n'.join(self.visit(arg, tabs + 1) for arg in node.args) + return f'{ans}\n{obj}\n{args}' + + @visitor.when(StaticCallNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__StaticCallNode: {node.id}(, ..., )' + args = '\n'.join(self.visit(arg, tabs + 1) for arg in node.args) + return f'{ans}\n{args}' + + @visitor.when(InstantiateNode) + def visit(self, node, tabs=0): + return '\t' * tabs + f'\\__ InstantiateNode: new {node.lex}()' + + @visitor.when(LetNode) + def visit(self, node, tabs=0): + ans = '\t' * tabs + f'\\__ {node.__class__.__name__} let in ' + init_list = '\n'.join(self.visit(arg, tabs + 1) for arg in node.init_list) + expr = self.visit(node.expr, tabs + 1) + return f'{ans}\n{init_list}\n{expr}' diff --git a/src/semantic/visitors/selftype_visitor.py b/src/semantic/visitors/selftype_visitor.py index 03508810..7d3ef8ad 100644 --- a/src/semantic/visitors/selftype_visitor.py +++ b/src/semantic/visitors/selftype_visitor.py @@ -1,108 +1,108 @@ -from semantic.tools import * -from semantic.types import Type, Method -from utils import visitor -from utils.ast import * - -class SelfTypeVisitor(object): - def __init__(self, context:Context, errors=[]): - self.context:Context = context - self.errors = errors - self.current_type:Type = None - self.current_method:Method = None - - @visitor.on('node') - def visit(self, node, scope): - pass - - @visitor.when(ProgramNode) - def visit(self, node:ProgramNode, scope:Scope): - for declaration, child_scope in zip(node.declarations, scope.children): - self.visit(declaration, child_scope) - - - @visitor.when(ClassDeclarationNode) - def visit(self, node:ClassDeclarationNode, scope:Scope): - self.current_type = self.context.get_type(node.id, node.pos) - - fd = [feat for feat in node.features if isinstance(feat, FuncDeclarationNode)] - - for feat in node.features: - if isinstance(feat, AttrDeclarationNode): - self.visit(feat, scope) - - for feat, child_scope in zip(fd, scope.children): - self.visit(feat, child_scope) - - - @visitor.when(AttrDeclarationNode) - def visit(self, node:AttrDeclarationNode, scope:Scope): - vinfo = scope.find_variable(node.id) - if node.type == 'SELF_TYPE': - vinfo.type = self.current_type - - - @visitor.when(FuncDeclarationNode) - def visit(self, node:FuncDeclarationNode, scope:Scope): - self.current_method = self.current_type.get_method(node.id, node.pos) - - for pname, ptype in node.params: - if ptype.value == 'SELF_TYPE': - varinfo = scope.find_variable(pname) - varinfo.type = self.current_type - self.current_type.change_type(self.current_method, pname, self.current_type) - - - if node.type == 'SELF_TYPE': - self.current_method.return_type = self.current_type - - self.visit(node.body, scope) - - - @visitor.when(VarDeclarationNode) - def visit(self, node:VarDeclarationNode, scope:Scope): - varinfo = scope.find_variable(node.id) - - if node.type == 'SELF_TYPE': - varinfo.type = self.current_type - - @visitor.when(AssignNode) - def visit(self, node:AssignNode, scope:Scope): - varinfo = scope.find_variable(node.id) - - if varinfo.type.name == 'SELF_TYPE': - varinfo.type = self.current_type - - - @visitor.when(BlockNode) - def visit(self, node:BlockNode, scope:Scope): - for exp in node.expr_list: - self.visit(exp, scope) - - - @visitor.when(LetNode) - def visit(self, node:LetNode, scope:Scope): - child_scope = scope.expr_dict[node] - for init in node.init_list: - self.visit(init, child_scope) - self.visit(node.expr, child_scope) - - @visitor.when(CaseNode) - def visit(self, node:CaseNode, scope:Scope): - self.visit(node.expr, scope) - - new_scope = scope.expr_dict[node] - for case, c_scope in zip(node.case_list, new_scope.children): - self.visit(case, c_scope) - - - @visitor.when(OptionNode) - def visit(self, node:OptionNode, scope:Scope): - var_info = scope.find_variable(node.id) - self.visit(node.expr) - - if var_info.type.name == 'SELF_TYPE': - var_info.type = self.current_type - - @visitor.when(InstantiateNode) - def visit(self, node:InstantiateNode, scope:Scope): +from semantic.tools import * +from semantic.types import Type, Method +from utils import visitor +from utils.ast import * + +class SelfTypeVisitor(object): + def __init__(self, context:Context, errors=[]): + self.context:Context = context + self.errors = errors + self.current_type:Type = None + self.current_method:Method = None + + @visitor.on('node') + def visit(self, node, scope): + pass + + @visitor.when(ProgramNode) + def visit(self, node:ProgramNode, scope:Scope): + for declaration, child_scope in zip(node.declarations, scope.children): + self.visit(declaration, child_scope) + + + @visitor.when(ClassDeclarationNode) + def visit(self, node:ClassDeclarationNode, scope:Scope): + self.current_type = self.context.get_type(node.id, node.pos) + + fd = [feat for feat in node.features if isinstance(feat, FuncDeclarationNode)] + + for feat in node.features: + if isinstance(feat, AttrDeclarationNode): + self.visit(feat, scope) + + for feat, child_scope in zip(fd, scope.children): + self.visit(feat, child_scope) + + + @visitor.when(AttrDeclarationNode) + def visit(self, node:AttrDeclarationNode, scope:Scope): + vinfo = scope.find_variable(node.id) + if node.type == 'SELF_TYPE': + vinfo.type = self.current_type + + + @visitor.when(FuncDeclarationNode) + def visit(self, node:FuncDeclarationNode, scope:Scope): + self.current_method = self.current_type.get_method(node.id, node.pos) + + for pname, ptype in node.params: + if ptype.value == 'SELF_TYPE': + varinfo = scope.find_variable(pname) + varinfo.type = self.current_type + self.current_type.change_type(self.current_method, pname, self.current_type) + + + if node.type == 'SELF_TYPE': + self.current_method.return_type = self.current_type + + self.visit(node.body, scope) + + + @visitor.when(VarDeclarationNode) + def visit(self, node:VarDeclarationNode, scope:Scope): + varinfo = scope.find_variable(node.id) + + if node.type == 'SELF_TYPE': + varinfo.type = self.current_type + + @visitor.when(AssignNode) + def visit(self, node:AssignNode, scope:Scope): + varinfo = scope.find_variable(node.id) + + if varinfo.type.name == 'SELF_TYPE': + varinfo.type = self.current_type + + + @visitor.when(BlockNode) + def visit(self, node:BlockNode, scope:Scope): + for exp in node.expr_list: + self.visit(exp, scope) + + + @visitor.when(LetNode) + def visit(self, node:LetNode, scope:Scope): + child_scope = scope.expr_dict[node] + for init in node.init_list: + self.visit(init, child_scope) + self.visit(node.expr, child_scope) + + @visitor.when(CaseNode) + def visit(self, node:CaseNode, scope:Scope): + self.visit(node.expr, scope) + + new_scope = scope.expr_dict[node] + for case, c_scope in zip(node.case_list, new_scope.children): + self.visit(case, c_scope) + + + @visitor.when(OptionNode) + def visit(self, node:OptionNode, scope:Scope): + var_info = scope.find_variable(node.id) + self.visit(node.expr) + + if var_info.type.name == 'SELF_TYPE': + var_info.type = self.current_type + + @visitor.when(InstantiateNode) + def visit(self, node:InstantiateNode, scope:Scope): node.lex = self.current_type.name if node.lex == 'SELF_TYPE' else node.lex \ No newline at end of file diff --git a/src/semantic/visitors/type_builder.py b/src/semantic/visitors/type_builder.py index 50d41be7..cec32e06 100644 --- a/src/semantic/visitors/type_builder.py +++ b/src/semantic/visitors/type_builder.py @@ -1,83 +1,83 @@ -from utils.errors import SemanticError, AttributesError, TypesError, NamesError -from semantic.types import Type, VoidType, ErrorType, Attribute, Method -from semantic.tools import Context -from utils import visitor -from utils.ast import * - -class TypeBuilder: - def __init__(self, context:Context, errors=[]): - self.context:Context = context - self.current_type:Type = None - self.errors:list = errors - - @visitor.on('node') - def visit(self, node): - pass - - @visitor.when(ProgramNode) - def visit(self, node:ProgramNode): - for dec in node.declarations: - self.visit(dec) - - @visitor.when(ClassDeclarationNode) - def visit(self, node:ClassDeclarationNode): - try: - self.current_type = self.context.get_type(node.id, node.pos) - except SemanticError as e: - self.current_type = ErrorType() - self.errors.append(e) - - if node.parent is not None: - try: - parent = self.context.get_type(node.parent, node.parent_pos) - current = parent - while current is not None: - if current.name == self.current_type.name: - error_text = TypesError.CIRCULAR_DEPENDENCY %(parent.name, self.current_type.name) - raise TypesError(error_text, *node.pos) - current = current.parent - except SemanticError as e: - parent = ErrorType() - self.errors.append(e) - self.current_type.set_parent(parent) - - - for feature in node.features: - self.visit(feature) - - - @visitor.when(FuncDeclarationNode) - def visit(self, node:FuncDeclarationNode): - args_names = [] - args_types = [] - for name, type_ in node.params: - try: - args_names.append(name) - args_types.append(self.context.get_type(type_.value, type_.pos)) - except SemanticError as e: - args_types.append(ErrorType(type_.pos)) - self.errors.append(e) - - try: - return_type = self.context.get_type(node.type, node.type_pos) - except SemanticError as e: - return_type = ErrorType(node.type_pos) - self.errors.append(e) - - try: - self.current_type.define_method(node.id, args_names, args_types, return_type) - except SemanticError as e: - self.errors.append(e) - - @visitor.when(AttrDeclarationNode) - def visit(self, node:AttrDeclarationNode): - try: - attr_type = self.context.get_type(node.type, node.pos) - except SemanticError as e: - attr_type = ErrorType(node.type_pos) - self.errors.append(e) - - try: - self.current_type.define_attribute(node.id, attr_type, node.pos) - except SemanticError as e: +from utils.errors import SemanticError, AttributesError, TypesError, NamesError +from semantic.types import Type, VoidType, ErrorType, Attribute, Method +from semantic.tools import Context +from utils import visitor +from utils.ast import * + +class TypeBuilder: + def __init__(self, context:Context, errors=[]): + self.context:Context = context + self.current_type:Type = None + self.errors:list = errors + + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node:ProgramNode): + for dec in node.declarations: + self.visit(dec) + + @visitor.when(ClassDeclarationNode) + def visit(self, node:ClassDeclarationNode): + try: + self.current_type = self.context.get_type(node.id, node.pos) + except SemanticError as e: + self.current_type = ErrorType() + self.errors.append(e) + + if node.parent is not None: + try: + parent = self.context.get_type(node.parent, node.parent_pos) + current = parent + while current is not None: + if current.name == self.current_type.name: + error_text = TypesError.CIRCULAR_DEPENDENCY %(parent.name, self.current_type.name) + raise TypesError(error_text, *node.pos) + current = current.parent + except SemanticError as e: + parent = ErrorType() + self.errors.append(e) + self.current_type.set_parent(parent) + + + for feature in node.features: + self.visit(feature) + + + @visitor.when(FuncDeclarationNode) + def visit(self, node:FuncDeclarationNode): + args_names = [] + args_types = [] + for name, type_ in node.params: + try: + args_names.append(name) + args_types.append(self.context.get_type(type_.value, type_.pos)) + except SemanticError as e: + args_types.append(ErrorType(type_.pos)) + self.errors.append(e) + + try: + return_type = self.context.get_type(node.type, node.type_pos) + except SemanticError as e: + return_type = ErrorType(node.type_pos) + self.errors.append(e) + + try: + self.current_type.define_method(node.id, args_names, args_types, return_type) + except SemanticError as e: + self.errors.append(e) + + @visitor.when(AttrDeclarationNode) + def visit(self, node:AttrDeclarationNode): + try: + attr_type = self.context.get_type(node.type, node.pos) + except SemanticError as e: + attr_type = ErrorType(node.type_pos) + self.errors.append(e) + + try: + self.current_type.define_attribute(node.id, attr_type, node.pos) + except SemanticError as e: self.errors.append(e) \ No newline at end of file diff --git a/src/semantic/visitors/type_checker.py b/src/semantic/visitors/type_checker.py index 9ea11fbe..7d09ac99 100644 --- a/src/semantic/visitors/type_checker.py +++ b/src/semantic/visitors/type_checker.py @@ -1,342 +1,342 @@ -from utils import visitor -from semantic.tools import * -from semantic.types import * -from utils.ast import * -from utils.errors import SemanticError, AttributesError, TypesError, NamesError -# from utils.utils import get_type, get_common_basetype -from utils import get_type - - -class TypeChecker: - def __init__(self, context:Context, errors=[]): - self.context:Context = context - self.current_type:Type = None - self.current_method:Method = None - self.errors = errors - self.current_index = None # Lleva el índice del scope en el que se está - - @visitor.on('node') - def visit(self, node, scope): - pass - - @visitor.when(ProgramNode) - def visit(self, node:ProgramNode, scope:Scope): - for declaration, new_scope in zip(node.declarations, scope.children): - self.visit(declaration, new_scope) - - def _get_type(self, ntype:Type, pos): - try: - return self.context.get_type(ntype, pos) - except SemanticError as e: - self.errors.append(e) - return ErrorType() - - def _get_method(self, typex:Type, name:str, pos) -> Method: - try: - return typex.get_method(name, pos) - except SemanticError as e: - if type(typex) != ErrorType and type(typex) != AutoType: - self.errors.append(e) - return MethodError(name, [], [], ErrorType()) - - - @visitor.when(ClassDeclarationNode) - def visit(self, node:ClassDeclarationNode, scope:Scope): - self.current_type = self.context.get_type(node.id, node.pos) - - fd = [feat for feat in node.features if isinstance(feat, FuncDeclarationNode)] - - for feat in node.features: - if isinstance(feat, AttrDeclarationNode): - self.visit(feat, scope) - - for feat, child_scope in zip(fd, scope.children): - self.visit(feat, child_scope) - - - @visitor.when(AttrDeclarationNode) - def visit(self, node:AttrDeclarationNode, scope:Scope): - attr = self.current_type.get_attribute(node.id, node.pos) - # varinfo = scope.find_variable(node.id) - vartype = get_type(attr.type, self.current_type) - - self.current_index = attr.index - typex = self.visit(node.expr, scope) - self.current_index = None - - if not typex.conforms_to(vartype): - error_text = TypesError.INCOMPATIBLE_TYPES %(typex.name, vartype.name) - self.errors.append(TypesError(error_text, *node.pos)) - return ErrorType() - return typex - - - @visitor.when(FuncDeclarationNode) - def visit(self, node:FuncDeclarationNode, scope:Scope): - parent = self.current_type.parent - ptypes = [param[1] for param in node.params] - - self.current_method = method = self.current_type.get_method(node.id, node.pos) - if parent is not None: - try: - old_meth = parent.get_method(node.id, node.pos) - error_text = AttributesError.WRONG_SIGNATURE % (node.id, parent.name) - if old_meth.return_type.name != method.return_type.name: - self.errors.append(AttributesError(error_text, *node.pos)) - elif any(type1.name != type2.name for name, type1, type2 in zip(ptypes, method.param_types, old_meth.param_types)): - self.errors.append(AttributesError(error_text, *node.pos)) - except SemanticError: - pass - - result = self.visit(node.body, scope) - - return_type = get_type(method.return_type, self.current_type) - - if not result.conforms_to(return_type): - error_text = TypesError.INCOMPATIBLE_TYPES %(return_type.name, result.name) - self.errors.append(TypesError(error_text, *node.type_pos)) - - - @visitor.when(VarDeclarationNode) - def visit(self, node:VarDeclarationNode, scope:Scope): - - var_info = self.find_variable(scope, node.id) - vtype = get_type(var_info.type, self.current_type) - - if node.expr != None: - typex = self.visit(node.expr, scope) - if not typex.conforms_to(vtype): - error_text = TypesError.INCOMPATIBLE_TYPES %(vtype.name, typex.name) - self.errors.append(TypesError(error_text, *node.type_pos)) - return typex - return vtype - - - @visitor.when(AssignNode) - def visit(self, node:AssignNode, scope:Scope): - vinfo = self.find_variable(scope, node.id) - vtype = get_type(vinfo.type, self.current_type) - - typex = self.visit(node.expr, scope) - - if not typex.conforms_to(vtype): - error_text = TypesError.INCOMPATIBLE_TYPES %(vtype.name, typex.name) - self.errors.append(TypesError(error_text, *node.pos)) - return typex - - - def _check_args(self, meth:Method, scope:Scope, args, pos): - arg_types = [self.visit(arg, scope) for arg in args] - - if len(arg_types) > len(meth.param_types): - error_text = SemanticError.TOO_MANY_ARGUMENTS % meth.name - self.errors.append(SemanticError(error_text, *pos)) - elif len(arg_types) < len(meth.param_types): - for arg, arg_info in zip(meth.param_names[len(arg_types):], args[len(arg_types):]): - error_text = SemanticError.MISSING_PARAMETER % (arg, meth.name) - self.errors.append(SemanticError(error_text, *arg_info.pos)) - - for atype, ptype, arg_info in zip(arg_types, meth.param_types, args): - if not atype.conforms_to(ptype): - error_text = TypesError.INCOMPATIBLE_TYPES % (ptype.name, atype.name) - self.errors.append(TypesError(error_text, *arg_info.pos)) - - - @visitor.when(CallNode) - def visit(self, node:CallNode, scope:Scope): - stype = self.visit(node.obj, scope) - - meth = self._get_method(stype, node.id, node.pos) - if not isinstance(meth, MethodError): - self._check_args(meth, scope, node.args, node.pos) - - return get_type(meth.return_type, stype) - - - @visitor.when(BaseCallNode) - def visit(self, node:BaseCallNode, scope:Scope): - obj = self.visit(node.obj, scope) - typex = self._get_type(node.type, node.type_pos) - - if not obj.conforms_to(typex): - error_text = TypesError.INCOMPATIBLE_TYPES % (typex.name, obj.name) - self.errors.append(TypesError(error_text, *node.type_pos)) - return ErrorType() - - meth = self._get_method(typex, node.id, node.pos) - if not isinstance(meth, MethodError): - self._check_args(meth, scope, node.args, node.pos) - - return get_type(meth.return_type, typex) - - - @visitor.when(StaticCallNode) - def visit(self, node:StaticCallNode, scope:Scope): - typex = self.current_type - - meth = self._get_method(typex, node.id, node.pos) - if not isinstance(meth, MethodError): - self._check_args(meth, scope, node.args, node.pos) - - return get_type(meth.return_type, typex) - - - @visitor.when(ConstantNumNode) - def visit(self, node:ConstantNumNode, scope:Scope): - return IntType(node.pos) - - - @visitor.when(ConstantBoolNode) - def visit(self, node:ConstantBoolNode, scope:Scope): - return BoolType(node.pos) - - - @visitor.when(ConstantStrNode) - def visit(self, node:ConstantStrNode, scope:Scope): - return StringType(node.pos) - - @visitor.when(ConstantVoidNode) - def visit(self, node:ConstantVoidNode, scope:Scope): - return VoidType(node.pos) - - def find_variable(self, scope, lex): - var_info = scope.find_attribute(lex, self.current_index) - if lex in self.current_type.attributes and var_info is None: - return VariableInfo(lex, VoidType()) - if var_info is None: - var_info = scope.find_local(lex) - return var_info - - @visitor.when(VariableNode) - def visit(self, node:VariableNode, scope:Scope): - typex = self.find_variable(scope, node.lex).type - return get_type(typex, self.current_type) - - - @visitor.when(InstantiateNode) - def visit(self, node:InstantiateNode, scope:Scope): - return get_type(self._get_type(node.lex, node.pos), self.current_type) - - - @visitor.when(WhileNode) - def visit(self, node:WhileNode, scope:Scope): - cond = self.visit(node.cond, scope) - - if cond.name != 'Bool': - self.errors.append(INCORRECT_TYPE % (cond.name, 'Bool')) - self.visit(node.expr, scope) - return VoidType() - - @visitor.when(IsVoidNode) - def visit(self, node:IsVoidNode, scope:Scope): - self.visit(node.expr, scope) - return BoolType() - - - @visitor.when(ConditionalNode) - def visit(self, node:ConditionalNode, scope:Scope): - cond = self.visit(node.cond, scope) - - if cond.name != 'Bool': - error_text = TypesError.INCORRECT_TYPE % (cond.name, 'Bool') - self.errors.append(TypesError(error_text, node.pos)) - - true_type = self.visit(node.stm, scope) - false_type = self.visit(node.else_stm, scope) - - if true_type.conforms_to(false_type): - return false_type - elif false_type.conforms_to(true_type): - return true_type - else: - error_text = TypesError.INCOMPATIBLE_TYPES % (false_type.name, true_type.name) - self.errors.append(TypesError(error_text, node.pos)) - return ErrorType() - - - @visitor.when(BlockNode) - def visit(self, node:BlockNode, scope:Scope): - value = None - for exp in node.expr_list: - value = self.visit(exp, scope) - return value - - - @visitor.when(LetNode) - def visit(self, node:LetNode, scope:Scope): - child_scope = scope.expr_dict[node] - for init in node.init_list: - self.visit(init, child_scope) - return self.visit(node.expr, child_scope) - - - @visitor.when(CaseNode) - def visit(self, node:CaseNode, scope:Scope): - type_expr = self.visit(node.expr, scope) - - new_scope = scope.expr_dict[node] - types = [] - var_types = [] - for case, c_scope in zip(node.case_list, new_scope.children): - t, vt = self.visit(case, c_scope) - types.append(t) - var_types.append(vt) - - for t in var_types: - if not type_expr.conforms_to(t): - error_text = TypesError.INCOMPATIBLE_TYPES % (t.name, type_expr.name) - self.errors.append(TypesError(error_text, *node.pos)) - return ErrorType() - - return get_common_basetype(types) - - - @visitor.when(OptionNode) - def visit(self, node:OptionNode, scope:Scope): - var_info = self.find_variable(scope, node.id) - typex = self.visit(node.expr, scope) - return typex, var_info.type - - - @visitor.when(BinaryArithNode) - def visit(self, node:BinaryArithNode, scope:Scope): - ltype = self.visit(node.left, scope) - rtype = self.visit(node.right, scope) - if ltype != rtype != IntType(): - error_text = TypesError.BOPERATION_NOT_DEFINED %('Arithmetic', ltype.name, rtype.name) - self.errors.append(TypesError(error_text, *node.pos)) - return ErrorType() - return IntType() - - - @visitor.when(BinaryLogicalNode) - def visit(self, node:BinaryLogicalNode, scope:Scope): - ltype = self.visit(node.left, scope) - rtype = self.visit(node.right, scope) - if ltype != rtype != IntType(): - error_text = TypesError.BOPERATION_NOT_DEFINED %('Logical', ltype.name, rtype.name) - self.errors.append(TypesError(error_text, *node.pos)) - return ErrorType() - - return BoolType() - - - @visitor.when(UnaryLogicalNode) - def visit(self, node:UnaryLogicalNode, scope:Scope): - ltype = self.visit(node.expr, scope) - if ltype != BoolType(): - error_text = TypesError.UOPERATION_NOT_DEFINED %('Logical', ltype.name) - self.errors.append(TypesError(error_text, *node.pos)) - return ErrorType() - - return BoolType() - - - @visitor.when(UnaryArithNode) - def visit(self, node:UnaryArithNode, scope:Scope): - ltype = self.visit(node.expr, scope) - if ltype != IntType(): - error_text = TypesError.UOPERATION_NOT_DEFINED %('Arithmetic', ltype.name) - self.errors.append(TypesError(error_text, *node.pos)) - return ErrorType() +from utils import visitor +from semantic.tools import * +from semantic.types import * +from utils.ast import * +from utils.errors import SemanticError, AttributesError, TypesError, NamesError +# from utils.utils import get_type, get_common_basetype +from utils import get_type + + +class TypeChecker: + def __init__(self, context:Context, errors=[]): + self.context:Context = context + self.current_type:Type = None + self.current_method:Method = None + self.errors = errors + self.current_index = None # Lleva el índice del scope en el que se está + + @visitor.on('node') + def visit(self, node, scope): + pass + + @visitor.when(ProgramNode) + def visit(self, node:ProgramNode, scope:Scope): + for declaration, new_scope in zip(node.declarations, scope.children): + self.visit(declaration, new_scope) + + def _get_type(self, ntype:Type, pos): + try: + return self.context.get_type(ntype, pos) + except SemanticError as e: + self.errors.append(e) + return ErrorType() + + def _get_method(self, typex:Type, name:str, pos) -> Method: + try: + return typex.get_method(name, pos) + except SemanticError as e: + if type(typex) != ErrorType and type(typex) != AutoType: + self.errors.append(e) + return MethodError(name, [], [], ErrorType()) + + + @visitor.when(ClassDeclarationNode) + def visit(self, node:ClassDeclarationNode, scope:Scope): + self.current_type = self.context.get_type(node.id, node.pos) + + fd = [feat for feat in node.features if isinstance(feat, FuncDeclarationNode)] + + for feat in node.features: + if isinstance(feat, AttrDeclarationNode): + self.visit(feat, scope) + + for feat, child_scope in zip(fd, scope.children): + self.visit(feat, child_scope) + + + @visitor.when(AttrDeclarationNode) + def visit(self, node:AttrDeclarationNode, scope:Scope): + attr = self.current_type.get_attribute(node.id, node.pos) + # varinfo = scope.find_variable(node.id) + vartype = get_type(attr.type, self.current_type) + + self.current_index = attr.index + typex = self.visit(node.expr, scope) + self.current_index = None + + if not typex.conforms_to(vartype): + error_text = TypesError.INCOMPATIBLE_TYPES %(typex.name, vartype.name) + self.errors.append(TypesError(error_text, *node.pos)) + return ErrorType() + return typex + + + @visitor.when(FuncDeclarationNode) + def visit(self, node:FuncDeclarationNode, scope:Scope): + parent = self.current_type.parent + ptypes = [param[1] for param in node.params] + + self.current_method = method = self.current_type.get_method(node.id, node.pos) + if parent is not None: + try: + old_meth = parent.get_method(node.id, node.pos) + error_text = AttributesError.WRONG_SIGNATURE % (node.id, parent.name) + if old_meth.return_type.name != method.return_type.name: + self.errors.append(AttributesError(error_text, *node.pos)) + elif any(type1.name != type2.name for name, type1, type2 in zip(ptypes, method.param_types, old_meth.param_types)): + self.errors.append(AttributesError(error_text, *node.pos)) + except SemanticError: + pass + + result = self.visit(node.body, scope) + + return_type = get_type(method.return_type, self.current_type) + + if not result.conforms_to(return_type): + error_text = TypesError.INCOMPATIBLE_TYPES %(return_type.name, result.name) + self.errors.append(TypesError(error_text, *node.type_pos)) + + + @visitor.when(VarDeclarationNode) + def visit(self, node:VarDeclarationNode, scope:Scope): + + var_info = self.find_variable(scope, node.id) + vtype = get_type(var_info.type, self.current_type) + + if node.expr != None: + typex = self.visit(node.expr, scope) + if not typex.conforms_to(vtype): + error_text = TypesError.INCOMPATIBLE_TYPES %(vtype.name, typex.name) + self.errors.append(TypesError(error_text, *node.type_pos)) + return typex + return vtype + + + @visitor.when(AssignNode) + def visit(self, node:AssignNode, scope:Scope): + vinfo = self.find_variable(scope, node.id) + vtype = get_type(vinfo.type, self.current_type) + + typex = self.visit(node.expr, scope) + + if not typex.conforms_to(vtype): + error_text = TypesError.INCOMPATIBLE_TYPES %(vtype.name, typex.name) + self.errors.append(TypesError(error_text, *node.pos)) + return typex + + + def _check_args(self, meth:Method, scope:Scope, args, pos): + arg_types = [self.visit(arg, scope) for arg in args] + + if len(arg_types) > len(meth.param_types): + error_text = SemanticError.TOO_MANY_ARGUMENTS % meth.name + self.errors.append(SemanticError(error_text, *pos)) + elif len(arg_types) < len(meth.param_types): + for arg, arg_info in zip(meth.param_names[len(arg_types):], args[len(arg_types):]): + error_text = SemanticError.MISSING_PARAMETER % (arg, meth.name) + self.errors.append(SemanticError(error_text, *arg_info.pos)) + + for atype, ptype, arg_info in zip(arg_types, meth.param_types, args): + if not atype.conforms_to(ptype): + error_text = TypesError.INCOMPATIBLE_TYPES % (ptype.name, atype.name) + self.errors.append(TypesError(error_text, *arg_info.pos)) + + + @visitor.when(CallNode) + def visit(self, node:CallNode, scope:Scope): + stype = self.visit(node.obj, scope) + + meth = self._get_method(stype, node.id, node.pos) + if not isinstance(meth, MethodError): + self._check_args(meth, scope, node.args, node.pos) + + return get_type(meth.return_type, stype) + + + @visitor.when(BaseCallNode) + def visit(self, node:BaseCallNode, scope:Scope): + obj = self.visit(node.obj, scope) + typex = self._get_type(node.type, node.type_pos) + + if not obj.conforms_to(typex): + error_text = TypesError.INCOMPATIBLE_TYPES % (typex.name, obj.name) + self.errors.append(TypesError(error_text, *node.type_pos)) + return ErrorType() + + meth = self._get_method(typex, node.id, node.pos) + if not isinstance(meth, MethodError): + self._check_args(meth, scope, node.args, node.pos) + + return get_type(meth.return_type, typex) + + + @visitor.when(StaticCallNode) + def visit(self, node:StaticCallNode, scope:Scope): + typex = self.current_type + + meth = self._get_method(typex, node.id, node.pos) + if not isinstance(meth, MethodError): + self._check_args(meth, scope, node.args, node.pos) + + return get_type(meth.return_type, typex) + + + @visitor.when(ConstantNumNode) + def visit(self, node:ConstantNumNode, scope:Scope): + return IntType(node.pos) + + + @visitor.when(ConstantBoolNode) + def visit(self, node:ConstantBoolNode, scope:Scope): + return BoolType(node.pos) + + + @visitor.when(ConstantStrNode) + def visit(self, node:ConstantStrNode, scope:Scope): + return StringType(node.pos) + + @visitor.when(ConstantVoidNode) + def visit(self, node:ConstantVoidNode, scope:Scope): + return VoidType(node.pos) + + def find_variable(self, scope, lex): + var_info = scope.find_attribute(lex, self.current_index) + if lex in self.current_type.attributes and var_info is None: + return VariableInfo(lex, VoidType()) + if var_info is None: + var_info = scope.find_local(lex) + return var_info + + @visitor.when(VariableNode) + def visit(self, node:VariableNode, scope:Scope): + typex = self.find_variable(scope, node.lex).type + return get_type(typex, self.current_type) + + + @visitor.when(InstantiateNode) + def visit(self, node:InstantiateNode, scope:Scope): + return get_type(self._get_type(node.lex, node.pos), self.current_type) + + + @visitor.when(WhileNode) + def visit(self, node:WhileNode, scope:Scope): + cond = self.visit(node.cond, scope) + + if cond.name != 'Bool': + self.errors.append(INCORRECT_TYPE % (cond.name, 'Bool')) + self.visit(node.expr, scope) + return VoidType() + + @visitor.when(IsVoidNode) + def visit(self, node:IsVoidNode, scope:Scope): + self.visit(node.expr, scope) + return BoolType() + + + @visitor.when(ConditionalNode) + def visit(self, node:ConditionalNode, scope:Scope): + cond = self.visit(node.cond, scope) + + if cond.name != 'Bool': + error_text = TypesError.INCORRECT_TYPE % (cond.name, 'Bool') + self.errors.append(TypesError(error_text, node.pos)) + + true_type = self.visit(node.stm, scope) + false_type = self.visit(node.else_stm, scope) + + if true_type.conforms_to(false_type): + return false_type + elif false_type.conforms_to(true_type): + return true_type + else: + error_text = TypesError.INCOMPATIBLE_TYPES % (false_type.name, true_type.name) + self.errors.append(TypesError(error_text, node.pos)) + return ErrorType() + + + @visitor.when(BlockNode) + def visit(self, node:BlockNode, scope:Scope): + value = None + for exp in node.expr_list: + value = self.visit(exp, scope) + return value + + + @visitor.when(LetNode) + def visit(self, node:LetNode, scope:Scope): + child_scope = scope.expr_dict[node] + for init in node.init_list: + self.visit(init, child_scope) + return self.visit(node.expr, child_scope) + + + @visitor.when(CaseNode) + def visit(self, node:CaseNode, scope:Scope): + type_expr = self.visit(node.expr, scope) + + new_scope = scope.expr_dict[node] + types = [] + var_types = [] + for case, c_scope in zip(node.case_list, new_scope.children): + t, vt = self.visit(case, c_scope) + types.append(t) + var_types.append(vt) + + for t in var_types: + if not type_expr.conforms_to(t): + error_text = TypesError.INCOMPATIBLE_TYPES % (t.name, type_expr.name) + self.errors.append(TypesError(error_text, *node.pos)) + return ErrorType() + + return get_common_basetype(types) + + + @visitor.when(OptionNode) + def visit(self, node:OptionNode, scope:Scope): + var_info = self.find_variable(scope, node.id) + typex = self.visit(node.expr, scope) + return typex, var_info.type + + + @visitor.when(BinaryArithNode) + def visit(self, node:BinaryArithNode, scope:Scope): + ltype = self.visit(node.left, scope) + rtype = self.visit(node.right, scope) + if ltype != rtype != IntType(): + error_text = TypesError.BOPERATION_NOT_DEFINED %('Arithmetic', ltype.name, rtype.name) + self.errors.append(TypesError(error_text, *node.pos)) + return ErrorType() + return IntType() + + + @visitor.when(BinaryLogicalNode) + def visit(self, node:BinaryLogicalNode, scope:Scope): + ltype = self.visit(node.left, scope) + rtype = self.visit(node.right, scope) + if ltype != rtype != IntType(): + error_text = TypesError.BOPERATION_NOT_DEFINED %('Logical', ltype.name, rtype.name) + self.errors.append(TypesError(error_text, *node.pos)) + return ErrorType() + + return BoolType() + + + @visitor.when(UnaryLogicalNode) + def visit(self, node:UnaryLogicalNode, scope:Scope): + ltype = self.visit(node.expr, scope) + if ltype != BoolType(): + error_text = TypesError.UOPERATION_NOT_DEFINED %('Logical', ltype.name) + self.errors.append(TypesError(error_text, *node.pos)) + return ErrorType() + + return BoolType() + + + @visitor.when(UnaryArithNode) + def visit(self, node:UnaryArithNode, scope:Scope): + ltype = self.visit(node.expr, scope) + if ltype != IntType(): + error_text = TypesError.UOPERATION_NOT_DEFINED %('Arithmetic', ltype.name) + self.errors.append(TypesError(error_text, *node.pos)) + return ErrorType() return IntType() \ No newline at end of file diff --git a/src/semantic/visitors/type_collector.py b/src/semantic/visitors/type_collector.py index d32b7687..4fe33e0e 100644 --- a/src/semantic/visitors/type_collector.py +++ b/src/semantic/visitors/type_collector.py @@ -1,34 +1,34 @@ -from utils.errors import SemanticError -from semantic.tools import Context -from utils import visitor -from semantic.types import * -from utils.ast import * - -class TypeCollector(object): - def __init__(self, errors=[]): - self.context = None - self.errors = errors - - @visitor.on('node') - def visit(self, node): - pass - - @visitor.when(ProgramNode) - def visit(self, node:ProgramNode): - self.context = Context() - self.context.types['String'] = StringType() - self.context.types['Int'] = IntType() - self.context.types['Object'] = ObjectType() - self.context.types['Bool'] = BoolType() - self.context.types['SELF_TYPE'] = SelfType() - self.context.types['IO'] = IOType() - # self.context.create_type('SELF_TYPE', (0, 0)) - for dec in node.declarations: - self.visit(dec) - - @visitor.when(ClassDeclarationNode) - def visit(self, node:ClassDeclarationNode): - try: - self.context.create_type(node.id, node.pos) - except SemanticError as e: +from utils.errors import SemanticError +from semantic.tools import Context +from utils import visitor +from semantic.types import * +from utils.ast import * + +class TypeCollector(object): + def __init__(self, errors=[]): + self.context = None + self.errors = errors + + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node:ProgramNode): + self.context = Context() + self.context.types['String'] = StringType() + self.context.types['Int'] = IntType() + self.context.types['Object'] = ObjectType() + self.context.types['Bool'] = BoolType() + self.context.types['SELF_TYPE'] = SelfType() + self.context.types['IO'] = IOType() + # self.context.create_type('SELF_TYPE', (0, 0)) + for dec in node.declarations: + self.visit(dec) + + @visitor.when(ClassDeclarationNode) + def visit(self, node:ClassDeclarationNode): + try: + self.context.create_type(node.id, node.pos) + except SemanticError as e: self.errors.append(e) \ No newline at end of file diff --git a/src/semantic/visitors/var_collector.py b/src/semantic/visitors/var_collector.py index a2f67e4e..d1526ab9 100644 --- a/src/semantic/visitors/var_collector.py +++ b/src/semantic/visitors/var_collector.py @@ -1,238 +1,238 @@ -from utils import visitor -from semantic.tools import * -from semantic.types import Type, ErrorType, IntType, StringType, BoolType -from utils.errors import SemanticError, AttributesError, TypesError, NamesError -from utils.ast import * -from ply.lex import LexToken - -class VarCollector: - def __init__(self, context=Context, errors=[]): - self.context = context - self.current_type = None - self.current_method = None - self.errors = errors - self.current_index = None # Lleva - - @visitor.on('node') - def visit(self, node, scope): - pass - - @visitor.when(ProgramNode) - def visit(self, node:ProgramNode, scope:Scope=None): - scope = Scope() - for declaration in node.declarations: - self.visit(declaration, scope.create_child()) - return scope - - - def copy_scope(self, scope:Scope, parent:Type): - if parent is None: - return - for attr in parent.attributes: - if scope.find_variable(attr.name) is None: - scope.define_attribute(attr) - self.copy_scope(scope, parent.parent) - - - @visitor.when(ClassDeclarationNode) - def visit(self, node:ClassDeclarationNode, scope:Scope): - self.current_type = self._get_type(node.id, node.pos) - scope.define_variable('self', self.current_type) - - for feat in node.features: - if isinstance(feat, AttrDeclarationNode): - self.visit(feat, scope) - - self.copy_scope(scope, self.current_type.parent) - - for feat in node.features: - if isinstance(feat, FuncDeclarationNode): - self.visit(feat, scope) - - - def _define_default_value(self, typex, node): - if typex == IntType(): - node.expr = ConstantNumNode(0) - elif typex == StringType(): - node.expr = ConstantStrNode("") - elif typex == BoolType(): - node.expr = ConstantBoolNode('false') - else: - node.expr = ConstantVoidNode() - - @visitor.when(AttrDeclarationNode) - def visit(self, node:AttrDeclarationNode, scope:Scope): - attr = self.current_type.get_attribute(node.id, node.pos) - if node.expr is None: - self._define_default_value(attr.type, node) - else: - self.visit(node.expr, scope) - attr.expr = node.expr - scope.define_attribute(attr) - - - @visitor.when(FuncDeclarationNode) - def visit(self, node:FuncDeclarationNode, scope:Scope): - # Ver si el método está definido en el padre - parent = self.current_type.parent - pnames = [param[0] for param in node.params] - ptypes = [param[1] for param in node.params] - - self.current_method = self.current_type.get_method(node.id, node.pos) - - new_scope = scope.create_child() - scope.functions[node.id] = new_scope - - # Añadir las variables de argumento - for pname, ptype in node.params: - new_scope.define_variable(pname, self._get_type(ptype.value, ptype.pos)) - - self.visit(node.body, new_scope) - - - def _get_type(self, ntype, pos): - try: - return self.context.get_type(ntype, pos) - except SemanticError as e: - self.errors.append(e) - return ErrorType() - - - @visitor.when(VarDeclarationNode) - def visit(self, node:VarDeclarationNode, scope:Scope): - if node.id == 'self': - error_text = SemanticError.SELF_IS_READONLY - self.errors.append(SemanticError(error_text, *node.pos)) - return - - if scope.is_defined(node.id): - var = scope.find_variable(node.id) - if var.type != ErrorType(): - error_text = SemanticError.LOCAL_ALREADY_DEFINED %(node.id, self.current_method.name) - self.errors.append(SemanticError(error_text, *node.pos)) - return - - vtype = self._get_type(node.type, node.type_pos) - var_info = scope.define_variable(node.id, vtype) - - if node.expr is not None: - self.visit(node.expr, scope) - else: - self._define_default_value(vtype, node) - - - @visitor.when(AssignNode) - def visit(self, node:AssignNode, scope:Scope): - if node.id == 'self': - error_text = SemanticError.SELF_IS_READONLY - self.errors.append(SemanticError(error_text, *node.pos)) - return - - vinfo = scope.find_variable(node.id) - if vinfo is None: - error_text = NamesError.VARIABLE_NOT_DEFINED %(node.id, self.current_method.name) - self.errors.append(NamesError(error_text, *node.pos)) - vtype = ErrorType() - scope.define_variable(node.id, vtype) - else: - vtype = vinfo.type - - self.visit(node.expr, scope) - - @visitor.when(BlockNode) - def visit(self, node:BlockNode, scope:Scope): - for exp in node.expr_list: - self.visit(exp, scope) - - - @visitor.when(LetNode) - def visit(self, node:LetNode, scope:Scope): - n_scope = scope.create_child() - scope.expr_dict[node] = n_scope - for init in node.init_list: - self.visit(init, n_scope) - - self.visit(node.expr, n_scope) - - #no necesario - @visitor.when(BinaryNode) - def visit(self, node:BinaryNode, scope:Scope): - self.visit(node.left, scope) - self.visit(node.right, scope) - - - @visitor.when(UnaryNode) - def visit(self, node:UnaryNode, scope:Scope): - self.visit(node.expr, scope) - - - @visitor.when(VariableNode) - def visit(self, node:VariableNode, scope:Scope): - try: - return self.current_type.get_attribute(node.lex, node.pos).type - except AttributesError: - if not scope.is_defined(node.lex): - error_text = NamesError.VARIABLE_NOT_DEFINED %(node.lex, self.current_method.name) - self.errors.append(NamesError(error_text, *node.pos)) - vinfo = scope.define_variable(node.lex, ErrorType(node.pos)) - else: - vinfo = scope.find_variable(node.lex) - return vinfo.type - - - @visitor.when(WhileNode) - def visit(self, node:WhileNode, scope:Scope): - self.visit(node.cond, scope) - self.visit(node.expr, scope) - - - @visitor.when(ConditionalNode) - def visit(self, node:ConditionalNode, scope:Scope): - self.visit(node.cond, scope) - self.visit(node.stm, scope) - self.visit(node.else_stm, scope) - - @visitor.when(IsVoidNode) - def visit(self, node:IsVoidNode, scope:Scope): - self.visit(node.expr, scope) - - @visitor.when(CallNode) - def visit(self, node:CallNode, scope:Scope): - self.visit(node.obj, scope) - for arg in node.args: - self.visit(arg, scope) - - - @visitor.when(BaseCallNode) - def visit(self, node:BaseCallNode, scope:Scope): - self.visit(node.obj, scope) - for arg in node.args: - self.visit(arg, scope) - - - @visitor.when(StaticCallNode) - def visit(self, node:StaticCallNode, scope:Scope): - for arg in node.args: - self.visit(arg, scope) - - - @visitor.when(CaseNode) - def visit(self, node:CaseNode, scope:Scope): - self.visit(node.expr, scope) - - new_scp = scope.create_child() - scope.expr_dict[node] = new_scp - - for case in node.case_list: - self.visit(case, new_scp.create_child()) - - - @visitor.when(OptionNode) - def visit(self, node:OptionNode, scope:Scope): - typex = self.context.get_type(node.typex, node.type_pos) - - self.visit(node.expr, scope) - scope.define_variable(node.id, typex) - - +from utils import visitor +from semantic.tools import * +from semantic.types import Type, ErrorType, IntType, StringType, BoolType +from utils.errors import SemanticError, AttributesError, TypesError, NamesError +from utils.ast import * +from ply.lex import LexToken + +class VarCollector: + def __init__(self, context=Context, errors=[]): + self.context = context + self.current_type = None + self.current_method = None + self.errors = errors + self.current_index = None # Lleva + + @visitor.on('node') + def visit(self, node, scope): + pass + + @visitor.when(ProgramNode) + def visit(self, node:ProgramNode, scope:Scope=None): + scope = Scope() + for declaration in node.declarations: + self.visit(declaration, scope.create_child()) + return scope + + + def copy_scope(self, scope:Scope, parent:Type): + if parent is None: + return + for attr in parent.attributes: + if scope.find_variable(attr.name) is None: + scope.define_attribute(attr) + self.copy_scope(scope, parent.parent) + + + @visitor.when(ClassDeclarationNode) + def visit(self, node:ClassDeclarationNode, scope:Scope): + self.current_type = self._get_type(node.id, node.pos) + scope.define_variable('self', self.current_type) + + for feat in node.features: + if isinstance(feat, AttrDeclarationNode): + self.visit(feat, scope) + + self.copy_scope(scope, self.current_type.parent) + + for feat in node.features: + if isinstance(feat, FuncDeclarationNode): + self.visit(feat, scope) + + + def _define_default_value(self, typex, node): + if typex == IntType(): + node.expr = ConstantNumNode(0) + elif typex == StringType(): + node.expr = ConstantStrNode("") + elif typex == BoolType(): + node.expr = ConstantBoolNode('false') + else: + node.expr = ConstantVoidNode() + + @visitor.when(AttrDeclarationNode) + def visit(self, node:AttrDeclarationNode, scope:Scope): + attr = self.current_type.get_attribute(node.id, node.pos) + if node.expr is None: + self._define_default_value(attr.type, node) + else: + self.visit(node.expr, scope) + attr.expr = node.expr + scope.define_attribute(attr) + + + @visitor.when(FuncDeclarationNode) + def visit(self, node:FuncDeclarationNode, scope:Scope): + # Ver si el método está definido en el padre + parent = self.current_type.parent + pnames = [param[0] for param in node.params] + ptypes = [param[1] for param in node.params] + + self.current_method = self.current_type.get_method(node.id, node.pos) + + new_scope = scope.create_child() + scope.functions[node.id] = new_scope + + # Añadir las variables de argumento + for pname, ptype in node.params: + new_scope.define_variable(pname, self._get_type(ptype.value, ptype.pos)) + + self.visit(node.body, new_scope) + + + def _get_type(self, ntype, pos): + try: + return self.context.get_type(ntype, pos) + except SemanticError as e: + self.errors.append(e) + return ErrorType() + + + @visitor.when(VarDeclarationNode) + def visit(self, node:VarDeclarationNode, scope:Scope): + if node.id == 'self': + error_text = SemanticError.SELF_IS_READONLY + self.errors.append(SemanticError(error_text, *node.pos)) + return + + if scope.is_defined(node.id): + var = scope.find_variable(node.id) + if var.type != ErrorType(): + error_text = SemanticError.LOCAL_ALREADY_DEFINED %(node.id, self.current_method.name) + self.errors.append(SemanticError(error_text, *node.pos)) + return + + vtype = self._get_type(node.type, node.type_pos) + var_info = scope.define_variable(node.id, vtype) + + if node.expr is not None: + self.visit(node.expr, scope) + else: + self._define_default_value(vtype, node) + + + @visitor.when(AssignNode) + def visit(self, node:AssignNode, scope:Scope): + if node.id == 'self': + error_text = SemanticError.SELF_IS_READONLY + self.errors.append(SemanticError(error_text, *node.pos)) + return + + vinfo = scope.find_variable(node.id) + if vinfo is None: + error_text = NamesError.VARIABLE_NOT_DEFINED %(node.id, self.current_method.name) + self.errors.append(NamesError(error_text, *node.pos)) + vtype = ErrorType() + scope.define_variable(node.id, vtype) + else: + vtype = vinfo.type + + self.visit(node.expr, scope) + + @visitor.when(BlockNode) + def visit(self, node:BlockNode, scope:Scope): + for exp in node.expr_list: + self.visit(exp, scope) + + + @visitor.when(LetNode) + def visit(self, node:LetNode, scope:Scope): + n_scope = scope.create_child() + scope.expr_dict[node] = n_scope + for init in node.init_list: + self.visit(init, n_scope) + + self.visit(node.expr, n_scope) + + #no necesario + @visitor.when(BinaryNode) + def visit(self, node:BinaryNode, scope:Scope): + self.visit(node.left, scope) + self.visit(node.right, scope) + + + @visitor.when(UnaryNode) + def visit(self, node:UnaryNode, scope:Scope): + self.visit(node.expr, scope) + + + @visitor.when(VariableNode) + def visit(self, node:VariableNode, scope:Scope): + try: + return self.current_type.get_attribute(node.lex, node.pos).type + except AttributesError: + if not scope.is_defined(node.lex): + error_text = NamesError.VARIABLE_NOT_DEFINED %(node.lex, self.current_method.name) + self.errors.append(NamesError(error_text, *node.pos)) + vinfo = scope.define_variable(node.lex, ErrorType(node.pos)) + else: + vinfo = scope.find_variable(node.lex) + return vinfo.type + + + @visitor.when(WhileNode) + def visit(self, node:WhileNode, scope:Scope): + self.visit(node.cond, scope) + self.visit(node.expr, scope) + + + @visitor.when(ConditionalNode) + def visit(self, node:ConditionalNode, scope:Scope): + self.visit(node.cond, scope) + self.visit(node.stm, scope) + self.visit(node.else_stm, scope) + + @visitor.when(IsVoidNode) + def visit(self, node:IsVoidNode, scope:Scope): + self.visit(node.expr, scope) + + @visitor.when(CallNode) + def visit(self, node:CallNode, scope:Scope): + self.visit(node.obj, scope) + for arg in node.args: + self.visit(arg, scope) + + + @visitor.when(BaseCallNode) + def visit(self, node:BaseCallNode, scope:Scope): + self.visit(node.obj, scope) + for arg in node.args: + self.visit(arg, scope) + + + @visitor.when(StaticCallNode) + def visit(self, node:StaticCallNode, scope:Scope): + for arg in node.args: + self.visit(arg, scope) + + + @visitor.when(CaseNode) + def visit(self, node:CaseNode, scope:Scope): + self.visit(node.expr, scope) + + new_scp = scope.create_child() + scope.expr_dict[node] = new_scp + + for case in node.case_list: + self.visit(case, new_scp.create_child()) + + + @visitor.when(OptionNode) + def visit(self, node:OptionNode, scope:Scope): + typex = self.context.get_type(node.typex, node.type_pos) + + self.visit(node.expr, scope) + scope.define_variable(node.id, typex) + + \ No newline at end of file diff --git a/src/test.cl b/src/test.cl index 0105a944..69d1aea2 100644 --- a/src/test.cl +++ b/src/test.cl @@ -1,40 +1,40 @@ -class Main { - - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Int; - test2: Int <- test3; - - testing1(): Int { - 2 - 2 - }; - - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - let count: Int, pow: Int <- 1 -- Initialization must be an expression - in { - count <- 0; - } - }; - - testing3(): Int { - testing2(new Alpha, 2) - }; - - testing4(): Int { - test1 <- ~(1 + 2 + 3 + 4 + 5) -- The left side must be an expression - }; -}; - -class Alpha inherits IO { - x : Int <- 0; - print() : Object { - out_string("reached!!\n") - }; +class Main { + + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Int; + test2: Int <- test3; + + testing1(): Int { + 2 - 2 + }; + + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + let count: Int, pow: Int <- 1 -- Initialization must be an expression + in { + count <- 0; + } + }; + + testing3(): Int { + testing2(new Alpha, 2) + }; + + testing4(): Int { + test1 <- ~(1 + 2 + 3 + 4 + 5) -- The left side must be an expression + }; +}; + +class Alpha inherits IO { + x : Int <- 0; + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/src/utils/ast.py b/src/utils/ast.py index 5daef3f7..a1fa03ae 100644 --- a/src/utils/ast.py +++ b/src/utils/ast.py @@ -1,221 +1,221 @@ -from ply.lex import LexToken - -class Node: - pass - -class ProgramNode(Node): - def __init__(self, declarations): - self.declarations = declarations - -class DeclarationNode(Node): - pass - -class ExpressionNode(Node): - pass - -class ErrorNode(Node): - pass - -class ClassDeclarationNode(DeclarationNode): - def __init__(self, idx:LexToken, features, parent=None): - self.id = idx.value - self.pos = (idx.lineno, idx.column) - if parent: - self.parent = parent.value - self.parent_pos = (parent.lineno, parent.column) - else: - self.parent = None - self.parent_pos = (0, 0) - self.features = features - -class _Param: - def __init__(self, tok): - self.value = tok.value - self.pos = (tok.lineno, tok.column) - -class FuncDeclarationNode(DeclarationNode): - def __init__(self, idx:LexToken, params, return_type, body): - self.id = idx.value - self.pos = (idx.lineno, idx.column) - self.params = [(pname.value, _Param(ptype)) for pname, ptype in params] - self.type = return_type.value - self.type_pos = (return_type.lineno, return_type.column) - self.body = body - - -class AttrDeclarationNode(DeclarationNode): - def __init__(self, idx:LexToken, typex, expr=None): - self.id = idx.value - self.pos = (idx.lineno, idx.column) - self.type = typex.value - self.type_pos = (typex.lineno, typex.column) - self.expr = expr - -class VarDeclarationNode(ExpressionNode): - def __init__(self, idx:LexToken, typex, expr=None): - self.id = idx.value - self.pos = (idx.lineno, idx.column) - self.type = typex.value - self.type_pos = (typex.lineno, typex.column) - self.expr = expr - -class AssignNode(ExpressionNode): - def __init__(self, idx:LexToken, expr): - self.id = idx.value - self.pos = (idx.lineno, idx.column) - self.expr = expr - -class CallNode(ExpressionNode): - def __init__(self, obj, idx:LexToken, args): - self.obj = obj - self.id = idx.value - self.pos = (idx.lineno, idx.column) - self.args = args - -class BlockNode(ExpressionNode): - def __init__(self, expr_list, tok): - self.expr_list = expr_list - self.pos = (tok.lineno, tok.column) - -class BaseCallNode(ExpressionNode): - def __init__(self, obj, typex:LexToken, idx:LexToken, args): - self.obj = obj - self.id = idx.value - self.pos = (idx.lineno, idx.column) - self.args = args - self.type = typex.value - self.type_pos = (typex.lineno, typex.column) - - -class StaticCallNode(ExpressionNode): - def __init__(self, idx:LexToken, args): - self.id = idx.value - self.pos = (idx.lineno, idx.column) - self.args = args - - -class AtomicNode(ExpressionNode): - def __init__(self, lex): - try: - self.lex = lex.value - self.pos = (lex.lineno, lex.column) - except AttributeError: - self.lex = lex - self.pos = (0, 0) - -class BinaryNode(ExpressionNode): - def __init__(self, left, right): - self.left = left - self.right = right - self.pos = left.pos - -class BinaryLogicalNode(BinaryNode): - pass - -class BinaryArithNode(BinaryNode): - pass - -class UnaryNode(ExpressionNode): - def __init__(self, expr, tok): - self.expr = expr - self.pos = (tok.lineno, tok.column) - -class UnaryLogicalNode(UnaryNode): - pass - -class UnaryArithNode(UnaryNode): - pass - -# -------- - -class WhileNode(ExpressionNode): - def __init__(self, cond, expr, tok): - self.cond = cond - self.expr = expr - self.pos = (tok.lineno, tok.column) - -class ConditionalNode(ExpressionNode): - def __init__(self, cond, stm, else_stm, tok): - self.cond = cond - self.stm = stm - self.else_stm = else_stm - self.pos = (tok.lineno, tok.column) - -class CaseNode(ExpressionNode): - def __init__(self, expr, case_list, tok): - self.expr = expr - self.case_list = case_list - self.pos = (tok.lineno, tok.column) - - def __hash__(self): - return id(self) - -class OptionNode(ExpressionNode): - def __init__(self, idx:LexToken, typex, expr): - self.id = idx.value - self.pos = (idx.lineno, idx.column) - self.typex = typex.value - self.type_pos = (typex.lineno, typex.column) - self.expr = expr - - -class LetNode(ExpressionNode): - def __init__(self, init_list, expr, tok): - self.init_list = init_list - self.expr = expr - self.pos = (tok.lineno, tok.column) - - def __hash__(self): - return id(self) - -class ConstantNumNode(AtomicNode): - pass - -class ConstantBoolNode(AtomicNode): - pass - -class ConstantStrNode(AtomicNode): - pass - -class ConstantVoidNode(AtomicNode): - def __init__(self): - super().__init__('void') - -class VariableNode(AtomicNode): - pass - -class TypeNode(AtomicNode): - pass - -class InstantiateNode(AtomicNode): - pass - -class BinaryNotNode(UnaryArithNode): - pass - -class NotNode(UnaryLogicalNode): - pass - -class IsVoidNode(UnaryLogicalNode): - pass - -class PlusNode(BinaryArithNode): - pass - -class MinusNode(BinaryArithNode): - pass - -class StarNode(BinaryArithNode): - pass - -class DivNode(BinaryArithNode): - pass - -class LessNode(BinaryLogicalNode): - pass - -class LessEqNode(BinaryLogicalNode): - pass - -class EqualNode(BinaryLogicalNode): +from ply.lex import LexToken + +class Node: + pass + +class ProgramNode(Node): + def __init__(self, declarations): + self.declarations = declarations + +class DeclarationNode(Node): + pass + +class ExpressionNode(Node): + pass + +class ErrorNode(Node): + pass + +class ClassDeclarationNode(DeclarationNode): + def __init__(self, idx:LexToken, features, parent=None): + self.id = idx.value + self.pos = (idx.lineno, idx.column) + if parent: + self.parent = parent.value + self.parent_pos = (parent.lineno, parent.column) + else: + self.parent = None + self.parent_pos = (0, 0) + self.features = features + +class _Param: + def __init__(self, tok): + self.value = tok.value + self.pos = (tok.lineno, tok.column) + +class FuncDeclarationNode(DeclarationNode): + def __init__(self, idx:LexToken, params, return_type, body): + self.id = idx.value + self.pos = (idx.lineno, idx.column) + self.params = [(pname.value, _Param(ptype)) for pname, ptype in params] + self.type = return_type.value + self.type_pos = (return_type.lineno, return_type.column) + self.body = body + + +class AttrDeclarationNode(DeclarationNode): + def __init__(self, idx:LexToken, typex, expr=None): + self.id = idx.value + self.pos = (idx.lineno, idx.column) + self.type = typex.value + self.type_pos = (typex.lineno, typex.column) + self.expr = expr + +class VarDeclarationNode(ExpressionNode): + def __init__(self, idx:LexToken, typex, expr=None): + self.id = idx.value + self.pos = (idx.lineno, idx.column) + self.type = typex.value + self.type_pos = (typex.lineno, typex.column) + self.expr = expr + +class AssignNode(ExpressionNode): + def __init__(self, idx:LexToken, expr): + self.id = idx.value + self.pos = (idx.lineno, idx.column) + self.expr = expr + +class CallNode(ExpressionNode): + def __init__(self, obj, idx:LexToken, args): + self.obj = obj + self.id = idx.value + self.pos = (idx.lineno, idx.column) + self.args = args + +class BlockNode(ExpressionNode): + def __init__(self, expr_list, tok): + self.expr_list = expr_list + self.pos = (tok.lineno, tok.column) + +class BaseCallNode(ExpressionNode): + def __init__(self, obj, typex:LexToken, idx:LexToken, args): + self.obj = obj + self.id = idx.value + self.pos = (idx.lineno, idx.column) + self.args = args + self.type = typex.value + self.type_pos = (typex.lineno, typex.column) + + +class StaticCallNode(ExpressionNode): + def __init__(self, idx:LexToken, args): + self.id = idx.value + self.pos = (idx.lineno, idx.column) + self.args = args + + +class AtomicNode(ExpressionNode): + def __init__(self, lex): + try: + self.lex = lex.value + self.pos = (lex.lineno, lex.column) + except AttributeError: + self.lex = lex + self.pos = (0, 0) + +class BinaryNode(ExpressionNode): + def __init__(self, left, right): + self.left = left + self.right = right + self.pos = left.pos + +class BinaryLogicalNode(BinaryNode): + pass + +class BinaryArithNode(BinaryNode): + pass + +class UnaryNode(ExpressionNode): + def __init__(self, expr, tok): + self.expr = expr + self.pos = (tok.lineno, tok.column) + +class UnaryLogicalNode(UnaryNode): + pass + +class UnaryArithNode(UnaryNode): + pass + +# -------- + +class WhileNode(ExpressionNode): + def __init__(self, cond, expr, tok): + self.cond = cond + self.expr = expr + self.pos = (tok.lineno, tok.column) + +class ConditionalNode(ExpressionNode): + def __init__(self, cond, stm, else_stm, tok): + self.cond = cond + self.stm = stm + self.else_stm = else_stm + self.pos = (tok.lineno, tok.column) + +class CaseNode(ExpressionNode): + def __init__(self, expr, case_list, tok): + self.expr = expr + self.case_list = case_list + self.pos = (tok.lineno, tok.column) + + def __hash__(self): + return id(self) + +class OptionNode(ExpressionNode): + def __init__(self, idx:LexToken, typex, expr): + self.id = idx.value + self.pos = (idx.lineno, idx.column) + self.typex = typex.value + self.type_pos = (typex.lineno, typex.column) + self.expr = expr + + +class LetNode(ExpressionNode): + def __init__(self, init_list, expr, tok): + self.init_list = init_list + self.expr = expr + self.pos = (tok.lineno, tok.column) + + def __hash__(self): + return id(self) + +class ConstantNumNode(AtomicNode): + pass + +class ConstantBoolNode(AtomicNode): + pass + +class ConstantStrNode(AtomicNode): + pass + +class ConstantVoidNode(AtomicNode): + def __init__(self): + super().__init__('void') + +class VariableNode(AtomicNode): + pass + +class TypeNode(AtomicNode): + pass + +class InstantiateNode(AtomicNode): + pass + +class BinaryNotNode(UnaryArithNode): + pass + +class NotNode(UnaryLogicalNode): + pass + +class IsVoidNode(UnaryLogicalNode): + pass + +class PlusNode(BinaryArithNode): + pass + +class MinusNode(BinaryArithNode): + pass + +class StarNode(BinaryArithNode): + pass + +class DivNode(BinaryArithNode): + pass + +class LessNode(BinaryLogicalNode): + pass + +class LessEqNode(BinaryLogicalNode): + pass + +class EqualNode(BinaryLogicalNode): pass \ No newline at end of file diff --git a/src/utils/errors.py b/src/utils/errors.py index 2ae75f38..66cd9c6d 100644 --- a/src/utils/errors.py +++ b/src/utils/errors.py @@ -1,112 +1,112 @@ -class CoolError(Exception): - def __init__(self, text, line, column): - super().__init__(text) - self.line = line - self.column = column - - @property - def error_type(self): - return 'CoolError' - - @property - def text(self): - return self.args[0] - - def __str__(self): - return f'({self.line}, {self.column}) - {self.error_type}: {self.text}' - - def __repr__(self): - return str(self) - - -class CompilerError(CoolError): - 'Se reporta al presentar alguna anomalia con la entrada del compilador' - - UNKNOWN_FILE = 'The file "%s" does not exist' - - @property - def error_type(self): - return 'CompilerError' - - -class LexicographicError(CoolError): - 'Errores detectados por el lexer' - - UNKNOWN_TOKEN = 'ERROR "%s"' - UNDETERMINATED_STRING = 'Undeterminated string constant' - EOF_COMMENT = 'EOF in comment' - EOF_STRING = 'EOF in string constant' - NULL_STRING = 'String contains null character' - - @property - def error_type(self): - return 'LexicographicError' - - -class SyntaticError(CoolError): - 'Errores detectados en el cool_parser' - - ERROR = 'ERROR at or near "%s"' - - @property - def error_type(self): - return 'SyntacticError' - - -class SemanticError(CoolError): - 'Otros errores semanticos' - - SELF_IS_READONLY = 'Variable "self" is read-only.' - LOCAL_ALREADY_DEFINED = 'Variable "%s" is already defined in method "%s".' - MISSING_PARAMETER = 'Missing argument "%s" in function call "%s"' - TOO_MANY_ARGUMENTS = 'Too many arguments for function call "%s"' - - @property - def error_type(self): - return 'SemanticError' - - -class NamesError(SemanticError): - 'Se reporta al referenciar a un identificador en un ambito en el que no es visible' - - USED_BEFORE_ASSIGNMENT = 'Variable "%s" used before being assigned' - VARIABLE_NOT_DEFINED = 'Variable "%s" is not defined in "%s".' - - @property - def error_type(self): - return 'NameError' - - -class TypesError(SemanticError): - 'Se reporta al detectar un problema de tipos' - - INVALID_OPERATION = 'Operation is not defined between "%s" and "%s".' - INCOMPATIBLE_TYPES = 'Cannot convert "%s" into "%s".' - INCORRECT_TYPE = 'Incorrect type "%s" waiting "%s"' - BOPERATION_NOT_DEFINED = '%s operations are not defined between "%s" and "%s"' - UOPERATION_NOT_DEFINED = '%s operations are not defined for "%s"' - CIRCULAR_DEPENDENCY = 'Circular dependency between %s and %s' - - PARENT_ALREADY_DEFINED = 'Parent type is already set for "%s"' - TYPE_ALREADY_DEFINED = 'Type with the same name (%s) already in context.' - TYPE_NOT_DEFINED = 'Type "%s" is not defined.' - - @property - def error_type(self): - return 'TypeError' - - -class AttributesError(SemanticError): - 'Se reporta cuando un atributo o método se referencia pero no está definido' - - WRONG_SIGNATURE = 'Method "%s" already defined in "%s" with a different signature.' - - METHOD_ALREADY_DEFINED = 'Method "%s" is already defined in class "%s"' - METHOD_NOT_DEFINED = 'Method "%s" is not defined in "%s"' - ATTRIBUTE_ALREADY_DEFINED = 'Attribute "%s" is already defined in %s' - ATTRIBUTE_NOT_DEFINED = 'Attribute "%s" is not defined in %s' - - @property - def error_type(self): - return 'AttributeError' +class CoolError(Exception): + def __init__(self, text, line, column): + super().__init__(text) + self.line = line + self.column = column + + @property + def error_type(self): + return 'CoolError' + + @property + def text(self): + return self.args[0] + + def __str__(self): + return f'({self.line}, {self.column}) - {self.error_type}: {self.text}' + + def __repr__(self): + return str(self) + + +class CompilerError(CoolError): + 'Se reporta al presentar alguna anomalia con la entrada del compilador' + + UNKNOWN_FILE = 'The file "%s" does not exist' + + @property + def error_type(self): + return 'CompilerError' + + +class LexicographicError(CoolError): + 'Errores detectados por el lexer' + + UNKNOWN_TOKEN = 'ERROR "%s"' + UNDETERMINATED_STRING = 'Undeterminated string constant' + EOF_COMMENT = 'EOF in comment' + EOF_STRING = 'EOF in string constant' + NULL_STRING = 'String contains null character' + + @property + def error_type(self): + return 'LexicographicError' + + +class SyntaticError(CoolError): + 'Errores detectados en el cool_parser' + + ERROR = 'ERROR at or near "%s"' + + @property + def error_type(self): + return 'SyntacticError' + + +class SemanticError(CoolError): + 'Otros errores semanticos' + + SELF_IS_READONLY = 'Variable "self" is read-only.' + LOCAL_ALREADY_DEFINED = 'Variable "%s" is already defined in method "%s".' + MISSING_PARAMETER = 'Missing argument "%s" in function call "%s"' + TOO_MANY_ARGUMENTS = 'Too many arguments for function call "%s"' + + @property + def error_type(self): + return 'SemanticError' + + +class NamesError(SemanticError): + 'Se reporta al referenciar a un identificador en un ambito en el que no es visible' + + USED_BEFORE_ASSIGNMENT = 'Variable "%s" used before being assigned' + VARIABLE_NOT_DEFINED = 'Variable "%s" is not defined in "%s".' + + @property + def error_type(self): + return 'NameError' + + +class TypesError(SemanticError): + 'Se reporta al detectar un problema de tipos' + + INVALID_OPERATION = 'Operation is not defined between "%s" and "%s".' + INCOMPATIBLE_TYPES = 'Cannot convert "%s" into "%s".' + INCORRECT_TYPE = 'Incorrect type "%s" waiting "%s"' + BOPERATION_NOT_DEFINED = '%s operations are not defined between "%s" and "%s"' + UOPERATION_NOT_DEFINED = '%s operations are not defined for "%s"' + CIRCULAR_DEPENDENCY = 'Circular dependency between %s and %s' + + PARENT_ALREADY_DEFINED = 'Parent type is already set for "%s"' + TYPE_ALREADY_DEFINED = 'Type with the same name (%s) already in context.' + TYPE_NOT_DEFINED = 'Type "%s" is not defined.' + + @property + def error_type(self): + return 'TypeError' + + +class AttributesError(SemanticError): + 'Se reporta cuando un atributo o método se referencia pero no está definido' + + WRONG_SIGNATURE = 'Method "%s" already defined in "%s" with a different signature.' + + METHOD_ALREADY_DEFINED = 'Method "%s" is already defined in class "%s"' + METHOD_NOT_DEFINED = 'Method "%s" is not defined in "%s"' + ATTRIBUTE_ALREADY_DEFINED = 'Attribute "%s" is already defined in %s' + ATTRIBUTE_NOT_DEFINED = 'Attribute "%s" is not defined in %s' + + @property + def error_type(self): + return 'AttributeError' \ No newline at end of file diff --git a/src/utils/tokens.py b/src/utils/tokens.py index 3bac0e0a..747cc5f1 100644 --- a/src/utils/tokens.py +++ b/src/utils/tokens.py @@ -1,61 +1,61 @@ -reserved = { - 'class': 'class', - 'else': 'else', - 'false': 'false', - 'fi': 'fi', - 'if': 'if', - 'in': 'in', - 'inherits': 'inherits', - 'isvoid': 'isvoid', - 'let': 'let', - 'loop': 'loop', - 'pool': 'pool', - 'then': 'then', - 'while': 'while', - 'case': 'case', - 'esac': 'esac', - 'new': 'new', - 'of': 'of', - 'not': 'not', - 'true': 'true' -} - -tokens = [ - 'semi', # '; ' - 'colon', # ': ' - 'comma', # ', ' - 'dot', # '. ' - 'opar', # '( ' - 'cpar', # ') ' - 'ocur', # '{' - 'ccur', # '} ' - 'larrow', # '<-' - 'arroba', # '@' - 'rarrow', # '=> ' - 'nox', # '~' - 'equal', # '=' - 'plus', # '+' - 'minus', # '-' - 'star', # '\*' - 'div', # '/ ' - 'less', # '<' - 'lesseq', # '<=' - 'id', - 'type', - 'num', - 'string' -] + list(reserved.values()) - - -class Token: - def __init__(self, lex, type_, lineno, pos): - self.lex = lex - self.type = type_ - self.lineno = lineno - self.pos = pos - - def __str__(self): - return f'{self.type}: {self.lex} ({self.lineno}, {self.pos})' - - def __repr__(self): +reserved = { + 'class': 'class', + 'else': 'else', + 'false': 'false', + 'fi': 'fi', + 'if': 'if', + 'in': 'in', + 'inherits': 'inherits', + 'isvoid': 'isvoid', + 'let': 'let', + 'loop': 'loop', + 'pool': 'pool', + 'then': 'then', + 'while': 'while', + 'case': 'case', + 'esac': 'esac', + 'new': 'new', + 'of': 'of', + 'not': 'not', + 'true': 'true' +} + +tokens = [ + 'semi', # '; ' + 'colon', # ': ' + 'comma', # ', ' + 'dot', # '. ' + 'opar', # '( ' + 'cpar', # ') ' + 'ocur', # '{' + 'ccur', # '} ' + 'larrow', # '<-' + 'arroba', # '@' + 'rarrow', # '=> ' + 'nox', # '~' + 'equal', # '=' + 'plus', # '+' + 'minus', # '-' + 'star', # '\*' + 'div', # '/ ' + 'less', # '<' + 'lesseq', # '<=' + 'id', + 'type', + 'num', + 'string' +] + list(reserved.values()) + + +class Token: + def __init__(self, lex, type_, lineno, pos): + self.lex = lex + self.type = type_ + self.lineno = lineno + self.pos = pos + + def __str__(self): + return f'{self.type}: {self.lex} ({self.lineno}, {self.pos})' + + def __repr__(self): return str(self) \ No newline at end of file diff --git a/src/utils/utils.py b/src/utils/utils.py index 85c5bc35..a963c217 100644 --- a/src/utils/utils.py +++ b/src/utils/utils.py @@ -1,35 +1,35 @@ -import itertools -from semantic.types import Type, SelfType - - -def find_column(lexer, token): - line_start = lexer.lexdata.rfind('\n', 0, token.lexpos) - return token.lexpos - line_start - - -def path_to_objet(typex): - path = [] - c_type = typex - - while c_type: - path.append(c_type) - c_type = c_type.parent - - path.reverse() - return path - - -def get_common_basetype(types): - paths = [path_to_objet(typex) for typex in types] - tuples = zip(*paths) - - for i, t in enumerate(tuples): - gr = itertools.groupby(t) - if len(list(gr)) > 1: - return paths[0][i-1] - - return paths[0][-1] - - -def get_type(typex: Type, current_type: Type) -> Type: - return current_type if typex == SelfType() else typex +import itertools +from semantic.types import Type, SelfType + + +def find_column(lexer, token): + line_start = lexer.lexdata.rfind('\n', 0, token.lexpos) + return token.lexpos - line_start + + +def path_to_objet(typex): + path = [] + c_type = typex + + while c_type: + path.append(c_type) + c_type = c_type.parent + + path.reverse() + return path + + +def get_common_basetype(types): + paths = [path_to_objet(typex) for typex in types] + tuples = zip(*paths) + + for i, t in enumerate(tuples): + gr = itertools.groupby(t) + if len(list(gr)) > 1: + return paths[0][i-1] + + return paths[0][-1] + + +def get_type(typex: Type, current_type: Type) -> Type: + return current_type if typex == SelfType() else typex diff --git a/src/utils/visitor.py b/src/utils/visitor.py index 96484283..500298bc 100644 --- a/src/utils/visitor.py +++ b/src/utils/visitor.py @@ -1,80 +1,80 @@ -# The MIT License (MIT) -# -# Copyright (c) 2013 Curtis Schlak -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -import inspect - -__all__ = ['on', 'when'] - -def on(param_name): - def f(fn): - dispatcher = Dispatcher(param_name, fn) - return dispatcher - return f - - -def when(param_type): - def f(fn): - frame = inspect.currentframe().f_back - func_name = fn.func_name if 'func_name' in dir(fn) else fn.__name__ - dispatcher = frame.f_locals[func_name] - if not isinstance(dispatcher, Dispatcher): - dispatcher = dispatcher.dispatcher - dispatcher.add_target(param_type, fn) - def ff(*args, **kw): - return dispatcher(*args, **kw) - ff.dispatcher = dispatcher - return ff - return f - - -class Dispatcher(object): - def __init__(self, param_name, fn): - frame = inspect.currentframe().f_back.f_back - top_level = frame.f_locals == frame.f_globals - self.param_index = self.__argspec(fn).args.index(param_name) - self.param_name = param_name - self.targets = {} - - def __call__(self, *args, **kw): - typ = args[self.param_index].__class__ - d = self.targets.get(typ) - if d is not None: - return d(*args, **kw) - else: - issub = issubclass - t = self.targets - ks = t.keys() - ans = [t[k](*args, **kw) for k in ks if issub(typ, k)] - if len(ans) == 1: - return ans.pop() - return ans - - def add_target(self, typ, target): - self.targets[typ] = target - - @staticmethod - def __argspec(fn): - # Support for Python 3 type hints requires inspect.getfullargspec - if hasattr(inspect, 'getfullargspec'): - return inspect.getfullargspec(fn) - else: - return inspect.getargspec(fn) +# The MIT License (MIT) +# +# Copyright (c) 2013 Curtis Schlak +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +import inspect + +__all__ = ['on', 'when'] + +def on(param_name): + def f(fn): + dispatcher = Dispatcher(param_name, fn) + return dispatcher + return f + + +def when(param_type): + def f(fn): + frame = inspect.currentframe().f_back + func_name = fn.func_name if 'func_name' in dir(fn) else fn.__name__ + dispatcher = frame.f_locals[func_name] + if not isinstance(dispatcher, Dispatcher): + dispatcher = dispatcher.dispatcher + dispatcher.add_target(param_type, fn) + def ff(*args, **kw): + return dispatcher(*args, **kw) + ff.dispatcher = dispatcher + return ff + return f + + +class Dispatcher(object): + def __init__(self, param_name, fn): + frame = inspect.currentframe().f_back.f_back + top_level = frame.f_locals == frame.f_globals + self.param_index = self.__argspec(fn).args.index(param_name) + self.param_name = param_name + self.targets = {} + + def __call__(self, *args, **kw): + typ = args[self.param_index].__class__ + d = self.targets.get(typ) + if d is not None: + return d(*args, **kw) + else: + issub = issubclass + t = self.targets + ks = t.keys() + ans = [t[k](*args, **kw) for k in ks if issub(typ, k)] + if len(ans) == 1: + return ans.pop() + return ans + + def add_target(self, typ, target): + self.targets[typ] = target + + @staticmethod + def __argspec(fn): + # Support for Python 3 type hints requires inspect.getfullargspec + if hasattr(inspect, 'getfullargspec'): + return inspect.getfullargspec(fn) + else: + return inspect.getargspec(fn) diff --git a/tests/.gitignore b/tests/.gitignore index 2fc88380..7a5c8f3a 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -1,456 +1,456 @@ -# File created using '.gitignore Generator' for Visual Studio Code: https://bit.ly/vscode-gig - -# Created by https://www.gitignore.io/api/visualstudiocode,linux,latex,python -# Edit at https://www.gitignore.io/?templates=visualstudiocode,linux,latex,python - -### LaTeX ### -## Core latex/pdflatex auxiliary files: -*.aux -*.lof -*.log -*.lot -*.fls -*.out -*.toc -*.fmt -*.fot -*.cb -*.cb2 -.*.lb - -## Intermediate documents: -*.dvi -*.xdv -*-converted-to.* -# these rules might exclude image files for figures etc. -# *.ps -# *.eps -# *.pdf - -## Generated if empty string is given at "Please type another file name for output:" -.pdf - -## Bibliography auxiliary files (bibtex/biblatex/biber): -*.bbl -*.bcf -*.blg -*-blx.aux -*-blx.bib -*.run.xml - -## Build tool auxiliary files: -*.fdb_latexmk -*.synctex -*.synctex(busy) -*.synctex.gz -*.synctex.gz(busy) -*.pdfsync - -## Build tool directories for auxiliary files -# latexrun -latex.out/ - -## Auxiliary and intermediate files from other packages: -# algorithms -*.alg -*.loa - -# achemso -acs-*.bib - -# amsthm -*.thm - -# beamer -*.nav -*.pre -*.snm -*.vrb - -# changes -*.soc - -# comment -*.cut - -# cprotect -*.cpt - -# elsarticle (documentclass of Elsevier journals) -*.spl - -# endnotes -*.ent - -# fixme -*.lox - -# feynmf/feynmp -*.mf -*.mp -*.t[1-9] -*.t[1-9][0-9] -*.tfm - -#(r)(e)ledmac/(r)(e)ledpar -*.end -*.?end -*.[1-9] -*.[1-9][0-9] -*.[1-9][0-9][0-9] -*.[1-9]R -*.[1-9][0-9]R -*.[1-9][0-9][0-9]R -*.eledsec[1-9] -*.eledsec[1-9]R -*.eledsec[1-9][0-9] -*.eledsec[1-9][0-9]R -*.eledsec[1-9][0-9][0-9] -*.eledsec[1-9][0-9][0-9]R - -# glossaries -*.acn -*.acr -*.glg -*.glo -*.gls -*.glsdefs - -# uncomment this for glossaries-extra (will ignore makeindex's style files!) -# *.ist - -# gnuplottex -*-gnuplottex-* - -# gregoriotex -*.gaux -*.gtex - -# htlatex -*.4ct -*.4tc -*.idv -*.lg -*.trc -*.xref - -# hyperref -*.brf - -# knitr -*-concordance.tex -# TODO Comment the next line if you want to keep your tikz graphics files -*.tikz -*-tikzDictionary - -# listings -*.lol - -# luatexja-ruby -*.ltjruby - -# makeidx -*.idx -*.ilg -*.ind - -# minitoc -*.maf -*.mlf -*.mlt -*.mtc[0-9]* -*.slf[0-9]* -*.slt[0-9]* -*.stc[0-9]* - -# minted -_minted* -*.pyg - -# morewrites -*.mw - -# nomencl -*.nlg -*.nlo -*.nls - -# pax -*.pax - -# pdfpcnotes -*.pdfpc - -# sagetex -*.sagetex.sage -*.sagetex.py -*.sagetex.scmd - -# scrwfile -*.wrt - -# sympy -*.sout -*.sympy -sympy-plots-for-*.tex/ - -# pdfcomment -*.upa -*.upb - -# pythontex -*.pytxcode -pythontex-files-*/ - -# tcolorbox -*.listing - -# thmtools -*.loe - -# TikZ & PGF -*.dpth -*.md5 -*.auxlock - -# todonotes -*.tdo - -# vhistory -*.hst -*.ver - -# easy-todo -*.lod - -# xcolor -*.xcp - -# xmpincl -*.xmpi - -# xindy -*.xdy - -# xypic precompiled matrices -*.xyc - -# endfloat -*.ttt -*.fff - -# Latexian -TSWLatexianTemp* - -## Editors: -# WinEdt -*.bak -*.sav - -# Texpad -.texpadtmp - -# LyX -*.lyx~ - -# Kile -*.backup - -# KBibTeX -*~[0-9]* - -# auto folder when using emacs and auctex -./auto/* -*.el - -# expex forward references with \gathertags -*-tags.tex - -# standalone packages -*.sta - -### LaTeX Patch ### -# glossaries -*.glstex - -### Linux ### -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* - -### Python ### -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -<<<<<<< HEAD -pip-wheel-metadata/ -share/python-wheels/ -======= ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -<<<<<<< HEAD -.nox/ -======= ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -.hypothesis/ -.pytest_cache/ - -# Translations -*.mo -*.pot - -<<<<<<< HEAD -======= -# Django stuff: -*.log -local_settings.py -db.sqlite3 - -# Flask stuff: -instance/ -.webassets-cache - ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -<<<<<<< HEAD -# pyenv -.python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -======= -# Jupyter Notebook -.ipynb_checkpoints - -# pyenv -.python-version - ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e -# celery beat schedule file -celerybeat-schedule - -# SageMath parsed files -*.sage.py - -<<<<<<< HEAD -======= -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -<<<<<<< HEAD -# Mr Developer -.mr.developer.cfg -.project -.pydevproject - -======= ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e -# mkdocs documentation -/site - -# mypy -<<<<<<< HEAD -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -### VisualStudioCode Patch ### -# Ignore all local history of files -.history - -# End of https://www.gitignore.io/api/visualstudiocode,linux,latex,python - -# Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option) - -======= -.mypy_cache/ ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +# File created using '.gitignore Generator' for Visual Studio Code: https://bit.ly/vscode-gig + +# Created by https://www.gitignore.io/api/visualstudiocode,linux,latex,python +# Edit at https://www.gitignore.io/?templates=visualstudiocode,linux,latex,python + +### LaTeX ### +## Core latex/pdflatex auxiliary files: +*.aux +*.lof +*.log +*.lot +*.fls +*.out +*.toc +*.fmt +*.fot +*.cb +*.cb2 +.*.lb + +## Intermediate documents: +*.dvi +*.xdv +*-converted-to.* +# these rules might exclude image files for figures etc. +# *.ps +# *.eps +# *.pdf + +## Generated if empty string is given at "Please type another file name for output:" +.pdf + +## Bibliography auxiliary files (bibtex/biblatex/biber): +*.bbl +*.bcf +*.blg +*-blx.aux +*-blx.bib +*.run.xml + +## Build tool auxiliary files: +*.fdb_latexmk +*.synctex +*.synctex(busy) +*.synctex.gz +*.synctex.gz(busy) +*.pdfsync + +## Build tool directories for auxiliary files +# latexrun +latex.out/ + +## Auxiliary and intermediate files from other packages: +# algorithms +*.alg +*.loa + +# achemso +acs-*.bib + +# amsthm +*.thm + +# beamer +*.nav +*.pre +*.snm +*.vrb + +# changes +*.soc + +# comment +*.cut + +# cprotect +*.cpt + +# elsarticle (documentclass of Elsevier journals) +*.spl + +# endnotes +*.ent + +# fixme +*.lox + +# feynmf/feynmp +*.mf +*.mp +*.t[1-9] +*.t[1-9][0-9] +*.tfm + +#(r)(e)ledmac/(r)(e)ledpar +*.end +*.?end +*.[1-9] +*.[1-9][0-9] +*.[1-9][0-9][0-9] +*.[1-9]R +*.[1-9][0-9]R +*.[1-9][0-9][0-9]R +*.eledsec[1-9] +*.eledsec[1-9]R +*.eledsec[1-9][0-9] +*.eledsec[1-9][0-9]R +*.eledsec[1-9][0-9][0-9] +*.eledsec[1-9][0-9][0-9]R + +# glossaries +*.acn +*.acr +*.glg +*.glo +*.gls +*.glsdefs + +# uncomment this for glossaries-extra (will ignore makeindex's style files!) +# *.ist + +# gnuplottex +*-gnuplottex-* + +# gregoriotex +*.gaux +*.gtex + +# htlatex +*.4ct +*.4tc +*.idv +*.lg +*.trc +*.xref + +# hyperref +*.brf + +# knitr +*-concordance.tex +# TODO Comment the next line if you want to keep your tikz graphics files +*.tikz +*-tikzDictionary + +# listings +*.lol + +# luatexja-ruby +*.ltjruby + +# makeidx +*.idx +*.ilg +*.ind + +# minitoc +*.maf +*.mlf +*.mlt +*.mtc[0-9]* +*.slf[0-9]* +*.slt[0-9]* +*.stc[0-9]* + +# minted +_minted* +*.pyg + +# morewrites +*.mw + +# nomencl +*.nlg +*.nlo +*.nls + +# pax +*.pax + +# pdfpcnotes +*.pdfpc + +# sagetex +*.sagetex.sage +*.sagetex.py +*.sagetex.scmd + +# scrwfile +*.wrt + +# sympy +*.sout +*.sympy +sympy-plots-for-*.tex/ + +# pdfcomment +*.upa +*.upb + +# pythontex +*.pytxcode +pythontex-files-*/ + +# tcolorbox +*.listing + +# thmtools +*.loe + +# TikZ & PGF +*.dpth +*.md5 +*.auxlock + +# todonotes +*.tdo + +# vhistory +*.hst +*.ver + +# easy-todo +*.lod + +# xcolor +*.xcp + +# xmpincl +*.xmpi + +# xindy +*.xdy + +# xypic precompiled matrices +*.xyc + +# endfloat +*.ttt +*.fff + +# Latexian +TSWLatexianTemp* + +## Editors: +# WinEdt +*.bak +*.sav + +# Texpad +.texpadtmp + +# LyX +*.lyx~ + +# Kile +*.backup + +# KBibTeX +*~[0-9]* + +# auto folder when using emacs and auctex +./auto/* +*.el + +# expex forward references with \gathertags +*-tags.tex + +# standalone packages +*.sta + +### LaTeX Patch ### +# glossaries +*.glstex + +### Linux ### +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +<<<<<<< HEAD +pip-wheel-metadata/ +share/python-wheels/ +======= +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +<<<<<<< HEAD +.nox/ +======= +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +<<<<<<< HEAD +======= +# Django stuff: +*.log +local_settings.py +db.sqlite3 + +# Flask stuff: +instance/ +.webassets-cache + +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +<<<<<<< HEAD +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +======= +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +<<<<<<< HEAD +======= +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +<<<<<<< HEAD +# Mr Developer +.mr.developer.cfg +.project +.pydevproject + +======= +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e +# mkdocs documentation +/site + +# mypy +<<<<<<< HEAD +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history + +# End of https://www.gitignore.io/api/visualstudiocode,linux,latex,python + +# Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option) + +======= +.mypy_cache/ +>>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e diff --git a/tests/codegen/arith.cl b/tests/codegen/arith.cl index af5951cf..0d9f5dd3 100644 --- a/tests/codegen/arith.cl +++ b/tests/codegen/arith.cl @@ -1,430 +1,430 @@ -(* - * A contribution from Anne Sheets (sheets@cory) - * - * Tests the arithmetic operations and various other things - *) - -class A { - - var : Int <- 0; - - value() : Int { var }; - - set_var(num : Int) : A{ - { - var <- num; - self; - } - }; - - method1(num : Int) : A { -- same - self - }; - - method2(num1 : Int, num2 : Int) : A { -- plus - (let x : Int in - { - x <- num1 + num2; - (new B).set_var(x); - } - ) - }; - - method3(num : Int) : A { -- negate - (let x : Int in - { - x <- ~num; - (new C).set_var(x); - } - ) - }; - - method4(num1 : Int, num2 : Int) : A { -- diff - if num2 < num1 then - (let x : Int in - { - x <- num1 - num2; - (new D).set_var(x); - } - ) - else - (let x : Int in - { - x <- num2 - num1; - (new D).set_var(x); - } - ) - fi - }; - - method5(num : Int) : A { -- factorial - (let x : Int <- 1 in - { - (let y : Int <- 1 in - while y <= num loop - { - x <- x * y; - y <- y + 1; - } - pool - ); - (new E).set_var(x); - } - ) - }; - -}; - -class B inherits A { -- B is a number squared - - method5(num : Int) : A { -- square - (let x : Int in - { - x <- num * num; - (new E).set_var(x); - } - ) - }; - -}; - -class C inherits B { - - method6(num : Int) : A { -- negate - (let x : Int in - { - x <- ~num; - (new A).set_var(x); - } - ) - }; - - method5(num : Int) : A { -- cube - (let x : Int in - { - x <- num * num * num; - (new E).set_var(x); - } - ) - }; - -}; - -class D inherits B { - - method7(num : Int) : Bool { -- divisible by 3 - (let x : Int <- num in - if x < 0 then method7(~x) else - if 0 = x then true else - if 1 = x then false else - if 2 = x then false else - method7(x - 3) - fi fi fi fi - ) - }; - -}; - -class E inherits D { - - method6(num : Int) : A { -- division - (let x : Int in - { - x <- num / 8; - (new A).set_var(x); - } - ) - }; - -}; - -(* The following code is from atoi.cl in ~cs164/examples *) - -(* - The class A2I provides integer-to-string and string-to-integer -conversion routines. To use these routines, either inherit them -in the class where needed, have a dummy variable bound to -something of type A2I, or simpl write (new A2I).method(argument). -*) - - -(* - c2i Converts a 1-character string to an integer. Aborts - if the string is not "0" through "9" -*) -class A2I { - - c2i(char : String) : Int { - if char = "0" then 0 else - if char = "1" then 1 else - if char = "2" then 2 else - if char = "3" then 3 else - if char = "4" then 4 else - if char = "5" then 5 else - if char = "6" then 6 else - if char = "7" then 7 else - if char = "8" then 8 else - if char = "9" then 9 else - { abort(); 0; } (* the 0 is needed to satisfy the - typchecker *) - fi fi fi fi fi fi fi fi fi fi - }; - -(* - i2c is the inverse of c2i. -*) - i2c(i : Int) : String { - if i = 0 then "0" else - if i = 1 then "1" else - if i = 2 then "2" else - if i = 3 then "3" else - if i = 4 then "4" else - if i = 5 then "5" else - if i = 6 then "6" else - if i = 7 then "7" else - if i = 8 then "8" else - if i = 9 then "9" else - { abort(); ""; } -- the "" is needed to satisfy the typchecker - fi fi fi fi fi fi fi fi fi fi - }; - -(* - a2i converts an ASCII string into an integer. The empty string -is converted to 0. Signed and unsigned strings are handled. The -method aborts if the string does not represent an integer. Very -long strings of digits produce strange answers because of arithmetic -overflow. - -*) - a2i(s : String) : Int { - if s.length() = 0 then 0 else - if s.substr(0,1) = "-" then ~a2i_aux(s.substr(1,s.length()-1)) else - if s.substr(0,1) = "+" then a2i_aux(s.substr(1,s.length()-1)) else - a2i_aux(s) - fi fi fi - }; - -(* a2i_aux converts the usigned portion of the string. As a - programming example, this method is written iteratively. *) - - - a2i_aux(s : String) : Int { - (let int : Int <- 0 in - { - (let j : Int <- s.length() in - (let i : Int <- 0 in - while i < j loop - { - int <- int * 10 + c2i(s.substr(i,1)); - i <- i + 1; - } - pool - ) - ); - int; - } - ) - }; - -(* i2a converts an integer to a string. Positive and negative - numbers are handled correctly. *) - - i2a(i : Int) : String { - if i = 0 then "0" else - if 0 < i then i2a_aux(i) else - "-".concat(i2a_aux(i * ~1)) - fi fi - }; - -(* i2a_aux is an example using recursion. *) - - i2a_aux(i : Int) : String { - if i = 0 then "" else - (let next : Int <- i / 10 in - i2a_aux(next).concat(i2c(i - next * 10)) - ) - fi - }; - -}; - -class Main inherits IO { - - char : String; - avar : A; - a_var : A; - flag : Bool <- true; - - - menu() : String { - { - out_string("\n\tTo add a number to "); - print(avar); - out_string("...enter a:\n"); - out_string("\tTo negate "); - print(avar); - out_string("...enter b:\n"); - out_string("\tTo find the difference between "); - print(avar); - out_string("and another number...enter c:\n"); - out_string("\tTo find the factorial of "); - print(avar); - out_string("...enter d:\n"); - out_string("\tTo square "); - print(avar); - out_string("...enter e:\n"); - out_string("\tTo cube "); - print(avar); - out_string("...enter f:\n"); - out_string("\tTo find out if "); - print(avar); - out_string("is a multiple of 3...enter g:\n"); - out_string("\tTo divide "); - print(avar); - out_string("by 8...enter h:\n"); - out_string("\tTo get a new number...enter j:\n"); - out_string("\tTo quit...enter q:\n\n"); - in_string(); - } - }; - - prompt() : String { - { - out_string("\n"); - out_string("Please enter a number... "); - in_string(); - } - }; - - get_int() : Int { - { - (let z : A2I <- new A2I in - (let s : String <- prompt() in - z.a2i(s) - ) - ); - } - }; - - is_even(num : Int) : Bool { - (let x : Int <- num in - if x < 0 then is_even(~x) else - if 0 = x then true else - if 1 = x then false else - is_even(x - 2) - fi fi fi - ) - }; - - class_type(var : A) : IO { - case var of - a : A => out_string("Class type is now A\n"); - b : B => out_string("Class type is now B\n"); - c : C => out_string("Class type is now C\n"); - d : D => out_string("Class type is now D\n"); - e : E => out_string("Class type is now E\n"); - o : Object => out_string("Oooops\n"); - esac - }; - - print(var : A) : IO { - (let z : A2I <- new A2I in - { - out_string(z.i2a(var.value())); - out_string(" "); - } - ) - }; - - main() : Object { - { - avar <- (new A); - while flag loop - { - -- avar <- (new A).set_var(get_int()); - out_string("number "); - print(avar); - if is_even(avar.value()) then - out_string("is even!\n") - else - out_string("is odd!\n") - fi; - -- print(avar); -- prints out answer - class_type(avar); - char <- menu(); - if char = "a" then -- add - { - a_var <- (new A).set_var(get_int()); - avar <- (new B).method2(avar.value(), a_var.value()); - } else - if char = "b" then -- negate - case avar of - c : C => avar <- c.method6(c.value()); - a : A => avar <- a.method3(a.value()); - o : Object => { - out_string("Oooops\n"); - abort(); 0; - }; - esac else - if char = "c" then -- diff - { - a_var <- (new A).set_var(get_int()); - avar <- (new D).method4(avar.value(), a_var.value()); - } else - if char = "d" then avar <- (new C)@A.method5(avar.value()) else - -- factorial - if char = "e" then avar <- (new C)@B.method5(avar.value()) else - -- square - if char = "f" then avar <- (new C)@C.method5(avar.value()) else - -- cube - if char = "g" then -- multiple of 3? - if ((new D).method7(avar.value())) - then -- avar <- (new A).method1(avar.value()) - { - out_string("number "); - print(avar); - out_string("is divisible by 3.\n"); - } - else -- avar <- (new A).set_var(0) - { - out_string("number "); - print(avar); - out_string("is not divisible by 3.\n"); - } - fi else - if char = "h" then - (let x : A in - { - x <- (new E).method6(avar.value()); - (let r : Int <- (avar.value() - (x.value() * 8)) in - { - out_string("number "); - print(avar); - out_string("is equal to "); - print(x); - out_string("times 8 with a remainder of "); - (let a : A2I <- new A2I in - { - out_string(a.i2a(r)); - out_string("\n"); - } - ); -- end let a: - } - ); -- end let r: - avar <- x; - } - ) -- end let x: - else - if char = "j" then avar <- (new A) - else - if char = "q" then flag <- false - else - avar <- (new A).method1(avar.value()) -- divide/8 - fi fi fi fi fi fi fi fi fi fi; - } - pool; - } - }; - -}; - +(* + * A contribution from Anne Sheets (sheets@cory) + * + * Tests the arithmetic operations and various other things + *) + +class A { + + var : Int <- 0; + + value() : Int { var }; + + set_var(num : Int) : A{ + { + var <- num; + self; + } + }; + + method1(num : Int) : A { -- same + self + }; + + method2(num1 : Int, num2 : Int) : A { -- plus + (let x : Int in + { + x <- num1 + num2; + (new B).set_var(x); + } + ) + }; + + method3(num : Int) : A { -- negate + (let x : Int in + { + x <- ~num; + (new C).set_var(x); + } + ) + }; + + method4(num1 : Int, num2 : Int) : A { -- diff + if num2 < num1 then + (let x : Int in + { + x <- num1 - num2; + (new D).set_var(x); + } + ) + else + (let x : Int in + { + x <- num2 - num1; + (new D).set_var(x); + } + ) + fi + }; + + method5(num : Int) : A { -- factorial + (let x : Int <- 1 in + { + (let y : Int <- 1 in + while y <= num loop + { + x <- x * y; + y <- y + 1; + } + pool + ); + (new E).set_var(x); + } + ) + }; + +}; + +class B inherits A { -- B is a number squared + + method5(num : Int) : A { -- square + (let x : Int in + { + x <- num * num; + (new E).set_var(x); + } + ) + }; + +}; + +class C inherits B { + + method6(num : Int) : A { -- negate + (let x : Int in + { + x <- ~num; + (new A).set_var(x); + } + ) + }; + + method5(num : Int) : A { -- cube + (let x : Int in + { + x <- num * num * num; + (new E).set_var(x); + } + ) + }; + +}; + +class D inherits B { + + method7(num : Int) : Bool { -- divisible by 3 + (let x : Int <- num in + if x < 0 then method7(~x) else + if 0 = x then true else + if 1 = x then false else + if 2 = x then false else + method7(x - 3) + fi fi fi fi + ) + }; + +}; + +class E inherits D { + + method6(num : Int) : A { -- division + (let x : Int in + { + x <- num / 8; + (new A).set_var(x); + } + ) + }; + +}; + +(* The following code is from atoi.cl in ~cs164/examples *) + +(* + The class A2I provides integer-to-string and string-to-integer +conversion routines. To use these routines, either inherit them +in the class where needed, have a dummy variable bound to +something of type A2I, or simpl write (new A2I).method(argument). +*) + + +(* + c2i Converts a 1-character string to an integer. Aborts + if the string is not "0" through "9" +*) +class A2I { + + c2i(char : String) : Int { + if char = "0" then 0 else + if char = "1" then 1 else + if char = "2" then 2 else + if char = "3" then 3 else + if char = "4" then 4 else + if char = "5" then 5 else + if char = "6" then 6 else + if char = "7" then 7 else + if char = "8" then 8 else + if char = "9" then 9 else + { abort(); 0; } (* the 0 is needed to satisfy the + typchecker *) + fi fi fi fi fi fi fi fi fi fi + }; + +(* + i2c is the inverse of c2i. +*) + i2c(i : Int) : String { + if i = 0 then "0" else + if i = 1 then "1" else + if i = 2 then "2" else + if i = 3 then "3" else + if i = 4 then "4" else + if i = 5 then "5" else + if i = 6 then "6" else + if i = 7 then "7" else + if i = 8 then "8" else + if i = 9 then "9" else + { abort(); ""; } -- the "" is needed to satisfy the typchecker + fi fi fi fi fi fi fi fi fi fi + }; + +(* + a2i converts an ASCII string into an integer. The empty string +is converted to 0. Signed and unsigned strings are handled. The +method aborts if the string does not represent an integer. Very +long strings of digits produce strange answers because of arithmetic +overflow. + +*) + a2i(s : String) : Int { + if s.length() = 0 then 0 else + if s.substr(0,1) = "-" then ~a2i_aux(s.substr(1,s.length()-1)) else + if s.substr(0,1) = "+" then a2i_aux(s.substr(1,s.length()-1)) else + a2i_aux(s) + fi fi fi + }; + +(* a2i_aux converts the usigned portion of the string. As a + programming example, this method is written iteratively. *) + + + a2i_aux(s : String) : Int { + (let int : Int <- 0 in + { + (let j : Int <- s.length() in + (let i : Int <- 0 in + while i < j loop + { + int <- int * 10 + c2i(s.substr(i,1)); + i <- i + 1; + } + pool + ) + ); + int; + } + ) + }; + +(* i2a converts an integer to a string. Positive and negative + numbers are handled correctly. *) + + i2a(i : Int) : String { + if i = 0 then "0" else + if 0 < i then i2a_aux(i) else + "-".concat(i2a_aux(i * ~1)) + fi fi + }; + +(* i2a_aux is an example using recursion. *) + + i2a_aux(i : Int) : String { + if i = 0 then "" else + (let next : Int <- i / 10 in + i2a_aux(next).concat(i2c(i - next * 10)) + ) + fi + }; + +}; + +class Main inherits IO { + + char : String; + avar : A; + a_var : A; + flag : Bool <- true; + + + menu() : String { + { + out_string("\n\tTo add a number to "); + print(avar); + out_string("...enter a:\n"); + out_string("\tTo negate "); + print(avar); + out_string("...enter b:\n"); + out_string("\tTo find the difference between "); + print(avar); + out_string("and another number...enter c:\n"); + out_string("\tTo find the factorial of "); + print(avar); + out_string("...enter d:\n"); + out_string("\tTo square "); + print(avar); + out_string("...enter e:\n"); + out_string("\tTo cube "); + print(avar); + out_string("...enter f:\n"); + out_string("\tTo find out if "); + print(avar); + out_string("is a multiple of 3...enter g:\n"); + out_string("\tTo divide "); + print(avar); + out_string("by 8...enter h:\n"); + out_string("\tTo get a new number...enter j:\n"); + out_string("\tTo quit...enter q:\n\n"); + in_string(); + } + }; + + prompt() : String { + { + out_string("\n"); + out_string("Please enter a number... "); + in_string(); + } + }; + + get_int() : Int { + { + (let z : A2I <- new A2I in + (let s : String <- prompt() in + z.a2i(s) + ) + ); + } + }; + + is_even(num : Int) : Bool { + (let x : Int <- num in + if x < 0 then is_even(~x) else + if 0 = x then true else + if 1 = x then false else + is_even(x - 2) + fi fi fi + ) + }; + + class_type(var : A) : IO { + case var of + a : A => out_string("Class type is now A\n"); + b : B => out_string("Class type is now B\n"); + c : C => out_string("Class type is now C\n"); + d : D => out_string("Class type is now D\n"); + e : E => out_string("Class type is now E\n"); + o : Object => out_string("Oooops\n"); + esac + }; + + print(var : A) : IO { + (let z : A2I <- new A2I in + { + out_string(z.i2a(var.value())); + out_string(" "); + } + ) + }; + + main() : Object { + { + avar <- (new A); + while flag loop + { + -- avar <- (new A).set_var(get_int()); + out_string("number "); + print(avar); + if is_even(avar.value()) then + out_string("is even!\n") + else + out_string("is odd!\n") + fi; + -- print(avar); -- prints out answer + class_type(avar); + char <- menu(); + if char = "a" then -- add + { + a_var <- (new A).set_var(get_int()); + avar <- (new B).method2(avar.value(), a_var.value()); + } else + if char = "b" then -- negate + case avar of + c : C => avar <- c.method6(c.value()); + a : A => avar <- a.method3(a.value()); + o : Object => { + out_string("Oooops\n"); + abort(); 0; + }; + esac else + if char = "c" then -- diff + { + a_var <- (new A).set_var(get_int()); + avar <- (new D).method4(avar.value(), a_var.value()); + } else + if char = "d" then avar <- (new C)@A.method5(avar.value()) else + -- factorial + if char = "e" then avar <- (new C)@B.method5(avar.value()) else + -- square + if char = "f" then avar <- (new C)@C.method5(avar.value()) else + -- cube + if char = "g" then -- multiple of 3? + if ((new D).method7(avar.value())) + then -- avar <- (new A).method1(avar.value()) + { + out_string("number "); + print(avar); + out_string("is divisible by 3.\n"); + } + else -- avar <- (new A).set_var(0) + { + out_string("number "); + print(avar); + out_string("is not divisible by 3.\n"); + } + fi else + if char = "h" then + (let x : A in + { + x <- (new E).method6(avar.value()); + (let r : Int <- (avar.value() - (x.value() * 8)) in + { + out_string("number "); + print(avar); + out_string("is equal to "); + print(x); + out_string("times 8 with a remainder of "); + (let a : A2I <- new A2I in + { + out_string(a.i2a(r)); + out_string("\n"); + } + ); -- end let a: + } + ); -- end let r: + avar <- x; + } + ) -- end let x: + else + if char = "j" then avar <- (new A) + else + if char = "q" then flag <- false + else + avar <- (new A).method1(avar.value()) -- divide/8 + fi fi fi fi fi fi fi fi fi fi; + } + pool; + } + }; + +}; + diff --git a/tests/codegen/atoi.cl b/tests/codegen/atoi.cl index f4125a2f..fd8b2ea4 100644 --- a/tests/codegen/atoi.cl +++ b/tests/codegen/atoi.cl @@ -1,121 +1,121 @@ -(* - The class A2I provides integer-to-string and string-to-integer -conversion routines. To use these routines, either inherit them -in the class where needed, have a dummy variable bound to -something of type A2I, or simpl write (new A2I).method(argument). -*) - - -(* - c2i Converts a 1-character string to an integer. Aborts - if the string is not "0" through "9" -*) -class A2I { - - c2i(char : String) : Int { - if char = "0" then 0 else - if char = "1" then 1 else - if char = "2" then 2 else - if char = "3" then 3 else - if char = "4" then 4 else - if char = "5" then 5 else - if char = "6" then 6 else - if char = "7" then 7 else - if char = "8" then 8 else - if char = "9" then 9 else - { abort(); 0; } -- the 0 is needed to satisfy the typchecker - fi fi fi fi fi fi fi fi fi fi - }; - -(* - i2c is the inverse of c2i. -*) - i2c(i : Int) : String { - if i = 0 then "0" else - if i = 1 then "1" else - if i = 2 then "2" else - if i = 3 then "3" else - if i = 4 then "4" else - if i = 5 then "5" else - if i = 6 then "6" else - if i = 7 then "7" else - if i = 8 then "8" else - if i = 9 then "9" else - { abort(); ""; } -- the "" is needed to satisfy the typchecker - fi fi fi fi fi fi fi fi fi fi - }; - -(* - a2i converts an ASCII string into an integer. The empty string -is converted to 0. Signed and unsigned strings are handled. The -method aborts if the string does not represent an integer. Very -long strings of digits produce strange answers because of arithmetic -overflow. - -*) - a2i(s : String) : Int { - if s.length() = 0 then 0 else - if s.substr(0,1) = "-" then ~a2i_aux(s.substr(1,s.length()-1)) else - if s.substr(0,1) = "+" then a2i_aux(s.substr(1,s.length()-1)) else - a2i_aux(s) - fi fi fi - }; - -(* - a2i_aux converts the usigned portion of the string. As a programming -example, this method is written iteratively. -*) - a2i_aux(s : String) : Int { - (let int : Int <- 0 in - { - (let j : Int <- s.length() in - (let i : Int <- 0 in - while i < j loop - { - int <- int * 10 + c2i(s.substr(i,1)); - i <- i + 1; - } - pool - ) - ); - int; - } - ) - }; - -(* - i2a converts an integer to a string. Positive and negative -numbers are handled correctly. -*) - i2a(i : Int) : String { - if i = 0 then "0" else - if 0 < i then i2a_aux(i) else - "-".concat(i2a_aux(i * ~1)) - fi fi - }; - -(* - i2a_aux is an example using recursion. -*) - i2a_aux(i : Int) : String { - if i = 0 then "" else - (let next : Int <- i / 10 in - i2a_aux(next).concat(i2c(i - next * 10)) - ) - fi - }; - -}; - -class Main inherits IO { - main () : Object { - let a : Int <- (new A2I).a2i("678987"), - b : String <- (new A2I).i2a(678987) in - { - out_int(a) ; - out_string(" == ") ; - out_string(b) ; - out_string("\n"); - } - } ; -} ; +(* + The class A2I provides integer-to-string and string-to-integer +conversion routines. To use these routines, either inherit them +in the class where needed, have a dummy variable bound to +something of type A2I, or simpl write (new A2I).method(argument). +*) + + +(* + c2i Converts a 1-character string to an integer. Aborts + if the string is not "0" through "9" +*) +class A2I { + + c2i(char : String) : Int { + if char = "0" then 0 else + if char = "1" then 1 else + if char = "2" then 2 else + if char = "3" then 3 else + if char = "4" then 4 else + if char = "5" then 5 else + if char = "6" then 6 else + if char = "7" then 7 else + if char = "8" then 8 else + if char = "9" then 9 else + { abort(); 0; } -- the 0 is needed to satisfy the typchecker + fi fi fi fi fi fi fi fi fi fi + }; + +(* + i2c is the inverse of c2i. +*) + i2c(i : Int) : String { + if i = 0 then "0" else + if i = 1 then "1" else + if i = 2 then "2" else + if i = 3 then "3" else + if i = 4 then "4" else + if i = 5 then "5" else + if i = 6 then "6" else + if i = 7 then "7" else + if i = 8 then "8" else + if i = 9 then "9" else + { abort(); ""; } -- the "" is needed to satisfy the typchecker + fi fi fi fi fi fi fi fi fi fi + }; + +(* + a2i converts an ASCII string into an integer. The empty string +is converted to 0. Signed and unsigned strings are handled. The +method aborts if the string does not represent an integer. Very +long strings of digits produce strange answers because of arithmetic +overflow. + +*) + a2i(s : String) : Int { + if s.length() = 0 then 0 else + if s.substr(0,1) = "-" then ~a2i_aux(s.substr(1,s.length()-1)) else + if s.substr(0,1) = "+" then a2i_aux(s.substr(1,s.length()-1)) else + a2i_aux(s) + fi fi fi + }; + +(* + a2i_aux converts the usigned portion of the string. As a programming +example, this method is written iteratively. +*) + a2i_aux(s : String) : Int { + (let int : Int <- 0 in + { + (let j : Int <- s.length() in + (let i : Int <- 0 in + while i < j loop + { + int <- int * 10 + c2i(s.substr(i,1)); + i <- i + 1; + } + pool + ) + ); + int; + } + ) + }; + +(* + i2a converts an integer to a string. Positive and negative +numbers are handled correctly. +*) + i2a(i : Int) : String { + if i = 0 then "0" else + if 0 < i then i2a_aux(i) else + "-".concat(i2a_aux(i * ~1)) + fi fi + }; + +(* + i2a_aux is an example using recursion. +*) + i2a_aux(i : Int) : String { + if i = 0 then "" else + (let next : Int <- i / 10 in + i2a_aux(next).concat(i2c(i - next * 10)) + ) + fi + }; + +}; + +class Main inherits IO { + main () : Object { + let a : Int <- (new A2I).a2i("678987"), + b : String <- (new A2I).i2a(678987) in + { + out_int(a) ; + out_string(" == ") ; + out_string(b) ; + out_string("\n"); + } + } ; +} ; diff --git a/tests/codegen/atoi2.cl b/tests/codegen/atoi2.cl index 47e9d0fa..577aa29f 100644 --- a/tests/codegen/atoi2.cl +++ b/tests/codegen/atoi2.cl @@ -1,92 +1,92 @@ -class JustThere { -- class can have no features. -}; - -class A2I { - - c2i(char : String) : Int { - if char = "0" then 0 else - if char = "1" then 1 else - if char = "2" then 2 else - if char = "3" then 3 else - if char = "4" then 4 else - if char = "5" then 5 else - if char = "6" then 6 else - if char = "7" then 7 else - if char = "8" then 8 else - if char = "9" then 9 else - { abort(); 0; } -- Here the formal list is optional. - fi fi fi fi fi fi fi fi fi fi - }; - - - i2c(i : Int) : String { - if i = 0 then "0" else - if i = 1 then "1" else - if i = 2 then "2" else - if i = 3 then "3" else - if i = 4 then "4" else - if i = 5 then "5" else - if i = 6 then "6" else - if i = 7 then "7" else - if i = 8 then "8" else - if i = 9 then "9" else - { abort(); ""; } -- demonstrates an expression block - fi fi fi fi fi fi fi fi fi fi - }; - - a2i(s : String) : Int { - if s.length() = 0 then 0 else - if s.substr(0,1) = "-" then ~a2i_aux(s.substr(1,s.length()-1)) else - if s.substr(0,1) = "+" then a2i_aux(s.substr(1,s.length()-1)) else - a2i_aux(s) - fi fi fi - }; - - a2i_aux(s : String) : Int { - (let int : Int <- 0 in - { - (let j : Int <- s.length() in - (let i : Int <- 0 in - while i < j loop - { - int <- int * 10 + c2i(s.substr(i,1)); -- demonstrates dispatch - i <- i + 1; - } - pool - ) - ); - int; - } - ) - }; - - i2a(i : Int) : String { - if i = 0 then "0" else - if 0 < i then i2a_aux(i) else - "-".concat(i2a_aux(i * ~1)) - fi fi - }; - - - i2a_aux(i : Int) : String { - if i = 0 then "" else - (let next : Int <- i / 10 in - i2a_aux(next).concat(i2c(i - next * 10)) - ) - fi - }; - -}; - -class Main inherits IO { - main () : Object { - let a : Int <- (new A2I).a2i("678987"), - b : String <- (new A2I).i2a(678987) in -- the let expression. Translated to let a: ... in let b: ... in expr. - { - out_int(a) ; - out_string(" == ") ; - out_string(b) ; - out_string("\n"); - } - } ; -} ; +class JustThere { -- class can have no features. +}; + +class A2I { + + c2i(char : String) : Int { + if char = "0" then 0 else + if char = "1" then 1 else + if char = "2" then 2 else + if char = "3" then 3 else + if char = "4" then 4 else + if char = "5" then 5 else + if char = "6" then 6 else + if char = "7" then 7 else + if char = "8" then 8 else + if char = "9" then 9 else + { abort(); 0; } -- Here the formal list is optional. + fi fi fi fi fi fi fi fi fi fi + }; + + + i2c(i : Int) : String { + if i = 0 then "0" else + if i = 1 then "1" else + if i = 2 then "2" else + if i = 3 then "3" else + if i = 4 then "4" else + if i = 5 then "5" else + if i = 6 then "6" else + if i = 7 then "7" else + if i = 8 then "8" else + if i = 9 then "9" else + { abort(); ""; } -- demonstrates an expression block + fi fi fi fi fi fi fi fi fi fi + }; + + a2i(s : String) : Int { + if s.length() = 0 then 0 else + if s.substr(0,1) = "-" then ~a2i_aux(s.substr(1,s.length()-1)) else + if s.substr(0,1) = "+" then a2i_aux(s.substr(1,s.length()-1)) else + a2i_aux(s) + fi fi fi + }; + + a2i_aux(s : String) : Int { + (let int : Int <- 0 in + { + (let j : Int <- s.length() in + (let i : Int <- 0 in + while i < j loop + { + int <- int * 10 + c2i(s.substr(i,1)); -- demonstrates dispatch + i <- i + 1; + } + pool + ) + ); + int; + } + ) + }; + + i2a(i : Int) : String { + if i = 0 then "0" else + if 0 < i then i2a_aux(i) else + "-".concat(i2a_aux(i * ~1)) + fi fi + }; + + + i2a_aux(i : Int) : String { + if i = 0 then "" else + (let next : Int <- i / 10 in + i2a_aux(next).concat(i2c(i - next * 10)) + ) + fi + }; + +}; + +class Main inherits IO { + main () : Object { + let a : Int <- (new A2I).a2i("678987"), + b : String <- (new A2I).i2a(678987) in -- the let expression. Translated to let a: ... in let b: ... in expr. + { + out_int(a) ; + out_string(" == ") ; + out_string(b) ; + out_string("\n"); + } + } ; +} ; diff --git a/tests/codegen/book_list.cl b/tests/codegen/book_list.cl index 025ea169..d39f86bb 100644 --- a/tests/codegen/book_list.cl +++ b/tests/codegen/book_list.cl @@ -1,132 +1,132 @@ --- example of static and dynamic type differing for a dispatch - -Class Book inherits IO { - title : String; - author : String; - - initBook(title_p : String, author_p : String) : Book { - { - title <- title_p; - author <- author_p; - self; - } - }; - - print() : Book { - { - out_string("title: ").out_string(title).out_string("\n"); - out_string("author: ").out_string(author).out_string("\n"); - self; - } - }; -}; - -Class Article inherits Book { - per_title : String; - - initArticle(title_p : String, author_p : String, - per_title_p : String) : Article { - { - initBook(title_p, author_p); - per_title <- per_title_p; - self; - } - }; - - print() : Book { - { - self@Book.print(); - out_string("periodical: ").out_string(per_title).out_string("\n"); - self; - } - }; -}; - -Class BookList inherits IO { - (* Since abort "returns" type Object, we have to add - an expression of type Bool here to satisfy the typechecker. - This code is unreachable, since abort() halts the program. - *) - isNil() : Bool { { abort(); true; } }; - - cons(hd : Book) : Cons { - (let new_cell : Cons <- new Cons in - new_cell.init(hd,self) - ) - }; - - (* Since abort "returns" type Object, we have to add - an expression of type Book here to satisfy the typechecker. - This code is unreachable, since abort() halts the program. - *) - car() : Book { { abort(); new Book; } }; - - (* Since abort "returns" type Object, we have to add - an expression of type BookList here to satisfy the typechecker. - This code is unreachable, since abort() halts the program. - *) - cdr() : BookList { { abort(); new BookList; } }; - - print_list() : Object { abort() }; -}; - -Class Cons inherits BookList { - xcar : Book; -- We keep the car and cdr in attributes. - xcdr : BookList; -- Because methods and features must have different names, - -- we use xcar and xcdr for the attributes and reserve - -- car and cdr for the features. - - isNil() : Bool { false }; - - init(hd : Book, tl : BookList) : Cons { - { - xcar <- hd; - xcdr <- tl; - self; - } - }; - - car() : Book { xcar }; - - cdr() : BookList { xcdr }; - - print_list() : Object { - { - case xcar.print() of - dummy : Book => out_string("- dynamic type was Book -\n"); - dummy : Article => out_string("- dynamic type was Article -\n"); - esac; - xcdr.print_list(); - } - }; -}; - -Class Nil inherits BookList { - isNil() : Bool { true }; - - print_list() : Object { true }; -}; - - -Class Main { - - books : BookList; - - main() : Object { - (let a_book : Book <- - (new Book).initBook("Compilers, Principles, Techniques, and Tools", - "Aho, Sethi, and Ullman") - in - (let an_article : Article <- - (new Article).initArticle("The Top 100 CD_ROMs", - "Ulanoff", - "PC Magazine") - in - { - books <- (new Nil).cons(a_book).cons(an_article); - books.print_list(); - } - ) -- end let an_article - ) -- end let a_book - }; -}; +-- example of static and dynamic type differing for a dispatch + +Class Book inherits IO { + title : String; + author : String; + + initBook(title_p : String, author_p : String) : Book { + { + title <- title_p; + author <- author_p; + self; + } + }; + + print() : Book { + { + out_string("title: ").out_string(title).out_string("\n"); + out_string("author: ").out_string(author).out_string("\n"); + self; + } + }; +}; + +Class Article inherits Book { + per_title : String; + + initArticle(title_p : String, author_p : String, + per_title_p : String) : Article { + { + initBook(title_p, author_p); + per_title <- per_title_p; + self; + } + }; + + print() : Book { + { + self@Book.print(); + out_string("periodical: ").out_string(per_title).out_string("\n"); + self; + } + }; +}; + +Class BookList inherits IO { + (* Since abort "returns" type Object, we have to add + an expression of type Bool here to satisfy the typechecker. + This code is unreachable, since abort() halts the program. + *) + isNil() : Bool { { abort(); true; } }; + + cons(hd : Book) : Cons { + (let new_cell : Cons <- new Cons in + new_cell.init(hd,self) + ) + }; + + (* Since abort "returns" type Object, we have to add + an expression of type Book here to satisfy the typechecker. + This code is unreachable, since abort() halts the program. + *) + car() : Book { { abort(); new Book; } }; + + (* Since abort "returns" type Object, we have to add + an expression of type BookList here to satisfy the typechecker. + This code is unreachable, since abort() halts the program. + *) + cdr() : BookList { { abort(); new BookList; } }; + + print_list() : Object { abort() }; +}; + +Class Cons inherits BookList { + xcar : Book; -- We keep the car and cdr in attributes. + xcdr : BookList; -- Because methods and features must have different names, + -- we use xcar and xcdr for the attributes and reserve + -- car and cdr for the features. + + isNil() : Bool { false }; + + init(hd : Book, tl : BookList) : Cons { + { + xcar <- hd; + xcdr <- tl; + self; + } + }; + + car() : Book { xcar }; + + cdr() : BookList { xcdr }; + + print_list() : Object { + { + case xcar.print() of + dummy : Book => out_string("- dynamic type was Book -\n"); + dummy : Article => out_string("- dynamic type was Article -\n"); + esac; + xcdr.print_list(); + } + }; +}; + +Class Nil inherits BookList { + isNil() : Bool { true }; + + print_list() : Object { true }; +}; + + +Class Main { + + books : BookList; + + main() : Object { + (let a_book : Book <- + (new Book).initBook("Compilers, Principles, Techniques, and Tools", + "Aho, Sethi, and Ullman") + in + (let an_article : Article <- + (new Article).initArticle("The Top 100 CD_ROMs", + "Ulanoff", + "PC Magazine") + in + { + books <- (new Nil).cons(a_book).cons(an_article); + books.print_list(); + } + ) -- end let an_article + ) -- end let a_book + }; +}; diff --git a/tests/codegen/cells.cl b/tests/codegen/cells.cl index 9fd6741b..bcd89149 100644 --- a/tests/codegen/cells.cl +++ b/tests/codegen/cells.cl @@ -1,97 +1,97 @@ -(* models one-dimensional cellular automaton on a circle of finite radius - arrays are faked as Strings, - X's respresent live cells, dots represent dead cells, - no error checking is done *) -class CellularAutomaton inherits IO { - population_map : String; - - init(map : String) : CellularAutomaton { - { - population_map <- map; - self; - } - }; - - print() : CellularAutomaton { - { - out_string(population_map.concat("\n")); - self; - } - }; - - num_cells() : Int { - population_map.length() - }; - - cell(position : Int) : String { - population_map.substr(position, 1) - }; - - cell_left_neighbor(position : Int) : String { - if position = 0 then - cell(num_cells() - 1) - else - cell(position - 1) - fi - }; - - cell_right_neighbor(position : Int) : String { - if position = num_cells() - 1 then - cell(0) - else - cell(position + 1) - fi - }; - - (* a cell will live if exactly 1 of itself and it's immediate - neighbors are alive *) - cell_at_next_evolution(position : Int) : String { - if (if cell(position) = "X" then 1 else 0 fi - + if cell_left_neighbor(position) = "X" then 1 else 0 fi - + if cell_right_neighbor(position) = "X" then 1 else 0 fi - = 1) - then - "X" - else - "." - fi - }; - - evolve() : CellularAutomaton { - (let position : Int in - (let num : Int <- num_cells() in - (let temp : String in - { - while position < num loop - { - temp <- temp.concat(cell_at_next_evolution(position)); - position <- position + 1; - } - pool; - population_map <- temp; - self; - } - ) ) ) - }; -}; - -class Main { - cells : CellularAutomaton; - - main() : Main { - { - cells <- (new CellularAutomaton).init(" X "); - cells.print(); - (let countdown : Int <- 20 in - while 0 < countdown loop - { - cells.evolve(); - cells.print(); - countdown <- countdown - 1; - } - pool - ); - self; - } - }; -}; +(* models one-dimensional cellular automaton on a circle of finite radius + arrays are faked as Strings, + X's respresent live cells, dots represent dead cells, + no error checking is done *) +class CellularAutomaton inherits IO { + population_map : String; + + init(map : String) : CellularAutomaton { + { + population_map <- map; + self; + } + }; + + print() : CellularAutomaton { + { + out_string(population_map.concat("\n")); + self; + } + }; + + num_cells() : Int { + population_map.length() + }; + + cell(position : Int) : String { + population_map.substr(position, 1) + }; + + cell_left_neighbor(position : Int) : String { + if position = 0 then + cell(num_cells() - 1) + else + cell(position - 1) + fi + }; + + cell_right_neighbor(position : Int) : String { + if position = num_cells() - 1 then + cell(0) + else + cell(position + 1) + fi + }; + + (* a cell will live if exactly 1 of itself and it's immediate + neighbors are alive *) + cell_at_next_evolution(position : Int) : String { + if (if cell(position) = "X" then 1 else 0 fi + + if cell_left_neighbor(position) = "X" then 1 else 0 fi + + if cell_right_neighbor(position) = "X" then 1 else 0 fi + = 1) + then + "X" + else + "." + fi + }; + + evolve() : CellularAutomaton { + (let position : Int in + (let num : Int <- num_cells() in + (let temp : String in + { + while position < num loop + { + temp <- temp.concat(cell_at_next_evolution(position)); + position <- position + 1; + } + pool; + population_map <- temp; + self; + } + ) ) ) + }; +}; + +class Main { + cells : CellularAutomaton; + + main() : Main { + { + cells <- (new CellularAutomaton).init(" X "); + cells.print(); + (let countdown : Int <- 20 in + while 0 < countdown loop + { + cells.evolve(); + cells.print(); + countdown <- countdown - 1; + } + pool + ); + self; + } + }; +}; diff --git a/tests/codegen/complex.cl b/tests/codegen/complex.cl index 0b7aa44e..9edb6151 100644 --- a/tests/codegen/complex.cl +++ b/tests/codegen/complex.cl @@ -1,52 +1,52 @@ -class Main inherits IO { - main() : IO { - (let c : Complex <- (new Complex).init(1, 1) in - if c.reflect_X().reflect_Y() = c.reflect_0() - then out_string("=)\n") - else out_string("=(\n") - fi - ) - }; -}; - -class Complex inherits IO { - x : Int; - y : Int; - - init(a : Int, b : Int) : Complex { - { - x = a; - y = b; - self; - } - }; - - print() : Object { - if y = 0 - then out_int(x) - else out_int(x).out_string("+").out_int(y).out_string("I") - fi - }; - - reflect_0() : Complex { - { - x = ~x; - y = ~y; - self; - } - }; - - reflect_X() : Complex { - { - y = ~y; - self; - } - }; - - reflect_Y() : Complex { - { - x = ~x; - self; - } - }; -}; +class Main inherits IO { + main() : IO { + (let c : Complex <- (new Complex).init(1, 1) in + if c.reflect_X().reflect_Y() = c.reflect_0() + then out_string("=)\n") + else out_string("=(\n") + fi + ) + }; +}; + +class Complex inherits IO { + x : Int; + y : Int; + + init(a : Int, b : Int) : Complex { + { + x = a; + y = b; + self; + } + }; + + print() : Object { + if y = 0 + then out_int(x) + else out_int(x).out_string("+").out_int(y).out_string("I") + fi + }; + + reflect_0() : Complex { + { + x = ~x; + y = ~y; + self; + } + }; + + reflect_X() : Complex { + { + y = ~y; + self; + } + }; + + reflect_Y() : Complex { + { + x = ~x; + self; + } + }; +}; diff --git a/tests/codegen/fib.cl b/tests/codegen/fib.cl index 08ceaede..ced8cee4 100644 --- a/tests/codegen/fib.cl +++ b/tests/codegen/fib.cl @@ -1,29 +1,29 @@ -class Main inherits IO { - -- the class has features. Only methods in this case. - main(): Object { - { - out_string("Enter n to find nth fibonacci number!\n"); - out_int(fib(in_int())); - out_string("\n"); - } - }; - - fib(i : Int) : Int { -- list of formals. And the return type of the method. - let a : Int <- 1, - b : Int <- 0, - c : Int <- 0 - in - { - while (not (i = 0)) loop -- expressions are nested. - { - c <- a + b; - i <- i - 1; - b <- a; - a <- c; - } - pool; - c; - } - }; - -}; +class Main inherits IO { + -- the class has features. Only methods in this case. + main(): Object { + { + out_string("Enter n to find nth fibonacci number!\n"); + out_int(fib(in_int())); + out_string("\n"); + } + }; + + fib(i : Int) : Int { -- list of formals. And the return type of the method. + let a : Int <- 1, + b : Int <- 0, + c : Int <- 0 + in + { + while (not (i = 0)) loop -- expressions are nested. + { + c <- a + b; + i <- i - 1; + b <- a; + a <- c; + } + pool; + c; + } + }; + +}; diff --git a/tests/codegen/graph.cl b/tests/codegen/graph.cl index 8e511358..59e29bbf 100644 --- a/tests/codegen/graph.cl +++ b/tests/codegen/graph.cl @@ -1,381 +1,381 @@ -(* - * Cool program reading descriptions of weighted directed graphs - * from stdin. It builds up a graph objects with a list of vertices - * and a list of edges. Every vertice has a list of outgoing edges. - * - * INPUT FORMAT - * Every line has the form vertice successor* - * Where vertice is an int, and successor is vertice,weight - * - * An empty line or EOF terminates the input. - * - * The list of vertices and the edge list is printed out by the Main - * class. - * - * TEST - * Once compiled, the file g1.graph can be fed to the program. - * The output should look like this: - -nautilus.CS.Berkeley.EDU 53# spim -file graph.s (new Bar); - n : Foo => (new Razz); - n : Bar => n; - esac; - - b : Int <- a.doh() + g.doh() + doh() + printh(); - - doh() : Int { (let i : Int <- h in { h <- h + 2; i; } ) }; - -}; - -class Bar inherits Razz { - - c : Int <- doh(); - - d : Object <- printh(); -}; - - -class Razz inherits Foo { - - e : Bar <- case self of - n : Razz => (new Bar); - n : Bar => n; - esac; - - f : Int <- a@Bazz.doh() + g.doh() + e.doh() + doh() + printh(); - -}; - -class Bazz inherits IO { - - h : Int <- 1; - - g : Foo <- case self of - n : Bazz => (new Foo); - n : Razz => (new Bar); - n : Foo => (new Razz); - n : Bar => n; - esac; - - i : Object <- printh(); - - printh() : Int { { out_int(h); 0; } }; - - doh() : Int { (let i: Int <- h in { h <- h + 1; i; } ) }; -}; - -(* scary . . . *) -class Main { - a : Bazz <- new Bazz; - b : Foo <- new Foo; - c : Razz <- new Razz; - d : Bar <- new Bar; - - main(): String { "do nothing" }; - -}; - - - - - +(* hairy . . .*) + +class Foo inherits Bazz { + a : Razz <- case self of + n : Razz => (new Bar); + n : Foo => (new Razz); + n : Bar => n; + esac; + + b : Int <- a.doh() + g.doh() + doh() + printh(); + + doh() : Int { (let i : Int <- h in { h <- h + 2; i; } ) }; + +}; + +class Bar inherits Razz { + + c : Int <- doh(); + + d : Object <- printh(); +}; + + +class Razz inherits Foo { + + e : Bar <- case self of + n : Razz => (new Bar); + n : Bar => n; + esac; + + f : Int <- a@Bazz.doh() + g.doh() + e.doh() + doh() + printh(); + +}; + +class Bazz inherits IO { + + h : Int <- 1; + + g : Foo <- case self of + n : Bazz => (new Foo); + n : Razz => (new Bar); + n : Foo => (new Razz); + n : Bar => n; + esac; + + i : Object <- printh(); + + printh() : Int { { out_int(h); 0; } }; + + doh() : Int { (let i: Int <- h in { h <- h + 1; i; } ) }; +}; + +(* scary . . . *) +class Main { + a : Bazz <- new Bazz; + b : Foo <- new Foo; + c : Razz <- new Razz; + d : Bar <- new Bar; + + main(): String { "do nothing" }; + +}; + + + + + diff --git a/tests/codegen/hello_world.cl b/tests/codegen/hello_world.cl index 0c818f90..b0a180a2 100644 --- a/tests/codegen/hello_world.cl +++ b/tests/codegen/hello_world.cl @@ -1,5 +1,5 @@ -class Main inherits IO { - main(): IO { - out_string("Hello, World.\n") - }; -}; +class Main inherits IO { + main(): IO { + out_string("Hello, World.\n") + }; +}; diff --git a/tests/codegen/helloworld.cl b/tests/codegen/helloworld.cl index 61d42108..41bc1d44 100644 --- a/tests/codegen/helloworld.cl +++ b/tests/codegen/helloworld.cl @@ -1,6 +1,6 @@ -class Main { - main():IO { - new IO.out_string("Hello world!\n") - }; -}; - +class Main { + main():IO { + new IO.out_string("Hello world!\n") + }; +}; + diff --git a/tests/codegen/io.cl b/tests/codegen/io.cl index 7f0de869..42ee6854 100644 --- a/tests/codegen/io.cl +++ b/tests/codegen/io.cl @@ -1,103 +1,103 @@ -(* - * The IO class is predefined and has 4 methods: - * - * out_string(s : String) : SELF_TYPE - * out_int(i : Int) : SELF_TYPE - * in_string() : String - * in_int() : Int - * - * The out operations print their argument to the terminal. The - * in_string method reads an entire line from the terminal and returns a - * string not containing the new line. The in_int method also reads - * an entire line from the terminal and returns the integer - * corresponding to the first non blank word on the line. If that - * word is not an integer, it returns 0. - * - * - * Because our language is object oriented, we need an object of type - * IO in order to call any of these methods. - * - * There are basically two ways of getting access to IO in a class C. - * - * 1) Define C to Inherit from IO. This way the IO methods become - * methods of C, and they can be called using the abbreviated - * dispatch, i.e. - * - * class C inherits IO is - * ... - * out_string("Hello world\n") - * ... - * end; - * - * 2) If your class C does not directly or indirectly inherit from - * IO, the best way to access IO is through an initialized - * attribute of type IO. - * - * class C inherits Foo is - * io : IO <- new IO; - * ... - * io.out_string("Hello world\n"); - * ... - * end; - * - * Approach 1) is most often used, in particular when you need IO - * functions in the Main class. - * - *) - - -class A { - - -- Let's assume that we don't want A to not inherit from IO. - - io : IO <- new IO; - - out_a() : Object { io.out_string("A: Hello world\n") }; - -}; - - -class B inherits A { - - -- B does not have to an extra attribute, since it inherits io from A. - - out_b() : Object { io.out_string("B: Hello world\n") }; - -}; - - -class C inherits IO { - - -- Now the IO methods are part of C. - - out_c() : Object { out_string("C: Hello world\n") }; - - -- Note that out_string(...) is just a shorthand for self.out_string(...) - -}; - - -class D inherits C { - - -- Inherits IO methods from C. - - out_d() : Object { out_string("D: Hello world\n") }; - -}; - - -class Main inherits IO { - - -- Same case as class C. - - main() : Object { - { - (new A).out_a(); - (new B).out_b(); - (new C).out_c(); - (new D).out_d(); - out_string("Done.\n"); - } - }; - -}; +(* + * The IO class is predefined and has 4 methods: + * + * out_string(s : String) : SELF_TYPE + * out_int(i : Int) : SELF_TYPE + * in_string() : String + * in_int() : Int + * + * The out operations print their argument to the terminal. The + * in_string method reads an entire line from the terminal and returns a + * string not containing the new line. The in_int method also reads + * an entire line from the terminal and returns the integer + * corresponding to the first non blank word on the line. If that + * word is not an integer, it returns 0. + * + * + * Because our language is object oriented, we need an object of type + * IO in order to call any of these methods. + * + * There are basically two ways of getting access to IO in a class C. + * + * 1) Define C to Inherit from IO. This way the IO methods become + * methods of C, and they can be called using the abbreviated + * dispatch, i.e. + * + * class C inherits IO is + * ... + * out_string("Hello world\n") + * ... + * end; + * + * 2) If your class C does not directly or indirectly inherit from + * IO, the best way to access IO is through an initialized + * attribute of type IO. + * + * class C inherits Foo is + * io : IO <- new IO; + * ... + * io.out_string("Hello world\n"); + * ... + * end; + * + * Approach 1) is most often used, in particular when you need IO + * functions in the Main class. + * + *) + + +class A { + + -- Let's assume that we don't want A to not inherit from IO. + + io : IO <- new IO; + + out_a() : Object { io.out_string("A: Hello world\n") }; + +}; + + +class B inherits A { + + -- B does not have to an extra attribute, since it inherits io from A. + + out_b() : Object { io.out_string("B: Hello world\n") }; + +}; + + +class C inherits IO { + + -- Now the IO methods are part of C. + + out_c() : Object { out_string("C: Hello world\n") }; + + -- Note that out_string(...) is just a shorthand for self.out_string(...) + +}; + + +class D inherits C { + + -- Inherits IO methods from C. + + out_d() : Object { out_string("D: Hello world\n") }; + +}; + + +class Main inherits IO { + + -- Same case as class C. + + main() : Object { + { + (new A).out_a(); + (new B).out_b(); + (new C).out_c(); + (new D).out_d(); + out_string("Done.\n"); + } + }; + +}; diff --git a/tests/codegen/life.cl b/tests/codegen/life.cl index b83d9795..7d7a41fd 100644 --- a/tests/codegen/life.cl +++ b/tests/codegen/life.cl @@ -1,436 +1,436 @@ -(* The Game of Life - Tendo Kayiira, Summer '95 - With code taken from /private/cool/class/examples/cells.cl - - This introduction was taken off the internet. It gives a brief - description of the Game Of Life. It also gives the rules by which - this particular game follows. - - Introduction - - John Conway's Game of Life is a mathematical amusement, but it - is also much more: an insight into how a system of simple - cellualar automata can create complex, odd, and often aesthetically - pleasing patterns. It is played on a cartesian grid of cells - which are either 'on' or 'off' The game gets it's name from the - similarity between the behaviour of these cells and the behaviour - of living organisms. - - The Rules - - The playfield is a cartesian grid of arbitrary size. Each cell in - this grid can be in an 'on' state or an 'off' state. On each 'turn' - (called a generation,) the state of each cell changes simultaneously - depending on it's state and the state of all cells adjacent to it. - - For 'on' cells, - If the cell has 0 or 1 neighbours which are 'on', the cell turns - 'off'. ('dies of loneliness') - If the cell has 2 or 3 neighbours which are 'on', the cell stays - 'on'. (nothing happens to that cell) - If the cell has 4, 5, 6, 7, 8, or 9 neighbours which are 'on', - the cell turns 'off'. ('dies of overcrowding') - - For 'off' cells, - If the cell has 0, 1, 2, 4, 5, 6, 7, 8, or 9 neighbours which - are 'on', the cell stays 'off'. (nothing happens to that cell) - If the cell has 3 neighbours which are 'on', the cell turns - 'on'. (3 neighbouring 'alive' cells 'give birth' to a fourth.) - - Repeat for as many generations as desired. - - *) - - -class Board inherits IO { - - rows : Int; - columns : Int; - board_size : Int; - - size_of_board(initial : String) : Int { - initial.length() - }; - - board_init(start : String) : Board { - (let size :Int <- size_of_board(start) in - { - if size = 15 then - { - rows <- 3; - columns <- 5; - board_size <- size; - } - else if size = 16 then - { - rows <- 4; - columns <- 4; - board_size <- size; - } - else if size = 20 then - { - rows <- 4; - columns <- 5; - board_size <- size; - } - else if size = 21 then - { - rows <- 3; - columns <- 7; - board_size <- size; - } - else if size = 25 then - { - rows <- 5; - columns <- 5; - board_size <- size; - } - else if size = 28 then - { - rows <- 7; - columns <- 4; - board_size <- size; - } - else -- If none of the above fit, then just give - { -- the configuration of the most common board - rows <- 5; - columns <- 5; - board_size <- size; - } - fi fi fi fi fi fi; - self; - } - ) - }; - -}; - - - -class CellularAutomaton inherits Board { - population_map : String; - - init(map : String) : CellularAutomaton { - { - population_map <- map; - board_init(map); - self; - } - }; - - - - - print() : CellularAutomaton { - - (let i : Int <- 0 in - (let num : Int <- board_size in - { - out_string("\n"); - while i < num loop - { - out_string(population_map.substr(i,columns)); - out_string("\n"); - i <- i + columns; - } - pool; - out_string("\n"); - self; - } - ) ) - }; - - num_cells() : Int { - population_map.length() - }; - - cell(position : Int) : String { - if board_size - 1 < position then - " " - else - population_map.substr(position, 1) - fi - }; - - north(position : Int): String { - if (position - columns) < 0 then - " " - else - cell(position - columns) - fi - }; - - south(position : Int): String { - if board_size < (position + columns) then - " " - else - cell(position + columns) - fi - }; - - east(position : Int): String { - if (((position + 1) /columns ) * columns) = (position + 1) then - " " - else - cell(position + 1) - fi - }; - - west(position : Int): String { - if position = 0 then - " " - else - if ((position / columns) * columns) = position then - " " - else - cell(position - 1) - fi fi - }; - - northwest(position : Int): String { - if (position - columns) < 0 then - " " - else if ((position / columns) * columns) = position then - " " - else - north(position - 1) - fi fi - }; - - northeast(position : Int): String { - if (position - columns) < 0 then - " " - else if (((position + 1) /columns ) * columns) = (position + 1) then - " " - else - north(position + 1) - fi fi - }; - - southeast(position : Int): String { - if board_size < (position + columns) then - " " - else if (((position + 1) /columns ) * columns) = (position + 1) then - " " - else - south(position + 1) - fi fi - }; - - southwest(position : Int): String { - if board_size < (position + columns) then - " " - else if ((position / columns) * columns) = position then - " " - else - south(position - 1) - fi fi - }; - - neighbors(position: Int): Int { - { - if north(position) = "X" then 1 else 0 fi - + if south(position) = "X" then 1 else 0 fi - + if east(position) = "X" then 1 else 0 fi - + if west(position) = "X" then 1 else 0 fi - + if northeast(position) = "X" then 1 else 0 fi - + if northwest(position) = "X" then 1 else 0 fi - + if southeast(position) = "X" then 1 else 0 fi - + if southwest(position) = "X" then 1 else 0 fi; - } - }; - - -(* A cell will live if 2 or 3 of it's neighbors are alive. It dies - otherwise. A cell is born if only 3 of it's neighbors are alive. *) - - cell_at_next_evolution(position : Int) : String { - - if neighbors(position) = 3 then - "X" - else - if neighbors(position) = 2 then - if cell(position) = "X" then - "X" - else - "-" - fi - else - "-" - fi fi - }; - - - evolve() : CellularAutomaton { - (let position : Int <- 0 in - (let num : Int <- num_cells() in - (let temp : String in - { - while position < num loop - { - temp <- temp.concat(cell_at_next_evolution(position)); - position <- position + 1; - } - pool; - population_map <- temp; - self; - } - ) ) ) - }; - -(* This is where the background pattern is detremined by the user. More - patterns can be added as long as whoever adds keeps the board either - 3x5, 4x5, 5x5, 3x7, 7x4, 4x4 with the row first then column. *) - option(): String { - { - (let num : Int in - { - out_string("\nPlease chose a number:\n"); - out_string("\t1: A cross\n"); - out_string("\t2: A slash from the upper left to lower right\n"); - out_string("\t3: A slash from the upper right to lower left\n"); - out_string("\t4: An X\n"); - out_string("\t5: A greater than sign \n"); - out_string("\t6: A less than sign\n"); - out_string("\t7: Two greater than signs\n"); - out_string("\t8: Two less than signs\n"); - out_string("\t9: A 'V'\n"); - out_string("\t10: An inverse 'V'\n"); - out_string("\t11: Numbers 9 and 10 combined\n"); - out_string("\t12: A full grid\n"); - out_string("\t13: A 'T'\n"); - out_string("\t14: A plus '+'\n"); - out_string("\t15: A 'W'\n"); - out_string("\t16: An 'M'\n"); - out_string("\t17: An 'E'\n"); - out_string("\t18: A '3'\n"); - out_string("\t19: An 'O'\n"); - out_string("\t20: An '8'\n"); - out_string("\t21: An 'S'\n"); - out_string("Your choice => "); - num <- in_int(); - out_string("\n"); - if num = 1 then - " XX XXXX XXXX XX " - else if num = 2 then - " X X X X X " - else if num = 3 then - "X X X X X" - else if num = 4 then - "X X X X X X X X X" - else if num = 5 then - "X X X X X " - else if num = 6 then - " X X X X X" - else if num = 7 then - "X X X XX X " - else if num = 8 then - " X XX X X X " - else if num = 9 then - "X X X X X " - else if num = 10 then - " X X X X X" - else if num = 11 then - "X X X X X X X X" - else if num = 12 then - "XXXXXXXXXXXXXXXXXXXXXXXXX" - else if num = 13 then - "XXXXX X X X X " - else if num = 14 then - " X X XXXXX X X " - else if num = 15 then - "X X X X X X X " - else if num = 16 then - " X X X X X X X" - else if num = 17 then - "XXXXX X XXXXX X XXXX" - else if num = 18 then - "XXX X X X X XXXX " - else if num = 19 then - " XX X XX X XX " - else if num = 20 then - " XX X XX X XX X XX X XX " - else if num = 21 then - " XXXX X XX X XXXX " - else - " " - fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi; - } - ); - } - }; - - - - - prompt() : Bool { - { - (let ans : String in - { - out_string("Would you like to continue with the next generation? \n"); - out_string("Please use lowercase y or n for your answer [y]: "); - ans <- in_string(); - out_string("\n"); - if ans = "n" then - false - else - true - fi; - } - ); - } - }; - - - prompt2() : Bool { - (let ans : String in - { - out_string("\n\n"); - out_string("Would you like to choose a background pattern? \n"); - out_string("Please use lowercase y or n for your answer [n]: "); - ans <- in_string(); - if ans = "y" then - true - else - false - fi; - } - ) - }; - - -}; - -class Main inherits CellularAutomaton { - cells : CellularAutomaton; - - main() : Main { - { - (let continue : Bool in - (let choice : String in - { - out_string("Welcome to the Game of Life.\n"); - out_string("There are many initial states to choose from. \n"); - while prompt2() loop - { - continue <- true; - choice <- option(); - cells <- (new CellularAutomaton).init(choice); - cells.print(); - while continue loop - if prompt() then - { - cells.evolve(); - cells.print(); - } - else - continue <- false - fi - pool; - } - pool; - self; - } ) ); } - }; -}; - +(* The Game of Life + Tendo Kayiira, Summer '95 + With code taken from /private/cool/class/examples/cells.cl + + This introduction was taken off the internet. It gives a brief + description of the Game Of Life. It also gives the rules by which + this particular game follows. + + Introduction + + John Conway's Game of Life is a mathematical amusement, but it + is also much more: an insight into how a system of simple + cellualar automata can create complex, odd, and often aesthetically + pleasing patterns. It is played on a cartesian grid of cells + which are either 'on' or 'off' The game gets it's name from the + similarity between the behaviour of these cells and the behaviour + of living organisms. + + The Rules + + The playfield is a cartesian grid of arbitrary size. Each cell in + this grid can be in an 'on' state or an 'off' state. On each 'turn' + (called a generation,) the state of each cell changes simultaneously + depending on it's state and the state of all cells adjacent to it. + + For 'on' cells, + If the cell has 0 or 1 neighbours which are 'on', the cell turns + 'off'. ('dies of loneliness') + If the cell has 2 or 3 neighbours which are 'on', the cell stays + 'on'. (nothing happens to that cell) + If the cell has 4, 5, 6, 7, 8, or 9 neighbours which are 'on', + the cell turns 'off'. ('dies of overcrowding') + + For 'off' cells, + If the cell has 0, 1, 2, 4, 5, 6, 7, 8, or 9 neighbours which + are 'on', the cell stays 'off'. (nothing happens to that cell) + If the cell has 3 neighbours which are 'on', the cell turns + 'on'. (3 neighbouring 'alive' cells 'give birth' to a fourth.) + + Repeat for as many generations as desired. + + *) + + +class Board inherits IO { + + rows : Int; + columns : Int; + board_size : Int; + + size_of_board(initial : String) : Int { + initial.length() + }; + + board_init(start : String) : Board { + (let size :Int <- size_of_board(start) in + { + if size = 15 then + { + rows <- 3; + columns <- 5; + board_size <- size; + } + else if size = 16 then + { + rows <- 4; + columns <- 4; + board_size <- size; + } + else if size = 20 then + { + rows <- 4; + columns <- 5; + board_size <- size; + } + else if size = 21 then + { + rows <- 3; + columns <- 7; + board_size <- size; + } + else if size = 25 then + { + rows <- 5; + columns <- 5; + board_size <- size; + } + else if size = 28 then + { + rows <- 7; + columns <- 4; + board_size <- size; + } + else -- If none of the above fit, then just give + { -- the configuration of the most common board + rows <- 5; + columns <- 5; + board_size <- size; + } + fi fi fi fi fi fi; + self; + } + ) + }; + +}; + + + +class CellularAutomaton inherits Board { + population_map : String; + + init(map : String) : CellularAutomaton { + { + population_map <- map; + board_init(map); + self; + } + }; + + + + + print() : CellularAutomaton { + + (let i : Int <- 0 in + (let num : Int <- board_size in + { + out_string("\n"); + while i < num loop + { + out_string(population_map.substr(i,columns)); + out_string("\n"); + i <- i + columns; + } + pool; + out_string("\n"); + self; + } + ) ) + }; + + num_cells() : Int { + population_map.length() + }; + + cell(position : Int) : String { + if board_size - 1 < position then + " " + else + population_map.substr(position, 1) + fi + }; + + north(position : Int): String { + if (position - columns) < 0 then + " " + else + cell(position - columns) + fi + }; + + south(position : Int): String { + if board_size < (position + columns) then + " " + else + cell(position + columns) + fi + }; + + east(position : Int): String { + if (((position + 1) /columns ) * columns) = (position + 1) then + " " + else + cell(position + 1) + fi + }; + + west(position : Int): String { + if position = 0 then + " " + else + if ((position / columns) * columns) = position then + " " + else + cell(position - 1) + fi fi + }; + + northwest(position : Int): String { + if (position - columns) < 0 then + " " + else if ((position / columns) * columns) = position then + " " + else + north(position - 1) + fi fi + }; + + northeast(position : Int): String { + if (position - columns) < 0 then + " " + else if (((position + 1) /columns ) * columns) = (position + 1) then + " " + else + north(position + 1) + fi fi + }; + + southeast(position : Int): String { + if board_size < (position + columns) then + " " + else if (((position + 1) /columns ) * columns) = (position + 1) then + " " + else + south(position + 1) + fi fi + }; + + southwest(position : Int): String { + if board_size < (position + columns) then + " " + else if ((position / columns) * columns) = position then + " " + else + south(position - 1) + fi fi + }; + + neighbors(position: Int): Int { + { + if north(position) = "X" then 1 else 0 fi + + if south(position) = "X" then 1 else 0 fi + + if east(position) = "X" then 1 else 0 fi + + if west(position) = "X" then 1 else 0 fi + + if northeast(position) = "X" then 1 else 0 fi + + if northwest(position) = "X" then 1 else 0 fi + + if southeast(position) = "X" then 1 else 0 fi + + if southwest(position) = "X" then 1 else 0 fi; + } + }; + + +(* A cell will live if 2 or 3 of it's neighbors are alive. It dies + otherwise. A cell is born if only 3 of it's neighbors are alive. *) + + cell_at_next_evolution(position : Int) : String { + + if neighbors(position) = 3 then + "X" + else + if neighbors(position) = 2 then + if cell(position) = "X" then + "X" + else + "-" + fi + else + "-" + fi fi + }; + + + evolve() : CellularAutomaton { + (let position : Int <- 0 in + (let num : Int <- num_cells() in + (let temp : String in + { + while position < num loop + { + temp <- temp.concat(cell_at_next_evolution(position)); + position <- position + 1; + } + pool; + population_map <- temp; + self; + } + ) ) ) + }; + +(* This is where the background pattern is detremined by the user. More + patterns can be added as long as whoever adds keeps the board either + 3x5, 4x5, 5x5, 3x7, 7x4, 4x4 with the row first then column. *) + option(): String { + { + (let num : Int in + { + out_string("\nPlease chose a number:\n"); + out_string("\t1: A cross\n"); + out_string("\t2: A slash from the upper left to lower right\n"); + out_string("\t3: A slash from the upper right to lower left\n"); + out_string("\t4: An X\n"); + out_string("\t5: A greater than sign \n"); + out_string("\t6: A less than sign\n"); + out_string("\t7: Two greater than signs\n"); + out_string("\t8: Two less than signs\n"); + out_string("\t9: A 'V'\n"); + out_string("\t10: An inverse 'V'\n"); + out_string("\t11: Numbers 9 and 10 combined\n"); + out_string("\t12: A full grid\n"); + out_string("\t13: A 'T'\n"); + out_string("\t14: A plus '+'\n"); + out_string("\t15: A 'W'\n"); + out_string("\t16: An 'M'\n"); + out_string("\t17: An 'E'\n"); + out_string("\t18: A '3'\n"); + out_string("\t19: An 'O'\n"); + out_string("\t20: An '8'\n"); + out_string("\t21: An 'S'\n"); + out_string("Your choice => "); + num <- in_int(); + out_string("\n"); + if num = 1 then + " XX XXXX XXXX XX " + else if num = 2 then + " X X X X X " + else if num = 3 then + "X X X X X" + else if num = 4 then + "X X X X X X X X X" + else if num = 5 then + "X X X X X " + else if num = 6 then + " X X X X X" + else if num = 7 then + "X X X XX X " + else if num = 8 then + " X XX X X X " + else if num = 9 then + "X X X X X " + else if num = 10 then + " X X X X X" + else if num = 11 then + "X X X X X X X X" + else if num = 12 then + "XXXXXXXXXXXXXXXXXXXXXXXXX" + else if num = 13 then + "XXXXX X X X X " + else if num = 14 then + " X X XXXXX X X " + else if num = 15 then + "X X X X X X X " + else if num = 16 then + " X X X X X X X" + else if num = 17 then + "XXXXX X XXXXX X XXXX" + else if num = 18 then + "XXX X X X X XXXX " + else if num = 19 then + " XX X XX X XX " + else if num = 20 then + " XX X XX X XX X XX X XX " + else if num = 21 then + " XXXX X XX X XXXX " + else + " " + fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi; + } + ); + } + }; + + + + + prompt() : Bool { + { + (let ans : String in + { + out_string("Would you like to continue with the next generation? \n"); + out_string("Please use lowercase y or n for your answer [y]: "); + ans <- in_string(); + out_string("\n"); + if ans = "n" then + false + else + true + fi; + } + ); + } + }; + + + prompt2() : Bool { + (let ans : String in + { + out_string("\n\n"); + out_string("Would you like to choose a background pattern? \n"); + out_string("Please use lowercase y or n for your answer [n]: "); + ans <- in_string(); + if ans = "y" then + true + else + false + fi; + } + ) + }; + + +}; + +class Main inherits CellularAutomaton { + cells : CellularAutomaton; + + main() : Main { + { + (let continue : Bool in + (let choice : String in + { + out_string("Welcome to the Game of Life.\n"); + out_string("There are many initial states to choose from. \n"); + while prompt2() loop + { + continue <- true; + choice <- option(); + cells <- (new CellularAutomaton).init(choice); + cells.print(); + while continue loop + if prompt() then + { + cells.evolve(); + cells.print(); + } + else + continue <- false + fi + pool; + } + pool; + self; + } ) ); } + }; +}; + diff --git a/tests/codegen/list.cl b/tests/codegen/list.cl index e8bbcb84..b384dac6 100644 --- a/tests/codegen/list.cl +++ b/tests/codegen/list.cl @@ -1,141 +1,141 @@ -(* - * This file shows how to implement a list data type for lists of integers. - * It makes use of INHERITANCE and DYNAMIC DISPATCH. - * - * The List class has 4 operations defined on List objects. If 'l' is - * a list, then the methods dispatched on 'l' have the following effects: - * - * isNil() : Bool Returns true if 'l' is empty, false otherwise. - * head() : Int Returns the integer at the head of 'l'. - * If 'l' is empty, execution aborts. - * tail() : List Returns the remainder of the 'l', - * i.e. without the first element. - * cons(i : Int) : List Return a new list containing i as the - * first element, followed by the - * elements in 'l'. - * - * There are 2 kinds of lists, the empty list and a non-empty - * list. We can think of the non-empty list as a specialization of - * the empty list. - * The class List defines the operations on empty list. The class - * Cons inherits from List and redefines things to handle non-empty - * lists. - *) - - -class List { - -- Define operations on empty lists. - - isNil() : Bool { true }; - - -- Since abort() has return type Object and head() has return type - -- Int, we need to have an Int as the result of the method body, - -- even though abort() never returns. - - head() : Int { { abort(); 0; } }; - - -- As for head(), the self is just to make sure the return type of - -- tail() is correct. - - tail() : List { { abort(); self; } }; - - -- When we cons and element onto the empty list we get a non-empty - -- list. The (new Cons) expression creates a new list cell of class - -- Cons, which is initialized by a dispatch to init(). - -- The result of init() is an element of class Cons, but it - -- conforms to the return type List, because Cons is a subclass of - -- List. - - cons(i : Int) : List { - (new Cons).init(i, self) - }; - -}; - - -(* - * Cons inherits all operations from List. We can reuse only the cons - * method though, because adding an element to the front of an emtpy - * list is the same as adding it to the front of a non empty - * list. All other methods have to be redefined, since the behaviour - * for them is different from the empty list. - * - * Cons needs two attributes to hold the integer of this list - * cell and to hold the rest of the list. - * - * The init() method is used by the cons() method to initialize the - * cell. - *) - -class Cons inherits List { - - car : Int; -- The element in this list cell - - cdr : List; -- The rest of the list - - isNil() : Bool { false }; - - head() : Int { car }; - - tail() : List { cdr }; - - init(i : Int, rest : List) : List { - { - car <- i; - cdr <- rest; - self; - } - }; - -}; - - - -(* - * The Main class shows how to use the List class. It creates a small - * list and then repeatedly prints out its elements and takes off the - * first element of the list. - *) - -class Main inherits IO { - - mylist : List; - - -- Print all elements of the list. Calls itself recursively with - -- the tail of the list, until the end of the list is reached. - - print_list(l : List) : Object { - if l.isNil() then out_string("\n") - else { - out_int(l.head()); - out_string(" "); - print_list(l.tail()); - } - fi - }; - - -- Note how the dynamic dispatch mechanism is responsible to end - -- the while loop. As long as mylist is bound to an object of - -- dynamic type Cons, the dispatch to isNil calls the isNil method of - -- the Cons class, which returns false. However when we reach the - -- end of the list, mylist gets bound to the object that was - -- created by the (new List) expression. This object is of dynamic type - -- List, and thus the method isNil in the List class is called and - -- returns true. - - main() : Object { - { - mylist <- new List.cons(1).cons(2).cons(3).cons(4).cons(5); - while (not mylist.isNil()) loop - { - print_list(mylist); - mylist <- mylist.tail(); - } - pool; - } - }; - -}; - - - +(* + * This file shows how to implement a list data type for lists of integers. + * It makes use of INHERITANCE and DYNAMIC DISPATCH. + * + * The List class has 4 operations defined on List objects. If 'l' is + * a list, then the methods dispatched on 'l' have the following effects: + * + * isNil() : Bool Returns true if 'l' is empty, false otherwise. + * head() : Int Returns the integer at the head of 'l'. + * If 'l' is empty, execution aborts. + * tail() : List Returns the remainder of the 'l', + * i.e. without the first element. + * cons(i : Int) : List Return a new list containing i as the + * first element, followed by the + * elements in 'l'. + * + * There are 2 kinds of lists, the empty list and a non-empty + * list. We can think of the non-empty list as a specialization of + * the empty list. + * The class List defines the operations on empty list. The class + * Cons inherits from List and redefines things to handle non-empty + * lists. + *) + + +class List { + -- Define operations on empty lists. + + isNil() : Bool { true }; + + -- Since abort() has return type Object and head() has return type + -- Int, we need to have an Int as the result of the method body, + -- even though abort() never returns. + + head() : Int { { abort(); 0; } }; + + -- As for head(), the self is just to make sure the return type of + -- tail() is correct. + + tail() : List { { abort(); self; } }; + + -- When we cons and element onto the empty list we get a non-empty + -- list. The (new Cons) expression creates a new list cell of class + -- Cons, which is initialized by a dispatch to init(). + -- The result of init() is an element of class Cons, but it + -- conforms to the return type List, because Cons is a subclass of + -- List. + + cons(i : Int) : List { + (new Cons).init(i, self) + }; + +}; + + +(* + * Cons inherits all operations from List. We can reuse only the cons + * method though, because adding an element to the front of an emtpy + * list is the same as adding it to the front of a non empty + * list. All other methods have to be redefined, since the behaviour + * for them is different from the empty list. + * + * Cons needs two attributes to hold the integer of this list + * cell and to hold the rest of the list. + * + * The init() method is used by the cons() method to initialize the + * cell. + *) + +class Cons inherits List { + + car : Int; -- The element in this list cell + + cdr : List; -- The rest of the list + + isNil() : Bool { false }; + + head() : Int { car }; + + tail() : List { cdr }; + + init(i : Int, rest : List) : List { + { + car <- i; + cdr <- rest; + self; + } + }; + +}; + + + +(* + * The Main class shows how to use the List class. It creates a small + * list and then repeatedly prints out its elements and takes off the + * first element of the list. + *) + +class Main inherits IO { + + mylist : List; + + -- Print all elements of the list. Calls itself recursively with + -- the tail of the list, until the end of the list is reached. + + print_list(l : List) : Object { + if l.isNil() then out_string("\n") + else { + out_int(l.head()); + out_string(" "); + print_list(l.tail()); + } + fi + }; + + -- Note how the dynamic dispatch mechanism is responsible to end + -- the while loop. As long as mylist is bound to an object of + -- dynamic type Cons, the dispatch to isNil calls the isNil method of + -- the Cons class, which returns false. However when we reach the + -- end of the list, mylist gets bound to the object that was + -- created by the (new List) expression. This object is of dynamic type + -- List, and thus the method isNil in the List class is called and + -- returns true. + + main() : Object { + { + mylist <- new List.cons(1).cons(2).cons(3).cons(4).cons(5); + while (not mylist.isNil()) loop + { + print_list(mylist); + mylist <- mylist.tail(); + } + pool; + } + }; + +}; + + + diff --git a/tests/codegen/new_complex.cl b/tests/codegen/new_complex.cl index a4fe714c..ad7035b5 100644 --- a/tests/codegen/new_complex.cl +++ b/tests/codegen/new_complex.cl @@ -1,79 +1,79 @@ -class Main inherits IO { - main() : IO { - (let c : Complex <- (new Complex).init(1, 1) in - { - -- trivially equal (see CoolAid) - if c.reflect_X() = c.reflect_0() - then out_string("=)\n") - else out_string("=(\n") - fi; - -- equal - if c.reflect_X().reflect_Y().equal(c.reflect_0()) - then out_string("=)\n") - else out_string("=(\n") - fi; - } - ) - }; -}; - -class Complex inherits IO { - x : Int; - y : Int; - - init(a : Int, b : Int) : Complex { - { - x = a; - y = b; - self; - } - }; - - print() : Object { - if y = 0 - then out_int(x) - else out_int(x).out_string("+").out_int(y).out_string("I") - fi - }; - - reflect_0() : Complex { - { - x = ~x; - y = ~y; - self; - } - }; - - reflect_X() : Complex { - { - y = ~y; - self; - } - }; - - reflect_Y() : Complex { - { - x = ~x; - self; - } - }; - - equal(d : Complex) : Bool { - if x = d.x_value() - then - if y = d.y_value() - then true - else false - fi - else false - fi - }; - - x_value() : Int { - x - }; - - y_value() : Int { - y - }; -}; +class Main inherits IO { + main() : IO { + (let c : Complex <- (new Complex).init(1, 1) in + { + -- trivially equal (see CoolAid) + if c.reflect_X() = c.reflect_0() + then out_string("=)\n") + else out_string("=(\n") + fi; + -- equal + if c.reflect_X().reflect_Y().equal(c.reflect_0()) + then out_string("=)\n") + else out_string("=(\n") + fi; + } + ) + }; +}; + +class Complex inherits IO { + x : Int; + y : Int; + + init(a : Int, b : Int) : Complex { + { + x = a; + y = b; + self; + } + }; + + print() : Object { + if y = 0 + then out_int(x) + else out_int(x).out_string("+").out_int(y).out_string("I") + fi + }; + + reflect_0() : Complex { + { + x = ~x; + y = ~y; + self; + } + }; + + reflect_X() : Complex { + { + y = ~y; + self; + } + }; + + reflect_Y() : Complex { + { + x = ~x; + self; + } + }; + + equal(d : Complex) : Bool { + if x = d.x_value() + then + if y = d.y_value() + then true + else false + fi + else false + fi + }; + + x_value() : Int { + x + }; + + y_value() : Int { + y + }; +}; diff --git a/tests/codegen/palindrome.cl b/tests/codegen/palindrome.cl index 7f24789f..6acbeb73 100644 --- a/tests/codegen/palindrome.cl +++ b/tests/codegen/palindrome.cl @@ -1,25 +1,25 @@ -class Main inherits IO { - pal(s : String) : Bool { - if s.length() = 0 - then true - else if s.length() = 1 - then true - else if s.substr(0, 1) = s.substr(s.length() - 1, 1) - then pal(s.substr(1, s.length() -2)) - else false - fi fi fi - }; - - i : Int; - - main() : IO { - { - i <- ~1; - out_string("enter a string\n"); - if pal(in_string()) - then out_string("that was a palindrome\n") - else out_string("that was not a palindrome\n") - fi; - } - }; -}; +class Main inherits IO { + pal(s : String) : Bool { + if s.length() = 0 + then true + else if s.length() = 1 + then true + else if s.substr(0, 1) = s.substr(s.length() - 1, 1) + then pal(s.substr(1, s.length() -2)) + else false + fi fi fi + }; + + i : Int; + + main() : IO { + { + i <- ~1; + out_string("enter a string\n"); + if pal(in_string()) + then out_string("that was a palindrome\n") + else out_string("that was not a palindrome\n") + fi; + } + }; +}; diff --git a/tests/codegen/primes.cl b/tests/codegen/primes.cl index ea953329..8b9254d5 100644 --- a/tests/codegen/primes.cl +++ b/tests/codegen/primes.cl @@ -1,84 +1,84 @@ - -(* - * methodless-primes.cl - * - * Designed by Jesse H. Willett, jhw@cory, 11103234, with - * Istvan Siposs, isiposs@cory, 12342921. - * - * This program generates primes in order without using any methods. - * Actually, it does use three methods: those of IO to print out each - * prime, and abort() to halt the program. These methods are incidental, - * however, to the information-processing functionality of the program. We - * could regard the attribute 'out's sequential values as our output, and - * the string "halt" as our terminate signal. - * - * Naturally, using Cool this way is a real waste, basically reducing it - * to assembly without the benefit of compilation. - * - * There could even be a subroutine-like construction, in that different - * code could be in the assign fields of attributes of other classes, - * and it could be executed by calling 'new Sub', but no parameters - * could be passed to the subroutine, and it could only return itself. - * but returning itself would be useless since we couldn't call methods - * and the only operators we have are for Int and Bool, which do nothing - * interesting when we initialize them! - *) - -class Main inherits IO { - - main() : Int { -- main() is an atrophied method so we can parse. - 0 - }; - - out : Int <- -- out is our 'output'. Its values are the primes. - { - out_string("2 is trivially prime.\n"); - 2; - }; - - testee : Int <- out; -- testee is a number to be tested for primeness. - - divisor : Int; -- divisor is a number which may factor testee. - - stop : Int <- 500; -- stop is an arbitrary value limiting testee. - - m : Object <- -- m supplants the main method. - while true loop - { - - testee <- testee + 1; - divisor <- 2; - - while - if testee < divisor * divisor - then false -- can stop if divisor > sqrt(testee). - else if testee - divisor*(testee/divisor) = 0 - then false -- can stop if divisor divides testee. - else true - fi fi - loop - divisor <- divisor + 1 - pool; - - if testee < divisor * divisor -- which reason did we stop for? - then -- testee has no factors less than sqrt(testee). - { - out <- testee; -- we could think of out itself as the output. - out_int(out); - out_string(" is prime.\n"); - } - else -- the loop halted on testee/divisor = 0, testee isn't prime. - 0 -- testee isn't prime, do nothing. - fi; - - if stop <= testee then - "halt".abort() -- we could think of "halt" as SIGTERM. - else - "continue" - fi; - - } - pool; - -}; (* end of Main *) - + +(* + * methodless-primes.cl + * + * Designed by Jesse H. Willett, jhw@cory, 11103234, with + * Istvan Siposs, isiposs@cory, 12342921. + * + * This program generates primes in order without using any methods. + * Actually, it does use three methods: those of IO to print out each + * prime, and abort() to halt the program. These methods are incidental, + * however, to the information-processing functionality of the program. We + * could regard the attribute 'out's sequential values as our output, and + * the string "halt" as our terminate signal. + * + * Naturally, using Cool this way is a real waste, basically reducing it + * to assembly without the benefit of compilation. + * + * There could even be a subroutine-like construction, in that different + * code could be in the assign fields of attributes of other classes, + * and it could be executed by calling 'new Sub', but no parameters + * could be passed to the subroutine, and it could only return itself. + * but returning itself would be useless since we couldn't call methods + * and the only operators we have are for Int and Bool, which do nothing + * interesting when we initialize them! + *) + +class Main inherits IO { + + main() : Int { -- main() is an atrophied method so we can parse. + 0 + }; + + out : Int <- -- out is our 'output'. Its values are the primes. + { + out_string("2 is trivially prime.\n"); + 2; + }; + + testee : Int <- out; -- testee is a number to be tested for primeness. + + divisor : Int; -- divisor is a number which may factor testee. + + stop : Int <- 500; -- stop is an arbitrary value limiting testee. + + m : Object <- -- m supplants the main method. + while true loop + { + + testee <- testee + 1; + divisor <- 2; + + while + if testee < divisor * divisor + then false -- can stop if divisor > sqrt(testee). + else if testee - divisor*(testee/divisor) = 0 + then false -- can stop if divisor divides testee. + else true + fi fi + loop + divisor <- divisor + 1 + pool; + + if testee < divisor * divisor -- which reason did we stop for? + then -- testee has no factors less than sqrt(testee). + { + out <- testee; -- we could think of out itself as the output. + out_int(out); + out_string(" is prime.\n"); + } + else -- the loop halted on testee/divisor = 0, testee isn't prime. + 0 -- testee isn't prime, do nothing. + fi; + + if stop <= testee then + "halt".abort() -- we could think of "halt" as SIGTERM. + else + "continue" + fi; + + } + pool; + +}; (* end of Main *) + diff --git a/tests/codegen/print-cool.cl b/tests/codegen/print-cool.cl index 8d7a336f..76194e96 100644 --- a/tests/codegen/print-cool.cl +++ b/tests/codegen/print-cool.cl @@ -1,9 +1,9 @@ -class Main inherits IO { - main() : IO { - { - out_string((new Object).type_name().substr(4,1)). - out_string((isvoid self).type_name().substr(1,3)); -- demonstrates the dispatch rules. - out_string("\n"); - } - }; -}; +class Main inherits IO { + main() : IO { + { + out_string((new Object).type_name().substr(4,1)). + out_string((isvoid self).type_name().substr(1,3)); -- demonstrates the dispatch rules. + out_string("\n"); + } + }; +}; diff --git a/tests/codegen/sort-list.cl b/tests/codegen/sort-list.cl index d49d56c4..7cf7b20a 100644 --- a/tests/codegen/sort-list.cl +++ b/tests/codegen/sort-list.cl @@ -1,146 +1,146 @@ -(* - This file presents a fairly large example of Cool programming. The -class List defines the names of standard list operations ala Scheme: -car, cdr, cons, isNil, rev, sort, rcons (add an element to the end of -the list), and print_list. In the List class most of these functions -are just stubs that abort if ever called. The classes Nil and Cons -inherit from List and define the same operations, but now as -appropriate to the empty list (for the Nil class) and for cons cells (for -the Cons class). - -The Main class puts all of this code through the following silly -test exercise: - - 1. prompt for a number N - 2. generate a list of numbers 0..N-1 - 3. reverse the list - 4. sort the list - 5. print the sorted list - -Because the sort used is a quadratic space insertion sort, sorting -moderately large lists can be quite slow. -*) - -Class List inherits IO { - (* Since abort() returns Object, we need something of - type Bool at the end of the block to satisfy the typechecker. - This code is unreachable, since abort() halts the program. *) - isNil() : Bool { { abort(); true; } }; - - cons(hd : Int) : Cons { - (let new_cell : Cons <- new Cons in - new_cell.init(hd,self) - ) - }; - - (* - Since abort "returns" type Object, we have to add - an expression of type Int here to satisfy the typechecker. - This code is, of course, unreachable. - *) - car() : Int { { abort(); new Int; } }; - - cdr() : List { { abort(); new List; } }; - - rev() : List { cdr() }; - - sort() : List { cdr() }; - - insert(i : Int) : List { cdr() }; - - rcons(i : Int) : List { cdr() }; - - print_list() : Object { abort() }; -}; - -Class Cons inherits List { - xcar : Int; -- We keep the car in cdr in attributes. - xcdr : List; - - isNil() : Bool { false }; - - init(hd : Int, tl : List) : Cons { - { - xcar <- hd; - xcdr <- tl; - self; - } - }; - - car() : Int { xcar }; - - cdr() : List { xcdr }; - - rev() : List { (xcdr.rev()).rcons(xcar) }; - - sort() : List { (xcdr.sort()).insert(xcar) }; - - insert(i : Int) : List { - if i < xcar then - (new Cons).init(i,self) - else - (new Cons).init(xcar,xcdr.insert(i)) - fi - }; - - - rcons(i : Int) : List { (new Cons).init(xcar, xcdr.rcons(i)) }; - - print_list() : Object { - { - out_int(xcar); - out_string("\n"); - xcdr.print_list(); - } - }; -}; - -Class Nil inherits List { - isNil() : Bool { true }; - - rev() : List { self }; - - sort() : List { self }; - - insert(i : Int) : List { rcons(i) }; - - rcons(i : Int) : List { (new Cons).init(i,self) }; - - print_list() : Object { true }; - -}; - - -Class Main inherits IO { - - l : List; - - (* iota maps its integer argument n into the list 0..n-1 *) - iota(i : Int) : List { - { - l <- new Nil; - (let j : Int <- 0 in - while j < i - loop - { - l <- (new Cons).init(j,l); - j <- j + 1; - } - pool - ); - l; - } - }; - - main() : Object { - { - out_string("How many numbers to sort? "); - iota(in_int()).rev().sort().print_list(); - } - }; -}; - - - - - +(* + This file presents a fairly large example of Cool programming. The +class List defines the names of standard list operations ala Scheme: +car, cdr, cons, isNil, rev, sort, rcons (add an element to the end of +the list), and print_list. In the List class most of these functions +are just stubs that abort if ever called. The classes Nil and Cons +inherit from List and define the same operations, but now as +appropriate to the empty list (for the Nil class) and for cons cells (for +the Cons class). + +The Main class puts all of this code through the following silly +test exercise: + + 1. prompt for a number N + 2. generate a list of numbers 0..N-1 + 3. reverse the list + 4. sort the list + 5. print the sorted list + +Because the sort used is a quadratic space insertion sort, sorting +moderately large lists can be quite slow. +*) + +Class List inherits IO { + (* Since abort() returns Object, we need something of + type Bool at the end of the block to satisfy the typechecker. + This code is unreachable, since abort() halts the program. *) + isNil() : Bool { { abort(); true; } }; + + cons(hd : Int) : Cons { + (let new_cell : Cons <- new Cons in + new_cell.init(hd,self) + ) + }; + + (* + Since abort "returns" type Object, we have to add + an expression of type Int here to satisfy the typechecker. + This code is, of course, unreachable. + *) + car() : Int { { abort(); new Int; } }; + + cdr() : List { { abort(); new List; } }; + + rev() : List { cdr() }; + + sort() : List { cdr() }; + + insert(i : Int) : List { cdr() }; + + rcons(i : Int) : List { cdr() }; + + print_list() : Object { abort() }; +}; + +Class Cons inherits List { + xcar : Int; -- We keep the car in cdr in attributes. + xcdr : List; + + isNil() : Bool { false }; + + init(hd : Int, tl : List) : Cons { + { + xcar <- hd; + xcdr <- tl; + self; + } + }; + + car() : Int { xcar }; + + cdr() : List { xcdr }; + + rev() : List { (xcdr.rev()).rcons(xcar) }; + + sort() : List { (xcdr.sort()).insert(xcar) }; + + insert(i : Int) : List { + if i < xcar then + (new Cons).init(i,self) + else + (new Cons).init(xcar,xcdr.insert(i)) + fi + }; + + + rcons(i : Int) : List { (new Cons).init(xcar, xcdr.rcons(i)) }; + + print_list() : Object { + { + out_int(xcar); + out_string("\n"); + xcdr.print_list(); + } + }; +}; + +Class Nil inherits List { + isNil() : Bool { true }; + + rev() : List { self }; + + sort() : List { self }; + + insert(i : Int) : List { rcons(i) }; + + rcons(i : Int) : List { (new Cons).init(i,self) }; + + print_list() : Object { true }; + +}; + + +Class Main inherits IO { + + l : List; + + (* iota maps its integer argument n into the list 0..n-1 *) + iota(i : Int) : List { + { + l <- new Nil; + (let j : Int <- 0 in + while j < i + loop + { + l <- (new Cons).init(j,l); + j <- j + 1; + } + pool + ); + l; + } + }; + + main() : Object { + { + out_string("How many numbers to sort? "); + iota(in_int()).rev().sort().print_list(); + } + }; +}; + + + + + diff --git a/tests/codegen/test.cl b/tests/codegen/test.cl index 4f76ffe0..9c2e0fd8 100644 --- a/tests/codegen/test.cl +++ b/tests/codegen/test.cl @@ -1,19 +1,19 @@ -class Main inherits IO { - - main () : Object { - { - let x:A <- new B in out_string( x.f().m() ); - let x:A <- new A in out_string( x.f().m() ); - } - - }; -}; - -class A { - m () : String { "A" }; - f () : A { new A }; -}; - -class B inherits A { - m () : String { "B" }; -}; +class Main inherits IO { + + main () : Object { + { + let x:A <- new B in out_string( x.f().m() ); + let x:A <- new A in out_string( x.f().m() ); + } + + }; +}; + +class A { + m () : String { "A" }; + f () : A { new A }; +}; + +class B inherits A { + m () : String { "B" }; +}; diff --git a/tests/codegen_test.py b/tests/codegen_test.py index 6d864cb0..e2fa3423 100644 --- a/tests/codegen_test.py +++ b/tests/codegen_test.py @@ -1,15 +1,15 @@ -import pytest -import os -from utils import compare_errors - -tests_dir = __file__.rpartition('/')[0] + '/codegen/' -tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] - -# @pytest.mark.lexer -# @pytest.mark.parser -# @pytest.mark.semantic -@pytest.mark.ok -@pytest.mark.run(order=4) -@pytest.mark.parametrize("cool_file", tests) -def test_codegen(compiler_path, cool_file): +import pytest +import os +from utils import compare_errors + +tests_dir = __file__.rpartition('/')[0] + '/codegen/' +tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] + +# @pytest.mark.lexer +# @pytest.mark.parser +# @pytest.mark.semantic +@pytest.mark.ok +@pytest.mark.run(order=4) +@pytest.mark.parametrize("cool_file", tests) +def test_codegen(compiler_path, cool_file): compare_errors(compiler_path, tests_dir + cool_file, None) \ No newline at end of file diff --git a/tests/conftest.py b/tests/conftest.py index 1f44eeb7..561d8baf 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,6 +1,6 @@ -import pytest -import os - -@pytest.fixture -def compiler_path(): +import pytest +import os + +@pytest.fixture +def compiler_path(): return os.path.abspath('./coolc.sh') \ No newline at end of file diff --git a/tests/lexer/mixed1_error.txt b/tests/lexer/mixed1_error.txt index 99af5fbd..a142c2ed 100644 --- a/tests/lexer/mixed1_error.txt +++ b/tests/lexer/mixed1_error.txt @@ -1 +1 @@ -(2, 10) - LexicographicError: ERROR "#" +(2, 10) - LexicographicError: ERROR "#" diff --git a/tests/semantic/hello_world.cl b/tests/semantic/hello_world.cl index 0c818f90..b0a180a2 100644 --- a/tests/semantic/hello_world.cl +++ b/tests/semantic/hello_world.cl @@ -1,5 +1,5 @@ -class Main inherits IO { - main(): IO { - out_string("Hello, World.\n") - }; -}; +class Main inherits IO { + main(): IO { + out_string("Hello, World.\n") + }; +}; From f88d024089b4ad4c7f0386606d601bf9122c72b9 Mon Sep 17 00:00:00 2001 From: Noly Fernandez Date: Wed, 28 Oct 2020 17:12:00 -0600 Subject: [PATCH 26/60] Commiting last changes in column to delete branch columns --- .idea/cool-compiler-2020.iml | 13 + .idea/misc.xml | 7 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + .idea/workspace.xml | 281 +++++ doc/report/report.log | 1002 +++++++++++++++++ src/.idea/misc.xml | 7 + src/.idea/modules.xml | 8 + src/.idea/src.iml | 11 + src/.idea/vcs.xml | 6 + src/.idea/workspace.xml | 483 ++++++++ .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 595 bytes .../__pycache__/cil_ast.cpython-37.pyc | Bin 0 -> 9622 bytes .../__pycache__/pipeline.cpython-37.pyc | Bin 0 -> 639 bytes .../base_cil_visitor.cpython-37.pyc | Bin 0 -> 5289 bytes .../cil_format_visitor.cpython-37.pyc | Bin 0 -> 5519 bytes .../__pycache__/cil_visitor.cpython-37.pyc | Bin 0 -> 11193 bytes .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 218 bytes .../__pycache__/base_parser.cpython-37.pyc | Bin 0 -> 1035 bytes .../__pycache__/logger.cpython-37.pyc | Bin 0 -> 415 bytes .../__pycache__/parser.cpython-37.pyc | Bin 0 -> 14118 bytes src/lexer/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 163 bytes src/lexer/__pycache__/lexer.cpython-38.pyc | Bin 0 -> 8956 bytes src/utils/__pycache__/visitor.cpython-37.pyc | Bin 0 -> 2359 bytes venv/Scripts/Activate.ps1 | 51 + venv/Scripts/activate | 76 ++ venv/Scripts/activate.bat | 45 + venv/Scripts/deactivate.bat | 21 + venv/Scripts/python.exe | Bin 0 -> 515584 bytes venv/Scripts/pythonw.exe | Bin 0 -> 515072 bytes venv/pyvenv.cfg | 3 + 31 files changed, 2028 insertions(+) create mode 100644 .idea/cool-compiler-2020.iml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml create mode 100644 doc/report/report.log create mode 100644 src/.idea/misc.xml create mode 100644 src/.idea/modules.xml create mode 100644 src/.idea/src.iml create mode 100644 src/.idea/vcs.xml create mode 100644 src/.idea/workspace.xml create mode 100644 src/codegen/__pycache__/__init__.cpython-37.pyc create mode 100644 src/codegen/__pycache__/cil_ast.cpython-37.pyc create mode 100644 src/codegen/__pycache__/pipeline.cpython-37.pyc create mode 100644 src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc create mode 100644 src/codegen/visitors/__pycache__/cil_format_visitor.cpython-37.pyc create mode 100644 src/codegen/visitors/__pycache__/cil_visitor.cpython-37.pyc create mode 100644 src/cool_parser/__pycache__/__init__.cpython-37.pyc create mode 100644 src/cool_parser/__pycache__/base_parser.cpython-37.pyc create mode 100644 src/cool_parser/__pycache__/logger.cpython-37.pyc create mode 100644 src/cool_parser/__pycache__/parser.cpython-37.pyc create mode 100644 src/lexer/__pycache__/__init__.cpython-38.pyc create mode 100644 src/lexer/__pycache__/lexer.cpython-38.pyc create mode 100644 src/utils/__pycache__/visitor.cpython-37.pyc create mode 100644 venv/Scripts/Activate.ps1 create mode 100644 venv/Scripts/activate create mode 100644 venv/Scripts/activate.bat create mode 100644 venv/Scripts/deactivate.bat create mode 100644 venv/Scripts/python.exe create mode 100644 venv/Scripts/pythonw.exe create mode 100644 venv/pyvenv.cfg diff --git a/.idea/cool-compiler-2020.iml b/.idea/cool-compiler-2020.iml new file mode 100644 index 00000000..e7c5b03b --- /dev/null +++ b/.idea/cool-compiler-2020.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..ba00af5c --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..4decd4ab --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..9661ac71 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 00000000..b0d290eb --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,281 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1600909677361 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/codegen/__pycache__/__init__.cpython-37.pyc b/src/codegen/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a6879b6c822ccaaeab60a60ad8954d2a07d1a1ff GIT binary patch literal 595 zcmZuv%}N6?5KgkYwQ37KfQN!2?4eb9EGp{aFSUiXdRP`h*-a(5yIGPbD%(?i5Iu>n zv{z5Qf+r_yl^&e%4KtH3nfXGF>h%=_=6v4LH;mASNq&t$Z~#!7;35>^7$w-p*u*3z ziRD`mTao>Yd^>W6$gO+=6S=rp^ZNbnNOYX=BuHz(kEj!k%jvP9}M(rIA}W_hw#chI1>$QYcc*9&}-il`b3=ij4WI zp%5|Ef`&W>29K%PT>ew`j^rvF|GMxxL04>bML_A*8My1?LEw3TCz6cEOa|tjW;oB9 z?Va{cpkxT;h~2Oh4)By~N?X}uu{JN#jAtz7DKjsoYTyvA!m8m4K-MAexsJa+r?*Nq uLaLS-bDoq!{f&PqKO+8^<{8RMOGOLLbS|p9iHPoEwhtc%DKk+G*T^^EF`GpI literal 0 HcmV?d00001 diff --git a/src/codegen/__pycache__/cil_ast.cpython-37.pyc b/src/codegen/__pycache__/cil_ast.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..50c44a94e373a1fb97cd4eb1252cf43a63bdb12f GIT binary patch literal 9622 zcmb`N%X8dV6~_DhircS_o%j3cWb&NJWb(GtP8?4h$CJ!t;d0T{=_@-8?UuPxha{DP zDkdyo!E9gyD_B5Luo*V6f)%V_0}CjvsN%n%Snz#Ek5-4a(-O#~EB(~cIrn@z_v&8B zx69>H0?U{G{#xxHBZehj6D1mz~ia{ zt_T;w+tmbk!YJbR5_nSW0Phgq2HvT5fp-ZHfp@Dt;5~AE8N65R1Mf4+xPBPCUmXA+ z5FP;^RENNagh#=L)e-O!;W6-0bqst=?2Utus}tZ8!WHmIH3gm$-VQ#cPJ>SiPk`T3 zXTWEKC&6dcIq*5*9pLlo0{DXPPVhzbKKOm%UEmMYCGaKT-QW+^W$ZYj74Q|| zz2K|r8u*&PG06eW`z%#-J!M9ZvTopb9o>h0icZ3gv@2WZQ zobVCwJv9%W7d{I9SltKT7d{4FP!GTlgpY$4)kE+@;S*}cw=cSy?qN$9*VW1E%7>qGWj}pYcY%aD_T%}F5CuMi~_>B;%7-pVsx_4>#dG4m6otU zR7Q{EntstUX)Vb}rox!-I9BXquvMWw))Y;J969!(yPbB!Zklb0pZALkw?X`S0pa-F zw(>fIyh!_6WLzzB8+9~0%PF?ZM!ogCt}SP%*|u!m5g*o6)>CO!RGNTg&8Db#u;`O5 zyK&rNLvtGsG@A%lIF@d_2fJw3(~TTix8f2b-Mj&@OK?T=B}$4!?`j^0{fZ@$uf_u( zvEpQmhkSF$4|4Q47kDTC|8bu1E5!5|$5d&?vYKmd%S+>2F5L3kDpqULp2x{3!?K;6Wp;GK z?|bw#&B>ADFMigp>z9&S(ZZKVos98f zLwo(M8~Z`jqF?ME;&?aq@xX1Y&=0`aB^vZXC-;QDRl4ODO*=xGvH4yL`63VOt9-lZ z>Kn!5VR*O|@<<-oV`<)cVm4KT0FS_YHRO)m^cfdbF|68(Xhxpf^3ytg{4-r-cG{$qmVc9z}^av?YfQ-+7ygG2{|JV>?}Xqd>+BqDcD{P`6BoD z8YGF!bA~-5!)bbsH)~0oPrvG9I4GBt_Otjs)JLCTA^F_r;ZS4kLs>l8Q<+$a%%|g5 zXx2+)a&%E1|Iec6ZuA_K|FMGW)Mn;^ryXo&w z$(q5Tem!`H_JV=YMA&z%n|uNGY})j0GPy^Bt!{F0M(er^i3S{qegNyQLf*(d-Ubo8 z#5wrGRq1#rGZ${(Ew|gc*sb^jF==j_^)uhXiCwKLUAM86<|yo&wCE{KjvRY&q5jl} zHo1-q!iC%5Mvnr*?{oYY6e*{$>b(pK z_n-PY&fj$8@I(CA6=6rO|5!qBzVicG^@Jct7Gh-fCEhTFl#u%bOWX!ZOaj76y!94X zU&QZD&V8}zO5)B7oa_sEq};^sn=12T{1_fT?0lKmLUMIb7t@+Pyd2~~re)srSINojT zW4_ZM@+fiNhOJ-H9&3rX$&uqOEg0=J`&pck3j=l1b=@2J9USc!`LA)j8+oPcHdgGj zu=XV_da;wE$6htt7$r;WvAQ==AOi(1VA819F8XsLNddlu(0semPmSNQ?xDF+rCXI) zdfbJ*-_WL~2RXVPOWIg%%JeAK^x16-nQxd{Imvd97$2iP`aX+3ljq;F;$bnm^@t_L zJna3BHa#)Ok;N!K?mWeJmuB1T>0{@I4niMXkUzd9$Yf7lVrjAflYa!J=j?{~zf8Rx{C?CSoUwmtL9*`qPSzJQO zyIta-VLAo0lUiLV?Z^5FJome)fA?$030>eQRC&8hXb!yf4HnZZI4+Tgw4UW2yJ*d>NwY0#=A_&*2_>YSZlAbZ+F!M)6(O{o=Bba5SY6|@Dd9(r&nGf@JW$&f@@WqPVV zWJOrmzm)5q_AhwyrCX&ezVJQXd-;<0zL33I?IQyF)cAGzgc17Vl2;=T>;m)`a4AZ$ zKp7rj>|!EF<_$cEz0`j|13wMUP+0j3OcY|f9QAs~eHk4cUvSNhR8Xs3GZSA)l?{zy zD)Af@tOD=>5kPN&Gtg-aT?{VK7>~Tt`$$bsPG`rerCg(jCy a#Ll=ycg6g6Ces_izQQL%+D%l&Rq_IIy{d)) literal 0 HcmV?d00001 diff --git a/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..371b1945132d19430e472c2a76f339c7e29a4ff4 GIT binary patch literal 5289 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 e3qwGB)d{J+PjmHrCNP4}Aa`Om}p z`lzD(NiY4Mioz`;$t zQ50921kz6+=|~!qH-l^u9a`#hbmc40v^`~4d8YiP{Gx0M?$$t;sY?7gKH$%9;pzR0 z&TM5vSjvWKYcF+69H1*pd#*ea8z~@ZJ98lHjHUlBtQ2rP#tq;Gx4@mvBQ13t!hK7o$|A7^|tfu90?it(`o zJ^_4!@$m#c34D_AQwjVu@Y9S>B=9r9&oDljz^8yuF@8FMp9OxF@iPhh9Po3DPbKj4 zz|S*&Hi1tApJx1AAGgkf8q>W?Tee@{bY;8Y`?f6Iblhgc@n%aaveog|Lkb3Z$F=Mx z5t)AUBp$9Ic|=AF#iFSEp%m3X_iSfV5-L;u?A5)w8?`0(@{(Jt*YAFVY<*$1HaAzB zbK5&D$CkCG>pEAP(c9JQ*REfyd9n%EvbXF`Epi2~)@(VEvh@fn?K}-qT+Wa>tfSg1 z9%ED`{;DWg*?4fIbQ)=rdb5yO;$`Sgd zZl!nC7mAhH)sP#z`U_=04dZ1ifiRn7RQk~%$bw%YdFPPrD)+|s#IMRrWfzjyVf{yH zWOV3npam?imaYZD$2+MX8lOz^Dti+qw4dzA**sp^Lb}oeICS1a3k^6Ccl2SJN{W?o z1lb$P${bJx(7u`5rb4?j^JxTS)3*Hw zuJxws@)R_b6O@rn!Yo#Q>X7;=B0!<17k)OgJntMfEl5+(E>wqGmEDzDM(YDco z{gU}X!9|{q<*>w<7*y#|TSc7`Qv+I1t1J@NcTk9<%t=Kiv5k0y*hCS^7(^&5yPw6} zo0SB8-YZCju1~h^`@>-D#FI~uPL?MhMa@qKYR2yLQ3QQ95Y)?Vb~{bK<#yg6Un(SD zdZ!^9Z7<038veK;y&%`>c)slNXPzW4OvEYTwLD81tumo2N9#vS$7$5OJx=vUyhbgE z&4@e-hYc)}c&ht4g^UV(Cno=DU%n)7ljI4*gnxBn!mqr$@Ea#4{EK%NK6`}lW3ViT=`Jr3r>hH~ zTQudg$PF|1?e`aILMZLGmhZ$OHTVAZFo}2GU!nnta9j9oG(@8xPKOEo_QQlOEtltG zp<3J98YZuDguHif;VcHb&ZB)LVlrJszd<_Olnm2h^#~pQH}>k~)y3n6#q}cu#Dt|d z6$W=pd6<w#IXw_U62P&rqxKk7D|utpLY z0@dyCaVF4zdSG{gkrnA~VHZ-tkti^#h$39d-HG-tAwG|j6PL0pv}Fm4OLX(VMYHUA zt*uVjcE#y>VT12lov3K6`3=cnX1?{93%RmG+a5oZXOiUQO|BV5W53m$YdB%=#**8x zxMpnrDTZ>WDpQtQTw|`&Eevg&g52TD6Pi$u{K*g# zx*^6hNa^UQ;rRhc-a@zW29$0O$bBY}JUU|YeSvZyz!Xt|kMKQ#2(*TWTY@07LpMCO z92|85^G|fT v8UHaYB!%<}4%n%#-*UW=Q)AJ+Pl>L3pe;9gtEG*bAvb4f@O&4Q6NdU9P^JVd literal 0 HcmV?d00001 diff --git a/src/codegen/visitors/__pycache__/cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/cil_visitor.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0d60fff8b7351a01949a5c24faa9a9c10bda5e0d GIT binary patch literal 11193 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 QfZ$MvIn1OcWq2I+2V(Vm$^ZZW literal 0 HcmV?d00001 diff --git a/src/cool_parser/__pycache__/parser.cpython-37.pyc b/src/cool_parser/__pycache__/parser.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7940ce3ce02358e3be79ae724d24abda27bac812 GIT binary patch literal 14118 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 Kl+3(UH2(o4wpY^t literal 0 HcmV?d00001 diff --git a/src/lexer/__pycache__/__init__.cpython-38.pyc b/src/lexer/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..faa19c296c9625598aefe701f99baac725c6229d GIT binary patch literal 163 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 nul +) + +set "VIRTUAL_ENV=C:\Lo&Lo\__UH\__VER\CC\Compiler\cool-compiler-2020\venv" + +if not defined PROMPT ( + set "PROMPT=$P$G" +) + +if defined _OLD_VIRTUAL_PROMPT ( + set "PROMPT=%_OLD_VIRTUAL_PROMPT%" +) + +if defined _OLD_VIRTUAL_PYTHONHOME ( + set "PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%" +) + +set "_OLD_VIRTUAL_PROMPT=%PROMPT%" +set "PROMPT=(venv) %PROMPT%" + +if defined PYTHONHOME ( + set "_OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME%" + set PYTHONHOME= +) + +if defined _OLD_VIRTUAL_PATH ( + set "PATH=%_OLD_VIRTUAL_PATH%" +) else ( + set "_OLD_VIRTUAL_PATH=%PATH%" +) + +set "PATH=%VIRTUAL_ENV%\Scripts;%PATH%" + +:END +if defined _OLD_CODEPAGE ( + "%SystemRoot%\System32\chcp.com" %_OLD_CODEPAGE% > nul + set "_OLD_CODEPAGE=" +) diff --git a/venv/Scripts/deactivate.bat b/venv/Scripts/deactivate.bat new file mode 100644 index 00000000..313c0791 --- /dev/null +++ b/venv/Scripts/deactivate.bat @@ -0,0 +1,21 @@ +@echo off + +if defined _OLD_VIRTUAL_PROMPT ( + set "PROMPT=%_OLD_VIRTUAL_PROMPT%" +) +set _OLD_VIRTUAL_PROMPT= + +if defined _OLD_VIRTUAL_PYTHONHOME ( + set "PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%" + set _OLD_VIRTUAL_PYTHONHOME= +) + +if defined _OLD_VIRTUAL_PATH ( + set "PATH=%_OLD_VIRTUAL_PATH%" +) + +set _OLD_VIRTUAL_PATH= + +set VIRTUAL_ENV= + +:END diff --git a/venv/Scripts/python.exe b/venv/Scripts/python.exe new file mode 100644 index 0000000000000000000000000000000000000000..1b4f57f90933cc901c6c89e3f3fcefc29ac77e67 GIT binary patch literal 515584 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�J~*0wjTZN<&T%C1%F${bfF*e&H*d$zOQk3A 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 literal 0 HcmV?d00001 diff --git a/venv/Scripts/pythonw.exe b/venv/Scripts/pythonw.exe new file mode 100644 index 0000000000000000000000000000000000000000..b0da33ac85db0f58b2a82ef615dafeccc9047332 GIT binary patch literal 515072 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ΠqJC2Sg`z( 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

cRW`G%+>K@C@xwk) z2He-!En$8v4D*k$q)-;NJ=h))>&0UCM_Sdq?&SlF9RR(Av4YT2&zsd-;GIhIZ*$m* z@Sg`tKv+U!SdaHv+%9Y0dwF^JFmKF5ylfUbpF68EsInQ$qWt*0r;hQ_T!+T%8)K|R zTan{zd4sZWdzdXWmG_;V#%{y4aZUVLle8Lj%XNlZSvIb|g`EPu6z|Ki5%}0p3;Pf< z{YHTwXOLxkQ0*ku<6KylH4Yyt4%;8>46N`k_bU@~baij=EavzhgZeh|8mb4&yomvAEn2*kL@Y?+mU8EcY+-v-{e7P`{gD%U-yy821eOLBAmXgr#8? z_A8Jz7V&}b{~JqqnQk~I?jy}eHRt7A?Xz}*pNHtG_6XIxs8vq438xw4D%KVcv1 zXVgD*J_R@oM5yFHyZ$1=-uSBsKMgn%L`c^Y26(vFR{h61_{W|UVLJn_6?PK*56iHB z5MEC)Q@l>y@ch4(dnSB4d`AKo*l8i7`F`^Ad?HZDZWG2>(<|Jq!8-+&hHg{uK8rw1%Xvxx0~t zEdsTW?cH^axo=hJ)BJfm`T{fZb|~l1{C+0{b5ZoaxUXppyKS5nR}oW=`yKOjN~ZW} z{=n~{f>|uCi^X-ZX^|EDep#ij^kHoG%FpQ5$cx6(RLgZ@TnEg#Eo)hjGoZq4abnJ0 zfe!7@{JGvJ|3*FVwu^R)`@T5bcg5kpi`uV;GCHY@B8|Nk$;aV*=1Z4{Z*E4FgL8T+!4+MyP0wYg0M}4enL*(a>woTV&x!b+yW6|HFV+=vR8`qU&T0ES)-?G%c|Kx4nIH$e7zV0(iyo93vt&jc}_ed+lo!3(bVvpcjec@lwfAc`r9QUHl zF$OfpI&yQ&&6+3T6;4VQ3jeIHRQ2hpPf>n#*{jk1ReId*KRXV)<^#@r=|Foe;aEqe<+ijXZ@jwrTSFcl%D2rl-16`BJFD)@6tP#eVbO*5$w2KYFrf zr7wkl#lHVred0Cj+|}Qze)r!+x`&0`2GV@i$k)}E*5yw6rS`z{Zd%h(e*fFhQ(4UV z{!f+Z&*C-vo8^BuAOGq2RDS*}UbFvSls&D%yw=9T%0SPV)?hq^J=+?KQV5%I9bso7 zTnT8|b%gDPg|!sWch?d2EaIevxZT$gwj08xfQn3EMZ3e8n2xrGIUGL|LUoX6nBS{0 z!_)Yp{OTG{_}C}s+A3b|_8*?tc*>ine*LfXz zH20cq?j|pG4``S<9;wrCZht|zx51e`TubNmRDRn(=fzS$#dTfF*NDZMpSotm3tns- z=o#}h#x}-zaW*474(pr_x$c?7*F0V6cirs8ZUg4e%MzCVljz) zPr=@d_PTcmvJjkI^hG)BTfNx*pdIpBqikMt3n%+O4jnjvxL&RODxKP1_hPd_2aI~4 zy)`Ny*}6iC2R5zteM0$82lf$Syu_IeZX<^E25IA->~F{pFP0Aa)tF|Y+}A6V{qFx( zG>#j!?9wm}7|T~zINk@D=7fBlsj)91*Re4dO~ct?X_s;Q4C@fr8P*gp)Ft)Ln6p}F zzZ82n4bu1?FF*O>(M{RDvUMdZyxw@OwT7+YQW%APVmHn$IDF7=c%$DypXM~Ir>Sr% zPuGLWju#m0ne3Bfr4xm9)rCsO+~?QjZrJ1E_Xl#nOVv-ESXce3ax1JW9OVyvM=18J zaQ4E+`va_T$TRCUW54dogR#t>Y|h{x9*?tu=u_j-r^lmDm*)h_RDW{o35*FKKb*m) zpB(#Y?>ACDk9)iC{kdLU`E;+t1o^O_G@L=e>2hJy?cFww>0fw#FIGP>ke`cyiL)IS zyx0$*4Kn>J;9FnxVsD%CBlMVR3HM^*+XHcCt?sjtah*_B%V3XtvsNT(iScDIS?a_+ zWUfQgnW8%CD-I9IG)=k#=h!CKI*Uf@MF}|UA~ZZdP9)vJ zVsOsRe3p%_cS1+5`G&GpWkY6LR`U|&uTZ%wG{>XDnUUK~s5o<_{A3*AkvO}I@kpHk zRrWLDSB!0-k*50cG>+{1*^5RHw-)2;OrrBMUL7}1l@VL$)ujl9e`?}8%4-fTbV?d;9jw(Kto{|+R zcS6$le+&PW{Gi+}ebZbE=jHf(OYFOfbG3E38_P}c@O=>4x2>=CZRvWOB@Xkz^mxSE z5a(JVnfr7h6pSC~xt1NOxK)|{Dyr)})dl5M#V5mwecavHCw~w7v8nq?Kg3a_v(ccbmg{-Z{j zvyex+_W$s&>w(vQeXQMtU>w1{`bs=Y!1Zn1=agrDm5%9N3T-P2Z6j)XxZTy}RQ(z2 zOVzC>HRKKsrON9YAv$PWTIU!!+?6^u(`75Mwg$Q@8bWLNor+$5QhBtcv z6r50VF6Jrhd4vlc=gm^CBWxdpy90FVb%cEb@qP$uZ3^pZ14@s4tpN3cv+lBPDpcLX z#e1{*mRQ%>=WWzaQD5k&b>7h_`UI0r@UxWBm_J2f{uIgL_q*p$A|9NV#2K+T%$xby z#zLH%9I?5Z@jGpbnIe+Z+Mih!Q z9Ga)$D6Fgh7xCg=TCTNt!LP$iZ?+q>RL1);_+JgO)Mu(ouSVM;drI_m-5Z8WovXRR zmf7Cyeb5GTo{e$PGZT&&%=-;`#4{mL705T&jp;c^Rj+)G;5q~7%7e#x;&VdO9dyIn zvWmlu#(eQUz{5Hn_5Gg42Njp6>x}Ulc~e_+>DW{M<0;K+#pNlyCpVRE)n^#vRDOSk z#%okOW|VQn#nH3OqVFX8OdSXUXTkEUmRaQN1r#%6OKJj}UYTyt5PM=jhA{&e0_X zSHxkBv0)OP)2gf)j_S=$^;SoH#dX4SQt8XR8YM0BYGirPOY}x!?J@<=h5xDljktGB zf7GjK(kic}mStYX`6Q)nLmbBO*xc`wJ&QgJ)WTeDZvUorFQtElJWOcKvEP#$Z@Zyb z|G;|ucAOveC>x&Nt3y{VJ218(Bd^+#vQZEA(dQ*^HXqd6TwZxCUt8Ht{cMf3m2zdX zpZo*Q&+dYao3E!lCq=Wk?cz+nYi*YLUfQ4L_no!QL5t@;Bk4>?IGqWp@g$rjJOIyd z*EspkpU3go*PHvtI&>JN-Fd3_f5%P5OKVm%?wj-@+D*f{+l{BR zjdkwHpU*YwSgUCjfOXfNcvi(q&#F|YXAZd@Xr0DWeE)WOlvx={i~m_fT%J z=j7f`P;DUUpWZARbbqZjfM=gEUd0uPrz*v|r=eZTb{W?J@0G}|LVtN0=j@$~o+;(} zujl!>gs7w5tn?diHr<>auNTAnJMdhLTywSa_Yz=2SLfW)LwVI)*IXz3{3!PO@ zq7mzr*RV5JT-Qpcjy5XVx9J@lJS^tMSo1YJKj505yY~m(b5>eQ7-aEbOF{chy5oCN zj#|$Wxz>=2u6VP-SH0OArt3WRJ$04CQ`!0a(*5oSu|HX(tWITTUtjWO%`cCto8?;R8v7=5zRmF}J#`A{+SGyP z&@cwjb5jkv)ZZTH^sn$M_bF5Fk3o~HttU_QDa#<{cVcf%)n9mm4{HHx(A+eqGUoYO zdK26eHpcUfv8+BnEiLMM8vv6%F>sPi`1tH5*jvg|yp zvK>=d&1HAB9Z$BP+LPJt3}sX8!#odd-^+)kfI6CN#gkp-AlxcYUsG5$=GEG3k@@0% z&2jWK4%kZ)?v>NRU42bqiVr&j+H8t5Jlvm!V{R5+h&m__D8qWBjqDpkH`}85um^P? zwnSc2AJ?}4DOr{^)s-)m4}(5bTY38?AJ(w94=XgKugcz+ z=Jgehu``T??#DZ&I)#j`(Lao;-9KcIEmQnym^<+2De;a4+*`@>67;4Bv42SZRBpO| zQ|QTdcv}z0^I2hdPB0W}&-Gd3mGZqPy#I?rzl(QipucLm-L-a9bA8TacVf@*qQ^Z$ zypF8a+{@$G7D?yQ2C_(tCgR~1fHNijct1o^e`YK4VFy8FDe?@7LFV;NbN_nuE+SoC zlfrEIK5Q+>rw^`a;Kv#`H0Gb(hp{A+AH(4l_+77iTr1p*Tjnw2GqUB_yKEMTcN103 zW&XPtvC>>0_E??|%japMZ$5rE^FMeGcUv;mhb<&`)GdWE$~CT|Hv}R+hHDwFWu|z= ze(Jjze|LD?58Xz42y}0T{alPXHm*y@KxUuh!=3=e_C+3A2eQ^x{qUZQ0jxp#&CvBA z=)x3+>fm61_9m_wkmJL8&~?bWQ8xDds_znZan7S%l#*ST?C3AcRHt~3qXEt`Hb@M` z9trKU8qPM#en92N;~E*YDF@CVWn*7E-3M*Uo6)L;2y0qf<@q)2+pB)&Pu4u1S>eMD zfZjLtAAh!1vV5fvdk1vXbe+d?m~|O!VZqcF(EG^x0}Aktb2>_YeBS9{ z-B|hae#W#esqV)qjImEreI>asK)&exH^*Zz--|}SgT4p%u1&Gl8kq{eHX*EyqbX~H zxn>)@cd3m9>#@#;6|v>fW!yi)!Xi*MKE|!|vZ_A*%9B2KRa~ z=XCcRNz8LRJnO6UY#0O8oWP^~gn7~0zty5p)f=x{)A3d>;buO~IH%?@n=DSI0dWzrS^i$NlZCxW66ay1y;;GU!(6 zq0Vy1`&w0Ao)*sj;oU;w9-FT-mGSq_U>@HD<6@JQd|i{?ZjxH74*B)9_G)B*5{5Aj z>v$+%8FYoY!+@r{@tzCZ zU&J6^4Un(Ueu4Y_oIVw*9&DsjRW8zlagOl+6)|ozhYj|}-+8(| z8t-Fz&6hohveSE-$IG}QzxCnr3LyOke=p=Z_AV<#ox0bm!QiY^?pJ*WPyvP;DM(_wcL(t;@OAU3#7MVf{c;kbgp1x9<0m znQShuHJ)eAMZ3j4D?cq^^R@cO{;nK(`!jzYe*|nJ2xpaY{aC$YD38*=Lhk3w>b>j1 z&zzrYtT$RIKlDDpmEwJXDWp4f1E%1LhSKi{?`ce!A6OA4~cBA0lds|-j?V- z)4wIem%R%58*G5kWdoE(U&L){?<#-dJ+d{|VD65@yP`p5h>Oq_mx_bl--?P+an!X> z#r^T#<2wD7&YL3)-h)*i`BXoLFBUEEOTfFP%|9#^WVp#$@e z-fvGoV>l+$B=?jwce?AqXVCk?N4VXdNcUrHtvKgt2zL-}JrIuGkF9!-vihT8z*jZw{#9)aNBuNiPJe{RJ`bwN2(JpbR z#OEcxCGm*FDv5zIz66QAB&JHtmRKxtk;HWpcS?Lv=JS}8FG!3SEArb*;y{V%60;=c zOPnKdsl>Gsw@56Lcu?XoiPaJVGemmP5}QlxEU~Y|REb#<9TFEwd{p8li8~~ICh@q$ zYKi{iM7j+nc9hsd;vk8)OPnh49*N5&mP&kH;%gG$m3T;Er9{;pc1SzhB=G}@%73Y} z<2e%P-Soy^J$7@BV_;r>&X}CSqP!Ueg9|3l7?n3CXDkb2a2h!?r*QU|%>0>fz^X;< zuw&Vn0coQKj~L!LJ3pTt@Ir`Dj?6;GOgqIimi^%~D#y`pMnTbx{G5J{!u&y*1=;yI zh4^d$+$l)m^h^iR9Wo)ER5Z`VBy1U`PF;a%zQ^)-`S3w^ciFGvUB?7W)`w7baiTB-Yf(}J|`odQHZ8s z3gURdGLS277z&p;h4MFvLJ!R>attUeoKeWwcfMmY^Bf2@3RmRk2;B}SW{X(A{24_m z<#N`qFbDCwir)u|QqoQ8265}WgvEK#b2ep#tCZa`AZ_@7pSw(;<&# z<4NL$fXMpvAJZpwu!`*ypEO5)zf8MhW?>GDj=t}~_LJMt88fEMv=79`LCDw!6gUd; zLBGS~GbRtlnwdYk;Lf~)Y{p*k9bJ&iZ8Up8@uVC(1xFP+V6v=;Y@kl>mA>gYh0|f1 zyt;&r7J3gZk_wwqI1rjfzETTwieNx&u(0#goI>6R3ML`PGm+&&7Ek)FX~BcDS%See zJr~uM4M%p8Tu03=a^y@;&zqjpr-s^fhU8}5y$>^#$K2PB z>Un3v=5c;tUSSc}7O#cn+-*3z5sGyzdq9EgS+a4*>T^!x}-H?DkhM&5JGdR^^EeW-p{v!@vh`09L<-Z@bS4&aW ze<&!m{OeDTfPG*Ih5#Ge!K?9D)6=_d*$t?3#Y+vJw^;NMFHK^%WuOSNZ>MMa!T3 zyi7lD`BUY!c=?byyMF7je{EYZdqFelvH{=Dpx@Ka3Y`B`#Us}WtV!89lc(h7O`VoMyDvm=gD8BjJI0G`&Uto&z(`LL|5ckNJu|5H&Li6 zf97h%3AD4>_-Z(PO}&7BD|>>>mkPCazZl=kB|0UB9jH0(he>yJU1z<|n5@j~iJ5f6 zol@k;PD$Zjp2GE~HMQZmi9;Aq{*$o$CA~fR+YJFcU2iugAT#JG91n)oO2^D1m7M4F zGV`vPA1Zf_S}c-f_mrMF3}wwzI0tUjC+6Yak@SOJWE6Ik0DAK%UF4L%Gw7nBO#`0Y&krslk`5|oQDhk(Idpl9%e z-+&f_uK=C~m4L4TKAZ%51HT-&wky7O1HKd((v7j@;KP9PL2JP80UiaVSNpR3?uoFJR1Vr0rdt?*c#Lyd|Tik zP)G2D8K5NaYk;qV?BI6*4}eN2{4MwnH>enVf8a#WV(^QB+d)IYJAuK&P}krSfL73Q z@F~FZ;jjnr6~JmxDR?#l_tK#C;KP97piSUc0sjDP2JZxBrs5j#cHmQ>J>d5Oqensy z;A4SBpcCL7z(t^P@QZ;@fDVCQ1Ka|t0KW~m6SM>TE?{OFYy-RlxD1qi0k#c%0ptLG z5cmgZE_f%f&;;=Pfh$1i;8y`(1X;mv1KyR6J_P(+;76cA;P(O>kH%g; z_yk~IP+Rc*fe(Tfg5L!E4zv`!|5(^|2J`^FCGf&H)ZIncHt@o&C>Pu>0lQ2<8-aTg za3kmt#RL2evXfML&0yo@;{3FaJpzR@)3q0Xk&<^mW zz(vbo&)^pWtt(J1$PeLjE200(s5@Zz-;g%qj08GXp-vH=a0#eC_@%(bk08$!4{*(6 zXv^RUvsRF8 z3K;Yv>>uvIz`10k5GhP_AI$SWq$e|73e0B;3$ z+lM$Q3~&QzA;rI+vA=_Sy!==xue4QMs^qX!vF`~rH$wYgtH zC!jUpOMyOLq29q0_5@Xf?+x@l1Um%Z5qRHWv^(&Nf#Z*$KSG>qfNy?{wgdMvp!FMu z&I9oSzxfvW1YZGc_#Ny4d^~UlC?C8XxB%22{6gTPpmgx7f!jbs!4vKQO#n~dt{q(g z8vvgHJP%q7KJ0sZqZ||qJy?M`|3te6p9_2#WCgz*_y(vy_&q@HA7L}#BY|^3ZNbk4 z=KX|p!P|k;e+KUh9(c#E&>MIMFzF=93!d-{s2Y4V@crLV*M5i}_{i_5NARnG=PQvP z@Rxv>&caTJ2ev1!r3_= zatDt0wy+6sr}JswfmVa3GiY5w3&EEGzXojvZ}qdVd{8mU=m4$&Wy5_9@Mlmi+}q;( z>{L)G-1C83Kuf`w19#%ti5}j5Y!~nn-fMRPe1Cjz`xDSB2(uSB5#OCGLp(NMPds0+ z7-4z?_k-fW9|Q*BoO=cMLBJ-F7Pbr5CIDXo9RhEQ!u!HOuOOaSoX1Q7SrI-1xB*m* zFo%G%V^BtfnG5uawXikdhXU^dX7KBx-(LSR39pDq|-Y{1n-;0fOXEeGEb-@F?J>J2^v*csox%LShbyaUu9 zyaTux)Dk>l|0bwA@Px}i>EPD@ouH232^%-Hu%X}+fOmnC!0!h7CqSR%4tyHaKN|A^ zVBcm41HM1-eNa01J-}hjkvH(Ez)Da@@KwOsEf7EWxxmYygNz%M}Y;12<# z@E-TQ6dpJlR7&B2C7|FC^q;^@AZvZJ3t%~DHO{aSR)aPNq74EQ+97cUqyJ1_%Qjl8CwhKNQ#{3GD@8l7P*-;eGkwTLS;+4%?>qf$#Q&&cW{nw&?|X z1K$?-DCiP}A^s-h4Z2+o?9&_eAA|Y@vSbUJ8;kk^?gFicJK-D+`GNafU@skcfcsM5 z%_%4s+y?=@`yfuZ`vBhob%gtF;QYR5Z*V^dT;305hdbfW{>U@j2?Gbf#^4?d{1`L{ z?(qXr4kEY{F1;D~hx;qQ8H1pIxZ8mp1|zRIm*T zfQ3Wxj(@m2fYxEqE!+uDf->OVd$@(20j-C7HSnbouqC*^0-TYGe8b%i>@X7Feuev7 zV7D|2YYV;yuo83vx~&3k8-@CXJ7Iphh3$cRIq<>JNE_~ZfD6W;eZsvAICm`i7r5^L zIx=9Fa9;x)GY+-~_Y7dft>|;$9tkW5Ra2b6rQ?xj@JE4l>JIL0fyY2c z;eH%gnvMPk?i_P0%ntX>z}(455AK95r@$uRPIwIDfctUax?I!|#gmUZnvO7VcL2Q# zP+#DEfGa_fXv?dB&1WDC`i+*r?Vyvm_7z}XJMxO~{ej1cD1P9=J5UGU30oGTe?~ln zyFteh4`Fr@>Td1 z-Ouy<@%#PtvtOV6ez#`b*R|HV*0t{Yj{9C2M3Li&wBAG=jw7;)RB#-T{ywys`XUGU zGFG@cyhEJuEa<$MxsAKPu3M+5bO2W8yWpIN(V~Bgf55xtp zfvW?!7I@gttOGmgCu_SFv?SK71O70I__BsX!@DGbbuSB6l7XyyRj_*~8~r?N1ADWIJ{1b zX=fGe9!4J-b46%QobWkt^DoR9#^Dlty_frwHdMhe;anHaYXBYhbFDe1D?D+4`t&Oa z%0+N4`m1u3HJ12t%n*2*b((QwY?I)! zGpw1k#}2lWBpxfA<@ErmqrYe1v~$$qx>&*wq>f|Oz+Yl$1LF`5$Hp=y%o77xNK|QO z5%fFHy+`}~q1px3BCd-%yi2qg+bp=|BI_{Y<^p$JratWngJa^E8??s&PP@i66~`Yg zOP~(zv4agaxF>0k$mS&4Nqa;tOQ8F z5_8TaGLI;8E|FRV%zw@`>^b)-vEW=8(6*500?uUzn@9!cYKHrYXcOlOhng?AFF2PL zOeY?k%jgx)Wh9@+=EK3o+^5Vd512v>IIrSsDPbwGU~Gfo*AnI>=WT#%%IFu5b%C$m zaGjX*#n7spI-GYtyj#KeaLg=d_@4VhJTJ_xWUZr*d2r1K#*K5iz|N11Gkp}QSwm`g zEc5LM)cefyIBn2}*|n^1T;CkH^b1aVY+!o>eWyJ_BYkh8FXDX-B`wsUJt6}oj3Mm_ zhBX~LchDY@1ya(26YVL2&t# z5p`&fNX-fKllExA8gfazUhu#~>d>AD=rD1oN131)LAMm%%MFZ z>u{|)8=+mAoxZIgKw8swiTFsoK zJu2`5NuoWMp!*uyL3=#lk1n*C_BcV!pBM|;qXnyp1MR7SC2P4xw5JT7UdM50PYpD3 zl@<~>j>r%a$#F#Hk#LS9a^QOI5so9$g~W3lkqIP+;~2P03o|{K8_c~q&~XFvgSF8~ z657%Q>;aH&7zKz$qN z8o;@!FETig`9XWaVG2>CghtRvAJ zUu5uB=8|}PIC7h`U_*T!m`x(6p97t@Q-}I4uuBMip}s1-K z=Rs*fi(`7h{t?VSuIWJ7>sRIp?N@>Q4oM4Hw9Oc1lY#U-2QE6y9Kx+(DH(>B!F5My z53dPbVH2sro8k7O+^2X5OghH%2=zs_9cOOfijmxF!~hS5pGgDt6;4PCL&?B_Tq8Jx z48twqnv*!m*B?p%r`sr1-PGB;1MvHIN{B3R2?C`(u z=_T&%f`BLXGi(#W!dVF0zFf;}UrK zCf5T$14ky&NAa=nClW%rD~urics|Tb=3c`qVDK&af+xW;;;YUahFwy)cDOQ}PJ(eu zc$OI9v9L=j^O(mfKo6otxyUpUhG)RZN#qP}440C}xWaSRA7X&%nj0jm%+Vd+&e>gPK0CM za4jh}fIh?(_k{<@96SPEAx?M_d`2GQHBk92$H7IK5=Gn`t|BV96Ffi$;(4%%48xnD zS~+8aTR?k~kGsIrq=vCN14~H*UItYwm=CxX+(e3TUwEHX;6>2#9rq*sN`g;_I-U5T;zmG9)nvzPZEK9!K)+;Pk=Y77#}`}wLNx3o{PxNskxRO}n4)A9(9}k6BNCf^Ee*cNS;Q6qYIN)`# z`)AfAToGy#58MX6C&73X>{-j$;i}MrDC0+9VjX?N8=z7>>lLmHM-p>f2hJeA_#F6z zT%zyAu-g~bAIcTs72-RLwF`PQa78_lkA$Xe zTt~{yVH?T9CD5Xsc|skL=ZOn`3C`_c%<=hfj36WA;07Y4WrPY`WIs6>;fz=Z`Vn8Q zMJy~QDw?cCP>nsOswh{7(@83B3EfDUc%xr8ey$OwLBzBo_CA)_xKGQtsD9nK@+ z_qA-EQFAg=ghIB1NFV2!K84a5%jg7IVyE^^>lzRw)DgAYhPo)7iL zG5_)Ta4ornyTb3sGiUIDa3TrAjo~^HA=ZJ{NhDqcdl+)h;>vKY5qiHsoOn2K;bX~2Ww6B0t5JXl9uagoZV zi~}xmHu1;jz@5Yi4~3b;3(tZb#12<5lM$woaNH7}BS-K&*g>L4^1jcUHj@loAFd>^ zxC7iva`14NM&j`d_?hJ4b#U-x?loK;&Lc(me7J>}Rkej`SBGaNCM`w`cI3rQJ$w1(SA6&?bwkx=R+z_%op z@(S47g7)Jo(3I5S=Fp8a;~wxN$-$%H6HW0hf; zCF6icK)IQ;M~CCXJ+qjHco=*^8mLnY>xd%dcI-8EoYdfv@CEVEr4AgjjBA7sgWHJ( z9s)0rSn6MbPf0MI4_iq*E`b`$8Gk$+ULba2eV9!i;}vkAE&Ubiz{Pf4Q``m)UqQcc z9XN+L;UXumWc+apIKiIlD3-%dBm=J#%N%5cVmt%BBKdeRoa)H^h1@*&Xl__&qq-Xr~bs4Q*Hsj zTSwb)RhUMMsgnU^*K>SaRrv<;7j$2W6d z@iT;xiUgFC=;BoB{;Eu;vSz-xPW9f&8uPox>IgB!y*FKzIG zsYC@Ax#kz{2iyfdAo}=YIA|~P1XqV!i6tHaUlJR<7|z+pa{(?=E1WUKMf#FZTx21M zz>DC_{fwtrAKoTOcm@;>FrRRdV@W=40JoE3JOth+3XEG09Cwhpfg8cqWFYPW4-p;w z2>cSk+{PQA$FJOLxX45j!k8q%phNVL@?dy}gi)Ray$^G)F`O4>5d&Og=n?AU;c(zl z))rjk6k?6r!Fyy5UIc$S#@dCu!XgqfmU8$hl6gXT9o%t(b5R}&`<|p8<*M-eDAsVw z2f}gD%x&BV#{R}Q<0AK;qD|C~fL>>rCwLf)A&AA0ORg|y@R~Tz8P9d$u_A|EWp0bdgufDh>KuV-#0xKiL$0v~ z;s!8|INn+9&KLRyVm_xW0 zoRZ4D!(%OAR0iXW$HVTKtQ*u(gqQC!M{)fu*3WyK7tevO?lV?+F&vmp8*q{7qzKP| zPB}bhiS^;S2b>Fcg~|_^E4UGy{Ft_lrw!2a3D*(#g35V}2`=)=AKa&SJY4>a^Wt_; zsery1vbH>z5q>7>cqqI_tf`X&yA*ORJQS`jVs79raQX|{gU^Q>i58Fbf}up9{0Ovv z$@t?AQ1caQ2<{J?i9Yp3UVDujv4+5xL=jggVLVD%tEtlfH1LD8|C>h>>X11?hWJ!=a-5H2AexD5;-E_g6B{J`@*ZUobb zC7uDteWVWOvZ&_01F^$%KCxzgrfs+j+(i=b2$)Dx@g(?wT*8G~_AsvF__!=QO^)Da zVAfZHi+ul$`Hxq@XHDEM6X+Lw&`f*q$FQC>Q>Ov;Z($rL9|%tn0gr~GTbXCLLmThY ziSjWj9$qqsDy)m6TSW+y!nYUU&!$W4}ZLT%^|bvcfR@5`02Z@dmhcAbk<* z!_y=T*B`|95f7$qcpj8flNHLua#%#NaFNs1=?iWNFB27G+7A~GVQg_5I9!AMIB+eP zNkZ@j7&n4(6YIlcnzBMT9toYbI6m$I^GH4}a)vhN!Y$z&VvJWnI~`d;9T#b#D=UPW zFrM%<@yE}=dn6XmfxnJoEbt>xUytvS$8BKrXvPW`89Rot#hc-|v0NMcG4wHz6*6#N z*hG}YI&hPrtk6IkeBnisM|lFAX~cNp*3g60;2}_U0`+l`=0w(%dlQxtSG)!en8@+* zfp9)i#YLVc=6DY5!5%4=W~@1IJTb>(p_MV$0uO`Ni7YOd$O@W75!Zpsi5JK5hkJ=X z9u7~D5c~`rW=?-`ksXtn8@MoqJ!y!)cpPX$yl|0+NhF>Rg{joXMe2|cJPiI$BJdCk zS>fmm?ln9TjQ}d(M&-DsW}!IEQOz&hrJ#oXhpbv!KpASwTV_k!y)8 z<*x8CQN;6MtQBK|i`+e*>x+lMOOCW>3iA+_l1R#HpyrR<&y;IHV-kj&Lw9n9I)C4r zL)@c7++$-Hb^gBB#x!SH;n5oADCHtMhzG9k!dQ_@9Ov)*i2Qwz5pk~(C0E)rnSBJH z8cD!KP9#~lNL!MRJHWs8P!X9%6e$$cqptSD%3I9%Nn_leNFHX=o-$L<04Oxfp|33+|NCOYr$UZ%i)i! zK&gWqAD4wqqy}$>`y-gI7CcwNG3>A5M7aT6L%i@%m_xLvBl0s*$A=w~73_&J?f{Py zRXh?-Kg`(TmeB18a{%{%k4ZQ#a==lJj}L_3h(F#8OOA10O=qlN&T-~9{uug4a$Tq+ zQs)Gj#+-+>#2T-I*H1EU@%SkAxFgCuHXpW-`M3m5i)KyZIF@iN8AiD)%pt0{$Qlw$ zod&q$G|yigGZdziOL#sUcZTuAjYN`ETx8lgt~;Iq2gGn4@qutHd5n9(aj~rDxDm7^ z4V=pko*?G5Ar_{emlcvI&wyV@wAdcl?*eV+v8r$xv828eoPCA!QfCefBuDUI_@1~@ zrwWF|$qK%>$ffbjIot-CT;;mp=CFh$;AJo)kvWQs%)Y_8gcrfCH#rxs2;)f>-V8I7 zm>V-#L*T$<#uFDgmMG({@Z>G}OZ`}AoWk=CX zk{phO+rU8&X#Y&=!<{6F@=#b$YVZbV`;alg?chD4K>ZxpLZT^`z(J3=F1R{eK<4At z(3@D|zA%<};39K~3of#msN*749}`@pB?-nwx)5JnAMQtOLXv9xIK?LcsRUF ztnnmRMC@>p!~bCY!L^_-amCG_^4hhKpYa-asEGdH@vxA@<3+H~3&t5&fvZUf?jn-J z;v%QK@}_k`zvWKVERB(~PAlinD97>9CktQTnUhYrY;GwukPvY8N?oaN;2YxRnh&)e@ zP%biynByW#NgXb-m1N-}`wnJq3}g=xIEF}Yk#mXGAh|#3i+kWAPm@cy$P`kBi+o0O z2Fv})YTQ6gP7o=l#x=!74k95#853wo>W0hx$pyIO2suIII+8`X$S~qTxyW;5ATBbU zs0@?)lSN`VF7gX8(v)|LB{=6D1yayc=^MS2kzTx1vt;rH_*&ygBj zWI8e8_oX6V5P{!4iu^)!aFL2bxCe2O;@}_~C{o-bJ(}Oqi4^y4F2hBN z`$k*y`xBAk-o6$5o=2p(*YF&EKOj=vuQ+Fd+@BQpj}6B~iu;2q^4?RVxc{dS@6kkx zdtf@@BE>y4U3q^bQrwHv2p1{t?J1#-NO8}*BwVDpkKLuItjSQ^YpwzpDeluY$3pH; zihHmP5;o?3%;yy0sta~EUiN#zwLEMj} zjD+L=|M?>;@EbC5AKc)cFd8buB&Z7ciiKeCw?B#kpWG3uDCb|}@tp=ju=sdY$TPX1 z51F0paV-Rkqv!zTp)XW`;jk;@BUHiNU{d1A3f)FcCu7Cas z*5qe#GW_$8mcD|J^S4{BZoGovB2J=z{;@Gu5VS}A^%LK1v6kac`S;K9mpI<=fB$Ur zl%K^({MVmy1^&JHUqA5p8jjC3|Lad(oq}-XuODD^y#lXu{#{^xS6l$gOdwMy#IXSwzyE&U^Ym5CH*Z;I?qr0d3YA@YY?&~KydafU}X|#qqTaf&; z+S$|VpF64i<7B4Y)YXl>HhO#hx!KA8<-x{kh!5j|p3bYh`O^Q*|M-!Djm{gqIfb*6 zxG@Od^S;K}^RNH*_y0Q0mj{a5E6j1;qe{^Uw~|IhvWFV)52`$q$e z9XNA~8H2j>$=#L(4FwRhS^f-g@x&~ucjnj1;x7t}( zU*E{d+1Yul)7aJe0e|b$e>=d~aihl?{W!rw5a(Q(2mU8nIAoD3Wd9LGD4HTvHkVD#$o zhT~Tmj@LEPcOI>4FlOuo-3jA<{886vtdsug@lN_qj)wpH0~k5$uQqfXJx2G()jy7< z3(iKmbZDHefzfKGar%y<$2m^;cNdKH{+Dqz*849P;Lj`gw<`bV>-XoR|JOVf_fB#5 z5%<*a;=cOVlr-j+S~K6#%Vn|;yGi_YP!}&RkBNGE|Gb$-{p)5LMU(Uv&7G;o)g7<5 z^uHcb!<6afY^?WRj`+_xqxV0Y{=fIw$(bExoVfS@c{dsVRp7;5K!4uq|C(@r-TO1C z?j=rV@f$f!G&s%JF&gS_e0!;h#@xTwfKmT!>8PpfLgenIEABh9(cRTkBgEH*Udy@{5Yn` zc!SXf2CG)B9__SRL*3QUZH+fuQT$o`pZBq`-v8LSe;12`z!3eb72iX}06zqOcV$+GYnv9O{#D;ozdmob|=$)<>2PjvBH4 z#C^?}nJ-h-kyozNzhZVb5^kZQzqP{e`iD+|!cm+LE@En_ivmO;eRaK4kT8?4httf1-tyLZ-^l zZsyA8_^!Zh`u9Sml|!_rs|2gh8GTBSb==*ni@L(1FfC#7kstqGth!-oo0M6@P0tgK z#i8m7?Vg0Iow@h+dnQ=nt zWK~;nbf~<#!qm6?ce_M~CBjl&>&xBV?mgbGuHMHjdyQM^(FsjQU-`T(uPxrogH#{h z?){eDDo^k@wWB()X~U=F8G-NDR{PcZ*U7rw-Y8QNSRm*B{@V%P>=p7-S(%;RE{-pY zQ;HmXOJ1GvxgY9N?5*F+_lvA$^UNWNeZkxd+Xe!>Nf|w1kN4J6_7r?WbNrc&I_SkUY@r; zSopQMq<8!iTe;|<&aHhm3<=+rGT3z2i`}Q^Hr_73vOTH%{f^(dnekWF>75;m1A<-U zdWZZmO`bboieRZ6&tfP6Bj5te-#aZ#EuKsA% zHuZ+woK?cGtnGulOjeEDwNHvEYBaQo@2*iDBwjle&n3pfuBY8IeXqS=7W_yr-T!j> z6y*@9Ue9#?KbWQecXNN8X+MX=n$q;3{G0J>{Y!UNZho*oJ#9_y$zCN#^*@E(mM?4T z$WohGwfIeCZWl+Du-nq}cdS{sFLyrzg z_E8R5F!ozFhk-gx@%tv8RaZFeP}4UfR`-UlbY}A7q8O=ZmLY+$1#4XlzCWGz%Pz;7 zzQGj_H2Y;Y&c7V-$J(8-OCGNIqwGimnuAqR%BWQJlnU&5xX{DY3py|8sRw%YS-v@9c=ZX};fQ zFP#!;^KFCc)xC$GQUhttT zHMxJ}&9t9)d_VvA@$5stj4irWa`#*J_Z}Us%XD0A+G{5qUib^QmhQ#Al9;`EZ&I?K zl(iiG-dB=**n@u_sCoF<(dtw4A~s)+t&_0~NiQ$_RGEN8OCLwJzlw?@kS5dmV5o)?!G*rwIiT%cW?TjxMR^sUH?yIdzxDpX>KU1`YF{9t&+XUod*bpQv%S@RU1-y6QvS1+Fl3t9 zq4a{D_3vtLhwAxPZ#LdiH7)7nVFkwr8|JSy6tdQRH9ucv&^3M0#yq#|!ikRE&9&{D zd#s#N;d_4QW~q4mDE=+e-za^=U#X9;d$SV$KL9>{IX5g1lzgMvi^-3p1#dxUyA~Mzt>#oe*1>a zyKy6zvvlnU1L=s)nMn>d&&v@V=NWZz`wc?$b5Xl~{}njj#P?1%6cs z{A{H*GeoT_`J1z0>7m#|W*;rI?=9H0B4S0MmSkSu!_?K+I@YHjP3l-&ShuERSKP%V zPb*LBuY9Iw_^Mf{v-(lQ9CCPP)UqtKzz;tO9~=f>ZkyRPyh}{>Fv<8Nd1X1N3-dIaS`RqBj+1LY z;2ktuPqMgh@~hfgox`1srLwg(OTXT$9XRrg?1pzi|r@n^shJN4^$eTn6d52 zj{PbjANy97O`h7@e^FLcO6M&vwU|%YjdGXOmzb;6$K9Iu{EN)hcQMt!#>M#-SoA6m zDzo_QUB)nNF2}ZC(_32|Q$6nIDj4{5J_so68j!#1(mhkJgtM(e^!lz%^#*FeD=);Y zYn(Yb&%3z0u;q|hx2YD6N506u4D7x@Wkh=Yl^|c0wlwdeEpZ1!oTOw&+BZKREtovA z+7`D(I_uTS#6gAbW=gLNf9La4Cv5I?wtwDWT-RK0(W`D&`h{l?<~F_9*dB80v(>aV z?SjG{&54qd-q8hn^IQ`BqRJx`<}mbj${?t0%jC++VPC-(j~Gq4tvfOC9zcFidxOHgKh9!Rl1Mrrv=qWB0u| zx+>;?WzfniQETK}GjkvLCu*A=`gqz|D$lcJkmjcqc}=ao%Dhf&?Y2lZchva$^YSM% z+DaQ{eGN+OdcH^a@QjF6*MGF1)I8-&QNlURH=VbmQniOlA_pC>tRH!E#m@EpxHD~5 zUP-UHbwAYXw?i!l{G!fu+&XW%yh-zqz`gh9Kf9Iw>E^;rEB`NP*_WEeX|vph`PcfI z?D}|dw!lIndAl$5R9>a7YwVk$H&=Gei2S^0d%(F+v+yU4F;4>ujy7+&c(~kZTIa}l zv$}Ex7D^AR>l=40_4x-2?P>8(UEX*qnJljI**BJDaOjNhs%IWkvXt-08S4A>itds} zaU0)FJ6_j5sb5&7cA=GO-yKiBTwfk^t#yBSV=BMtI&->xfoi7q;a)q2*i{)eCbWN- zx>omH7wdJ`n^Sg1-RO8eGe=Hr@4yvvmP+cq%{Dyy_BN$5R4sM2?dNfW(odcrRq?^J z;EU(*@H3sh3F+Iz8Y?rEgg{w~1?rO{~0d@yeK6=Vv#% z?pKO?IdVeJi3^-whpqbY#-%uAgHP3!b)i8cL+95URQ4F)Z|zu_J18bHsrgp4{VVt1 ztY?k9Gfy+~;EaB4ABX6>@l>tf^Sb2zyVyQ~>fe2vY_uWsbLIi{jY}hCqaONOowz#V zgZDsNy9cT7Wp!8G%C#^?B z<>mIj%=SBxlUvbNe%!FsN@d6S9JAz(%hO+LNz5+|JGA7!S)uzXUJDr6lx&#v@{rUp z$%TbBx+k8QJB(+}iZo%4=e;iTeY}pAOUK1xNmOK6d+pC&)SM>7gjy)$C@6^>bTy zgF0J#BZn>PelBgUF+6xHXodgQyn@>5ZGkUC&8|&qbIFd{T^{kr^etV@Cz~B?3%a6U zrY|MFcKMt%c=02vt!7t-Es;rdF2Y`)1yZD(9tL9|-w+t~vGvuYW1Hmkq7s`>q*?D~E70TWhw-rF%#?{?+9QRQj11MitAnQlM3CAVOnUC?)p znmeMqrLS#I&RBF$t+e=V-^r&7e!hEXN+AE(Xk1XJ`f$nSt!Cp6md#k@KJ_v$n$-7b zHq;sGEh|4*p!q0QO{qNn#LVXNQEH_xd@l7UZfTOQ^NZ@-+ zw12yT&bt}+Z$@~x6|_rk*af{0oVei1yTX9Il@*32{ny-IDOL00`kMTk`kQpxGQ#>~ zc(14~PkwWWzrby4`E`Ziglw736W_#Wo1XIzs_@;_Z+`viyi0m(X8CJp=iY3Te%$(O z&9tB1#8|7nKE1YO_V5|Ut2O7`$faB(acJeP zI@=pfM<5uF* zH7$!B4W~&8dYG;qYbD&y9^RlL72s_6uFxg%V4?AiDEl2>+DBCPEZUKt-&Hx{e#x#I z8r{s}e_UJnE+TTui7mk;PctGa^)}a+2%ny>j5}Oy^<1*zz@VUn@wHoob3IHymUN^B zN6l^Ceq-O0knU!@y^0SvOtD&D_0yE43nTq^mU|Cy&)RnRcv&BL!LM)7T1O@K^0}Q} z9zIdK11|j<_}$IY%f4FP(n*6-z6|i;)$5KSkE}kY4Y>C%Gx?8>$Qvt%HB7u|_TcOF zSsB)ol@2aQOzfBL{`qsi^9^IQ_Xm5AUMs&}M=IpQZwu>t$En91)ayDax$%bM;NkAi zjWSO6wRq4wSUT{=tqy&K1KwsPg_k>L&wHTSc=K$J2VZ6^P`LSam%MspiqUS5gja#? zU*~NN3^bl@uAP=&>7yHXJ+1inmL_AV#a)G2-cgf#S*QN+ePDQg(?wf9`MFKK629%r zR9>JmFI8Uug^wOz|9kWJ_=}3}UvpcJb}PAFd0;{#l6vMsp7!Adqr5ko1Q*=s zlJe=sE02ntUIUGNm9zJ$*%z$&pxi}&tI-uhYsbQ?@xT52%HFf(Sm2Cw$?KuH4yC7e zzSX=G6IB`gDsxhMX-LG@(%m;}dj23WuW9YGAisyfp-1aJOBHW?r2C-!^o)IPuVxRv zn-3zI;aWVeQzEjG37tJ#k zT02e+&d`5x%X{Pvx7WLE-IBZPGi}xSoLqTwanL!f;I0n6Z#_Dx>$@YWM`Bc|dPvH|x`RZ_l>S1Lb8E3tjuqT^wkx zw=-AXcT{3|`sIGFh6|>dpP!^noOM;0ezqa4<) z?!V~tmrna!$&-KN#tGW33;J%=eZ6#)xAOF5@01e)tnK7KxqY{7Z|KL@%Yv&0A2$yz zak!I_XE;CL#L2_+WIkmF-#3l6mbnlotc{aP{dC_?PHvI(DdB$Tsck{L1>;SHLdTct z83ziz7Wqv`y*lG$-NA8*>+62&YI>_(@V7VX7r0`P((9@#)`3yWH*3!u)w$ApoqJ55 z->f%Y%8WYvdE`*@BJJPocE^=Z$^F$_aU&&28F-?m#?*VAUcbO@-x^0sDn34Iw61xkoxCgl;G@## z2_qhL$S+(Tb@Ny z+Hd(j=J6V*+a)0H1c6Y$U1=(7X`k?N&UBl06=1ZRqE2y+MHm35+#CLmoNUyZ0lTu%s-6>hK z^8Yh@6vEAISSKt=6q5b=+!}F46zY9lun2vaJvrGHL;r%ARGIZ0rcFOa?SJ@P6hvXS6 zZSv(JXSFuoE0vXQoAa~AEOV8N&a*#@5#L4aD}O)h)U!phAIs*gY$(6}YH3Wfa>AV$wKrC;eVPI$zuLKI zl;&i!=;&8U4G~hCS6qnh=iM^1D!KRk+^E*LEw!hWnEK(V(WQ5Db>1E}ZL^rwoE(3A zzSyyj)I%$ct75K8WJ{mUmN9Nl{qy2&SuSVc7`i<1fbo-J&pR&y9t7=+>|ttMGqrD! zFy@ZgNIQki%E~$2w)8q|-?t+_`EyWHY?qMP8Ao$%%znt_y_UYlmyk{_Vqm*x>66rX zpG}ln|5(+#^;D+S<j-r1!GFE@?(HZ2C}>r?%kh4kK(=C8XL|F;A;x|` zY#N>%f6*;{dDZEjwFb+AK31;z_-u_v+-W8E>S?hpfmhUBoDB7@4lhh^>R8+RNcrcW zlDa1v1N?(eUbI@!nWhu;Wvgq~jN4l^wu&##=1tptqP=NTaf9c)uj=zl?Q2q0?x!ic zbavbcEYi~N@wpQtLu-GeXvyxTX=j??I2GAYpHr#NX%4jyqFvIi{cVVga(XZ`4+nMeA zqB%*j&25L;#fIufU#h!pJ*D8$YFF!7ovUlAY}@|O&b9u*mz|%QHx$Vo>g;x8T<7|u z-9qk{$f)k@?>}wdxn3n+kw=d{NbK-2;T?XYY<|QyndkGGdG1{KTE1#h%fc;IhADb! z8#cNB++cg};_5?cDs^KE+Nw1=hC9C+r7LCq$jsod{bd=;fX%i+26uLtH4gf<S>%Iz zJ12*CYuH~Vb5A$@<>Q0no2#O|qR#KqyyGd+uFicLAS8FZHmr|Le_#C}MJnS{&$>C| zNBs0KV6p4g$+l{pi*18uuMd>_{PE(U(gmM$he@2LZOHq2zi@Y{e1LOltbAB7S!F%9?@`msxp3~uetiR@3m;#P^0MD=XBK|BVbQYy&bP7S!3eeAePqn< zDlPnAn)XNb#ph#|q*`XFIUEm|bs~RB>2IHE3${QZQeL*rO)8629_MU(xlhV4IueR087+>$@ z*{0Hb@z(7`p3zT!_I&v6%>FfJYHn8sv@aPdNxc!}{`t)S|0R!FmsvfKHh57k-8bMy zqG_II?c%Mq&GpH9qXI9pOZwV@4mHn$?;hD;w$?cJ(JviA<$33=k0}K&Xl^^-Fmhu0 zz9+d`ob%fg%)bzN9vJG1<2n(MDtNOkNo z8W8@>I7HR2OFX};UQn8O%=4|6%#423Gqa*>J0@=nZ0}~qZ`JYxo)_#K_f6Q6sidwe zakFY(@KCMP`C7AG*Vy6d)1C#GTb2E^Q_ZLCgCxEv&3RGljye~+a|5P@4*#{(!|;}s zv{Hq9Yksi(gLuCPKj}}J-A4vrwU?eFBfodl@NH|?RuX<7-Vw=;QYnuh@L@<;BPMa=o{j zj*>*Y9ol48mQnQ>Vs* z2kgh68gOEzVbm<|5kFPzH%uF;?J*_vSmo-4fnNDtx9qQ9AuODAdj8a0(`2`uBjT&g z)Ve3UY7e?Hy=7+6-AfvCy9UKSwJm?P&Z#~5Roo)E#u=BIelHhz{S%xW<=55xR@F{b zFCY8;S6@qRPt3n!YFucwTfNtoGb=jtn@0_Qoo%~ioJ9TCFQ>l>2jtZFoxqFN**jJg zzK~a)cdxW$#bGCV*T9q%S(lM1O}DP3FZ#4Bu#e*akHUM|2l}ba%qxhF+Us!MBT85x ztP;Fie;Y2W8JE)b<^HD1{Z}PALe51=0?$WYOVv(#uKBLSD=bt0+3T1nJF~90Ci-~T zoK5RncxQln@zKCP%oL+vT<4?f`))m7da=biNj~~V75{IY3Cmpf#A^lj`kG%qeAV{f zH9nZeR5aX9$z4(&wYIR!+_AY!t`{bqwtaW_L)B@o#vyhM54UXAGuvj{abVG`z2;Z# z%$AO^ZZv!xtXBDpq213rdOUo3r9QD?i>da~e{9PXcw)58J*TxGe zZO^y)q`!aY+7R?%>&eE-t)?p$M?LuH=^LKQ?;I|w<(FqqHt8rdwywGvDs8js%NSv& z)%b;Ord?b#eMTHo8IhL8z09@ z<0X;Bejnc`otf08czkzt*|p1+Z`QcoHuc-MWA4X-F0Ee2eJ$%+mYeC_%O0}FD$^?I zx_R}zDQZKyIb<1oUMu{VQrg@8(-p>#?k`)J##Q zv@js^d24aw((Zm$qc7Jcr?@}-)Mw)1sJ$irtuMblOHQAwlA$nR!^ED#h2+3K`9-Ir zdY7hNF|EIqT39r7(r@yIu9zyGF#r19%88G1AM^=KytwakvHqmC@ZQ?Vi;G+IO2dxF z6&*|CU72R5pTx-Z{t`9Ily8#cy}az1;@#3RIypv&{wep(>_hhbhIVrZ(Rm(lx$f2X zes$y0FXv@Hzi&IYvA(yxx1amQlih=6Oc+tv_`K;tO6~yPDwQsddzyV_xs7-|!>Zwf zvmo^UB>r1~ecGQ4=R7LysbP16-vxiz8Ki1hQ+(`pS%c=*Z}rVrU&bg^E%Sewf3Rip zgsrB>Q{vt}xj#Gj%bZJL567BU+jP9z9kgBF^`xz<#zzaSyPsPx@~e-;UZRNGmZ|%c5pFX+O{nYXz)J%Cs``Fo1M{GB}l06ySRHV@{vrn#mN{8C>mr=*I-Ri4U z8&p23c*DgJujPe3>1v0I53LDzZ5{1hJ><>O7462>KKAn3T^Bds9ie>Ud3wwv-j+@} zB|HyLRWzUA`kURRUO!)5=YCCMoNj;K*QKwP+XGvTx~`@d>XxSZPSV@g{PnEV*_JuK z7~fu7>(j6Q+x?o7v-6BE91khcKD_9z@ulsPbnBYxvugv|6MahuT*>{eRe6}iaglxA z=_M^MWKDD5<@WK9UelgjCu3e6(sKR7<>aLbGS6HLF3l=)y1sp$%Ca5yugg|_{8%n~ z**edv@ZqH78zUuLW0_#5mVzYn{Zhx)ezem4uz1KDJ#T5RS#IxbrVC!u5l1z9|E8HV zVt90)jU}xqZzmR|#Y?4Za=WW!7tl-m3#a#LeGAI#i+`WG`b}kcqu#AuJ6H7y)aWJo zyk^52`QWFg+S`@8#Gk9!ER6i!E#}0Kiq=IbZQZ_o-P6>tZq(a%x34@KQ1IGh&8fGG zueLqBoaF1+bJ7jhtW5tN16G&oY5iJmmN-u}+IrKX857+nE|qQdZ|&J}^rQC)ee<&m z@3bD>{o>)p=AGrcQWvBgc^6YT@n(8xLFHuA65S(v-yKbOrR3zJdc$B+&%PE?mxgQ} zEQH&?>*sySIxqLe=gQi5^Kb3@)_m}6%;dpc{nzOgv{xzwCBAj29jABqxO?&bUk*fd zx9~1&FfsqSZbM*c!X7=FT|RXS4iAp@)sB1e^jUSs!pM^H89$7EpBcA2=vfngZDBL@ zOGtX(Bfp=2@;dj`>optOhGxrbQ{S}N@4Wn8B$n#cR^9Dk&U#R_XOTYJ6?g#>@ zbvH=vY$*Eq!KcE++H-}M@0sd+EOkjNPn`5@vHR^0WBluMQ|?>Uo!$~;((0WsSmvYs z-lj&+J?b@!XoA~Akr6=B|E`jCCgZ{L#b&QWtBmw*36I?z9OhRgZ156#}? z$LtI58TP4Lm3d|4w+)dt&8M}po_8N#cGt{*>V~CeMqMl(wG{R^{-l3&!phFb!9Gs} z$3ay(GIutp`+ip!_36s>l%GsqO-%oP*n1DKsFtNsv|$J;DoLUUC@4x61tf!lASj5a zfMf*`B?rmbfJ6g90f|bGERv%jNt7T-$w9JYkO797+iL)~+wDH*-~YY$eeb>hG}QF0 z?yBnQ>Rzk6YSo&hJzlUL9MCGaYGz)>iRs=uJ2Dhs*skITd}p6DEnM4;^e6G#K?d-A z7Iiz1Wh{64b>wJhAMI4f@R~?Q@#0CBMG5C`GTH6dq$lefxNhnnIeDb*p%`!1ZJp+2 zHF;gFTjq=v22}J~=F#?(;~Y)KT%!lQoP<9o`Xsft&BX115i;=y`L<~+I8kC>PaYzW z=>p_l?U=%E9^oVL9q6R#Z3^)28afR77@fHs5;j;lQ{3=vK0};>wC-Z8@b;UO18q9; z(drk`c53#Xy7tVxm_iWU8Q-XL{{@e|br6bZ)%1vD+j^sh>yo{IOyf3pw|l4dlrui2 zBkDe%^1|08pHANoJ^FIBHLK@URggz8yd=8<_KLE#3BTETDXVNODIA|rT(#-cIYLvX zDEZzTxy0G?O6I)$LIa}`s}3*Ro22!u%f8`QG8RZb6u8n%7g!FEhkCvzSy&sJ+Bm&G zB)D#K$>Wld ze#Py;C&G4Nd0*pd9Ixdk3A5yUZP&TRH7RJ;zn?4P@}g>>RO5Wga{7)kv9R@-7#XBf zqXdz{5z~EocA^DlCG(=INjxP2!=-2YbHp%(6=ep`?+29{tK5z;xfrBmux|0x;?toq z$C>8s&Z=Q$KEpv?i~74OE`F?OaZVt4o*N)uD9u7Xf3R<8gzh_gSx$)ChY~=A)n~Ar zS~v{vzTQ%dBF)T<4P_i`_Eo&w<&^Au@_9eXP|2Zf#kH70;iNhProyZ!n?Q>5?vmj8 zi0_qgaZ_LEDj~bD%A$pP=hoPxVme|DF6Ha_60OFu>Ws@Thb>aI#-uOQ4XSZjQ@KIU zVX$)qvX4r*azuGa^ANg8q%<#jkIaaZ&NXtOvLG#2$+WP-mD2`3!lm;EzLkE;T)#v& zhWgO#v`_AibIzn|TTe$ocl%UVqM%#B)u6GIjPY=rk>Qnn!V!b0Poa9oQ)+$nJZ{Sx z6K;Xo%#O(3DXi4=iC`OD!KJB4sS89C;nCV|ZA&T*N7gYHBdr;5m^5KS6>e9O8`ioIiPP5T+d8ab{%m$L_dKG_CV4XkU?jjyRslx5BHBfl zYrPA(@+Yo|T&k}=w2JQLx+6F|NY<{|m=YinnUr@l2}W|vU!S@wSv-E4n&g@3%2UY}(K?Z$?dCb`E;(4u%w)b|e0`LHL?&S{hz>W)jJ;By zVJeTF>(G8)GV&oBWt5QQt1<1C>ime6rExssPIS>~aM$QtNx__&2)kKPw<(E{vqR0q zD;Hx&rzP{gJMv0Nz2bFmZGdggHt-$auK|5)Uz}uw)KjWat#vYnE8|CFp7jsWDJ&Bt z?<}9@%DbNC?&>Z+`HfQZvT%_ZdGAbC5$PSN3|iz7I=Hrri!`oMbS~yAZQYWZE_P`dWQ)&I-I|$QT}q-0 z)jwY8d)ks`I@nxNeYfm*eBNqgr}Fyb4#W&f$um1E!Pi-54_kQF9}(VP8Ml7AK1c)o z+**X8cV&Iz5DU&SD_F1WNcjOux1L9*hVp7B=<22xmT;_- zdmPmt4Rv6UrgZP3@>rhj$eC5X6CJHi=*o_XWVt_t+c%9Ibeq& zDoej1yP--vO z9qL^$q|K>(iJ}Cm?^ryJ_JpYq!Bv&oK%LZ~xW za)`M_Y&dw6|`}*_kjG-h#3NjWftg`73y}WyZ50}F92=) z$@TcV_wUxtkY~=xEholO5-YC*r+$eTV}>8U*;)kzH|odiKgf5m?U&{>~R`P znrus)?&T67_0)2ABf46}k2|#z{g#5*GPKqY1>>$h+gx(OQ1J$(<%3Zkda2dX{gZA^=}Yjvj0TO=7EA`qS|jEjUIv z+j^Gji{zpWmlpa%OQV$~Ud^T~5IY>1VV!ghIVTm0)7k^Q?UcfLSu|Y@dd4ctN3@&? z)}|%*!I%>wf^o-tHwx4VBlErstG9Wy$P45wM1yA%4xejA08!; zWR+@?pFJ3R4xJKKO;9dLNo+}5rv)EGQ~CDgQR)&w$7MT*ias$jRS=dm z4euB0f6HIGB$hdavFog6o|u-j4US=XD4wv2MX&0r#~$9%{9UWAv+pqG4bfO$T##0N zF|#ZCY=WrUK1W{nGSAXh<7^RU&O-z6daN=v?zGr^h*@i&)cFrRqYk5}2y?F6XSw>?&OOL-H&(DmUPfw~W)GDcYY`E@sv#A*sx3WfB1?+Op6!bSPW$tS zSA62q3g_Eb%k@vHm^!J))|S<+BC|G}i?8#J9(v%`(aEaN$HfF*T28#Ji=VCDCwGvM zNl^~_<8qfq{k+mWY~fV6XJw1A&5Me=98J3Vxbgj&8JeEAHQr9Smvy8w;xZJ1S?E8k zcBF$`jH&xfGn^8#d*%o|PB70#_pPD6*v4F4F*!Gr$Cy02ctUtAQ7(_9!D_`*Hzufi zI8(=kUjC7gj!+8uQyn)QrwoM@-cssjqcZP6Ij+^SlWT5w%bbo_*3IlGY`wk?H*ah& zlc@4neACb@EH2cyxovrp-cDJp@i??yIn>ct*3YK1U186@YMIN?x@z$lCdO)lF*eM^ z(Blp@3egk`YD{ob*k=*Hw$X}=%kz}51qao}m|IvoVIVgBfoFxs7vB9gs2Op@)RmRc zNG+}2^7ky?9YCipgx=$ePLX}1Yy8Zk*bS2`iuLl8bP6~$O=yzRc(>&15}~c?9+m~< zYT-cjJ@dhvm%@jy?wBU{(&HpsM&r7EdSzveuNam8HE#!*d(;xCp*XtMVjb@qqZ;73L=&D(??Y_mrpNeO(&J|`H0PrlB{kn@#$Onp1N5IXctrdO}&+6zXBmfo>o77g@nEW5+T(Wsw1&8Be2MOkEGdnHBA z&ECV~0v8lL+E*srkbNofibKop*O;5CLA&jDCz+CT?jMxui99T|ZWk8jX{qc^>}a%(JLgJVYWdw66AFTL4M_7s)g~#=x`}IyFQe<#K0hg3i3!|;@NDeqE&_A z9ww^ts}ph4MNrTwa50gM(VUjFf-cNr-{4n=>f}qsPWra-C%eUJe2|ulD57$x{ zQ%4g#An-qE-{&g4n_1k4WxbiDsy$6>p)d3D9!j@D> z@4&0paI-v1Rd%DKpO!@lO@^yk))Br_HHR>FIMIt5J$dANCY$AxyjWU2NA~N_Eq{@l z1c!C+^6)BnDmm?33=f)*cak)PKV@5Wb?;|1t^UZ4`ml7K6iPQl^z8h69~HOxC;2m_ zYqOzw#l*sWE(>2u2z2Iln>~9;82!~wuHUY}rALH@%0<#X=ms;&i*(R~m9F)`F44BW z7xgpbpW-uK+ZpcAcytf$)onMAx)Tn4Gpi-}SJJw^6I)iCVm`_xKyU&l_JaFvg9 zYSrg25hhscM)WVpFx}KLH=jS(W$!p88Iv)fo;N+xHrI8km~2xVBO6l>Pi6eW}fs#cqV>^~k7KWAp;s zL*{p?Z+L|Dr)yJS5^y`Yx8dL2J;v_=l0!;EvE*kT0L>NP7XN)gm~?znkpV{x_AfpFB<;eXJ~U zkL3BDaSq=r?lh8aet{DnyWLctEsxrc2(~TKnKjh~jlx?9cU%P4=Z;^?_ZZZ&zl8p( z(^ESYx4zy* zr!#%c9r!>Gf93tFPl?XceQVKlz0#LLAZhna=v?n`pG8Drz4K!7&d!+ZG5$ascq75< z*@Z8>Xvd7?TP|8>__o7nLus6v{le-T%4EQP6xhp@RZGwKQxA(0M7C-Hca<$hAyG@B1?;xN@~%5Y~G?={};V)qh(F9Y)as* za?K~1+KcZ~oYPnagqOxpuP^tpV{XPY>VRBaxGq{`A%nDZCjR@ahW#)O?6z%aesl%% z^V!kM3rEZfZK)l$JsDOkjT6Du-d@szd|Rt)Qw> z9bXG`51rsi^TU_1Fv3oY2?<4Ws@0jkBk^`vVufIxKQObaBu|{0r7cI&pneLaNe=ie z`s?;q59n%O>}|U5Vs6N4V|!dpd#vn~?>%gy~M9xy9^9#!YEOfuz^^a0dJ~ zb)Bx?HKoPD+p|klYb!Dd)1M|ebEW%Owd_~2=H9H^-;j#mjh6q`5j?t(z2jQoVTd?I zvtCwX*k*Q;9Ig*FsvXl@dI7|RETPklW!JwKVkK>MQWEnIYb>WUmgNfP1w9eFm!ip? zC-p&^#ej2CV&%+&vp}>esWQe2Yqz)0R6=691i+bck~!OAOd@xCsig?tBHXb;p%z6IVPouuB4Xf&?E}Y-e<1>~xf-|Tc zavJuiOzc#-QZ(`V=Wim&Uv#X*9vn`fcGJ&fc1fpt>rfe!*#&L1STR!U;}#wpcx-0li(rj{SprAA8jJkF-N8g>|uV zB${+&`2g)=_|=uQ8=nn2OXN>R(|y}Z+`CeKuCnH zBAy|*jggs4dq<6bYQ%s{$VQHves5o>+w=LA#iv|EiJzR6kCYal5s$yxv#Z?5ox)k1 z_}TGEas|fo{7oJ2V*2-3&bt#T>G?)aPOLl-Pl+zTa%-)3(v%ZReX)Pk$i4#~j@cAO z1+L0vqTM~humsXlvDrN6Nj);t)vV9+%XKgCc(t(>2c@|sK!v4z4jC=O13;A~J))=HB|2>hc3P-B2F^()pEa-M{rE6 zBUOJ?n-Z=T9!Onid>;-(7Hp0NH^#(Fkl}evZhy* zAu5r=N*Q#AD2U#5V}(zKf-`c;vgs%Fy})63APvC-0(^QDe!}$g^Zgr-mEw!xquRjS z+#EbL;Rg|>0w5AXl=*QGX>kHXTMB|GD=`pjB?RJaPJkB>UfPL(BzrNC1N^m$MlTBZd(-0JwZ}>D#_JRWS&(~2 z4!(o$G1e8aZfwz(7;9ZmjsEdNfQP$vHv=yk1wF0$qHsJjWTks*_ zHmFZ@0*%Rzpf1TBd`NZ$gKsQ>SSt=lK#*z20a*yAKjXleFF0_n69>*ixC}wH8wW1+ z;DBZ?4(LMAhsQ?nSf?Kc3&%+*%ICIx4|LXEpfNQwJvdo59TB zConVo1~tIJ>x)-PeOU}a?m9;3lJW(};Y;{Xh#ASdB{vhx6wzY*PJ{ZO$D6g8aWE9IoIN$F5yF3}dx77$91JAC@6OA+6C#gweb=_26zq|lL<~n<*gq4mR^#Af@1e3{SOYC zYLvrICK=yN2EU_EW@17Z?7o4t|3d^sjrhs5F&qDu9*47KVxmPD+=$zt-_!y!m+&Kr zFp!PemDF6h43R&v)yCgTq^{w;m# zfdj0pPz8t%58Ec^7r<0ln4e#Oi}gb2H`VyJ^aX4OSeYOL{3ufF+5r;@2@0m|hWY+@ z2@ox8&Y<7vj}0b-9Irz-kq~->0||;Q!)r^88h_h9P7u;V5jGjXiHK)_NPxQba&tbP zz4Q01;5#5cu=_x%yLjjB|qYYzKY}!p{s)$#6vR1Nrjr z=pW$<`42%32iTwp^vFzxJ=nFW0z5sO3>S1Z#0P)XUp@{B02$y1abpy>7(fjo?IUw3 zYV$hy8+ypVfuDVg!N$4xLj?#us)8`e_tNcl=ZOWE@Uv z^IXL1Amg{~Z}s@kIWGLrp$&RuDsRjq+&`f&;AcDPWQjkS@#o_1T{r&`J?=I#k&$`4 zc`kBqkpETxe-?b}2#0$rg`A6fD)Ai?ZlAfNf-s2>Qi-*Ta!GA~gqx{e9>+9+3Ljg8x ze<1yB>q(FQM2{!fpx&f~9r#!2anc|3)W1!8ep^btcP}-=-o1>}j11IU`u{!R?@JkY z_fqppOY<^VTQmH3=n<~}yY!5_yo}Tgf5^Wj$A9ww=QV&_mazmI7w1_Zh5u3x$nm)c zApKJg01AKnukzWAE|72Lq?M*_UR_?441$Z(YgFPs#>D>ntazqrwh95mgd2h9)mfiw@rA3o#P&}aO!-#GW4 z0x0<5H&z72ej7gHY#%j{8vuRBej1?Up*naSWC%*0LI3b$bA-cJnk zVJxtL{$s0AEO3G4)?--cBgO)E2r)4+AR!?Eq@|^StgI|hT3QO~(|ti}_5;wK;|H2v z`-AqpAW)P35Y%Qo1n;vRfe)`Afwue*&{h@?+A9!Wa60JykPG^2UxEJmEHLo#4H#_9 z2P4oI><4|p-V<2h2mQbS<5=)$5(|PMgnYw-DCqlrHiZSzGguG{aS$JHGCWR$kU5P7 zdC)JMi1>mbq(WbA=^Pfkeft*F)zyJ7U%r6e-d-^Nr4o#F)`F?t4`96S6PO-o1`|V{ z!PrP2SeWPo@8)r!dJzlWFW|uYB^>y;gau6yx|gw_7mWp@qoZJAVgk%h41mRNgV6Uo z3ck%w!FNeagXP5;yzlqx+#Hx#`VRUb{?`>Om|nwz1$ex)v; zFC@oT!NVdG+ra$aTDcCs0&?9yS@7te^0IadQ&-mtwS7A& zDJhB+MgIi46A=RZJpGgWskwq297qF*lJEr3^G3?|Y@-*ETk<^j_uKr-HR9kvnt=F7 z1F!|eSC_Cc76>|CKmG<=DK+TG5%#SvY_&idr;cdW@dy4N6DT*=@W|oATLkz9U<+}` zU|hzF^Jo31re&rVJK8UGLcZ0adj zl07!}7Ji&5AOYn6C;UJ3v-vI8=x{KCkBl?LcDmeO`2Q6@fa9phmR2duA^U&LKP}f* z=-y{K z{{ws!_lf^f;@sT6)BL-%PhhWrfWSVfeH-T&9(~WhCi)qFgX(|CC)@+U-*p85=H;l3 z+=E~vhlTj^zvk|n>Bl+1*MdF!$jb-}TKHZ96di6`}QnK?&ye%3JZPAx5 zig;TTZ-@FYffj#u&>nL9hb@}p{YU&#-hIW*_@y&2en}Ce-%$m*{+d5*&Z_WhFeb?u zR79GBidcJmypcE(Z`6hZaveBmN8*4y5_1Fri8)e*pbp^zj4|4ZInstPMlO{BO@4dv=wV)4a;m{84_>g1j`*^EDsWI1aDm8V~gIW-UoH5KHy7nDCj5-2OTAm zptC9kzE3_C^wg$-)`ns*^f3zzH5Y(k7%$`vW0pK1uX~V>FSHY1!T6ta7!#BUAs5o7VS7k`g%TS)L2M6j^rbop%)w?%~n1$lUm3H+%4!;F*F_w>9iE-EB+QCsu! zdg327l1+qbDajd}Rv(VsIb(x!#GMo}P?M-q_Uimg%i4r-YE6{#@_LibsH!1`!bv zm7X+25c*U7K~^SuYBDlt>kttVQfWg3M2WC{7{3COl>)3snjj@5h6pCo(qdPBmfzm? z5G!l~c49ly0<1rU==g{H_D)XMR8`NZC@HZaBG{Rk-GJ3U)gyYehD|^Y5W&ITiD0uH z-~7ghHPbc44Fo59`>pz|0f4y!>s3XB!}k52zpeLFVTbo+>B$aU|9!o^r>FJxYuBw| z?H}};?f=xw#@FAp|0kUPGxhp9a{5;Kzx*TS&W#QJ`Z_wl*6Lf~%^`gK?%yUF8ag^! zT13CUt%ikL^$5=Yy@bQ{!^?n&6m(g!Y(Y7^VF7_)69CMAg{?XS?;itf@JB-SDabnj z5uf_jK1KTH_sJnT#Oo2@_b8EO$MCV%i0}NR?H_T~KkrSFoMiCv)JQCKtsfs~dLj({ z;tC+!6N#h#b1ZfK{WBo%feI*oa0ZkFUI6(I^+54sZII=!4{{z}1Nl#kKyjD}_#7?` z+M-oJ<8xKe7NZKfUtR#86LmpviXNzXb`{jWumb(**Ejs#?Hm4XWRIfw1^T)nZ27t` zLtpomP2cua=-a+NgoS&O4ZpV42o~-|pnn_gLn0y~K*`Iycwcr|K^(};%*5|YD$)W$ zReBKk_&Nx@&wL1)a~^??!eG#p5BDf=pYo|F3bd6(fv)ms&{O{g#x*Cw{Yfz>YpwzL zpIg9v=$rP3@ymhGXB{%K3_{?36V~?0G|Nw<&8pdNqjOqr+8CX@VLemjVs#P z2rEMeB)KY*603>`3nC<3oT9Mt&GNmZq~~GCnV{e?0X`lsNU%}vLPbT&qN|~%rY3wG zl9>M}r-2m|%*;$o5|&8<`F(N&@MBwQKqM&+6fnY6v0Um zVT~X1I5-$9D?;Bd84>EFp1u{n9N~i`6)nSa0~qUQ~g{Ye^2&ZEW9V1 z0Pn-5x`WTzF5on@m67Lj6d)ka<{&omW%wM<6=)l4L)+K@f;j}lM!vdfBO}k^Si^Mz zv5Vc|vpH#LA#nW(1G$;OATco!za}+j-UXe7@V;tc2xut`2g9EV!Hf4*Annr!5YsaV zydm9_2@H5Kj)vHNdw5W;zv3yA+7x50DzM$`woi! zbS%Na&dsd~3y#9z`?G>1B1bq5urRSGwksf~o zi0Tmd-+$ky<5L~Ep3yS9yxx{Gi7nfSUMuk*die0PXTMkRNe5$xX7xP}R`dOn$VG>W z(WMJM+2R>NyWf zq%l>^>RyoPw;CRmop;-HJx&86O2(A6t}G{+h~-scv(w(_^3@gi11ksfZ`CWl7#vnx zyBIl;&ckK3K%+GKcGtowvtt2Z+W}c!CdF&(dADzLNUVaB{6r^L10uJcWI zzNS*|E!_(&J3>S9F&}ihvlrN>G4*rjyOf})yDH8G4!!TP4_k{3kPtrbXZ6MOZv!-FC8ZmvFbfw)?G+;g)S4tXJp-fY%KJ$UN>Y(h1so zJ7M9|LcQ%b{H!};G)cUYm>3aWr;xGR2|NCV-!6zi+rG!{l9|dVj!0Dm{w56-zf3E+ zDDf8gPdp!pZ_BqG|CE#h=fcSwL_c^K0;1*$ypTUJ{=Zh(x;`8u1YaR@W#*9V`~H5` z!8wPL2$?sBj}!hzh^8SAPk_d_;*-MO|n*M4Q z@=t&5lZwPZWSHChipzN7B@+kK(=@_oW+$%F$@Tg89AanI3Z(pMT@Wg8=bkW#vwBc7 z3|Fy%`wT1%O z?c3l;>79tXk)tMH9Q@?t^+zAC8$YLnioE=|j-Bd3Cle=AIr<{WlVh5o9BoSi9)7es zYy5i5REf2kzTETsMW#B3ojOxzY;)wgB#m32)EPdkA3l(l5(+s)y}Nq!#f9Xid#mwk z4BwJ8s0wh8#Sn$C)OynRE}Bqs~NgsVIeR2+VtJ9*#y@u%1xNS=~U;wHWA~iXWK3ZWWo}uz5AGn@4denP9Mw=$I#+Pwb&39dVS%VJ0ASk+SJNGXAl*8c5Qx21RX@{h=O9@aV&vP?S z$roRlsF2nIAF4XTPmHt9b4`a!9dUl2?Nc41czinrx%u2i6icn+-f(N)J?u7I99=JB zG^donRzvk7-%BI<0$urB|H2w%UYS4b8}QksL14&!(4QzFF)?6;k+N{_LvWscwQB_J zzWzbRWx648E?fySOChyPQ8uf@q3n%TQW#xloU=)Pqr|N)Txc1jd#FXzWt_vkB0#F^ zo=b0c(b_%Wy#Wnk^;nVdC1GMB4P*5xc(0lb3kZ+-CB4a9zM-#N-I&_JjfVC>zY`Gw)Ku z>p=bhb7hsq31W*YZ9!EFqK`(I*6wl4j`_*YHj&-;^9p@QI@VCPWJfdaJNdpViEW2T zOuD~rj454fxjE*`Wm64D5z(&2O4n+7cxhAXJ|<1lH2BmBw~thL@UuoC`au}6DwVtA zik;s`|0-9zfvUy*i`Ad7=EW-??&eQmhS7sPT~@R2UWhNI58FmpmA@<#*rDOu3!lN6x9S`(oW=X6o#~sy(gqN5-?u@VDUGbTjxRpT9-9f4SA&cb%U=z=O8t zIN@h^mkV5ONA+*db*cqOl)VqHvN@U`rzgrm7Z9W2ortttaGGwvUdC)u;ztsFfsWI$ zb6N_rzIEW9d}93pPVD9Q;fMweiu?w$%Y59lv3qq>2Kg=}`shu6N~6SWOILT87_O{k zX#}a8H;Yi}G{hGR@P&iz_-5BZPj~~Z>5-jLMKI5IdY0k&2v)X>sjJgqdm%IkJ0bzt8J`(PTEEIhI!T{(sm!T zZ1fB9l?zgSIY9iJkYd-z+FGAc(b3q*+#4&o5|y5lu2+}OC;L+=^GzMZHkr?Q-eQRf z9=1FBNZZZ8(S>u!y=E_k066IAKUJo4<;4rk& zKkh?u9GV*=yFd3tYWnS%Vc}CPhD0*EI*C+ng)_G(&n*+XvzpkzEeZX0D*nBU&#TXs z^?16M;vCtp?sRN;)Mz8u`P%YT>D$E4amg&RY6jvg9#PaSWyW4WLP|Q>b0_rWCl3Z- zxZv0!l07qC$|{VO7NY5})KxD#ILI>g-SD{ZE(`F{@>JC~ISw}|f@5+g(jU1E3!^Ve z^^BV5HI&<~#RzAP+`CS&&BC_AjwfaC{$-3oPe0rBU_Z(#J+pUGF`j});nn6*Oh-*b z{IEfHKbxDY7rP!56Mvtv@Bq?U_+oHmqhKIihsngUV2`@F@@J9}9k+#(B+?FQW^alkkIlnA@}7x| zrGIL$`049$_@)q5i8k$^=_AUg-e`Y0F$k+g%;&fmycnLEEe=vk^|_bmax0QFeLWGh zMC&d_sx4SCGpRhVPM01`ts{|L%4Mr}Q2laRN=K-hRmY*ha2-mN_b<>fNK-#j zV1KB<&WNRL8B6*`!cu~crE#z7;A-{2V%Evk{%j#ElGf1PJD6qrLLHos- zaKEUr#5H8m_ofg#@B50Hg=Cg{6vGo@dRG22s)GI$XUGm)H>pPrgDWVGthHMD@B1Rk zo1dti5P2qZD6Gb?)A4E$oJC>^Bg>JR({dqVINQ+=x-G8vZegCk@n3w!vn-i(A!B@L z$IF03&se_kb`5>$)P4G9(k{#tEZ_o{N9(JT;m_m%bAP0}@6p>z53ke#Mt=wKz>A#2 zTr;wwe)sK}tGva6`tPDR>hpSUlAB5qWa|%xP0ot-sDIogc^yR^_R_7Gq=U=H$V27U zC)bBulKO(q^yOsbUrzxg!l_BmhCG4?cN5ZvfcZ#dqk(_VSe~MQ2g!j)3arms%d9Sc zefMtXbnkb@Y4;J<1OX8R(%hiQA#eHm{bV%<+;Z}cKhP7~N2h?9zMZnx)=gsi+ z42H7Y*dv+4qfQF-oDN9fs)dku%Ddb-dOIb05O&~>p@4}*N8_-F+e)h&2Cd?JG^C-h z%A`nA*S?9Yo}xZ!aMj`38*R$6!?j~O&+=i<@8rIae_oyWsSA<93>eY5ws%+eI}!K0 zN56|{?b<_R3NSvnrrJG{_M+al^5?ERDl1H&;5F0(a5WG>jT) z?;7m}J6sx6Kn;#K)MJPya-mGnh!vH@CNw9NZ9$}0I_hY+Fd=i;r;y!^+={d0%D8&D zho(mJyi;*0*B+GL9@Viy|eE@`}X6E>b0>!Iw=t-o;C=9#kXdBG8`9dAu`bH?$^(9Nl>v z=R%xs2kRAFGI+x@Y*;(EOwHf&pvC=7_ZhCd{X0=lmP^`6XeG6=y6khOR!sT5pGbKY z$Ma%)Z|#vLIZtY8vu=;E;`_ccfKKuv6%SwHjVki2oo3R?wbv=ij$G+g$e6iVJTA#+ za7uY-kd6!66CC}l!z0=FEDbM-Wr(?4r50T0I44s%zp&A89L+r#W^vdu#|(r7rjFqK`OwqYofo6`NI z8y_k=Q1@NRND<=-N(KSJ!HBoW&aU>irmB zwLN7nMCy$EPwG2@V?*^iQ?>6cs&aN@c#gl*WJ9Tam*bHVC-N+OM?RcgxAS;(+nZz# z5Ovp+C(_1b;=#_C(~FCX^xp2zw3*4L#9z@Rb{mC+rjR`?sM4!AQmNykeeYt}eRKfH zy;TPK5Ak6Wb5ufKkHg=z9#V)wKZzjvBz7*~%1(Xnr*O>JXnD17L@v9}hYUe0E5Az9 zsQfISo0Z!06DixCGVDy%Ojl20Cif(nYR(~fyWh3uRq|O0vs>NQ=THpN0Z)Z3qO8`V zmzi4p;G4xid1wwdTW9h3QYutDuCfr|=bQ7hlQYtHn!B}=n^ofZ`$f^{quVZ?vDvP( zM=C}b^~3-?J+4ejXb5sRX#F%<$k)H7)R2+2k$ez;cf^Q3+5WH(U>pL z$WBeP`9?pNDn8(L(A$(I_lBd0aTUR_yc5JSg*GP3u}-L#5I*zk{Fyt>930dT;#XJx zz?^)3Y{Jd5^7cKma?f!c>1C~R=cLF#UIp0%5d_7SvoDI`F9r5z#t$ES5v9iFrc`b! zq@8j8h;fF7kKxIcuIt}pxi!c=SB17!3h{bd<_<`&%4xOm+0q^+Igd(Z^YD&;FEg%= z36Zbo+WwTGsDCv9U(tH3~HGUi}RI72#a)} z9ul;ICj^Gpj^88&4z0`N5FA@^xXx|*T%3$Jb{P6iu<2Bo83slPE zdJ=U5EYomlU|kxPc!$!J zF1Z`pr(I)mrjF7m>PhPm)nw00XT)hMYlNcNIOdP@=j?LwjEm%T-9WfWgG`>Gv1WL$6smF=$^ zT(Q1aW1IGRZjMH-!UL>|_+{~#%fzqfBafWxsXl0GyjO{FRN5)pOt>8&eD@N3+Z#0t z*A6)LN|7G<&lCKwh8vfsvMa~B#Gk02+TBwgyn5L` zR6=*eLywo8q?@E%Fx*WjuI7;aFe(T7C=b+#5}pv^WqJt*(CBSgn3Cm7%%>4WhVa52 zey>i*&8b`H=eWA68`Ewjo{PYTU7BjJsgQ4H&fo1FAkDdmcM$LB5~Kf@b<9=O*`M>15(?WaJ#{1TGgw}=dJ@I zOKvS^Pr2zteakfK2z^2z>obKx&e(L+-uE(kS1tvgCML-CjUNt?#qeyc>6Z^?h~<#$ zt)UNU2sCkJ^ndX}+f;@-UGm&vqOCbYm75)K@S_UTTXUdP3l6-y39hw#zfq7)=!l%YEieC zdUV+=CL>s0bLPdDUHumYJho*qlp9{57gZ$9Ri?N~rJl<*x{d3~G#vk%i9!*cjy^3$ z<`=Y1!gGCmT4BINPA*#eLk}6(in+np=_E`_V%9h?zd}mi~Q=K ztk;3sG0prcKFkh!eloMdM*6uhtXk&<^LVBH+?cDiBqL$6;`d&nN=`Ue9f&L&IbLiu zb>YQhX8V|t8qc9Vp6?jt9$#PBhGq|*w=3y;6XPkFalFB^+utmM1lj!@ir{m%e9)&-ewITS*KEy^)=hG* zF_p%>ATU>!$wJFsRLDX*a2FTJL;uFt&xSGV{HqHUVratUceI{Y&z-2jQGbbAs=f9D6d9@K5ht$e>%-I8eA_N$orl&_~~S-5!viZa?_J~c^xeQ3wL{um7r?B zaW=pkCQ>e5+b)LDo{u?wl;p5{*YzrCTN9!9xl+m`BG|ogg{qP&hH6{Ahdxqu-Xfh_ufDESt6;=`W3~Es*}rKuCvS^Litd1ZPPb5 zj?j&yQC_aQN$%twbQn87pU}Zq?T#zI>r-|7RNZ3s-EEF;t@+W-7t)$|x&)nK8ZRn$ zV|aIf$el5Pi_34`9&F%DSbJ6UR-T7NBhOZ{G;^3R5A8@oU$XaU@8yB0`*QS1yIwx3 zVb`hc9MQM495tmg(WOkm+I~TI{D3j!t3cQ&4EbWQmx_bik+Gt92ukYPG z9m%Apt)BUHZ9lEQN9xYCSCM-DXk6HG)P1aoBKhNJBIRyvpYV==B%+C6YFYon;}K0I z6Y~lwhXNlix`;ijoaHVuP07k+04V;ZuGp``!#JHm`}ddTlSz$2T3qR(bBIRME>F9T zYU+P2TB4I0^#Tqe=hhfT#2?={H<;IY@a5abq~V3EU$b&FJDA57*y%o(HhII5zjn;i zh|K9YLBXH^=%aM6%_6eW{4mTsUEktb=fH%+_9m3y+-&)=9I`*hssf3)aAc71P1w|w% zN)(l-jL7i*=e*=$q=4Y~YyaQNcX)Zpd-tAm?m6eKbMD=+qy4Hvw^9~&*1F|?9+=fq z+tnaX&w{Hv`>rIXeun_%iLQ<}tqcr~oxWfAs6Aylr1;B94Zw-E=n4RUz0NV?{0V@@uZ=~%~xDch%X+On$OoD!ECD^5=6<29y# zx0U_vo_Cy6`gMD6?KT3QZsCmasan_fwpe&z?~$S(EwbxbT6chkGImWv{hhtSehQlQ zgQI`T-wx|7J(=8mh^4g6oa3g;W)_(?$u0GDnXxiFIhO6$a;I6|q~c7o9n)^kiVsb= zZLKYjG3#o~C+0rP-TtKMPUB5o_Gz#6KHOI5 z>MxnIw5wy@)xDjUefLy1XJgWt!!1*e-YE(i(ljNC>f6yTxlNY-k%i9&jrLx!{Hyz+ zZBtJB7ok#Pv7eU1mOlIHJ(yXqQO4Jn5|a*A^~^e3cjiFDcwlPJu5RXo z!Xvxc=uRvPYUwFx(yGPKrd_w}oMx*RxuI{bX53bSk$sAChF_$pCdqi-XY7hT8TLg< zch?)l_X>P@vsv;ks`35wM_sS3?5Lj~Q9jYJlOu4hxzEbb1~b)&8neEl`LQkUs z+tSu<9>dYT=^4(w)HyID&!ItT5%lv6_qaUDd;Voq);e$)x<)D1Vz1er`_3ww-t4H0B1UH|F$`IkXagaUs8Z`XRw)>%Wvy zonPI*+gabq(D~7G*ZWf6sY{jzL3KEvc_q9&dfJXi-^dOgFMiJmJ3A+z%<79s*(Hg- zwYzk4j9p3DG7~5H5?jS`x2!=Y1#J_ZpLDs!jSBO$+OD-ZdBy2l0ZR{i1!p81*3a%} zJ#B#5qcjh>_Ji3EqRvQ7I0NYcx8;ueZbP}wTOaM!8`Eu+&CX6sL?Kf;%}aC?ls+si%d*|D(eBX@*mq?>a{kwr z6Y{3QNQ*TjfCHMo-}#oE5)y@yQACqN0sc|7bYHb5u9or$;7j z==!CgN3(8PM~~hd!~NDDO!xr5qltsPNc$nh<=Rru)0kfa$geNIIJ;5)z-E7%{NM&N zNIlwpcXwU%>XSP|^R%}`AK9LEcG(x(N44*HrL|5&zx(z_N2M+7HSW0I(8lM6r;Ar` zQ}bPtR!h$5H(7zC*d<*@>$xHn@(7%GbVp^XOF|aTiM#puK&<{pZShk?SDZlHR6JIxmoeG;+N4` zMaoS<9Os?dW1_RCl}WUe$;Za7>Tlr-A{4jqu<19Cowm*Iw58dcvihg<%6?PE_^r8j z=DT9q(d=`n;(S-9#Y0V$s{-_sU80Um>SrM7GtKAhlpS89Mz8eMlHcP0aPiRgqltId z?CWE5U|eaoi+xYy;xD+QoXyM1pZYsB!@%;!)}K6BeW?9o>$~^5_vBosC|?_8N=BM& zxa}O5X*+!`6iwSPuh_r&;|}f5%X1nZT9@7Y9#7fjisxe%m2zD?(690O@Qe$=qZ>^c zAEs^E&Dfg%)Mq3|5uZD8$FW2qC+e1U*NZOZZ~#twn=#HwhnS`t<|4m#R;Ly;+7Mwq*LH+RI7L2q{cpbP?Tg!5IsI&` zxT#oUyXN`0*z_SU6UX-A)bDs8@$SAE%gz=($;ivx)4NG4dFa`}{rhLtx0~hBB#vtB zYTeK6fbE&DqhBW4KFZwFNvPbji#k?mDmj2(xW=WO-uWw3InrI-NXq>X~?L zRHFm^YGc^il1bmiC$9|Wnhfjpb1!PuvX;l1AKQ8|Y@g+&yoQ|~ z#ZTHdfHR<#mhTPSF%3-m#2j=e3&+;w1Dq)!4RB7VCQ#?msWRG-vUntJft<4}UAVwKzWY+I@vPk`Qt9rtzd_GsfH4&A!%l zo1$GDw{9sFaPTiYDl@9nq3yA60|Xv6tY zziIUiYc`JS82?O|mHOZ&>uV}|oB_|byYrdfQ}f(l!K!{+|KENv%j`F?Vd~BSi*My7 z_$+J%Yhcbxw#0ws;yS;;qD_d=;)s5RHyY%Oy=ptv}qT(kK$)h-%QxG zc6S$!c>89*-O)NtH-0U3f9STqFCf#tp1#eG^-Au(aPC45D_VDN5#>o)NMH5zdXe~r zd>Q*(n}_31-(8eB%TXxk!dem3w#OdJ1nsruliJJk(ykv>OkVSBV8Iz}`OTIxwqs8?%*}?#_ez zit=WHZ$s1zYr`8&bNGobFHevs_KpqyRH8^&|?Wiz6|C6bC8?5i~Jv|2x zKfK+me*OxnbIv(gRztThJFu5@9DMP}RFc_Ge?E1gqfOT_tUq7s4VrSiFe%nVE6w`e zHRIDGo3&-1IXB*G#(F2N@nKowv-qy!cJTBM2bbQOI_#?s@qS$*UVbT9P(aCldD1^6 z_qS>5Z56g%`q!VobN`DArxMb>kl$=~`tB`Y@u0jD!46T)nx7v$Me++b`Pvi{<1=5z z{hqa}%Kdg!Tvgdx?V9Hzr@fDZJp5KmJ(wWL}cJR~Qku}Tw#;%`Pk4py`uZYe~n>a7~ySclP z&$~yoDEi}3qo0%9sNAyQ)GNuNEwFes>P+xMkz4e*#g5|6Df+M<5XR$bsHOOj4 z{mYq+kN8d0%UQ6+`Ooh-yRx+4QtV z`IbYd@ptZ7`{x&GH<)reDSSIWM1Hl~xn?dooh)LGJ71VNS!_w|GmhODIoiR0GNt7n z(T778T<$}(*~OdpWk-2^+imIAVu9=kjQ#d})$7@8i-&2}cXc_EzAj1@`1k!{lG~12 z!!m#D`$My~<%=vHH%ppYw2Skk_bi*~9@iR0_~?x;V2z1xdPH*M{-AoY# zoHjC3XbkN5#w0h2I;LfAlk8J}M<&a?>!hMATJCQa|YsTp@=JG=O- zFBdi}i_n!0aF5s$%`)B8m}7T#z>pTwd(?xMw+vU-GjSYfTw*Bwas2m#*E{U&ljquL z*sWx${@_Vok6!fLIhV4X>mH>)>pagH*3!=naB9KH(lWl2-*s0zt&vYzu^vc5Xl$iRIfH>{i}mfnda>>6$9B+OF3#PI&*4jE%>oCDu$I~`SuDjrE*@o%@@~nDRmy< zl%4Gt5~Fj4|5fKd5@znuQZ}}Hd~t58nLWY7jBS@Rfu(3d<%`zNSYp~#8cit&Sy~6) z+1}Ch72{x^=?B>wo;7aDjta@wrqcHdA-dSy`R)q^yV!3+HzFDGN;2Y20JW9&8XCx3mS58hCf&h;^*zoUk!E}!~;h!^Mpun@o>;0AyafJx8bLka-yF>L`* zu|MsnPS@M;16qavL;=(#mBYiw0S3G+|4;RIz#TV?-3LG?IG2aOnLz~3A0l%z2^pJC z2%Nn{hFn*DUI^d88AJs31R*7_n78Qb9{8{GsnS^;UVw8DVy^(Y;anv$A%hS&SBgOV z8X1vB2%I-X(++#V(0o8%Ffa;!-zO)e2&F)k0;?3*j zoREs-BCvDWgvIdGi`*XbY=(*UM|OiTvdfPK)&c+d;% zC&1Z$RVBzpwc!g~wQ3TI4^2Cqmr3Bv!>Vwq_zvl}1v$0`9xMS^q?QHL2b2ZWhXru` zKS`OYoy5KZwg+ez#)Dj7UlL;JnH2KhpueOJ_2WjzLRaNs^2&tbVj4UJgO=l ze8~ETb24du!x^ds_H`hk>jwi51`#+DmcZT*1okod8~qFqD$Bw<*+!`M%Kb)cE7d9T zW75yqxq>G-1opBZVuv9F_O}2Y{7m31+zKAR*{yHXKO+ZtwNuMNZERz0`;EWdf^$4n z3_!(fQ<(=Js{Tt$OX*TFV}&GwGYojZev=3GDjviJb4VKW|1{~={EYhWHrqHOtM>iI zAz&Ah3RDb$|4Tm>{bgk;V*_XM64-x>L^us4u&)UbgC3w92vH7z2PgL|AkUyC;Jn{z zd7x<8wmzi|?W6_TVzrFK!>CIqkki3CF5AYf&G0{a~ju3cXO=gbq>1Cbn9+MDcO z(u=^p%{0K7^90U7Cvb*03Cyouzj00$Q~TuU$EbhoH)BE@c*boE&4UwLM}ZuucyI*e zpn?Z~Zx{L4Kcab{>LVi${A^$I0QS)W9;oPN_`r7@NAm#AXjkb&4gE$qZ=Oj>AB%pb z-+$@gVgh?zlT)sygysR*LzDw-6KZM~kq6jE4qT<;0awifUz7vuABp$U*D}EHKpMay za3=g4V~DEyjeEdusMCSk(hujvlez%Y|4BQ(otA;q+eTOL0NVtH2i3NVpbN}6ff*}t z?NoB$i+W()`)@q(u?3fn(h{;B+IJj7U|*ps+jtCDP*jQD30IQ`)#-n9bTp|8+`Fd| zvfR{DB-(u}@ZeVhdySHlCsV9ka`&bnZz!uPQP=|Jr;eo16 zKps@zCTP-MRlo7v>%PC;$EF{7#@NC8$%n`}kBJpL_z>+PoK;ZKE;4OGRrDhtP#?I^ zKC0{fDhOx&{|5cY17<9weD;vYF7nCMa2JxuUrR0ruOab4t4Ms{DiX(ANiOnMkXY_= za={Pape;G)yNsOmSw^G>Y{==o3rThDqGp?b^oM|b+XsC}26!;GNP;e@ns%5qB%P|F z{X@&Yrq1Ae0JaItxJYe(=u26Nk`yWADggTh=hwXnPjgA0>GyTLzw_@qO!G~xUpFdI2k9i|7WifWWCfaMFzbilm?RB9Y8Ep_b#t1j%-qci7%m#_v<5pXnpsO%Tz2L>wss_TNH3+9{?_@Hq1lNe)>@kCzyGSk+jGnM=kw#6z3LkknH?1p5$}ke`)l z$NNvU{t-9i0n<-L8p@y^6*<>QZfX>{6U&FT;2^ni(vw_2v6pTaZpVa>`>9frfBzJrk7&tjcdZtp6W@xJw6mo{DV zS>#1!TZsjd$`N`t&`1ho3KRV38zFBN~vdx9R`CiFU-bGW|&R z-6M81;O8W#2IOJvUo_z7|26t6*Vq3${qHOPZ6)T_JV&hv&B%16TmCC`0%UXAyRxFaOv-K)(~fYJkH4=+IFDfC)V0Nj$(`0HXll zG{sLR0Y1$E`~hB}Uv>s8M;-y6D}V4e^@U~mP{95&_@5QxkE(==-J?GR3ILBL0M`(= z0Pvrj4qj4BymjTcdyK2Ihj_$vm76nCGVhqhxNvOnPtpM8%lY85Ha+Wg>^H_dGjZRz7X-#Nj)Ch_2(2mx zS}~Su9Nd?y9NQNB!}t?7kaLXR#+Y4<<7eV7FovJm$6zXa#u!9Ic`ne0^^phkKyv-3 z@kifzj6G&zZl`CdVy`i7!VK_c_90jV-`fCs)=ay>J~HvY7zfV8!lOLJg55;F?K|M+fRL$% z+i)#KVXBmHT|6%@&xN5y^NRR`?^RrNYehAEk8AEF#V^Pu;U*I1G^!$w_r_U1?QhD& zs4;PRC{Gy6J{xF2d1Cf;s7kl7E>NbXgRI59s32&XChqw8UGZo9Po)Q}=~!HhKcr&} zz=tmFoC<%&XBuP7tTke*n7tWj-3B_U(rqT@7~2OnfDGye5=h~j?ex3ikGy}Fafyzj zRK*jkVknV@v~vQQ{|x?&&ojnBFfsMD(QUM|7&DCZumxgh)ai{j`d#p6;(?PR{-k4{ zFcws_Q5E|ofO@!g%9r>+UqKUp{LJ|9F=QA!q@qC;Pa6TgU=K1bllUS+ zgwU_yR|5gy55E)ocuPRO(azSS+kx;LrVoSv6IBcp#Q$iD z!grEO;L{iAIkr=pMI}=RqJ%3KNLZ1WU9;?&sP!<1+KLq|5&rAF1 zLJSke?^MvBj&E1lq`@jbef9nZnlVcluj8!|yXe1W7w~pRu#J=fiDPlM|zfJAQtb_KTqdeI;Lk9?N0^Nv!A03cq_5 z4G@o5gQ@2?&8P}$XrJu6iEmS9}2rd=&mJbEwu8M@!+iU{90qG}ry z_n`w1>FQzk*YP9jJtvsH9%EO94kKwFa!tSa`1tr_BjNu!?bAHu1Y;7 zlQ_Sne`^~w`+D?VQeanc+=Gdcea!2hz@O<~Jh*a<#2uLb+OE>E-ha2Nhqq23nU^AH z+%zZrRfRY6eqHgei~V`ucmM{+nyz)lzoxwYiQhis z|E50ux9i~lf&YPlf#;t-eH!;ELP$tR+}qmUty{OoWo2a%c(wv=-@Z-oyMG$CZQJ(N z{sV)5L_`E(;NOD(Hk+Yw0*9Z^!&$p=pCSkx2gf3g)%D*h`wadQ_gA;ICs|<@0td8kf)K7aq21OIOvfFY4g8!QrB zIV{x`Zs>c8a;p9+Lq@?av-B0bb?7TgeTARs`wx9(@@KA0xz$~D)p-1aR~&QVDob@& z^wTl~U;|Y6X;nG91rNMu0vx^oSOahoK(zu#2+n0*09Xgm{5^}P_I1d+XBjN>9>%p$ zST`RFQ&G4Ui#|IxS>O-`>p9@>f}5Q5s5X=L_yI=$@ta_+64$rU=L7v#a7`G`V3`O0 zDpq$0*$8++y7V5!RQsyDRJGqZuCt@B0IrFm4-on>p-;dKm{&%h8Sv8rRIA>@tJ=(K z@xwjv1;Mo_^u0iz1zej&-x2hung+O_{|@>osP|Gwd5{8dDrc>pzpRM6ukPN})sSpZQO`+X1Jzz zDa4tCz?v7XQ6#2arq@z%tryqa7XmMEeH8cLM?V@oivs5TP0y-YHc!EtE~NE!DIe#$ z&L3Dz@5_w)QsbV~SCh}YQ9j~;Yf9+Pf@{UN7k^cuO~CrVHOA^>a|+Z6q>6Rkx0R1|UkZLaxIgdl&8qc76%K=8PkIiy z^zb1$qfq`0gn*kJ;K9h|j4YM!0{T{=Le_=<<)ts_c~V?^!nI`F-v;+d$2n^B&A~lj zaqSiNe#NyW-1C)ZKY}FROd%@(2Tj?W19(7sR#o|$`;lmV#`?eLZ9%UGGdQ460j>ih z4(OMHI>F$8>!!F~hwIki&tB28iTjJ9Y;vG}AXTi@Y4X3ibqB=d=80YOo`|^L4X&x9 zZwBs(m=A*?~;+9$48F*sn|Xv(HYCI4HiqQ5#jfHLs%#bXkGZ~=`2?!Sd= z;)nyT+u)x4j9%h8IIdmdKE$}!B2zx%umM^lMHziYUB$kFn)Fv!K7LQH<(0f7Pwpg; z+-s-E{VS0~c1cX`#ED4e#W1iBp(NVdnqIrZb!=R>!}Z^LFb|Atj0v!Gc3Tb$j+Oj~ zHOtqm^O`>6-0}<9e+zvBa7`NbENAo**Bj8!3fDhz4_4ftnptzevKYQISIzRPtN*IL zFL;zi>%;@t`{(+JJ@on$qnGF#g6mF*1D4P5^=;)d&(-EyQly~QU~u05M&w^r>ZQbG z9JCv+_t^T7<>R{Uz4$P4e)lwbEe`j8LjMLvFYz3a$Jwd${60g^+sd!0&Y3(kuh=e? zLAzM+I2+bLlE}lGG32o<1@7> z`nmk7^&i*9PnI9A0m369yPKsghjoZZkzg@j{d1P)UU<_&94h2ZP;qB0~W zCl}=0yGt_T50R@UeaQK|eA-76$AQ@2{|j(Oe(eI>Jpue-Odbrh3?qlMZ2mNPp+=t^G>|^7Y562nkCmVe( z{EfPY^O=>E^Jn^V%=O8WCnP(LPxqy9T!rHa9N(h9J&q-CT#4f;^aGWOcU9EQU%)d+ z=PT!5wG1iAqckbG9eseLo!CvT9NI>bC9dSMXe$Zbz^2Q<@zMo}2MLGS%M&1)*YD<( zLH_ia;hOTJ$(zcb(LV>zu{h}p{SDF9slUG&mYUW>?e%`x0qmq7#dY5-=^A3~$zxhfO z%_ySKrGW!IB@Pf%GvG6C2e54v0(OXSdB_le>4&lF!A%_#^jBCg-)#nS-5X)u!49BZ zU9y0-&jH(4Z1pIYvcr+-Lv_?FtdjI6M@v6Bmi0#1s0s^+>*vFa; z^kDxA;%FCF^?t#NXY?Ev9Uru1EIA&@B@w3tB>Y4$3AuTTURS_=8t~RZ^L<8NWilD~ z(9WaVW}J(}xlo)3#W_$PXp?t5Dx>G*fwy#QXjS+>x*ZSatZX6)!E50>6+3cr*KB$Y z5!*vaULjeP`|2RjM4th}yw8-cc}+dyMlOOcJN6GSUJ?5S&z?Ra`}gm^fVg8~-mhE- zcz-YH2uTQBLAN!3QE z2rbw5u+FQi&eM=G8b-krsyq!TK^KZ@pw1KS;QfZ`JPj#V7gLIWMCYQnv8;Z7qDpxZIW3CD)1Nq z&#t5_Y5eTocuq5ae6JhS!0Y#>!h0*=&DZ(;!a|Ns|@cvl1TSUK!T(ARrk&BDqsa5dI-@h}YLV)hxG$(se-RV!g zfL=rD&GKr;s~+%P&1D$F6T<+<34q%Iz`qAjfVEZAo4u$3@Yh$3oiWvmE@eDO-RN4p zhg2~+V4aTx4AJR9Ri_iw{6R@WelxO$cPgnt9`*oS?Ex_Lpk=`f-m?WcSq=EF(x@fs z4Zh*?#rIYF*L9zk9~+#o?vcu-`J zG$<}8B`7^e79z{jtrIt#|5VZrw7Y|<-v+zWiZ9p;)WwtH49xCEyAKf^Y%F)}iXLC@Li&T}`VpfC|(L)TEdlXc}l1XdY-0 zXccG|XdlQ4bPePNh6hRmQvy}=sVGYa{Pp-|LJOgl&`xMCE-riaQx<)MmDWhfP<7iJJ<7-ke^9A*;64l@li3$qHd4|5Ik2=fZ# zh6%zrVpp+;*h|b63&i2#NU>BLCr%Nki)CWDSRq!5DT$s$Ut%CJlo&~jB_TF763R@6;-K_$^|<<61Fj+0 zh-=I>;j+1=Tr;jY*Me)swd2}zIb2t+2iJ?s)ge?xyGe`9|We=0~XNI%FR$S}w#$T-L(h#h1aWENx|WD#T)WEW%~#8FEUWuZgQ z@iKMJf%@e_-AbWeWl*QkKtgRALrt1NE!sg1dO+=k3#5V+flQzfP$Bvuh9Slw>=3gM zix9gIPKZYcHzYhn8j=zs3sHnnLVcm3&{)V8V%^w5y?8*KghPF#2xUTrkP6igH4HTl zWrv!DT7=q#azeSGsydQE{ZL{0P&dX&aP9)TcI5GP0%$OTG) zUWh@6QHV*1X^44_kVnea9m@PIFTZrw%9MESj=&}^_SOz*wf&LnT?y^B|EkI{Eps!re zRVl5f3JJy4p+woxBi0^>k7SVRl3hMYi;3R@@(R0L9>@rI!7Y|wNI&~gs6 z6x#{q{8LC@_#LpY!#9-t*$ v(35alQ&K=zWS}hy&=*RmN82fTx&`q9J0$}fWeECV7wQ3eAq#~ Date: Wed, 28 Oct 2020 21:29:42 -0600 Subject: [PATCH 27/60] Doing attribute initialization (using constructors) --- .../__pycache__/__init__.cpython-37.pyc | Bin 595 -> 622 bytes .../__pycache__/cil_ast.cpython-37.pyc | Bin 9622 -> 9887 bytes src/codegen/cil_ast.py | 9 +- .../base_cil_visitor.cpython-37.pyc | Bin 5289 -> 5869 bytes .../cil_format_visitor.cpython-37.pyc | Bin 5519 -> 5546 bytes .../__pycache__/cil_visitor.cpython-37.pyc | Bin 11193 -> 11539 bytes src/codegen/visitors/base_cil_visitor.py | 25 +- src/codegen/visitors/cil_visitor.py | 26 +- .../__pycache__/__init__.cpython-37.pyc | Bin 218 -> 245 bytes .../__pycache__/base_parser.cpython-37.pyc | Bin 1035 -> 1062 bytes .../__pycache__/logger.cpython-37.pyc | Bin 415 -> 442 bytes .../__pycache__/parser.cpython-37.pyc | Bin 14118 -> 14145 bytes src/cool_parser/output_parser/parselog.txt | 15642 ++++++++-------- src/cool_parser/output_parser/parsetab.py | 252 +- src/main.py | 1 + src/semantic/tools.py | 16 +- src/semantic/types.py | 2 +- src/semantic/visitors/type_builder.py | 1 - src/semantic/visitors/type_checker.py | 2 +- src/semantic/visitors/type_collector.py | 5 +- src/utils/__pycache__/visitor.cpython-37.pyc | Bin 2359 -> 2359 bytes src/utils/ast.py | 16 +- 22 files changed, 8020 insertions(+), 7977 deletions(-) diff --git a/src/codegen/__pycache__/__init__.cpython-37.pyc b/src/codegen/__pycache__/__init__.cpython-37.pyc index a6879b6c822ccaaeab60a60ad8954d2a07d1a1ff..9f0c8ac3d65b3b56f66fc4c52ff38708b7c2aab4 100644 GIT binary patch delta 206 zcmcc2@{WbuiI&ryk0@&Edh|=@1~J7&$w1+h)b!N6n9182jTw0- nzh(^4=LMPvHWZ2A0gBz?u*uC&Da}c>V+8VwS%3r&BM%b*x0x(w diff --git a/src/codegen/__pycache__/cil_ast.cpython-37.pyc b/src/codegen/__pycache__/cil_ast.cpython-37.pyc index 50c44a94e373a1fb97cd4eb1252cf43a63bdb12f..6d20455ab45e265d18095ebd6c567e06b4056a62 100644 GIT binary patch delta 972 zcmZ8f&ubGw6wapIRNJOz?2p8n^ruz#P_`u5{<5}7W12Q;){UWp(Hcs2l|tIoNd?=3 zC>BH!QJ*Llp(x@-5Q|`Mdh*tT2-1rc{0lsI5O2P>ZQ|;{o7wr^_rBSA^F2zeCF@3= z&T1QuOUi1tirugC2oKheT(>vHY`UhWR&098sJc;+IjWyZ+oUwGS_!u717~%4&d_IP z&&b*A)VLg6EXa|F94X8#%;pU)=L&^*f65cESX^_9Q?*c5P4}qN8nnA0^n7JaQWiDy^}12oL3fJ$ke^< zOTl-q2Y&igaTK%b5ch@QX3MlAiaS15mJnJs@dQE}FxC==$E_L1I1whwgt|73#SnUr zQEFNY&rsk++qid!j47#dr*l54{!gN{J)A$PMzR%aZb158l-C7pmgmMG>CSk>@M*S6hhN6 delta 778 zcmbR5JI$NViIZKYdZOaxPuT_Ei*)| z6+{Eb0z(NuK}#UF4@r|H*n%Sxp^P?@9|*`yHj@kzv+%h0fKHo z?sg!Cg@qf?SkuXe4^ZqVl6IfT6O~OTKUNH4^aESrtK>VmL79d343ZjOuod@}77F?UMK2-A_ycuU zG6sTmDyevj2LR=+BgupKewrGSqg6|MK7%Q6yCAd>-G94ZW1T`Nt&M~O}CBXkfzXrmgmXwe@V%4f|uw zuA`(>ifDUkdmvhbP}Kt*kmwBr7jB$DLPCNQ(jbHc5;qVh4shYUu^sGCEcx4+H{ZN@ z@6CH}_lf>nF?TMT)g<_R=RGQ4D{SRxai*YbDpBwpns~XQMPZHGTZp{Pa=8qsLAxl*;o#rDi#1sa#%u zu{0g}rMbD%obOg`$6}?5?>ogxV^*A+oSG~JtO88zRH$J4n((N+1%VZqJV z4XERPKeYs_lZ@~9pc*6_rd?cMMVP1soWz^_&VqpuR5EFC~I zM*wt%p)xj#a1db#A&xKxpv!d+51{}_h9*4vuiCGbheL;PN33NBUe>>X;f3hqWFdN( zwDnyJGb$)D=MJQ zE;f}m42<4N-Ou)J+Xcalc5B1w78jyFbQtq|4d zqjZ0p@^8~$UONH|yg$f5E<4tZkSCbEax-M(u%N5;$Uci|o+E@4ZMFRO%r&LHFM1`rJdfwF6SzUP)~l?pKKV5DYzC>P5l$hrD*ZLPv`M&(cTvHN z!5==+&pG%9?*QD6twKfICaYvM_I^B+VV*$Q-Pi|&NM04j3MFsE*g`ueOw!n0(qO$T zSaD!E?X1mErSdjyM9>mId%K+$rl`_niDr{rM5?%?6?Ag^M*;G|zlffO>^wn*v9mpjoQv zmQKgcqT-hL;t?ITXNR`w*te`Q#(5cp&2|L+SWA;WqKW^lk?4!gp5Ask6r;Gc(dbOB zwwXqaIq(C#EZ0jRU>PCwudiB_a9fx~p=SF{L9-3imEodnvXx+`wK>lW?KP{p%LHP8 z`X#V2Pon9LZxoSv<54m{bx5>M(Rf}1NTjfV_?c#IB%{)J5<=#9LsZ+)|hQ#;tI5$ug<9pG3VD+ST*8SzF)X zGrI^n-;5r0o+pFR&z+;219*m7Wq#FS;f83?^`0tPo{nZYKokVyBVG7|G z!Y%}S0o4tch0U`#??gC*(1CCP0lzPJ{1jX-Tf#ZUj$s6Zi7jS}Ac+@MH>@V%A7Fb| ziK<1PclG6SnY^lMs>*PAQQs5&()Ge7OTh$^$8sUj?aBo9nLwP$Fs(!yF-#klLqN0O z+X8|N?^K5G&qnZTq3r|{@WD~{PBUf delta 1825 zcmZ`)NpIUm6ecB#BB{l)WIKxEC3d{gv4qs!oz0Hpx`)6hWGe_*xdg3YT(;aWqzvn1 zpm8s0fxsBFm-bqqxus~2K`#Y*YI-d|^bhn<^jZ`>bl%VksJP)kA7>ul`{sLZ7X4X! ztQKz-3JOP`C;xt|KOHxb`(u3Z{B3U@aet@ZWRy65}UDq^Pt{Q&N0Ie zJ*2yaV`8-z-;?mS{IE~~Ba;B6kCf>?(x=M9rNN{J^jY3=*!9h`Y2)0N=UCm!;3+;2 zrFA2d`SCvT&HT^&JSi5cHy5a%D#e9bhL~3YUZW6+*bF*$h~I!g1|~hkZ^GAP?q=bh z7{`&H3eAmq`2IQs2kndCo!65V;!V+RxY1nmEq91@Y038x9$$0^qB+@3(mZmL3 zn>ds$i6u!=Bnd;zmO4x-Be(bH7BU^f4Xt(^wsXKVVAx!2Ghw!QvZuE)E`U8Qd?&Q* bpicjI;>=hQKzv3ec{Wm&N_>^i^QH8E3?hJN diff --git a/src/codegen/visitors/__pycache__/cil_format_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/cil_format_visitor.cpython-37.pyc index 00d125ea53717f2bf8d5cfc2621b72bb572292b3..9376cd6bae96f4d565e28525855fd6138f3469d2 100644 GIT binary patch delta 128 zcmeCzUZu_J#LLUY00g`Yv*Pz|@f voYbP2Vv<_V=u+K^UJT`J45H;x@YlG#m3 z%9;S_p@$;1j9RG$iC7542~qikDuK9wDsdwUQK7Sek$Tnfd?k ze~-UjU~$iQeZ5nF-~H8xiC1EeJR%_{s*U87NLtver5Wh5<@+|pvSU-aD@5s5>}ly^ zG2NNA+?2LS+?wv17vyd>EX}9aq6Hwdk-`icU;KCrX9YY+j+!RH>BjPt|t)LxV$uQI)3PIIU!qV)S}e&1xm8MypRH zCT_XGVLPk|SZW6m1WnLMj$}C1MDx2XZcAm0F61mb65Lv0*(#zgBmu}6uL9(8IZ8>*EToNmU2)eMfZF)i2 z80HWS9HI*#>dJP2@B%~~hiK$q`yRyFtp!21TZ9OLVBT4Ff#1!#Q+J_@cgUJ; zK}ZWwC(CRKlEr@_P%Er?SZWvu+PdZ|6HKK>wnYj_yDP3q^8$6jwJaJ=C_+)yl128u zeUSax;3C89_XEe99+)c4-C^kE7KrmOT1kup-6f{=c zp33GE+UBYfwu-u=?L)blxv>E*d14;kzduJf`oQyl#RRdwlksBT<3vRF$O_oKf6C8{Y~tvPIs*(80suA`>GB_3fW7JgB8YBc zCvM^+EuxRegwC*f&)C3exT$%C9JlYH3Z$;c!>5QWOJ?q7nC>}B7OP))#)*x}aI=C9 z!1}#?;7!~cCKp-37xujYH-@#u!@&NcbFAV$LYCNL-x2nQ_ZgXE-yH~B5#UA*z#XNi zMY(tYxge4zBv^XWN1S(h2?;mkU73@ZShcTj)6t$g1%9S!RE?U4YqT)9pWX z@Tz0>=r|JoWK1H*Va@WglaWKch!r>ANse+I_m<@PMy+R1=Pe{=7FwzgB55+YTR|Gf zI|4*@nswW2o##WO+?(B~=v8Q}u$fQZCMyWE%v0URwmTj|N40dmOm46%oiTC__!#@K z^DMc5r>-&zbNo#l3^LDU%k0~(QJ68*E3={QGQrGG$(O8j6i(O!`J|N|Mea9QmfuFdbR_Q}*+jC18_#Z^y gV=wjgHKCxL_#{}3utKnWu$*kYx1C5;*4st?1w%71qW}N^ delta 2096 zcmaJ?Uu;ul6u;l?pS8Vh*KTXOmAS1Q8@v01hyv~pTiGCUFvh)eHJf;2*M?VStfAy*eKLCv#w>NL5zbrg+0!j2B()XB ztS3e$hI-7HtK~OvRd`V4ZQIr%OC-GtPDS95R@6q4ShfW+_it_F@IH+^a~l z3z|nfE1sfFpOVrnEnk%|wRgXCg%uskTlLCE==k#I18?I8Iyg8 zED5`18A~zT4*g^lD@vZE9-)BLBGWN&KxbEEj$56OkShx&8w01aFXZgQc4^BCyuXup zW{`_2JgSPg9cRyB%ht2~EH z^Ze=R%VzRAo&El4IOf~~YPAB-`0+|;6`;bn}Ut% zW_aNL&3XupaNifQjiPd)9LK$#cw7(yqy-6T323xt!Fx$NLLgH41m!5bKb0t3+Nid% ze`i_6EW5!S@Vxl{325u)c?ydx2x?XV#s)O%CR~z?JsN)2permYrF+V_BKU}Wet_+hZ1~x<|fV~4>*M1Rb zC#&!mbh;;aSU#$&RbC*~OE3Tzn!>>*QYnaGr8Cca%_R!;L8&(U4P!C*amyYy0FnAZ z-&tBUT}T@iDesi7*WY3T<7AmaP~B#Nvt$s{I730u+-FI7e?VF|0W!$ zveh1=rDL)EmU=9YgNgEcQ z$f(MH?~GYyWR_DxLv9Id2i>hMdm4IZ?-&0dDj+j`hC+-dD*dr|L(=4~TvA6b=4lcu%wP_g|97)NRnv&fPIgX;{bU z>v#~}Z6Al<+j|wmIhf6*X2I&6$k)S}ZL{KESj9@rMwS1m@`6|5G(OJ8U ZMhC01qWDlMQT!+heAy8xJ?v;^{{T=C_?7?w diff --git a/src/codegen/visitors/base_cil_visitor.py b/src/codegen/visitors/base_cil_visitor.py index 2392cd50..4ae03870 100644 --- a/src/codegen/visitors/base_cil_visitor.py +++ b/src/codegen/visitors/base_cil_visitor.py @@ -1,19 +1,18 @@ from codegen.cil_ast import ParamNode, LocalNode, FunctionNode, TypeNode, DataNode -from semantic.tools import VariableInfo, Scope -from semantic.types import Type, StringType, ObjectType, IOType +from semantic.tools import VariableInfo, Scope, Context +from semantic.types import Type, StringType, ObjectType, IOType, Method, Attribute from codegen import cil_ast as cil -from utils.ast import BinaryNode, UnaryNode - +from utils.ast import BinaryNode, UnaryNode, AssignNode class BaseCOOLToCILVisitor: def __init__(self, context): self.dottypes = [] self.dotdata = [] self.dotcode = [] - self.current_type = None - self.current_method = None + self.current_type: Type = None + self.current_method: Method = None self.current_function = None - self.context = context + self.context: Context = context @property def params(self): @@ -82,6 +81,18 @@ def _define_unary_node(self, node: UnaryNode, scope: Scope, cil_node): self.register_instruction(cil_node(result, expr)) return result, typex + def initialize_attr(self, constructor, attr: Attribute): + if attr.expr: + constructor.body.expr_list.append(AssignNode(attr.name, attr.expr)) + elif attr.type == 'Int': + constructor.body.expr_list.append(AssignNode(attr.name, ConstantNumNode(0))) + elif attr.type == 'Bool': + constructor.body.expr_list.append(AssignNode(attr.name, ConstantBoolNode(False))) + elif attr.type == 'String': + constructor.body.expr_list.append(AssignNode(attr.name, ConstantStrNode(""))) + + + ###### TODO: Esto es lo de los métodos nativos que no creo que funcione ###### def native_methods(self, typex: Type, name: str, *args): if typex == StringType(): return self.string_methods(name, *args) diff --git a/src/codegen/visitors/cil_visitor.py b/src/codegen/visitors/cil_visitor.py index e5431ec3..17873f63 100644 --- a/src/codegen/visitors/cil_visitor.py +++ b/src/codegen/visitors/cil_visitor.py @@ -29,22 +29,31 @@ def visit(self, node: ProgramNode, scope: Scope): return cil.ProgramNode(self.dottypes, self.dotdata, self.dotcode) + @visitor.when(ClassDeclarationNode) def visit(self, node: ClassDeclarationNode, scope: Scope): + constructor = FuncDeclarationNode(node.token, [], node.token, BlockNode([], node.token)) self.current_type = self.context.get_type(node.id, node.pos) cil_type = self.register_type(node.id) + + for a_name, a_type in self.current_type.all_attributes(): + cil_type.attributes.append((a_name.name, self.to_attr_name(a_name.name, a_type.name))) + self.initialize_attr(constructor, a_name) ## add the initialization code in the constructor for method, mtype in self.current_type.all_methods(): cil_type.methods.append((method.name, self.to_function_name(method.name, mtype.name))) - - for a_name, a_type in self.current_type.all_attributes(): - cil_type.attributes.append((a_name.name, self.to_attr_name(a_name.name, a_type.name))) - func_declarations = (f for f in node.features if isinstance(f, FuncDeclarationNode)) - for feature, child_scope in zip(func_declarations, scope.children): + # definiendo el constructor en el tipo para analizar + constructor.body.expr_list.append(SelfNode()) + func_declarations = [constructor] + self.current_type.define_method(self.current_type.name, [], [], self.current_type) + + func_declarations += [f for f in node.features if isinstance(f, FuncDeclarationNode)] + for feature, child_scope in zip(func_declarations, [scope, scope.children]): self.visit(feature, child_scope) + @visitor.when(FuncDeclarationNode) def visit(self, node: FuncDeclarationNode, scope: Scope): self.current_method = self.current_type.get_method(node.id, node.pos) @@ -63,9 +72,9 @@ def visit(self, node: FuncDeclarationNode, scope: Scope): self.register_instruction(cil.ReturnNode(value)) self.current_method = None + @visitor.when(VarDeclarationNode) def visit(self, node: VarDeclarationNode, scope: Scope): - #? Aquí son solo locals o attributes también var_info = scope.find_variable(node.id) vtype = get_type(var_info.type, self.current_type) local_var = self.register_local(VariableInfo(var_info.name, vtype)) @@ -149,6 +158,11 @@ def visit(self, node: ConstantStrNode, scope: Scope): self.register_instruction(cil.LoadNode(result, data.name)) return result, StringType() + @visitor.when(SelfNode) + def visit(self, node: SelfNode, scope: Scope): + # TODO: Cual es el valor de self type? + return self.current_type.name, self.current_type + @visitor.when(VariableNode) def visit(self, node: VariableNode, scope: Scope): try: diff --git a/src/cool_parser/__pycache__/__init__.cpython-37.pyc b/src/cool_parser/__pycache__/__init__.cpython-37.pyc index 44c784cf4ec1b8225cf369139fffd9006e9d44dc..7e61009897814cfcda353437d93c2754b5339a41 100644 GIT binary patch delta 118 zcmcb`_?3~{iItk;bN$Zu;@A z#mS|qIf?r5@u432CMEg$&d&PI`MCv|IjKeZ$@%#?y2((Uu91O}fqrpOGFUjiAhDivo~_TWONC1wuaZxf@IKCjUs2HeZb1>6oMgUW&A8r5u diff --git a/src/cool_parser/__pycache__/logger.cpython-37.pyc b/src/cool_parser/__pycache__/logger.cpython-37.pyc index 9f625fcc9de15e7a9cfa0e063f79e94e93d006b5..298889ee8051620aebc2f79ce321c8bf71049a2a 100644 GIT binary patch delta 197 zcmbQwyo;IFiI2cXrly*3Qo@$jnJC(ofFM&(TeW b@^p<1j12UPi;}^@@db%R#Xu#Kiy3tQKU6=; delta 170 zcmdnRJfE4@iIi#4jB|c&L1s>BQA~1vevWQ3l&5QCU}O*@P+XJ@7LPATEGh=7ncT;y0|4(s BJKX>P diff --git a/src/cool_parser/__pycache__/parser.cpython-37.pyc b/src/cool_parser/__pycache__/parser.cpython-37.pyc index 7940ce3ce02358e3be79ae724d24abda27bac812..e710e16a9c674723b95a83000adcbde7c25e31c2 100644 GIT binary patch delta 124 zcmZ3McQB97iIBqYkCzqz?BJL@~==N4qCPR6;Mg~R(`o%@bVBz?J O#G+!LlFjbS_l*HI`X~(m delta 97 zcmX?@w=9p(iI2A0O%gB*I*SVw|00obz)F oGILUkVv_Uob99rTJY6FLBZHXYqGYged_iJSF;L0oB program - yacc.py:3381:Rule 1 program -> class_list - yacc.py:3381:Rule 2 epsilon -> - yacc.py:3381:Rule 3 class_list -> def_class class_list - yacc.py:3381:Rule 4 class_list -> def_class - yacc.py:3381:Rule 5 class_list -> error class_list - yacc.py:3381:Rule 6 def_class -> class type ocur feature_list ccur semi - yacc.py:3381:Rule 7 def_class -> class type inherits type ocur feature_list ccur semi - yacc.py:3381:Rule 8 def_class -> class error ocur feature_list ccur semi - yacc.py:3381:Rule 9 def_class -> class type ocur feature_list ccur error - yacc.py:3381:Rule 10 def_class -> class error inherits type ocur feature_list ccur semi - yacc.py:3381:Rule 11 def_class -> class error inherits error ocur feature_list ccur semi - yacc.py:3381:Rule 12 def_class -> class type inherits error ocur feature_list ccur semi - yacc.py:3381:Rule 13 def_class -> class type inherits type ocur feature_list ccur error - yacc.py:3381:Rule 14 feature_list -> epsilon - yacc.py:3381:Rule 15 feature_list -> def_attr semi feature_list - yacc.py:3381:Rule 16 feature_list -> def_func semi feature_list - yacc.py:3381:Rule 17 feature_list -> error feature_list - yacc.py:3381:Rule 18 def_attr -> id colon type - yacc.py:3381:Rule 19 def_attr -> id colon type larrow expr - yacc.py:3381:Rule 20 def_attr -> error colon type - yacc.py:3381:Rule 21 def_attr -> id colon error - yacc.py:3381:Rule 22 def_attr -> error colon type larrow expr - yacc.py:3381:Rule 23 def_attr -> id colon error larrow expr - yacc.py:3381:Rule 24 def_attr -> id colon type larrow error - yacc.py:3381:Rule 25 def_func -> id opar formals cpar colon type ocur expr ccur - yacc.py:3381:Rule 26 def_func -> error opar formals cpar colon type ocur expr ccur - yacc.py:3381:Rule 27 def_func -> id opar error cpar colon type ocur expr ccur - yacc.py:3381:Rule 28 def_func -> id opar formals cpar colon error ocur expr ccur - yacc.py:3381:Rule 29 def_func -> id opar formals cpar colon type ocur error ccur - yacc.py:3381:Rule 30 formals -> param_list - yacc.py:3381:Rule 31 formals -> param_list_empty - yacc.py:3381:Rule 32 param_list -> param - yacc.py:3381:Rule 33 param_list -> param comma param_list - yacc.py:3381:Rule 34 param_list_empty -> epsilon - yacc.py:3381:Rule 35 param -> id colon type - yacc.py:3381:Rule 36 let_list -> let_assign - yacc.py:3381:Rule 37 let_list -> let_assign comma let_list - yacc.py:3381:Rule 38 let_assign -> param larrow expr - yacc.py:3381:Rule 39 let_assign -> param - yacc.py:3381:Rule 40 cases_list -> casep semi - yacc.py:3381:Rule 41 cases_list -> casep semi cases_list - yacc.py:3381:Rule 42 cases_list -> error cases_list - yacc.py:3381:Rule 43 cases_list -> error semi - yacc.py:3381:Rule 44 casep -> id colon type rarrow expr - yacc.py:3381:Rule 45 expr -> id larrow expr - yacc.py:3381:Rule 46 expr -> comp - yacc.py:3381:Rule 47 comp -> comp less op - yacc.py:3381:Rule 48 comp -> comp lesseq op - yacc.py:3381:Rule 49 comp -> comp equal op - yacc.py:3381:Rule 50 comp -> op - yacc.py:3381:Rule 51 op -> op plus term - yacc.py:3381:Rule 52 op -> op minus term - yacc.py:3381:Rule 53 op -> term - yacc.py:3381:Rule 54 term -> term star base_call - yacc.py:3381:Rule 55 term -> term div base_call - yacc.py:3381:Rule 56 term -> base_call - yacc.py:3381:Rule 57 term -> term star error - yacc.py:3381:Rule 58 term -> term div error - yacc.py:3381:Rule 59 base_call -> factor arroba type dot func_call - yacc.py:3381:Rule 60 base_call -> factor - yacc.py:3381:Rule 61 base_call -> error arroba type dot func_call - yacc.py:3381:Rule 62 base_call -> factor arroba error dot func_call - yacc.py:3381:Rule 63 factor -> atom - yacc.py:3381:Rule 64 factor -> opar expr cpar - yacc.py:3381:Rule 65 factor -> factor dot func_call - yacc.py:3381:Rule 66 factor -> not expr - yacc.py:3381:Rule 67 factor -> func_call - yacc.py:3381:Rule 68 factor -> isvoid base_call - yacc.py:3381:Rule 69 factor -> nox base_call - yacc.py:3381:Rule 70 factor -> let let_list in expr - yacc.py:3381:Rule 71 factor -> case expr of cases_list esac - yacc.py:3381:Rule 72 factor -> if expr then expr else expr fi - yacc.py:3381:Rule 73 factor -> while expr loop expr pool - yacc.py:3381:Rule 74 atom -> num - yacc.py:3381:Rule 75 atom -> id - yacc.py:3381:Rule 76 atom -> new type - yacc.py:3381:Rule 77 atom -> ocur block ccur - yacc.py:3381:Rule 78 atom -> error block ccur - yacc.py:3381:Rule 79 atom -> ocur error ccur - yacc.py:3381:Rule 80 atom -> ocur block error - yacc.py:3381:Rule 81 atom -> true - yacc.py:3381:Rule 82 atom -> false - yacc.py:3381:Rule 83 atom -> string - yacc.py:3381:Rule 84 block -> expr semi - yacc.py:3381:Rule 85 block -> expr semi block - yacc.py:3381:Rule 86 block -> error block - yacc.py:3381:Rule 87 block -> error semi - yacc.py:3381:Rule 88 func_call -> id opar args cpar - yacc.py:3381:Rule 89 func_call -> id opar error cpar - yacc.py:3381:Rule 90 func_call -> error opar args cpar - yacc.py:3381:Rule 91 args -> arg_list - yacc.py:3381:Rule 92 args -> arg_list_empty - yacc.py:3381:Rule 93 arg_list -> expr - yacc.py:3381:Rule 94 arg_list -> expr comma arg_list - yacc.py:3381:Rule 95 arg_list -> error arg_list - yacc.py:3381:Rule 96 arg_list_empty -> epsilon - yacc.py:3399: - yacc.py:3400:Terminals, with rules where they appear - yacc.py:3401: - yacc.py:3405:arroba : 59 61 62 - yacc.py:3405:case : 71 - yacc.py:3405:ccur : 6 7 8 9 10 11 12 13 25 26 27 28 29 77 78 79 - yacc.py:3405:class : 6 7 8 9 10 11 12 13 - yacc.py:3405:colon : 18 19 20 21 22 23 24 25 26 27 28 29 35 44 - yacc.py:3405:comma : 33 37 94 - yacc.py:3405:cpar : 25 26 27 28 29 64 88 89 90 - yacc.py:3405:div : 55 58 - yacc.py:3405:dot : 59 61 62 65 - yacc.py:3405:else : 72 - yacc.py:3405:equal : 49 - yacc.py:3405:error : 5 8 9 10 11 11 12 13 17 20 21 22 23 24 26 27 28 29 42 43 57 58 61 62 78 79 80 86 87 89 90 95 - yacc.py:3405:esac : 71 - yacc.py:3405:false : 82 - yacc.py:3405:fi : 72 - yacc.py:3405:id : 18 19 21 23 24 25 27 28 29 35 44 45 75 88 89 - yacc.py:3405:if : 72 - yacc.py:3405:in : 70 - yacc.py:3405:inherits : 7 10 11 12 13 - yacc.py:3405:isvoid : 68 - yacc.py:3405:larrow : 19 22 23 24 38 45 - yacc.py:3405:less : 47 - yacc.py:3405:lesseq : 48 - yacc.py:3405:let : 70 - yacc.py:3405:loop : 73 - yacc.py:3405:minus : 52 - yacc.py:3405:new : 76 - yacc.py:3405:not : 66 - yacc.py:3405:nox : 69 - yacc.py:3405:num : 74 - yacc.py:3405:ocur : 6 7 8 9 10 11 12 13 25 26 27 28 29 77 79 80 - yacc.py:3405:of : 71 - yacc.py:3405:opar : 25 26 27 28 29 64 88 89 90 - yacc.py:3405:plus : 51 - yacc.py:3405:pool : 73 - yacc.py:3405:rarrow : 44 - yacc.py:3405:semi : 6 7 8 10 11 12 15 16 40 41 43 84 85 87 - yacc.py:3405:star : 54 57 - yacc.py:3405:string : 83 - yacc.py:3405:then : 72 - yacc.py:3405:true : 81 - yacc.py:3405:type : 6 7 7 9 10 12 13 13 18 19 20 22 24 25 26 27 29 35 44 59 61 76 - yacc.py:3405:while : 73 - yacc.py:3407: - yacc.py:3408:Nonterminals, with rules where they appear - yacc.py:3409: - yacc.py:3413:arg_list : 91 94 95 - yacc.py:3413:arg_list_empty : 92 - yacc.py:3413:args : 88 90 - yacc.py:3413:atom : 63 - yacc.py:3413:base_call : 54 55 56 68 69 - yacc.py:3413:block : 77 78 80 85 86 - yacc.py:3413:casep : 40 41 - yacc.py:3413:cases_list : 41 42 71 - yacc.py:3413:class_list : 1 3 5 - yacc.py:3413:comp : 46 47 48 49 - yacc.py:3413:def_attr : 15 - yacc.py:3413:def_class : 3 4 - yacc.py:3413:def_func : 16 - yacc.py:3413:epsilon : 14 34 96 - yacc.py:3413:expr : 19 22 23 25 26 27 28 38 44 45 64 66 70 71 72 72 72 73 73 84 85 93 94 - yacc.py:3413:factor : 59 60 62 65 - yacc.py:3413:feature_list : 6 7 8 9 10 11 12 13 15 16 17 - yacc.py:3413:formals : 25 26 28 29 - yacc.py:3413:func_call : 59 61 62 65 67 - yacc.py:3413:let_assign : 36 37 - yacc.py:3413:let_list : 37 70 - yacc.py:3413:op : 47 48 49 50 51 52 - yacc.py:3413:param : 32 33 38 39 - yacc.py:3413:param_list : 30 33 - yacc.py:3413:param_list_empty : 31 - yacc.py:3413:program : 0 - yacc.py:3413:term : 51 52 53 54 55 57 58 - yacc.py:3414: - yacc.py:3436:Generating LALR tables - yacc.py:2543:Parsing method: LALR - yacc.py:2561: - yacc.py:2562:state 0 - yacc.py:2563: - yacc.py:2565: (0) S' -> . program - yacc.py:2565: (1) program -> . class_list - yacc.py:2565: (3) class_list -> . def_class class_list - yacc.py:2565: (4) class_list -> . def_class - yacc.py:2565: (5) class_list -> . error class_list - yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi - yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi - yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi - yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error - yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi - yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: error shift and go to state 4 - yacc.py:2687: class shift and go to state 5 - yacc.py:2689: - yacc.py:2714: program shift and go to state 1 - yacc.py:2714: class_list shift and go to state 2 - yacc.py:2714: def_class shift and go to state 3 - yacc.py:2561: - yacc.py:2562:state 1 - yacc.py:2563: - yacc.py:2565: (0) S' -> program . - yacc.py:2566: - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 2 - yacc.py:2563: - yacc.py:2565: (1) program -> class_list . - yacc.py:2566: - yacc.py:2687: $end reduce using rule 1 (program -> class_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 3 - yacc.py:2563: - yacc.py:2565: (3) class_list -> def_class . class_list - yacc.py:2565: (4) class_list -> def_class . - yacc.py:2565: (3) class_list -> . def_class class_list - yacc.py:2565: (4) class_list -> . def_class - yacc.py:2565: (5) class_list -> . error class_list - yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi - yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi - yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi - yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error - yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi - yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: $end reduce using rule 4 (class_list -> def_class .) - yacc.py:2687: error shift and go to state 4 - yacc.py:2687: class shift and go to state 5 - yacc.py:2689: - yacc.py:2714: def_class shift and go to state 3 - yacc.py:2714: class_list shift and go to state 6 - yacc.py:2561: - yacc.py:2562:state 4 - yacc.py:2563: - yacc.py:2565: (5) class_list -> error . class_list - yacc.py:2565: (3) class_list -> . def_class class_list - yacc.py:2565: (4) class_list -> . def_class - yacc.py:2565: (5) class_list -> . error class_list - yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi - yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi - yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi - yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error - yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi - yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: error shift and go to state 4 - yacc.py:2687: class shift and go to state 5 - yacc.py:2689: - yacc.py:2714: class_list shift and go to state 7 - yacc.py:2714: def_class shift and go to state 3 - yacc.py:2561: - yacc.py:2562:state 5 - yacc.py:2563: - yacc.py:2565: (6) def_class -> class . type ocur feature_list ccur semi - yacc.py:2565: (7) def_class -> class . type inherits type ocur feature_list ccur semi - yacc.py:2565: (8) def_class -> class . error ocur feature_list ccur semi - yacc.py:2565: (9) def_class -> class . type ocur feature_list ccur error - yacc.py:2565: (10) def_class -> class . error inherits type ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> class . error inherits error ocur feature_list ccur semi - yacc.py:2565: (12) def_class -> class . type inherits error ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> class . type inherits type ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: type shift and go to state 8 - yacc.py:2687: error shift and go to state 9 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 6 - yacc.py:2563: - yacc.py:2565: (3) class_list -> def_class class_list . - yacc.py:2566: - yacc.py:2687: $end reduce using rule 3 (class_list -> def_class class_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 7 - yacc.py:2563: - yacc.py:2565: (5) class_list -> error class_list . - yacc.py:2566: - yacc.py:2687: $end reduce using rule 5 (class_list -> error class_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 8 - yacc.py:2563: - yacc.py:2565: (6) def_class -> class type . ocur feature_list ccur semi - yacc.py:2565: (7) def_class -> class type . inherits type ocur feature_list ccur semi - yacc.py:2565: (9) def_class -> class type . ocur feature_list ccur error - yacc.py:2565: (12) def_class -> class type . inherits error ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> class type . inherits type ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 10 - yacc.py:2687: inherits shift and go to state 11 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 9 - yacc.py:2563: - yacc.py:2565: (8) def_class -> class error . ocur feature_list ccur semi - yacc.py:2565: (10) def_class -> class error . inherits type ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> class error . inherits error ocur feature_list ccur semi - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 12 - yacc.py:2687: inherits shift and go to state 13 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 10 - yacc.py:2563: - yacc.py:2565: (6) def_class -> class type ocur . feature_list ccur semi - yacc.py:2565: (9) def_class -> class type ocur . feature_list ccur error - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 14 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 11 - yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits . type ocur feature_list ccur semi - yacc.py:2565: (12) def_class -> class type inherits . error ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> class type inherits . type ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: type shift and go to state 20 - yacc.py:2687: error shift and go to state 21 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 12 - yacc.py:2563: - yacc.py:2565: (8) def_class -> class error ocur . feature_list ccur semi - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 22 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 13 - yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits . type ocur feature_list ccur semi - yacc.py:2565: (11) def_class -> class error inherits . error ocur feature_list ccur semi - yacc.py:2566: - yacc.py:2687: type shift and go to state 24 - yacc.py:2687: error shift and go to state 23 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 14 - yacc.py:2563: - yacc.py:2565: (6) def_class -> class type ocur feature_list . ccur semi - yacc.py:2565: (9) def_class -> class type ocur feature_list . ccur error - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 25 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 15 - yacc.py:2563: - yacc.py:2565: (17) feature_list -> error . feature_list - yacc.py:2565: (20) def_attr -> error . colon type - yacc.py:2565: (22) def_attr -> error . colon type larrow expr - yacc.py:2565: (26) def_func -> error . opar formals cpar colon type ocur expr ccur - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: colon shift and go to state 27 - yacc.py:2687: opar shift and go to state 28 - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 26 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 16 - yacc.py:2563: - yacc.py:2565: (14) feature_list -> epsilon . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 14 (feature_list -> epsilon .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 17 - yacc.py:2563: - yacc.py:2565: (15) feature_list -> def_attr . semi feature_list - yacc.py:2566: - yacc.py:2687: semi shift and go to state 29 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 18 - yacc.py:2563: - yacc.py:2565: (16) feature_list -> def_func . semi feature_list - yacc.py:2566: - yacc.py:2687: semi shift and go to state 30 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 19 - yacc.py:2563: - yacc.py:2565: (18) def_attr -> id . colon type - yacc.py:2565: (19) def_attr -> id . colon type larrow expr - yacc.py:2565: (21) def_attr -> id . colon error - yacc.py:2565: (23) def_attr -> id . colon error larrow expr - yacc.py:2565: (24) def_attr -> id . colon type larrow error - yacc.py:2565: (25) def_func -> id . opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> id . opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> id . opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> id . opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: colon shift and go to state 31 - yacc.py:2687: opar shift and go to state 32 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 20 - yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits type . ocur feature_list ccur semi - yacc.py:2565: (13) def_class -> class type inherits type . ocur feature_list ccur error - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 33 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 21 - yacc.py:2563: - yacc.py:2565: (12) def_class -> class type inherits error . ocur feature_list ccur semi - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 34 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 22 - yacc.py:2563: - yacc.py:2565: (8) def_class -> class error ocur feature_list . ccur semi - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 35 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 23 - yacc.py:2563: - yacc.py:2565: (11) def_class -> class error inherits error . ocur feature_list ccur semi - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 36 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 24 - yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits type . ocur feature_list ccur semi - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 37 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 25 - yacc.py:2563: - yacc.py:2565: (6) def_class -> class type ocur feature_list ccur . semi - yacc.py:2565: (9) def_class -> class type ocur feature_list ccur . error - yacc.py:2566: - yacc.py:2687: semi shift and go to state 38 - yacc.py:2687: error shift and go to state 39 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 26 - yacc.py:2563: - yacc.py:2565: (17) feature_list -> error feature_list . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 17 (feature_list -> error feature_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 27 - yacc.py:2563: - yacc.py:2565: (20) def_attr -> error colon . type - yacc.py:2565: (22) def_attr -> error colon . type larrow expr - yacc.py:2566: - yacc.py:2687: type shift and go to state 40 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 28 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar . formals cpar colon type ocur expr ccur - yacc.py:2565: (30) formals -> . param_list - yacc.py:2565: (31) formals -> . param_list_empty - yacc.py:2565: (32) param_list -> . param - yacc.py:2565: (33) param_list -> . param comma param_list - yacc.py:2565: (34) param_list_empty -> . epsilon - yacc.py:2565: (35) param -> . id colon type - yacc.py:2565: (2) epsilon -> . - yacc.py:2566: - yacc.py:2687: id shift and go to state 46 - yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2689: - yacc.py:2714: formals shift and go to state 41 - yacc.py:2714: param_list shift and go to state 42 - yacc.py:2714: param_list_empty shift and go to state 43 - yacc.py:2714: param shift and go to state 44 - yacc.py:2714: epsilon shift and go to state 45 - yacc.py:2561: - yacc.py:2562:state 29 - yacc.py:2563: - yacc.py:2565: (15) feature_list -> def_attr semi . feature_list - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: feature_list shift and go to state 47 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 30 - yacc.py:2563: - yacc.py:2565: (16) feature_list -> def_func semi . feature_list - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2714: feature_list shift and go to state 48 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2561: - yacc.py:2562:state 31 - yacc.py:2563: - yacc.py:2565: (18) def_attr -> id colon . type - yacc.py:2565: (19) def_attr -> id colon . type larrow expr - yacc.py:2565: (21) def_attr -> id colon . error - yacc.py:2565: (23) def_attr -> id colon . error larrow expr - yacc.py:2565: (24) def_attr -> id colon . type larrow error - yacc.py:2566: - yacc.py:2687: type shift and go to state 49 - yacc.py:2687: error shift and go to state 50 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 32 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar . formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> id opar . error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> id opar . formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> id opar . formals cpar colon type ocur error ccur - yacc.py:2565: (30) formals -> . param_list - yacc.py:2565: (31) formals -> . param_list_empty - yacc.py:2565: (32) param_list -> . param - yacc.py:2565: (33) param_list -> . param comma param_list - yacc.py:2565: (34) param_list_empty -> . epsilon - yacc.py:2565: (35) param -> . id colon type - yacc.py:2565: (2) epsilon -> . - yacc.py:2566: - yacc.py:2687: error shift and go to state 52 - yacc.py:2687: id shift and go to state 46 - yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2689: - yacc.py:2714: formals shift and go to state 51 - yacc.py:2714: param_list shift and go to state 42 - yacc.py:2714: param_list_empty shift and go to state 43 - yacc.py:2714: param shift and go to state 44 - yacc.py:2714: epsilon shift and go to state 45 - yacc.py:2561: - yacc.py:2562:state 33 - yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits type ocur . feature_list ccur semi - yacc.py:2565: (13) def_class -> class type inherits type ocur . feature_list ccur error - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 53 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 34 - yacc.py:2563: - yacc.py:2565: (12) def_class -> class type inherits error ocur . feature_list ccur semi - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 54 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 35 - yacc.py:2563: - yacc.py:2565: (8) def_class -> class error ocur feature_list ccur . semi - yacc.py:2566: - yacc.py:2687: semi shift and go to state 55 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 36 - yacc.py:2563: - yacc.py:2565: (11) def_class -> class error inherits error ocur . feature_list ccur semi - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 56 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 37 - yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits type ocur . feature_list ccur semi - yacc.py:2565: (14) feature_list -> . epsilon - yacc.py:2565: (15) feature_list -> . def_attr semi feature_list - yacc.py:2565: (16) feature_list -> . def_func semi feature_list - yacc.py:2565: (17) feature_list -> . error feature_list - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (18) def_attr -> . id colon type - yacc.py:2565: (19) def_attr -> . id colon type larrow expr - yacc.py:2565: (20) def_attr -> . error colon type - yacc.py:2565: (21) def_attr -> . id colon error - yacc.py:2565: (22) def_attr -> . error colon type larrow expr - yacc.py:2565: (23) def_attr -> . id colon error larrow expr - yacc.py:2565: (24) def_attr -> . id colon type larrow error - yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur - yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur - yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: error shift and go to state 15 - yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) - yacc.py:2687: id shift and go to state 19 - yacc.py:2689: - yacc.py:2714: feature_list shift and go to state 57 - yacc.py:2714: epsilon shift and go to state 16 - yacc.py:2714: def_attr shift and go to state 17 - yacc.py:2714: def_func shift and go to state 18 - yacc.py:2561: - yacc.py:2562:state 38 - yacc.py:2563: - yacc.py:2565: (6) def_class -> class type ocur feature_list ccur semi . - yacc.py:2566: - yacc.py:2687: error reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 39 - yacc.py:2563: - yacc.py:2565: (9) def_class -> class type ocur feature_list ccur error . - yacc.py:2566: - yacc.py:2687: error reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) - yacc.py:2687: class reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) - yacc.py:2687: $end reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 40 - yacc.py:2563: - yacc.py:2565: (20) def_attr -> error colon type . - yacc.py:2565: (22) def_attr -> error colon type . larrow expr - yacc.py:2566: - yacc.py:2687: semi reduce using rule 20 (def_attr -> error colon type .) - yacc.py:2687: larrow shift and go to state 58 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 41 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals . cpar colon type ocur expr ccur - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 59 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 42 - yacc.py:2563: - yacc.py:2565: (30) formals -> param_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 30 (formals -> param_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 43 - yacc.py:2563: - yacc.py:2565: (31) formals -> param_list_empty . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 31 (formals -> param_list_empty .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 44 - yacc.py:2563: - yacc.py:2565: (32) param_list -> param . - yacc.py:2565: (33) param_list -> param . comma param_list - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 32 (param_list -> param .) - yacc.py:2687: comma shift and go to state 60 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 45 - yacc.py:2563: - yacc.py:2565: (34) param_list_empty -> epsilon . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 34 (param_list_empty -> epsilon .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 46 - yacc.py:2563: - yacc.py:2565: (35) param -> id . colon type - yacc.py:2566: - yacc.py:2687: colon shift and go to state 61 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 47 - yacc.py:2563: - yacc.py:2565: (15) feature_list -> def_attr semi feature_list . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 15 (feature_list -> def_attr semi feature_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 48 - yacc.py:2563: - yacc.py:2565: (16) feature_list -> def_func semi feature_list . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 16 (feature_list -> def_func semi feature_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 49 - yacc.py:2563: - yacc.py:2565: (18) def_attr -> id colon type . - yacc.py:2565: (19) def_attr -> id colon type . larrow expr - yacc.py:2565: (24) def_attr -> id colon type . larrow error - yacc.py:2566: - yacc.py:2687: semi reduce using rule 18 (def_attr -> id colon type .) - yacc.py:2687: larrow shift and go to state 62 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 50 - yacc.py:2563: - yacc.py:2565: (21) def_attr -> id colon error . - yacc.py:2565: (23) def_attr -> id colon error . larrow expr - yacc.py:2566: - yacc.py:2687: semi reduce using rule 21 (def_attr -> id colon error .) - yacc.py:2687: larrow shift and go to state 63 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 51 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals . cpar colon type ocur expr ccur - yacc.py:2565: (28) def_func -> id opar formals . cpar colon error ocur expr ccur - yacc.py:2565: (29) def_func -> id opar formals . cpar colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 64 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 52 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error . cpar colon type ocur expr ccur - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 65 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 53 - yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list . ccur semi - yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list . ccur error - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 66 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 54 - yacc.py:2563: - yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list . ccur semi - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 67 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 55 - yacc.py:2563: - yacc.py:2565: (8) def_class -> class error ocur feature_list ccur semi . - yacc.py:2566: - yacc.py:2687: error reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 56 - yacc.py:2563: - yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list . ccur semi - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 68 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 57 - yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list . ccur semi - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 69 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 58 - yacc.py:2563: - yacc.py:2565: (22) def_attr -> error colon type larrow . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 71 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 59 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar . colon type ocur expr ccur - yacc.py:2566: - yacc.py:2687: colon shift and go to state 94 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 60 - yacc.py:2563: - yacc.py:2565: (33) param_list -> param comma . param_list - yacc.py:2565: (32) param_list -> . param - yacc.py:2565: (33) param_list -> . param comma param_list - yacc.py:2565: (35) param -> . id colon type - yacc.py:2566: - yacc.py:2687: id shift and go to state 46 - yacc.py:2689: - yacc.py:2714: param shift and go to state 44 - yacc.py:2714: param_list shift and go to state 95 - yacc.py:2561: - yacc.py:2562:state 61 - yacc.py:2563: - yacc.py:2565: (35) param -> id colon . type - yacc.py:2566: - yacc.py:2687: type shift and go to state 96 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 62 - yacc.py:2563: - yacc.py:2565: (19) def_attr -> id colon type larrow . expr - yacc.py:2565: (24) def_attr -> id colon type larrow . error - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 98 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 97 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 63 - yacc.py:2563: - yacc.py:2565: (23) def_attr -> id colon error larrow . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 99 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 64 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar . colon type ocur expr ccur - yacc.py:2565: (28) def_func -> id opar formals cpar . colon error ocur expr ccur - yacc.py:2565: (29) def_func -> id opar formals cpar . colon type ocur error ccur - yacc.py:2566: - yacc.py:2687: colon shift and go to state 100 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 65 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar . colon type ocur expr ccur - yacc.py:2566: - yacc.py:2687: colon shift and go to state 101 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 66 - yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list ccur . semi - yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list ccur . error - yacc.py:2566: - yacc.py:2687: semi shift and go to state 102 - yacc.py:2687: error shift and go to state 103 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 67 - yacc.py:2563: - yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list ccur . semi - yacc.py:2566: - yacc.py:2687: semi shift and go to state 104 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 68 - yacc.py:2563: - yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list ccur . semi - yacc.py:2566: - yacc.py:2687: semi shift and go to state 105 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 69 - yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list ccur . semi - yacc.py:2566: - yacc.py:2687: semi shift and go to state 106 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 70 - yacc.py:2563: - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 71 - yacc.py:2563: - yacc.py:2565: (22) def_attr -> error colon type larrow expr . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 22 (def_attr -> error colon type larrow expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 72 - yacc.py:2563: - yacc.py:2565: (45) expr -> id . larrow expr - yacc.py:2565: (75) atom -> id . - yacc.py:2565: (88) func_call -> id . opar args cpar - yacc.py:2565: (89) func_call -> id . opar error cpar - yacc.py:2566: - yacc.py:2687: larrow shift and go to state 112 - yacc.py:2687: arroba reduce using rule 75 (atom -> id .) - yacc.py:2687: dot reduce using rule 75 (atom -> id .) - yacc.py:2687: star reduce using rule 75 (atom -> id .) - yacc.py:2687: div reduce using rule 75 (atom -> id .) - yacc.py:2687: plus reduce using rule 75 (atom -> id .) - yacc.py:2687: minus reduce using rule 75 (atom -> id .) - yacc.py:2687: less reduce using rule 75 (atom -> id .) - yacc.py:2687: lesseq reduce using rule 75 (atom -> id .) - yacc.py:2687: equal reduce using rule 75 (atom -> id .) - yacc.py:2687: semi reduce using rule 75 (atom -> id .) - yacc.py:2687: cpar reduce using rule 75 (atom -> id .) - yacc.py:2687: of reduce using rule 75 (atom -> id .) - yacc.py:2687: then reduce using rule 75 (atom -> id .) - yacc.py:2687: loop reduce using rule 75 (atom -> id .) - yacc.py:2687: comma reduce using rule 75 (atom -> id .) - yacc.py:2687: in reduce using rule 75 (atom -> id .) - yacc.py:2687: else reduce using rule 75 (atom -> id .) - yacc.py:2687: pool reduce using rule 75 (atom -> id .) - yacc.py:2687: ccur reduce using rule 75 (atom -> id .) - yacc.py:2687: fi reduce using rule 75 (atom -> id .) - yacc.py:2687: opar shift and go to state 113 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 73 - yacc.py:2563: - yacc.py:2565: (46) expr -> comp . - yacc.py:2565: (47) comp -> comp . less op - yacc.py:2565: (48) comp -> comp . lesseq op - yacc.py:2565: (49) comp -> comp . equal op - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for less resolved as shift - yacc.py:2666: ! shift/reduce conflict for lesseq resolved as shift - yacc.py:2666: ! shift/reduce conflict for equal resolved as shift - yacc.py:2687: semi reduce using rule 46 (expr -> comp .) - yacc.py:2687: cpar reduce using rule 46 (expr -> comp .) - yacc.py:2687: arroba reduce using rule 46 (expr -> comp .) - yacc.py:2687: dot reduce using rule 46 (expr -> comp .) - yacc.py:2687: star reduce using rule 46 (expr -> comp .) - yacc.py:2687: div reduce using rule 46 (expr -> comp .) - yacc.py:2687: plus reduce using rule 46 (expr -> comp .) - yacc.py:2687: minus reduce using rule 46 (expr -> comp .) - yacc.py:2687: of reduce using rule 46 (expr -> comp .) - yacc.py:2687: then reduce using rule 46 (expr -> comp .) - yacc.py:2687: loop reduce using rule 46 (expr -> comp .) - yacc.py:2687: comma reduce using rule 46 (expr -> comp .) - yacc.py:2687: in reduce using rule 46 (expr -> comp .) - yacc.py:2687: else reduce using rule 46 (expr -> comp .) - yacc.py:2687: pool reduce using rule 46 (expr -> comp .) - yacc.py:2687: ccur reduce using rule 46 (expr -> comp .) - yacc.py:2687: fi reduce using rule 46 (expr -> comp .) - yacc.py:2687: less shift and go to state 114 - yacc.py:2687: lesseq shift and go to state 115 - yacc.py:2687: equal shift and go to state 116 - yacc.py:2689: - yacc.py:2696: ! less [ reduce using rule 46 (expr -> comp .) ] - yacc.py:2696: ! lesseq [ reduce using rule 46 (expr -> comp .) ] - yacc.py:2696: ! equal [ reduce using rule 46 (expr -> comp .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 74 - yacc.py:2563: - yacc.py:2565: (50) comp -> op . - yacc.py:2565: (51) op -> op . plus term - yacc.py:2565: (52) op -> op . minus term - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for plus resolved as shift - yacc.py:2666: ! shift/reduce conflict for minus resolved as shift - yacc.py:2687: less reduce using rule 50 (comp -> op .) - yacc.py:2687: lesseq reduce using rule 50 (comp -> op .) - yacc.py:2687: equal reduce using rule 50 (comp -> op .) - yacc.py:2687: semi reduce using rule 50 (comp -> op .) - yacc.py:2687: cpar reduce using rule 50 (comp -> op .) - yacc.py:2687: arroba reduce using rule 50 (comp -> op .) - yacc.py:2687: dot reduce using rule 50 (comp -> op .) - yacc.py:2687: star reduce using rule 50 (comp -> op .) - yacc.py:2687: div reduce using rule 50 (comp -> op .) - yacc.py:2687: of reduce using rule 50 (comp -> op .) - yacc.py:2687: then reduce using rule 50 (comp -> op .) - yacc.py:2687: loop reduce using rule 50 (comp -> op .) - yacc.py:2687: comma reduce using rule 50 (comp -> op .) - yacc.py:2687: in reduce using rule 50 (comp -> op .) - yacc.py:2687: else reduce using rule 50 (comp -> op .) - yacc.py:2687: pool reduce using rule 50 (comp -> op .) - yacc.py:2687: ccur reduce using rule 50 (comp -> op .) - yacc.py:2687: fi reduce using rule 50 (comp -> op .) - yacc.py:2687: plus shift and go to state 117 - yacc.py:2687: minus shift and go to state 118 - yacc.py:2689: - yacc.py:2696: ! plus [ reduce using rule 50 (comp -> op .) ] - yacc.py:2696: ! minus [ reduce using rule 50 (comp -> op .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 75 - yacc.py:2563: - yacc.py:2565: (53) op -> term . - yacc.py:2565: (54) term -> term . star base_call - yacc.py:2565: (55) term -> term . div base_call - yacc.py:2565: (57) term -> term . star error - yacc.py:2565: (58) term -> term . div error - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for star resolved as shift - yacc.py:2666: ! shift/reduce conflict for div resolved as shift - yacc.py:2687: plus reduce using rule 53 (op -> term .) - yacc.py:2687: minus reduce using rule 53 (op -> term .) - yacc.py:2687: less reduce using rule 53 (op -> term .) - yacc.py:2687: lesseq reduce using rule 53 (op -> term .) - yacc.py:2687: equal reduce using rule 53 (op -> term .) - yacc.py:2687: semi reduce using rule 53 (op -> term .) - yacc.py:2687: cpar reduce using rule 53 (op -> term .) - yacc.py:2687: arroba reduce using rule 53 (op -> term .) - yacc.py:2687: dot reduce using rule 53 (op -> term .) - yacc.py:2687: of reduce using rule 53 (op -> term .) - yacc.py:2687: then reduce using rule 53 (op -> term .) - yacc.py:2687: loop reduce using rule 53 (op -> term .) - yacc.py:2687: comma reduce using rule 53 (op -> term .) - yacc.py:2687: in reduce using rule 53 (op -> term .) - yacc.py:2687: else reduce using rule 53 (op -> term .) - yacc.py:2687: pool reduce using rule 53 (op -> term .) - yacc.py:2687: ccur reduce using rule 53 (op -> term .) - yacc.py:2687: fi reduce using rule 53 (op -> term .) - yacc.py:2687: star shift and go to state 119 - yacc.py:2687: div shift and go to state 120 - yacc.py:2689: - yacc.py:2696: ! star [ reduce using rule 53 (op -> term .) ] - yacc.py:2696: ! div [ reduce using rule 53 (op -> term .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 76 - yacc.py:2563: - yacc.py:2565: (56) term -> base_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 56 (term -> base_call .) - yacc.py:2687: div reduce using rule 56 (term -> base_call .) - yacc.py:2687: plus reduce using rule 56 (term -> base_call .) - yacc.py:2687: minus reduce using rule 56 (term -> base_call .) - yacc.py:2687: less reduce using rule 56 (term -> base_call .) - yacc.py:2687: lesseq reduce using rule 56 (term -> base_call .) - yacc.py:2687: equal reduce using rule 56 (term -> base_call .) - yacc.py:2687: semi reduce using rule 56 (term -> base_call .) - yacc.py:2687: cpar reduce using rule 56 (term -> base_call .) - yacc.py:2687: arroba reduce using rule 56 (term -> base_call .) - yacc.py:2687: dot reduce using rule 56 (term -> base_call .) - yacc.py:2687: of reduce using rule 56 (term -> base_call .) - yacc.py:2687: then reduce using rule 56 (term -> base_call .) - yacc.py:2687: loop reduce using rule 56 (term -> base_call .) - yacc.py:2687: comma reduce using rule 56 (term -> base_call .) - yacc.py:2687: in reduce using rule 56 (term -> base_call .) - yacc.py:2687: else reduce using rule 56 (term -> base_call .) - yacc.py:2687: pool reduce using rule 56 (term -> base_call .) - yacc.py:2687: ccur reduce using rule 56 (term -> base_call .) - yacc.py:2687: fi reduce using rule 56 (term -> base_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 77 - yacc.py:2563: - yacc.py:2565: (59) base_call -> factor . arroba type dot func_call - yacc.py:2565: (60) base_call -> factor . - yacc.py:2565: (62) base_call -> factor . arroba error dot func_call - yacc.py:2565: (65) factor -> factor . dot func_call - yacc.py:2566: - yacc.py:2609: ! shift/reduce conflict for arroba resolved as shift - yacc.py:2666: ! shift/reduce conflict for dot resolved as shift - yacc.py:2687: arroba shift and go to state 121 - yacc.py:2687: star reduce using rule 60 (base_call -> factor .) - yacc.py:2687: div reduce using rule 60 (base_call -> factor .) - yacc.py:2687: plus reduce using rule 60 (base_call -> factor .) - yacc.py:2687: minus reduce using rule 60 (base_call -> factor .) - yacc.py:2687: less reduce using rule 60 (base_call -> factor .) - yacc.py:2687: lesseq reduce using rule 60 (base_call -> factor .) - yacc.py:2687: equal reduce using rule 60 (base_call -> factor .) - yacc.py:2687: semi reduce using rule 60 (base_call -> factor .) - yacc.py:2687: cpar reduce using rule 60 (base_call -> factor .) - yacc.py:2687: of reduce using rule 60 (base_call -> factor .) - yacc.py:2687: then reduce using rule 60 (base_call -> factor .) - yacc.py:2687: loop reduce using rule 60 (base_call -> factor .) - yacc.py:2687: comma reduce using rule 60 (base_call -> factor .) - yacc.py:2687: in reduce using rule 60 (base_call -> factor .) - yacc.py:2687: else reduce using rule 60 (base_call -> factor .) - yacc.py:2687: pool reduce using rule 60 (base_call -> factor .) - yacc.py:2687: ccur reduce using rule 60 (base_call -> factor .) - yacc.py:2687: fi reduce using rule 60 (base_call -> factor .) - yacc.py:2687: dot shift and go to state 122 - yacc.py:2689: - yacc.py:2696: ! arroba [ reduce using rule 60 (base_call -> factor .) ] - yacc.py:2696: ! dot [ reduce using rule 60 (base_call -> factor .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 78 - yacc.py:2563: - yacc.py:2565: (67) factor -> func_call . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 67 (factor -> func_call .) - yacc.py:2687: dot reduce using rule 67 (factor -> func_call .) - yacc.py:2687: star reduce using rule 67 (factor -> func_call .) - yacc.py:2687: div reduce using rule 67 (factor -> func_call .) - yacc.py:2687: plus reduce using rule 67 (factor -> func_call .) - yacc.py:2687: minus reduce using rule 67 (factor -> func_call .) - yacc.py:2687: less reduce using rule 67 (factor -> func_call .) - yacc.py:2687: lesseq reduce using rule 67 (factor -> func_call .) - yacc.py:2687: equal reduce using rule 67 (factor -> func_call .) - yacc.py:2687: semi reduce using rule 67 (factor -> func_call .) - yacc.py:2687: cpar reduce using rule 67 (factor -> func_call .) - yacc.py:2687: of reduce using rule 67 (factor -> func_call .) - yacc.py:2687: then reduce using rule 67 (factor -> func_call .) - yacc.py:2687: loop reduce using rule 67 (factor -> func_call .) - yacc.py:2687: comma reduce using rule 67 (factor -> func_call .) - yacc.py:2687: in reduce using rule 67 (factor -> func_call .) - yacc.py:2687: else reduce using rule 67 (factor -> func_call .) - yacc.py:2687: pool reduce using rule 67 (factor -> func_call .) - yacc.py:2687: ccur reduce using rule 67 (factor -> func_call .) - yacc.py:2687: fi reduce using rule 67 (factor -> func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 79 - yacc.py:2563: - yacc.py:2565: (63) factor -> atom . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 63 (factor -> atom .) - yacc.py:2687: dot reduce using rule 63 (factor -> atom .) - yacc.py:2687: star reduce using rule 63 (factor -> atom .) - yacc.py:2687: div reduce using rule 63 (factor -> atom .) - yacc.py:2687: plus reduce using rule 63 (factor -> atom .) - yacc.py:2687: minus reduce using rule 63 (factor -> atom .) - yacc.py:2687: less reduce using rule 63 (factor -> atom .) - yacc.py:2687: lesseq reduce using rule 63 (factor -> atom .) - yacc.py:2687: equal reduce using rule 63 (factor -> atom .) - yacc.py:2687: semi reduce using rule 63 (factor -> atom .) - yacc.py:2687: cpar reduce using rule 63 (factor -> atom .) - yacc.py:2687: of reduce using rule 63 (factor -> atom .) - yacc.py:2687: then reduce using rule 63 (factor -> atom .) - yacc.py:2687: loop reduce using rule 63 (factor -> atom .) - yacc.py:2687: comma reduce using rule 63 (factor -> atom .) - yacc.py:2687: in reduce using rule 63 (factor -> atom .) - yacc.py:2687: else reduce using rule 63 (factor -> atom .) - yacc.py:2687: pool reduce using rule 63 (factor -> atom .) - yacc.py:2687: ccur reduce using rule 63 (factor -> atom .) - yacc.py:2687: fi reduce using rule 63 (factor -> atom .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 80 - yacc.py:2563: - yacc.py:2565: (64) factor -> opar . expr cpar - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 123 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 81 - yacc.py:2563: - yacc.py:2565: (66) factor -> not . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 124 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 82 - yacc.py:2563: - yacc.py:2565: (68) factor -> isvoid . base_call - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: base_call shift and go to state 125 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 83 - yacc.py:2563: - yacc.py:2565: (69) factor -> nox . base_call - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: base_call shift and go to state 127 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 84 - yacc.py:2563: - yacc.py:2565: (70) factor -> let . let_list in expr - yacc.py:2565: (36) let_list -> . let_assign - yacc.py:2565: (37) let_list -> . let_assign comma let_list - yacc.py:2565: (38) let_assign -> . param larrow expr - yacc.py:2565: (39) let_assign -> . param - yacc.py:2565: (35) param -> . id colon type - yacc.py:2566: - yacc.py:2687: id shift and go to state 46 - yacc.py:2689: - yacc.py:2714: let_list shift and go to state 128 - yacc.py:2714: let_assign shift and go to state 129 - yacc.py:2714: param shift and go to state 130 - yacc.py:2561: - yacc.py:2562:state 85 - yacc.py:2563: - yacc.py:2565: (71) factor -> case . expr of cases_list esac - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 131 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 86 - yacc.py:2563: - yacc.py:2565: (72) factor -> if . expr then expr else expr fi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 132 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 87 - yacc.py:2563: - yacc.py:2565: (73) factor -> while . expr loop expr pool - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 133 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 88 - yacc.py:2563: - yacc.py:2565: (74) atom -> num . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 74 (atom -> num .) - yacc.py:2687: dot reduce using rule 74 (atom -> num .) - yacc.py:2687: star reduce using rule 74 (atom -> num .) - yacc.py:2687: div reduce using rule 74 (atom -> num .) - yacc.py:2687: plus reduce using rule 74 (atom -> num .) - yacc.py:2687: minus reduce using rule 74 (atom -> num .) - yacc.py:2687: less reduce using rule 74 (atom -> num .) - yacc.py:2687: lesseq reduce using rule 74 (atom -> num .) - yacc.py:2687: equal reduce using rule 74 (atom -> num .) - yacc.py:2687: semi reduce using rule 74 (atom -> num .) - yacc.py:2687: cpar reduce using rule 74 (atom -> num .) - yacc.py:2687: of reduce using rule 74 (atom -> num .) - yacc.py:2687: then reduce using rule 74 (atom -> num .) - yacc.py:2687: loop reduce using rule 74 (atom -> num .) - yacc.py:2687: comma reduce using rule 74 (atom -> num .) - yacc.py:2687: in reduce using rule 74 (atom -> num .) - yacc.py:2687: else reduce using rule 74 (atom -> num .) - yacc.py:2687: pool reduce using rule 74 (atom -> num .) - yacc.py:2687: ccur reduce using rule 74 (atom -> num .) - yacc.py:2687: fi reduce using rule 74 (atom -> num .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 89 - yacc.py:2563: - yacc.py:2565: (76) atom -> new . type - yacc.py:2566: - yacc.py:2687: type shift and go to state 134 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 90 - yacc.py:2563: - yacc.py:2565: (77) atom -> ocur . block ccur - yacc.py:2565: (79) atom -> ocur . error ccur - yacc.py:2565: (80) atom -> ocur . block error - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 136 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: block shift and go to state 135 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 91 - yacc.py:2563: - yacc.py:2565: (81) atom -> true . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 81 (atom -> true .) - yacc.py:2687: dot reduce using rule 81 (atom -> true .) - yacc.py:2687: star reduce using rule 81 (atom -> true .) - yacc.py:2687: div reduce using rule 81 (atom -> true .) - yacc.py:2687: plus reduce using rule 81 (atom -> true .) - yacc.py:2687: minus reduce using rule 81 (atom -> true .) - yacc.py:2687: less reduce using rule 81 (atom -> true .) - yacc.py:2687: lesseq reduce using rule 81 (atom -> true .) - yacc.py:2687: equal reduce using rule 81 (atom -> true .) - yacc.py:2687: semi reduce using rule 81 (atom -> true .) - yacc.py:2687: cpar reduce using rule 81 (atom -> true .) - yacc.py:2687: of reduce using rule 81 (atom -> true .) - yacc.py:2687: then reduce using rule 81 (atom -> true .) - yacc.py:2687: loop reduce using rule 81 (atom -> true .) - yacc.py:2687: comma reduce using rule 81 (atom -> true .) - yacc.py:2687: in reduce using rule 81 (atom -> true .) - yacc.py:2687: else reduce using rule 81 (atom -> true .) - yacc.py:2687: pool reduce using rule 81 (atom -> true .) - yacc.py:2687: ccur reduce using rule 81 (atom -> true .) - yacc.py:2687: fi reduce using rule 81 (atom -> true .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 92 - yacc.py:2563: - yacc.py:2565: (82) atom -> false . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 82 (atom -> false .) - yacc.py:2687: dot reduce using rule 82 (atom -> false .) - yacc.py:2687: star reduce using rule 82 (atom -> false .) - yacc.py:2687: div reduce using rule 82 (atom -> false .) - yacc.py:2687: plus reduce using rule 82 (atom -> false .) - yacc.py:2687: minus reduce using rule 82 (atom -> false .) - yacc.py:2687: less reduce using rule 82 (atom -> false .) - yacc.py:2687: lesseq reduce using rule 82 (atom -> false .) - yacc.py:2687: equal reduce using rule 82 (atom -> false .) - yacc.py:2687: semi reduce using rule 82 (atom -> false .) - yacc.py:2687: cpar reduce using rule 82 (atom -> false .) - yacc.py:2687: of reduce using rule 82 (atom -> false .) - yacc.py:2687: then reduce using rule 82 (atom -> false .) - yacc.py:2687: loop reduce using rule 82 (atom -> false .) - yacc.py:2687: comma reduce using rule 82 (atom -> false .) - yacc.py:2687: in reduce using rule 82 (atom -> false .) - yacc.py:2687: else reduce using rule 82 (atom -> false .) - yacc.py:2687: pool reduce using rule 82 (atom -> false .) - yacc.py:2687: ccur reduce using rule 82 (atom -> false .) - yacc.py:2687: fi reduce using rule 82 (atom -> false .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 93 - yacc.py:2563: - yacc.py:2565: (83) atom -> string . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 83 (atom -> string .) - yacc.py:2687: dot reduce using rule 83 (atom -> string .) - yacc.py:2687: star reduce using rule 83 (atom -> string .) - yacc.py:2687: div reduce using rule 83 (atom -> string .) - yacc.py:2687: plus reduce using rule 83 (atom -> string .) - yacc.py:2687: minus reduce using rule 83 (atom -> string .) - yacc.py:2687: less reduce using rule 83 (atom -> string .) - yacc.py:2687: lesseq reduce using rule 83 (atom -> string .) - yacc.py:2687: equal reduce using rule 83 (atom -> string .) - yacc.py:2687: semi reduce using rule 83 (atom -> string .) - yacc.py:2687: cpar reduce using rule 83 (atom -> string .) - yacc.py:2687: of reduce using rule 83 (atom -> string .) - yacc.py:2687: then reduce using rule 83 (atom -> string .) - yacc.py:2687: loop reduce using rule 83 (atom -> string .) - yacc.py:2687: comma reduce using rule 83 (atom -> string .) - yacc.py:2687: in reduce using rule 83 (atom -> string .) - yacc.py:2687: else reduce using rule 83 (atom -> string .) - yacc.py:2687: pool reduce using rule 83 (atom -> string .) - yacc.py:2687: ccur reduce using rule 83 (atom -> string .) - yacc.py:2687: fi reduce using rule 83 (atom -> string .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 94 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon . type ocur expr ccur - yacc.py:2566: - yacc.py:2687: type shift and go to state 137 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 95 - yacc.py:2563: - yacc.py:2565: (33) param_list -> param comma param_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 33 (param_list -> param comma param_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 96 - yacc.py:2563: - yacc.py:2565: (35) param -> id colon type . - yacc.py:2566: - yacc.py:2687: comma reduce using rule 35 (param -> id colon type .) - yacc.py:2687: cpar reduce using rule 35 (param -> id colon type .) - yacc.py:2687: larrow reduce using rule 35 (param -> id colon type .) - yacc.py:2687: in reduce using rule 35 (param -> id colon type .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 97 - yacc.py:2563: - yacc.py:2565: (19) def_attr -> id colon type larrow expr . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 19 (def_attr -> id colon type larrow expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 98 - yacc.py:2563: - yacc.py:2565: (24) def_attr -> id colon type larrow error . - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: semi reduce using rule 24 (def_attr -> id colon type larrow error .) - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 99 - yacc.py:2563: - yacc.py:2565: (23) def_attr -> id colon error larrow expr . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 23 (def_attr -> id colon error larrow expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 100 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon . type ocur expr ccur - yacc.py:2565: (28) def_func -> id opar formals cpar colon . error ocur expr ccur - yacc.py:2565: (29) def_func -> id opar formals cpar colon . type ocur error ccur - yacc.py:2566: - yacc.py:2687: type shift and go to state 138 - yacc.py:2687: error shift and go to state 139 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 101 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon . type ocur expr ccur - yacc.py:2566: - yacc.py:2687: type shift and go to state 140 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 102 - yacc.py:2563: - yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list ccur semi . - yacc.py:2566: - yacc.py:2687: error reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 103 - yacc.py:2563: - yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list ccur error . - yacc.py:2566: - yacc.py:2687: error reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) - yacc.py:2687: class reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) - yacc.py:2687: $end reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 104 - yacc.py:2563: - yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list ccur semi . - yacc.py:2566: - yacc.py:2687: error reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 105 - yacc.py:2563: - yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list ccur semi . - yacc.py:2566: - yacc.py:2687: error reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 106 - yacc.py:2563: - yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list ccur semi . - yacc.py:2566: - yacc.py:2687: error reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) - yacc.py:2687: class reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) - yacc.py:2687: $end reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 107 - yacc.py:2563: - yacc.py:2565: (86) block -> error . block - yacc.py:2565: (87) block -> error . semi - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: semi shift and go to state 142 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: block shift and go to state 141 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 108 - yacc.py:2563: - yacc.py:2565: (61) base_call -> error arroba . type dot func_call - yacc.py:2566: - yacc.py:2687: type shift and go to state 143 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 109 - yacc.py:2563: - yacc.py:2565: (78) atom -> error block . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 144 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 110 - yacc.py:2563: - yacc.py:2565: (90) func_call -> error opar . args cpar - yacc.py:2565: (64) factor -> opar . expr cpar - yacc.py:2565: (91) args -> . arg_list - yacc.py:2565: (92) args -> . arg_list_empty - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (96) arg_list_empty -> . epsilon - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 145 - yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: args shift and go to state 146 - yacc.py:2714: expr shift and go to state 147 - yacc.py:2714: arg_list shift and go to state 148 - yacc.py:2714: arg_list_empty shift and go to state 149 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: epsilon shift and go to state 150 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 111 - yacc.py:2563: - yacc.py:2565: (84) block -> expr . semi - yacc.py:2565: (85) block -> expr . semi block - yacc.py:2566: - yacc.py:2687: semi shift and go to state 151 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 112 - yacc.py:2563: - yacc.py:2565: (45) expr -> id larrow . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 152 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 113 - yacc.py:2563: - yacc.py:2565: (88) func_call -> id opar . args cpar - yacc.py:2565: (89) func_call -> id opar . error cpar - yacc.py:2565: (91) args -> . arg_list - yacc.py:2565: (92) args -> . arg_list_empty - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (96) arg_list_empty -> . epsilon - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 154 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: args shift and go to state 153 - yacc.py:2714: arg_list shift and go to state 148 - yacc.py:2714: arg_list_empty shift and go to state 149 - yacc.py:2714: expr shift and go to state 155 - yacc.py:2714: epsilon shift and go to state 150 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 114 - yacc.py:2563: - yacc.py:2565: (47) comp -> comp less . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: op shift and go to state 156 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 115 - yacc.py:2563: - yacc.py:2565: (48) comp -> comp lesseq . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: op shift and go to state 157 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 116 - yacc.py:2563: - yacc.py:2565: (49) comp -> comp equal . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: op shift and go to state 158 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 117 - yacc.py:2563: - yacc.py:2565: (51) op -> op plus . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: term shift and go to state 159 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 118 - yacc.py:2563: - yacc.py:2565: (52) op -> op minus . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: term shift and go to state 160 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 119 - yacc.py:2563: - yacc.py:2565: (54) term -> term star . base_call - yacc.py:2565: (57) term -> term star . error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 162 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: base_call shift and go to state 161 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 120 - yacc.py:2563: - yacc.py:2565: (55) term -> term div . base_call - yacc.py:2565: (58) term -> term div . error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 164 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: id shift and go to state 126 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: base_call shift and go to state 163 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 121 - yacc.py:2563: - yacc.py:2565: (59) base_call -> factor arroba . type dot func_call - yacc.py:2565: (62) base_call -> factor arroba . error dot func_call - yacc.py:2566: - yacc.py:2687: type shift and go to state 165 - yacc.py:2687: error shift and go to state 166 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 122 - yacc.py:2563: - yacc.py:2565: (65) factor -> factor dot . func_call - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 168 - yacc.py:2687: error shift and go to state 169 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 167 - yacc.py:2561: - yacc.py:2562:state 123 - yacc.py:2563: - yacc.py:2565: (64) factor -> opar expr . cpar - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 170 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 124 - yacc.py:2563: - yacc.py:2565: (66) factor -> not expr . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 66 (factor -> not expr .) - yacc.py:2687: dot reduce using rule 66 (factor -> not expr .) - yacc.py:2687: star reduce using rule 66 (factor -> not expr .) - yacc.py:2687: div reduce using rule 66 (factor -> not expr .) - yacc.py:2687: plus reduce using rule 66 (factor -> not expr .) - yacc.py:2687: minus reduce using rule 66 (factor -> not expr .) - yacc.py:2687: less reduce using rule 66 (factor -> not expr .) - yacc.py:2687: lesseq reduce using rule 66 (factor -> not expr .) - yacc.py:2687: equal reduce using rule 66 (factor -> not expr .) - yacc.py:2687: semi reduce using rule 66 (factor -> not expr .) - yacc.py:2687: cpar reduce using rule 66 (factor -> not expr .) - yacc.py:2687: of reduce using rule 66 (factor -> not expr .) - yacc.py:2687: then reduce using rule 66 (factor -> not expr .) - yacc.py:2687: loop reduce using rule 66 (factor -> not expr .) - yacc.py:2687: comma reduce using rule 66 (factor -> not expr .) - yacc.py:2687: in reduce using rule 66 (factor -> not expr .) - yacc.py:2687: else reduce using rule 66 (factor -> not expr .) - yacc.py:2687: pool reduce using rule 66 (factor -> not expr .) - yacc.py:2687: ccur reduce using rule 66 (factor -> not expr .) - yacc.py:2687: fi reduce using rule 66 (factor -> not expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 125 - yacc.py:2563: - yacc.py:2565: (68) factor -> isvoid base_call . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: dot reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: star reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: div reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: plus reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: minus reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: less reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: lesseq reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: equal reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: semi reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: cpar reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: of reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: then reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: loop reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: comma reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: in reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: else reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: pool reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: ccur reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2687: fi reduce using rule 68 (factor -> isvoid base_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 126 - yacc.py:2563: - yacc.py:2565: (75) atom -> id . - yacc.py:2565: (88) func_call -> id . opar args cpar - yacc.py:2565: (89) func_call -> id . opar error cpar - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 75 (atom -> id .) - yacc.py:2687: dot reduce using rule 75 (atom -> id .) - yacc.py:2687: star reduce using rule 75 (atom -> id .) - yacc.py:2687: div reduce using rule 75 (atom -> id .) - yacc.py:2687: plus reduce using rule 75 (atom -> id .) - yacc.py:2687: minus reduce using rule 75 (atom -> id .) - yacc.py:2687: less reduce using rule 75 (atom -> id .) - yacc.py:2687: lesseq reduce using rule 75 (atom -> id .) - yacc.py:2687: equal reduce using rule 75 (atom -> id .) - yacc.py:2687: semi reduce using rule 75 (atom -> id .) - yacc.py:2687: cpar reduce using rule 75 (atom -> id .) - yacc.py:2687: of reduce using rule 75 (atom -> id .) - yacc.py:2687: then reduce using rule 75 (atom -> id .) - yacc.py:2687: loop reduce using rule 75 (atom -> id .) - yacc.py:2687: comma reduce using rule 75 (atom -> id .) - yacc.py:2687: in reduce using rule 75 (atom -> id .) - yacc.py:2687: else reduce using rule 75 (atom -> id .) - yacc.py:2687: pool reduce using rule 75 (atom -> id .) - yacc.py:2687: ccur reduce using rule 75 (atom -> id .) - yacc.py:2687: fi reduce using rule 75 (atom -> id .) - yacc.py:2687: opar shift and go to state 113 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 127 - yacc.py:2563: - yacc.py:2565: (69) factor -> nox base_call . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: dot reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: star reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: div reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: plus reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: minus reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: less reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: lesseq reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: equal reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: semi reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: cpar reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: of reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: then reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: loop reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: comma reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: in reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: else reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: pool reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: ccur reduce using rule 69 (factor -> nox base_call .) - yacc.py:2687: fi reduce using rule 69 (factor -> nox base_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 128 - yacc.py:2563: - yacc.py:2565: (70) factor -> let let_list . in expr - yacc.py:2566: - yacc.py:2687: in shift and go to state 171 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 129 - yacc.py:2563: - yacc.py:2565: (36) let_list -> let_assign . - yacc.py:2565: (37) let_list -> let_assign . comma let_list - yacc.py:2566: - yacc.py:2687: in reduce using rule 36 (let_list -> let_assign .) - yacc.py:2687: comma shift and go to state 172 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 130 - yacc.py:2563: - yacc.py:2565: (38) let_assign -> param . larrow expr - yacc.py:2565: (39) let_assign -> param . - yacc.py:2566: - yacc.py:2687: larrow shift and go to state 173 - yacc.py:2687: comma reduce using rule 39 (let_assign -> param .) - yacc.py:2687: in reduce using rule 39 (let_assign -> param .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 131 - yacc.py:2563: - yacc.py:2565: (71) factor -> case expr . of cases_list esac - yacc.py:2566: - yacc.py:2687: of shift and go to state 174 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 132 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr . then expr else expr fi - yacc.py:2566: - yacc.py:2687: then shift and go to state 175 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 133 - yacc.py:2563: - yacc.py:2565: (73) factor -> while expr . loop expr pool - yacc.py:2566: - yacc.py:2687: loop shift and go to state 176 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 134 - yacc.py:2563: - yacc.py:2565: (76) atom -> new type . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 76 (atom -> new type .) - yacc.py:2687: dot reduce using rule 76 (atom -> new type .) - yacc.py:2687: star reduce using rule 76 (atom -> new type .) - yacc.py:2687: div reduce using rule 76 (atom -> new type .) - yacc.py:2687: plus reduce using rule 76 (atom -> new type .) - yacc.py:2687: minus reduce using rule 76 (atom -> new type .) - yacc.py:2687: less reduce using rule 76 (atom -> new type .) - yacc.py:2687: lesseq reduce using rule 76 (atom -> new type .) - yacc.py:2687: equal reduce using rule 76 (atom -> new type .) - yacc.py:2687: semi reduce using rule 76 (atom -> new type .) - yacc.py:2687: cpar reduce using rule 76 (atom -> new type .) - yacc.py:2687: of reduce using rule 76 (atom -> new type .) - yacc.py:2687: then reduce using rule 76 (atom -> new type .) - yacc.py:2687: loop reduce using rule 76 (atom -> new type .) - yacc.py:2687: comma reduce using rule 76 (atom -> new type .) - yacc.py:2687: in reduce using rule 76 (atom -> new type .) - yacc.py:2687: else reduce using rule 76 (atom -> new type .) - yacc.py:2687: pool reduce using rule 76 (atom -> new type .) - yacc.py:2687: ccur reduce using rule 76 (atom -> new type .) - yacc.py:2687: fi reduce using rule 76 (atom -> new type .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 135 - yacc.py:2563: - yacc.py:2565: (77) atom -> ocur block . ccur - yacc.py:2565: (80) atom -> ocur block . error - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 177 - yacc.py:2687: error shift and go to state 178 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 136 - yacc.py:2563: - yacc.py:2565: (79) atom -> ocur error . ccur - yacc.py:2565: (86) block -> error . block - yacc.py:2565: (87) block -> error . semi - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 179 - yacc.py:2687: semi shift and go to state 142 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: block shift and go to state 141 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 137 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon type . ocur expr ccur - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 180 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 138 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon type . ocur expr ccur - yacc.py:2565: (29) def_func -> id opar formals cpar colon type . ocur error ccur - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 181 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 139 - yacc.py:2563: - yacc.py:2565: (28) def_func -> id opar formals cpar colon error . ocur expr ccur - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 182 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 140 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon type . ocur expr ccur - yacc.py:2566: - yacc.py:2687: ocur shift and go to state 183 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 141 - yacc.py:2563: - yacc.py:2565: (86) block -> error block . - yacc.py:2565: (78) atom -> error block . ccur - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for ccur resolved as shift - yacc.py:2687: error reduce using rule 86 (block -> error block .) - yacc.py:2687: ccur shift and go to state 144 - yacc.py:2689: - yacc.py:2696: ! ccur [ reduce using rule 86 (block -> error block .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 142 - yacc.py:2563: - yacc.py:2565: (87) block -> error semi . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 87 (block -> error semi .) - yacc.py:2687: error reduce using rule 87 (block -> error semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 143 - yacc.py:2563: - yacc.py:2565: (61) base_call -> error arroba type . dot func_call - yacc.py:2566: - yacc.py:2687: dot shift and go to state 184 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 144 - yacc.py:2563: - yacc.py:2565: (78) atom -> error block ccur . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: dot reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: star reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: div reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: plus reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: minus reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: less reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: lesseq reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: equal reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: semi reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: cpar reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: of reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: then reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: loop reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: comma reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: in reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: else reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: pool reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: ccur reduce using rule 78 (atom -> error block ccur .) - yacc.py:2687: fi reduce using rule 78 (atom -> error block ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 145 - yacc.py:2563: - yacc.py:2565: (95) arg_list -> error . arg_list - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 185 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: arg_list shift and go to state 186 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 187 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 146 - yacc.py:2563: - yacc.py:2565: (90) func_call -> error opar args . cpar - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 188 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 147 - yacc.py:2563: - yacc.py:2565: (64) factor -> opar expr . cpar - yacc.py:2565: (93) arg_list -> expr . - yacc.py:2565: (94) arg_list -> expr . comma arg_list - yacc.py:2566: - yacc.py:2609: ! shift/reduce conflict for cpar resolved as shift - yacc.py:2687: cpar shift and go to state 170 - yacc.py:2687: comma shift and go to state 189 - yacc.py:2689: - yacc.py:2696: ! cpar [ reduce using rule 93 (arg_list -> expr .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 148 - yacc.py:2563: - yacc.py:2565: (91) args -> arg_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 91 (args -> arg_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 149 - yacc.py:2563: - yacc.py:2565: (92) args -> arg_list_empty . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 92 (args -> arg_list_empty .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 150 - yacc.py:2563: - yacc.py:2565: (96) arg_list_empty -> epsilon . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 96 (arg_list_empty -> epsilon .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 151 - yacc.py:2563: - yacc.py:2565: (84) block -> expr semi . - yacc.py:2565: (85) block -> expr semi . block - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for error resolved as shift - yacc.py:2687: ccur reduce using rule 84 (block -> expr semi .) - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2696: ! error [ reduce using rule 84 (block -> expr semi .) ] - yacc.py:2700: - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: block shift and go to state 190 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 152 - yacc.py:2563: - yacc.py:2565: (45) expr -> id larrow expr . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: cpar reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: arroba reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: dot reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: star reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: div reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: plus reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: minus reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: less reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: lesseq reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: equal reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: of reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: then reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: loop reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: comma reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: in reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: else reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: pool reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: ccur reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2687: fi reduce using rule 45 (expr -> id larrow expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 153 - yacc.py:2563: - yacc.py:2565: (88) func_call -> id opar args . cpar - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 191 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 154 - yacc.py:2563: - yacc.py:2565: (89) func_call -> id opar error . cpar - yacc.py:2565: (95) arg_list -> error . arg_list - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: cpar shift and go to state 192 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 185 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: arg_list shift and go to state 186 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 187 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 155 - yacc.py:2563: - yacc.py:2565: (93) arg_list -> expr . - yacc.py:2565: (94) arg_list -> expr . comma arg_list - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 93 (arg_list -> expr .) - yacc.py:2687: comma shift and go to state 189 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 156 - yacc.py:2563: - yacc.py:2565: (47) comp -> comp less op . - yacc.py:2565: (51) op -> op . plus term - yacc.py:2565: (52) op -> op . minus term - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for plus resolved as shift - yacc.py:2666: ! shift/reduce conflict for minus resolved as shift - yacc.py:2687: less reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: lesseq reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: equal reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: semi reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: cpar reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: arroba reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: dot reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: star reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: div reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: of reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: then reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: loop reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: comma reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: in reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: else reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: pool reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: ccur reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: fi reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: plus shift and go to state 117 - yacc.py:2687: minus shift and go to state 118 - yacc.py:2689: - yacc.py:2696: ! plus [ reduce using rule 47 (comp -> comp less op .) ] - yacc.py:2696: ! minus [ reduce using rule 47 (comp -> comp less op .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 157 - yacc.py:2563: - yacc.py:2565: (48) comp -> comp lesseq op . - yacc.py:2565: (51) op -> op . plus term - yacc.py:2565: (52) op -> op . minus term - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for plus resolved as shift - yacc.py:2666: ! shift/reduce conflict for minus resolved as shift - yacc.py:2687: less reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: lesseq reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: equal reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: semi reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: cpar reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: arroba reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: dot reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: star reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: div reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: of reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: then reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: loop reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: comma reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: in reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: else reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: pool reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: ccur reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: fi reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: plus shift and go to state 117 - yacc.py:2687: minus shift and go to state 118 - yacc.py:2689: - yacc.py:2696: ! plus [ reduce using rule 48 (comp -> comp lesseq op .) ] - yacc.py:2696: ! minus [ reduce using rule 48 (comp -> comp lesseq op .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 158 - yacc.py:2563: - yacc.py:2565: (49) comp -> comp equal op . - yacc.py:2565: (51) op -> op . plus term - yacc.py:2565: (52) op -> op . minus term - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for plus resolved as shift - yacc.py:2666: ! shift/reduce conflict for minus resolved as shift - yacc.py:2687: less reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: lesseq reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: equal reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: semi reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: cpar reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: arroba reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: dot reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: star reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: div reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: of reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: then reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: loop reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: comma reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: in reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: else reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: pool reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: ccur reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: fi reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: plus shift and go to state 117 - yacc.py:2687: minus shift and go to state 118 - yacc.py:2689: - yacc.py:2696: ! plus [ reduce using rule 49 (comp -> comp equal op .) ] - yacc.py:2696: ! minus [ reduce using rule 49 (comp -> comp equal op .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 159 - yacc.py:2563: - yacc.py:2565: (51) op -> op plus term . - yacc.py:2565: (54) term -> term . star base_call - yacc.py:2565: (55) term -> term . div base_call - yacc.py:2565: (57) term -> term . star error - yacc.py:2565: (58) term -> term . div error - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for star resolved as shift - yacc.py:2666: ! shift/reduce conflict for div resolved as shift - yacc.py:2687: plus reduce using rule 51 (op -> op plus term .) - yacc.py:2687: minus reduce using rule 51 (op -> op plus term .) - yacc.py:2687: less reduce using rule 51 (op -> op plus term .) - yacc.py:2687: lesseq reduce using rule 51 (op -> op plus term .) - yacc.py:2687: equal reduce using rule 51 (op -> op plus term .) - yacc.py:2687: semi reduce using rule 51 (op -> op plus term .) - yacc.py:2687: cpar reduce using rule 51 (op -> op plus term .) - yacc.py:2687: arroba reduce using rule 51 (op -> op plus term .) - yacc.py:2687: dot reduce using rule 51 (op -> op plus term .) - yacc.py:2687: of reduce using rule 51 (op -> op plus term .) - yacc.py:2687: then reduce using rule 51 (op -> op plus term .) - yacc.py:2687: loop reduce using rule 51 (op -> op plus term .) - yacc.py:2687: comma reduce using rule 51 (op -> op plus term .) - yacc.py:2687: in reduce using rule 51 (op -> op plus term .) - yacc.py:2687: else reduce using rule 51 (op -> op plus term .) - yacc.py:2687: pool reduce using rule 51 (op -> op plus term .) - yacc.py:2687: ccur reduce using rule 51 (op -> op plus term .) - yacc.py:2687: fi reduce using rule 51 (op -> op plus term .) - yacc.py:2687: star shift and go to state 119 - yacc.py:2687: div shift and go to state 120 - yacc.py:2689: - yacc.py:2696: ! star [ reduce using rule 51 (op -> op plus term .) ] - yacc.py:2696: ! div [ reduce using rule 51 (op -> op plus term .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 160 - yacc.py:2563: - yacc.py:2565: (52) op -> op minus term . - yacc.py:2565: (54) term -> term . star base_call - yacc.py:2565: (55) term -> term . div base_call - yacc.py:2565: (57) term -> term . star error - yacc.py:2565: (58) term -> term . div error - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for star resolved as shift - yacc.py:2666: ! shift/reduce conflict for div resolved as shift - yacc.py:2687: plus reduce using rule 52 (op -> op minus term .) - yacc.py:2687: minus reduce using rule 52 (op -> op minus term .) - yacc.py:2687: less reduce using rule 52 (op -> op minus term .) - yacc.py:2687: lesseq reduce using rule 52 (op -> op minus term .) - yacc.py:2687: equal reduce using rule 52 (op -> op minus term .) - yacc.py:2687: semi reduce using rule 52 (op -> op minus term .) - yacc.py:2687: cpar reduce using rule 52 (op -> op minus term .) - yacc.py:2687: arroba reduce using rule 52 (op -> op minus term .) - yacc.py:2687: dot reduce using rule 52 (op -> op minus term .) - yacc.py:2687: of reduce using rule 52 (op -> op minus term .) - yacc.py:2687: then reduce using rule 52 (op -> op minus term .) - yacc.py:2687: loop reduce using rule 52 (op -> op minus term .) - yacc.py:2687: comma reduce using rule 52 (op -> op minus term .) - yacc.py:2687: in reduce using rule 52 (op -> op minus term .) - yacc.py:2687: else reduce using rule 52 (op -> op minus term .) - yacc.py:2687: pool reduce using rule 52 (op -> op minus term .) - yacc.py:2687: ccur reduce using rule 52 (op -> op minus term .) - yacc.py:2687: fi reduce using rule 52 (op -> op minus term .) - yacc.py:2687: star shift and go to state 119 - yacc.py:2687: div shift and go to state 120 - yacc.py:2689: - yacc.py:2696: ! star [ reduce using rule 52 (op -> op minus term .) ] - yacc.py:2696: ! div [ reduce using rule 52 (op -> op minus term .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 161 - yacc.py:2563: - yacc.py:2565: (54) term -> term star base_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: div reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: plus reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: minus reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: less reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: lesseq reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: equal reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: semi reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: cpar reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: arroba reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: dot reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: of reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: then reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: loop reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: comma reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: in reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: else reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: pool reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: ccur reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: fi reduce using rule 54 (term -> term star base_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 162 - yacc.py:2563: - yacc.py:2565: (57) term -> term star error . - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift - yacc.py:2687: star reduce using rule 57 (term -> term star error .) - yacc.py:2687: div reduce using rule 57 (term -> term star error .) - yacc.py:2687: plus reduce using rule 57 (term -> term star error .) - yacc.py:2687: minus reduce using rule 57 (term -> term star error .) - yacc.py:2687: less reduce using rule 57 (term -> term star error .) - yacc.py:2687: lesseq reduce using rule 57 (term -> term star error .) - yacc.py:2687: equal reduce using rule 57 (term -> term star error .) - yacc.py:2687: semi reduce using rule 57 (term -> term star error .) - yacc.py:2687: cpar reduce using rule 57 (term -> term star error .) - yacc.py:2687: dot reduce using rule 57 (term -> term star error .) - yacc.py:2687: of reduce using rule 57 (term -> term star error .) - yacc.py:2687: then reduce using rule 57 (term -> term star error .) - yacc.py:2687: loop reduce using rule 57 (term -> term star error .) - yacc.py:2687: comma reduce using rule 57 (term -> term star error .) - yacc.py:2687: in reduce using rule 57 (term -> term star error .) - yacc.py:2687: else reduce using rule 57 (term -> term star error .) - yacc.py:2687: pool reduce using rule 57 (term -> term star error .) - yacc.py:2687: ccur reduce using rule 57 (term -> term star error .) - yacc.py:2687: fi reduce using rule 57 (term -> term star error .) - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2696: ! arroba [ reduce using rule 57 (term -> term star error .) ] - yacc.py:2700: - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 163 - yacc.py:2563: - yacc.py:2565: (55) term -> term div base_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: div reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: plus reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: minus reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: less reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: lesseq reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: equal reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: semi reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: cpar reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: arroba reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: dot reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: of reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: then reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: loop reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: comma reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: in reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: else reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: pool reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: ccur reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: fi reduce using rule 55 (term -> term div base_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 164 - yacc.py:2563: - yacc.py:2565: (58) term -> term div error . - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift - yacc.py:2687: star reduce using rule 58 (term -> term div error .) - yacc.py:2687: div reduce using rule 58 (term -> term div error .) - yacc.py:2687: plus reduce using rule 58 (term -> term div error .) - yacc.py:2687: minus reduce using rule 58 (term -> term div error .) - yacc.py:2687: less reduce using rule 58 (term -> term div error .) - yacc.py:2687: lesseq reduce using rule 58 (term -> term div error .) - yacc.py:2687: equal reduce using rule 58 (term -> term div error .) - yacc.py:2687: semi reduce using rule 58 (term -> term div error .) - yacc.py:2687: cpar reduce using rule 58 (term -> term div error .) - yacc.py:2687: dot reduce using rule 58 (term -> term div error .) - yacc.py:2687: of reduce using rule 58 (term -> term div error .) - yacc.py:2687: then reduce using rule 58 (term -> term div error .) - yacc.py:2687: loop reduce using rule 58 (term -> term div error .) - yacc.py:2687: comma reduce using rule 58 (term -> term div error .) - yacc.py:2687: in reduce using rule 58 (term -> term div error .) - yacc.py:2687: else reduce using rule 58 (term -> term div error .) - yacc.py:2687: pool reduce using rule 58 (term -> term div error .) - yacc.py:2687: ccur reduce using rule 58 (term -> term div error .) - yacc.py:2687: fi reduce using rule 58 (term -> term div error .) - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2696: ! arroba [ reduce using rule 58 (term -> term div error .) ] - yacc.py:2700: - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 165 - yacc.py:2563: - yacc.py:2565: (59) base_call -> factor arroba type . dot func_call - yacc.py:2566: - yacc.py:2687: dot shift and go to state 193 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 166 - yacc.py:2563: - yacc.py:2565: (62) base_call -> factor arroba error . dot func_call - yacc.py:2566: - yacc.py:2687: dot shift and go to state 194 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 167 - yacc.py:2563: - yacc.py:2565: (65) factor -> factor dot func_call . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: dot reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: star reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: div reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: plus reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: minus reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: less reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: lesseq reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: equal reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: semi reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: cpar reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: of reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: then reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: loop reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: comma reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: in reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: else reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: pool reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: ccur reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: fi reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 168 - yacc.py:2563: - yacc.py:2565: (88) func_call -> id . opar args cpar - yacc.py:2565: (89) func_call -> id . opar error cpar - yacc.py:2566: - yacc.py:2687: opar shift and go to state 113 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 169 - yacc.py:2563: - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2566: - yacc.py:2687: opar shift and go to state 195 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 170 - yacc.py:2563: - yacc.py:2565: (64) factor -> opar expr cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: dot reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: star reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: div reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: plus reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: minus reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: less reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: lesseq reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: equal reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: semi reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: cpar reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: of reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: then reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: loop reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: comma reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: in reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: else reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: pool reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: ccur reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: fi reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 171 - yacc.py:2563: - yacc.py:2565: (70) factor -> let let_list in . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 196 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 172 - yacc.py:2563: - yacc.py:2565: (37) let_list -> let_assign comma . let_list - yacc.py:2565: (36) let_list -> . let_assign - yacc.py:2565: (37) let_list -> . let_assign comma let_list - yacc.py:2565: (38) let_assign -> . param larrow expr - yacc.py:2565: (39) let_assign -> . param - yacc.py:2565: (35) param -> . id colon type - yacc.py:2566: - yacc.py:2687: id shift and go to state 46 - yacc.py:2689: - yacc.py:2714: let_assign shift and go to state 129 - yacc.py:2714: let_list shift and go to state 197 - yacc.py:2714: param shift and go to state 130 - yacc.py:2561: - yacc.py:2562:state 173 - yacc.py:2563: - yacc.py:2565: (38) let_assign -> param larrow . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 198 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 174 - yacc.py:2563: - yacc.py:2565: (71) factor -> case expr of . cases_list esac - yacc.py:2565: (40) cases_list -> . casep semi - yacc.py:2565: (41) cases_list -> . casep semi cases_list - yacc.py:2565: (42) cases_list -> . error cases_list - yacc.py:2565: (43) cases_list -> . error semi - yacc.py:2565: (44) casep -> . id colon type rarrow expr - yacc.py:2566: - yacc.py:2687: error shift and go to state 201 - yacc.py:2687: id shift and go to state 202 - yacc.py:2689: - yacc.py:2714: cases_list shift and go to state 199 - yacc.py:2714: casep shift and go to state 200 - yacc.py:2561: - yacc.py:2562:state 175 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr then . expr else expr fi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 203 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 176 - yacc.py:2563: - yacc.py:2565: (73) factor -> while expr loop . expr pool - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 204 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 177 - yacc.py:2563: - yacc.py:2565: (77) atom -> ocur block ccur . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: dot reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: star reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: div reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: plus reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: minus reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: less reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: lesseq reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: equal reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: semi reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: cpar reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: of reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: then reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: loop reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: comma reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: in reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: else reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: pool reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: ccur reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: fi reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 178 - yacc.py:2563: - yacc.py:2565: (80) atom -> ocur block error . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: dot reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: star reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: div reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: plus reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: minus reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: less reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: lesseq reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: equal reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: semi reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: cpar reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: of reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: then reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: loop reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: comma reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: in reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: else reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: pool reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: ccur reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: fi reduce using rule 80 (atom -> ocur block error .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 179 - yacc.py:2563: - yacc.py:2565: (79) atom -> ocur error ccur . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: dot reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: star reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: div reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: plus reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: minus reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: less reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: lesseq reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: equal reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: semi reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: cpar reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: of reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: then reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: loop reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: comma reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: in reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: else reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: pool reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: ccur reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: fi reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 180 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur . expr ccur - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 205 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 181 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur . expr ccur - yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur . error ccur - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 207 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 206 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 182 - yacc.py:2563: - yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur . expr ccur - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 208 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 183 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur . expr ccur - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 209 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 184 - yacc.py:2563: - yacc.py:2565: (61) base_call -> error arroba type dot . func_call - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 168 - yacc.py:2687: error shift and go to state 169 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 210 - yacc.py:2561: - yacc.py:2562:state 185 - yacc.py:2563: - yacc.py:2565: (95) arg_list -> error . arg_list - yacc.py:2565: (86) block -> error . block - yacc.py:2565: (87) block -> error . semi - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: semi shift and go to state 142 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 185 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: arg_list shift and go to state 186 - yacc.py:2714: block shift and go to state 141 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: expr shift and go to state 187 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 186 - yacc.py:2563: - yacc.py:2565: (95) arg_list -> error arg_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 95 (arg_list -> error arg_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 187 - yacc.py:2563: - yacc.py:2565: (93) arg_list -> expr . - yacc.py:2565: (94) arg_list -> expr . comma arg_list - yacc.py:2565: (84) block -> expr . semi - yacc.py:2565: (85) block -> expr . semi block - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 93 (arg_list -> expr .) - yacc.py:2687: comma shift and go to state 189 - yacc.py:2687: semi shift and go to state 151 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 188 - yacc.py:2563: - yacc.py:2565: (90) func_call -> error opar args cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: dot reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: star reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: div reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: plus reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: minus reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: less reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: lesseq reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: equal reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: semi reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: cpar reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: of reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: then reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: loop reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: comma reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: in reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: else reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: pool reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: ccur reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: fi reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 189 - yacc.py:2563: - yacc.py:2565: (94) arg_list -> expr comma . arg_list - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 145 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 155 - yacc.py:2714: arg_list shift and go to state 211 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 190 - yacc.py:2563: - yacc.py:2565: (85) block -> expr semi block . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 85 (block -> expr semi block .) - yacc.py:2687: error reduce using rule 85 (block -> expr semi block .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 191 - yacc.py:2563: - yacc.py:2565: (88) func_call -> id opar args cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: dot reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: star reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: div reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: plus reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: minus reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: less reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: lesseq reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: equal reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: semi reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: cpar reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: of reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: then reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: loop reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: comma reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: in reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: else reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: pool reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: ccur reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: fi reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 192 - yacc.py:2563: - yacc.py:2565: (89) func_call -> id opar error cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: dot reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: star reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: div reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: plus reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: minus reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: less reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: lesseq reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: equal reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: semi reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: cpar reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: of reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: then reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: loop reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: comma reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: in reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: else reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: pool reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: ccur reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: fi reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 193 - yacc.py:2563: - yacc.py:2565: (59) base_call -> factor arroba type dot . func_call - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 168 - yacc.py:2687: error shift and go to state 169 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 212 - yacc.py:2561: - yacc.py:2562:state 194 - yacc.py:2563: - yacc.py:2565: (62) base_call -> factor arroba error dot . func_call - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 168 - yacc.py:2687: error shift and go to state 169 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 213 - yacc.py:2561: - yacc.py:2562:state 195 - yacc.py:2563: - yacc.py:2565: (90) func_call -> error opar . args cpar - yacc.py:2565: (91) args -> . arg_list - yacc.py:2565: (92) args -> . arg_list_empty - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (96) arg_list_empty -> . epsilon - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 145 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: args shift and go to state 146 - yacc.py:2714: arg_list shift and go to state 148 - yacc.py:2714: arg_list_empty shift and go to state 149 - yacc.py:2714: expr shift and go to state 155 - yacc.py:2714: epsilon shift and go to state 150 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 196 - yacc.py:2563: - yacc.py:2565: (70) factor -> let let_list in expr . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: dot reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: star reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: div reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: plus reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: minus reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: less reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: lesseq reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: equal reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: semi reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: cpar reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: of reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: then reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: loop reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: comma reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: in reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: else reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: pool reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: ccur reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: fi reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 197 - yacc.py:2563: - yacc.py:2565: (37) let_list -> let_assign comma let_list . - yacc.py:2566: - yacc.py:2687: in reduce using rule 37 (let_list -> let_assign comma let_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 198 - yacc.py:2563: - yacc.py:2565: (38) let_assign -> param larrow expr . - yacc.py:2566: - yacc.py:2687: comma reduce using rule 38 (let_assign -> param larrow expr .) - yacc.py:2687: in reduce using rule 38 (let_assign -> param larrow expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 199 - yacc.py:2563: - yacc.py:2565: (71) factor -> case expr of cases_list . esac - yacc.py:2566: - yacc.py:2687: esac shift and go to state 214 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 200 - yacc.py:2563: - yacc.py:2565: (40) cases_list -> casep . semi - yacc.py:2565: (41) cases_list -> casep . semi cases_list - yacc.py:2566: - yacc.py:2687: semi shift and go to state 215 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 201 - yacc.py:2563: - yacc.py:2565: (42) cases_list -> error . cases_list - yacc.py:2565: (43) cases_list -> error . semi - yacc.py:2565: (40) cases_list -> . casep semi - yacc.py:2565: (41) cases_list -> . casep semi cases_list - yacc.py:2565: (42) cases_list -> . error cases_list - yacc.py:2565: (43) cases_list -> . error semi - yacc.py:2565: (44) casep -> . id colon type rarrow expr - yacc.py:2566: - yacc.py:2687: semi shift and go to state 217 - yacc.py:2687: error shift and go to state 201 - yacc.py:2687: id shift and go to state 202 - yacc.py:2689: - yacc.py:2714: cases_list shift and go to state 216 - yacc.py:2714: casep shift and go to state 200 - yacc.py:2561: - yacc.py:2562:state 202 - yacc.py:2563: - yacc.py:2565: (44) casep -> id . colon type rarrow expr - yacc.py:2566: - yacc.py:2687: colon shift and go to state 218 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 203 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr then expr . else expr fi - yacc.py:2566: - yacc.py:2687: else shift and go to state 219 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 204 - yacc.py:2563: - yacc.py:2565: (73) factor -> while expr loop expr . pool - yacc.py:2566: - yacc.py:2687: pool shift and go to state 220 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 205 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur expr . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 221 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 206 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur expr . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 222 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 207 - yacc.py:2563: - yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur error . ccur - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 223 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 208 - yacc.py:2563: - yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur expr . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 224 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 209 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur expr . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 225 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 210 - yacc.py:2563: - yacc.py:2565: (61) base_call -> error arroba type dot func_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: div reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: plus reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: minus reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: less reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: lesseq reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: equal reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: semi reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: cpar reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: arroba reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: dot reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: of reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: then reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: loop reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: comma reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: in reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: else reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: pool reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: ccur reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: fi reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 211 - yacc.py:2563: - yacc.py:2565: (94) arg_list -> expr comma arg_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 94 (arg_list -> expr comma arg_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 212 - yacc.py:2563: - yacc.py:2565: (59) base_call -> factor arroba type dot func_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: div reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: plus reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: minus reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: less reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: lesseq reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: equal reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: semi reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: cpar reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: arroba reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: dot reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: of reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: then reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: loop reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: comma reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: in reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: else reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: pool reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: ccur reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: fi reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 213 - yacc.py:2563: - yacc.py:2565: (62) base_call -> factor arroba error dot func_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: div reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: plus reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: minus reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: less reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: lesseq reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: equal reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: semi reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: cpar reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: arroba reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: dot reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: of reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: then reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: loop reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: comma reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: in reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: else reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: pool reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: ccur reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: fi reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 214 - yacc.py:2563: - yacc.py:2565: (71) factor -> case expr of cases_list esac . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: dot reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: star reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: div reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: plus reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: minus reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: less reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: lesseq reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: equal reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: semi reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: cpar reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: of reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: then reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: loop reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: comma reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: in reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: else reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: pool reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: ccur reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: fi reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 215 - yacc.py:2563: - yacc.py:2565: (40) cases_list -> casep semi . - yacc.py:2565: (41) cases_list -> casep semi . cases_list - yacc.py:2565: (40) cases_list -> . casep semi - yacc.py:2565: (41) cases_list -> . casep semi cases_list - yacc.py:2565: (42) cases_list -> . error cases_list - yacc.py:2565: (43) cases_list -> . error semi - yacc.py:2565: (44) casep -> . id colon type rarrow expr - yacc.py:2566: - yacc.py:2687: esac reduce using rule 40 (cases_list -> casep semi .) - yacc.py:2687: error shift and go to state 201 - yacc.py:2687: id shift and go to state 202 - yacc.py:2689: - yacc.py:2714: casep shift and go to state 200 - yacc.py:2714: cases_list shift and go to state 226 - yacc.py:2561: - yacc.py:2562:state 216 - yacc.py:2563: - yacc.py:2565: (42) cases_list -> error cases_list . - yacc.py:2566: - yacc.py:2687: esac reduce using rule 42 (cases_list -> error cases_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 217 - yacc.py:2563: - yacc.py:2565: (43) cases_list -> error semi . - yacc.py:2566: - yacc.py:2687: esac reduce using rule 43 (cases_list -> error semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 218 - yacc.py:2563: - yacc.py:2565: (44) casep -> id colon . type rarrow expr - yacc.py:2566: - yacc.py:2687: type shift and go to state 227 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 219 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr then expr else . expr fi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 228 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 220 - yacc.py:2563: - yacc.py:2565: (73) factor -> while expr loop expr pool . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: dot reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: star reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: div reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: plus reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: minus reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: less reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: lesseq reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: equal reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: semi reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: cpar reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: of reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: then reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: loop reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: comma reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: in reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: else reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: pool reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: ccur reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: fi reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 221 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur expr ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 26 (def_func -> error opar formals cpar colon type ocur expr ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 222 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur expr ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 25 (def_func -> id opar formals cpar colon type ocur expr ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 223 - yacc.py:2563: - yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur error ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 29 (def_func -> id opar formals cpar colon type ocur error ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 224 - yacc.py:2563: - yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur expr ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 28 (def_func -> id opar formals cpar colon error ocur expr ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 225 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur expr ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 27 (def_func -> id opar error cpar colon type ocur expr ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 226 - yacc.py:2563: - yacc.py:2565: (41) cases_list -> casep semi cases_list . - yacc.py:2566: - yacc.py:2687: esac reduce using rule 41 (cases_list -> casep semi cases_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 227 - yacc.py:2563: - yacc.py:2565: (44) casep -> id colon type . rarrow expr - yacc.py:2566: - yacc.py:2687: rarrow shift and go to state 229 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 228 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr then expr else expr . fi - yacc.py:2566: - yacc.py:2687: fi shift and go to state 230 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 229 - yacc.py:2563: - yacc.py:2565: (44) casep -> id colon type rarrow . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 231 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 230 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr then expr else expr fi . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: dot reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: star reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: div reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: plus reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: minus reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: less reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: lesseq reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: equal reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: semi reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: cpar reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: of reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: then reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: loop reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: comma reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: in reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: else reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: pool reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: ccur reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: fi reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 231 - yacc.py:2563: - yacc.py:2565: (44) casep -> id colon type rarrow expr . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 44 (casep -> id colon type rarrow expr .) - yacc.py:2689: - yacc.py:3447:24 shift/reduce conflicts - yacc.py:3457: - yacc.py:3458:Conflicts: - yacc.py:3459: - yacc.py:3462:shift/reduce conflict for less in state 73 resolved as shift - yacc.py:3462:shift/reduce conflict for lesseq in state 73 resolved as shift - yacc.py:3462:shift/reduce conflict for equal in state 73 resolved as shift - yacc.py:3462:shift/reduce conflict for plus in state 74 resolved as shift - yacc.py:3462:shift/reduce conflict for minus in state 74 resolved as shift - yacc.py:3462:shift/reduce conflict for star in state 75 resolved as shift - yacc.py:3462:shift/reduce conflict for div in state 75 resolved as shift - yacc.py:3462:shift/reduce conflict for arroba in state 77 resolved as shift - yacc.py:3462:shift/reduce conflict for dot in state 77 resolved as shift - yacc.py:3462:shift/reduce conflict for ccur in state 141 resolved as shift - yacc.py:3462:shift/reduce conflict for cpar in state 147 resolved as shift - yacc.py:3462:shift/reduce conflict for error in state 151 resolved as shift - yacc.py:3462:shift/reduce conflict for plus in state 156 resolved as shift - yacc.py:3462:shift/reduce conflict for minus in state 156 resolved as shift - yacc.py:3462:shift/reduce conflict for plus in state 157 resolved as shift - yacc.py:3462:shift/reduce conflict for minus in state 157 resolved as shift - yacc.py:3462:shift/reduce conflict for plus in state 158 resolved as shift - yacc.py:3462:shift/reduce conflict for minus in state 158 resolved as shift - yacc.py:3462:shift/reduce conflict for star in state 159 resolved as shift - yacc.py:3462:shift/reduce conflict for div in state 159 resolved as shift - yacc.py:3462:shift/reduce conflict for star in state 160 resolved as shift - yacc.py:3462:shift/reduce conflict for div in state 160 resolved as shift - yacc.py:3462:shift/reduce conflict for arroba in state 162 resolved as shift - yacc.py:3462:shift/reduce conflict for arroba in state 164 resolved as shift - yacc.py: 362:PLY: PARSE DEBUG START - yacc.py: 410: - yacc.py: 411:State : 0 - yacc.py: 435:Stack : . LexToken(class,'class',1,0) - yacc.py: 445:Action : Shift and goto state 5 - yacc.py: 410: - yacc.py: 411:State : 5 - yacc.py: 435:Stack : class . LexToken(type,'Main',1,6) - yacc.py: 445:Action : Shift and goto state 8 - yacc.py: 410: - yacc.py: 411:State : 8 - yacc.py: 435:Stack : class type . LexToken(ocur,'{',1,11) - yacc.py: 445:Action : Shift and goto state 10 - yacc.py: 410: - yacc.py: 411:State : 10 - yacc.py: 435:Stack : class type ocur . LexToken(id,'main',3,18) - yacc.py: 445:Action : Shift and goto state 19 - yacc.py: 410: - yacc.py: 411:State : 19 - yacc.py: 435:Stack : class type ocur id . LexToken(opar,'(',3,22) - yacc.py: 445:Action : Shift and goto state 32 - yacc.py: 410: - yacc.py: 411:State : 32 - yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',3,23) - yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',3,23) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',3,23) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',3,23) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : class type ocur id opar formals cpar . LexToken(colon,':',3,24) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon . LexToken(type,'Object',3,26) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type . LexToken(ocur,'{',3,33) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur . LexToken(opar,'(',4,43) - yacc.py: 445:Action : Shift and goto state 80 - yacc.py: 410: - yacc.py: 411:State : 80 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar . LexToken(new,'new',4,44) - yacc.py: 445:Action : Shift and goto state 89 - yacc.py: 410: - yacc.py: 411:State : 89 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new . LexToken(type,'Alpha',4,48) - yacc.py: 445:Action : Shift and goto state 134 - yacc.py: 410: - yacc.py: 411:State : 134 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',4,53) - yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 150 - yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar epsilon . LexToken(cpar,')',4,61) - yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 149 - yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar arg_list_empty . LexToken(cpar,')',4,61) - yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args . LexToken(cpar,')',4,61) - yacc.py: 445:Action : Shift and goto state 191 - yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args cpar . LexToken(ccur,'}',5,67) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['print','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) - yacc.py: 410: - yacc.py: 411:State : 167 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot func_call . LexToken(ccur,'}',5,67) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 16 - yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : class type ocur def_func semi epsilon . LexToken(ccur,'}',6,70) - yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 48 - yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : class type ocur def_func semi feature_list . LexToken(ccur,'}',6,70) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 14 - yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( id colon type] with ['test1',':','Int'] and goto state 17 - yacc.py: 506:Result : ( id] with ['test3'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',12,146) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',12,146) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',12,146) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar . LexToken(colon,':',12,147) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon . LexToken(type,'Int',12,149) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',12,153) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur . LexToken(num,2.0,13,163) - yacc.py: 445:Action : Shift and goto state 88 - yacc.py: 410: - yacc.py: 411:State : 88 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur num . LexToken(minus,'-',13,165) - yacc.py: 471:Action : Reduce rule [atom -> num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 160 - yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( string] with ['1'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type] with ['a',':','Alpha'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) - yacc.py: 410: - yacc.py: 411:State : 44 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param . LexToken(comma,',',19,226) - yacc.py: 445:Action : Shift and goto state 60 - yacc.py: 410: - yacc.py: 411:State : 60 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma . LexToken(id,'b',19,228) - yacc.py: 445:Action : Shift and goto state 46 - yacc.py: 410: - yacc.py: 411:State : 46 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id . LexToken(colon,':',19,229) - yacc.py: 445:Action : Shift and goto state 61 - yacc.py: 410: - yacc.py: 411:State : 61 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon . LexToken(type,'Int',19,231) - yacc.py: 445:Action : Shift and goto state 96 - yacc.py: 410: - yacc.py: 411:State : 96 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon type . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['b',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) - yacc.py: 410: - yacc.py: 411:State : 44 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 - yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) - yacc.py: 410: - yacc.py: 411:State : 95 - yacc.py: 430:Defaulted state 95: Reduce using 33 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) - yacc.py: 410: - yacc.py: 411:State : 42 - yacc.py: 430:Defaulted state 42: Reduce using 30 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals . LexToken(cpar,')',19,234) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar . LexToken(colon,':',19,235) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon . LexToken(type,'Int',19,237) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',19,241) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur . LexToken(let,'let',20,251) - yacc.py: 445:Action : Shift and goto state 84 - yacc.py: 410: - yacc.py: 411:State : 84 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let . LexToken(id,'count',20,255) - yacc.py: 445:Action : Shift and goto state 46 - yacc.py: 410: - yacc.py: 411:State : 46 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id . LexToken(colon,':',20,260) - yacc.py: 445:Action : Shift and goto state 61 - yacc.py: 410: - yacc.py: 411:State : 61 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon . LexToken(type,'Int',20,262) - yacc.py: 445:Action : Shift and goto state 96 - yacc.py: 410: - yacc.py: 411:State : 96 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon type . LexToken(comma,',',20,265) - yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['count',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) - yacc.py: 410: - yacc.py: 411:State : 130 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let param . LexToken(comma,',',20,265) - yacc.py: 471:Action : Reduce rule [let_assign -> param] with [] and goto state 129 - yacc.py: 506:Result : ( id colon type] with ['pow',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) - yacc.py: 410: - yacc.py: 411:State : 130 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param . LexToken(larrow,'<-',20,276) - yacc.py: 445:Action : Shift and goto state 173 - yacc.py: 410: - yacc.py: 411:State : 173 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow . LexToken(num,1.0,20,279) - yacc.py: 445:Action : Shift and goto state 88 - yacc.py: 410: - yacc.py: 411:State : 88 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow num . LexToken(in,'in',21,329) - yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 - yacc.py: 506:Result : ( let_assign] with [] and goto state 197 - yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 - yacc.py: 506:Result : ([ num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 - yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 135 - yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 196 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',26,389) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',26,389) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',26,389) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar . LexToken(colon,':',26,390) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon . LexToken(type,'Int',26,392) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',26,396) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'testing2',27,406) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id . LexToken(opar,'(',27,414) - yacc.py: 445:Action : Shift and goto state 113 - yacc.py: 410: - yacc.py: 411:State : 113 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar . LexToken(new,'new',27,415) - yacc.py: 445:Action : Shift and goto state 89 - yacc.py: 410: - yacc.py: 411:State : 89 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new . LexToken(type,'Alpha',27,419) - yacc.py: 445:Action : Shift and goto state 134 - yacc.py: 410: - yacc.py: 411:State : 134 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new type . LexToken(comma,',',27,424) - yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',30,450) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',30,450) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',30,450) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',30,451) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'Int',30,453) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',30,457) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'test1',31,467) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(larrow,'<-',31,473) - yacc.py: 445:Action : Shift and goto state 112 - yacc.py: 410: - yacc.py: 411:State : 112 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow . LexToken(opar,'(',31,477) - yacc.py: 445:Action : Shift and goto state 80 - yacc.py: 410: - yacc.py: 411:State : 80 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar . LexToken(num,1.0,31,478) - yacc.py: 445:Action : Shift and goto state 88 - yacc.py: 410: - yacc.py: 411:State : 88 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar num . LexToken(plus,'+',31,480) - yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 16 - yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',33,543) - yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 48 - yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',33,543) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar epsilon . LexToken(cpar,')',37,601) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list_empty . LexToken(cpar,')',37,601) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',37,601) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar . LexToken(colon,':',37,603) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon . LexToken(type,'Object',37,605) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',37,612) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur . LexToken(id,'out_string',38,622) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id . LexToken(opar,'(',38,632) - yacc.py: 445:Action : Shift and goto state 113 - yacc.py: 410: - yacc.py: 411:State : 113 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id opar . LexToken(string,'reached!!\n',38,645) - yacc.py: 445:Action : Shift and goto state 93 - yacc.py: 410: - yacc.py: 411:State : 93 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id opar string . LexToken(cpar,')',38,646) - yacc.py: 471:Action : Reduce rule [atom -> string] with ['reached!!\n'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 16 - yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi epsilon . LexToken(ccur,'}',40,655) - yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 48 - yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi feature_list . LexToken(ccur,'}',40,655) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( ( program + yacc.py:3381:Rule 1 program -> class_list + yacc.py:3381:Rule 2 epsilon -> + yacc.py:3381:Rule 3 class_list -> def_class class_list + yacc.py:3381:Rule 4 class_list -> def_class + yacc.py:3381:Rule 5 class_list -> error class_list + yacc.py:3381:Rule 6 def_class -> class type ocur feature_list ccur semi + yacc.py:3381:Rule 7 def_class -> class type inherits type ocur feature_list ccur semi + yacc.py:3381:Rule 8 def_class -> class error ocur feature_list ccur semi + yacc.py:3381:Rule 9 def_class -> class type ocur feature_list ccur error + yacc.py:3381:Rule 10 def_class -> class error inherits type ocur feature_list ccur semi + yacc.py:3381:Rule 11 def_class -> class error inherits error ocur feature_list ccur semi + yacc.py:3381:Rule 12 def_class -> class type inherits error ocur feature_list ccur semi + yacc.py:3381:Rule 13 def_class -> class type inherits type ocur feature_list ccur error + yacc.py:3381:Rule 14 feature_list -> epsilon + yacc.py:3381:Rule 15 feature_list -> def_attr semi feature_list + yacc.py:3381:Rule 16 feature_list -> def_func semi feature_list + yacc.py:3381:Rule 17 feature_list -> error feature_list + yacc.py:3381:Rule 18 def_attr -> id colon type + yacc.py:3381:Rule 19 def_attr -> id colon type larrow expr + yacc.py:3381:Rule 20 def_attr -> error colon type + yacc.py:3381:Rule 21 def_attr -> id colon error + yacc.py:3381:Rule 22 def_attr -> error colon type larrow expr + yacc.py:3381:Rule 23 def_attr -> id colon error larrow expr + yacc.py:3381:Rule 24 def_attr -> id colon type larrow error + yacc.py:3381:Rule 25 def_func -> id opar formals cpar colon type ocur expr ccur + yacc.py:3381:Rule 26 def_func -> error opar formals cpar colon type ocur expr ccur + yacc.py:3381:Rule 27 def_func -> id opar error cpar colon type ocur expr ccur + yacc.py:3381:Rule 28 def_func -> id opar formals cpar colon error ocur expr ccur + yacc.py:3381:Rule 29 def_func -> id opar formals cpar colon type ocur error ccur + yacc.py:3381:Rule 30 formals -> param_list + yacc.py:3381:Rule 31 formals -> param_list_empty + yacc.py:3381:Rule 32 param_list -> param + yacc.py:3381:Rule 33 param_list -> param comma param_list + yacc.py:3381:Rule 34 param_list_empty -> epsilon + yacc.py:3381:Rule 35 param -> id colon type + yacc.py:3381:Rule 36 let_list -> let_assign + yacc.py:3381:Rule 37 let_list -> let_assign comma let_list + yacc.py:3381:Rule 38 let_assign -> param larrow expr + yacc.py:3381:Rule 39 let_assign -> param + yacc.py:3381:Rule 40 cases_list -> casep semi + yacc.py:3381:Rule 41 cases_list -> casep semi cases_list + yacc.py:3381:Rule 42 cases_list -> error cases_list + yacc.py:3381:Rule 43 cases_list -> error semi + yacc.py:3381:Rule 44 casep -> id colon type rarrow expr + yacc.py:3381:Rule 45 expr -> id larrow expr + yacc.py:3381:Rule 46 expr -> comp + yacc.py:3381:Rule 47 comp -> comp less op + yacc.py:3381:Rule 48 comp -> comp lesseq op + yacc.py:3381:Rule 49 comp -> comp equal op + yacc.py:3381:Rule 50 comp -> op + yacc.py:3381:Rule 51 op -> op plus term + yacc.py:3381:Rule 52 op -> op minus term + yacc.py:3381:Rule 53 op -> term + yacc.py:3381:Rule 54 term -> term star base_call + yacc.py:3381:Rule 55 term -> term div base_call + yacc.py:3381:Rule 56 term -> base_call + yacc.py:3381:Rule 57 term -> term star error + yacc.py:3381:Rule 58 term -> term div error + yacc.py:3381:Rule 59 base_call -> factor arroba type dot func_call + yacc.py:3381:Rule 60 base_call -> factor + yacc.py:3381:Rule 61 base_call -> error arroba type dot func_call + yacc.py:3381:Rule 62 base_call -> factor arroba error dot func_call + yacc.py:3381:Rule 63 factor -> atom + yacc.py:3381:Rule 64 factor -> opar expr cpar + yacc.py:3381:Rule 65 factor -> factor dot func_call + yacc.py:3381:Rule 66 factor -> not expr + yacc.py:3381:Rule 67 factor -> func_call + yacc.py:3381:Rule 68 factor -> isvoid base_call + yacc.py:3381:Rule 69 factor -> nox base_call + yacc.py:3381:Rule 70 factor -> let let_list in expr + yacc.py:3381:Rule 71 factor -> case expr of cases_list esac + yacc.py:3381:Rule 72 factor -> if expr then expr else expr fi + yacc.py:3381:Rule 73 factor -> while expr loop expr pool + yacc.py:3381:Rule 74 atom -> num + yacc.py:3381:Rule 75 atom -> id + yacc.py:3381:Rule 76 atom -> new type + yacc.py:3381:Rule 77 atom -> ocur block ccur + yacc.py:3381:Rule 78 atom -> error block ccur + yacc.py:3381:Rule 79 atom -> ocur error ccur + yacc.py:3381:Rule 80 atom -> ocur block error + yacc.py:3381:Rule 81 atom -> true + yacc.py:3381:Rule 82 atom -> false + yacc.py:3381:Rule 83 atom -> string + yacc.py:3381:Rule 84 block -> expr semi + yacc.py:3381:Rule 85 block -> expr semi block + yacc.py:3381:Rule 86 block -> error block + yacc.py:3381:Rule 87 block -> error semi + yacc.py:3381:Rule 88 func_call -> id opar args cpar + yacc.py:3381:Rule 89 func_call -> id opar error cpar + yacc.py:3381:Rule 90 func_call -> error opar args cpar + yacc.py:3381:Rule 91 args -> arg_list + yacc.py:3381:Rule 92 args -> arg_list_empty + yacc.py:3381:Rule 93 arg_list -> expr + yacc.py:3381:Rule 94 arg_list -> expr comma arg_list + yacc.py:3381:Rule 95 arg_list -> error arg_list + yacc.py:3381:Rule 96 arg_list_empty -> epsilon + yacc.py:3399: + yacc.py:3400:Terminals, with rules where they appear + yacc.py:3401: + yacc.py:3405:arroba : 59 61 62 + yacc.py:3405:case : 71 + yacc.py:3405:ccur : 6 7 8 9 10 11 12 13 25 26 27 28 29 77 78 79 + yacc.py:3405:class : 6 7 8 9 10 11 12 13 + yacc.py:3405:colon : 18 19 20 21 22 23 24 25 26 27 28 29 35 44 + yacc.py:3405:comma : 33 37 94 + yacc.py:3405:cpar : 25 26 27 28 29 64 88 89 90 + yacc.py:3405:div : 55 58 + yacc.py:3405:dot : 59 61 62 65 + yacc.py:3405:else : 72 + yacc.py:3405:equal : 49 + yacc.py:3405:error : 5 8 9 10 11 11 12 13 17 20 21 22 23 24 26 27 28 29 42 43 57 58 61 62 78 79 80 86 87 89 90 95 + yacc.py:3405:esac : 71 + yacc.py:3405:false : 82 + yacc.py:3405:fi : 72 + yacc.py:3405:id : 18 19 21 23 24 25 27 28 29 35 44 45 75 88 89 + yacc.py:3405:if : 72 + yacc.py:3405:in : 70 + yacc.py:3405:inherits : 7 10 11 12 13 + yacc.py:3405:isvoid : 68 + yacc.py:3405:larrow : 19 22 23 24 38 45 + yacc.py:3405:less : 47 + yacc.py:3405:lesseq : 48 + yacc.py:3405:let : 70 + yacc.py:3405:loop : 73 + yacc.py:3405:minus : 52 + yacc.py:3405:new : 76 + yacc.py:3405:not : 66 + yacc.py:3405:nox : 69 + yacc.py:3405:num : 74 + yacc.py:3405:ocur : 6 7 8 9 10 11 12 13 25 26 27 28 29 77 79 80 + yacc.py:3405:of : 71 + yacc.py:3405:opar : 25 26 27 28 29 64 88 89 90 + yacc.py:3405:plus : 51 + yacc.py:3405:pool : 73 + yacc.py:3405:rarrow : 44 + yacc.py:3405:semi : 6 7 8 10 11 12 15 16 40 41 43 84 85 87 + yacc.py:3405:star : 54 57 + yacc.py:3405:string : 83 + yacc.py:3405:then : 72 + yacc.py:3405:true : 81 + yacc.py:3405:type : 6 7 7 9 10 12 13 13 18 19 20 22 24 25 26 27 29 35 44 59 61 76 + yacc.py:3405:while : 73 + yacc.py:3407: + yacc.py:3408:Nonterminals, with rules where they appear + yacc.py:3409: + yacc.py:3413:arg_list : 91 94 95 + yacc.py:3413:arg_list_empty : 92 + yacc.py:3413:args : 88 90 + yacc.py:3413:atom : 63 + yacc.py:3413:base_call : 54 55 56 68 69 + yacc.py:3413:block : 77 78 80 85 86 + yacc.py:3413:casep : 40 41 + yacc.py:3413:cases_list : 41 42 71 + yacc.py:3413:class_list : 1 3 5 + yacc.py:3413:comp : 46 47 48 49 + yacc.py:3413:def_attr : 15 + yacc.py:3413:def_class : 3 4 + yacc.py:3413:def_func : 16 + yacc.py:3413:epsilon : 14 34 96 + yacc.py:3413:expr : 19 22 23 25 26 27 28 38 44 45 64 66 70 71 72 72 72 73 73 84 85 93 94 + yacc.py:3413:factor : 59 60 62 65 + yacc.py:3413:feature_list : 6 7 8 9 10 11 12 13 15 16 17 + yacc.py:3413:formals : 25 26 28 29 + yacc.py:3413:func_call : 59 61 62 65 67 + yacc.py:3413:let_assign : 36 37 + yacc.py:3413:let_list : 37 70 + yacc.py:3413:op : 47 48 49 50 51 52 + yacc.py:3413:param : 32 33 38 39 + yacc.py:3413:param_list : 30 33 + yacc.py:3413:param_list_empty : 31 + yacc.py:3413:program : 0 + yacc.py:3413:term : 51 52 53 54 55 57 58 + yacc.py:3414: + yacc.py:3436:Generating LALR tables + yacc.py:2543:Parsing method: LALR + yacc.py:2561: + yacc.py:2562:state 0 + yacc.py:2563: + yacc.py:2565: (0) S' -> . program + yacc.py:2565: (1) program -> . class_list + yacc.py:2565: (3) class_list -> . def_class class_list + yacc.py:2565: (4) class_list -> . def_class + yacc.py:2565: (5) class_list -> . error class_list + yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi + yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi + yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error + yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi + yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: error shift and go to state 4 + yacc.py:2687: class shift and go to state 5 + yacc.py:2689: + yacc.py:2714: program shift and go to state 1 + yacc.py:2714: class_list shift and go to state 2 + yacc.py:2714: def_class shift and go to state 3 + yacc.py:2561: + yacc.py:2562:state 1 + yacc.py:2563: + yacc.py:2565: (0) S' -> program . + yacc.py:2566: + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 2 + yacc.py:2563: + yacc.py:2565: (1) program -> class_list . + yacc.py:2566: + yacc.py:2687: $end reduce using rule 1 (program -> class_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 3 + yacc.py:2563: + yacc.py:2565: (3) class_list -> def_class . class_list + yacc.py:2565: (4) class_list -> def_class . + yacc.py:2565: (3) class_list -> . def_class class_list + yacc.py:2565: (4) class_list -> . def_class + yacc.py:2565: (5) class_list -> . error class_list + yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi + yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi + yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error + yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi + yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: $end reduce using rule 4 (class_list -> def_class .) + yacc.py:2687: error shift and go to state 4 + yacc.py:2687: class shift and go to state 5 + yacc.py:2689: + yacc.py:2714: def_class shift and go to state 3 + yacc.py:2714: class_list shift and go to state 6 + yacc.py:2561: + yacc.py:2562:state 4 + yacc.py:2563: + yacc.py:2565: (5) class_list -> error . class_list + yacc.py:2565: (3) class_list -> . def_class class_list + yacc.py:2565: (4) class_list -> . def_class + yacc.py:2565: (5) class_list -> . error class_list + yacc.py:2565: (6) def_class -> . class type ocur feature_list ccur semi + yacc.py:2565: (7) def_class -> . class type inherits type ocur feature_list ccur semi + yacc.py:2565: (8) def_class -> . class error ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> . class type ocur feature_list ccur error + yacc.py:2565: (10) def_class -> . class error inherits type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> . class error inherits error ocur feature_list ccur semi + yacc.py:2565: (12) def_class -> . class type inherits error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> . class type inherits type ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: error shift and go to state 4 + yacc.py:2687: class shift and go to state 5 + yacc.py:2689: + yacc.py:2714: class_list shift and go to state 7 + yacc.py:2714: def_class shift and go to state 3 + yacc.py:2561: + yacc.py:2562:state 5 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class . type ocur feature_list ccur semi + yacc.py:2565: (7) def_class -> class . type inherits type ocur feature_list ccur semi + yacc.py:2565: (8) def_class -> class . error ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> class . type ocur feature_list ccur error + yacc.py:2565: (10) def_class -> class . error inherits type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> class . error inherits error ocur feature_list ccur semi + yacc.py:2565: (12) def_class -> class . type inherits error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> class . type inherits type ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: type shift and go to state 8 + yacc.py:2687: error shift and go to state 9 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 6 + yacc.py:2563: + yacc.py:2565: (3) class_list -> def_class class_list . + yacc.py:2566: + yacc.py:2687: $end reduce using rule 3 (class_list -> def_class class_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 7 + yacc.py:2563: + yacc.py:2565: (5) class_list -> error class_list . + yacc.py:2566: + yacc.py:2687: $end reduce using rule 5 (class_list -> error class_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 8 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class type . ocur feature_list ccur semi + yacc.py:2565: (7) def_class -> class type . inherits type ocur feature_list ccur semi + yacc.py:2565: (9) def_class -> class type . ocur feature_list ccur error + yacc.py:2565: (12) def_class -> class type . inherits error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> class type . inherits type ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 10 + yacc.py:2687: inherits shift and go to state 11 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 9 + yacc.py:2563: + yacc.py:2565: (8) def_class -> class error . ocur feature_list ccur semi + yacc.py:2565: (10) def_class -> class error . inherits type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> class error . inherits error ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 12 + yacc.py:2687: inherits shift and go to state 13 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 10 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class type ocur . feature_list ccur semi + yacc.py:2565: (9) def_class -> class type ocur . feature_list ccur error + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 14 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 11 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits . type ocur feature_list ccur semi + yacc.py:2565: (12) def_class -> class type inherits . error ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> class type inherits . type ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: type shift and go to state 20 + yacc.py:2687: error shift and go to state 21 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 12 + yacc.py:2563: + yacc.py:2565: (8) def_class -> class error ocur . feature_list ccur semi + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 22 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 13 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits . type ocur feature_list ccur semi + yacc.py:2565: (11) def_class -> class error inherits . error ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: type shift and go to state 24 + yacc.py:2687: error shift and go to state 23 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 14 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class type ocur feature_list . ccur semi + yacc.py:2565: (9) def_class -> class type ocur feature_list . ccur error + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 25 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 15 + yacc.py:2563: + yacc.py:2565: (17) feature_list -> error . feature_list + yacc.py:2565: (20) def_attr -> error . colon type + yacc.py:2565: (22) def_attr -> error . colon type larrow expr + yacc.py:2565: (26) def_func -> error . opar formals cpar colon type ocur expr ccur + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: colon shift and go to state 27 + yacc.py:2687: opar shift and go to state 28 + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 26 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 16 + yacc.py:2563: + yacc.py:2565: (14) feature_list -> epsilon . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 14 (feature_list -> epsilon .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 17 + yacc.py:2563: + yacc.py:2565: (15) feature_list -> def_attr . semi feature_list + yacc.py:2566: + yacc.py:2687: semi shift and go to state 29 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 18 + yacc.py:2563: + yacc.py:2565: (16) feature_list -> def_func . semi feature_list + yacc.py:2566: + yacc.py:2687: semi shift and go to state 30 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 19 + yacc.py:2563: + yacc.py:2565: (18) def_attr -> id . colon type + yacc.py:2565: (19) def_attr -> id . colon type larrow expr + yacc.py:2565: (21) def_attr -> id . colon error + yacc.py:2565: (23) def_attr -> id . colon error larrow expr + yacc.py:2565: (24) def_attr -> id . colon type larrow error + yacc.py:2565: (25) def_func -> id . opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> id . opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> id . opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> id . opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: colon shift and go to state 31 + yacc.py:2687: opar shift and go to state 32 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 20 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits type . ocur feature_list ccur semi + yacc.py:2565: (13) def_class -> class type inherits type . ocur feature_list ccur error + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 33 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 21 + yacc.py:2563: + yacc.py:2565: (12) def_class -> class type inherits error . ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 34 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 22 + yacc.py:2563: + yacc.py:2565: (8) def_class -> class error ocur feature_list . ccur semi + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 35 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 23 + yacc.py:2563: + yacc.py:2565: (11) def_class -> class error inherits error . ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 36 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 24 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits type . ocur feature_list ccur semi + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 37 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 25 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class type ocur feature_list ccur . semi + yacc.py:2565: (9) def_class -> class type ocur feature_list ccur . error + yacc.py:2566: + yacc.py:2687: semi shift and go to state 38 + yacc.py:2687: error shift and go to state 39 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 26 + yacc.py:2563: + yacc.py:2565: (17) feature_list -> error feature_list . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 17 (feature_list -> error feature_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 27 + yacc.py:2563: + yacc.py:2565: (20) def_attr -> error colon . type + yacc.py:2565: (22) def_attr -> error colon . type larrow expr + yacc.py:2566: + yacc.py:2687: type shift and go to state 40 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 28 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar . formals cpar colon type ocur expr ccur + yacc.py:2565: (30) formals -> . param_list + yacc.py:2565: (31) formals -> . param_list_empty + yacc.py:2565: (32) param_list -> . param + yacc.py:2565: (33) param_list -> . param comma param_list + yacc.py:2565: (34) param_list_empty -> . epsilon + yacc.py:2565: (35) param -> . id colon type + yacc.py:2565: (2) epsilon -> . + yacc.py:2566: + yacc.py:2687: id shift and go to state 46 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2689: + yacc.py:2714: formals shift and go to state 41 + yacc.py:2714: param_list shift and go to state 42 + yacc.py:2714: param_list_empty shift and go to state 43 + yacc.py:2714: param shift and go to state 44 + yacc.py:2714: epsilon shift and go to state 45 + yacc.py:2561: + yacc.py:2562:state 29 + yacc.py:2563: + yacc.py:2565: (15) feature_list -> def_attr semi . feature_list + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: feature_list shift and go to state 47 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 30 + yacc.py:2563: + yacc.py:2565: (16) feature_list -> def_func semi . feature_list + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2714: feature_list shift and go to state 48 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2561: + yacc.py:2562:state 31 + yacc.py:2563: + yacc.py:2565: (18) def_attr -> id colon . type + yacc.py:2565: (19) def_attr -> id colon . type larrow expr + yacc.py:2565: (21) def_attr -> id colon . error + yacc.py:2565: (23) def_attr -> id colon . error larrow expr + yacc.py:2565: (24) def_attr -> id colon . type larrow error + yacc.py:2566: + yacc.py:2687: type shift and go to state 49 + yacc.py:2687: error shift and go to state 50 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 32 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar . formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> id opar . error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> id opar . formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> id opar . formals cpar colon type ocur error ccur + yacc.py:2565: (30) formals -> . param_list + yacc.py:2565: (31) formals -> . param_list_empty + yacc.py:2565: (32) param_list -> . param + yacc.py:2565: (33) param_list -> . param comma param_list + yacc.py:2565: (34) param_list_empty -> . epsilon + yacc.py:2565: (35) param -> . id colon type + yacc.py:2565: (2) epsilon -> . + yacc.py:2566: + yacc.py:2687: error shift and go to state 52 + yacc.py:2687: id shift and go to state 46 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2689: + yacc.py:2714: formals shift and go to state 51 + yacc.py:2714: param_list shift and go to state 42 + yacc.py:2714: param_list_empty shift and go to state 43 + yacc.py:2714: param shift and go to state 44 + yacc.py:2714: epsilon shift and go to state 45 + yacc.py:2561: + yacc.py:2562:state 33 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits type ocur . feature_list ccur semi + yacc.py:2565: (13) def_class -> class type inherits type ocur . feature_list ccur error + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 53 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 34 + yacc.py:2563: + yacc.py:2565: (12) def_class -> class type inherits error ocur . feature_list ccur semi + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 54 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 35 + yacc.py:2563: + yacc.py:2565: (8) def_class -> class error ocur feature_list ccur . semi + yacc.py:2566: + yacc.py:2687: semi shift and go to state 55 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 36 + yacc.py:2563: + yacc.py:2565: (11) def_class -> class error inherits error ocur . feature_list ccur semi + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 56 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 37 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits type ocur . feature_list ccur semi + yacc.py:2565: (14) feature_list -> . epsilon + yacc.py:2565: (15) feature_list -> . def_attr semi feature_list + yacc.py:2565: (16) feature_list -> . def_func semi feature_list + yacc.py:2565: (17) feature_list -> . error feature_list + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (18) def_attr -> . id colon type + yacc.py:2565: (19) def_attr -> . id colon type larrow expr + yacc.py:2565: (20) def_attr -> . error colon type + yacc.py:2565: (21) def_attr -> . id colon error + yacc.py:2565: (22) def_attr -> . error colon type larrow expr + yacc.py:2565: (23) def_attr -> . id colon error larrow expr + yacc.py:2565: (24) def_attr -> . id colon type larrow error + yacc.py:2565: (25) def_func -> . id opar formals cpar colon type ocur expr ccur + yacc.py:2565: (26) def_func -> . error opar formals cpar colon type ocur expr ccur + yacc.py:2565: (27) def_func -> . id opar error cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> . id opar formals cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> . id opar formals cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: error shift and go to state 15 + yacc.py:2687: ccur reduce using rule 2 (epsilon -> .) + yacc.py:2687: id shift and go to state 19 + yacc.py:2689: + yacc.py:2714: feature_list shift and go to state 57 + yacc.py:2714: epsilon shift and go to state 16 + yacc.py:2714: def_attr shift and go to state 17 + yacc.py:2714: def_func shift and go to state 18 + yacc.py:2561: + yacc.py:2562:state 38 + yacc.py:2563: + yacc.py:2565: (6) def_class -> class type ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 6 (def_class -> class type ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 39 + yacc.py:2563: + yacc.py:2565: (9) def_class -> class type ocur feature_list ccur error . + yacc.py:2566: + yacc.py:2687: error reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) + yacc.py:2687: class reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) + yacc.py:2687: $end reduce using rule 9 (def_class -> class type ocur feature_list ccur error .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 40 + yacc.py:2563: + yacc.py:2565: (20) def_attr -> error colon type . + yacc.py:2565: (22) def_attr -> error colon type . larrow expr + yacc.py:2566: + yacc.py:2687: semi reduce using rule 20 (def_attr -> error colon type .) + yacc.py:2687: larrow shift and go to state 58 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 41 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals . cpar colon type ocur expr ccur + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 59 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 42 + yacc.py:2563: + yacc.py:2565: (30) formals -> param_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 30 (formals -> param_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 43 + yacc.py:2563: + yacc.py:2565: (31) formals -> param_list_empty . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 31 (formals -> param_list_empty .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 44 + yacc.py:2563: + yacc.py:2565: (32) param_list -> param . + yacc.py:2565: (33) param_list -> param . comma param_list + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 32 (param_list -> param .) + yacc.py:2687: comma shift and go to state 60 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 45 + yacc.py:2563: + yacc.py:2565: (34) param_list_empty -> epsilon . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 34 (param_list_empty -> epsilon .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 46 + yacc.py:2563: + yacc.py:2565: (35) param -> id . colon type + yacc.py:2566: + yacc.py:2687: colon shift and go to state 61 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 47 + yacc.py:2563: + yacc.py:2565: (15) feature_list -> def_attr semi feature_list . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 15 (feature_list -> def_attr semi feature_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 48 + yacc.py:2563: + yacc.py:2565: (16) feature_list -> def_func semi feature_list . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 16 (feature_list -> def_func semi feature_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 49 + yacc.py:2563: + yacc.py:2565: (18) def_attr -> id colon type . + yacc.py:2565: (19) def_attr -> id colon type . larrow expr + yacc.py:2565: (24) def_attr -> id colon type . larrow error + yacc.py:2566: + yacc.py:2687: semi reduce using rule 18 (def_attr -> id colon type .) + yacc.py:2687: larrow shift and go to state 62 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 50 + yacc.py:2563: + yacc.py:2565: (21) def_attr -> id colon error . + yacc.py:2565: (23) def_attr -> id colon error . larrow expr + yacc.py:2566: + yacc.py:2687: semi reduce using rule 21 (def_attr -> id colon error .) + yacc.py:2687: larrow shift and go to state 63 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 51 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals . cpar colon type ocur expr ccur + yacc.py:2565: (28) def_func -> id opar formals . cpar colon error ocur expr ccur + yacc.py:2565: (29) def_func -> id opar formals . cpar colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 64 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 52 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error . cpar colon type ocur expr ccur + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 65 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 53 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list . ccur semi + yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list . ccur error + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 66 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 54 + yacc.py:2563: + yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list . ccur semi + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 67 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 55 + yacc.py:2563: + yacc.py:2565: (8) def_class -> class error ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 8 (def_class -> class error ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 56 + yacc.py:2563: + yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list . ccur semi + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 68 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 57 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list . ccur semi + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 69 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 58 + yacc.py:2563: + yacc.py:2565: (22) def_attr -> error colon type larrow . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 71 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 59 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar . colon type ocur expr ccur + yacc.py:2566: + yacc.py:2687: colon shift and go to state 94 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 60 + yacc.py:2563: + yacc.py:2565: (33) param_list -> param comma . param_list + yacc.py:2565: (32) param_list -> . param + yacc.py:2565: (33) param_list -> . param comma param_list + yacc.py:2565: (35) param -> . id colon type + yacc.py:2566: + yacc.py:2687: id shift and go to state 46 + yacc.py:2689: + yacc.py:2714: param shift and go to state 44 + yacc.py:2714: param_list shift and go to state 95 + yacc.py:2561: + yacc.py:2562:state 61 + yacc.py:2563: + yacc.py:2565: (35) param -> id colon . type + yacc.py:2566: + yacc.py:2687: type shift and go to state 96 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 62 + yacc.py:2563: + yacc.py:2565: (19) def_attr -> id colon type larrow . expr + yacc.py:2565: (24) def_attr -> id colon type larrow . error + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 98 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 97 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 63 + yacc.py:2563: + yacc.py:2565: (23) def_attr -> id colon error larrow . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 99 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 64 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar . colon type ocur expr ccur + yacc.py:2565: (28) def_func -> id opar formals cpar . colon error ocur expr ccur + yacc.py:2565: (29) def_func -> id opar formals cpar . colon type ocur error ccur + yacc.py:2566: + yacc.py:2687: colon shift and go to state 100 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 65 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar . colon type ocur expr ccur + yacc.py:2566: + yacc.py:2687: colon shift and go to state 101 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 66 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list ccur . semi + yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list ccur . error + yacc.py:2566: + yacc.py:2687: semi shift and go to state 102 + yacc.py:2687: error shift and go to state 103 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 67 + yacc.py:2563: + yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list ccur . semi + yacc.py:2566: + yacc.py:2687: semi shift and go to state 104 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 68 + yacc.py:2563: + yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list ccur . semi + yacc.py:2566: + yacc.py:2687: semi shift and go to state 105 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 69 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list ccur . semi + yacc.py:2566: + yacc.py:2687: semi shift and go to state 106 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 70 + yacc.py:2563: + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 71 + yacc.py:2563: + yacc.py:2565: (22) def_attr -> error colon type larrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 22 (def_attr -> error colon type larrow expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 72 + yacc.py:2563: + yacc.py:2565: (45) expr -> id . larrow expr + yacc.py:2565: (75) atom -> id . + yacc.py:2565: (88) func_call -> id . opar args cpar + yacc.py:2565: (89) func_call -> id . opar error cpar + yacc.py:2566: + yacc.py:2687: larrow shift and go to state 112 + yacc.py:2687: arroba reduce using rule 75 (atom -> id .) + yacc.py:2687: dot reduce using rule 75 (atom -> id .) + yacc.py:2687: star reduce using rule 75 (atom -> id .) + yacc.py:2687: div reduce using rule 75 (atom -> id .) + yacc.py:2687: plus reduce using rule 75 (atom -> id .) + yacc.py:2687: minus reduce using rule 75 (atom -> id .) + yacc.py:2687: less reduce using rule 75 (atom -> id .) + yacc.py:2687: lesseq reduce using rule 75 (atom -> id .) + yacc.py:2687: equal reduce using rule 75 (atom -> id .) + yacc.py:2687: semi reduce using rule 75 (atom -> id .) + yacc.py:2687: cpar reduce using rule 75 (atom -> id .) + yacc.py:2687: of reduce using rule 75 (atom -> id .) + yacc.py:2687: then reduce using rule 75 (atom -> id .) + yacc.py:2687: loop reduce using rule 75 (atom -> id .) + yacc.py:2687: comma reduce using rule 75 (atom -> id .) + yacc.py:2687: in reduce using rule 75 (atom -> id .) + yacc.py:2687: else reduce using rule 75 (atom -> id .) + yacc.py:2687: pool reduce using rule 75 (atom -> id .) + yacc.py:2687: ccur reduce using rule 75 (atom -> id .) + yacc.py:2687: fi reduce using rule 75 (atom -> id .) + yacc.py:2687: opar shift and go to state 113 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 73 + yacc.py:2563: + yacc.py:2565: (46) expr -> comp . + yacc.py:2565: (47) comp -> comp . less op + yacc.py:2565: (48) comp -> comp . lesseq op + yacc.py:2565: (49) comp -> comp . equal op + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for less resolved as shift + yacc.py:2666: ! shift/reduce conflict for lesseq resolved as shift + yacc.py:2666: ! shift/reduce conflict for equal resolved as shift + yacc.py:2687: semi reduce using rule 46 (expr -> comp .) + yacc.py:2687: cpar reduce using rule 46 (expr -> comp .) + yacc.py:2687: arroba reduce using rule 46 (expr -> comp .) + yacc.py:2687: dot reduce using rule 46 (expr -> comp .) + yacc.py:2687: star reduce using rule 46 (expr -> comp .) + yacc.py:2687: div reduce using rule 46 (expr -> comp .) + yacc.py:2687: plus reduce using rule 46 (expr -> comp .) + yacc.py:2687: minus reduce using rule 46 (expr -> comp .) + yacc.py:2687: of reduce using rule 46 (expr -> comp .) + yacc.py:2687: then reduce using rule 46 (expr -> comp .) + yacc.py:2687: loop reduce using rule 46 (expr -> comp .) + yacc.py:2687: comma reduce using rule 46 (expr -> comp .) + yacc.py:2687: in reduce using rule 46 (expr -> comp .) + yacc.py:2687: else reduce using rule 46 (expr -> comp .) + yacc.py:2687: pool reduce using rule 46 (expr -> comp .) + yacc.py:2687: ccur reduce using rule 46 (expr -> comp .) + yacc.py:2687: fi reduce using rule 46 (expr -> comp .) + yacc.py:2687: less shift and go to state 114 + yacc.py:2687: lesseq shift and go to state 115 + yacc.py:2687: equal shift and go to state 116 + yacc.py:2689: + yacc.py:2696: ! less [ reduce using rule 46 (expr -> comp .) ] + yacc.py:2696: ! lesseq [ reduce using rule 46 (expr -> comp .) ] + yacc.py:2696: ! equal [ reduce using rule 46 (expr -> comp .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 74 + yacc.py:2563: + yacc.py:2565: (50) comp -> op . + yacc.py:2565: (51) op -> op . plus term + yacc.py:2565: (52) op -> op . minus term + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for plus resolved as shift + yacc.py:2666: ! shift/reduce conflict for minus resolved as shift + yacc.py:2687: less reduce using rule 50 (comp -> op .) + yacc.py:2687: lesseq reduce using rule 50 (comp -> op .) + yacc.py:2687: equal reduce using rule 50 (comp -> op .) + yacc.py:2687: semi reduce using rule 50 (comp -> op .) + yacc.py:2687: cpar reduce using rule 50 (comp -> op .) + yacc.py:2687: arroba reduce using rule 50 (comp -> op .) + yacc.py:2687: dot reduce using rule 50 (comp -> op .) + yacc.py:2687: star reduce using rule 50 (comp -> op .) + yacc.py:2687: div reduce using rule 50 (comp -> op .) + yacc.py:2687: of reduce using rule 50 (comp -> op .) + yacc.py:2687: then reduce using rule 50 (comp -> op .) + yacc.py:2687: loop reduce using rule 50 (comp -> op .) + yacc.py:2687: comma reduce using rule 50 (comp -> op .) + yacc.py:2687: in reduce using rule 50 (comp -> op .) + yacc.py:2687: else reduce using rule 50 (comp -> op .) + yacc.py:2687: pool reduce using rule 50 (comp -> op .) + yacc.py:2687: ccur reduce using rule 50 (comp -> op .) + yacc.py:2687: fi reduce using rule 50 (comp -> op .) + yacc.py:2687: plus shift and go to state 117 + yacc.py:2687: minus shift and go to state 118 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 50 (comp -> op .) ] + yacc.py:2696: ! minus [ reduce using rule 50 (comp -> op .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 75 + yacc.py:2563: + yacc.py:2565: (53) op -> term . + yacc.py:2565: (54) term -> term . star base_call + yacc.py:2565: (55) term -> term . div base_call + yacc.py:2565: (57) term -> term . star error + yacc.py:2565: (58) term -> term . div error + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for star resolved as shift + yacc.py:2666: ! shift/reduce conflict for div resolved as shift + yacc.py:2687: plus reduce using rule 53 (op -> term .) + yacc.py:2687: minus reduce using rule 53 (op -> term .) + yacc.py:2687: less reduce using rule 53 (op -> term .) + yacc.py:2687: lesseq reduce using rule 53 (op -> term .) + yacc.py:2687: equal reduce using rule 53 (op -> term .) + yacc.py:2687: semi reduce using rule 53 (op -> term .) + yacc.py:2687: cpar reduce using rule 53 (op -> term .) + yacc.py:2687: arroba reduce using rule 53 (op -> term .) + yacc.py:2687: dot reduce using rule 53 (op -> term .) + yacc.py:2687: of reduce using rule 53 (op -> term .) + yacc.py:2687: then reduce using rule 53 (op -> term .) + yacc.py:2687: loop reduce using rule 53 (op -> term .) + yacc.py:2687: comma reduce using rule 53 (op -> term .) + yacc.py:2687: in reduce using rule 53 (op -> term .) + yacc.py:2687: else reduce using rule 53 (op -> term .) + yacc.py:2687: pool reduce using rule 53 (op -> term .) + yacc.py:2687: ccur reduce using rule 53 (op -> term .) + yacc.py:2687: fi reduce using rule 53 (op -> term .) + yacc.py:2687: star shift and go to state 119 + yacc.py:2687: div shift and go to state 120 + yacc.py:2689: + yacc.py:2696: ! star [ reduce using rule 53 (op -> term .) ] + yacc.py:2696: ! div [ reduce using rule 53 (op -> term .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 76 + yacc.py:2563: + yacc.py:2565: (56) term -> base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 56 (term -> base_call .) + yacc.py:2687: div reduce using rule 56 (term -> base_call .) + yacc.py:2687: plus reduce using rule 56 (term -> base_call .) + yacc.py:2687: minus reduce using rule 56 (term -> base_call .) + yacc.py:2687: less reduce using rule 56 (term -> base_call .) + yacc.py:2687: lesseq reduce using rule 56 (term -> base_call .) + yacc.py:2687: equal reduce using rule 56 (term -> base_call .) + yacc.py:2687: semi reduce using rule 56 (term -> base_call .) + yacc.py:2687: cpar reduce using rule 56 (term -> base_call .) + yacc.py:2687: arroba reduce using rule 56 (term -> base_call .) + yacc.py:2687: dot reduce using rule 56 (term -> base_call .) + yacc.py:2687: of reduce using rule 56 (term -> base_call .) + yacc.py:2687: then reduce using rule 56 (term -> base_call .) + yacc.py:2687: loop reduce using rule 56 (term -> base_call .) + yacc.py:2687: comma reduce using rule 56 (term -> base_call .) + yacc.py:2687: in reduce using rule 56 (term -> base_call .) + yacc.py:2687: else reduce using rule 56 (term -> base_call .) + yacc.py:2687: pool reduce using rule 56 (term -> base_call .) + yacc.py:2687: ccur reduce using rule 56 (term -> base_call .) + yacc.py:2687: fi reduce using rule 56 (term -> base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 77 + yacc.py:2563: + yacc.py:2565: (59) base_call -> factor . arroba type dot func_call + yacc.py:2565: (60) base_call -> factor . + yacc.py:2565: (62) base_call -> factor . arroba error dot func_call + yacc.py:2565: (65) factor -> factor . dot func_call + yacc.py:2566: + yacc.py:2609: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2666: ! shift/reduce conflict for dot resolved as shift + yacc.py:2687: arroba shift and go to state 121 + yacc.py:2687: star reduce using rule 60 (base_call -> factor .) + yacc.py:2687: div reduce using rule 60 (base_call -> factor .) + yacc.py:2687: plus reduce using rule 60 (base_call -> factor .) + yacc.py:2687: minus reduce using rule 60 (base_call -> factor .) + yacc.py:2687: less reduce using rule 60 (base_call -> factor .) + yacc.py:2687: lesseq reduce using rule 60 (base_call -> factor .) + yacc.py:2687: equal reduce using rule 60 (base_call -> factor .) + yacc.py:2687: semi reduce using rule 60 (base_call -> factor .) + yacc.py:2687: cpar reduce using rule 60 (base_call -> factor .) + yacc.py:2687: of reduce using rule 60 (base_call -> factor .) + yacc.py:2687: then reduce using rule 60 (base_call -> factor .) + yacc.py:2687: loop reduce using rule 60 (base_call -> factor .) + yacc.py:2687: comma reduce using rule 60 (base_call -> factor .) + yacc.py:2687: in reduce using rule 60 (base_call -> factor .) + yacc.py:2687: else reduce using rule 60 (base_call -> factor .) + yacc.py:2687: pool reduce using rule 60 (base_call -> factor .) + yacc.py:2687: ccur reduce using rule 60 (base_call -> factor .) + yacc.py:2687: fi reduce using rule 60 (base_call -> factor .) + yacc.py:2687: dot shift and go to state 122 + yacc.py:2689: + yacc.py:2696: ! arroba [ reduce using rule 60 (base_call -> factor .) ] + yacc.py:2696: ! dot [ reduce using rule 60 (base_call -> factor .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 78 + yacc.py:2563: + yacc.py:2565: (67) factor -> func_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 67 (factor -> func_call .) + yacc.py:2687: dot reduce using rule 67 (factor -> func_call .) + yacc.py:2687: star reduce using rule 67 (factor -> func_call .) + yacc.py:2687: div reduce using rule 67 (factor -> func_call .) + yacc.py:2687: plus reduce using rule 67 (factor -> func_call .) + yacc.py:2687: minus reduce using rule 67 (factor -> func_call .) + yacc.py:2687: less reduce using rule 67 (factor -> func_call .) + yacc.py:2687: lesseq reduce using rule 67 (factor -> func_call .) + yacc.py:2687: equal reduce using rule 67 (factor -> func_call .) + yacc.py:2687: semi reduce using rule 67 (factor -> func_call .) + yacc.py:2687: cpar reduce using rule 67 (factor -> func_call .) + yacc.py:2687: of reduce using rule 67 (factor -> func_call .) + yacc.py:2687: then reduce using rule 67 (factor -> func_call .) + yacc.py:2687: loop reduce using rule 67 (factor -> func_call .) + yacc.py:2687: comma reduce using rule 67 (factor -> func_call .) + yacc.py:2687: in reduce using rule 67 (factor -> func_call .) + yacc.py:2687: else reduce using rule 67 (factor -> func_call .) + yacc.py:2687: pool reduce using rule 67 (factor -> func_call .) + yacc.py:2687: ccur reduce using rule 67 (factor -> func_call .) + yacc.py:2687: fi reduce using rule 67 (factor -> func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 79 + yacc.py:2563: + yacc.py:2565: (63) factor -> atom . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 63 (factor -> atom .) + yacc.py:2687: dot reduce using rule 63 (factor -> atom .) + yacc.py:2687: star reduce using rule 63 (factor -> atom .) + yacc.py:2687: div reduce using rule 63 (factor -> atom .) + yacc.py:2687: plus reduce using rule 63 (factor -> atom .) + yacc.py:2687: minus reduce using rule 63 (factor -> atom .) + yacc.py:2687: less reduce using rule 63 (factor -> atom .) + yacc.py:2687: lesseq reduce using rule 63 (factor -> atom .) + yacc.py:2687: equal reduce using rule 63 (factor -> atom .) + yacc.py:2687: semi reduce using rule 63 (factor -> atom .) + yacc.py:2687: cpar reduce using rule 63 (factor -> atom .) + yacc.py:2687: of reduce using rule 63 (factor -> atom .) + yacc.py:2687: then reduce using rule 63 (factor -> atom .) + yacc.py:2687: loop reduce using rule 63 (factor -> atom .) + yacc.py:2687: comma reduce using rule 63 (factor -> atom .) + yacc.py:2687: in reduce using rule 63 (factor -> atom .) + yacc.py:2687: else reduce using rule 63 (factor -> atom .) + yacc.py:2687: pool reduce using rule 63 (factor -> atom .) + yacc.py:2687: ccur reduce using rule 63 (factor -> atom .) + yacc.py:2687: fi reduce using rule 63 (factor -> atom .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 80 + yacc.py:2563: + yacc.py:2565: (64) factor -> opar . expr cpar + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 123 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 81 + yacc.py:2563: + yacc.py:2565: (66) factor -> not . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 124 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 82 + yacc.py:2563: + yacc.py:2565: (68) factor -> isvoid . base_call + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 125 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 83 + yacc.py:2563: + yacc.py:2565: (69) factor -> nox . base_call + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 127 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 84 + yacc.py:2563: + yacc.py:2565: (70) factor -> let . let_list in expr + yacc.py:2565: (36) let_list -> . let_assign + yacc.py:2565: (37) let_list -> . let_assign comma let_list + yacc.py:2565: (38) let_assign -> . param larrow expr + yacc.py:2565: (39) let_assign -> . param + yacc.py:2565: (35) param -> . id colon type + yacc.py:2566: + yacc.py:2687: id shift and go to state 46 + yacc.py:2689: + yacc.py:2714: let_list shift and go to state 128 + yacc.py:2714: let_assign shift and go to state 129 + yacc.py:2714: param shift and go to state 130 + yacc.py:2561: + yacc.py:2562:state 85 + yacc.py:2563: + yacc.py:2565: (71) factor -> case . expr of cases_list esac + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 131 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 86 + yacc.py:2563: + yacc.py:2565: (72) factor -> if . expr then expr else expr fi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 132 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 87 + yacc.py:2563: + yacc.py:2565: (73) factor -> while . expr loop expr pool + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 133 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 88 + yacc.py:2563: + yacc.py:2565: (74) atom -> num . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 74 (atom -> num .) + yacc.py:2687: dot reduce using rule 74 (atom -> num .) + yacc.py:2687: star reduce using rule 74 (atom -> num .) + yacc.py:2687: div reduce using rule 74 (atom -> num .) + yacc.py:2687: plus reduce using rule 74 (atom -> num .) + yacc.py:2687: minus reduce using rule 74 (atom -> num .) + yacc.py:2687: less reduce using rule 74 (atom -> num .) + yacc.py:2687: lesseq reduce using rule 74 (atom -> num .) + yacc.py:2687: equal reduce using rule 74 (atom -> num .) + yacc.py:2687: semi reduce using rule 74 (atom -> num .) + yacc.py:2687: cpar reduce using rule 74 (atom -> num .) + yacc.py:2687: of reduce using rule 74 (atom -> num .) + yacc.py:2687: then reduce using rule 74 (atom -> num .) + yacc.py:2687: loop reduce using rule 74 (atom -> num .) + yacc.py:2687: comma reduce using rule 74 (atom -> num .) + yacc.py:2687: in reduce using rule 74 (atom -> num .) + yacc.py:2687: else reduce using rule 74 (atom -> num .) + yacc.py:2687: pool reduce using rule 74 (atom -> num .) + yacc.py:2687: ccur reduce using rule 74 (atom -> num .) + yacc.py:2687: fi reduce using rule 74 (atom -> num .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 89 + yacc.py:2563: + yacc.py:2565: (76) atom -> new . type + yacc.py:2566: + yacc.py:2687: type shift and go to state 134 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 90 + yacc.py:2563: + yacc.py:2565: (77) atom -> ocur . block ccur + yacc.py:2565: (79) atom -> ocur . error ccur + yacc.py:2565: (80) atom -> ocur . block error + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 136 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: block shift and go to state 135 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 91 + yacc.py:2563: + yacc.py:2565: (81) atom -> true . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 81 (atom -> true .) + yacc.py:2687: dot reduce using rule 81 (atom -> true .) + yacc.py:2687: star reduce using rule 81 (atom -> true .) + yacc.py:2687: div reduce using rule 81 (atom -> true .) + yacc.py:2687: plus reduce using rule 81 (atom -> true .) + yacc.py:2687: minus reduce using rule 81 (atom -> true .) + yacc.py:2687: less reduce using rule 81 (atom -> true .) + yacc.py:2687: lesseq reduce using rule 81 (atom -> true .) + yacc.py:2687: equal reduce using rule 81 (atom -> true .) + yacc.py:2687: semi reduce using rule 81 (atom -> true .) + yacc.py:2687: cpar reduce using rule 81 (atom -> true .) + yacc.py:2687: of reduce using rule 81 (atom -> true .) + yacc.py:2687: then reduce using rule 81 (atom -> true .) + yacc.py:2687: loop reduce using rule 81 (atom -> true .) + yacc.py:2687: comma reduce using rule 81 (atom -> true .) + yacc.py:2687: in reduce using rule 81 (atom -> true .) + yacc.py:2687: else reduce using rule 81 (atom -> true .) + yacc.py:2687: pool reduce using rule 81 (atom -> true .) + yacc.py:2687: ccur reduce using rule 81 (atom -> true .) + yacc.py:2687: fi reduce using rule 81 (atom -> true .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 92 + yacc.py:2563: + yacc.py:2565: (82) atom -> false . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 82 (atom -> false .) + yacc.py:2687: dot reduce using rule 82 (atom -> false .) + yacc.py:2687: star reduce using rule 82 (atom -> false .) + yacc.py:2687: div reduce using rule 82 (atom -> false .) + yacc.py:2687: plus reduce using rule 82 (atom -> false .) + yacc.py:2687: minus reduce using rule 82 (atom -> false .) + yacc.py:2687: less reduce using rule 82 (atom -> false .) + yacc.py:2687: lesseq reduce using rule 82 (atom -> false .) + yacc.py:2687: equal reduce using rule 82 (atom -> false .) + yacc.py:2687: semi reduce using rule 82 (atom -> false .) + yacc.py:2687: cpar reduce using rule 82 (atom -> false .) + yacc.py:2687: of reduce using rule 82 (atom -> false .) + yacc.py:2687: then reduce using rule 82 (atom -> false .) + yacc.py:2687: loop reduce using rule 82 (atom -> false .) + yacc.py:2687: comma reduce using rule 82 (atom -> false .) + yacc.py:2687: in reduce using rule 82 (atom -> false .) + yacc.py:2687: else reduce using rule 82 (atom -> false .) + yacc.py:2687: pool reduce using rule 82 (atom -> false .) + yacc.py:2687: ccur reduce using rule 82 (atom -> false .) + yacc.py:2687: fi reduce using rule 82 (atom -> false .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 93 + yacc.py:2563: + yacc.py:2565: (83) atom -> string . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 83 (atom -> string .) + yacc.py:2687: dot reduce using rule 83 (atom -> string .) + yacc.py:2687: star reduce using rule 83 (atom -> string .) + yacc.py:2687: div reduce using rule 83 (atom -> string .) + yacc.py:2687: plus reduce using rule 83 (atom -> string .) + yacc.py:2687: minus reduce using rule 83 (atom -> string .) + yacc.py:2687: less reduce using rule 83 (atom -> string .) + yacc.py:2687: lesseq reduce using rule 83 (atom -> string .) + yacc.py:2687: equal reduce using rule 83 (atom -> string .) + yacc.py:2687: semi reduce using rule 83 (atom -> string .) + yacc.py:2687: cpar reduce using rule 83 (atom -> string .) + yacc.py:2687: of reduce using rule 83 (atom -> string .) + yacc.py:2687: then reduce using rule 83 (atom -> string .) + yacc.py:2687: loop reduce using rule 83 (atom -> string .) + yacc.py:2687: comma reduce using rule 83 (atom -> string .) + yacc.py:2687: in reduce using rule 83 (atom -> string .) + yacc.py:2687: else reduce using rule 83 (atom -> string .) + yacc.py:2687: pool reduce using rule 83 (atom -> string .) + yacc.py:2687: ccur reduce using rule 83 (atom -> string .) + yacc.py:2687: fi reduce using rule 83 (atom -> string .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 94 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar colon . type ocur expr ccur + yacc.py:2566: + yacc.py:2687: type shift and go to state 137 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 95 + yacc.py:2563: + yacc.py:2565: (33) param_list -> param comma param_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 33 (param_list -> param comma param_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 96 + yacc.py:2563: + yacc.py:2565: (35) param -> id colon type . + yacc.py:2566: + yacc.py:2687: comma reduce using rule 35 (param -> id colon type .) + yacc.py:2687: cpar reduce using rule 35 (param -> id colon type .) + yacc.py:2687: larrow reduce using rule 35 (param -> id colon type .) + yacc.py:2687: in reduce using rule 35 (param -> id colon type .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 97 + yacc.py:2563: + yacc.py:2565: (19) def_attr -> id colon type larrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 19 (def_attr -> id colon type larrow expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 98 + yacc.py:2563: + yacc.py:2565: (24) def_attr -> id colon type larrow error . + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: semi reduce using rule 24 (def_attr -> id colon type larrow error .) + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 99 + yacc.py:2563: + yacc.py:2565: (23) def_attr -> id colon error larrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 23 (def_attr -> id colon error larrow expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 100 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar colon . type ocur expr ccur + yacc.py:2565: (28) def_func -> id opar formals cpar colon . error ocur expr ccur + yacc.py:2565: (29) def_func -> id opar formals cpar colon . type ocur error ccur + yacc.py:2566: + yacc.py:2687: type shift and go to state 138 + yacc.py:2687: error shift and go to state 139 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 101 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar colon . type ocur expr ccur + yacc.py:2566: + yacc.py:2687: type shift and go to state 140 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 102 + yacc.py:2563: + yacc.py:2565: (7) def_class -> class type inherits type ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 7 (def_class -> class type inherits type ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 103 + yacc.py:2563: + yacc.py:2565: (13) def_class -> class type inherits type ocur feature_list ccur error . + yacc.py:2566: + yacc.py:2687: error reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) + yacc.py:2687: class reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) + yacc.py:2687: $end reduce using rule 13 (def_class -> class type inherits type ocur feature_list ccur error .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 104 + yacc.py:2563: + yacc.py:2565: (12) def_class -> class type inherits error ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 12 (def_class -> class type inherits error ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 105 + yacc.py:2563: + yacc.py:2565: (11) def_class -> class error inherits error ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 11 (def_class -> class error inherits error ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 106 + yacc.py:2563: + yacc.py:2565: (10) def_class -> class error inherits type ocur feature_list ccur semi . + yacc.py:2566: + yacc.py:2687: error reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) + yacc.py:2687: class reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) + yacc.py:2687: $end reduce using rule 10 (def_class -> class error inherits type ocur feature_list ccur semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 107 + yacc.py:2563: + yacc.py:2565: (86) block -> error . block + yacc.py:2565: (87) block -> error . semi + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: semi shift and go to state 142 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: block shift and go to state 141 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 108 + yacc.py:2563: + yacc.py:2565: (61) base_call -> error arroba . type dot func_call + yacc.py:2566: + yacc.py:2687: type shift and go to state 143 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 109 + yacc.py:2563: + yacc.py:2565: (78) atom -> error block . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 144 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 110 + yacc.py:2563: + yacc.py:2565: (90) func_call -> error opar . args cpar + yacc.py:2565: (64) factor -> opar . expr cpar + yacc.py:2565: (91) args -> . arg_list + yacc.py:2565: (92) args -> . arg_list_empty + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (96) arg_list_empty -> . epsilon + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 145 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: args shift and go to state 146 + yacc.py:2714: expr shift and go to state 147 + yacc.py:2714: arg_list shift and go to state 148 + yacc.py:2714: arg_list_empty shift and go to state 149 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: epsilon shift and go to state 150 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 111 + yacc.py:2563: + yacc.py:2565: (84) block -> expr . semi + yacc.py:2565: (85) block -> expr . semi block + yacc.py:2566: + yacc.py:2687: semi shift and go to state 151 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 112 + yacc.py:2563: + yacc.py:2565: (45) expr -> id larrow . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 152 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 113 + yacc.py:2563: + yacc.py:2565: (88) func_call -> id opar . args cpar + yacc.py:2565: (89) func_call -> id opar . error cpar + yacc.py:2565: (91) args -> . arg_list + yacc.py:2565: (92) args -> . arg_list_empty + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (96) arg_list_empty -> . epsilon + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 154 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: args shift and go to state 153 + yacc.py:2714: arg_list shift and go to state 148 + yacc.py:2714: arg_list_empty shift and go to state 149 + yacc.py:2714: expr shift and go to state 155 + yacc.py:2714: epsilon shift and go to state 150 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 114 + yacc.py:2563: + yacc.py:2565: (47) comp -> comp less . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: op shift and go to state 156 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 115 + yacc.py:2563: + yacc.py:2565: (48) comp -> comp lesseq . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: op shift and go to state 157 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 116 + yacc.py:2563: + yacc.py:2565: (49) comp -> comp equal . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: op shift and go to state 158 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 117 + yacc.py:2563: + yacc.py:2565: (51) op -> op plus . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: term shift and go to state 159 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 118 + yacc.py:2563: + yacc.py:2565: (52) op -> op minus . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: term shift and go to state 160 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 119 + yacc.py:2563: + yacc.py:2565: (54) term -> term star . base_call + yacc.py:2565: (57) term -> term star . error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 162 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 161 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 120 + yacc.py:2563: + yacc.py:2565: (55) term -> term div . base_call + yacc.py:2565: (58) term -> term div . error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 164 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: id shift and go to state 126 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: base_call shift and go to state 163 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 121 + yacc.py:2563: + yacc.py:2565: (59) base_call -> factor arroba . type dot func_call + yacc.py:2565: (62) base_call -> factor arroba . error dot func_call + yacc.py:2566: + yacc.py:2687: type shift and go to state 165 + yacc.py:2687: error shift and go to state 166 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 122 + yacc.py:2563: + yacc.py:2565: (65) factor -> factor dot . func_call + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 168 + yacc.py:2687: error shift and go to state 169 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 167 + yacc.py:2561: + yacc.py:2562:state 123 + yacc.py:2563: + yacc.py:2565: (64) factor -> opar expr . cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 170 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 124 + yacc.py:2563: + yacc.py:2565: (66) factor -> not expr . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 66 (factor -> not expr .) + yacc.py:2687: dot reduce using rule 66 (factor -> not expr .) + yacc.py:2687: star reduce using rule 66 (factor -> not expr .) + yacc.py:2687: div reduce using rule 66 (factor -> not expr .) + yacc.py:2687: plus reduce using rule 66 (factor -> not expr .) + yacc.py:2687: minus reduce using rule 66 (factor -> not expr .) + yacc.py:2687: less reduce using rule 66 (factor -> not expr .) + yacc.py:2687: lesseq reduce using rule 66 (factor -> not expr .) + yacc.py:2687: equal reduce using rule 66 (factor -> not expr .) + yacc.py:2687: semi reduce using rule 66 (factor -> not expr .) + yacc.py:2687: cpar reduce using rule 66 (factor -> not expr .) + yacc.py:2687: of reduce using rule 66 (factor -> not expr .) + yacc.py:2687: then reduce using rule 66 (factor -> not expr .) + yacc.py:2687: loop reduce using rule 66 (factor -> not expr .) + yacc.py:2687: comma reduce using rule 66 (factor -> not expr .) + yacc.py:2687: in reduce using rule 66 (factor -> not expr .) + yacc.py:2687: else reduce using rule 66 (factor -> not expr .) + yacc.py:2687: pool reduce using rule 66 (factor -> not expr .) + yacc.py:2687: ccur reduce using rule 66 (factor -> not expr .) + yacc.py:2687: fi reduce using rule 66 (factor -> not expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 125 + yacc.py:2563: + yacc.py:2565: (68) factor -> isvoid base_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: dot reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: star reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: div reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: plus reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: minus reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: less reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: lesseq reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: equal reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: semi reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: cpar reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: of reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: then reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: loop reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: comma reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: in reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: else reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: pool reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: ccur reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2687: fi reduce using rule 68 (factor -> isvoid base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 126 + yacc.py:2563: + yacc.py:2565: (75) atom -> id . + yacc.py:2565: (88) func_call -> id . opar args cpar + yacc.py:2565: (89) func_call -> id . opar error cpar + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 75 (atom -> id .) + yacc.py:2687: dot reduce using rule 75 (atom -> id .) + yacc.py:2687: star reduce using rule 75 (atom -> id .) + yacc.py:2687: div reduce using rule 75 (atom -> id .) + yacc.py:2687: plus reduce using rule 75 (atom -> id .) + yacc.py:2687: minus reduce using rule 75 (atom -> id .) + yacc.py:2687: less reduce using rule 75 (atom -> id .) + yacc.py:2687: lesseq reduce using rule 75 (atom -> id .) + yacc.py:2687: equal reduce using rule 75 (atom -> id .) + yacc.py:2687: semi reduce using rule 75 (atom -> id .) + yacc.py:2687: cpar reduce using rule 75 (atom -> id .) + yacc.py:2687: of reduce using rule 75 (atom -> id .) + yacc.py:2687: then reduce using rule 75 (atom -> id .) + yacc.py:2687: loop reduce using rule 75 (atom -> id .) + yacc.py:2687: comma reduce using rule 75 (atom -> id .) + yacc.py:2687: in reduce using rule 75 (atom -> id .) + yacc.py:2687: else reduce using rule 75 (atom -> id .) + yacc.py:2687: pool reduce using rule 75 (atom -> id .) + yacc.py:2687: ccur reduce using rule 75 (atom -> id .) + yacc.py:2687: fi reduce using rule 75 (atom -> id .) + yacc.py:2687: opar shift and go to state 113 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 127 + yacc.py:2563: + yacc.py:2565: (69) factor -> nox base_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: dot reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: star reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: div reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: plus reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: minus reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: less reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: lesseq reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: equal reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: semi reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: cpar reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: of reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: then reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: loop reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: comma reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: in reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: else reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: pool reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: ccur reduce using rule 69 (factor -> nox base_call .) + yacc.py:2687: fi reduce using rule 69 (factor -> nox base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 128 + yacc.py:2563: + yacc.py:2565: (70) factor -> let let_list . in expr + yacc.py:2566: + yacc.py:2687: in shift and go to state 171 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 129 + yacc.py:2563: + yacc.py:2565: (36) let_list -> let_assign . + yacc.py:2565: (37) let_list -> let_assign . comma let_list + yacc.py:2566: + yacc.py:2687: in reduce using rule 36 (let_list -> let_assign .) + yacc.py:2687: comma shift and go to state 172 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 130 + yacc.py:2563: + yacc.py:2565: (38) let_assign -> param . larrow expr + yacc.py:2565: (39) let_assign -> param . + yacc.py:2566: + yacc.py:2687: larrow shift and go to state 173 + yacc.py:2687: comma reduce using rule 39 (let_assign -> param .) + yacc.py:2687: in reduce using rule 39 (let_assign -> param .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 131 + yacc.py:2563: + yacc.py:2565: (71) factor -> case expr . of cases_list esac + yacc.py:2566: + yacc.py:2687: of shift and go to state 174 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 132 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr . then expr else expr fi + yacc.py:2566: + yacc.py:2687: then shift and go to state 175 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 133 + yacc.py:2563: + yacc.py:2565: (73) factor -> while expr . loop expr pool + yacc.py:2566: + yacc.py:2687: loop shift and go to state 176 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 134 + yacc.py:2563: + yacc.py:2565: (76) atom -> new type . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 76 (atom -> new type .) + yacc.py:2687: dot reduce using rule 76 (atom -> new type .) + yacc.py:2687: star reduce using rule 76 (atom -> new type .) + yacc.py:2687: div reduce using rule 76 (atom -> new type .) + yacc.py:2687: plus reduce using rule 76 (atom -> new type .) + yacc.py:2687: minus reduce using rule 76 (atom -> new type .) + yacc.py:2687: less reduce using rule 76 (atom -> new type .) + yacc.py:2687: lesseq reduce using rule 76 (atom -> new type .) + yacc.py:2687: equal reduce using rule 76 (atom -> new type .) + yacc.py:2687: semi reduce using rule 76 (atom -> new type .) + yacc.py:2687: cpar reduce using rule 76 (atom -> new type .) + yacc.py:2687: of reduce using rule 76 (atom -> new type .) + yacc.py:2687: then reduce using rule 76 (atom -> new type .) + yacc.py:2687: loop reduce using rule 76 (atom -> new type .) + yacc.py:2687: comma reduce using rule 76 (atom -> new type .) + yacc.py:2687: in reduce using rule 76 (atom -> new type .) + yacc.py:2687: else reduce using rule 76 (atom -> new type .) + yacc.py:2687: pool reduce using rule 76 (atom -> new type .) + yacc.py:2687: ccur reduce using rule 76 (atom -> new type .) + yacc.py:2687: fi reduce using rule 76 (atom -> new type .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 135 + yacc.py:2563: + yacc.py:2565: (77) atom -> ocur block . ccur + yacc.py:2565: (80) atom -> ocur block . error + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 177 + yacc.py:2687: error shift and go to state 178 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 136 + yacc.py:2563: + yacc.py:2565: (79) atom -> ocur error . ccur + yacc.py:2565: (86) block -> error . block + yacc.py:2565: (87) block -> error . semi + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 179 + yacc.py:2687: semi shift and go to state 142 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: block shift and go to state 141 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 137 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar colon type . ocur expr ccur + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 180 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 138 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar colon type . ocur expr ccur + yacc.py:2565: (29) def_func -> id opar formals cpar colon type . ocur error ccur + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 181 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 139 + yacc.py:2563: + yacc.py:2565: (28) def_func -> id opar formals cpar colon error . ocur expr ccur + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 182 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 140 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar colon type . ocur expr ccur + yacc.py:2566: + yacc.py:2687: ocur shift and go to state 183 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 141 + yacc.py:2563: + yacc.py:2565: (86) block -> error block . + yacc.py:2565: (78) atom -> error block . ccur + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for ccur resolved as shift + yacc.py:2687: error reduce using rule 86 (block -> error block .) + yacc.py:2687: ccur shift and go to state 144 + yacc.py:2689: + yacc.py:2696: ! ccur [ reduce using rule 86 (block -> error block .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 142 + yacc.py:2563: + yacc.py:2565: (87) block -> error semi . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 87 (block -> error semi .) + yacc.py:2687: error reduce using rule 87 (block -> error semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 143 + yacc.py:2563: + yacc.py:2565: (61) base_call -> error arroba type . dot func_call + yacc.py:2566: + yacc.py:2687: dot shift and go to state 184 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 144 + yacc.py:2563: + yacc.py:2565: (78) atom -> error block ccur . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: dot reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: star reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: div reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: plus reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: minus reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: less reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: lesseq reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: equal reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: semi reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: cpar reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: of reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: then reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: loop reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: comma reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: in reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: else reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: pool reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: ccur reduce using rule 78 (atom -> error block ccur .) + yacc.py:2687: fi reduce using rule 78 (atom -> error block ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 145 + yacc.py:2563: + yacc.py:2565: (95) arg_list -> error . arg_list + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 185 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: arg_list shift and go to state 186 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 187 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 146 + yacc.py:2563: + yacc.py:2565: (90) func_call -> error opar args . cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 188 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 147 + yacc.py:2563: + yacc.py:2565: (64) factor -> opar expr . cpar + yacc.py:2565: (93) arg_list -> expr . + yacc.py:2565: (94) arg_list -> expr . comma arg_list + yacc.py:2566: + yacc.py:2609: ! shift/reduce conflict for cpar resolved as shift + yacc.py:2687: cpar shift and go to state 170 + yacc.py:2687: comma shift and go to state 189 + yacc.py:2689: + yacc.py:2696: ! cpar [ reduce using rule 93 (arg_list -> expr .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 148 + yacc.py:2563: + yacc.py:2565: (91) args -> arg_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 91 (args -> arg_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 149 + yacc.py:2563: + yacc.py:2565: (92) args -> arg_list_empty . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 92 (args -> arg_list_empty .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 150 + yacc.py:2563: + yacc.py:2565: (96) arg_list_empty -> epsilon . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 96 (arg_list_empty -> epsilon .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 151 + yacc.py:2563: + yacc.py:2565: (84) block -> expr semi . + yacc.py:2565: (85) block -> expr semi . block + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for error resolved as shift + yacc.py:2687: ccur reduce using rule 84 (block -> expr semi .) + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2696: ! error [ reduce using rule 84 (block -> expr semi .) ] + yacc.py:2700: + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: block shift and go to state 190 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 152 + yacc.py:2563: + yacc.py:2565: (45) expr -> id larrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: cpar reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: arroba reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: dot reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: star reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: div reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: plus reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: minus reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: less reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: lesseq reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: equal reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: of reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: then reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: loop reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: comma reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: in reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: else reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: pool reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: ccur reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2687: fi reduce using rule 45 (expr -> id larrow expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 153 + yacc.py:2563: + yacc.py:2565: (88) func_call -> id opar args . cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 191 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 154 + yacc.py:2563: + yacc.py:2565: (89) func_call -> id opar error . cpar + yacc.py:2565: (95) arg_list -> error . arg_list + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: cpar shift and go to state 192 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 185 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: arg_list shift and go to state 186 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 187 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 155 + yacc.py:2563: + yacc.py:2565: (93) arg_list -> expr . + yacc.py:2565: (94) arg_list -> expr . comma arg_list + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 93 (arg_list -> expr .) + yacc.py:2687: comma shift and go to state 189 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 156 + yacc.py:2563: + yacc.py:2565: (47) comp -> comp less op . + yacc.py:2565: (51) op -> op . plus term + yacc.py:2565: (52) op -> op . minus term + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for plus resolved as shift + yacc.py:2666: ! shift/reduce conflict for minus resolved as shift + yacc.py:2687: less reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: lesseq reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: equal reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: semi reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: cpar reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: arroba reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: dot reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: star reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: div reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: of reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: then reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: loop reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: comma reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: in reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: else reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: pool reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: ccur reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: fi reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: plus shift and go to state 117 + yacc.py:2687: minus shift and go to state 118 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 47 (comp -> comp less op .) ] + yacc.py:2696: ! minus [ reduce using rule 47 (comp -> comp less op .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 157 + yacc.py:2563: + yacc.py:2565: (48) comp -> comp lesseq op . + yacc.py:2565: (51) op -> op . plus term + yacc.py:2565: (52) op -> op . minus term + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for plus resolved as shift + yacc.py:2666: ! shift/reduce conflict for minus resolved as shift + yacc.py:2687: less reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: lesseq reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: equal reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: semi reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: cpar reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: arroba reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: dot reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: star reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: div reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: of reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: then reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: loop reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: comma reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: in reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: else reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: pool reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: ccur reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: fi reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: plus shift and go to state 117 + yacc.py:2687: minus shift and go to state 118 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 48 (comp -> comp lesseq op .) ] + yacc.py:2696: ! minus [ reduce using rule 48 (comp -> comp lesseq op .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 158 + yacc.py:2563: + yacc.py:2565: (49) comp -> comp equal op . + yacc.py:2565: (51) op -> op . plus term + yacc.py:2565: (52) op -> op . minus term + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for plus resolved as shift + yacc.py:2666: ! shift/reduce conflict for minus resolved as shift + yacc.py:2687: less reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: lesseq reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: equal reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: semi reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: cpar reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: arroba reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: dot reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: star reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: div reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: of reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: then reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: loop reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: comma reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: in reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: else reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: pool reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: ccur reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: fi reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: plus shift and go to state 117 + yacc.py:2687: minus shift and go to state 118 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 49 (comp -> comp equal op .) ] + yacc.py:2696: ! minus [ reduce using rule 49 (comp -> comp equal op .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 159 + yacc.py:2563: + yacc.py:2565: (51) op -> op plus term . + yacc.py:2565: (54) term -> term . star base_call + yacc.py:2565: (55) term -> term . div base_call + yacc.py:2565: (57) term -> term . star error + yacc.py:2565: (58) term -> term . div error + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for star resolved as shift + yacc.py:2666: ! shift/reduce conflict for div resolved as shift + yacc.py:2687: plus reduce using rule 51 (op -> op plus term .) + yacc.py:2687: minus reduce using rule 51 (op -> op plus term .) + yacc.py:2687: less reduce using rule 51 (op -> op plus term .) + yacc.py:2687: lesseq reduce using rule 51 (op -> op plus term .) + yacc.py:2687: equal reduce using rule 51 (op -> op plus term .) + yacc.py:2687: semi reduce using rule 51 (op -> op plus term .) + yacc.py:2687: cpar reduce using rule 51 (op -> op plus term .) + yacc.py:2687: arroba reduce using rule 51 (op -> op plus term .) + yacc.py:2687: dot reduce using rule 51 (op -> op plus term .) + yacc.py:2687: of reduce using rule 51 (op -> op plus term .) + yacc.py:2687: then reduce using rule 51 (op -> op plus term .) + yacc.py:2687: loop reduce using rule 51 (op -> op plus term .) + yacc.py:2687: comma reduce using rule 51 (op -> op plus term .) + yacc.py:2687: in reduce using rule 51 (op -> op plus term .) + yacc.py:2687: else reduce using rule 51 (op -> op plus term .) + yacc.py:2687: pool reduce using rule 51 (op -> op plus term .) + yacc.py:2687: ccur reduce using rule 51 (op -> op plus term .) + yacc.py:2687: fi reduce using rule 51 (op -> op plus term .) + yacc.py:2687: star shift and go to state 119 + yacc.py:2687: div shift and go to state 120 + yacc.py:2689: + yacc.py:2696: ! star [ reduce using rule 51 (op -> op plus term .) ] + yacc.py:2696: ! div [ reduce using rule 51 (op -> op plus term .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 160 + yacc.py:2563: + yacc.py:2565: (52) op -> op minus term . + yacc.py:2565: (54) term -> term . star base_call + yacc.py:2565: (55) term -> term . div base_call + yacc.py:2565: (57) term -> term . star error + yacc.py:2565: (58) term -> term . div error + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for star resolved as shift + yacc.py:2666: ! shift/reduce conflict for div resolved as shift + yacc.py:2687: plus reduce using rule 52 (op -> op minus term .) + yacc.py:2687: minus reduce using rule 52 (op -> op minus term .) + yacc.py:2687: less reduce using rule 52 (op -> op minus term .) + yacc.py:2687: lesseq reduce using rule 52 (op -> op minus term .) + yacc.py:2687: equal reduce using rule 52 (op -> op minus term .) + yacc.py:2687: semi reduce using rule 52 (op -> op minus term .) + yacc.py:2687: cpar reduce using rule 52 (op -> op minus term .) + yacc.py:2687: arroba reduce using rule 52 (op -> op minus term .) + yacc.py:2687: dot reduce using rule 52 (op -> op minus term .) + yacc.py:2687: of reduce using rule 52 (op -> op minus term .) + yacc.py:2687: then reduce using rule 52 (op -> op minus term .) + yacc.py:2687: loop reduce using rule 52 (op -> op minus term .) + yacc.py:2687: comma reduce using rule 52 (op -> op minus term .) + yacc.py:2687: in reduce using rule 52 (op -> op minus term .) + yacc.py:2687: else reduce using rule 52 (op -> op minus term .) + yacc.py:2687: pool reduce using rule 52 (op -> op minus term .) + yacc.py:2687: ccur reduce using rule 52 (op -> op minus term .) + yacc.py:2687: fi reduce using rule 52 (op -> op minus term .) + yacc.py:2687: star shift and go to state 119 + yacc.py:2687: div shift and go to state 120 + yacc.py:2689: + yacc.py:2696: ! star [ reduce using rule 52 (op -> op minus term .) ] + yacc.py:2696: ! div [ reduce using rule 52 (op -> op minus term .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 161 + yacc.py:2563: + yacc.py:2565: (54) term -> term star base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: div reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: plus reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: minus reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: less reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: lesseq reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: equal reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: semi reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: cpar reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: arroba reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: dot reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: of reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: then reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: loop reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: comma reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: in reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: else reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: pool reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: ccur reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: fi reduce using rule 54 (term -> term star base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 162 + yacc.py:2563: + yacc.py:2565: (57) term -> term star error . + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2687: star reduce using rule 57 (term -> term star error .) + yacc.py:2687: div reduce using rule 57 (term -> term star error .) + yacc.py:2687: plus reduce using rule 57 (term -> term star error .) + yacc.py:2687: minus reduce using rule 57 (term -> term star error .) + yacc.py:2687: less reduce using rule 57 (term -> term star error .) + yacc.py:2687: lesseq reduce using rule 57 (term -> term star error .) + yacc.py:2687: equal reduce using rule 57 (term -> term star error .) + yacc.py:2687: semi reduce using rule 57 (term -> term star error .) + yacc.py:2687: cpar reduce using rule 57 (term -> term star error .) + yacc.py:2687: dot reduce using rule 57 (term -> term star error .) + yacc.py:2687: of reduce using rule 57 (term -> term star error .) + yacc.py:2687: then reduce using rule 57 (term -> term star error .) + yacc.py:2687: loop reduce using rule 57 (term -> term star error .) + yacc.py:2687: comma reduce using rule 57 (term -> term star error .) + yacc.py:2687: in reduce using rule 57 (term -> term star error .) + yacc.py:2687: else reduce using rule 57 (term -> term star error .) + yacc.py:2687: pool reduce using rule 57 (term -> term star error .) + yacc.py:2687: ccur reduce using rule 57 (term -> term star error .) + yacc.py:2687: fi reduce using rule 57 (term -> term star error .) + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2696: ! arroba [ reduce using rule 57 (term -> term star error .) ] + yacc.py:2700: + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 163 + yacc.py:2563: + yacc.py:2565: (55) term -> term div base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: div reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: plus reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: minus reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: less reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: lesseq reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: equal reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: semi reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: cpar reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: arroba reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: dot reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: of reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: then reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: loop reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: comma reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: in reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: else reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: pool reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: ccur reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: fi reduce using rule 55 (term -> term div base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 164 + yacc.py:2563: + yacc.py:2565: (58) term -> term div error . + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2687: star reduce using rule 58 (term -> term div error .) + yacc.py:2687: div reduce using rule 58 (term -> term div error .) + yacc.py:2687: plus reduce using rule 58 (term -> term div error .) + yacc.py:2687: minus reduce using rule 58 (term -> term div error .) + yacc.py:2687: less reduce using rule 58 (term -> term div error .) + yacc.py:2687: lesseq reduce using rule 58 (term -> term div error .) + yacc.py:2687: equal reduce using rule 58 (term -> term div error .) + yacc.py:2687: semi reduce using rule 58 (term -> term div error .) + yacc.py:2687: cpar reduce using rule 58 (term -> term div error .) + yacc.py:2687: dot reduce using rule 58 (term -> term div error .) + yacc.py:2687: of reduce using rule 58 (term -> term div error .) + yacc.py:2687: then reduce using rule 58 (term -> term div error .) + yacc.py:2687: loop reduce using rule 58 (term -> term div error .) + yacc.py:2687: comma reduce using rule 58 (term -> term div error .) + yacc.py:2687: in reduce using rule 58 (term -> term div error .) + yacc.py:2687: else reduce using rule 58 (term -> term div error .) + yacc.py:2687: pool reduce using rule 58 (term -> term div error .) + yacc.py:2687: ccur reduce using rule 58 (term -> term div error .) + yacc.py:2687: fi reduce using rule 58 (term -> term div error .) + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2696: ! arroba [ reduce using rule 58 (term -> term div error .) ] + yacc.py:2700: + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 165 + yacc.py:2563: + yacc.py:2565: (59) base_call -> factor arroba type . dot func_call + yacc.py:2566: + yacc.py:2687: dot shift and go to state 193 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 166 + yacc.py:2563: + yacc.py:2565: (62) base_call -> factor arroba error . dot func_call + yacc.py:2566: + yacc.py:2687: dot shift and go to state 194 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 167 + yacc.py:2563: + yacc.py:2565: (65) factor -> factor dot func_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: dot reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: star reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: div reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: plus reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: minus reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: less reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: lesseq reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: equal reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: semi reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: cpar reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: of reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: then reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: loop reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: comma reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: in reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: else reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: pool reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: ccur reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: fi reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 168 + yacc.py:2563: + yacc.py:2565: (88) func_call -> id . opar args cpar + yacc.py:2565: (89) func_call -> id . opar error cpar + yacc.py:2566: + yacc.py:2687: opar shift and go to state 113 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 169 + yacc.py:2563: + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2566: + yacc.py:2687: opar shift and go to state 195 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 170 + yacc.py:2563: + yacc.py:2565: (64) factor -> opar expr cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: dot reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: star reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: div reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: plus reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: minus reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: less reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: lesseq reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: equal reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: semi reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: cpar reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: of reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: then reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: loop reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: comma reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: in reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: else reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: pool reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: ccur reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: fi reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 171 + yacc.py:2563: + yacc.py:2565: (70) factor -> let let_list in . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 196 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 172 + yacc.py:2563: + yacc.py:2565: (37) let_list -> let_assign comma . let_list + yacc.py:2565: (36) let_list -> . let_assign + yacc.py:2565: (37) let_list -> . let_assign comma let_list + yacc.py:2565: (38) let_assign -> . param larrow expr + yacc.py:2565: (39) let_assign -> . param + yacc.py:2565: (35) param -> . id colon type + yacc.py:2566: + yacc.py:2687: id shift and go to state 46 + yacc.py:2689: + yacc.py:2714: let_assign shift and go to state 129 + yacc.py:2714: let_list shift and go to state 197 + yacc.py:2714: param shift and go to state 130 + yacc.py:2561: + yacc.py:2562:state 173 + yacc.py:2563: + yacc.py:2565: (38) let_assign -> param larrow . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 198 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 174 + yacc.py:2563: + yacc.py:2565: (71) factor -> case expr of . cases_list esac + yacc.py:2565: (40) cases_list -> . casep semi + yacc.py:2565: (41) cases_list -> . casep semi cases_list + yacc.py:2565: (42) cases_list -> . error cases_list + yacc.py:2565: (43) cases_list -> . error semi + yacc.py:2565: (44) casep -> . id colon type rarrow expr + yacc.py:2566: + yacc.py:2687: error shift and go to state 201 + yacc.py:2687: id shift and go to state 202 + yacc.py:2689: + yacc.py:2714: cases_list shift and go to state 199 + yacc.py:2714: casep shift and go to state 200 + yacc.py:2561: + yacc.py:2562:state 175 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr then . expr else expr fi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 203 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 176 + yacc.py:2563: + yacc.py:2565: (73) factor -> while expr loop . expr pool + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 204 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 177 + yacc.py:2563: + yacc.py:2565: (77) atom -> ocur block ccur . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: dot reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: star reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: div reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: plus reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: minus reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: less reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: lesseq reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: equal reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: semi reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: cpar reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: of reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: then reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: loop reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: comma reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: in reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: else reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: pool reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: ccur reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: fi reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 178 + yacc.py:2563: + yacc.py:2565: (80) atom -> ocur block error . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: dot reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: star reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: div reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: plus reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: minus reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: less reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: lesseq reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: equal reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: semi reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: cpar reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: of reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: then reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: loop reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: comma reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: in reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: else reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: pool reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: ccur reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: fi reduce using rule 80 (atom -> ocur block error .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 179 + yacc.py:2563: + yacc.py:2565: (79) atom -> ocur error ccur . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: dot reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: star reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: div reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: plus reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: minus reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: less reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: lesseq reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: equal reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: semi reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: cpar reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: of reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: then reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: loop reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: comma reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: in reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: else reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: pool reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: ccur reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: fi reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 180 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur . expr ccur + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 205 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 181 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur . expr ccur + yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur . error ccur + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 207 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 206 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 182 + yacc.py:2563: + yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur . expr ccur + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 208 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 183 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur . expr ccur + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 209 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 184 + yacc.py:2563: + yacc.py:2565: (61) base_call -> error arroba type dot . func_call + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 168 + yacc.py:2687: error shift and go to state 169 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 210 + yacc.py:2561: + yacc.py:2562:state 185 + yacc.py:2563: + yacc.py:2565: (95) arg_list -> error . arg_list + yacc.py:2565: (86) block -> error . block + yacc.py:2565: (87) block -> error . semi + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: semi shift and go to state 142 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 185 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: arg_list shift and go to state 186 + yacc.py:2714: block shift and go to state 141 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: expr shift and go to state 187 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 186 + yacc.py:2563: + yacc.py:2565: (95) arg_list -> error arg_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 95 (arg_list -> error arg_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 187 + yacc.py:2563: + yacc.py:2565: (93) arg_list -> expr . + yacc.py:2565: (94) arg_list -> expr . comma arg_list + yacc.py:2565: (84) block -> expr . semi + yacc.py:2565: (85) block -> expr . semi block + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 93 (arg_list -> expr .) + yacc.py:2687: comma shift and go to state 189 + yacc.py:2687: semi shift and go to state 151 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 188 + yacc.py:2563: + yacc.py:2565: (90) func_call -> error opar args cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: dot reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: star reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: div reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: plus reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: minus reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: less reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: lesseq reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: equal reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: semi reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: cpar reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: of reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: then reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: loop reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: comma reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: in reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: else reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: pool reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: ccur reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: fi reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 189 + yacc.py:2563: + yacc.py:2565: (94) arg_list -> expr comma . arg_list + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 145 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 155 + yacc.py:2714: arg_list shift and go to state 211 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 190 + yacc.py:2563: + yacc.py:2565: (85) block -> expr semi block . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 85 (block -> expr semi block .) + yacc.py:2687: error reduce using rule 85 (block -> expr semi block .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 191 + yacc.py:2563: + yacc.py:2565: (88) func_call -> id opar args cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: dot reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: star reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: div reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: plus reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: minus reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: less reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: lesseq reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: equal reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: semi reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: cpar reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: of reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: then reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: loop reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: comma reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: in reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: else reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: pool reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: ccur reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: fi reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 192 + yacc.py:2563: + yacc.py:2565: (89) func_call -> id opar error cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: dot reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: star reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: div reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: plus reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: minus reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: less reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: lesseq reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: equal reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: semi reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: cpar reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: of reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: then reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: loop reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: comma reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: in reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: else reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: pool reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: ccur reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: fi reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 193 + yacc.py:2563: + yacc.py:2565: (59) base_call -> factor arroba type dot . func_call + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 168 + yacc.py:2687: error shift and go to state 169 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 212 + yacc.py:2561: + yacc.py:2562:state 194 + yacc.py:2563: + yacc.py:2565: (62) base_call -> factor arroba error dot . func_call + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 168 + yacc.py:2687: error shift and go to state 169 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 213 + yacc.py:2561: + yacc.py:2562:state 195 + yacc.py:2563: + yacc.py:2565: (90) func_call -> error opar . args cpar + yacc.py:2565: (91) args -> . arg_list + yacc.py:2565: (92) args -> . arg_list_empty + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (96) arg_list_empty -> . epsilon + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 145 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: args shift and go to state 146 + yacc.py:2714: arg_list shift and go to state 148 + yacc.py:2714: arg_list_empty shift and go to state 149 + yacc.py:2714: expr shift and go to state 155 + yacc.py:2714: epsilon shift and go to state 150 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 196 + yacc.py:2563: + yacc.py:2565: (70) factor -> let let_list in expr . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: dot reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: star reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: div reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: plus reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: minus reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: less reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: lesseq reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: equal reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: semi reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: cpar reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: of reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: then reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: loop reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: comma reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: in reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: else reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: pool reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: ccur reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: fi reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 197 + yacc.py:2563: + yacc.py:2565: (37) let_list -> let_assign comma let_list . + yacc.py:2566: + yacc.py:2687: in reduce using rule 37 (let_list -> let_assign comma let_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 198 + yacc.py:2563: + yacc.py:2565: (38) let_assign -> param larrow expr . + yacc.py:2566: + yacc.py:2687: comma reduce using rule 38 (let_assign -> param larrow expr .) + yacc.py:2687: in reduce using rule 38 (let_assign -> param larrow expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 199 + yacc.py:2563: + yacc.py:2565: (71) factor -> case expr of cases_list . esac + yacc.py:2566: + yacc.py:2687: esac shift and go to state 214 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 200 + yacc.py:2563: + yacc.py:2565: (40) cases_list -> casep . semi + yacc.py:2565: (41) cases_list -> casep . semi cases_list + yacc.py:2566: + yacc.py:2687: semi shift and go to state 215 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 201 + yacc.py:2563: + yacc.py:2565: (42) cases_list -> error . cases_list + yacc.py:2565: (43) cases_list -> error . semi + yacc.py:2565: (40) cases_list -> . casep semi + yacc.py:2565: (41) cases_list -> . casep semi cases_list + yacc.py:2565: (42) cases_list -> . error cases_list + yacc.py:2565: (43) cases_list -> . error semi + yacc.py:2565: (44) casep -> . id colon type rarrow expr + yacc.py:2566: + yacc.py:2687: semi shift and go to state 217 + yacc.py:2687: error shift and go to state 201 + yacc.py:2687: id shift and go to state 202 + yacc.py:2689: + yacc.py:2714: cases_list shift and go to state 216 + yacc.py:2714: casep shift and go to state 200 + yacc.py:2561: + yacc.py:2562:state 202 + yacc.py:2563: + yacc.py:2565: (44) casep -> id . colon type rarrow expr + yacc.py:2566: + yacc.py:2687: colon shift and go to state 218 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 203 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr then expr . else expr fi + yacc.py:2566: + yacc.py:2687: else shift and go to state 219 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 204 + yacc.py:2563: + yacc.py:2565: (73) factor -> while expr loop expr . pool + yacc.py:2566: + yacc.py:2687: pool shift and go to state 220 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 205 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 221 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 206 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 222 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 207 + yacc.py:2563: + yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur error . ccur + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 223 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 208 + yacc.py:2563: + yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 224 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 209 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 225 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 210 + yacc.py:2563: + yacc.py:2565: (61) base_call -> error arroba type dot func_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: div reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: plus reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: minus reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: less reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: lesseq reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: equal reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: semi reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: cpar reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: arroba reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: dot reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: of reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: then reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: loop reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: comma reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: in reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: else reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: pool reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: ccur reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: fi reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 211 + yacc.py:2563: + yacc.py:2565: (94) arg_list -> expr comma arg_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 94 (arg_list -> expr comma arg_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 212 + yacc.py:2563: + yacc.py:2565: (59) base_call -> factor arroba type dot func_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: div reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: plus reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: minus reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: less reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: lesseq reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: equal reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: semi reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: cpar reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: arroba reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: dot reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: of reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: then reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: loop reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: comma reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: in reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: else reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: pool reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: ccur reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: fi reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 213 + yacc.py:2563: + yacc.py:2565: (62) base_call -> factor arroba error dot func_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: div reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: plus reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: minus reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: less reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: lesseq reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: equal reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: semi reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: cpar reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: arroba reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: dot reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: of reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: then reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: loop reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: comma reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: in reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: else reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: pool reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: ccur reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: fi reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 214 + yacc.py:2563: + yacc.py:2565: (71) factor -> case expr of cases_list esac . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: dot reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: star reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: div reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: plus reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: minus reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: less reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: lesseq reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: equal reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: semi reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: cpar reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: of reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: then reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: loop reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: comma reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: in reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: else reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: pool reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: ccur reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: fi reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 215 + yacc.py:2563: + yacc.py:2565: (40) cases_list -> casep semi . + yacc.py:2565: (41) cases_list -> casep semi . cases_list + yacc.py:2565: (40) cases_list -> . casep semi + yacc.py:2565: (41) cases_list -> . casep semi cases_list + yacc.py:2565: (42) cases_list -> . error cases_list + yacc.py:2565: (43) cases_list -> . error semi + yacc.py:2565: (44) casep -> . id colon type rarrow expr + yacc.py:2566: + yacc.py:2687: esac reduce using rule 40 (cases_list -> casep semi .) + yacc.py:2687: error shift and go to state 201 + yacc.py:2687: id shift and go to state 202 + yacc.py:2689: + yacc.py:2714: casep shift and go to state 200 + yacc.py:2714: cases_list shift and go to state 226 + yacc.py:2561: + yacc.py:2562:state 216 + yacc.py:2563: + yacc.py:2565: (42) cases_list -> error cases_list . + yacc.py:2566: + yacc.py:2687: esac reduce using rule 42 (cases_list -> error cases_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 217 + yacc.py:2563: + yacc.py:2565: (43) cases_list -> error semi . + yacc.py:2566: + yacc.py:2687: esac reduce using rule 43 (cases_list -> error semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 218 + yacc.py:2563: + yacc.py:2565: (44) casep -> id colon . type rarrow expr + yacc.py:2566: + yacc.py:2687: type shift and go to state 227 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 219 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr then expr else . expr fi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 228 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 220 + yacc.py:2563: + yacc.py:2565: (73) factor -> while expr loop expr pool . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: dot reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: star reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: div reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: plus reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: minus reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: less reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: lesseq reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: equal reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: semi reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: cpar reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: of reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: then reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: loop reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: comma reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: in reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: else reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: pool reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: ccur reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: fi reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 221 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 26 (def_func -> error opar formals cpar colon type ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 222 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 25 (def_func -> id opar formals cpar colon type ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 223 + yacc.py:2563: + yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur error ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 29 (def_func -> id opar formals cpar colon type ocur error ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 224 + yacc.py:2563: + yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 28 (def_func -> id opar formals cpar colon error ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 225 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 27 (def_func -> id opar error cpar colon type ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 226 + yacc.py:2563: + yacc.py:2565: (41) cases_list -> casep semi cases_list . + yacc.py:2566: + yacc.py:2687: esac reduce using rule 41 (cases_list -> casep semi cases_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 227 + yacc.py:2563: + yacc.py:2565: (44) casep -> id colon type . rarrow expr + yacc.py:2566: + yacc.py:2687: rarrow shift and go to state 229 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 228 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr then expr else expr . fi + yacc.py:2566: + yacc.py:2687: fi shift and go to state 230 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 229 + yacc.py:2563: + yacc.py:2565: (44) casep -> id colon type rarrow . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 231 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 230 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr then expr else expr fi . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: dot reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: star reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: div reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: plus reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: minus reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: less reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: lesseq reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: equal reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: semi reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: cpar reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: of reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: then reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: loop reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: comma reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: in reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: else reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: pool reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: ccur reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: fi reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 231 + yacc.py:2563: + yacc.py:2565: (44) casep -> id colon type rarrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 44 (casep -> id colon type rarrow expr .) + yacc.py:2689: + yacc.py:3447:24 shift/reduce conflicts + yacc.py:3457: + yacc.py:3458:Conflicts: + yacc.py:3459: + yacc.py:3462:shift/reduce conflict for less in state 73 resolved as shift + yacc.py:3462:shift/reduce conflict for lesseq in state 73 resolved as shift + yacc.py:3462:shift/reduce conflict for equal in state 73 resolved as shift + yacc.py:3462:shift/reduce conflict for plus in state 74 resolved as shift + yacc.py:3462:shift/reduce conflict for minus in state 74 resolved as shift + yacc.py:3462:shift/reduce conflict for star in state 75 resolved as shift + yacc.py:3462:shift/reduce conflict for div in state 75 resolved as shift + yacc.py:3462:shift/reduce conflict for arroba in state 77 resolved as shift + yacc.py:3462:shift/reduce conflict for dot in state 77 resolved as shift + yacc.py:3462:shift/reduce conflict for ccur in state 141 resolved as shift + yacc.py:3462:shift/reduce conflict for cpar in state 147 resolved as shift + yacc.py:3462:shift/reduce conflict for error in state 151 resolved as shift + yacc.py:3462:shift/reduce conflict for plus in state 156 resolved as shift + yacc.py:3462:shift/reduce conflict for minus in state 156 resolved as shift + yacc.py:3462:shift/reduce conflict for plus in state 157 resolved as shift + yacc.py:3462:shift/reduce conflict for minus in state 157 resolved as shift + yacc.py:3462:shift/reduce conflict for plus in state 158 resolved as shift + yacc.py:3462:shift/reduce conflict for minus in state 158 resolved as shift + yacc.py:3462:shift/reduce conflict for star in state 159 resolved as shift + yacc.py:3462:shift/reduce conflict for div in state 159 resolved as shift + yacc.py:3462:shift/reduce conflict for star in state 160 resolved as shift + yacc.py:3462:shift/reduce conflict for div in state 160 resolved as shift + yacc.py:3462:shift/reduce conflict for arroba in state 162 resolved as shift + yacc.py:3462:shift/reduce conflict for arroba in state 164 resolved as shift + yacc.py: 362:PLY: PARSE DEBUG START + yacc.py: 410: + yacc.py: 411:State : 0 + yacc.py: 435:Stack : . LexToken(class,'class',1,0) + yacc.py: 445:Action : Shift and goto state 5 + yacc.py: 410: + yacc.py: 411:State : 5 + yacc.py: 435:Stack : class . LexToken(type,'Main',1,6) + yacc.py: 445:Action : Shift and goto state 8 + yacc.py: 410: + yacc.py: 411:State : 8 + yacc.py: 435:Stack : class type . LexToken(ocur,'{',1,11) + yacc.py: 445:Action : Shift and goto state 10 + yacc.py: 410: + yacc.py: 411:State : 10 + yacc.py: 435:Stack : class type ocur . LexToken(id,'main',3,18) + yacc.py: 445:Action : Shift and goto state 19 + yacc.py: 410: + yacc.py: 411:State : 19 + yacc.py: 435:Stack : class type ocur id . LexToken(opar,'(',3,22) + yacc.py: 445:Action : Shift and goto state 32 + yacc.py: 410: + yacc.py: 411:State : 32 + yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',3,23) + yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',3,23) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',3,23) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',3,23) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : class type ocur id opar formals cpar . LexToken(colon,':',3,24) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon . LexToken(type,'Object',3,26) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type . LexToken(ocur,'{',3,33) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur . LexToken(opar,'(',4,43) + yacc.py: 445:Action : Shift and goto state 80 + yacc.py: 410: + yacc.py: 411:State : 80 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar . LexToken(new,'new',4,44) + yacc.py: 445:Action : Shift and goto state 89 + yacc.py: 410: + yacc.py: 411:State : 89 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new . LexToken(type,'Alpha',4,48) + yacc.py: 445:Action : Shift and goto state 134 + yacc.py: 410: + yacc.py: 411:State : 134 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',4,53) + yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar epsilon . LexToken(cpar,')',4,61) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar arg_list_empty . LexToken(cpar,')',4,61) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args . LexToken(cpar,')',4,61) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args cpar . LexToken(ccur,'}',5,67) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['print','(',[],')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) + yacc.py: 410: + yacc.py: 411:State : 167 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot func_call . LexToken(ccur,'}',5,67) + yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 16 + yacc.py: 430:Defaulted state 16: Reduce using 14 + yacc.py: 435:Stack : class type ocur def_func semi epsilon . LexToken(ccur,'}',6,70) + yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 48 + yacc.py: 430:Defaulted state 48: Reduce using 16 + yacc.py: 435:Stack : class type ocur def_func semi feature_list . LexToken(ccur,'}',6,70) + yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['test1',':','Int'] and goto state 17 + yacc.py: 506:Result : ( id] with ['test3'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',12,146) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',12,146) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',12,146) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar . LexToken(colon,':',12,147) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon . LexToken(type,'Int',12,149) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',12,153) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur . LexToken(num,2.0,13,163) + yacc.py: 445:Action : Shift and goto state 88 + yacc.py: 410: + yacc.py: 411:State : 88 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur num . LexToken(minus,'-',13,165) + yacc.py: 471:Action : Reduce rule [atom -> num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 160 + yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( string] with ['1'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 + yacc.py: 506:Result : ( id colon type] with ['a',':','Alpha'] and goto state 44 + yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param . LexToken(comma,',',19,226) + yacc.py: 445:Action : Shift and goto state 60 + yacc.py: 410: + yacc.py: 411:State : 60 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma . LexToken(id,'b',19,228) + yacc.py: 445:Action : Shift and goto state 46 + yacc.py: 410: + yacc.py: 411:State : 46 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id . LexToken(colon,':',19,229) + yacc.py: 445:Action : Shift and goto state 61 + yacc.py: 410: + yacc.py: 411:State : 61 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon . LexToken(type,'Int',19,231) + yacc.py: 445:Action : Shift and goto state 96 + yacc.py: 410: + yacc.py: 411:State : 96 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon type . LexToken(cpar,')',19,234) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['b',':','Int'] and goto state 44 + yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param . LexToken(cpar,')',19,234) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 + yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) + yacc.py: 410: + yacc.py: 411:State : 95 + yacc.py: 430:Defaulted state 95: Reduce using 33 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param_list . LexToken(cpar,')',19,234) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 410: + yacc.py: 411:State : 42 + yacc.py: 430:Defaulted state 42: Reduce using 30 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param_list . LexToken(cpar,')',19,234) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals . LexToken(cpar,')',19,234) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar . LexToken(colon,':',19,235) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon . LexToken(type,'Int',19,237) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',19,241) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur . LexToken(let,'let',20,251) + yacc.py: 445:Action : Shift and goto state 84 + yacc.py: 410: + yacc.py: 411:State : 84 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let . LexToken(id,'count',20,255) + yacc.py: 445:Action : Shift and goto state 46 + yacc.py: 410: + yacc.py: 411:State : 46 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id . LexToken(colon,':',20,260) + yacc.py: 445:Action : Shift and goto state 61 + yacc.py: 410: + yacc.py: 411:State : 61 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon . LexToken(type,'Int',20,262) + yacc.py: 445:Action : Shift and goto state 96 + yacc.py: 410: + yacc.py: 411:State : 96 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon type . LexToken(comma,',',20,265) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['count',':','Int'] and goto state 130 + yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) + yacc.py: 410: + yacc.py: 411:State : 130 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let param . LexToken(comma,',',20,265) + yacc.py: 471:Action : Reduce rule [let_assign -> param] with [] and goto state 129 + yacc.py: 506:Result : ( id colon type] with ['pow',':','Int'] and goto state 130 + yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) + yacc.py: 410: + yacc.py: 411:State : 130 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param . LexToken(larrow,'<-',20,276) + yacc.py: 445:Action : Shift and goto state 173 + yacc.py: 410: + yacc.py: 411:State : 173 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow . LexToken(num,1.0,20,279) + yacc.py: 445:Action : Shift and goto state 88 + yacc.py: 410: + yacc.py: 411:State : 88 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow num . LexToken(in,'in',21,329) + yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 + yacc.py: 506:Result : ( let_assign] with [] and goto state 197 + yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 + yacc.py: 506:Result : ([ num] with [0.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 196 + yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',26,389) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',26,389) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',26,389) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar . LexToken(colon,':',26,390) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon . LexToken(type,'Int',26,392) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',26,396) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'testing2',27,406) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id . LexToken(opar,'(',27,414) + yacc.py: 445:Action : Shift and goto state 113 + yacc.py: 410: + yacc.py: 411:State : 113 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar . LexToken(new,'new',27,415) + yacc.py: 445:Action : Shift and goto state 89 + yacc.py: 410: + yacc.py: 411:State : 89 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new . LexToken(type,'Alpha',27,419) + yacc.py: 445:Action : Shift and goto state 134 + yacc.py: 410: + yacc.py: 411:State : 134 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new type . LexToken(comma,',',27,424) + yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',30,450) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',30,450) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',30,450) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',30,451) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'Int',30,453) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',30,457) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'test1',31,467) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(larrow,'<-',31,473) + yacc.py: 445:Action : Shift and goto state 112 + yacc.py: 410: + yacc.py: 411:State : 112 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow . LexToken(opar,'(',31,477) + yacc.py: 445:Action : Shift and goto state 80 + yacc.py: 410: + yacc.py: 411:State : 80 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar . LexToken(num,1.0,31,478) + yacc.py: 445:Action : Shift and goto state 88 + yacc.py: 410: + yacc.py: 411:State : 88 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar num . LexToken(plus,'+',31,480) + yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 16 + yacc.py: 430:Defaulted state 16: Reduce using 14 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',33,543) + yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 48 + yacc.py: 430:Defaulted state 48: Reduce using 16 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',33,543) + yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar epsilon . LexToken(cpar,')',37,601) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list_empty . LexToken(cpar,')',37,601) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',37,601) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar . LexToken(colon,':',37,603) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon . LexToken(type,'Object',37,605) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',37,612) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur . LexToken(id,'out_string',38,622) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id . LexToken(opar,'(',38,632) + yacc.py: 445:Action : Shift and goto state 113 + yacc.py: 410: + yacc.py: 411:State : 113 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id opar . LexToken(string,'reached!!\n',38,645) + yacc.py: 445:Action : Shift and goto state 93 + yacc.py: 410: + yacc.py: 411:State : 93 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id opar string . LexToken(cpar,')',38,646) + yacc.py: 471:Action : Reduce rule [atom -> string] with ['reached!!\n'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 16 + yacc.py: 430:Defaulted state 16: Reduce using 14 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi epsilon . LexToken(ccur,'}',40,655) + yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 48 + yacc.py: 430:Defaulted state 48: Reduce using 16 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi feature_list . LexToken(ccur,'}',40,655) + yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( program","S'",1,None,None,None), - ('program -> class_list','program',1,'p_program','parser.py',8), - ('epsilon -> ','epsilon',0,'p_epsilon','parser.py',12), - ('class_list -> def_class class_list','class_list',2,'p_class_list','parser.py',17), - ('class_list -> def_class','class_list',1,'p_class_list','parser.py',18), - ('class_list -> error class_list','class_list',2,'p_class_list_error','parser.py',23), - ('def_class -> class type ocur feature_list ccur semi','def_class',6,'p_def_class','parser.py',29), - ('def_class -> class type inherits type ocur feature_list ccur semi','def_class',8,'p_def_class','parser.py',30), - ('def_class -> class error ocur feature_list ccur semi','def_class',6,'p_def_class_error','parser.py',38), - ('def_class -> class type ocur feature_list ccur error','def_class',6,'p_def_class_error','parser.py',39), - ('def_class -> class error inherits type ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',40), - ('def_class -> class error inherits error ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',41), - ('def_class -> class type inherits error ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',42), - ('def_class -> class type inherits type ocur feature_list ccur error','def_class',8,'p_def_class_error','parser.py',43), - ('feature_list -> epsilon','feature_list',1,'p_feature_list','parser.py',48), - ('feature_list -> def_attr semi feature_list','feature_list',3,'p_feature_list','parser.py',49), - ('feature_list -> def_func semi feature_list','feature_list',3,'p_feature_list','parser.py',50), - ('feature_list -> error feature_list','feature_list',2,'p_feature_list_error','parser.py',55), - ('def_attr -> id colon type','def_attr',3,'p_def_attr','parser.py',60), - ('def_attr -> id colon type larrow expr','def_attr',5,'p_def_attr','parser.py',61), - ('def_attr -> error colon type','def_attr',3,'p_def_attr_error','parser.py',68), - ('def_attr -> id colon error','def_attr',3,'p_def_attr_error','parser.py',69), - ('def_attr -> error colon type larrow expr','def_attr',5,'p_def_attr_error','parser.py',70), - ('def_attr -> id colon error larrow expr','def_attr',5,'p_def_attr_error','parser.py',71), - ('def_attr -> id colon type larrow error','def_attr',5,'p_def_attr_error','parser.py',72), - ('def_func -> id opar formals cpar colon type ocur expr ccur','def_func',9,'p_def_func','parser.py',77), - ('def_func -> error opar formals cpar colon type ocur expr ccur','def_func',9,'p_def_func_error','parser.py',81), - ('def_func -> id opar error cpar colon type ocur expr ccur','def_func',9,'p_def_func_error','parser.py',82), - ('def_func -> id opar formals cpar colon error ocur expr ccur','def_func',9,'p_def_func_error','parser.py',83), - ('def_func -> id opar formals cpar colon type ocur error ccur','def_func',9,'p_def_func_error','parser.py',84), - ('formals -> param_list','formals',1,'p_formals','parser.py',89), - ('formals -> param_list_empty','formals',1,'p_formals','parser.py',90), - ('param_list -> param','param_list',1,'p_param_list','parser.py',96), - ('param_list -> param comma param_list','param_list',3,'p_param_list','parser.py',97), - ('param_list_empty -> epsilon','param_list_empty',1,'p_param_list_empty','parser.py',106), - ('param -> id colon type','param',3,'p_param','parser.py',110), - ('let_list -> let_assign','let_list',1,'p_let_list','parser.py',115), - ('let_list -> let_assign comma let_list','let_list',3,'p_let_list','parser.py',116), - ('let_assign -> param larrow expr','let_assign',3,'p_let_assign','parser.py',125), - ('let_assign -> param','let_assign',1,'p_let_assign','parser.py',126), - ('cases_list -> casep semi','cases_list',2,'p_cases_list','parser.py',134), - ('cases_list -> casep semi cases_list','cases_list',3,'p_cases_list','parser.py',135), - ('cases_list -> error cases_list','cases_list',2,'p_cases_list_error','parser.py',139), - ('cases_list -> error semi','cases_list',2,'p_cases_list_error','parser.py',140), - ('casep -> id colon type rarrow expr','casep',5,'p_case','parser.py',144), - ('expr -> id larrow expr','expr',3,'p_expr','parser.py',149), - ('expr -> comp','expr',1,'p_expr','parser.py',150), - ('comp -> comp less op','comp',3,'p_comp','parser.py',158), - ('comp -> comp lesseq op','comp',3,'p_comp','parser.py',159), - ('comp -> comp equal op','comp',3,'p_comp','parser.py',160), - ('comp -> op','comp',1,'p_comp','parser.py',161), - ('op -> op plus term','op',3,'p_op','parser.py',180), - ('op -> op minus term','op',3,'p_op','parser.py',181), - ('op -> term','op',1,'p_op','parser.py',182), - ('term -> term star base_call','term',3,'p_term','parser.py',197), - ('term -> term div base_call','term',3,'p_term','parser.py',198), - ('term -> base_call','term',1,'p_term','parser.py',199), - ('term -> term star error','term',3,'p_term_error','parser.py',209), - ('term -> term div error','term',3,'p_term_error','parser.py',210), - ('base_call -> factor arroba type dot func_call','base_call',5,'p_base_call','parser.py',215), - ('base_call -> factor','base_call',1,'p_base_call','parser.py',216), - ('base_call -> error arroba type dot func_call','base_call',5,'p_base_call_error','parser.py',223), - ('base_call -> factor arroba error dot func_call','base_call',5,'p_base_call_error','parser.py',224), - ('factor -> atom','factor',1,'p_factor1','parser.py',229), - ('factor -> opar expr cpar','factor',3,'p_factor1','parser.py',230), - ('factor -> factor dot func_call','factor',3,'p_factor2','parser.py',234), - ('factor -> not expr','factor',2,'p_factor2','parser.py',235), - ('factor -> func_call','factor',1,'p_factor2','parser.py',236), - ('factor -> isvoid base_call','factor',2,'p_factor3','parser.py',245), - ('factor -> nox base_call','factor',2,'p_factor3','parser.py',246), - ('factor -> let let_list in expr','factor',4,'p_expr_let','parser.py',255), - ('factor -> case expr of cases_list esac','factor',5,'p_expr_case','parser.py',267), - ('factor -> if expr then expr else expr fi','factor',7,'p_expr_if','parser.py',279), - ('factor -> while expr loop expr pool','factor',5,'p_expr_while','parser.py',293), - ('atom -> num','atom',1,'p_atom_num','parser.py',306), - ('atom -> id','atom',1,'p_atom_id','parser.py',310), - ('atom -> new type','atom',2,'p_atom_new','parser.py',314), - ('atom -> ocur block ccur','atom',3,'p_atom_block','parser.py',318), - ('atom -> error block ccur','atom',3,'p_atom_block_error','parser.py',322), - ('atom -> ocur error ccur','atom',3,'p_atom_block_error','parser.py',323), - ('atom -> ocur block error','atom',3,'p_atom_block_error','parser.py',324), - ('atom -> true','atom',1,'p_atom_boolean','parser.py',328), - ('atom -> false','atom',1,'p_atom_boolean','parser.py',329), - ('atom -> string','atom',1,'p_atom_string','parser.py',333), - ('block -> expr semi','block',2,'p_block','parser.py',338), - ('block -> expr semi block','block',3,'p_block','parser.py',339), - ('block -> error block','block',2,'p_block_error','parser.py',343), - ('block -> error semi','block',2,'p_block_error','parser.py',344), - ('func_call -> id opar args cpar','func_call',4,'p_func_call','parser.py',349), - ('func_call -> id opar error cpar','func_call',4,'p_func_call_error','parser.py',353), - ('func_call -> error opar args cpar','func_call',4,'p_func_call_error','parser.py',354), - ('args -> arg_list','args',1,'p_args','parser.py',359), - ('args -> arg_list_empty','args',1,'p_args','parser.py',360), - ('arg_list -> expr','arg_list',1,'p_arg_list','parser.py',366), - ('arg_list -> expr comma arg_list','arg_list',3,'p_arg_list','parser.py',367), - ('arg_list -> error arg_list','arg_list',2,'p_arg_list_error','parser.py',374), - ('arg_list_empty -> epsilon','arg_list_empty',1,'p_arg_list_empty','parser.py',378), -] + +# parsetab.py +# This file is automatically generated. Do not edit. +# pylint: disable=W,C,R +_tabversion = '3.10' + +_lr_method = 'LALR' + +_lr_signature = 'programarroba case ccur class colon comma cpar div dot else equal esac false fi id if in inherits isvoid larrow less lesseq let loop minus new not nox num ocur of opar plus pool rarrow semi star string then true type whileprogram : class_listepsilon :class_list : def_class class_list \n | def_classclass_list : error class_listdef_class : class type ocur feature_list ccur semi \n | class type inherits type ocur feature_list ccur semidef_class : class error ocur feature_list ccur semi \n | class type ocur feature_list ccur error \n | class error inherits type ocur feature_list ccur semi\n | class error inherits error ocur feature_list ccur semi\n | class type inherits error ocur feature_list ccur semi\n | class type inherits type ocur feature_list ccur errorfeature_list : epsilon\n | def_attr semi feature_list\n | def_func semi feature_listfeature_list : error feature_listdef_attr : id colon type\n | id colon type larrow exprdef_attr : error colon type\n | id colon error\n | error colon type larrow expr\n | id colon error larrow expr\n | id colon type larrow errordef_func : id opar formals cpar colon type ocur expr ccurdef_func : error opar formals cpar colon type ocur expr ccur\n | id opar error cpar colon type ocur expr ccur\n | id opar formals cpar colon error ocur expr ccur\n | id opar formals cpar colon type ocur error ccurformals : param_list\n | param_list_empty\n param_list : param\n | param comma param_listparam_list_empty : epsilonparam : id colon typelet_list : let_assign\n | let_assign comma let_listlet_assign : param larrow expr\n | paramcases_list : casep semi\n | casep semi cases_listcases_list : error cases_list\n | error semicasep : id colon type rarrow exprexpr : id larrow expr\n | comp\n comp : comp less op\n | comp lesseq op\n | comp equal op\n | opop : op plus term\n | op minus term\n | termterm : term star base_call\n | term div base_call\n | base_callterm : term star error\n | term div errorbase_call : factor arroba type dot func_call\n | factorbase_call : error arroba type dot func_call\n | factor arroba error dot func_call\n factor : atom\n | opar expr cparfactor : factor dot func_call\n | not expr\n | func_callfactor : isvoid base_call\n | nox base_call\n factor : let let_list in exprfactor : case expr of cases_list esacfactor : if expr then expr else expr fifactor : while expr loop expr poolatom : numatom : idatom : new typeatom : ocur block ccuratom : error block ccur\n | ocur error ccur\n | ocur block erroratom : true\n | falseatom : stringblock : expr semi\n | expr semi blockblock : error block\n | error semifunc_call : id opar args cparfunc_call : id opar error cpar\n | error opar args cparargs : arg_list\n | arg_list_empty\n arg_list : expr \n | expr comma arg_listarg_list : error arg_listarg_list_empty : epsilon' + +_lr_action_items = {'error':([0,3,4,5,10,11,12,13,15,25,29,30,31,32,33,34,36,37,38,39,55,58,62,63,66,70,80,81,82,83,85,86,87,90,98,100,102,103,104,105,106,107,110,112,113,114,115,116,117,118,119,120,121,122,135,136,141,142,145,151,154,162,164,171,173,174,175,176,180,181,182,183,184,185,189,190,193,194,195,201,207,215,219,229,],[4,4,4,9,15,21,15,23,15,39,15,15,50,52,15,15,15,15,-6,-9,-8,70,98,70,103,107,70,70,70,70,70,70,70,136,107,139,-7,-13,-12,-11,-10,107,145,70,154,70,70,70,70,70,162,164,166,169,178,107,-86,-87,185,107,185,107,107,70,70,201,70,70,70,207,70,70,169,185,145,-85,169,169,145,201,107,201,70,70,]),'class':([0,3,4,38,39,55,102,103,104,105,106,],[5,5,5,-6,-9,-8,-7,-13,-12,-11,-10,]),'$end':([1,2,3,6,7,38,39,55,102,103,104,105,106,],[0,-1,-4,-3,-5,-6,-9,-8,-7,-13,-12,-11,-10,]),'type':([5,11,13,27,31,61,89,94,100,101,108,121,218,],[8,20,24,40,49,96,134,137,138,140,143,165,227,]),'ocur':([8,9,20,21,23,24,58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,137,138,139,140,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[10,12,33,34,36,37,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,180,181,182,183,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,]),'inherits':([8,9,],[11,13,]),'ccur':([10,12,14,15,16,22,26,29,30,33,34,36,37,47,48,53,54,56,57,72,73,74,75,76,77,78,79,88,91,92,93,109,124,125,126,127,134,135,136,141,142,144,151,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,190,191,192,196,205,206,207,208,209,210,212,213,214,220,230,],[-2,-2,25,-2,-14,35,-17,-2,-2,-2,-2,-2,-2,-15,-16,66,67,68,69,-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,144,-66,-68,-75,-69,-76,177,179,144,-87,-78,-84,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-85,-88,-89,-70,221,222,223,224,225,-61,-59,-62,-71,-73,-72,]),'id':([10,12,15,28,29,30,32,33,34,36,37,58,60,62,63,70,80,81,82,83,84,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,122,136,145,151,154,162,164,171,172,173,174,175,176,180,181,182,183,184,185,189,193,194,195,201,207,215,219,229,],[19,19,19,46,19,19,46,19,19,19,19,72,46,72,72,72,72,72,126,126,46,72,72,72,72,72,72,72,72,72,126,126,126,126,126,126,126,168,72,72,72,72,72,72,72,46,72,202,72,72,72,72,72,72,168,72,72,168,168,72,202,72,202,72,72,]),'colon':([15,19,46,59,64,65,202,],[27,31,61,94,100,101,218,]),'opar':([15,19,58,62,63,70,72,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,126,136,145,151,154,162,164,168,169,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[28,32,80,80,80,110,113,80,80,80,80,80,80,80,80,110,110,80,80,80,80,80,80,80,80,80,80,113,110,110,80,110,110,110,113,195,80,80,80,80,80,80,80,80,110,80,80,110,80,80,]),'semi':([17,18,25,35,40,49,50,66,67,68,69,71,72,73,74,75,76,77,78,79,88,91,92,93,97,98,99,107,111,124,125,126,127,134,136,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,185,187,188,191,192,196,200,201,210,212,213,214,220,221,222,223,224,225,230,231,],[29,30,38,55,-20,-18,-21,102,104,105,106,-22,-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-19,-24,-23,142,151,-66,-68,-75,-69,-76,142,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,142,151,-90,-88,-89,-70,215,217,-61,-59,-62,-71,-73,-26,-25,-29,-28,-27,-72,-44,]),'cpar':([28,32,41,42,43,44,45,51,52,72,73,74,75,76,77,78,79,88,91,92,93,95,96,110,113,123,124,125,126,127,134,144,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,167,170,177,178,179,186,187,188,191,192,195,196,210,211,212,213,214,220,230,],[-2,-2,59,-30,-31,-32,-34,64,65,-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-33,-35,-2,-2,170,-66,-68,-75,-69,-76,-78,188,170,-91,-92,-96,-45,191,192,-93,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-95,-93,-90,-88,-89,-2,-70,-61,-94,-59,-62,-71,-73,-72,]),'larrow':([40,49,50,72,96,130,],[58,62,63,112,-35,173,]),'comma':([44,72,73,74,75,76,77,78,79,88,91,92,93,96,124,125,126,127,129,130,134,144,147,152,155,156,157,158,159,160,161,162,163,164,167,170,177,178,179,187,188,191,192,196,198,210,212,213,214,220,230,],[60,-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-35,-66,-68,-75,-69,172,-39,-76,-78,189,-45,189,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,189,-90,-88,-89,-70,-38,-61,-59,-62,-71,-73,-72,]),'not':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,]),'isvoid':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,]),'nox':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,]),'let':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,]),'case':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,]),'if':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,]),'while':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,]),'num':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,]),'new':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,]),'true':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,]),'false':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,]),'string':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,]),'arroba':([70,72,73,74,75,76,77,78,79,88,91,92,93,98,107,124,125,126,127,134,136,144,145,152,154,156,157,158,159,160,161,162,163,164,167,170,177,178,179,185,188,191,192,196,207,210,212,213,214,220,230,],[108,-75,-46,-50,-53,-56,121,-67,-63,-74,-81,-82,-83,108,108,-66,-68,-75,-69,-76,108,-78,108,-45,108,-47,-48,-49,-51,-52,-54,108,-55,108,-65,-64,-77,-80,-79,108,-90,-88,-89,-70,108,-61,-59,-62,-71,-73,-72,]),'dot':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,143,144,152,156,157,158,159,160,161,162,163,164,165,166,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,122,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,184,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,193,194,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'star':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,119,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,119,119,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'div':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,120,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,120,120,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'plus':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,117,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,117,117,117,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'minus':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,118,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,118,118,118,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'less':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,114,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'lesseq':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,115,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'equal':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,116,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'of':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,131,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,174,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'then':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,132,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,175,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'loop':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,133,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,176,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'in':([72,73,74,75,76,77,78,79,88,91,92,93,96,124,125,126,127,128,129,130,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,197,198,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-35,-66,-68,-75,-69,171,-36,-39,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-37,-38,-61,-59,-62,-71,-73,-72,]),'else':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,203,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,219,-61,-59,-62,-71,-73,-72,]),'pool':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,204,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,220,-61,-59,-62,-71,-73,-72,]),'fi':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,228,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,230,-72,]),'esac':([199,215,216,217,226,],[214,-40,-42,-43,-41,]),'rarrow':([227,],[229,]),} + +_lr_action = {} +for _k, _v in _lr_action_items.items(): + for _x,_y in zip(_v[0],_v[1]): + if not _x in _lr_action: _lr_action[_x] = {} + _lr_action[_x][_k] = _y +del _lr_action_items + +_lr_goto_items = {'program':([0,],[1,]),'class_list':([0,3,4,],[2,6,7,]),'def_class':([0,3,4,],[3,3,3,]),'feature_list':([10,12,15,29,30,33,34,36,37,],[14,22,26,47,48,53,54,56,57,]),'epsilon':([10,12,15,28,29,30,32,33,34,36,37,110,113,195,],[16,16,16,45,16,16,45,16,16,16,16,150,150,150,]),'def_attr':([10,12,15,29,30,33,34,36,37,],[17,17,17,17,17,17,17,17,17,]),'def_func':([10,12,15,29,30,33,34,36,37,],[18,18,18,18,18,18,18,18,18,]),'formals':([28,32,],[41,51,]),'param_list':([28,32,60,],[42,42,95,]),'param_list_empty':([28,32,],[43,43,]),'param':([28,32,60,84,172,],[44,44,44,130,130,]),'expr':([58,62,63,70,80,81,85,86,87,90,98,107,110,112,113,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[71,97,99,111,123,124,131,132,133,111,111,111,147,152,155,111,187,111,187,111,111,196,198,203,204,205,206,208,209,187,155,155,111,228,231,]),'comp':([58,62,63,70,80,81,85,86,87,90,98,107,110,112,113,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,]),'op':([58,62,63,70,80,81,85,86,87,90,98,107,110,112,113,114,115,116,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,156,157,158,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,]),'term':([58,62,63,70,80,81,85,86,87,90,98,107,110,112,113,114,115,116,117,118,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,159,160,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,]),'base_call':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[76,76,76,76,76,76,125,127,76,76,76,76,76,76,76,76,76,76,76,76,76,76,161,163,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,]),'factor':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,]),'func_call':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,122,136,145,151,154,162,164,171,173,175,176,180,181,182,183,184,185,189,193,194,195,207,219,229,],[78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,167,78,78,78,78,78,78,78,78,78,78,78,78,78,78,210,78,78,212,213,78,78,78,78,]),'atom':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,]),'block':([70,90,98,107,136,145,151,154,162,164,185,207,],[109,135,109,141,141,109,190,109,109,109,141,109,]),'let_list':([84,172,],[128,197,]),'let_assign':([84,172,],[129,129,]),'args':([110,113,195,],[146,153,146,]),'arg_list':([110,113,145,154,185,189,195,],[148,148,186,186,186,211,148,]),'arg_list_empty':([110,113,195,],[149,149,149,]),'cases_list':([174,201,215,],[199,216,226,]),'casep':([174,201,215,],[200,200,200,]),} + +_lr_goto = {} +for _k, _v in _lr_goto_items.items(): + for _x, _y in zip(_v[0], _v[1]): + if not _x in _lr_goto: _lr_goto[_x] = {} + _lr_goto[_x][_k] = _y +del _lr_goto_items +_lr_productions = [ + ("S' -> program","S'",1,None,None,None), + ('program -> class_list','program',1,'p_program','parser.py',8), + ('epsilon -> ','epsilon',0,'p_epsilon','parser.py',12), + ('class_list -> def_class class_list','class_list',2,'p_class_list','parser.py',17), + ('class_list -> def_class','class_list',1,'p_class_list','parser.py',18), + ('class_list -> error class_list','class_list',2,'p_class_list_error','parser.py',23), + ('def_class -> class type ocur feature_list ccur semi','def_class',6,'p_def_class','parser.py',29), + ('def_class -> class type inherits type ocur feature_list ccur semi','def_class',8,'p_def_class','parser.py',30), + ('def_class -> class error ocur feature_list ccur semi','def_class',6,'p_def_class_error','parser.py',38), + ('def_class -> class type ocur feature_list ccur error','def_class',6,'p_def_class_error','parser.py',39), + ('def_class -> class error inherits type ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',40), + ('def_class -> class error inherits error ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',41), + ('def_class -> class type inherits error ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',42), + ('def_class -> class type inherits type ocur feature_list ccur error','def_class',8,'p_def_class_error','parser.py',43), + ('feature_list -> epsilon','feature_list',1,'p_feature_list','parser.py',48), + ('feature_list -> def_attr semi feature_list','feature_list',3,'p_feature_list','parser.py',49), + ('feature_list -> def_func semi feature_list','feature_list',3,'p_feature_list','parser.py',50), + ('feature_list -> error feature_list','feature_list',2,'p_feature_list_error','parser.py',55), + ('def_attr -> id colon type','def_attr',3,'p_def_attr','parser.py',60), + ('def_attr -> id colon type larrow expr','def_attr',5,'p_def_attr','parser.py',61), + ('def_attr -> error colon type','def_attr',3,'p_def_attr_error','parser.py',68), + ('def_attr -> id colon error','def_attr',3,'p_def_attr_error','parser.py',69), + ('def_attr -> error colon type larrow expr','def_attr',5,'p_def_attr_error','parser.py',70), + ('def_attr -> id colon error larrow expr','def_attr',5,'p_def_attr_error','parser.py',71), + ('def_attr -> id colon type larrow error','def_attr',5,'p_def_attr_error','parser.py',72), + ('def_func -> id opar formals cpar colon type ocur expr ccur','def_func',9,'p_def_func','parser.py',77), + ('def_func -> error opar formals cpar colon type ocur expr ccur','def_func',9,'p_def_func_error','parser.py',81), + ('def_func -> id opar error cpar colon type ocur expr ccur','def_func',9,'p_def_func_error','parser.py',82), + ('def_func -> id opar formals cpar colon error ocur expr ccur','def_func',9,'p_def_func_error','parser.py',83), + ('def_func -> id opar formals cpar colon type ocur error ccur','def_func',9,'p_def_func_error','parser.py',84), + ('formals -> param_list','formals',1,'p_formals','parser.py',89), + ('formals -> param_list_empty','formals',1,'p_formals','parser.py',90), + ('param_list -> param','param_list',1,'p_param_list','parser.py',96), + ('param_list -> param comma param_list','param_list',3,'p_param_list','parser.py',97), + ('param_list_empty -> epsilon','param_list_empty',1,'p_param_list_empty','parser.py',106), + ('param -> id colon type','param',3,'p_param','parser.py',110), + ('let_list -> let_assign','let_list',1,'p_let_list','parser.py',115), + ('let_list -> let_assign comma let_list','let_list',3,'p_let_list','parser.py',116), + ('let_assign -> param larrow expr','let_assign',3,'p_let_assign','parser.py',125), + ('let_assign -> param','let_assign',1,'p_let_assign','parser.py',126), + ('cases_list -> casep semi','cases_list',2,'p_cases_list','parser.py',134), + ('cases_list -> casep semi cases_list','cases_list',3,'p_cases_list','parser.py',135), + ('cases_list -> error cases_list','cases_list',2,'p_cases_list_error','parser.py',139), + ('cases_list -> error semi','cases_list',2,'p_cases_list_error','parser.py',140), + ('casep -> id colon type rarrow expr','casep',5,'p_case','parser.py',144), + ('expr -> id larrow expr','expr',3,'p_expr','parser.py',149), + ('expr -> comp','expr',1,'p_expr','parser.py',150), + ('comp -> comp less op','comp',3,'p_comp','parser.py',158), + ('comp -> comp lesseq op','comp',3,'p_comp','parser.py',159), + ('comp -> comp equal op','comp',3,'p_comp','parser.py',160), + ('comp -> op','comp',1,'p_comp','parser.py',161), + ('op -> op plus term','op',3,'p_op','parser.py',180), + ('op -> op minus term','op',3,'p_op','parser.py',181), + ('op -> term','op',1,'p_op','parser.py',182), + ('term -> term star base_call','term',3,'p_term','parser.py',197), + ('term -> term div base_call','term',3,'p_term','parser.py',198), + ('term -> base_call','term',1,'p_term','parser.py',199), + ('term -> term star error','term',3,'p_term_error','parser.py',209), + ('term -> term div error','term',3,'p_term_error','parser.py',210), + ('base_call -> factor arroba type dot func_call','base_call',5,'p_base_call','parser.py',215), + ('base_call -> factor','base_call',1,'p_base_call','parser.py',216), + ('base_call -> error arroba type dot func_call','base_call',5,'p_base_call_error','parser.py',223), + ('base_call -> factor arroba error dot func_call','base_call',5,'p_base_call_error','parser.py',224), + ('factor -> atom','factor',1,'p_factor1','parser.py',229), + ('factor -> opar expr cpar','factor',3,'p_factor1','parser.py',230), + ('factor -> factor dot func_call','factor',3,'p_factor2','parser.py',234), + ('factor -> not expr','factor',2,'p_factor2','parser.py',235), + ('factor -> func_call','factor',1,'p_factor2','parser.py',236), + ('factor -> isvoid base_call','factor',2,'p_factor3','parser.py',245), + ('factor -> nox base_call','factor',2,'p_factor3','parser.py',246), + ('factor -> let let_list in expr','factor',4,'p_expr_let','parser.py',255), + ('factor -> case expr of cases_list esac','factor',5,'p_expr_case','parser.py',267), + ('factor -> if expr then expr else expr fi','factor',7,'p_expr_if','parser.py',279), + ('factor -> while expr loop expr pool','factor',5,'p_expr_while','parser.py',293), + ('atom -> num','atom',1,'p_atom_num','parser.py',306), + ('atom -> id','atom',1,'p_atom_id','parser.py',310), + ('atom -> new type','atom',2,'p_atom_new','parser.py',314), + ('atom -> ocur block ccur','atom',3,'p_atom_block','parser.py',318), + ('atom -> error block ccur','atom',3,'p_atom_block_error','parser.py',322), + ('atom -> ocur error ccur','atom',3,'p_atom_block_error','parser.py',323), + ('atom -> ocur block error','atom',3,'p_atom_block_error','parser.py',324), + ('atom -> true','atom',1,'p_atom_boolean','parser.py',328), + ('atom -> false','atom',1,'p_atom_boolean','parser.py',329), + ('atom -> string','atom',1,'p_atom_string','parser.py',333), + ('block -> expr semi','block',2,'p_block','parser.py',338), + ('block -> expr semi block','block',3,'p_block','parser.py',339), + ('block -> error block','block',2,'p_block_error','parser.py',343), + ('block -> error semi','block',2,'p_block_error','parser.py',344), + ('func_call -> id opar args cpar','func_call',4,'p_func_call','parser.py',349), + ('func_call -> id opar error cpar','func_call',4,'p_func_call_error','parser.py',353), + ('func_call -> error opar args cpar','func_call',4,'p_func_call_error','parser.py',354), + ('args -> arg_list','args',1,'p_args','parser.py',359), + ('args -> arg_list_empty','args',1,'p_args','parser.py',360), + ('arg_list -> expr','arg_list',1,'p_arg_list','parser.py',366), + ('arg_list -> expr comma arg_list','arg_list',3,'p_arg_list','parser.py',367), + ('arg_list -> error arg_list','arg_list',2,'p_arg_list_error','parser.py',374), + ('arg_list_empty -> epsilon','arg_list_empty',1,'p_arg_list_empty','parser.py',378), +] diff --git a/src/main.py b/src/main.py index e6a5648f..58f8dac2 100644 --- a/src/main.py +++ b/src/main.py @@ -3,6 +3,7 @@ from semantic.semantic import semantic_analysis from codegen import codegen_pipeline from cool_parser import CoolParser +from ply.lex import LexToken def run_pipeline(input): try: diff --git a/src/semantic/tools.py b/src/semantic/tools.py index e2fef5b1..b9acd4ce 100644 --- a/src/semantic/tools.py +++ b/src/semantic/tools.py @@ -6,14 +6,14 @@ class Context: def __init__(self): self.types = {} - def create_type(self, name:str, pos): + def create_type(self, name:str, pos) -> Type: if name in self.types: error_text = TypesError.TYPE_ALREADY_DEFINED % name raise TypesError(error_text, *pos) typex = self.types[name] = Type(name, pos) return typex - def get_type(self, name:str, pos): + def get_type(self, name:str, pos) -> Type: try: return self.types[name] except KeyError: @@ -62,7 +62,7 @@ def __str__(self): res += name + scope.tab_level(1, '', 1) #'\n\t' + ('\n' + '\t').join(str(local) for local in scope.locals) + '\n' return res - def tab_level(self, tabs, name, num): + def tab_level(self, tabs, name, num) -> str: res = ('\t' * tabs) + ('\n' + ('\t' * tabs)).join(str(local) for local in self.locals) if self.functions: children = '\n'.join(v.tab_level(tabs + 1, '[method] ' + k, num) for k, v in self.functions.items()) @@ -78,12 +78,12 @@ def create_child(self): self.children.append(child) return child - def define_variable(self, vname, vtype): + def define_variable(self, vname, vtype) -> VariableInfo: info = VariableInfo(vname, vtype) self.locals.append(info) return info - def find_variable(self, vname, index=None): + def find_variable(self, vname, index=None) -> VariableInfo: locals = self.attributes + self.locals locals = locals if index is None else itt.islice(locals, index) try: @@ -91,14 +91,14 @@ def find_variable(self, vname, index=None): except StopIteration: return self.parent.find_variable(vname, self.index) if self.parent else None - def find_local(self, vname, index=None): + def find_local(self, vname, index=None) -> VariableInfo: locals = self.locals if index is None else itt.islice(self.locals, index) try: return next(x for x in locals if x.name == vname) except StopIteration: return self.parent.find_local(vname, self.index) if self.parent else None - def find_attribute(self, vname, index=None): + def find_attribute(self, vname, index=None) : locals = self.attributes if index is None else itt.islice(self.attributes, index) try: return next(x for x in locals if x.name == vname) @@ -111,7 +111,7 @@ def get_class_scope(self): return self return self.parent.get_class_scope() - def is_defined(self, vname): + def is_defined(self, vname) -> VariableInfo: return self.find_variable(vname) is not None def is_local(self, vname): diff --git a/src/semantic/types.py b/src/semantic/types.py index c100318b..61ec35ed 100644 --- a/src/semantic/types.py +++ b/src/semantic/types.py @@ -2,7 +2,7 @@ from collections import OrderedDict class Attribute: - def __init__(self, name, typex, index): + def __init__(self, name, typex, index, tok=None): self.name = name self.type = typex self.index = index # lugar que ocupa en el scope diff --git a/src/semantic/visitors/type_builder.py b/src/semantic/visitors/type_builder.py index cec32e06..81c2eaa2 100644 --- a/src/semantic/visitors/type_builder.py +++ b/src/semantic/visitors/type_builder.py @@ -40,7 +40,6 @@ def visit(self, node:ClassDeclarationNode): parent = ErrorType() self.errors.append(e) self.current_type.set_parent(parent) - for feature in node.features: self.visit(feature) diff --git a/src/semantic/visitors/type_checker.py b/src/semantic/visitors/type_checker.py index 7d09ac99..fb249ef0 100644 --- a/src/semantic/visitors/type_checker.py +++ b/src/semantic/visitors/type_checker.py @@ -87,7 +87,7 @@ def visit(self, node:FuncDeclarationNode, scope:Scope): self.errors.append(AttributesError(error_text, *node.pos)) except SemanticError: pass - + result = self.visit(node.body, scope) return_type = get_type(method.return_type, self.current_type) diff --git a/src/semantic/visitors/type_collector.py b/src/semantic/visitors/type_collector.py index 4fe33e0e..efafe995 100644 --- a/src/semantic/visitors/type_collector.py +++ b/src/semantic/visitors/type_collector.py @@ -31,4 +31,7 @@ def visit(self, node:ClassDeclarationNode): try: self.context.create_type(node.id, node.pos) except SemanticError as e: - self.errors.append(e) \ No newline at end of file + self.errors.append(e) + # añade un como padre Object si este no tiene + if not node.parent: + node.parent = 'Object' \ No newline at end of file diff --git a/src/utils/__pycache__/visitor.cpython-37.pyc b/src/utils/__pycache__/visitor.cpython-37.pyc index 0cfb64ef8520aabf7abf72cca1c83d62a93d1f53..6a7c3d0f4c72238f18d5827506df0fefd064ab19 100644 GIT binary patch delta 41 wcmdlkv|WhTiI$a|QLF>3QgHg`rwgUON{wTya`r*kX-0MYUa-v9sr delta 41 wcmdlkv|WhTiIPv=+w0Pd^|3jhEB diff --git a/src/utils/ast.py b/src/utils/ast.py index a1fa03ae..93c3c7b9 100644 --- a/src/utils/ast.py +++ b/src/utils/ast.py @@ -27,6 +27,7 @@ def __init__(self, idx:LexToken, features, parent=None): self.parent = None self.parent_pos = (0, 0) self.features = features + self.token = idx class _Param: def __init__(self, tok): @@ -34,7 +35,7 @@ def __init__(self, tok): self.pos = (tok.lineno, tok.column) class FuncDeclarationNode(DeclarationNode): - def __init__(self, idx:LexToken, params, return_type, body): + def __init__(self, idx:LexToken, params, return_type:LexToken, body): self.id = idx.value self.pos = (idx.lineno, idx.column) self.params = [(pname.value, _Param(ptype)) for pname, ptype in params] @@ -50,6 +51,7 @@ def __init__(self, idx:LexToken, typex, expr=None): self.type = typex.value self.type_pos = (typex.lineno, typex.column) self.expr = expr + self.token = idx class VarDeclarationNode(ExpressionNode): def __init__(self, idx:LexToken, typex, expr=None): @@ -61,8 +63,12 @@ def __init__(self, idx:LexToken, typex, expr=None): class AssignNode(ExpressionNode): def __init__(self, idx:LexToken, expr): - self.id = idx.value - self.pos = (idx.lineno, idx.column) + if isinstance(idx, LexToken): + self.id = idx.value + self.pos = (idx.lineno, idx.column) + else: + self.id = idx + self.pos = None self.expr = expr class CallNode(ExpressionNode): @@ -76,6 +82,7 @@ class BlockNode(ExpressionNode): def __init__(self, expr_list, tok): self.expr_list = expr_list self.pos = (tok.lineno, tok.column) + self.token = tok class BaseCallNode(ExpressionNode): def __init__(self, obj, typex:LexToken, idx:LexToken, args): @@ -181,6 +188,9 @@ class ConstantVoidNode(AtomicNode): def __init__(self): super().__init__('void') +class SelfNode(Node): + pass + class VariableNode(AtomicNode): pass From 36700725a88e8e24f8e7b05efded62383583f571 Mon Sep 17 00:00:00 2001 From: Noly Fernandez Date: Fri, 30 Oct 2020 15:09:21 -0600 Subject: [PATCH 28/60] Only missing a way to represent conforms notation in cil --- .../__pycache__/cil_ast.cpython-37.pyc | Bin 9887 -> 9889 bytes src/codegen/cil_ast.py | 4 +- src/codegen/utils.py | 15 + .../base_cil_visitor.cpython-37.pyc | Bin 5869 -> 6110 bytes .../cil_format_visitor.cpython-37.pyc | Bin 5546 -> 5539 bytes .../__pycache__/cil_visitor.cpython-37.pyc | Bin 11539 -> 11820 bytes src/codegen/visitors/base_cil_visitor.py | 9 +- src/codegen/visitors/cil_format_visitor.py | 2 +- src/codegen/visitors/cil_visitor.py | 45 +- src/cool_parser/output_parser/parselog.txt | 762 +++++++++--------- 10 files changed, 435 insertions(+), 402 deletions(-) create mode 100644 src/codegen/utils.py diff --git a/src/codegen/__pycache__/cil_ast.cpython-37.pyc b/src/codegen/__pycache__/cil_ast.cpython-37.pyc index 6d20455ab45e265d18095ebd6c567e06b4056a62..b6cbd93d6c209f168cca1903de8c4027d10badc4 100644 GIT binary patch delta 51 zcmbR5yU>@{iIpiZ81mh&MS=$#S!cYBVDN DZfOqZ delta 49 ycmZ4JJKvYriIvsqAe0wVxGQw^U0 diff --git a/src/codegen/cil_ast.py b/src/codegen/cil_ast.py index 9551015c..7c0bd998 100644 --- a/src/codegen/cil_ast.py +++ b/src/codegen/cil_ast.py @@ -217,6 +217,6 @@ def __init__(self, str_addr): self.str_addr = str_addr -class CILSelf(InstructionNode): +class SelfNode(InstructionNode): def __init__(self): - pass + pass diff --git a/src/codegen/utils.py b/src/codegen/utils.py new file mode 100644 index 00000000..7664d351 --- /dev/null +++ b/src/codegen/utils.py @@ -0,0 +1,15 @@ +class CILScope: + def __init__(self, parent=None): + self.parent = parent + self.vars = [] + + def add_var(self, var): + self.vars.append(var) + + def get_full_name(self, var_name: str): + for name in self.vars: + if var_name == name.split('_')[2]: + return name + if self.parent: + return self.parent.get_full_name(var_name) + return '' \ No newline at end of file diff --git a/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc index f1a76b1211271177bd26fbb56cd0c236811d1bd3..11d1638d35dcd2c4a63d0220bdc09b656c70ab8f 100644 GIT binary patch delta 1131 zcmZ8h&2JM&6rVTyk+q$5V#f|ih)qHkh*O+2w1DImQc~JTNJN5sfUK4%$}AOz+U|H$ z5xOBt3BC64dZRap|7`QY#B_feQytoVfAcnhzyA@^9w%=J(#d_h!~F ziciMeN!N`Fdgj(P7oOgC*8!g4&#+ce`&IvjD5w0i-{og2S(V!~R9+p}Fw5QkKEF#1 zY)Un#4ifM2dx;Mb_tYWceg1yGUmYfXL=6+qse&4zSb6n-{tV~cBXAyXyAyUxj{mx4IF0#a zci(P*eTE~QWthb2U>Z2(cN)4ELoHTCjtP2ebb2i~a8g%d0@NOpUVET+tN zGA{~dk?Qw7syNPfj3o6(lwu*#D(*D?)N#eLqw{GdmTJ{TpqH0|n$};Es@2b^3m(4e z7)qA8#592b8`3!3d4kShq4OWY{!|gZ**TZWL4J;1qXzCiVttV|YIryOV`-FDO>?PM zUx}_k!HhC!-HXUGim}IihMZP*&UASIWxSd>Znu=Uo$0Y=X>T1LWTs#c?d+wiW5o41 z!*PZa3?~^%40OAM=If=oqNX`rQ@-Z&(_EbXf}w-q0t5deG!5#Eo@dHcXwF5?;)Cqq mFn=iyII(tsbqH-IlUZmSSx*##lS+ps|6ar=(P;8NxkB2p`B1=))Is+BYw) zNpp54Q4+>e4*V=nd$aC*aj|UhrMyw(W$ad-*!^O$py7LE6@qw0U4aO`Q#YU%M{PeL zwm+)L00|tkzkxRVVSfdk_}sAxSxh>6p%-VJ+mObu{%SmM20Z;#t1Md;?<8qGVT`+) z(O0z&gLuDc4~8-0{sB^>l- zw8|s6?#=d`5;9d^E^*#LZpzNxgLL(l8Z{#{f@os@0fnEXeDe-`S zLtutrs^dkb^Rprj3Y-)030xHr|DCDO=gqH+Q0$3|mGMb@9cgNACD#ECms=I)(8yFW Wh0I2#h3tOK>&EYq9oodbnyFu=;n=zW diff --git a/src/codegen/visitors/__pycache__/cil_format_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/cil_format_visitor.cpython-37.pyc index 9376cd6bae96f4d565e28525855fd6138f3469d2..fce4087cb75b284477d35d6ef9eae3154007aa8e 100644 GIT binary patch delta 76 zcmZ3by;z&qiIOK$;myGfnOmlH+AA WQUEF_QUeiElQ(cHZ@wpVh6wOSxi6{GmynRxl>4v Um!(JnsH8{@M2K!)FZ6{808AqgO8@`> diff --git a/src/codegen/visitors/__pycache__/cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/cil_visitor.cpython-37.pyc index 3aec0d217a1cc09f2b95e49a9e50d7a1f711e380..c50c213982a5c807c8ca3a0a73780adc3415e6fe 100644 GIT binary patch delta 2619 zcmZuzU2IfE6u#&F?Y+Bq`@6e^7TRqKh1)_%#I*dXRHPuaSP|4(SPHvfmt_}cFHMPe zUBw^%B+;B06D896`=C*=55^bclZHfN^u>4|jBmb*QD2PcIkVTcpxf-%Gc(`JnK|>F zIg4ZOkJk;x<57h^SE`pYu;prOXEp4wHo^sb#5w^MercVD^*Cz34*}k=---nKgy)F>-;3@}rO82g8M{$iA)z{I z0@|Tz&WX7I{n+p9hYfR=oOUqpCW_dOSK}?P8?VKeS1sy@(3c0wX9#?CM)4sJvry4| zWkw}iqrIr(YDKRYzLr&vTVjk@`XUzf=S})X^5(2sF=?LV*)!2B_@=MVYO?@JF-^TO z=F!TLkl|G2M159eim&^|QFX84sw2Xot+??ZdUUdw%@j&UCJJILb%{ELodiLh9O4*E z9zNye#Cjg-V%WiuWJnPN@x3{3o1~4DvbiAUl`>NkB2%0=krP{Y5yQ2lJHhuP>KX23 z;E)7{clu;*IPd9$CtA6QKv5lN0t*;ZWGBD{F^bXpZEzP3*RO$5 zJYC-hN9NwH9|9=QRSuxr9K&^un_(XwZ)|OPNO~->OYtz-Vn1GL?uKJ{wYeLAZ2V1U zU-)f98$1!tc1)fl9>&eh%VYA~k8oQq*C2<+k~M<*Evxd;v< z>&<;ccO!VRF=;N^#&dWvSp~$GQqB0(DjmC0n_(Oerf!2*sP8!0f29tE#_8S#E#_6JMlIBw?(3fJlRopt zGb(!k`A2*+WEiBdh;NYA7OTa*rejC9C|+)kA5B&8v1Ev8UkBav+1%-fXmHnmMJGSfttVq!5^2HLKoCxDI?=!2zFVMk!@rL-*`3lz6mB&c7kVUY11$2XU*igAk9l6?n$ z+Ph(s%Ep+Vv@7XnE=n#VGW&?8rS!D>Ag3s1giJX;Sfo^6M- z?MgJ9ZSm^!T$)GPRA%tc)+JzIqU{qa(5Fh1SvQJbx3%f~T;YwjF4&2k%LW@xQd7ud z$^(z`SrgZ&v)oRg#G)jyD4%%l^<`(^&Vx)pLEt*I*vk3*NQx4Jyb1YmK2FWR$`#7F zOxZgj*sTzlY42#6cNs)IaVnQ7OdQS?L>XUhzZ-tWAKJH6vr0vqZl}X?F-uf*Iu6j& zUaKKm#dzF#h>xhwDl#`UPp80A^$0^q>XvT?jJT#4V8`;!U)Y=6uY9-vlX{#v(Ll>h zpOk{YZ7oZiG}2v}%ZZ}ueDPFDuXXHLTPtkjG)yUFMyCyNVKO{Z-l-98DB_#ACA~5! zLwxHta4Ma)Yr!WE>@eZ5L*BDO3Zq0FeDb`7xuIoAxqp-9ja+g}rtQ_)}*R zrty!?6=oRobXT%vetpp?m&nNqQO4n}JwQHvTP2q zC0Cp;pkoGwDKqKDZp|n5HfD1SGt$q~+}0*eP1nleFfVn6LCOtW{G~fV3Nu#hf!Msl zLj$WWY z$hCPNUhYjdipSXRBtxEI1OD1uaGz)MEW>$*XBjRqTqFpr;as`QKSRU|c(!j9*!W>z V2RQgmU#AhHJWbC1-nSe;{Re3mN@xH8 delta 2354 zcmZuyO>7fa5Z+mP*X!Q|V>{%}NpNUlFrd;B6j~rZBq@a?KvJSQAmhXi!Eqc|Z)j51 zO$$AMR1RfS4!P8pT3V^?0ag;RUs;-X62dTNW*LnRJ$=B;rM#nDdYy*EE^ zX1S0UzTpXj+D9UKKi=^+z%jh%ZCz7o!$IF5efbO#Q!Yv- zWS|5En`ui)3z~kM_T<{0RJ0LqH|dh6<$}GSm{L(O)S|=CQb3V7uga#)w3lop04e9E z)92;wrZOi_NKtuA-{m2fQCGz^cRrU&WS3@>S$!vMReWM2X&CzXnPnrb`)E@i!tZ@8 zUAn^jZdO!v*4H`5dL5GyCVfOI3O;FTY@Q-E&$^QA0S!Fhhp_C2DCna&S=SE-@K#+6 zM)9Y*9WYb=t8N5fK_q%{(+C{LZ#FmiPYP>G#_EN%K0&;G0v~RQz#Kl_9Kmk?KX3ve z7>0MNYM$LXYgnQ|=0Z%iFll7M;pv=ieUgcAQZH2A;`K8wmdlSfD^Rt6jqDG?1g3&9 zy4c6TCiNM~5Al9*O};7NlV}LDq1RvvzYOhxTliaOf%uVzGq8@IH@p<)R8Wni3|C4L zRe-UmEV8L@#lO3|*GeRkmx)NWSsVYOAEShmEKo8}%xe1vPBJnfg%D#9UdXEbs?2sl z{E?JWMUI`2pb{=XAcoLVbP`?&3l>sLh4k$id2Pc)O0qy=VMKqE{OVj#D|?Ju>)uD1 zJIth(@3?m)ZS)KDj4h?o{|Cw_iwm?IVa{D6_@meP@@-n?>xoFR3_b#lO3-mZ0BRZ0 z=!`#+kt-5THy${5knZnFK}x;>)XBT3JCuS-QM*kgrQ79f75Fzm6<>p4Xi=Q;VvSuh(rIO6;Dw*J5%D=Z>fkSVz z&bRuso>UJ6ThRx)j-`m`Ta z>qb57T@<>8Ykino-`&U8w53-rSfTs>rFEX$M53VWTw-)~4DYnjb$C4U@U~Otd0?vr z2knS~O_x%u&IyQUc5DlZObn5ojaDL;-*&XS`H9iRiIr`t+|$YGB8T^=hHyz4HouyDG{6Pz9imM!39bRP|Wi~l*= z1Jf^*PE;kn*xn1XFO)ck<2%+ooYjhblApojSlQ8zzclTIedvy5qnG&tCX@G=tTI_+ n@;;G@b}XIGa|7!iU@_JOF1#CSBl<_ILvaymJZ0a`Rsh?7_elV* diff --git a/src/codegen/visitors/base_cil_visitor.py b/src/codegen/visitors/base_cil_visitor.py index 4ae03870..f70535f7 100644 --- a/src/codegen/visitors/base_cil_visitor.py +++ b/src/codegen/visitors/base_cil_visitor.py @@ -52,6 +52,12 @@ def to_attr_name(self, attr_name, type_name): def to_function_name(self, method_name, type_name): return f'function_{method_name}_{type_name}' + def to_var_name(self, var_name): + for name in self.localvars: + if var_name == name.split('_')[2]: + return name + return '' + def register_function(self, function_name): function_node = FunctionNode(function_name, [], [], []) self.dotcode.append(function_node) @@ -81,8 +87,9 @@ def _define_unary_node(self, node: UnaryNode, scope: Scope, cil_node): self.register_instruction(cil_node(result, expr)) return result, typex - def initialize_attr(self, constructor, attr: Attribute): + def initialize_attr(self, constructor, attr: Attribute, scope: Scope): if attr.expr: + expr, _ = self.visit(attr.expr, scope) constructor.body.expr_list.append(AssignNode(attr.name, attr.expr)) elif attr.type == 'Int': constructor.body.expr_list.append(AssignNode(attr.name, ConstantNumNode(0))) diff --git a/src/codegen/visitors/cil_format_visitor.py b/src/codegen/visitors/cil_format_visitor.py index c83616f8..64c31b90 100644 --- a/src/codegen/visitors/cil_format_visitor.py +++ b/src/codegen/visitors/cil_format_visitor.py @@ -97,7 +97,7 @@ def visit(self, node: GetAttribNode): @visitor.when(SetAttribNode) def visit(self, node: SetAttribNode): - return f'SETATTR {node.obj} {node.attr.name} = {node.value}' + return f'SETATTR {node.obj} {node.attr} = {node.value}' printer = PrintVisitor() return lambda ast: printer.visit(ast) diff --git a/src/codegen/visitors/cil_visitor.py b/src/codegen/visitors/cil_visitor.py index 17873f63..d81c6535 100644 --- a/src/codegen/visitors/cil_visitor.py +++ b/src/codegen/visitors/cil_visitor.py @@ -6,7 +6,6 @@ from utils import visitor from utils.utils import get_type, get_common_basetype - class COOLToCILVisitor(BaseCOOLToCILVisitor): @visitor.on('node') def visit(self, node): @@ -37,9 +36,9 @@ def visit(self, node: ClassDeclarationNode, scope: Scope): cil_type = self.register_type(node.id) - for a_name, a_type in self.current_type.all_attributes(): - cil_type.attributes.append((a_name.name, self.to_attr_name(a_name.name, a_type.name))) - self.initialize_attr(constructor, a_name) ## add the initialization code in the constructor + for attr, a_type in self.current_type.all_attributes(): + cil_type.attributes.append((attr.name, self.to_attr_name(attr.name, a_type.name))) + self.initialize_attr(constructor, attr, scope) ## add the initialization code in the constructor for method, mtype in self.current_type.all_methods(): cil_type.methods.append((method.name, self.to_function_name(method.name, mtype.name))) @@ -78,7 +77,7 @@ def visit(self, node: VarDeclarationNode, scope: Scope): var_info = scope.find_variable(node.id) vtype = get_type(var_info.type, self.current_type) local_var = self.register_local(VariableInfo(var_info.name, vtype)) - + value, _ = self.visit(node.expr, scope) self.register_instruction(cil.AssignNode(local_var, value)) return local_var, vtype @@ -87,12 +86,14 @@ def visit(self, node: VarDeclarationNode, scope: Scope): @visitor.when(AssignNode) def visit(self, node: AssignNode, scope: Scope): var_info = scope.find_local(node.id) + value, typex = self.visit(node.expr, scope) if var_info is None: var_info = scope.find_attribute(node.id) - value, typex = self.visit(node.expr, scope) - self.register_instruction(cil.SetAttribNode(VariableInfo('self', self.current_type), var_info, value)) + attr_name = self.to_attr_name(var_info.name, var_info.type.name) + self.register_instruction(cil.SetAttribNode('self', attr_name, value)) else: - value, typex = self.visit(node.expr, scope) + local_name = self.to_var_name(var_info.name) + self.register_instruction(cil.AssignNode(var_info.name, value)) return value, typex def _return_type(self, typex: Type, node): @@ -161,13 +162,14 @@ def visit(self, node: ConstantStrNode, scope: Scope): @visitor.when(SelfNode) def visit(self, node: SelfNode, scope: Scope): # TODO: Cual es el valor de self type? - return self.current_type.name, self.current_type + return 'self', self.current_type @visitor.when(VariableNode) def visit(self, node: VariableNode, scope: Scope): try: typex = scope.find_local(node.lex).type - return node.lex, get_type(typex, self.current_type) + name = self.to_var_name(node.lex) + return name, get_type(typex, self.current_type) except: var_info = scope.find_attribute(node.lex) local_var = self.register_local(var_info) @@ -181,9 +183,18 @@ def visit(self, node: InstantiateNode, scope: Scope): typex = get_type(typex, self.current_type) self.register_instruction(cil.AllocateNode(typex.name, instance)) - for attr, _ in typex.all_attributes(clean=True): - expr, _ = self.visit(attr.expr, scope) - self.register_instruction(cil.SetAttribNode(instance, attr, expr)) + for attr, a_type in typex.all_attributes(clean=True): + # Aquí sería más cómodo llamar al constructor de la clase, pero tendría que guardar todos los constructores + if attr.expr is not None: + expr, _ = self.visit(attr.expr, scope) + elif attr.type.name == 'Int': + expr, _ = self.visit(ConstantNumNode(0), scope) + elif attr.type.name == 'Bool': + expr, _ = self.visit(ConstantBoolNode(False), scope) + elif attr.type.name == 'String': + expr, _ = self.visit(ConstantStrNode(''), scope) + attr_name = self.to_attr_name(attr.name, a_type.name) + self.register_instruction(cil.SetAttribNode(instance, attr_name, expr)) return instance, typex @@ -203,7 +214,7 @@ def visit(self, node: WhileNode, scope: Scope): end_label = cil.LabelNode('end') result = self.define_internal_local() - self.register_instruction(cil.AssignNode(result, ConstantVoidNode())) + self.register_instruction(cil.AssignNode(result, 'void')) self.register_instruction(start_label) cond, _ = self.visit(node.cond, scope) @@ -247,10 +258,10 @@ def visit(self, node: ConditionalNode, scope: Scope): @visitor.when(BlockNode) def visit(self, node: BlockNode, scope: Scope): - result = self.define_internal_local() value = None for exp in node.expr_list: value, typex = self.visit(exp, scope) + result = self.define_internal_local() self.register_instruction(cil.AssignNode(result, value)) return result, typex @@ -260,8 +271,8 @@ def visit(self, node: LetNode, scope: Scope): for init in node.init_list: self.visit(init, child_scope) - result = self.define_internal_local() expr, typex = self.visit(node.expr, child_scope) + result = self.define_internal_local() self.register_instruction(cil.AssignNode(result, expr)) return result, typex @@ -292,7 +303,7 @@ def visit(self, node: OptionNode, scope: Scope, expr, expr_type, next_label): self.register_instruction(cil.GotoIfNode(aux, next_label)) var_info = scope.find_variable(node.id) local_var = self.register_local(var_info) - self.register_instruction(cil.AssignNode(node.id, expr)) + self.register_instruction(cil.AssignNode(local_var, expr)) expr_i, typex = self.visit(node.expr, scope) return exp_i, next_label diff --git a/src/cool_parser/output_parser/parselog.txt b/src/cool_parser/output_parser/parselog.txt index cc42b948..7098bc8b 100644 --- a/src/cool_parser/output_parser/parselog.txt +++ b/src/cool_parser/output_parser/parselog.txt @@ -6146,19 +6146,19 @@ yacc.py: 411:State : 32 yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',3,23) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',3,23) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',3,23) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',3,23) @@ -6191,37 +6191,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',4,53) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar epsilon . LexToken(cpar,')',4,61) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar arg_list_empty . LexToken(cpar,')',4,61) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args . LexToken(cpar,')',4,61) @@ -6268,37 +6268,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args cpar . LexToken(ccur,'}',5,67) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['print','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) + yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot func_call . LexToken(ccur,'}',5,67) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : class type ocur def_func semi epsilon . LexToken(ccur,'}',6,70) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : class type ocur def_func semi feature_list . LexToken(ccur,'}',6,70) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 14 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['test1',':','Int'] and goto state 17 - yacc.py: 506:Result : ( ( id] with ['test3'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',12,146) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',12,146) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',12,146) @@ -6490,27 +6490,27 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur num . LexToken(minus,'-',13,165) yacc.py: 471:Action : Reduce rule [atom -> num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 160 - yacc.py: 506:Result : ( base_call] with [] and goto state 160 + yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 - yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( string] with ['1'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 + yacc.py: 506:Result : ( id colon type] with ['a',':','Alpha'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) + yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param . LexToken(comma,',',19,226) @@ -6678,24 +6678,24 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon type . LexToken(cpar,')',19,234) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['b',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) + yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 - yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 + yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 95 yacc.py: 430:Defaulted state 95: Reduce using 33 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals . LexToken(cpar,')',19,234) @@ -6732,12 +6732,12 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon type . LexToken(comma,',',20,265) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['count',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) + yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) yacc.py: 410: yacc.py: 411:State : 130 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let param . LexToken(comma,',',20,265) - yacc.py: 471:Action : Reduce rule [let_assign -> param] with [] and goto state 129 - yacc.py: 506:Result : ( param] with [] and goto state 129 + yacc.py: 506:Result : ( id colon type] with ['pow',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) + yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 130 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param . LexToken(larrow,'<-',20,276) @@ -6771,53 +6771,53 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow num . LexToken(in,'in',21,329) yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 - yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 + yacc.py: 506:Result : ( let_assign] with [] and goto state 197 - yacc.py: 506:Result : ([ let_assign] with [] and goto state 197 + yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 - yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 + yacc.py: 506:Result : ([ num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 135 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 196 - yacc.py: 506:Result : ( comp] with [] and goto state 196 + yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',26,389) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',26,389) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',26,389) @@ -7031,37 +7031,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new type . LexToken(comma,',',27,424) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ id opar args cpar] with ['testing2','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',30,450) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',30,450) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',30,450) @@ -7236,27 +7236,27 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar num . LexToken(plus,'+',31,480) yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 - yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',33,543) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',33,543) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar epsilon . LexToken(cpar,')',37,601) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list_empty . LexToken(cpar,')',37,601) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',37,601) @@ -7660,48 +7660,48 @@ yacc.py: 411:State : 93 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id opar string . LexToken(cpar,')',38,646) yacc.py: 471:Action : Reduce rule [atom -> string] with ['reached!!\n'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi epsilon . LexToken(ccur,'}',40,655) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi feature_list . LexToken(ccur,'}',40,655) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( ( Date: Fri, 30 Oct 2020 15:13:13 -0600 Subject: [PATCH 29/60] Getting ready to push --- ast.py | 193 --------------------------------------------------------- 1 file changed, 193 deletions(-) delete mode 100644 ast.py diff --git a/ast.py b/ast.py deleted file mode 100644 index 59ea976e..00000000 --- a/ast.py +++ /dev/null @@ -1,193 +0,0 @@ -class Node: - pass - -class ProgramNode(Node): - def __init__(self, declarations): - self.declarations = declarations - -class DeclarationNode(Node): - pass - -class ExpressionNode(Node): - pass - -class ErrorNode(Node): - pass - -class ClassDeclarationNode(DeclarationNode): - def __init__(self, idx, features, pos, parent=None): - self.id = idx - self.parent = parent - self.features = features - self.pos = pos - -class FuncDeclarationNode(DeclarationNode): - def __init__(self, idx, params, return_type, body, pos): - self.id = idx - self.params = params - self.type = return_type - self.body = body - self.pos = pos - self.pos = pos - -class AttrDeclarationNode(DeclarationNode): - def __init__(self, idx, typex, pos, expr=None): - self.id = idx - self.type = typex - self.expr = expr - self.pos = pos - -class VarDeclarationNode(ExpressionNode): - def __init__(self, idx, typex, pos, expr=None): - self.id = idx - self.type = typex - self.expr = expr - self.pos = pos - -class AssignNode(ExpressionNode): - def __init__(self, idx, expr, pos): - self.id = idx - self.expr = expr - self.pos = pos - -class CallNode(ExpressionNode): - def __init__(self, obj, idx, args, pos): - self.obj = obj - self.id = idx - self.args = args - self.pos = pos - -class BlockNode(ExpressionNode): - def __init__(self, expr_list, pos): - self.expr_list = expr_list - self.pos = pos - -class BaseCallNode(ExpressionNode): - def __init__(self, obj, typex, idx, args, pos): - self.obj = obj - self.id = idx - self.args = args - self.type = typex - self.pos = pos - - -class StaticCallNode(ExpressionNode): - def __init__(self, idx, args, pos): - self.id = idx - self.args = args - self.pos = pos - - -class AtomicNode(ExpressionNode): - def __init__(self, lex, pos): - self.lex = lex - self.pos = pos - -class BinaryNode(ExpressionNode): - def __init__(self, left, right, pos): - self.left = left - self.right = right - self.pos = pos - -class BinaryLogicalNode(BinaryNode): - def __init__(self, left, right, pos): - super().__init__(left, right, pos) - -class BinaryArithNode(BinaryNode): - def __init__(self, left, right, pos): - super().__init__(left, right, pos) - -class UnaryNode(ExpressionNode): - def __init__(self, expr, pos): - self.expr = expr - self.pos = pos - -class UnaryLogicalNode(UnaryNode): - def __init__(self, operand, pos): - super().__init__(operand, pos) - -class UnaryArithNode(UnaryNode): - def __init__(self, operand, pos): - super().__init__(operand) - -class WhileNode(ExpressionNode): - def __init__(self, cond, expr): - self.cond = cond - self.expr = expr - -class ConditionalNode(ExpressionNode): - def __init__(self, cond, stm, else_stm): - self.cond = cond - self.stm = stm - self.else_stm = else_stm - -class CaseNode(ExpressionNode): - def __init__(self, expr, case_list): - self.expr = expr - self.case_list = case_list - - def __hash__(self): - return id(self) - -class OptionNode(ExpressionNode): - def __init__(self, idx, typex, expr): - self.id = idx - self.typex = typex - self.expr = expr - - -class LetNode(ExpressionNode): - def __init__(self, init_list, expr): - self.init_list = init_list - self.expr = expr - - def __hash__(self): - return id(self) - -class ConstantNumNode(AtomicNode): - pass - -class ConstantBoolNode(AtomicNode): - pass - -class ConstantStrNode(AtomicNode): - pass - -class VariableNode(AtomicNode): - pass - -class TypeNode(AtomicNode): - pass - -class InstantiateNode(AtomicNode): - pass - -class BinaryNotNode(UnaryArithNode): - pass - -class NotNode(UnaryLogicalNode): - pass - -class IsVoidNode(UnaryArithNode): - pass - -class PlusNode(BinaryArithNode): - pass - -class MinusNode(BinaryArithNode): - pass - -class StarNode(BinaryArithNode): - pass - -class DivNode(BinaryArithNode): - pass - -class LessNode(BinaryLogicalNode): - pass - -class LessEqNode(BinaryLogicalNode): - pass - -class EqualNode(BinaryLogicalNode): - pass \ No newline at end of file From 3e80799f7c7ddc808e163b92b2e15508196518c8 Mon Sep 17 00:00:00 2001 From: Amanda Santos Date: Fri, 6 Nov 2020 17:16:28 -0700 Subject: [PATCH 30/60] I think i finished optimization within a basic block. Basic functions of mips visitor done (needs testing) --- src/codegen/__init__.py | 3 + .../__pycache__/__init__.cpython-37.pyc | Bin 622 -> 723 bytes .../__pycache__/cil_ast.cpython-37.pyc | Bin 9889 -> 11819 bytes src/codegen/cil_ast.py | 147 +++- src/codegen/tools.py | 98 +++ src/codegen/utils.py | 15 - .../base_cil_visitor.cpython-37.pyc | Bin 6110 -> 6338 bytes .../__pycache__/cil_visitor.cpython-37.pyc | Bin 11820 -> 11842 bytes src/codegen/visitors/base_cil_visitor.py | 18 +- src/codegen/visitors/base_mips_visitor.py | 199 +++++ src/codegen/visitors/cil_visitor.py | 5 +- src/codegen/visitors/mips_visitor.py | 161 ++++ src/cool_parser/output_parser/parselog.txt | 762 +++++++++--------- src/main.py | 2 +- src/semantic/tools.py | 2 +- 15 files changed, 974 insertions(+), 438 deletions(-) create mode 100644 src/codegen/tools.py delete mode 100644 src/codegen/utils.py create mode 100644 src/codegen/visitors/base_mips_visitor.py create mode 100644 src/codegen/visitors/mips_visitor.py diff --git a/src/codegen/__init__.py b/src/codegen/__init__.py index 7fd6b7c0..4cfcf538 100644 --- a/src/codegen/__init__.py +++ b/src/codegen/__init__.py @@ -1,10 +1,13 @@ from codegen.visitors.cil_visitor import COOLToCILVisitor from codegen.visitors.cil_format_visitor import get_formatter +from codegen.visitors.mips_visitor import CILToMIPSVistor + def codegen_pipeline(context, ast, scope): print('============= TRANSFORMING TO CIL =============') cool_to_cil = COOLToCILVisitor(context) cil_ast = cool_to_cil.visit(ast, scope) formatter = get_formatter() + cil_to_mips = CILToMIPSVistor().visit(cil_ast) print(formatter(cil_ast)) return ast, context, scope, cil_ast \ No newline at end of file diff --git a/src/codegen/__pycache__/__init__.cpython-37.pyc b/src/codegen/__pycache__/__init__.cpython-37.pyc index 9f0c8ac3d65b3b56f66fc4c52ff38708b7c2aab4..3ee5965fa418a95289e2211ac62aad8eb72396aa 100644 GIT binary patch delta 334 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 SymbolTabEntry: + if entry_name != None: + if entry_name in self.entries.keys(): + return self.entries[s] + + def insert(self, entry: SymbolTabEntry): + self.entries[entry.name] = entry + + def __getitem__(self, item): + return self.entries[item] + + def __iter__(self): + return iter(self.entries) + + +class NextUseEntry: + """For each line : for all three variables involved their next use and is live information""" + def __init__(self, in1, in2, out, in1nextuse, in2nextuse, outnextuse, in1islive, in2islive, outislive): + self.in1 = in1 + self.in2 = in2 + self.out = out + self.in1nextuse = in1nextuse + self.in2nextuse = in2nextuse + self.outnextuse = outnextuse + self.in1islive = in1islive + self.in2islive = in2islive + self.outislive = outislive + + +class AddressDescriptor: + 'Stores the location of each variable' + def __init__(self): + self.vars = {} + + def insert_var(self, name, address, register=None, stack=None): + self.vars[name] = [address, register, stack] + + def get_var_addr(self, name): + return self.vars[name][0] + + def set_var_addr(self, name, addr): + self.vars[name][0] = addr + + def get_var_reg(self, name): + return self.vars[name][1] + + def set_var_reg(self, name, reg): + self.vars[name][1] = reg + + def get_var_stack(self, name): + return self.vars[name][2] + + def set_var_stack(self, name, stack_pos): + self.vars[name][1] = stack_pos + + def get_var_storage(self, name): + return self.vars[name] + +class RegisterDescriptor: + 'Stores the contents of each register' + def __init__(self, registers: List[str]): + self.registers = {reg: None for reg in registers} + + def insert_register(self, register:str, content:str): + self.registers[register] = content + + def get_content(self, register: str): + return self.registers[register] + + def find_empty_reg(self): + for k, v in self.registers.items(): + if v == None: + return k diff --git a/src/codegen/utils.py b/src/codegen/utils.py deleted file mode 100644 index 7664d351..00000000 --- a/src/codegen/utils.py +++ /dev/null @@ -1,15 +0,0 @@ -class CILScope: - def __init__(self, parent=None): - self.parent = parent - self.vars = [] - - def add_var(self, var): - self.vars.append(var) - - def get_full_name(self, var_name: str): - for name in self.vars: - if var_name == name.split('_')[2]: - return name - if self.parent: - return self.parent.get_full_name(var_name) - return '' \ No newline at end of file diff --git a/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc index 11d1638d35dcd2c4a63d0220bdc09b656c70ab8f..61b539b6a93054f00cf3987f892ee5477580657f 100644 GIT binary patch delta 2353 zcmZuyTTC2P7@jk?9d_C60(+s9JB2dz0;Sa2YJ`IJLI~Cv6gRcgk#nF!w!51%Lj|$~ z6%wN+_2E3)CKzL*kJZE%6HR>3nE2qU(`bC~rEfg?=>MPLx^^e?&AI*G`Tqa>|JlC= ze>$5QPbT9E{LVf1h4W+Xaq2xnw#BF9LY(Qej>b2Y4I+LclasWKwr?thM%KhKEW4Pa z9S=0xNxL@nLY_6V4DEiP(jIyo`bSv{^n0P-M^8Zi7;9y1v>*C59oW>xZ8ejkLqOI= z&%UnM!(m1|wldsVYv4Dln%`a{}UQOFU6$a-rtYWm^q(pB3l%F_`#T z;qBtG_HitYJ`hvSj^fHfJmM*p={Z&t-f&;PT!f@M`Uglo zJgYsBckN;&cCGacl1F*KCHa9+h(BX3WJvrQn_l0|sx49_(i=Dq2s*sr6`6)W;-PVr zDn;*577|{`5BSnt;FU|YDl>agKCoy6waT0WofcWO$6cRIi0`ahNeq_ckjK_l*V1-C zE6j!ULD_MGfIE2Z7sYJd{Eb64xF&Iz1$W9+F5$zwjFB{%`e`7UUn)t(a@C8l$j5wA z$Z9XdEh~EBvr|a?RAw254^J#K{7TUaP#p9M);%{85*=)f)CBCZyI@rO5+9vHpC{n; zy8$rg7ZiLTg~*1nhAE|PX;pPEl_2Ok*I{jxBzbJfOu?MKp6DK~*|A|S+PmJpg1beb zZp5VMlS%P?V)D{14|2+6s|!{t%z<3{U#cbdXmQD;7_A?rs7ktm$wdh`gHB+fLIDRV z)Q2qM4NX=E+0u6^M3XmE!Juy7I<^rNLk>lt%EQGV{-|#|S>xiq7G!u8Y<99f4Rza< zd^9@trANB&M;fHig^G9MRCI-8JX*n~{BSWl0gmA8CiuDnx=WzHvYatuN4 zx>qJUg&?-m8S;)W8YWCB$QIKL-;BtcJnDmGsJnc@uhp6=xq)|&IZ>JUWiitD#FUX3 z64|EVe#s%Py0>t5>G)xH`5Q3tt|&Ksa0%-()aS~T6}ipsB`D3MrR1nFe-n(}|Mq02 zgXHj7`7I==yTQFuFpUX3C~jwuo!-~6M-*!A(sGSId={)f5?^Jnl5Vk`?OpFgHmkzR z6~=>=C@1m%A-c5tuyq;%Q=dnEW9uBkd4!7ymk?e+cnP5a!9tK?b*b|z_VF*6Uq?8C zFoVwVI6$buy~+#N#dvW!fnpCh(2iZa)OZFU2Ct7-yhW^dy;-m0W0~;imLdMhJtDWn QC;6VVwAzOb@k74zKR?v!ng9R* delta 2231 zcmaJ@+iw(A7@spUJ3D)Aw|gn2^iF~44N$O21&W0NF<4QkF%!sU>^Ut%wlnLQS!BtQ zs>K&yjGi~Zq`r{&i24`!u(=S?N}p_C3;QKOMNQ+ZEQ$ zigfUiN{8q$toN}VSdYN^ARUGEe%8wl&_l33Opn02k6Lu>zGC;&aXJCt19Xy3!S^6N zdR4KGMJ4fmwj>^?6*48Bs8gl_yJW#iif8I#!BQhVV6|o53q-$Gc%QhTeVWK4ZSj|O zQXEPg95Lz+cUA+7@B^^T`?jGU-v$8+;ve1V+3R!&PRpX6SlRP*7*2b{--&ajOYjyd zEpm&jlY1&9E#;Of7Lwg%4c_#1@=*EGXpt)J>l+F2fidVCTm_*>_ncM6_v5QpW1i#_ z8BV>=#zD zm&}RzL`(aM5T&I;SoHIBaj0x8e4g*+v z9M&VaftT!btm1!ZiswnAh&DD^juCT*^cbpEcd33cZBd!BW!Ga>*8`_LU@VPV z;yZKUQYXlQZ^{N~5$PL=OGf3Gu$XnM+RnIM5c0-S==xrJOiSYPRHqS z#TS`bk;$ZHusyJ*R}_5K^?ND=m29Xjb-Q4o4>gX#;oS(b9xxnz+2P4H8-?u(-Qs^5 zL;?dqA$d{DuFhWieOK7?Rjs%+PR7t-;_6b7!Zd#9sBhLj$i|MB{PSbrO;m&vTF8 z9fv*a-@pwcy~dWqD8b#8n<1Zo1IvsH{8hAn3ISsh8Jq=;TF7T{kw6FU@UwWjE2QGz z{66xAD0j>nv9z!|7H^<6eg?&KcBjr`Bgwst@YnF_d4xHHU8+&MtGd}=4bS0CnSyH~ z+c`&0i8nicnS2@USeaNnHus)Sn^6jlR%Jf3w|u&M)Ah zbXu~&5^iVF;d*Z9IyLt$ldWWnUkm39$#+zYcYSk0j_i1i`gMn|1no-lo)fyaSv790 zU_}&)KN&Jm6XIF%r6W>@oNkLqLB{39Xz;h;z!#TGAJ1S%CzXq2NIb2K zt_`3zv(EiG<6%?&e#9es7;RYyI81r$GQJ%}z=_09BD{hyjWB~yK)@=FdFqlP_7(3! zm`CV9cncwY1u)Ve@x&mX6F*t3GYi*cpN<@E?=|q(lZ`IG5D_0AE+%>;M1& diff --git a/src/codegen/visitors/__pycache__/cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/cil_visitor.cpython-37.pyc index c50c213982a5c807c8ca3a0a73780adc3415e6fe..ceeed5bf8ee9c3e518c3eb1ea2af1cedd7af2488 100644 GIT binary patch delta 2354 zcmah~Uu;uV81K1l@7k_^wr*{=ve9X~(aQ$1$=?w+MHqiJnYziJF(`Mt7i{TTc6yr> z?IZ?*Q^7>P$b%2EMoHB0LYnN27cns^iN2VSD?Iq>3%;qrM9=r#v5kScpU-0xe>d-ZmP*|4?Qx!Sib57QzvZEqZ7{fj2sS$IrljbhXu1OVXMqXHRm*ukak!X)5q6aWs z696ez>M&}{EaNRp8Q*znm+e^NxHMBU;}QV=a!uJ)k(h0I_K-~^3J79#;;R>5uxzh5 zpk7|h8eoImAv@DKO)tT#@~x1Yd&Pk`o|p%OG3{xs1j(AgU{uU(l9$QM#avR5)k)R! zH9s)68QMad9ZHlZ;j%l&67ZLM8;inb&sMn=QDR_tGOPn`_#!M0zkBX=cO$Only0P^ zbmO(W#-G8s4e0ex7CF~*iz}FvC&205(6JSVVKfmmEy5_S6>LT5QExZf4wt=^dP1!c zVWz`4dq(Ho(C=#wCvdZ$yn5*jUqFPMZ-=}amj;OF0r=MU%|=4NSiT=O_)iL*QmSF_ z^hD9n`6gT;yuCQGxWU){ww6ILf1KP9M(zGEuqk##j0!Vbq#bF(I1a1X7*~#ktK%BW1v0&O&ehS(eBF;`R%UdP!@(@hdH%6C4 zYer1clzjW zo0vVLi0tSm`4EQ_z`t@K36Emj|M21Ci(t#xoc;7c16#@Dl3>#JEYbMyCNP(57o`s)6=cFq(_*)4>HoTo3htI=3>|^*jd^&axSQwNp=nVO_lY-xR(G(iC1un&C7|~OE}txW}(aOH6`jsa8CV4 zoppeazpN_FD%(jc)?)yH5HQ{_3vQ7fZ(79Y!4dYkRkFQsJG!-Z6V6{2M)9n?YER=5 zQRu@_KN{LTfTK|&GhaQp>N~ayFRbYvQYZ8*DX}EcAZ%}KXZt~I-4P~ps{M+RbAh%vD^vt zpblI`!-Ns7NOUZ0^gb#DCpK2iadiUsJocZ0x{VG_-B!ZLB6V9YG_9Fn5qM+G7B&jM ztnICT`(YB(v#)S4pVr{5q{5DfwQZm#!y>kn>|w_+w)WkJvHT+4ZWX<<<%J_k57U=B zZY$j^{ltA!%fqg(-N>e&7*>Sg&H>g2S2|G2hV+6}{P$t5YYS_H NJ6%_V2>Eq4{{aDq`V0U7 delta 2334 zcmah~TWr&16z}Q%esgVi?=Gm@7ulw*op@N{ia6Ih1VT9=)j!bHLgx%|$C-c4lB5 z-i$?{4Lz>!BOB$m=A2fGi5azcBA*f)$gU5;U1x0|wF8^no4U4<8X^%U(Ikap7jDvt zW8ovwfphN7Fo4(H<=q^{CU-S+@${@JIFDDT)9FG{6^U$qDw!1)_9EeBOLbvZEN8*< zo}JdcbTq_hpTr+LU%EId*@_Xo>8%TGCAEXZFbN$XYTmZyQMq1=@CmZoi(%iRa0JJE zEijH5-{XC|X@nyS+92-zw`CLRK?=&1c;#$h*}ism6gnIU#cU2 zF2R0bWBFu?Y45-@kr=ddw|#)0MF!2374JU09D#%X%2WQ!P6~%Zxm?YBkbL#huT{A$RCFH_`$@aj3cZ8C4|ZuxsY^R8p3nmD5kO%Jnh?6TrhP#p(XZ|R@47xCz zNGq-fC67CZM}6|WLdK@#{DROsn1Y_=xve*XQW;vGf?Tx`M1m|p3dN~ke>JE6)4_eg z&>5xP2;}o3`K}3L sFxlIyyhNz3)mkE^PSxZ_@bk6951J diff --git a/src/codegen/visitors/base_cil_visitor.py b/src/codegen/visitors/base_cil_visitor.py index f70535f7..f3551915 100644 --- a/src/codegen/visitors/base_cil_visitor.py +++ b/src/codegen/visitors/base_cil_visitor.py @@ -13,6 +13,13 @@ def __init__(self, context): self.current_method: Method = None self.current_function = None self.context: Context = context + self.idx = 0 + + @property + def index(self): + i = self.idx + self.idx += 1 + return i @property def params(self): @@ -27,14 +34,14 @@ def instructions(self): return self.current_function.instructions def register_param(self, vinfo): - param_node = ParamNode(vinfo.name) + param_node = ParamNode(vinfo.name, self.index) vinfo.name = f'param_{self.current_function.name[9:]}_{vinfo.name}_{len(self.params)}' self.params.append(param_node) return vinfo.name def register_local(self, vinfo): name = f'local_{self.current_function.name[9:]}_{vinfo.name}_{len(self.localvars)}' - local_node = LocalNode(name) + local_node = LocalNode(name, self.index) self.localvars.append(local_node) return name @@ -44,6 +51,7 @@ def define_internal_local(self): def register_instruction(self, instruction): self.instructions.append(instruction) + instruction.index = self.index return instruction def to_attr_name(self, attr_name, type_name): @@ -57,9 +65,9 @@ def to_var_name(self, var_name): if var_name == name.split('_')[2]: return name return '' - + def register_function(self, function_name): - function_node = FunctionNode(function_name, [], [], []) + function_node = FunctionNode(function_name, [], [], [], self.index) self.dotcode.append(function_node) return function_node @@ -70,7 +78,7 @@ def register_type(self, name): def register_data(self, value): vname = f'data_{len(self.dotdata)}' - data_node = DataNode(vname, value) + data_node = DataNode(vname, value, self.index) self.dotdata.append(data_node) return data_node diff --git a/src/codegen/visitors/base_mips_visitor.py b/src/codegen/visitors/base_mips_visitor.py new file mode 100644 index 00000000..8b8657d2 --- /dev/null +++ b/src/codegen/visitors/base_mips_visitor.py @@ -0,0 +1,199 @@ +from codegen.cil_ast import * +from codegen.tools import * +from semantic.tools import VariableInfo +from typing import List + +class BaseCILToMIPSVisitor: + def __init__(self): + self.code = [] + self.initialize_data_code() + self.initialize_type_code() + + self.symbol_table = SymbolTable() + local_reg_list = ['t0', 't1', 't2', 't3', 't4', 't5', 't6', 't7', 't8', 't9'] + global_reg_list = ['s0', 's1', 's2', 's3', 's4', 's5', 's6', 's7'] + # Not sure if i should only use local registers + self.local_reg = RegisterDescriptor(local_reg_list) + self.global_reg = RegisterDescriptor(global_reg_list) + self.usable_reg = RegisterDescriptor(local_reg_list + global_reg_list) + self.addr_desc = AddressDescriptor() + + + def initialize_data_code(self): + self.data_code = ['.data'] + + + def initialize_type_code(self): + self.type_code = [] + + + def get_basic_blocks(self, instructions: List[InstructionNode]): + leaders = self.find_leaders(instructions) + blocks = [instructions[leaders[i-1]:leaders[i]] for i in range(1, len(leaders))] + return blocks + + + def find_leaders(self, instructions: List[InstructionNode]): + "Returns the positions in the block that are leaders" + leaders = {0, len(instructions)} + for i, inst in enumerate(instructions): + if isinstance(inst, GotoNode) or isinstance(inst, GotoIfNode) or isinstance(inst, ReturnNode) \ + or isinstance(inst, StaticCallNode) or isinstance(inst, DynamicCallNode): + leaders.add(i+1) + elif isinstance(inst, LabelNode) or isinstance(inst, FunctionNode): + leaders.add(i) + return sorted(list(leaders)) + + + def is_variable(self, expr): + if expr is None: + return False + try: + int(expr) + return False + except: + return True + + def construct_next_use(self, basic_blocks: List[List[InstructionNode]]): + next_use = {} + for basic_block in basic_blocks: + #Flush Symbol table's nextuse islive information + for x in self.symbol_table: + self.symbol_table[x].is_live = False + self.symbol_table[x].next_use = None + + for inst in reversed(basic_block): + in1 = inst.in1 if self.is_variable(inst.in1) else None + in2 = inst.in2 if self.is_variable(inst.in2) else None + out = inst.out if self.is_variable(inst.out) else None + + in1nextuse = None + in2nextuse = None + outnextuse = None + in1islive = False + in2islive = False + outislive = False + + entry_in1 = self.symbol_table.lookup(in1) + entry_in2 = self.symbol_table.lookup(in2) + entry_out = self.symbol_table.lookup(out) + if out is not None: + if entry_out is not None: + outnextuse = entry_out.next_use + outislive = entry_out.is_live + else: + scope = Scope.GLOBAL if isinstance(inst, SetAttribNode) else Scope.LOCAL + # TODO: Calcular el tamaño cuando es un AllocateNode + entry_out = SymbolTabEntry(out, scope=scope) + entry_out.next_use = None + entry_out.is_live = False + self.symbol_table.insert(entry_out) + if in1 is not None: + if entry_in1 is not None: + in1nextuse = entry_in1.nextUse + in1islive = entry_in1.isLive + else: + scope = Scope.GLOBAL if isinstance(inst, GetAttribNode) else Scope.LOCAL + entry_in1 = SymbolTabEntry(out, scope=scope) + entry_in1.next_use = inst.index + entry_in1.is_live = True + self.symbol_table.insert(entry_in1) + if in2 is not None: + if entry_in2 is not None: + in2nextuse = entry_in2.next_use + in2islive = entry_in2.is_live + else: + entry_in2 = SymbolTabEntry(in2) + entry_in2.next_use = inst.index + entry_in2.is_live = True + self.symbol_table.insert(entry_in2) + + n_entry = NextUseEntry(in1, in2, out, in1nextuse, in2nextuse, outnextuse, in1islive, in2islive, outislive) + next_use[inst.index] = n_entry + return next_use + + def get_reg(self, inst: InstructionNode, reg_desc: RegisterDescriptor): + rest_block = self.block[inst.idx-block[0].idx:] # return the block of instructions after the current instruction + code1 = get_reg_var(inst.in1, reg_desc, rest_block) if is_variable(inst.in1) else None + code2 = get_reg_var(inst.in2, reg_desc, rest_block) if is_variable(inst.in2) else None + code = code1 + code2 + + # Comprobar si se puede usar uno de estos registros tambien para el destino + nu_entry = self.next_use[inst.idx] + if nu_entry.in1islive and nu_entry.in1nextuse < inst.idx: + update_register(inst.out, in1_reg) + return code + + if nu_entry.in2islive and nu_entry.in2nextuse < inst.idx: + update_register(inst.out, in2_reg) + return code + # Si no buscar un registro para z por el otro procedimiento + code3 = get_reg_var(inst.out, reg_desc, rest_block) if is_variable(inst.out) else None + + return code + code3 + + + def get_reg_var(self, var, reg_desc: RegisterDescriptor): + curr_inst = self.block[0] + register = self.addr_desc.get_var_reg(var) + if register is not None: # ya la variable está en un registro + return [] + + var_st = self.symbol_table.lookup(var) + + register = reg_desc.find_empty_reg() + if register is not None: + update_register(var, register, reg_desc) + return [self.save_var_code(var)] + + # Choose a register that requires the minimal number of load and store instructions + score = {} # keeps the score of each variable (the amount of times a variable in a register is used) + for inst in self.block[1:]: + inst: InstructionNode + if inst.in1 and inst.in1 != curr_inst.in1 and curr_inst.in2 != inst.in1 and curr_inst.out != inst.in1: + _update_score(score, inst.in1) + if inst.in2 and inst.in2 != curr_inst.in1 and curr_inst.in2 != inst.in2 and curr_inst.out != inst.in2: + _update_score(score, inst.in2) + if inst.out and inst.out != curr_inst.in1 and inst.out != curr_inst.in2 and inst.out != curr_inst.out: + _update_score(score, inst.out) + # Chooses the one that is used less + n_var = min(score, key=lambda x: score[x]) + + register, memory, _ = self.addr_desc.get_var_storage(n_var) + code = [self.save_var_code(n_var)] + + update_register(var, register, reg_desc) + code.append(self.load_var_code(var) + return code + + + def _update_score(self, score, var): + if self.addr_desc.get_var_reg(var) is None: + return + try: + score[var]+= 1 + except: + score[var] = 1 + + + def update_register(self, var, register, reg_desc: RegisterDescriptor): + content = reg_desc.get_content(register) + if content is not None: + self.addr_desc.set_var_reg(content, None) + reg_desc.insert_register(register, var) + self.addr_desc.set_var_reg(var, register) + + def save_var_code(self, var): + var_st = self.symbol_table.lookup(var) + register, memory, _= self.addr_desc.get_var_storage(var) + if var_st.scope == Scope.LOCAL: + return f"sw ${register}, -{memory}($fp)" + else: + return f"sw ${register}, {memory}" + + def load_var_code(self, var): + var_st = self.symbol_table.lookup(var) + register, memory, _ = self.addr_desc.get_var_storage(var) + if var_st.scope = Scope.LOCAL: + return f'lw ${register}, -{memory}(fp)' + else: + return f'lw ${register}, {mem_addr}' \ No newline at end of file diff --git a/src/codegen/visitors/cil_visitor.py b/src/codegen/visitors/cil_visitor.py index d81c6535..232231d8 100644 --- a/src/codegen/visitors/cil_visitor.py +++ b/src/codegen/visitors/cil_visitor.py @@ -14,10 +14,13 @@ def visit(self, node): @visitor.when(ProgramNode) def visit(self, node: ProgramNode, scope: Scope): self.current_function = self.register_function('entry') + idx = self.index instance = self.define_internal_local() result = self.define_internal_local() + self.register_instruction(cil.AllocateNode('Main', instance)) self.register_instruction(cil.ArgNode(instance)) + name = self.to_function_name('main', 'Main') self.register_instruction(cil.StaticCallNode(name, result)) self.register_instruction(cil.ReturnNode(0)) @@ -26,7 +29,7 @@ def visit(self, node: ProgramNode, scope: Scope): for declaration, child_scope in zip(node.declarations, scope.children): self.visit(declaration, child_scope) - return cil.ProgramNode(self.dottypes, self.dotdata, self.dotcode) + return cil.ProgramNode(self.dottypes, self.dotdata, self.dotcode, idx) @visitor.when(ClassDeclarationNode) diff --git a/src/codegen/visitors/mips_visitor.py b/src/codegen/visitors/mips_visitor.py new file mode 100644 index 00000000..7ab1cf72 --- /dev/null +++ b/src/codegen/visitors/mips_visitor.py @@ -0,0 +1,161 @@ +from codegen.cil_ast import * +from utils import visitor +from codegen.visitors.base_mips_visitor import BaseCILToMIPSVisitor +from codegen.tools import SymbolTable, AddressDescriptor, RegisterDescriptor + + +class CILToMIPSVistor(BaseCILToMIPSVisitor): + ''' + Registers: + v0-v1: Used for expression evaluations and to hold the integer type + function results. Also used to pass the static link when calling + nested procedures. + a0-a3: Used to pass the first 4 words of integer type actual + arguments, their values are not preserved across procedure + calls. + t0-t7: Temporary registers used for expression evaluations; their + values aren’t preserved across procedure calls. + s0-s7: Saved registers. Their values must be preserved across + procedure calls. + t8-t9: Temporary registers used for expression evaluations; their + values aren’t preserved across procedure calls. + k0-k1: Reserved for the operating system kernel. + gp: Contains the global pointer. + sp: Contains the stack pointer. + fp: Contains the frame pointer (if needed); otherwise a saved register. + ra: Contains the return address and is used for expression evaluation. + Register $ra only needs to be saved if the callee itself makes a call. + + ''' + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node: ProgramNode): + #? Quizá tenga que cambiar el orden en que estas cosas se visitan + # visit TypeNodes + for type_ in node.dottypes: + self.visit(type_) + # visit DataNodes + for data in node.dotdata: + self.visit(data) + # visit code instrunctions + for code in node.dotcode: + self.visit(code) + + @visitor.when(TypeNode) + def visit(self, node:TypeNode): + pass + + @visitor.when(DataNode) + def visit(self, node:DataNode): + self.data_code.append(f"{node.name}: .asciiz \"{node.value}\"") + + @visitor.when(FunctionNode) + def visit(self, node:FunctionNode): + for param in node.params: + self.visit(param) + for var in node.localvars: + self.visit(var) + blocks = self.get_basic_blocks(node.instructions) + self.next_use = self.construct_next_use(blocks) + for block in blocks: + self.block = block + for inst in block: + self.code += self.get_reg(inst, self.usable_reg) + self.visit(inst) + + @visitor.when(ParamNode) + def visit(self, node:ParamNode): + self.code.append('addiu $sp, $sp, -4') + register = self.addr_desc.get_var_reg(node.name) + self.code.append(f'sw $sp, ${register} ($sp)') + + # @visitor.when(LocalNode) + # def visit(self, node:LocalNode): + # pass + + @visitor.when(AssignNode) + def visit(self, node:AssignNode): + pass + + @visitor.when(NotNode) + def visit(self, node:NotNode): + pass + + @visitor.when(BinaryNotNode) + def visit(self, node:BinaryNotNode): + pass + + @visitor.when(IsVoidNode) + def visit(self, node:IsVoidNode): + pass + + @visitor.when(PlusNode) + def visit(self, node:PlusNode): + pass + + @visitor.when(MinusNode) + def visit(self, node:MinusNode): + pass + + @visitor.when(StarNode) + def visit(self, node:StarNode): + pass + + @visitor.when(DivNode) + def visit(self, node:DivNode): + pass + + @visitor.when(GetAttribNode) + def visit(self, node:GetAttribNode): + pass + + @visitor.when(SetAttribNode) + def visit(self, node:SetAttribNode): + pass + + @visitor.when(AllocateNode) + def visit(self, node:AllocateNode): + pass + + @visitor.when(TypeOfNode) + def visit(self, node:TypeOfNode): + pass + + @visitor.when(LabelNode) + def visit(self, node:LabelNode): + pass + + @visitor.when(GotoNode) + def visit(self, node:GotoNode): + pass + + @visitor.when(GotoIfNode) + def visit(self, node:GotoIfNode): + pass + + @visitor.when(StaticCallNode) + def visit(self, node:StaticCallNode): + pass + + @visitor.when(DynamicCallNode) + def visit(self, node:DynamicCallNode): + pass + + @visitor.when(ArgNode) + def visit(self, node:ArgNode): + pass + + @visitor.when(ReturnNode) + def visit(self, node:ReturnNode): + pass + + @visitor.when(LoadNode) + def visit(self, node:LoadNode): + pass + + @visitor.when(SelfNode) + def visit(self, node:SelfNode): + pass \ No newline at end of file diff --git a/src/cool_parser/output_parser/parselog.txt b/src/cool_parser/output_parser/parselog.txt index 7098bc8b..f551c115 100644 --- a/src/cool_parser/output_parser/parselog.txt +++ b/src/cool_parser/output_parser/parselog.txt @@ -6146,19 +6146,19 @@ yacc.py: 411:State : 32 yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',3,23) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',3,23) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',3,23) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',3,23) @@ -6191,37 +6191,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',4,53) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar epsilon . LexToken(cpar,')',4,61) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar arg_list_empty . LexToken(cpar,')',4,61) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args . LexToken(cpar,')',4,61) @@ -6268,37 +6268,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args cpar . LexToken(ccur,'}',5,67) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['print','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) + yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot func_call . LexToken(ccur,'}',5,67) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : class type ocur def_func semi epsilon . LexToken(ccur,'}',6,70) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : class type ocur def_func semi feature_list . LexToken(ccur,'}',6,70) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 14 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['test1',':','Int'] and goto state 17 - yacc.py: 506:Result : ( ( id] with ['test3'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',12,146) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',12,146) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',12,146) @@ -6490,27 +6490,27 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur num . LexToken(minus,'-',13,165) yacc.py: 471:Action : Reduce rule [atom -> num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 160 - yacc.py: 506:Result : ( base_call] with [] and goto state 160 + yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 - yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( string] with ['1'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 + yacc.py: 506:Result : ( id colon type] with ['a',':','Alpha'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) + yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param . LexToken(comma,',',19,226) @@ -6678,24 +6678,24 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon type . LexToken(cpar,')',19,234) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['b',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) + yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 - yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 + yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 95 yacc.py: 430:Defaulted state 95: Reduce using 33 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals . LexToken(cpar,')',19,234) @@ -6732,12 +6732,12 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon type . LexToken(comma,',',20,265) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['count',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) + yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) yacc.py: 410: yacc.py: 411:State : 130 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let param . LexToken(comma,',',20,265) - yacc.py: 471:Action : Reduce rule [let_assign -> param] with [] and goto state 129 - yacc.py: 506:Result : ( param] with [] and goto state 129 + yacc.py: 506:Result : ( id colon type] with ['pow',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) + yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 130 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param . LexToken(larrow,'<-',20,276) @@ -6771,53 +6771,53 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow num . LexToken(in,'in',21,329) yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 - yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 + yacc.py: 506:Result : ( let_assign] with [] and goto state 197 - yacc.py: 506:Result : ([ let_assign] with [] and goto state 197 + yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 - yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 + yacc.py: 506:Result : ([ num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 135 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 196 - yacc.py: 506:Result : ( comp] with [] and goto state 196 + yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',26,389) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',26,389) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',26,389) @@ -7031,37 +7031,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new type . LexToken(comma,',',27,424) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ id opar args cpar] with ['testing2','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',30,450) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',30,450) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',30,450) @@ -7236,27 +7236,27 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar num . LexToken(plus,'+',31,480) yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 - yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',33,543) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',33,543) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar epsilon . LexToken(cpar,')',37,601) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list_empty . LexToken(cpar,')',37,601) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',37,601) @@ -7660,48 +7660,48 @@ yacc.py: 411:State : 93 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id opar string . LexToken(cpar,')',38,646) yacc.py: 471:Action : Reduce rule [atom -> string] with ['reached!!\n'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi epsilon . LexToken(ccur,'}',40,655) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi feature_list . LexToken(ccur,'}',40,655) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( ( VariableInfo: except StopIteration: return self.parent.find_local(vname, self.index) if self.parent else None - def find_attribute(self, vname, index=None) : + def find_attribute(self, vname, index=None): locals = self.attributes if index is None else itt.islice(self.attributes, index) try: return next(x for x in locals if x.name == vname) From 859e723ee56349be35e0c9e916a1bd81d450025a Mon Sep 17 00:00:00 2001 From: Amanda Marrero Date: Fri, 6 Nov 2020 20:36:54 -0700 Subject: [PATCH 31/60] Finishing simple nodes --- src/codegen/cil_ast.py | 45 +---- src/codegen/visitors/base_mips_visitor.py | 6 +- src/codegen/visitors/cil_visitor.py | 30 +--- src/codegen/visitors/mips_visitor.py | 191 +++++++++++++++++++--- 4 files changed, 187 insertions(+), 85 deletions(-) diff --git a/src/codegen/cil_ast.py b/src/codegen/cil_ast.py index 164990e9..cdaf40c9 100644 --- a/src/codegen/cil_ast.py +++ b/src/codegen/cil_ast.py @@ -1,7 +1,6 @@ class Node: pass - class ProgramNode(Node): def __init__(self, dottypes, dotdata, dotcode, idx=None): self.dottypes = dottypes @@ -9,7 +8,6 @@ def __init__(self, dottypes, dotdata, dotcode, idx=None): self.dotcode = dotcode self.index = idx - class TypeNode(Node): def __init__(self, name, idx=None): self.name = name @@ -17,7 +15,6 @@ def __init__(self, name, idx=None): self.methods = [] self.index = idx - class DataNode(Node): def __init__(self, vname, value, idx=None): self.name = vname @@ -33,19 +30,16 @@ def __init__(self, fname, params, localvars, instructions, idx=None): self.instructions = instructions self.index = idx - class ParamNode(Node): def __init__(self, name, idx=None): self.name = name self.index = idx - class LocalNode(Node): def __init__(self, name, idx=None): self.name = name self.index = idx - class InstructionNode(Node): def __init__(self, idx=None): self.in1 = None @@ -53,7 +47,6 @@ def __init__(self, idx=None): self.out = None self.idx = idx - class AssignNode(InstructionNode): def __init__(self, dest, source, idx=None): super().__init__(idx) @@ -72,19 +65,12 @@ def __init__(self, dest, expr, idx=None): self.in1 = expr self.dest = dest - class NotNode(UnaryNode): pass - -class BinaryNotNode(UnaryNode): - pass - - class IsVoidNode(UnaryNode): pass - class BinaryNode(InstructionNode): def __init__(self, dest, left, right, idx=None): super().__init__(idx) @@ -96,22 +82,26 @@ def __init__(self, dest, left, right, idx=None): self.in2 = right self.out = dest - class PlusNode(BinaryNode): pass - class MinusNode(BinaryNode): pass - class StarNode(BinaryNode): pass - class DivNode(BinaryNode): pass +class LessNode(BinaryNode): + pass + +class LessEqNode(BinaryNode): + pass + +class EqualNode(BinaryNode): + pass class GetAttribNode(InstructionNode): def __init__(self, obj, attr, dest, idx=None): @@ -123,7 +113,6 @@ def __init__(self, obj, attr, dest, idx=None): self.out = dest self.in1 = obj - class SetAttribNode(InstructionNode): def __init__(self, obj, attr, value, idx=None): super().__init__(idx) @@ -135,15 +124,12 @@ def __init__(self, obj, attr, value, idx=None): self.out = obj self.in1 = value - class GetIndexNode(InstructionNode): pass - class SetIndexNode(InstructionNode): pass - class AllocateNode(InstructionNode): def __init__(self, itype, dest, idx=None): super().__init__(idx) @@ -152,11 +138,9 @@ def __init__(self, itype, dest, idx=None): self.out = dest - class ArrayNode(InstructionNode): pass - class TypeOfNode(InstructionNode): def __init__(self, obj, dest, idx=None): super().__init__(idx) @@ -166,26 +150,23 @@ def __init__(self, obj, dest, idx=None): self.out = dest self.in1 = obj - class LabelNode(InstructionNode): def __init__(self, label, idx=None): super().__init__(idx) self.label = label - class GotoNode(InstructionNode): def __init__(self, label, idx=None): super().__init__(idx) self.label = label - class GotoIfNode(InstructionNode): def __init__(self, cond, label, idx=None): super().__init__(idx) self.cond = cond self.label = label - self.in1 = cond + self.in1 = cond class StaticCallNode(InstructionNode): def __init__(self, function, dest, idx=None): @@ -195,7 +176,6 @@ def __init__(self, function, dest, idx=None): self.out = dest - class DynamicCallNode(InstructionNode): def __init__(self, xtype, method, dest, idx=None): super().__init__(idx) @@ -205,7 +185,6 @@ def __init__(self, xtype, method, dest, idx=None): self.out = dest - class ArgNode(InstructionNode): def __init__(self, name, idx=None): super().__init__(idx) @@ -216,7 +195,6 @@ def __init__(self, value, idx=None): super().__init__(idx) self.value = value - class LoadNode(InstructionNode): def __init__(self, dest, msg, idx=None): super().__init__(idx) @@ -224,7 +202,6 @@ def __init__(self, dest, msg, idx=None): self.msg = msg self.out = dest - self.in1 = msg class LengthNode(InstructionNode): def __init__(self, dest, arg, idx=None): @@ -235,7 +212,6 @@ def __init__(self, dest, arg, idx=None): self.out = dest self.in1 = arg - class ConcatNode(InstructionNode): def __init__(self, dest, arg1, arg2, idx=None): super().__init__(idx) @@ -259,7 +235,6 @@ def __init__(self, dest, word, n, idx=None): self.in1 = word self.in2 = n - class SubstringNode(InstructionNode): def __init__(self, dest, word, n, idx=None): super().__init__(idx) @@ -271,7 +246,6 @@ def __init__(self, dest, word, n, idx=None): self.in1 = word self.in2 = n - class ToStrNode(InstructionNode): def __init__(self, dest, ivalue, idx=None): super().__init__(idx) @@ -281,7 +255,6 @@ def __init__(self, dest, ivalue, idx=None): self.out = dest self.in1 = ivalue - class ReadNode(InstructionNode): def __init__(self, dest, idx=None): super().__init__(idx) diff --git a/src/codegen/visitors/base_mips_visitor.py b/src/codegen/visitors/base_mips_visitor.py index 8b8657d2..053d89ff 100644 --- a/src/codegen/visitors/base_mips_visitor.py +++ b/src/codegen/visitors/base_mips_visitor.py @@ -5,18 +5,20 @@ class BaseCILToMIPSVisitor: def __init__(self): - self.code = [] + self.code: list = [] self.initialize_data_code() self.initialize_type_code() self.symbol_table = SymbolTable() - local_reg_list = ['t0', 't1', 't2', 't3', 't4', 't5', 't6', 't7', 't8', 't9'] + local_reg_list = ['t0', 't1', 't2', 't3', 't4', 't5', 't6', 't7', 't8'] + # temp registers: t8, t9, voy a usarlos para llevarlos de global_reg_list = ['s0', 's1', 's2', 's3', 's4', 's5', 's6', 's7'] # Not sure if i should only use local registers self.local_reg = RegisterDescriptor(local_reg_list) self.global_reg = RegisterDescriptor(global_reg_list) self.usable_reg = RegisterDescriptor(local_reg_list + global_reg_list) self.addr_desc = AddressDescriptor() + self.strings = {} def initialize_data_code(self): diff --git a/src/codegen/visitors/cil_visitor.py b/src/codegen/visitors/cil_visitor.py index 232231d8..f62a3f67 100644 --- a/src/codegen/visitors/cil_visitor.py +++ b/src/codegen/visitors/cil_visitor.py @@ -313,33 +313,11 @@ def visit(self, node: OptionNode, scope: Scope, expr, expr_type, next_label): @visitor.when(NotNode) def visit(self, node: NotNode, scope: Scope): - """ - expr = - IF expr GOTO true - res = 1 - GOTO end - LABEL true - res = 0 - LABEL end - """ - #? No sé si representar un no... - result = self.define_internal_local() - expr, _ = self.visit(node.expr, scope) - - true_label = cil.LabelNode('true') - end_label = cil.LabelNode('end') - self.register_instruction(cil.GotoIfNode(expr, true_label)) - self.register_instruction(cil.AssignNode(result, 1)) - self.register_instruction(cil.GotoNode(end_label)) - self.register_instruction(true_label) - self.register_instruction(cil.AssignNode(result, 0)) - self.register_instruction(end_label) - # return self._define_unary_node(node, scope, cil.NotNode) - return result, BoolType() + return self._define_unary_node(node, scope, cil.NotNode) @visitor.when(BinaryNotNode) def visit(self, node: NotNode, scope: Scope): - return self._define_unary_node(node, scope, cil.BinaryNotNode) + return self._define_unary_node(node, scope, cil.NotNode) @visitor.when(IsVoidNode) @@ -364,7 +342,7 @@ def visit(self, node: DivNode, scope: Scope): @visitor.when(LessNode) def visit(self, node: LessNode, scope: Scope): - return self._define_binary_node(node, scope, cil.MinusNode) + return self._define_binary_node(node, scope, cil.LessNode) @visitor.when(LessEqNode) def visit(self, node: LessEqNode, scope: Scope): @@ -372,4 +350,4 @@ def visit(self, node: LessEqNode, scope: Scope): @visitor.when(EqualNode) def visit(self, node: EqualNode, scope: Scope): - return self._define_binary_node(node, scope, cil.MinusNode) + return self._define_binary_node(node, scope, cil.EqualNode) diff --git a/src/codegen/visitors/mips_visitor.py b/src/codegen/visitors/mips_visitor.py index 7ab1cf72..a0aab17c 100644 --- a/src/codegen/visitors/mips_visitor.py +++ b/src/codegen/visitors/mips_visitor.py @@ -2,7 +2,7 @@ from utils import visitor from codegen.visitors.base_mips_visitor import BaseCILToMIPSVisitor from codegen.tools import SymbolTable, AddressDescriptor, RegisterDescriptor - +from semantic.tools import VariableInfo class CILToMIPSVistor(BaseCILToMIPSVisitor): ''' @@ -50,16 +50,19 @@ def visit(self, node:TypeNode): @visitor.when(DataNode) def visit(self, node:DataNode): - self.data_code.append(f"{node.name}: .asciiz \"{node.value}\"") + self.data_code.append(f"{node.name}: .asciiz \"{node.value}\"") + self.strings[node.value] = node.name @visitor.when(FunctionNode) def visit(self, node:FunctionNode): + self.code.append(f'{node.name}:') for param in node.params: self.visit(param) for var in node.localvars: self.visit(var) blocks = self.get_basic_blocks(node.instructions) self.next_use = self.construct_next_use(blocks) + for block in blocks: self.block = block for inst in block: @@ -72,41 +75,177 @@ def visit(self, node:ParamNode): register = self.addr_desc.get_var_reg(node.name) self.code.append(f'sw $sp, ${register} ($sp)') - # @visitor.when(LocalNode) - # def visit(self, node:LocalNode): - # pass + @visitor.when(LocalNode) + def visit(self, node:LocalNode): + # TODO: initialize variables + pass @visitor.when(AssignNode) def visit(self, node:AssignNode): - pass + rdest = self.addr_desc.get_var_reg(node.dest.name) + if isinstance(node.source, VariableInfo): + rsrc = self.addr_desc.get_var_reg(node.source.name) + self.code.append(f'move ${rdest}, ${rsrc}') + elif isinstance(node.source, int): + self.code.append(f'li ${rdest}, ${node.source}') + elif isinstance(node.source, str): # esto nunca se debe ejecutar (se llama a load node) + self.code.append(f'la ${rdest}, {self.strings[node.source]}') @visitor.when(NotNode) def visit(self, node:NotNode): - pass + # TODO: esta instruccion solo funciona con registros, así que revisar si al formar el nodo los operadores son variables + rdest = self.addr_desc.get_var_reg(node.dest) + rsrc = self.addr_desc.get_var_reg(node.expr) + self.code.append(f'not {rdest}, {rsrc}') - @visitor.when(BinaryNotNode) - def visit(self, node:BinaryNotNode): - pass @visitor.when(IsVoidNode) def visit(self, node:IsVoidNode): pass + @visitor.when(PlusNode) def visit(self, node:PlusNode): - pass + rdest = self.addr_desc.get_var_reg(node.dest.name) + if isinstance(node.left, VariableInfo): + rleft = self.addr_desc.get_var_reg(node.left.name) + if isinstance(node.right, VariableInfo): + rright = self.addr_desc.get_var_reg(node.right.name) + self.code.append(f"add ${rdest}, ${rleft}, ${rright}") + elif isinstance(node.right, int): + self.code.append(f"addi ${rdest}, ${rleft}, {node.right}") + elif isinstance(node.left, int): + if isinstance(node.right, int): + self.code.append(f"li ${rdest}, {node.left + node.right}") + elif isinstance(node.right, VariableInfo): + rright = self.addr_desc.get_var_reg(node.right.name) + self.code.append(f"addi ${rdest}, ${node.left}, ${rright}") + @visitor.when(MinusNode) def visit(self, node:MinusNode): - pass + rdest = self.addr_desc.get_var_reg(node.dest.name) + if isinstance(node.left, VariableInfo): + rleft = self.addr_desc.get_var_reg(node.left.name) + if isinstance(node.right, VariableInfo): + rright = self.addr_desc.get_var_reg(node.right.name) + self.code.append(f"sub ${rdest}, ${rleft}, ${rright}") + elif isinstance(node.right, int): + self.code.append(f"addi ${rdest}, ${rleft}, -{node.right}") + elif isinstance(node.left, int): + if isinstance(node.right, int): + self.code.append(f"li ${rdest}, {node.left-node.right}") + elif isinstance(node.right, VariableInfo): + rright = self.addr_desc.get_var_reg(node.right.name) + self.code.append(f"sub $t9, $zero, {rright}") + self.code.append(f"addi ${rdest}, $t9, {node.left}") + @visitor.when(StarNode) def visit(self, node:StarNode): - pass + rdest = self.addr_desc.get_var_reg(node.dest.name) + if isinstance(node.left, VariableInfo): + rleft = self.addr_desc.get_var_reg(node.left.name) + if isinstance(node.right, VariableInfo): + rright = self.addr_desc.get_var_reg(node.right.name) + self.code.append(f"mult ${rleft}, ${rright}") + self.code.append(f"mflo ${rdest}") + elif isinstance(node.right, int): + self.code.append(f"li $t9, {node.right}") + self.code.append(f"mult ${rleft}, $t9") + self.code.append(f"mflo ${rdest}") + elif isinstance(node.left, int): + if isinstance(node.right, int): + self.code.append(f"li ${rdest}, {node.left*node.right}") + elif isinstance(node.right, VariableInfo): + rright = self.addr_desc.get_var_reg(node.right.name) + self.code.append(f"li $t9, {node.left}") + self.code.append(f"mult $t9, ${rright}") + self.code.append(f"mflo ${rdest}") + @visitor.when(DivNode) def visit(self, node:DivNode): - pass + rdest = self.addr_desc.get_var_reg(node.dest.name) + if isinstance(node.left, VariableInfo): + rleft = self.addr_desc.get_var_reg(node.left.name) + if isinstance(node.right, VariableInfo): + rright = self.addr_desc.get_var_reg(node.right.name) + self.code.append(f"div ${rleft}, ${rright}") + self.code.append(f"mflo ${rdest}") + elif isinstance(node.right, int): + self.code.append(f"li $t9, {node.right}") + self.code.append(f"div ${rleft}, $t9") + self.code.append(f"mflo ${rdest}") + elif isinstance(node.left, int): + if isinstance(node.right, int): + self.code.append(f"li ${rdest}, {node.left / node.right}") + elif isinstance(node.right, VariableInfo): + rright = self.addr_desc.get_var_reg(node.right.name) + self.code.append(f"li $t9, {node.left}") + self.code.append(f"div ${rright}, $t9") + self.code.append(f"mflo ${rdest}") + + + @visitor.when(LessNode) + def visit(self, node:LessNode): + rdest = self.addr_desc.get_var_reg(node.dest.name) + if isinstance(node.left, VariableInfo): + rleft = self.addr_desc.get_var_reg(node.left.name) + if isinstance(node.right, VariableInfo): + rright = self.addr_desc.get_var_reg(node.right.name) + self.code.append(f"slt ${rdest}, ${rleft}, ${rright}") + elif isinstance(node.right, int): + self.code.append(f"li $t9, {node.right}") + self.code.append(f"slt ${rdest}, ${rleft}, $t9") + elif isinstance(node.left, int): + if isinstance(node.right, int): + self.code.append(f"li ${rdest}, {int(node.left < node.right)}") + elif isinstance(node.right, VariableInfo): + rright = self.addr_desc.get_var_reg(node.right.name) + self.code.append(f"li $t9, {node.left}") + self.code.append(f"slt ${rdest}, $t9, {rright}") + + + @visitor.when(LessEqNode) + def visit(self, node:MinusNode): + rdest = self.addr_desc.get_var_reg(node.dest.name) + if isinstance(node.left, VariableInfo): + rleft = self.addr_desc.get_var_reg(node.left.name) + if isinstance(node.right, VariableInfo): + rright = self.addr_desc.get_var_reg(node.right.name) + self.code.append(f"sle ${rdest}, ${rleft}, ${rright}") + elif isinstance(node.right, int): + self.code.append(f"li $t9, {node.right}") + self.code.append(f"sle ${rdest}, ${rleft}, $t9") + elif isinstance(node.left, int): + if isinstance(node.right, int): + self.code.append(f"li ${rdest}, {int(node.left <= node.right)}") + elif isinstance(node.right, VariableInfo): + rright = self.addr_desc.get_var_reg(node.right.name) + self.code.append(f"li $t9, {node.left}") + self.code.append(f"sle ${rdest}, $t9, {rright}") + + + @visitor.when(EqualNode) + def visit(self, node:MinusNode): + rdest = self.addr_desc.get_var_reg(node.dest.name) + if isinstance(node.left, VariableInfo): + rleft = self.addr_desc.get_var_reg(node.left.name) + if isinstance(node.right, VariableInfo): + rright = self.addr_desc.get_var_reg(node.right.name) + self.code.append(f"seq ${rdest}, ${rleft}, ${rright}") + elif isinstance(node.right, int): + self.code.append(f"li $t9, {node.right}") + self.code.append(f"seq ${rdest}, ${rleft}, $t9") + elif isinstance(node.left, int): + if isinstance(node.right, int): + self.code.append(f"li ${rdest}, {int(node.left <= node.right)}") + elif isinstance(node.right, VariableInfo): + rright = self.addr_desc.get_var_reg(node.right.name) + self.code.append(f"li $t9, {node.left}") + self.code.append(f"seq ${rdest}, $t9, {rright}") + @visitor.when(GetAttribNode) def visit(self, node:GetAttribNode): @@ -126,23 +265,31 @@ def visit(self, node:TypeOfNode): @visitor.when(LabelNode) def visit(self, node:LabelNode): - pass + self.code.append(f'{node.label}') @visitor.when(GotoNode) def visit(self, node:GotoNode): - pass + self.code.append(f'j {node.label}') @visitor.when(GotoIfNode) def visit(self, node:GotoIfNode): - pass + if isinstance(node.cond, VariableInfo): + reg = self.addr_desc.get_var_reg(node.cond.name) + self.code.append(f'bnez ${reg}, {node.label}') + elif isinstance(node.cond, int): + self.code.append(f'li $t9, {node.cond}') + self.code.append(f'bnez $t9, {node.label}') @visitor.when(StaticCallNode) def visit(self, node:StaticCallNode): - pass + self.code.append('move $fp, $sp') + self.code.append('addiu $sp, $sp, 10') # Size of the method or only params? + self.code.append(f'jal {node.function}') + self.code.append(f'move ${node.dest.name}, $v0') # v0 es usado para guardar el valor de retorno @visitor.when(DynamicCallNode) def visit(self, node:DynamicCallNode): - pass + # TODO: Buscar cómo tratar con las instancias @visitor.when(ArgNode) def visit(self, node:ArgNode): @@ -150,11 +297,13 @@ def visit(self, node:ArgNode): @visitor.when(ReturnNode) def visit(self, node:ReturnNode): - pass + self.code.append(f'addiu $sp, $sp, 10') # method size or only params? + self.code.append(f'jr $ra') @visitor.when(LoadNode) def visit(self, node:LoadNode): - pass + var_name = self.strings[node.msg] + self.code.append(f'la ${node.dest}, {var_name}') @visitor.when(SelfNode) def visit(self, node:SelfNode): From b3c473d9373135f3e84710b3d60fe442e128fec0 Mon Sep 17 00:00:00 2001 From: Amanda Marrero Date: Sun, 8 Nov 2020 12:17:58 -0700 Subject: [PATCH 32/60] Finishing method call architecture --- src/codegen/__init__.py | 2 +- .../__pycache__/__init__.cpython-37.pyc | Bin 723 -> 691 bytes .../__pycache__/cil_ast.cpython-37.pyc | Bin 11819 -> 12131 bytes src/codegen/cil_ast.py | 10 +- src/codegen/tools.py | 29 +- .../cil_format_visitor.cpython-37.pyc | Bin 5539 -> 6014 bytes .../__pycache__/cil_visitor.cpython-37.pyc | Bin 11842 -> 11994 bytes src/codegen/visitors/base_mips_visitor.py | 75 +- src/codegen/visitors/cil_format_visitor.py | 6 +- src/codegen/visitors/cil_visitor.py | 52 +- src/codegen/visitors/mips_visitor.py | 87 +- src/cool_parser/output_parser/parselog.txt | 762 +++++++++--------- 12 files changed, 559 insertions(+), 464 deletions(-) diff --git a/src/codegen/__init__.py b/src/codegen/__init__.py index 4cfcf538..6a683301 100644 --- a/src/codegen/__init__.py +++ b/src/codegen/__init__.py @@ -8,6 +8,6 @@ def codegen_pipeline(context, ast, scope): cool_to_cil = COOLToCILVisitor(context) cil_ast = cool_to_cil.visit(ast, scope) formatter = get_formatter() - cil_to_mips = CILToMIPSVistor().visit(cil_ast) + # cil_to_mips = CILToMIPSVistor().visit(cil_ast) print(formatter(cil_ast)) return ast, context, scope, cil_ast \ No newline at end of file diff --git a/src/codegen/__pycache__/__init__.cpython-37.pyc b/src/codegen/__pycache__/__init__.cpython-37.pyc index 3ee5965fa418a95289e2211ac62aad8eb72396aa..315b50ccde01e52a3b7482f09c028564e2babf01 100644 GIT binary patch delta 148 zcmcc2x|x;NiI7Oi9`;+{N}u~CQzsG5P10|^5JI#6)N5U diff --git a/src/codegen/__pycache__/cil_ast.cpython-37.pyc b/src/codegen/__pycache__/cil_ast.cpython-37.pyc index cfb80ccba81c645cd0311b9126108130f6bf5313..79dc81f2b1e228b2d2ce787961f73c4fbb856f9d 100644 GIT binary patch delta 1916 zcmY*ZYfPI}818|7A1(CuwS|`6fR2^cSn zi7^phBWjHMF{3f~N2mYHOqMvKLB(X#gv4c0<0Af1H#7g3`M#$#e(TA1dY)yun$#h#QOAaL;bYLQgfHLDxxknN3;J=UhcEP-%mlAWqpSdS zq$|t;@5{r?4*$x3F%SHaH^qvf->|`g@Q)$E%An71I~E@ddFtSjbzP1k z!)xIYe}MJDaoemEK_U(lRv+B5^(%FVM)6DKU}s>w4z_GjIH5F3^+=3EqtXIDC=F5r zqA9qDsLNh2H6oe;lf6Z6=uf6zQKC{4GIOwOCskiwKC-Fqv%r*yvG2_+_V#LA&Q5T(!R-??skB1VfGxI|XUSoYIWMNsVi>a4mPvXI3(<(mrHXVb;|GzZAxl{fM5?=$*J>5A)3Gs1cQu+)Xr1~in!!5^?2 zWkmFo;egYHSLZvc3$M;;XP~(a*=_lBGX40Xx+{rHW;R*OHYqKqpE{G|y~K+>$V~bP z;uLLxC=+f3#_;0nbRQGFTVs!?@mxs>m?HHKZbOq$$gZ^wvkzHCa+G+^Ia>#xhb?!f zas*wkXq1i!rM1!^DdlmeP=cGKHLh#qrIBzXlIbPBAXMUL`&^?Ehcjg}@M4i4zW2Ie z(JX^CXtZQclBlhp7F79~f*#ny>0qzYhwP?Cu1_R&C%D3nilcP{58<>jfF9R1UIW6b zt^76ES6R+(!oBiYWf1K@YJ3KT&$|^M47SX+?a7k z6Zk8A+Tg!2*af$$`W1S0?rMTZMezCRry&t3VLI@Jr{poT-`BynkvLonuQDSXt{H=^ zsNQT~|L^9w2>iWfo=uAUY``POlnD&AYP=@U>kt%2Rpx?~Xu>sx_9Bg)@X>GtZbv&= z9n{qNS7XR4bASahwhdr@iL1L!35% z(+YE1H%|3)Dv*y;NBMF}f=ihWKCShRkKovnYs(YOV3V-r*^Jn7u@#7(Mwyns%NP(F Ug|7ks^LJy7HWS(lkU_Qo0Kwdq^Z)<= delta 1742 zcmYjRYfM~K5Z(iO?=H*kaxbraun(5U!rfiowQOrGu(So%1=z~ce2%$s?DXGXR?o4I}Ey8FL~CWmyDYb+Yozn zFJkYw4Y3`uPxmAC3!I0zR1Y8y2&^D3)5{T;3#=lp&?^yF3V->CgL)O>DuD|SSL+&L z?HXroEZ2aCRO`t;gVqO6E7~nXMe{;>Yc z+F{c+!eS7ypJoYo%^tPbVkc+D_(D%=9$E{+Y6!D+80TCT3Nzy&xKbQ}FYS$L7>WK2 zO&EGTEs)GRFV`T;YoRynV?$t5M%4%sgBhj~;pDPXFV!KdL$?|QhuR?3BRT=s5k05Y zOAUyoAebM8dupB9h-en)&P5s_;Mfn>3!ayEAk+mKQZ6@2jEB7eZ@Y%o zeQ2|WbLaGZBAOxh5Zf>AxDGen1JVO%aTz{w#^LdjxNScoEjt}k+UhFYDe0G5kiPNKc{8sz( z;g&brlKrG%MA8jdBdkZ0c^Nsilh}*mdwF_%{zOX8I4k|AN2Mp`7iP!#K|0d?8F?37 zU^^~3YteaNVPgr!SafSyT!A~Kq5PY)$B2S*v8c51Ns)v@NZcUR zc5xgMCGcS&Kzr@t3)^{vLV79Nw`9EI2NGp*sRNmBpu02uEI#K%rS!`dRQ(VATafUr8zKmbtgNk7(juyA!^|CljRGyc+ z5%C_O{tE)ZQ8j_Y-3%uQ;p9ee6}BoX*cMi>6V|FarH9bwUsw*tp}CsN)D(Cxyi@Hb zvn(?MyHX4mEg>gSV`A`URTo^+&cavKepUzvL&wxUR1~oPZ`%h~LmSKov*9E10P4I9 zhP5~pM<$>${A@VS+g^XDh4BiaIp}j`OruJ4%(m~B6oZ*RZkEVfI8(X4g!>O-u zYA2k!2&d-3n@CV4b1GU+HOi?NIn^MiBI8s;oJxeZlAw=~A0R<5&FQT;rJPenIpvL0 zQaDA-DLOu2$U%98mV>J%2W-{m^;4$oM#YT7q~s_v4m18+6r&i{?SG?^tEAUC$XGJ$ OBwUldRSXMyG5rU7A8{-I diff --git a/src/codegen/cil_ast.py b/src/codegen/cil_ast.py index cdaf40c9..f8014f40 100644 --- a/src/codegen/cil_ast.py +++ b/src/codegen/cil_ast.py @@ -169,19 +169,21 @@ def __init__(self, cond, label, idx=None): self.in1 = cond class StaticCallNode(InstructionNode): - def __init__(self, function, dest, idx=None): + def __init__(self, function, dest, args, idx=None): super().__init__(idx) self.function = function self.dest = dest + self.args = args self.out = dest class DynamicCallNode(InstructionNode): - def __init__(self, xtype, method, dest, idx=None): + def __init__(self, xtype, method, dest, args, idx=None): super().__init__(idx) self.type = xtype self.method = method self.dest = dest + self.args = args self.out = dest @@ -190,11 +192,15 @@ def __init__(self, name, idx=None): super().__init__(idx) self.name = name + self.dest = name + class ReturnNode(InstructionNode): def __init__(self, value, idx=None): super().__init__(idx) self.value = value + self.dest = value + class LoadNode(InstructionNode): def __init__(self, dest, msg, idx=None): super().__init__(idx) diff --git a/src/codegen/tools.py b/src/codegen/tools.py index e1424d76..c96744d1 100644 --- a/src/codegen/tools.py +++ b/src/codegen/tools.py @@ -81,9 +81,17 @@ def set_var_stack(self, name, stack_pos): def get_var_storage(self, name): return self.vars[name] +class RegisterType(Enum): + TEMP = 0 + GLOBAL = 1 + ARG = 2 + RETURN = 3 + class RegisterDescriptor: 'Stores the contents of each register' - def __init__(self, registers: List[str]): + def __init__(self): + registers = ['t0', 't1', 't2', 't3', 't4', 't5', 't6', 't7', 't8', \ + 's0', 's1', 's2', 's3', 's4', 's5', 's6', 's7', 'v1'] self.registers = {reg: None for reg in registers} def insert_register(self, register:str, content:str): @@ -94,5 +102,22 @@ def get_content(self, register: str): def find_empty_reg(self): for k, v in self.registers.items(): - if v == None: + if v is None: return k + + def used_registers(self): + return [(k, v) for k, v in self.registers.items() if v is not None] + + def empty_registers(self): + for k in self.registers: + self.registers[k] = None + + def type(self, name:str): + if name.startswith('t'): + return RegisterType.TEMP + elif name.startswith('s'): + return RegisterType.GLOBAL + elif name.startswith('a'): + return RegisterType.ARG + elif name.startswith('v'): + return RegisterType.RETURN diff --git a/src/codegen/visitors/__pycache__/cil_format_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/cil_format_visitor.cpython-37.pyc index fce4087cb75b284477d35d6ef9eae3154007aa8e..c6b808b54e2a5f8fad780951f740670008924afc 100644 GIT binary patch delta 517 zcmZ{hJ4*vW6ovO@-^Pu}#x+EdY>Y@&MHCT53>c%3NYFs=Q3$@)Cm3;(G{M5wLYrI0 zR2G&Z{uxPO;a||oLcB8|Hac)-&V6wBVD3l0#zG60)gjUOh(2ulT~DFwu8>TnN{W)I zGk9zCyO)8c) ziWkACfYfOsAm=$``aeitCs>7GH34f7Yypy3Qsc13K^Fxm8=$m?NvP|B^%GoA6}T)# z6G6)o zJ#7zh2$>)#-6hXFe6-WxKfl;_5LXNc%cP%|dlJjxP4`Cdg!bP_QX_#EW(+mQv2r|v Yf2Id)3DZtW-P3>-u;dIv0qf4#H(L;CLjV8( delta 264 zcmeyTw^*CciIA0GuxrXp#e^ev9G(!Au7 z%>2B`ANdp*y(SlOi%)hC=A68jPYS5ml+h0?vX@6&kyF7|Aq=ed7o&nEGgy0(Jje{T z+|-hc{1mVWK|u8;lm7_mFor?RieZd`ngKLb*pN|q@_S(`#yGH;qlmeSb>BlW0BKj XW^rZK1UAMZx5?V#DvWNE1H|A355Pq}oJ^R^lY{zlz{It!F(dIk#*Qw&d8WK z%XZi%^)B1U!zAQ&{L1Wt=TLWC#19+|hVwx=iPs!g%PTpr@PGp>utY%jz?Q;_^Fsku zg+BK;KwZcaF&24wi<(X?{XW4Gocfu98rVp~}qOk;mpJ6`vPx~r-7NzK+q z16jyuIk0I5NjkX;;)F4z$r755>M~57tYHZ9fRItPpI{rXz9NWyWhF6AG2G2?fT4+?XdRrHia)+^JRvK1tcszLA;h!3-i7Jdv8ls7u~cec zCZ3Rou&$;8e<||^i!NSgY??-krp$1L2>wNF@`nfPLcWV%(3{K)RX|^+TEh)|2Lt$&GQaZd< zg8yJn@x||gJVX$+RK1d=B7F=StSO0(nLHT5zsj~%FO!)L5NLV`wvpz7>#7T)2pxeH z{3BG3&xE=lhM$IZLyr8TWRHeN;T^mZJ_7GyW97Rva;-8AtA(zr<3P@8^%b~UNY(TU zn8lB`?tt$K*SEe7t%rGGNf7m@mq*U>fV!#~w$wdTyP3m$Z8@C8k7{efD(GRFA9iQt zY+@`G8&9O?~sjsktn5| zi?qT#UW^Pv9sU{l9_H}t#{JbVaJU|uotJ%F%>cuT3`2OiDGa-@cY8g$TX*28rfP8F zN>dx`#V?vWy=OT{ZQ~qS_-)H}=;aAGi$-$?>?6AaPd4v^eihD#z81c8Bm7YnzKqG} zeQ;pi{xRB)_cwR?<<0n_)t5-8@vWvPe%`zXmhqF84!kS6$G;Kbdg#P#EX5&^z(ngM zzq%L4c*SXk8Qjt~`GDj)i>2LD(=oX)Fq2V-^AgX$%)n*IR~XJS@O70J7+zy2q0=bG XAKF@6ehUKJeCXMEFX)B6I|cj=;NQP! delta 2073 zcmcIkT}&KR6rMA)vopIaly1uc3${yP3(Jp!HEjyD4L_xV2pWmC6-pO(!7j85cXkz; zSuxTSime(?ZA>+W)uM?pHio3eXcP6##>DtQ((HpVMqhl9X7H!A>||PZ_z4k=?~)=TV;Bps}W{$6T}%Q(Vf)Dk`p7BiGG zum<8jhAJHL`fFUm!yOi0Y+;S0d?7}GfP*zQ7i;f66ggrt=b4a7j+Rz)HghurKiu{#TqKS5;;%maiBMkFVRA>C%F{$^ z7F7&o3{oRwLzAs5Q#wyntB`=)mGhPtynwHi_;63jW9k(JzpL@#TO}=U0&kbx4_7g- zbd1{1l@7w&xKjEIEa5@_dldQEZ@~x4$I2#vI=9L{gB#1|?|DSc6TF^IhHh-FE{AWH z|JeCD96HI7I6=rGFOQHsd1EFyC2y77u0`F986CHxLssInc$l*Z{I+6eac=62J0X(M zq4Dr=bX+7+-_;JkVArni!TD}YCBT;DP?ZB9j`s#DU=kk<7QtB@35FnnuLkQNiJu4i zz>l8YD`4S|ySs~K=^w|naB@oY@ZWkF&dJr+ zQc0VT6;e*wqO(pJ#L}rpb;@?Go_;oB*cw?X>xXQ_T)TNZhS;(K&&c6ScC3?`Naa~e zxMmeur}VRLx&y0EbZSBb9t<4d@4;NOt1}=INBa8v0<2&z!^1?>q9INHiAiP@S9WZj z*@WMi{$oE_#drtrvuc}M+} z!==@xn3}}avf>@h^cRa~QaoHj-Bdu?;#^3*;Ku86gh% diff --git a/src/codegen/visitors/base_mips_visitor.py b/src/codegen/visitors/base_mips_visitor.py index 053d89ff..0e162c33 100644 --- a/src/codegen/visitors/base_mips_visitor.py +++ b/src/codegen/visitors/base_mips_visitor.py @@ -10,13 +10,11 @@ def __init__(self): self.initialize_type_code() self.symbol_table = SymbolTable() - local_reg_list = ['t0', 't1', 't2', 't3', 't4', 't5', 't6', 't7', 't8'] # temp registers: t8, t9, voy a usarlos para llevarlos de - global_reg_list = ['s0', 's1', 's2', 's3', 's4', 's5', 's6', 's7'] # Not sure if i should only use local registers self.local_reg = RegisterDescriptor(local_reg_list) self.global_reg = RegisterDescriptor(global_reg_list) - self.usable_reg = RegisterDescriptor(local_reg_list + global_reg_list) + self.reg_desc = RegisterDescriptor() self.addr_desc = AddressDescriptor() self.strings = {} @@ -116,36 +114,33 @@ def construct_next_use(self, basic_blocks: List[List[InstructionNode]]): def get_reg(self, inst: InstructionNode, reg_desc: RegisterDescriptor): rest_block = self.block[inst.idx-block[0].idx:] # return the block of instructions after the current instruction - code1 = get_reg_var(inst.in1, reg_desc, rest_block) if is_variable(inst.in1) else None - code2 = get_reg_var(inst.in2, reg_desc, rest_block) if is_variable(inst.in2) else None - code = code1 + code2 - + get_reg_var(inst.in1, reg_desc, rest_block) if is_variable(inst.in1) else None + get_reg_var(inst.in2, reg_desc, rest_block) if is_variable(inst.in2) else None + # Comprobar si se puede usar uno de estos registros tambien para el destino nu_entry = self.next_use[inst.idx] if nu_entry.in1islive and nu_entry.in1nextuse < inst.idx: update_register(inst.out, in1_reg) - return code + + return if nu_entry.in2islive and nu_entry.in2nextuse < inst.idx: update_register(inst.out, in2_reg) - return code + return # Si no buscar un registro para z por el otro procedimiento - code3 = get_reg_var(inst.out, reg_desc, rest_block) if is_variable(inst.out) else None + get_reg_var(inst.out, reg_desc, rest_block) if is_variable(inst.out) else None - return code + code3 - def get_reg_var(self, var, reg_desc: RegisterDescriptor): curr_inst = self.block[0] register = self.addr_desc.get_var_reg(var) if register is not None: # ya la variable está en un registro - return [] + return var_st = self.symbol_table.lookup(var) - register = reg_desc.find_empty_reg() if register is not None: update_register(var, register, reg_desc) - return [self.save_var_code(var)] + self.code.append(self.save_var_code(var)) + return # Choose a register that requires the minimal number of load and store instructions score = {} # keeps the score of each variable (the amount of times a variable in a register is used) @@ -161,11 +156,9 @@ def get_reg_var(self, var, reg_desc: RegisterDescriptor): n_var = min(score, key=lambda x: score[x]) register, memory, _ = self.addr_desc.get_var_storage(n_var) - code = [self.save_var_code(n_var)] update_register(var, register, reg_desc) - code.append(self.load_var_code(var) - return code + self.load_var_code(var) def _update_score(self, score, var): @@ -176,26 +169,60 @@ def _update_score(self, score, var): except: score[var] = 1 - def update_register(self, var, register, reg_desc: RegisterDescriptor): content = reg_desc.get_content(register) if content is not None: + self.save_var_code(content) self.addr_desc.set_var_reg(content, None) reg_desc.insert_register(register, var) self.addr_desc.set_var_reg(var, register) def save_var_code(self, var): + "Code to save a variable to memory" var_st = self.symbol_table.lookup(var) register, memory, _= self.addr_desc.get_var_storage(var) if var_st.scope == Scope.LOCAL: - return f"sw ${register}, -{memory}($fp)" + self.code.append(f"sw ${register}, -{memory}($fp)") else: - return f"sw ${register}, {memory}" + self.code.append(f"sw ${register}, {memory}") def load_var_code(self, var): + "Code to load a variable from memory" var_st = self.symbol_table.lookup(var) register, memory, _ = self.addr_desc.get_var_storage(var) - if var_st.scope = Scope.LOCAL: - return f'lw ${register}, -{memory}(fp)' + if var_st.scope == Scope.LOCAL: + self.code.append(f'lw ${register}, -{memory}(fp)') else: - return f'lw ${register}, {mem_addr}' \ No newline at end of file + self.code.append(f'lw ${register}, {mem_addr}') + + def load_used_reg(self, registers): + "Loads the used variables in there registers" + for reg in used_reg: + self.code.append('addiu $sp, $sp, 4') + self.code.append(f'lw ${reg}, ($sp)') + + def empty_registers(sef): + "Empty all used registers and saves there values to memory" + registers = self.reg_desc.used_registers() + for reg, var in registers: + self.save_var_code(var) + self.addr_desc.set_var_reg(content, None) + self.reg_desc.insert_register(reg, None) + + def push_register(self, register): + "Pushes the register to the stack" + self.code.append('addiu $sp, $sp, -4') + self.code.append(f'sw ${register}, ($sp)') + + def pop_register(self, register): + "Popes the register from the stack" + self.code.append('addiu $sp, $sp, 4') + self.code.append(f'lw ${register}, ($sp)') + + def save_to_register(self, expr): + "Aditional code to save an expression into a register. Returns the register" + if isinstance(expr, int): + self.code.append(f'li $t9, {expr}') + return 't9' + elif isinstance(expr, VariableInfo): + return self.addr_desc.get_var_reg(expr.name) \ No newline at end of file diff --git a/src/codegen/visitors/cil_format_visitor.py b/src/codegen/visitors/cil_format_visitor.py index 64c31b90..8617b83b 100644 --- a/src/codegen/visitors/cil_format_visitor.py +++ b/src/codegen/visitors/cil_format_visitor.py @@ -73,7 +73,8 @@ def visit(self, node: TypeOfNode): @visitor.when(StaticCallNode) def visit(self, node: StaticCallNode): - return f'{node.dest} = CALL {node.function}' + args = '\n\t'.join(self.visit(arg) for arg in node.args) + return f'{args}\n' + f'\t{node.dest} = CALL {node.function}' @visitor.when(LoadNode) def visit(self, node: LoadNode): @@ -81,7 +82,8 @@ def visit(self, node: LoadNode): @visitor.when(DynamicCallNode) def visit(self, node: DynamicCallNode): - return f'{node.dest} = VCALL {node.type} {node.method}' + args = '\n\t'.join(self.visit(arg) for arg in node.args) + return f'{args}\n' + f'\t{node.dest} = VCALL {node.type} {node.method}' @visitor.when(ArgNode) def visit(self, node: ArgNode): diff --git a/src/codegen/visitors/cil_visitor.py b/src/codegen/visitors/cil_visitor.py index f62a3f67..5dd69f07 100644 --- a/src/codegen/visitors/cil_visitor.py +++ b/src/codegen/visitors/cil_visitor.py @@ -18,11 +18,11 @@ def visit(self, node: ProgramNode, scope: Scope): instance = self.define_internal_local() result = self.define_internal_local() - self.register_instruction(cil.AllocateNode('Main', instance)) - self.register_instruction(cil.ArgNode(instance)) + self.register_instruction(cil.AllocateNode('Main', instance)) + # self.register_instruction(cil.ArgNode(instance)) name = self.to_function_name('main', 'Main') - self.register_instruction(cil.StaticCallNode(name, result)) + self.register_instruction(cil.StaticCallNode(name, result, [cil.ArgNode(instance)])) self.register_instruction(cil.ReturnNode(0)) self.current_function = None @@ -105,46 +105,52 @@ def _return_type(self, typex: Type, node): @visitor.when(CallNode) def visit(self, node: CallNode, scope: Scope): - result = self.define_internal_local() obj, otype = self.visit(node.obj, scope) args = [self.visit(arg, scope)[0] for arg in node.args] - - self.register_instruction(cil.ArgNode(obj)) - for arg in args: - self.register_instruction(cil.ArgNode(arg)) - + args_node = [cil.ArgNode(obj, self.index)] + [cil.ArgNode(arg, self.index) for arg in args] + + rtype = otype.get_method(node.id, node.pos).return_type + if isinstance(rtype, VoidType): + result = None + else: + result = self.define_internal_local() + name = self.to_function_name(node.id, otype.name) - self.register_instruction(cil.DynamicCallNode(otype.name, name, result)) + self.register_instruction(cil.DynamicCallNode(otype.name, name, result, args_node)) return result, self._return_type(otype, node) @visitor.when(BaseCallNode) def visit(self, node: BaseCallNode, scope: Scope): - result = self.define_internal_local() obj, otype = self.visit(node.obj, scope) args = [self.visit(arg, scope)[0] for arg in node.args] - - self.register_instruction(cil.ArgNode(obj)) - for arg in args: - self.register_instruction(cil.ArgNode(arg)) + args_node = [cil.ArgNode(obj, self.index)] + [cil.ArgNode(arg, self.index) for arg in args] + + rtype = otype.get_method(node.id, node.pos).return_type + if isinstance(rtype, VoidType): + result = None + else: + result = self.define_internal_local() name = self.to_function_name(node.id, node.type) - self.register_instruction(cil.DynamicCallNode(node.type, name, result)) + self.register_instruction(cil.DynamicCallNode(node.type, name, result, args_node)) return result, self._return_type(otype, node) @visitor.when(StaticCallNode) def visit(self, node: StaticCallNode, scope: Scope): - result = self.define_internal_local() args = [self.visit(arg, scope)[0] for arg in node.args] - - self.register_instruction(cil.ArgNode('self')) - for arg in args: - self.register_instruction(cil.ArgNode(arg)) - + args_node = [cil.ArgNode('self')] + [cil.ArgNode(arg, self.index) for arg in args] + name = self.to_function_name(node.id, self.current_type.name) - self.register_instruction(cil.StaticCallNode(name, result)) + rtype = self.current_type.get_method(node.id, node.pos).return_type + if isinstance(rtype, VoidType): + result = None + else: + result = self.define_internal_local() + + self.register_instruction(cil.StaticCallNode(name, result, args_node)) return result, self._return_type(self.current_type, node) @visitor.when(ConstantNumNode) diff --git a/src/codegen/visitors/mips_visitor.py b/src/codegen/visitors/mips_visitor.py index a0aab17c..c6fd35d3 100644 --- a/src/codegen/visitors/mips_visitor.py +++ b/src/codegen/visitors/mips_visitor.py @@ -56,29 +56,32 @@ def visit(self, node:DataNode): @visitor.when(FunctionNode) def visit(self, node:FunctionNode): self.code.append(f'{node.name}:') - for param in node.params: - self.visit(param) - for var in node.localvars: - self.visit(var) + for i, param in enumerate(node.params): # gets the params from the stack + self.visit(param, i) + self.pop_register('fp') # gets the frame pointer from the stack + for i, var in enumerate(node.localvars): + self.visit(var, i) blocks = self.get_basic_blocks(node.instructions) self.next_use = self.construct_next_use(blocks) for block in blocks: self.block = block for inst in block: - self.code += self.get_reg(inst, self.usable_reg) + self.get_reg(inst, self.reg_desc) self.visit(inst) @visitor.when(ParamNode) - def visit(self, node:ParamNode): - self.code.append('addiu $sp, $sp, -4') - register = self.addr_desc.get_var_reg(node.name) - self.code.append(f'sw $sp, ${register} ($sp)') + def visit(self, node:ParamNode, idx:int): + register = self.addr_desc.get_var_reg(node.name.name) + if idx <= 3: # los primeros 3 registros se guardan en a0-a3 + self.code.append(f'move ${register}, $a{idx}') + else: + self.pop_register(register) # pops the register with the param value from stack @visitor.when(LocalNode) - def visit(self, node:LocalNode): - # TODO: initialize variables - pass + def visit(self, node:LocalNode, idx:int): + self.addr_desc.set_var_addr(node.name, idx) # saves the address relative from the actual fp + self.code.append(f'addiu $sp, $sp, -4') # updates stack pointers (pushing this value) @visitor.when(AssignNode) def visit(self, node:AssignNode): @@ -90,15 +93,14 @@ def visit(self, node:AssignNode): self.code.append(f'li ${rdest}, ${node.source}') elif isinstance(node.source, str): # esto nunca se debe ejecutar (se llama a load node) self.code.append(f'la ${rdest}, {self.strings[node.source]}') + offset = self.locals.index(node.dest.name) @visitor.when(NotNode) def visit(self, node:NotNode): - # TODO: esta instruccion solo funciona con registros, así que revisar si al formar el nodo los operadores son variables rdest = self.addr_desc.get_var_reg(node.dest) - rsrc = self.addr_desc.get_var_reg(node.expr) + rscr = self.save_to_register(node.expr) self.code.append(f'not {rdest}, {rsrc}') - @visitor.when(IsVoidNode) def visit(self, node:IsVoidNode): pass @@ -273,31 +275,58 @@ def visit(self, node:GotoNode): @visitor.when(GotoIfNode) def visit(self, node:GotoIfNode): - if isinstance(node.cond, VariableInfo): - reg = self.addr_desc.get_var_reg(node.cond.name) - self.code.append(f'bnez ${reg}, {node.label}') - elif isinstance(node.cond, int): - self.code.append(f'li $t9, {node.cond}') - self.code.append(f'bnez $t9, {node.label}') + reg = self.save_to_register(node.cond) + self.code.append(f'bnez ${reg}, {node.label}') @visitor.when(StaticCallNode) def visit(self, node:StaticCallNode): - self.code.append('move $fp, $sp') - self.code.append('addiu $sp, $sp, 10') # Size of the method or only params? - self.code.append(f'jal {node.function}') - self.code.append(f'move ${node.dest.name}, $v0') # v0 es usado para guardar el valor de retorno + self.empty_registers() # empty all used registers and saves them to memory + + self.push_register('ra') # pushes ra register to the stack + self.pop_register('fp') # pop fp register from the stack + for i, arg in enumerate(node.args): # push the arguments to the stack + self.visit(arg, i) + self.push_register('fp') # pushes fp register to the stack + + self.code.append(f'jal {node.function}') # this function will consume the arguments + + if node.dest is not None: + rdest = self.addr_desc.get_var_reg(node.dest.name) + self.code.append(f'move ${rdest}, $v0') # v0 es usado para guardar el valor de retorno @visitor.when(DynamicCallNode) def visit(self, node:DynamicCallNode): # TODO: Buscar cómo tratar con las instancias - - @visitor.when(ArgNode) - def visit(self, node:ArgNode): pass + @visitor.when(ArgNode) + def visit(self, node:ArgNode, idx): + if idx <= 3: # los primeros 3 registros se guardan en a0-a2 + reg = f'a{idx}' + if isinstance(node.dest, VariableInfo): + rdest = self.addr_desc.get_var_reg(node.dest.name) + self.code.append(f'move ${reg}, ${rdest}') + elif isintance(node.dest, int): + self.code.append(f'li ${reg}, {node.dest}') + else: + self.code.append('addiu $sp, $sp, -4') + if isinstance(node.dest, VariableInfo): + reg = self.addr_desc.get_var_reg(node.dest.name) + self.code.append(f'sw ${reg}, ($sp)') + elif isinstance(node.dest, int): + self.code.append(f'li $t9, {node.dest}') + self.code.append(f'sw $t9, ($sp)') + @visitor.when(ReturnNode) def visit(self, node:ReturnNode): - self.code.append(f'addiu $sp, $sp, 10') # method size or only params? + self.pop_register('ra') # pop register ra from the stack + # save the return value + if isinstance(node.value, VariableInfo): + rdest = self.addr_desc.get_var_reg(node.value.name) + self.code.append(f'move $v0, {rdest}') + elif isinstance(node.value, int): + self.code.append(f'li $v0, {node.value}') + # return to the caller self.code.append(f'jr $ra') @visitor.when(LoadNode) diff --git a/src/cool_parser/output_parser/parselog.txt b/src/cool_parser/output_parser/parselog.txt index f551c115..eeee359e 100644 --- a/src/cool_parser/output_parser/parselog.txt +++ b/src/cool_parser/output_parser/parselog.txt @@ -6146,19 +6146,19 @@ yacc.py: 411:State : 32 yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',3,23) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',3,23) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',3,23) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',3,23) @@ -6191,37 +6191,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',4,53) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar epsilon . LexToken(cpar,')',4,61) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar arg_list_empty . LexToken(cpar,')',4,61) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args . LexToken(cpar,')',4,61) @@ -6268,37 +6268,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args cpar . LexToken(ccur,'}',5,67) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['print','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) + yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot func_call . LexToken(ccur,'}',5,67) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : class type ocur def_func semi epsilon . LexToken(ccur,'}',6,70) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : class type ocur def_func semi feature_list . LexToken(ccur,'}',6,70) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 14 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['test1',':','Int'] and goto state 17 - yacc.py: 506:Result : ( ( id] with ['test3'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',12,146) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',12,146) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',12,146) @@ -6490,27 +6490,27 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur num . LexToken(minus,'-',13,165) yacc.py: 471:Action : Reduce rule [atom -> num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 160 - yacc.py: 506:Result : ( base_call] with [] and goto state 160 + yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 - yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( string] with ['1'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 + yacc.py: 506:Result : ( id colon type] with ['a',':','Alpha'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) + yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param . LexToken(comma,',',19,226) @@ -6678,24 +6678,24 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon type . LexToken(cpar,')',19,234) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['b',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) + yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 - yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 + yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 95 yacc.py: 430:Defaulted state 95: Reduce using 33 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals . LexToken(cpar,')',19,234) @@ -6732,12 +6732,12 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon type . LexToken(comma,',',20,265) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['count',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) + yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) yacc.py: 410: yacc.py: 411:State : 130 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let param . LexToken(comma,',',20,265) - yacc.py: 471:Action : Reduce rule [let_assign -> param] with [] and goto state 129 - yacc.py: 506:Result : ( param] with [] and goto state 129 + yacc.py: 506:Result : ( id colon type] with ['pow',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) + yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 130 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param . LexToken(larrow,'<-',20,276) @@ -6771,53 +6771,53 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow num . LexToken(in,'in',21,329) yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 - yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 + yacc.py: 506:Result : ( let_assign] with [] and goto state 197 - yacc.py: 506:Result : ([ let_assign] with [] and goto state 197 + yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 - yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 + yacc.py: 506:Result : ([ num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 135 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 196 - yacc.py: 506:Result : ( comp] with [] and goto state 196 + yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',26,389) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',26,389) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',26,389) @@ -7031,37 +7031,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new type . LexToken(comma,',',27,424) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ id opar args cpar] with ['testing2','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',30,450) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',30,450) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',30,450) @@ -7236,27 +7236,27 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar num . LexToken(plus,'+',31,480) yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 - yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',33,543) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',33,543) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar epsilon . LexToken(cpar,')',37,601) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list_empty . LexToken(cpar,')',37,601) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',37,601) @@ -7660,48 +7660,48 @@ yacc.py: 411:State : 93 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id opar string . LexToken(cpar,')',38,646) yacc.py: 471:Action : Reduce rule [atom -> string] with ['reached!!\n'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi epsilon . LexToken(ccur,'}',40,655) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi feature_list . LexToken(ccur,'}',40,655) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( ( Date: Sun, 8 Nov 2020 23:35:03 -0700 Subject: [PATCH 33/60] Finishing all methods in mips visitor. I have to revisit reference variables --- src/codegen/__init__.py | 2 +- .../__pycache__/__init__.cpython-37.pyc | Bin 691 -> 723 bytes .../__pycache__/cil_ast.cpython-37.pyc | Bin 12131 -> 12041 bytes src/codegen/cil_ast.py | 11 +- src/codegen/tools.py | 135 +++- .../base_cil_visitor.cpython-37.pyc | Bin 6338 -> 6338 bytes .../cil_format_visitor.cpython-37.pyc | Bin 6014 -> 6007 bytes .../__pycache__/cil_visitor.cpython-37.pyc | Bin 11994 -> 12380 bytes src/codegen/visitors/base_cil_visitor.py | 2 +- src/codegen/visitors/base_mips_visitor.py | 103 +-- src/codegen/visitors/cil_format_visitor.py | 2 +- src/codegen/visitors/cil_visitor.py | 30 +- src/codegen/visitors/mips_visitor.py | 303 ++++--- src/cool_parser/output_parser/parselog.txt | 762 +++++++++--------- 14 files changed, 727 insertions(+), 623 deletions(-) diff --git a/src/codegen/__init__.py b/src/codegen/__init__.py index 6a683301..4cfcf538 100644 --- a/src/codegen/__init__.py +++ b/src/codegen/__init__.py @@ -8,6 +8,6 @@ def codegen_pipeline(context, ast, scope): cool_to_cil = COOLToCILVisitor(context) cil_ast = cool_to_cil.visit(ast, scope) formatter = get_formatter() - # cil_to_mips = CILToMIPSVistor().visit(cil_ast) + cil_to_mips = CILToMIPSVistor().visit(cil_ast) print(formatter(cil_ast)) return ast, context, scope, cil_ast \ No newline at end of file diff --git a/src/codegen/__pycache__/__init__.cpython-37.pyc b/src/codegen/__pycache__/__init__.cpython-37.pyc index 315b50ccde01e52a3b7482f09c028564e2babf01..05577f707ae1f7153c264846dbc41ea7fd6bac37 100644 GIT binary patch delta 130 zcmdnYdYP5iiI7rE@o^M V-~&oBFmeDP4l;34qS9ldkr%)Rqw z=K7n3rxzSO4o9g8e?M>E$ak+heC(C=`gboBubH#9!zSIU`<^iAzJd+09dU(TiMUc? z2jVK-kJvBqKEwe%h&U**6LClnBMwWfBCggWh$9kn#5H;?;#!Gai0kxv#Pvmm;#)e) zGn)y|jpH1&K9A$i-|bA zS)PPf)drqIV$$GANsq=Gl{B(5u&uVjle|I6Aex6GycK@o8KnVH4sIh_a5X56i1JY9 zYK4zoO}q)waa?<6HOU>@+>N{$*@D5-3}LMUZoAbIE3)*n!dO&;Y%stq@RHNtzGYrI zetOGtY-L4km8_g!F619PcBUXAC>0?x0W>kIu+w`BnS0P|DI`4yqlu9F6yme{(3qH= zS?MW))v|HrZe&ivvU>>p9_N3~ceyRAro3gO?`+4hVo2hg(u*UAsT1Le)2Y8J;u((d-E4ePh497JXf=Dbzd zMC`;}hloGRdy%+ii0hRT@ri%Ub{|P)pAXB-Zo>J%BJV@?HG{rS z>Z8F^E$zr|SN!4y+=qskAz7#Is+ZXjne%7xaAb}TqvBJ8Y8Y$N z34xkN*{D=~1$Sz4d;}F=8dM`vb)xop>o~GvLQ1zGT(`)_koejl9h1_}>o%-YB%PMh zAMoCLVY9xUPa^rfK|U$JY=2bj$=`?u_g?8A<2Q`dpfolNn{kWdS3~5CjJzJZ$mZl3 z4Eo|n`7A0-?4QcbVin$FrLdfsQRdNA0)He2!IM0}j>;$wSCg|miyqYwm6f&YP3g=F zH&PQ?4*iZA_b06n-z=`%=~x-dms_^o!D!QVOiF51D*yV<>B3AdCW|SeSd8u_<8 z%ce^-8f7QhoH1(R%o0C-;57bl&S=yhMi*n;9}>T!f7BmFGvl8ndd{s4ul}$%@5z0h z^PF?fJ@?)|p8Fx^7;rc?EBISxm*?H94ljFiHFkBS>WpR9Hl!FH!~3XWc=MHr?T8x; zA7WqLj@W_NZv+qrB(6prG(w0&64xMZG{T6(66=VYj0ob0#2oP!BZ@dGu@iB#5knlS z$lI?NY@YdO-8k}-Mh5vzUP0VyOdV9>)3D%*U-`4*4I3n#0WDRWDjYN5180J_;%oBD8zYy*MqBM`3oR(WubaL#`oMtxxkENFOJ` zKmFSw`}ai=)qI$E~&1ZDl#vKDx9s-z49Q{0sP%o48lz>hol z@(js5gN-ZfefX#`!&B(HX7Z<`e=&TTeFDFPXHx3`bYQ!BaiS5M%*+-Wn|Pu{1ls(`4#v* zo>iw%@fTR*X?VW%6sv+jVv5foXJs3wHX|cHOdMsiGE#?B+q8NJRWkuC@2E1l($m73fI{dL@D$grIjI=+X` au<9y~O1%n)1&2*qnw7?8-3H%xwEPWSXk+gH diff --git a/src/codegen/cil_ast.py b/src/codegen/cil_ast.py index f8014f40..ddfe5c1a 100644 --- a/src/codegen/cil_ast.py +++ b/src/codegen/cil_ast.py @@ -68,8 +68,6 @@ def __init__(self, dest, expr, idx=None): class NotNode(UnaryNode): pass -class IsVoidNode(UnaryNode): - pass class BinaryNode(InstructionNode): def __init__(self, dest, left, right, idx=None): @@ -104,23 +102,26 @@ class EqualNode(BinaryNode): pass class GetAttribNode(InstructionNode): - def __init__(self, obj, attr, dest, idx=None): + def __init__(self, obj, attr, typex, dest, idx=None): super().__init__(idx) self.obj = obj self.attr = attr + self.type_name = typex + # self.attr_offset = offset self.dest = dest self.out = dest self.in1 = obj class SetAttribNode(InstructionNode): - def __init__(self, obj, attr, value, idx=None): + def __init__(self, obj, attr, typex, value, idx=None): super().__init__(idx) self.obj = obj self.attr = attr + # self.attr_offset = offset self.value = value + self.type_name = typex - # TODO: Im not sure this is right, out shoul be attr and obj self.out = obj self.in1 = value diff --git a/src/codegen/tools.py b/src/codegen/tools.py index c96744d1..e853ef0d 100644 --- a/src/codegen/tools.py +++ b/src/codegen/tools.py @@ -1,4 +1,4 @@ -from typing import List +from typing import List, Dict from enum import Enum @@ -9,14 +9,10 @@ class Scope(Enum): class SymbolTabEntry: - def __init__(self, name, size=4, data_type="Int", scope=Scope.LOCAL, is_live=False, next_use=None): + def __init__(self, name, is_live=False, next_use=None): + self.name = name self.is_live = is_live self.next_use = next_use - self.data_type = data_type - self.scope = scope - self.size = size - self.name = name - class SymbolTable: def __init__(self, entries:List[SymbolTabEntry]=None): @@ -26,11 +22,14 @@ def __init__(self, entries:List[SymbolTabEntry]=None): def lookup(self, entry_name: str) -> SymbolTabEntry: if entry_name != None: if entry_name in self.entries.keys(): - return self.entries[s] + return self.entries[entry_name] def insert(self, entry: SymbolTabEntry): self.entries[entry.name] = entry + def insert_name(self, name): + self.entries[name] = SymbolTabEntry(name) + def __getitem__(self, item): return self.entries[item] @@ -91,7 +90,7 @@ class RegisterDescriptor: 'Stores the contents of each register' def __init__(self): registers = ['t0', 't1', 't2', 't3', 't4', 't5', 't6', 't7', 't8', \ - 's0', 's1', 's2', 's3', 's4', 's5', 's6', 's7', 'v1'] + 's0', 's1', 's2', 's3', 's4', 's5', 's6', 's7', 'v1', 'a0', 'a1', 'a2', 'a3'] self.registers = {reg: None for reg in registers} def insert_register(self, register:str, content:str): @@ -112,12 +111,112 @@ def empty_registers(self): for k in self.registers: self.registers[k] = None - def type(self, name:str): - if name.startswith('t'): - return RegisterType.TEMP - elif name.startswith('s'): - return RegisterType.GLOBAL - elif name.startswith('a'): - return RegisterType.ARG - elif name.startswith('v'): - return RegisterType.RETURN + +class DispatchTableEntry: + def __init__(self, type_name, methods): + self.type = type_name + self.methods = methods + + def get_offset(self, method): + return self.methods.index(method) + + def __iter__(self): + return iter(self.methods) + +class DispatchTable: + def __init__(self): + self.classes: List[DispatchTableEntry] = [] + + def add_class(self, type_name, methods): + self.classes.append(DispatchTableEntry(type_name, methods)) + + def get_offset(self, type_name, method): + idx = self.find_entry(type_name) + return self.classes[idx].get_offset(method) + + def find_entry(self, name): + for i, entry in enumerate(self.classes): + if entry.type == name: + return i + return -1 + + def find_full_name(self, type_name, mth_name): + idx = self.find_entry(type_name) + for meth in self.classes[idx]: + # format of methods: 'function_{method_name}_{type_name}' + name = meth.split('_')[1] + if name == mth_name: + return meth + return None + + def __len__(self): + return len(self.classes) + + +class ObjTabEntry: + def __init__(self, name, methods, attrs): + self.class_tag: str = name + self.size: int = 3 + len(attrs) + self.dispatch_table_size = len(methods) + self.dispatch_table_entry = methods + self.attrs = attrs + + @property + def class_tag_offset(self): + return 0 + + @property + def size_offset(self): + return 1 + + @property + def dispatch_ptr_offset(self): + return 2 + + def attr_offset(self, attr): + return self.attrs.index(attr) + 3 + + def method_offset(self, meth): + "Method offset in dispatch table" + return self.dispatch_table_entry.index(meth) + + +class ObjTable: + def __init__(self, dispatch_table: DispatchTable): + self.objects: Dict[str, ObjTabEntry] = self.initialize_built_in() + self.dispatch_table = dispatch_table + + def initialize_built_in(self): + object_methods = [ + 'function_abort_Object', + 'function_type_name_Object', + 'function_copy_Object'] + io_methods = [ + 'function_out_string_IO', + 'function_out_int_IO', + 'function_in_string_IO', + 'function_in_int_IO'] + str_methods = [ + 'function_length_String', + 'function_concat_String', + 'function_substr_String' ] + return { + 'Int': ObjTabEntry('Int', [], []), + 'Bool': ObjTabEntry('Bool', [], []), + 'IO': ObjTabEntry('IO', io_methods, []), + 'String': ObjTabEntry('String', str_methods, []), + 'Object': ObjTabEntry('Object', object_methods, []) + } + + def add_entry(self, name, methods, attrs): + methods = [y for x, y in methods] + attrs = [x for x, y in attrs] + self.objects[name] = ObjTabEntry(name, methods, attrs) + # Adding the methods in the dispatch table + self.dispatch_table.add_class(name, methods) + + def size_of_entry(self, name): + return self.objects[name].size + + def __getitem__(self, item) -> ObjTabEntry: + return self.objects[item] \ No newline at end of file diff --git a/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc index 61b539b6a93054f00cf3987f892ee5477580657f..ee50a6aa3ca00b8370d1ba33ad0b6369ba756991 100644 GIT binary patch delta 22 ccmX?Pc*u~~iIX9g(5Yev?g|G% W01~%Y5=%;oCV%8p*sLiM$_xO%Boey- delta 85 zcmeya_fL=4iIticSL%zjne3bqRFt|5*g kAwdd7YCy%BEJe~lsz?Dy++s;ADJhyP$fLShNhFjR0Gt~XLjV8( diff --git a/src/codegen/visitors/__pycache__/cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/cil_visitor.cpython-37.pyc index 8a34d87b55ddafda89deb1c9580b866420153a14..afb0e931c189c59db0009292c0866e3f8761ba81 100644 GIT binary patch delta 2687 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 diff --git a/src/codegen/visitors/base_cil_visitor.py b/src/codegen/visitors/base_cil_visitor.py index f3551915..c8fd7b53 100644 --- a/src/codegen/visitors/base_cil_visitor.py +++ b/src/codegen/visitors/base_cil_visitor.py @@ -79,7 +79,7 @@ def register_type(self, name): def register_data(self, value): vname = f'data_{len(self.dotdata)}' data_node = DataNode(vname, value, self.index) - self.dotdata.append(data_node) + self.dotdata.append(data_node) return data_node def _define_binary_node(self, node: BinaryNode, scope: Scope, cil_node: cil.Node): diff --git a/src/codegen/visitors/base_mips_visitor.py b/src/codegen/visitors/base_mips_visitor.py index 0e162c33..73b55175 100644 --- a/src/codegen/visitors/base_mips_visitor.py +++ b/src/codegen/visitors/base_mips_visitor.py @@ -1,6 +1,7 @@ from codegen.cil_ast import * from codegen.tools import * from semantic.tools import VariableInfo +from semantic.types import Attribute from typing import List class BaseCILToMIPSVisitor: @@ -10,14 +11,14 @@ def __init__(self): self.initialize_type_code() self.symbol_table = SymbolTable() - # temp registers: t8, t9, voy a usarlos para llevarlos de + # temp registers: t9, voy a usarlo para llevarlo de temporal en expresiones aritmeticas # Not sure if i should only use local registers - self.local_reg = RegisterDescriptor(local_reg_list) - self.global_reg = RegisterDescriptor(global_reg_list) self.reg_desc = RegisterDescriptor() self.addr_desc = AddressDescriptor() self.strings = {} - + + self.dispatch_table: DispatchTable = DispatchTable() + self.obj_table: ObjTable = ObjTable(self.dispatch_table) def initialize_data_code(self): self.data_code = ['.data'] @@ -44,15 +45,15 @@ def find_leaders(self, instructions: List[InstructionNode]): leaders.add(i) return sorted(list(leaders)) - def is_variable(self, expr): - if expr is None: - return False - try: - int(expr) - return False - except: - return True + return isinstance(expr, str) + + def is_int(self, expr): + return isinstance(expr, int) + + def add_entry_symb_tab(self, name): + "Method to add a entry in the symbol table. (Local)" + self.symbol_table.insert(name) def construct_next_use(self, basic_blocks: List[List[InstructionNode]]): next_use = {} @@ -82,19 +83,18 @@ def construct_next_use(self, basic_blocks: List[List[InstructionNode]]): outnextuse = entry_out.next_use outislive = entry_out.is_live else: - scope = Scope.GLOBAL if isinstance(inst, SetAttribNode) else Scope.LOCAL - # TODO: Calcular el tamaño cuando es un AllocateNode - entry_out = SymbolTabEntry(out, scope=scope) + # Esto no debería pasar + entry_out = SymbolTabEntry(out) entry_out.next_use = None entry_out.is_live = False self.symbol_table.insert(entry_out) if in1 is not None: if entry_in1 is not None: - in1nextuse = entry_in1.nextUse - in1islive = entry_in1.isLive + in1nextuse = entry_in1.next_use + in1islive = entry_in1.is_live else: - scope = Scope.GLOBAL if isinstance(inst, GetAttribNode) else Scope.LOCAL - entry_in1 = SymbolTabEntry(out, scope=scope) + # Esto no debería pasar + entry_in1 = SymbolTabEntry(out) entry_in1.next_use = inst.index entry_in1.is_live = True self.symbol_table.insert(entry_in1) @@ -103,6 +103,7 @@ def construct_next_use(self, basic_blocks: List[List[InstructionNode]]): in2nextuse = entry_in2.next_use in2islive = entry_in2.is_live else: + # Esto no debería pasar entry_in2 = SymbolTabEntry(in2) entry_in2.next_use = inst.index entry_in2.is_live = True @@ -112,33 +113,35 @@ def construct_next_use(self, basic_blocks: List[List[InstructionNode]]): next_use[inst.index] = n_entry return next_use - def get_reg(self, inst: InstructionNode, reg_desc: RegisterDescriptor): - rest_block = self.block[inst.idx-block[0].idx:] # return the block of instructions after the current instruction - get_reg_var(inst.in1, reg_desc, rest_block) if is_variable(inst.in1) else None - get_reg_var(inst.in2, reg_desc, rest_block) if is_variable(inst.in2) else None + def get_reg(self, inst: InstructionNode): + if self.is_variable(inst.in1): + self.get_reg_var(inst.in1) + if self.is_variable(inst.in2): + self.get_reg_var(inst.in2) # Comprobar si se puede usar uno de estos registros tambien para el destino - nu_entry = self.next_use[inst.idx] - if nu_entry.in1islive and nu_entry.in1nextuse < inst.idx: + nu_entry = self.next_use[inst.index] + if nu_entry.in1islive and nu_entry.in1nextuse < inst.index: update_register(inst.out, in1_reg) return - if nu_entry.in2islive and nu_entry.in2nextuse < inst.idx: + if nu_entry.in2islive and nu_entry.in2nextuse < inst.index: update_register(inst.out, in2_reg) return # Si no buscar un registro para z por el otro procedimiento - get_reg_var(inst.out, reg_desc, rest_block) if is_variable(inst.out) else None - + if self.is_variable(inst.out): + self.get_reg_var(inst.out) - def get_reg_var(self, var, reg_desc: RegisterDescriptor): + + def get_reg_var(self, var): curr_inst = self.block[0] register = self.addr_desc.get_var_reg(var) if register is not None: # ya la variable está en un registro return var_st = self.symbol_table.lookup(var) - register = reg_desc.find_empty_reg() + register = self.reg_desc.find_empty_reg() if register is not None: - update_register(var, register, reg_desc) + self.update_register(var, register) self.code.append(self.save_var_code(var)) return @@ -157,7 +160,7 @@ def get_reg_var(self, var, reg_desc: RegisterDescriptor): register, memory, _ = self.addr_desc.get_var_storage(n_var) - update_register(var, register, reg_desc) + update_register(var, register) self.load_var_code(var) @@ -169,44 +172,36 @@ def _update_score(self, score, var): except: score[var] = 1 - def update_register(self, var, register, reg_desc: RegisterDescriptor): - content = reg_desc.get_content(register) + def update_register(self, var, register): + content = self.reg_desc.get_content(register) if content is not None: self.save_var_code(content) self.addr_desc.set_var_reg(content, None) - reg_desc.insert_register(register, var) + self.reg_desc.insert_register(register, var) self.addr_desc.set_var_reg(var, register) def save_var_code(self, var): "Code to save a variable to memory" - var_st = self.symbol_table.lookup(var) register, memory, _= self.addr_desc.get_var_storage(var) - if var_st.scope == Scope.LOCAL: - self.code.append(f"sw ${register}, -{memory}($fp)") - else: - self.code.append(f"sw ${register}, {memory}") + self.code.append(f"sw ${register}, -{memory}($fp)") def load_var_code(self, var): "Code to load a variable from memory" - var_st = self.symbol_table.lookup(var) register, memory, _ = self.addr_desc.get_var_storage(var) - if var_st.scope == Scope.LOCAL: - self.code.append(f'lw ${register}, -{memory}(fp)') - else: - self.code.append(f'lw ${register}, {mem_addr}') - + self.code.append(f'lw ${register}, -{memory}(fp)') + def load_used_reg(self, registers): "Loads the used variables in there registers" for reg in used_reg: self.code.append('addiu $sp, $sp, 4') self.code.append(f'lw ${reg}, ($sp)') - def empty_registers(sef): + def empty_registers(self): "Empty all used registers and saves there values to memory" registers = self.reg_desc.used_registers() for reg, var in registers: self.save_var_code(var) - self.addr_desc.set_var_reg(content, None) + self.addr_desc.set_var_reg(var, None) self.reg_desc.insert_register(reg, None) def push_register(self, register): @@ -221,8 +216,14 @@ def pop_register(self, register): def save_to_register(self, expr): "Aditional code to save an expression into a register. Returns the register" - if isinstance(expr, int): + if self.is_int(expr): self.code.append(f'li $t9, {expr}') return 't9' - elif isinstance(expr, VariableInfo): - return self.addr_desc.get_var_reg(expr.name) \ No newline at end of file + elif self.is_variable(expr): + return self.addr_desc.get_var_reg(expr.name) + + def get_attr_offset(self, attr_name:str, type_name:str): + return self.obj_table[type_name].attr_offset(attr_name) + + def get_method_offset(self, type_name, method_name): + self.obj_table[type_name].method_offset(method_name) \ No newline at end of file diff --git a/src/codegen/visitors/cil_format_visitor.py b/src/codegen/visitors/cil_format_visitor.py index 8617b83b..6eb73b9f 100644 --- a/src/codegen/visitors/cil_format_visitor.py +++ b/src/codegen/visitors/cil_format_visitor.py @@ -95,7 +95,7 @@ def visit(self, node: ReturnNode): @visitor.when(GetAttribNode) def visit(self, node: GetAttribNode): - return f'{node.dest} = GETATTR {node.obj} {node.attr.name}' + return f'{node.dest} = GETATTR {node.obj} {node.attr}' @visitor.when(SetAttribNode) def visit(self, node: SetAttribNode): diff --git a/src/codegen/visitors/cil_visitor.py b/src/codegen/visitors/cil_visitor.py index 5dd69f07..275f2b30 100644 --- a/src/codegen/visitors/cil_visitor.py +++ b/src/codegen/visitors/cil_visitor.py @@ -92,8 +92,9 @@ def visit(self, node: AssignNode, scope: Scope): value, typex = self.visit(node.expr, scope) if var_info is None: var_info = scope.find_attribute(node.id) - attr_name = self.to_attr_name(var_info.name, var_info.type.name) - self.register_instruction(cil.SetAttribNode('self', attr_name, value)) + attributes = [attr.name for attr, a_type in self.current_type.all_attributes()] + offset = attributes.index(var_info.name) + self.register_instruction(cil.SetAttribNode('self', var_info.name, self.current_type.name, value)) else: local_name = self.to_var_name(var_info.name) self.register_instruction(cil.AssignNode(var_info.name, value)) @@ -116,8 +117,8 @@ def visit(self, node: CallNode, scope: Scope): else: result = self.define_internal_local() - name = self.to_function_name(node.id, otype.name) - self.register_instruction(cil.DynamicCallNode(otype.name, name, result, args_node)) + # name = self.to_function_name(node.id, otype.name) + self.register_instruction(cil.DynamicCallNode(otype.name, node.id, result, args_node)) return result, self._return_type(otype, node) @visitor.when(BaseCallNode) @@ -133,15 +134,15 @@ def visit(self, node: BaseCallNode, scope: Scope): else: result = self.define_internal_local() - name = self.to_function_name(node.id, node.type) - self.register_instruction(cil.DynamicCallNode(node.type, name, result, args_node)) + # name = self.to_function_name(node.id, node.type) + self.register_instruction(cil.DynamicCallNode(node.type, node.id, result, args_node)) return result, self._return_type(otype, node) @visitor.when(StaticCallNode) def visit(self, node: StaticCallNode, scope: Scope): args = [self.visit(arg, scope)[0] for arg in node.args] - args_node = [cil.ArgNode('self')] + [cil.ArgNode(arg, self.index) for arg in args] + args_node = [cil.ArgNode(VariableInfo('self', self.current_type))] + [cil.ArgNode(arg, self.index) for arg in args] name = self.to_function_name(node.id, self.current_type.name) rtype = self.current_type.get_method(node.id, node.pos).return_type @@ -182,7 +183,8 @@ def visit(self, node: VariableNode, scope: Scope): except: var_info = scope.find_attribute(node.lex) local_var = self.register_local(var_info) - self.register_instruction(cil.GetAttribNode('self', var_info, local_var)) + # attributes = [attr.name for attr, a_type in self.current_type.all_attributes()] + self.register_instruction(cil.GetAttribNode('self', var_info.name, self.current_type.name, local_var)) return local_var, get_type(var_info.type, self.current_type) @visitor.when(InstantiateNode) @@ -192,7 +194,8 @@ def visit(self, node: InstantiateNode, scope: Scope): typex = get_type(typex, self.current_type) self.register_instruction(cil.AllocateNode(typex.name, instance)) - for attr, a_type in typex.all_attributes(clean=True): + attributes = [attr for attr, a_type in typex.all_attributes()] + for i, attr in enumerate(attributes): # Aquí sería más cómodo llamar al constructor de la clase, pero tendría que guardar todos los constructores if attr.expr is not None: expr, _ = self.visit(attr.expr, scope) @@ -202,8 +205,8 @@ def visit(self, node: InstantiateNode, scope: Scope): expr, _ = self.visit(ConstantBoolNode(False), scope) elif attr.type.name == 'String': expr, _ = self.visit(ConstantStrNode(''), scope) - attr_name = self.to_attr_name(attr.name, a_type.name) - self.register_instruction(cil.SetAttribNode(instance, attr_name, expr)) + # attr_name = self.to_attr_name(var_info.name, typex.name) + self.register_instruction(cil.SetAttribNode(instance, attr.name, typex.name, expr)) return instance, typex @@ -328,7 +331,10 @@ def visit(self, node: NotNode, scope: Scope): @visitor.when(IsVoidNode) def visit(self, node: IsVoidNode, scope: Scope): - return self._define_unary_node(node, scope, cil.IsVoidNode) + result = self.define_internal_local() + self.register_instruction(cil.TypeOfNode(node.obj, result)) + self.register_instruction(cil.EqualNode(result, result, VoidType().name)) + return result, BoolType() @visitor.when(PlusNode) def visit(self, node: PlusNode, scope: Scope): diff --git a/src/codegen/visitors/mips_visitor.py b/src/codegen/visitors/mips_visitor.py index c6fd35d3..5206bc05 100644 --- a/src/codegen/visitors/mips_visitor.py +++ b/src/codegen/visitors/mips_visitor.py @@ -43,57 +43,60 @@ def visit(self, node: ProgramNode): # visit code instrunctions for code in node.dotcode: self.visit(code) - + @visitor.when(TypeNode) def visit(self, node:TypeNode): - pass + self.obj_table.add_entry(node.name, node.methods, node.attributes) + self.data_code.append(f"type_{node.name}: .asciiz \"{node.name}\"") # guarda el nombre de la variable en la memoria @visitor.when(DataNode) def visit(self, node:DataNode): self.data_code.append(f"{node.name}: .asciiz \"{node.value}\"") - self.strings[node.value] = node.name @visitor.when(FunctionNode) def visit(self, node:FunctionNode): self.code.append(f'{node.name}:') + self.code.append(f'move $fp, $sp') # gets the frame pointer from the stack for i, param in enumerate(node.params): # gets the params from the stack self.visit(param, i) - self.pop_register('fp') # gets the frame pointer from the stack for i, var in enumerate(node.localvars): - self.visit(var, i) + self.visit(var, i+len(node.params)) blocks = self.get_basic_blocks(node.instructions) self.next_use = self.construct_next_use(blocks) for block in blocks: self.block = block for inst in block: - self.get_reg(inst, self.reg_desc) + self.get_reg(inst) self.visit(inst) @visitor.when(ParamNode) def visit(self, node:ParamNode, idx:int): - register = self.addr_desc.get_var_reg(node.name.name) - if idx <= 3: # los primeros 3 registros se guardan en a0-a3 - self.code.append(f'move ${register}, $a{idx}') + # TODO: Im not sure of this method.. + self.symbol_table.insert_name(node.name) + if idx <= 3: # los primeros 3 registros se guardan en a0-a3 + self.addr_desc.insert_var(node.name, None, f'$a{idx}') + self.reg_desc.insert_register(f'a{idx}', node.name) else: - self.pop_register(register) # pops the register with the param value from stack + self.code.append('addiu $sp, $sp, 4') # pops the register with the param value from stack + self.addr_desc.insert_var(node.name, idx) @visitor.when(LocalNode) def visit(self, node:LocalNode, idx:int): - self.addr_desc.set_var_addr(node.name, idx) # saves the address relative from the actual fp + self.symbol_table.insert_name(node.name) # inserts the var in the symbol table, local by default + self.addr_desc.insert_var(node.name, idx) # saves the address relative from the actual fp self.code.append(f'addiu $sp, $sp, -4') # updates stack pointers (pushing this value) @visitor.when(AssignNode) def visit(self, node:AssignNode): - rdest = self.addr_desc.get_var_reg(node.dest.name) - if isinstance(node.source, VariableInfo): - rsrc = self.addr_desc.get_var_reg(node.source.name) + rdest = self.addr_desc.get_var_reg(node.dest) + if self.is_variable(node.source): + rsrc = self.addr_desc.get_var_reg(node.source) self.code.append(f'move ${rdest}, ${rsrc}') - elif isinstance(node.source, int): + elif self.is_int(node.source): self.code.append(f'li ${rdest}, ${node.source}') elif isinstance(node.source, str): # esto nunca se debe ejecutar (se llama a load node) self.code.append(f'la ${rdest}, {self.strings[node.source]}') - offset = self.locals.index(node.dest.name) @visitor.when(NotNode) def visit(self, node:NotNode): @@ -101,169 +104,160 @@ def visit(self, node:NotNode): rscr = self.save_to_register(node.expr) self.code.append(f'not {rdest}, {rsrc}') - @visitor.when(IsVoidNode) - def visit(self, node:IsVoidNode): - pass - @visitor.when(PlusNode) def visit(self, node:PlusNode): - rdest = self.addr_desc.get_var_reg(node.dest.name) - if isinstance(node.left, VariableInfo): - rleft = self.addr_desc.get_var_reg(node.left.name) - if isinstance(node.right, VariableInfo): - rright = self.addr_desc.get_var_reg(node.right.name) + rdest = self.addr_desc.get_var_reg(node.dest) + if self.is_variable(node.left): + rleft = self.addr_desc.get_var_reg(node.left) + if self.is_variable(node.right): + rright = self.addr_desc.get_var_reg(node.right) self.code.append(f"add ${rdest}, ${rleft}, ${rright}") - elif isinstance(node.right, int): + elif self.is_int(node.right): self.code.append(f"addi ${rdest}, ${rleft}, {node.right}") - elif isinstance(node.left, int): - if isinstance(node.right, int): + elif self.is_int(node.right): + if self.is_int(node.left): self.code.append(f"li ${rdest}, {node.left + node.right}") - elif isinstance(node.right, VariableInfo): - rright = self.addr_desc.get_var_reg(node.right.name) + elif self.is_variable(node.right): + rright = self.addr_desc.get_var_reg(node.right) self.code.append(f"addi ${rdest}, ${node.left}, ${rright}") - @visitor.when(MinusNode) def visit(self, node:MinusNode): - rdest = self.addr_desc.get_var_reg(node.dest.name) - if isinstance(node.left, VariableInfo): - rleft = self.addr_desc.get_var_reg(node.left.name) - if isinstance(node.right, VariableInfo): - rright = self.addr_desc.get_var_reg(node.right.name) + rdest = self.addr_desc.get_var_reg(node.dest) + if self.is_variable(node.left): + rleft = self.addr_desc.get_var_reg(node.left) + if self.is_variable(node.right): + rright = self.addr_desc.get_var_reg(node.right) self.code.append(f"sub ${rdest}, ${rleft}, ${rright}") - elif isinstance(node.right, int): + elif self.is_int(node.left): self.code.append(f"addi ${rdest}, ${rleft}, -{node.right}") - elif isinstance(node.left, int): - if isinstance(node.right, int): + elif self.is_int(node.right): + if self.is_int(node.left): self.code.append(f"li ${rdest}, {node.left-node.right}") - elif isinstance(node.right, VariableInfo): - rright = self.addr_desc.get_var_reg(node.right.name) + elif self.is_variable(node.right): + rright = self.addr_desc.get_var_reg(node.right) self.code.append(f"sub $t9, $zero, {rright}") self.code.append(f"addi ${rdest}, $t9, {node.left}") - @visitor.when(StarNode) def visit(self, node:StarNode): - rdest = self.addr_desc.get_var_reg(node.dest.name) - if isinstance(node.left, VariableInfo): - rleft = self.addr_desc.get_var_reg(node.left.name) - if isinstance(node.right, VariableInfo): - rright = self.addr_desc.get_var_reg(node.right.name) - self.code.append(f"mult ${rleft}, ${rright}") - self.code.append(f"mflo ${rdest}") - elif isinstance(node.right, int): - self.code.append(f"li $t9, {node.right}") - self.code.append(f"mult ${rleft}, $t9") - self.code.append(f"mflo ${rdest}") - elif isinstance(node.left, int): - if isinstance(node.right, int): - self.code.append(f"li ${rdest}, {node.left*node.right}") - elif isinstance(node.right, VariableInfo): - rright = self.addr_desc.get_var_reg(node.right.name) - self.code.append(f"li $t9, {node.left}") - self.code.append(f"mult $t9, ${rright}") - self.code.append(f"mflo ${rdest}") - + self._code_to_mult_div(node, op='mult') @visitor.when(DivNode) def visit(self, node:DivNode): - rdest = self.addr_desc.get_var_reg(node.dest.name) - if isinstance(node.left, VariableInfo): - rleft = self.addr_desc.get_var_reg(node.left.name) - if isinstance(node.right, VariableInfo): - rright = self.addr_desc.get_var_reg(node.right.name) - self.code.append(f"div ${rleft}, ${rright}") + self._code_to_mult_div(node, op='div') + + def _code_to_mult_div(self, node, op:str): + rdest = self.addr_desc.get_var_reg(node.dest) + if self.is_variable(node.left): + rleft = self.addr_desc.get_var_reg(node.left) + if self.is_variable(node.right): + rright = self.addr_desc.get_var_reg(node.right) + self.code.append(f"{op} ${rleft}, ${rright}") self.code.append(f"mflo ${rdest}") - elif isinstance(node.right, int): + elif self.is_int(node.left): self.code.append(f"li $t9, {node.right}") - self.code.append(f"div ${rleft}, $t9") + self.code.append(f"{op} ${rleft}, $t9") self.code.append(f"mflo ${rdest}") - elif isinstance(node.left, int): - if isinstance(node.right, int): + elif self.is_int(node.right): + if self.is_int(node.left): self.code.append(f"li ${rdest}, {node.left / node.right}") - elif isinstance(node.right, VariableInfo): - rright = self.addr_desc.get_var_reg(node.right.name) + elif self.is_variable(node.right): + rright = self.addr_desc.get_var_reg(node.right) self.code.append(f"li $t9, {node.left}") - self.code.append(f"div ${rright}, $t9") + self.code.append(f"{op} ${rright}, $t9") self.code.append(f"mflo ${rdest}") - @visitor.when(LessNode) def visit(self, node:LessNode): - rdest = self.addr_desc.get_var_reg(node.dest.name) - if isinstance(node.left, VariableInfo): - rleft = self.addr_desc.get_var_reg(node.left.name) - if isinstance(node.right, VariableInfo): - rright = self.addr_desc.get_var_reg(node.right.name) - self.code.append(f"slt ${rdest}, ${rleft}, ${rright}") - elif isinstance(node.right, int): - self.code.append(f"li $t9, {node.right}") - self.code.append(f"slt ${rdest}, ${rleft}, $t9") - elif isinstance(node.left, int): - if isinstance(node.right, int): - self.code.append(f"li ${rdest}, {int(node.left < node.right)}") - elif isinstance(node.right, VariableInfo): - rright = self.addr_desc.get_var_reg(node.right.name) - self.code.append(f"li $t9, {node.left}") - self.code.append(f"slt ${rdest}, $t9, {rright}") - + self._code_to_comp(node, op='slt') @visitor.when(LessEqNode) def visit(self, node:MinusNode): - rdest = self.addr_desc.get_var_reg(node.dest.name) - if isinstance(node.left, VariableInfo): - rleft = self.addr_desc.get_var_reg(node.left.name) - if isinstance(node.right, VariableInfo): - rright = self.addr_desc.get_var_reg(node.right.name) - self.code.append(f"sle ${rdest}, ${rleft}, ${rright}") - elif isinstance(node.right, int): - self.code.append(f"li $t9, {node.right}") - self.code.append(f"sle ${rdest}, ${rleft}, $t9") - elif isinstance(node.left, int): - if isinstance(node.right, int): - self.code.append(f"li ${rdest}, {int(node.left <= node.right)}") - elif isinstance(node.right, VariableInfo): - rright = self.addr_desc.get_var_reg(node.right.name) - self.code.append(f"li $t9, {node.left}") - self.code.append(f"sle ${rdest}, $t9, {rright}") - + self._code_to_comp(node, op='sle') @visitor.when(EqualNode) def visit(self, node:MinusNode): - rdest = self.addr_desc.get_var_reg(node.dest.name) - if isinstance(node.left, VariableInfo): - rleft = self.addr_desc.get_var_reg(node.left.name) - if isinstance(node.right, VariableInfo): - rright = self.addr_desc.get_var_reg(node.right.name) - self.code.append(f"seq ${rdest}, ${rleft}, ${rright}") - elif isinstance(node.right, int): + self._code_to_comp(node, op='seq') + + def _code_to_comp(self, node, op): + rdest = self.addr_desc.get_var_reg(node.dest) + if self.is_variable(node.left): + rleft = self.addr_desc.get_var_reg(node.left) + if self.is_variable(node.right): + rright = self.addr_desc.get_var_reg(node.right) + self.code.append(f"{op} ${rdest}, ${rleft}, ${rright}") + elif self.is_int(node.left): self.code.append(f"li $t9, {node.right}") - self.code.append(f"seq ${rdest}, ${rleft}, $t9") - elif isinstance(node.left, int): - if isinstance(node.right, int): + self.code.append(f"{op} ${rdest}, ${rleft}, $t9") + elif self.is_int(node.right): + if self.is_int(node.left): self.code.append(f"li ${rdest}, {int(node.left <= node.right)}") - elif isinstance(node.right, VariableInfo): - rright = self.addr_desc.get_var_reg(node.right.name) + elif self.is_variable(node.right): + rright = self.addr_desc.get_var_reg(node.right) self.code.append(f"li $t9, {node.left}") - self.code.append(f"seq ${rdest}, $t9, {rright}") + self.code.append(f"{op} ${rdest}, $t9, {rright}") @visitor.when(GetAttribNode) def visit(self, node:GetAttribNode): - pass + rdest = self.addr_desc.get_var_reg(node.dest) + rsrc = self.addr_desc.get_var_reg(node.obj) + attr_offset = 4*self.get_attr_offset(node.attr, node.type_name) + self.code.append(f'lw ${rdest}, {attr_offset}(${rsrc})') + @visitor.when(SetAttribNode) def visit(self, node:SetAttribNode): - pass + rdest = self.addr_desc.get_var_reg(node.obj) + attr_offset = 4*self.get_attr_offset(node.attr, node.type_name) + if self.is_variable(node.value): + rsrc = self.addr_desc.get_var_reg(node.value) + elif self.is_int(node.value): + self.code.append(f'sw $t9, {node.value}') + rsrc = 't9' + self.code.append(f'sw ${rsrc}, {attr_offset}(${rdest})') # saves the new value in the attr offset + @visitor.when(AllocateNode) def visit(self, node:AllocateNode): - pass - + rdest = self.addr_desc.get_var_reg(node.dest) + size = 4*self.obj_table.size_of_entry(node.type) # size of the table entry of the new type + # syscall to allocate memory of the object entry in heap + self.code.append('li $v0, 9') # code to request memory + self.code.append(f'li $a0, {size}') # argument (size) + self.code.append('syscall') + # in v0 is the address of the new memory + addrs_stack = self.addr_desc.get_var_addr(node.dest) + self.code.append(f'sw $v0, -{addrs_stack}(fp)') # save the address in the stack (where is the local variable) + + self.code.append(f'la $t9, type_{node.type}') # loads the name of the variable + self.code.append(f'sw $t9, 0($v0)') # saves the name like the first field + + self.code.append(f'li $t9, {size}') # saves the size of the node + self.code.append(f'sw $t9, 4($v0)') # this is the second file of the table offset + self.code.append(f'move ${rdest}, $v0') # guarda la nueva dirección de la variable en el registro destino + + # Allocate the dispatch table in the heap + # self.code.append('li $v0, 9') # code to request memory + # dispatch_table_size = 4*self.obj_table.dispatch_table_size + # self.code.append(f'li $a0, {dispatch_table_size}') + # self.code.append('syscall') + # Memory of the dispatch table in v0 + # self.code.append(f'sw $v0, 8(${rdest})') # save a pointer of the dispatch table in the 3th position + @visitor.when(TypeOfNode) def visit(self, node:TypeOfNode): - pass + rdest = self.addr_desc.get_var_reg(node.dest) + if self.is_variable(node.obj): + rsrc = self.addr_desc.get_var_reg(node.obj) + # TODO: Falta comprobar si el tipo de la variable es por valor, en ese caso la información del nodo no estará en la primera posicion + # De todas formas todavía falta la implementacion de los tipos built in + self.code.append(f'la ${rdest}, 0(${rsrc})') # como en el offset 0 está el nombre del tipo this is ok + elif self.is_int(node.obj): + # TODO: hacer algo para identificar el tipo int + pass @visitor.when(LabelNode) def visit(self, node:LabelNode): @@ -280,40 +274,47 @@ def visit(self, node:GotoIfNode): @visitor.when(StaticCallNode) def visit(self, node:StaticCallNode): + self._code_function(node.function, node.args, node.dest) + + + @visitor.when(DynamicCallNode) + def visit(self, node:DynamicCallNode): + # Find the actual name of the method in the dispatch table + function_name = self.dispatch_table.find_full_name(node.type, node.method) + self._code_function(function_name, node.args, node.dest) + + + def _code_function(self, function, args, dest): self.empty_registers() # empty all used registers and saves them to memory + self.push_register('fp') # pushes fp register to the stack self.push_register('ra') # pushes ra register to the stack - self.pop_register('fp') # pop fp register from the stack - for i, arg in enumerate(node.args): # push the arguments to the stack + for i, arg in enumerate(args): # push the arguments to the stack self.visit(arg, i) - self.push_register('fp') # pushes fp register to the stack - self.code.append(f'jal {node.function}') # this function will consume the arguments + self.code.append(f'jal {function}') # this function will consume the arguments + self.pop_register('fp') # pop fp register from the stack - if node.dest is not None: - rdest = self.addr_desc.get_var_reg(node.dest.name) + if dest is not None: + rdest = self.addr_desc.get_var_reg(dest) self.code.append(f'move ${rdest}, $v0') # v0 es usado para guardar el valor de retorno - @visitor.when(DynamicCallNode) - def visit(self, node:DynamicCallNode): - # TODO: Buscar cómo tratar con las instancias - pass @visitor.when(ArgNode) def visit(self, node:ArgNode, idx): if idx <= 3: # los primeros 3 registros se guardan en a0-a2 reg = f'a{idx}' - if isinstance(node.dest, VariableInfo): - rdest = self.addr_desc.get_var_reg(node.dest.name) + if self.is_variable(node.dest): + rdest = self.addr_desc.get_var_reg(node.dest) self.code.append(f'move ${reg}, ${rdest}') - elif isintance(node.dest, int): + elif self.is_int(node.dest): self.code.append(f'li ${reg}, {node.dest}') else: self.code.append('addiu $sp, $sp, -4') - if isinstance(node.dest, VariableInfo): - reg = self.addr_desc.get_var_reg(node.dest.name) + if self.is_variable(node.dest): + reg = self.addr_desc.get_var_reg(node.dest) self.code.append(f'sw ${reg}, ($sp)') - elif isinstance(node.dest, int): + elif self.is_int(node.dest): self.code.append(f'li $t9, {node.dest}') self.code.append(f'sw $t9, ($sp)') @@ -321,19 +322,15 @@ def visit(self, node:ArgNode, idx): def visit(self, node:ReturnNode): self.pop_register('ra') # pop register ra from the stack # save the return value - if isinstance(node.value, VariableInfo): - rdest = self.addr_desc.get_var_reg(node.value.name) + if self.is_variable(node.value): + rdest = self.addr_desc.get_var_reg(node.value) self.code.append(f'move $v0, {rdest}') - elif isinstance(node.value, int): + elif self.is_int(node.value): self.code.append(f'li $v0, {node.value}') # return to the caller self.code.append(f'jr $ra') @visitor.when(LoadNode) def visit(self, node:LoadNode): - var_name = self.strings[node.msg] - self.code.append(f'la ${node.dest}, {var_name}') - - @visitor.when(SelfNode) - def visit(self, node:SelfNode): - pass \ No newline at end of file + rdest = self.addr_desc.get_var_reg(node.dest) + self.code.append(f'la ${rdest}, {node.msg}') \ No newline at end of file diff --git a/src/cool_parser/output_parser/parselog.txt b/src/cool_parser/output_parser/parselog.txt index eeee359e..c4471cc1 100644 --- a/src/cool_parser/output_parser/parselog.txt +++ b/src/cool_parser/output_parser/parselog.txt @@ -6146,19 +6146,19 @@ yacc.py: 411:State : 32 yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',3,23) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',3,23) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',3,23) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',3,23) @@ -6191,37 +6191,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',4,53) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar epsilon . LexToken(cpar,')',4,61) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar arg_list_empty . LexToken(cpar,')',4,61) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args . LexToken(cpar,')',4,61) @@ -6268,37 +6268,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args cpar . LexToken(ccur,'}',5,67) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['print','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) + yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot func_call . LexToken(ccur,'}',5,67) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : class type ocur def_func semi epsilon . LexToken(ccur,'}',6,70) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : class type ocur def_func semi feature_list . LexToken(ccur,'}',6,70) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 14 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['test1',':','Int'] and goto state 17 - yacc.py: 506:Result : ( ( id] with ['test3'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',12,146) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',12,146) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',12,146) @@ -6490,27 +6490,27 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur num . LexToken(minus,'-',13,165) yacc.py: 471:Action : Reduce rule [atom -> num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 160 - yacc.py: 506:Result : ( base_call] with [] and goto state 160 + yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 - yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( string] with ['1'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 + yacc.py: 506:Result : ( id colon type] with ['a',':','Alpha'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) + yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param . LexToken(comma,',',19,226) @@ -6678,24 +6678,24 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon type . LexToken(cpar,')',19,234) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['b',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) + yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 - yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 + yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 95 yacc.py: 430:Defaulted state 95: Reduce using 33 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals . LexToken(cpar,')',19,234) @@ -6732,12 +6732,12 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon type . LexToken(comma,',',20,265) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['count',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) + yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) yacc.py: 410: yacc.py: 411:State : 130 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let param . LexToken(comma,',',20,265) - yacc.py: 471:Action : Reduce rule [let_assign -> param] with [] and goto state 129 - yacc.py: 506:Result : ( param] with [] and goto state 129 + yacc.py: 506:Result : ( id colon type] with ['pow',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) + yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 130 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param . LexToken(larrow,'<-',20,276) @@ -6771,53 +6771,53 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow num . LexToken(in,'in',21,329) yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 - yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 + yacc.py: 506:Result : ( let_assign] with [] and goto state 197 - yacc.py: 506:Result : ([ let_assign] with [] and goto state 197 + yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 - yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 + yacc.py: 506:Result : ([ num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 135 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 196 - yacc.py: 506:Result : ( comp] with [] and goto state 196 + yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',26,389) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',26,389) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',26,389) @@ -7031,37 +7031,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new type . LexToken(comma,',',27,424) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ id opar args cpar] with ['testing2','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',30,450) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',30,450) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',30,450) @@ -7236,27 +7236,27 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar num . LexToken(plus,'+',31,480) yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 - yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',33,543) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',33,543) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar epsilon . LexToken(cpar,')',37,601) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list_empty . LexToken(cpar,')',37,601) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',37,601) @@ -7660,48 +7660,48 @@ yacc.py: 411:State : 93 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id opar string . LexToken(cpar,')',38,646) yacc.py: 471:Action : Reduce rule [atom -> string] with ['reached!!\n'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi epsilon . LexToken(ccur,'}',40,655) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi feature_list . LexToken(ccur,'}',40,655) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( ( Date: Wed, 11 Nov 2020 14:38:33 -0700 Subject: [PATCH 34/60] Fixing dispatch method (actually implemented dispatch methods in misp) --- .../__pycache__/cil_ast.cpython-37.pyc | Bin 12041 -> 12059 bytes src/codegen/cil_ast.py | 9 +- src/codegen/tools.py | 58 +- .../cil_format_visitor.cpython-37.pyc | Bin 6007 -> 6007 bytes .../__pycache__/cil_visitor.cpython-37.pyc | Bin 12380 -> 12390 bytes src/codegen/visitors/base_mips_visitor.py | 18 +- src/codegen/visitors/cil_format_visitor.py | 2 +- src/codegen/visitors/cil_visitor.py | 9 +- src/codegen/visitors/mips_visitor.py | 73 +- src/cool_parser/output_parser/parselog.txt | 762 +++++++++--------- 10 files changed, 474 insertions(+), 457 deletions(-) diff --git a/src/codegen/__pycache__/cil_ast.cpython-37.pyc b/src/codegen/__pycache__/cil_ast.cpython-37.pyc index 1829f13cd5791f671f73e44d159b0375050353ba..d66fe41c093eccd3f7ab73751b73c9620903d5a5 100644 GIT binary patch delta 590 zcmYk3JxF6g5XT)c(ZoD>dlpgg<-?pBV?4ReNmV?c>D!LX5HV$$^h){INxra61|-9aYtTSve=Ntax>( zvRajHU8f11zZ@^Ed68p+=>OYtOm$-?wno*k+QzXPuOKfD;z^vfEs(91ACQP=MV^(y zq0F;#kLr+VPm2P_Y8|lxj@x%S)gMXq0aEo^s0-;?It$Y~BRuqaX}J9f_aJiPPIGnh=B*}W7(3`(p~eQKc$qaQ#vj&U!!q!Cq1!;-M&>>V)8Z5jT8Ke2r6NEa1=pm(sWp$3|^#i;w|=5 zbJAzwO$hZF9m4}RuvG!slR7J%Myod|-s7)ZF|M%w4(DATyXo8Fs*Zfdg-pem;K(Ob z(>}guw#B55?BjlaU6wiWjc2={vd%I%@Wh;Em1Z=0h@S(?a*Bl?A#{q-FXlCc&1vix z9(O0OG*ptaEFOi>S$)joA!_4IudlsS^&hh{jt}014A}K2eT+N(k zqC=o3JC2vR9T7z_AIJsPEb;#+3)=cM-w-uzm8hMYH>ylIc$D`c3Tq;PMqx(QS&N69 zb$l#58&P*f>J~^fmQ)W(wTo0ENF9+>wWNw6m7LVxR7cB+V{f<|x16Zc#UtWaPRu#Q I!&3kM0GJk#eE ObjTabEntry: - return self.objects[item] \ No newline at end of file + return self.objects[item] + + def __iter__(self): + return iter(self.objects.values()) \ No newline at end of file diff --git a/src/codegen/visitors/__pycache__/cil_format_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/cil_format_visitor.cpython-37.pyc index c10d998a910bc4e84eddd9cc3ec016fd88de3529..07d22908f4a27dcb471130324929356ebfb6c2b4 100644 GIT binary patch delta 31 lcmeya_g#&gjeh<}ui0c_$!RaT?o z%~F7O;w!yP92+Rhz>F{T&b~9`o+g|n%wXQ+cwlg;yQN7kUEu|e8E*D9A*0BsYLMxw zsiY+eal_Dn{#ftfE4f7WVk(m0xa0XWi^ohBO{>V+X*(#h01git@Pp|&#Bpx$iA0t8 z6Ugw3nVkAi6<&+Khn4|8;(cpMvbL=our9u{P065$aytW`MUVXvOeCnZAi=$x*O4v~ zj0Az8Cm0AN317QePGI9gG0RVqSH_)@VPh+DM4DsjB41+TTq4PGdisVV+(Z8 zPB{UL;`FEjpnx-s9R$42=)0~`O9q!28B>Tl2@d7@P1qZFPZG*D}|KoA#POAy9h{{h`CvRmJ1N(#X@3P*9?U4d)3Rbht6ye*7z-2+NWG~yF(al&lMzvtFJ@Dc&N~*X;1(`9TWz;llyZ}Bhj15*ZXf<~1}$b*n%Gg7G1xG} zYn*0gJ52h!hG{S>9%{ahUcb|}H{AL!;S4_Txbc&FtuD^2GCz>b%2$iy5{g}ZTstH~ z9POUZV8S1sHKt343$XsS@fpBJeBP8~PNiuB-s>C9LsgJRp(OyD`tg>h(3_wQ3PbyT zrH*u-;3DJ*PC^4=f}zYyvMR;YTv{0}KPxz|=6dVb(^cm?CT(;0fF5RQ=sA!ZrMrfi}wMmh!lSkE@;w5uuDO2tB z*dIKITY&@ig3*|fCSz(cJ1!|%tOWYOhy87vFoCY%pl6zO44cG!L5Whx5MhRJ89xXv zIDr^^3=upQI&GaL+qnH4zV-y+JaZkm+Ma@k$ageD3fnrm-~wLjn1w6G#KQlHk}+|E zTv)(TXE*yHcJ%MglMvh0a;O`UyZT$`6pWCz?xoBdDPvgbdS#U ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',3,23) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',3,23) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',3,23) @@ -6191,37 +6191,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',4,53) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar epsilon . LexToken(cpar,')',4,61) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar arg_list_empty . LexToken(cpar,')',4,61) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args . LexToken(cpar,')',4,61) @@ -6268,37 +6268,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args cpar . LexToken(ccur,'}',5,67) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['print','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) + yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot func_call . LexToken(ccur,'}',5,67) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : class type ocur def_func semi epsilon . LexToken(ccur,'}',6,70) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : class type ocur def_func semi feature_list . LexToken(ccur,'}',6,70) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 14 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['test1',':','Int'] and goto state 17 - yacc.py: 506:Result : ( ( id] with ['test3'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',12,146) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',12,146) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',12,146) @@ -6490,27 +6490,27 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur num . LexToken(minus,'-',13,165) yacc.py: 471:Action : Reduce rule [atom -> num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 160 - yacc.py: 506:Result : ( base_call] with [] and goto state 160 + yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 - yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( string] with ['1'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 + yacc.py: 506:Result : ( id colon type] with ['a',':','Alpha'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) + yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param . LexToken(comma,',',19,226) @@ -6678,24 +6678,24 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon type . LexToken(cpar,')',19,234) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['b',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) + yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 - yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 + yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 95 yacc.py: 430:Defaulted state 95: Reduce using 33 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals . LexToken(cpar,')',19,234) @@ -6732,12 +6732,12 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon type . LexToken(comma,',',20,265) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['count',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) + yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) yacc.py: 410: yacc.py: 411:State : 130 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let param . LexToken(comma,',',20,265) - yacc.py: 471:Action : Reduce rule [let_assign -> param] with [] and goto state 129 - yacc.py: 506:Result : ( param] with [] and goto state 129 + yacc.py: 506:Result : ( id colon type] with ['pow',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) + yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 130 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param . LexToken(larrow,'<-',20,276) @@ -6771,53 +6771,53 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow num . LexToken(in,'in',21,329) yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 - yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 + yacc.py: 506:Result : ( let_assign] with [] and goto state 197 - yacc.py: 506:Result : ([ let_assign] with [] and goto state 197 + yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 - yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 + yacc.py: 506:Result : ([ num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 135 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 196 - yacc.py: 506:Result : ( comp] with [] and goto state 196 + yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',26,389) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',26,389) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',26,389) @@ -7031,37 +7031,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new type . LexToken(comma,',',27,424) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ id opar args cpar] with ['testing2','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',30,450) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',30,450) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',30,450) @@ -7236,27 +7236,27 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar num . LexToken(plus,'+',31,480) yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 - yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',33,543) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',33,543) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar epsilon . LexToken(cpar,')',37,601) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list_empty . LexToken(cpar,')',37,601) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',37,601) @@ -7660,48 +7660,48 @@ yacc.py: 411:State : 93 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id opar string . LexToken(cpar,')',38,646) yacc.py: 471:Action : Reduce rule [atom -> string] with ['reached!!\n'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi epsilon . LexToken(ccur,'}',40,655) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi feature_list . LexToken(ccur,'}',40,655) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( ( Date: Wed, 11 Nov 2020 16:49:38 -0700 Subject: [PATCH 35/60] Only missing integration with built in types (i think). Everything needs testing --- .../__pycache__/__init__.cpython-37.pyc | Bin 723 -> 723 bytes .../__pycache__/cil_ast.cpython-37.pyc | Bin 12059 -> 12145 bytes src/codegen/cil_ast.py | 14 +- src/codegen/tools.py | 9 +- .../base_cil_visitor.cpython-37.pyc | Bin 6338 -> 5048 bytes .../__pycache__/cil_visitor.cpython-37.pyc | Bin 12390 -> 12408 bytes src/codegen/visitors/base_cil_visitor.py | 62 +- src/codegen/visitors/base_mips_visitor.py | 28 +- src/codegen/visitors/cil_visitor.py | 20 +- src/codegen/visitors/mips_visitor.py | 39 +- src/cool_parser/output_parser/parselog.txt | 762 +++++++++--------- src/semantic/types.py | 2 +- 12 files changed, 465 insertions(+), 471 deletions(-) diff --git a/src/codegen/__pycache__/__init__.cpython-37.pyc b/src/codegen/__pycache__/__init__.cpython-37.pyc index 05577f707ae1f7153c264846dbc41ea7fd6bac37..3da409e9c7c51a5636eda9ed6ce59b019fa0475b 100644 GIT binary patch delta 20 acmcc2dYP5miIW*KFiI!2|#^cm*K< delta 20 acmcc2dYP5miImAwa2secdzTMmCNV|PBwq*B*YDy7oj!Txb(i72D8Kv_HWads&U zoKqICB{&0|R|CKUg0sK{RRk^y&H)dqA>bjw7Vxkd0Ui;Y2i~DZfky=o0FSA0;Bk8Z z_6oogY7%%-a1nT?+6BDJF5>zi@NTsSc#m8k0^Y0k0q?ViaD5nfzd8VXK=26gGwLAl zLBTtKpH+u|4+$Oxeoh?*J}h_)cuE}sJ|cJ=_^3Jtd`$2J@Nsnl_=MP>1b$wXfJ=gR z0>7YM1b$KQF5s8cN#K)$cLSeNW#F>lJ;0~c8Q?R5_X1C=v%qHs?*l%k&I6wpydU^w z^$PGSf)4<{sxAOu5c~}AYwC62*99L0zNp>+enarHz;CKcz?TFc0=}$ffM*0h2Yf}% z0?!IQ418710nZ7Z0=}lM178<>1o$m=1NesEqrh*go4_{(9|OLnZUf&Id>nXQ-2uKM z_yq8RdI$I&!OsKVRg1uj;vXe-Z!uN6Ukf~!$29iK*qvbrJGGQnsillcQ$}dvdf(8-)RpnJ%)vM)3tMR0Kdiva} z=jYCyr96B7!nJZ`&Z)KSMzvh2+<&Wl&TW-vXUns#)ra+lt;@Amt8ubs(8=l3)2GXh zuHm$@SL|lFR&P|Qj(h6i6V0M?chK)rg|y&U-Lg1;nK$f)=+rGIeKNh2m0DWf(1LEQ z=<2Few#G_uqgkm;vc$js9mWLBlXReHXZ^9rivx=$Y3jyHgR zs_Itd4@>S@^`^2Pmn<*m*o|dffI?lQU|jLCb@e!;Pv?0KoY$Lmw^CtA96pdr=jFGy zGg9JH!EI6o%_3{oTQe-_9Tc5*@&8e~9)RE-0e8gP;I42F_4SFPQEohLLflG<#EHxZ zi4o#*bRloB>bkoApzV^tRoi{Pr5rs3ZKbTHbLugQ5sI)zQW@5gcf?s556ZSpibkQ4 z<^zg|w?olYID$_R3FpRRha&psM&Am&Dl4`2tVh*G+xFSW2^%;?*7Qz1z9lJ>xag1~ z-*wi;gR*Rs66%|vPL>`$j(8iC3}0(EYi_;O^l6a-LKBZ2TBZOt(&BfyrxtuE7f@vR z6y+aQ(TN?e*l5+NjYn1Oc*FIk@d$bA;OjBAR48CfgCv&f9l5(&@Qdh-m1sOGenZM9u-g;K^3$y@c9lhhs?v-Ykl z(Kh)x1jR2=x#5R6#!nDq9Wob=`Jbeg(=zTCm$IKA059b*YFpmmjN{Z-OdJXx^_(Cg)t?YLgvX|;9D*3Utgo`NX( zFX+S2z^sY)*8_`uSvPdPSIp#3(G`(nabw6cWcM?3Qs4%(q;j3po#; zkEC)^gHT9aUc@bP5nIGDTY*dW*c-0Y!}g*nZaj9{i*9IoLvBNFU{aiuK4D3MoR^+4 z5VT!kL)$g%W!JNGedT@E?;8yKeh0Dq_;QRV7)xQkMrGcsWiny&_XuS$GIz5pj|hS&X*`hZk-uxeho4&`fkJ^am-+U-F$ea z!O6I5R)~U!dF=QU+r4{!9e7YQ_v3<`-x>M5N&S|rx^!acq+7en_wj_8oA{~p+OB9h zlljP-Q2sp{Fg`*YW3Zc#6lb)q`ss3S`QIgI|3SnWam-pkd5`(uJp{%(%YIA_9*wnD z-?O1G0{b0W+JO;rtxzc02J`+aLz|*rKYo67hs$dE93ZCmS^!x;u9cegZ!B~t4N|B758EE}6H5+n> z6OdE5-f~;MkC6{<0WUntVtr5CXtL2GGoMj&hnex92+4?wZ(vyk)TD`-#Y+=uzBj79nb_rV_GZoobW~$I8jDkjcoq3e`WO zdP5#@0`hiX9^%$(v(<*_cbn#vkqoAnoRTxzP3Ny1f4su7S;qF$$Xr#gINp%9-L`Iq z>14^zBt7e~3{Kbaq(5@K#ebYqcH#fmxExJu%=+`%o_KAOwZt_T`4tVBmLN{h5~Ek2 zU~&Eb+Z1{KebIVi*7-vEO)@=+()2m=l|QbdX)-KPGN$IC_zw}Lh!ZeXxYeqvE(sy4-1mqi zPUU4+ofR#VMOVWYps-6o{4=XofH0Hm%-VQR!eqSNfyzHox$!XK1iWEEr@7+3--WrZ zskDsc{!(g?6z11;N-vA?M)-@3>Jr@UqVQcv{449ZK9vp&oQ%kKp!_d1V2C76LgZ|# zi7BK{Bts219)fLZnyDh@1|&)rWDZ6kU?O zhZFif#n$u8zvFT+dT=?Svm_nXC>hg>Fz`1TF-#LDVR}K^%XNQ!BK8@~m&Ei(Ev>wC zvm4FtqDK0w6kF5$FEYT9C$`*%mH)6h$!PuxRR5Dk49&y|XdYQ?KfqTB^`;r6zjUA0 zA&XNex1z8+#G?b=d0Syty=Lx-Jq=bc&peNxo&tQomu6I02J|yLONXkUVYyi9E`; z1c?$$#@{Yfjj$?Qj+TCoaX%TtLq@qtzEdlUG2js8p5G5+{Sz zj&GurUAWr0j;o1IsgjZP9?VWg$RbWaR$&p}Li!^+eUuxIp2?I!<$?PxB)t%@0!a zA&MguB?`W<*L;<%%M_<6_(oLoRi!>l!SqJ+eVcxnf-fEPMG7v?YpySAF8k`s6f+dF z6kJZxoXKm>C-rR#&IL3RTg{|QGhfgg%`}6oW_-|ef6Zo|grB2$g^T_dz;A+q zl*3eWM|NyLeuc68n1z2u{BmPMW7*hmWNcV)0kVkutg*t_AbxzdfHT8*VhBgz{{ek# BcG>^{ literal 12059 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 VQSK~^4&cXU3pg``CkAl@{y!o;U_Sr= diff --git a/src/codegen/cil_ast.py b/src/codegen/cil_ast.py index dd719ab8..34d83cf8 100644 --- a/src/codegen/cil_ast.py +++ b/src/codegen/cil_ast.py @@ -31,8 +31,9 @@ def __init__(self, fname, params, localvars, instructions, idx=None): self.index = idx class ParamNode(Node): - def __init__(self, name, idx=None): + def __init__(self, name, typex, idx=None): self.name = name + self.type = typex self.index = idx class LocalNode(Node): @@ -102,13 +103,14 @@ class EqualNode(BinaryNode): pass class GetAttribNode(InstructionNode): - def __init__(self, obj, attr, typex, dest, idx=None): + def __init__(self, obj, attr, typex, dest, attr_type, idx=None): super().__init__(idx) self.obj = obj self.attr = attr self.type_name = typex # self.attr_offset = offset self.dest = dest + self.attr_type = attr_type self.out = dest self.in1 = obj @@ -170,23 +172,23 @@ def __init__(self, cond, label, idx=None): self.in1 = cond class StaticCallNode(InstructionNode): - def __init__(self, xtype, function, dest, args, idx=None): + def __init__(self, xtype, function, dest, args, return_type, idx=None): super().__init__(idx) self.type = xtype self.function = function self.dest = dest self.args = args - + self.return_type = return_type self.out = dest class DynamicCallNode(InstructionNode): - def __init__(self, xtype, method, dest, args, idx=None): + def __init__(self, xtype, method, dest, args, return_type, idx=None): super().__init__(idx) self.type = xtype self.method = method self.dest = dest self.args = args - + self.return_type = return_type self.out = dest class ArgNode(InstructionNode): diff --git a/src/codegen/tools.py b/src/codegen/tools.py index 57acb2d2..1113903d 100644 --- a/src/codegen/tools.py +++ b/src/codegen/tools.py @@ -45,6 +45,11 @@ def __init__(self, in1, in2, out, in1nextuse, in2nextuse, outnextuse, in1islive, self.in2islive = in2islive self.outislive = outislive +class AddrType(Enum): + REF = 1, + STR = 2, + BOOL = 3, + INT = 4 class AddressDescriptor: 'Stores the location of each variable' @@ -60,8 +65,8 @@ def get_var_addr(self, name): def set_var_addr(self, name, addr): self.vars[name][0] = addr - def get_var_reg(self, name): - return self.vars[name][1] + def get_var_reg(self, var): + return self.vars[var][1] def set_var_reg(self, name, reg): self.vars[name][1] = reg diff --git a/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc index ee50a6aa3ca00b8370d1ba33ad0b6369ba756991..d247aaa86ea1af3b8588aa15ea7f5e77ea52a7f0 100644 GIT binary patch delta 732 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 delta 2897 zcmb7GU2GIp6z<*K+3w8#b=z)#wxvI`&@TPsClMM_poLl~ZGnP-3%E?X)3RlM+Pkx* z$kx(8_!W#E_06VDNHhjRwDG|h5;VRb5BlQE#2BA^^2tPFj4|GGrro6rMBQY*+`0G6 zIp6v2x##X5XMR58?s2=70`dFt#Jw25l z3NU-6Um7wbEur%ZA={uDO&GSgz~$}svy9a&FBaM@tQkI#6RZ)+lulL&hm;-mbs_|> zg*(aw+X(Y*kDOIqKE6dnG?Z~o563nAY%;<-kiur1 z^^B%D7a6RsRN_h_LNP)K)VoSLxrCXC|B5i5oJt}1o{9=qzBb$iA-QJAq|0+f(LkeAnxS9Is13q0>k(8`0j)`hT37?emYVi<h$5{^VQ)evtdr*=rn>U z$#4EOlAs(}Nj`+8GC)ZlmYw+zl603}{NIwiCF12I$rA!whj}chwNNEf9Z>mT58~O% zF?F$emlwGfRFtFCw-JndONFz`9L{*S8O(TJ$8lXrB&U7OkFTqzR{J#)x*I z;ds@Co*|4w!Dzz{<13y@Gs%NEdI^CxmRPv^G`*Wz#0r&;Mt{*T+E7k({0E7dQeAFU zEY-`6)nVp*RwMeF8qp8yY6dCOc636)i4dttEhrnDS7hU0TQX!Vk&bIz6}<`@m|4Jm z&{wmA9fC_W{&nkdmdI^Gdlof&AsJK0Tz*vZm{nn7hCHB-XfaAECwxELuiL=(!}oPv z{swfWBlIGWlVQwsc~|{=Y)-|=DFH#3NrX(%HBTYroTkOA;m~3!Eu7Nh9Q!Dr#yKm# zVzCPsdACnCZb;F2S_{XJEI*H*BCn7FM;g8g?7(+w=(%XbpdWCX_K9V~iuVU;ViwT3 z#*g+;F8QAbp%_1>5Su zF_Qcu`k6q$e-ws1stR>t;u_?&IGNQb=*?Hg+y^ugLIgx`jT$UUW5@~Zd^k0l6x}-k zN>he$xYpD=Cys?f91Esf7Uhg1V_l+uCt^my|0gS#w>+!pu8cHhIU??mp`iPT4a7VQ zc`%wtr-(eMiMz^QM4+}n$A)NUFIYisW-=TN?sPsYhmedLV_t)og`1F7P0w)iJfYVs z2vl!yx4FcwuwqLwgNLmh@Jq8_CQ5}vNgY^Q5VnaJ*U+96zfSF8DH!d|+v3;Jgf1(& zcPg!##ZT>=&hn^OUcHPJH1#5wRWr8f7%PVdo8r!!I7xA?Qk>H*JMHEiEVRT|hrZUB zH*0A)2DDU)n10rpwf?;|`Gm6@!da5l!B1_qtoiNsimrYU$FO0^(7j?f_Np;rY`A(v zv8=vvx}47;sTe{Wp%Y$i-_6?K-S!4{9X@Zbt-XcQR}tPoxQ%cJ;Z1}auxE2QcslNh J9KYyz@DCOeV2%I) diff --git a/src/codegen/visitors/base_cil_visitor.py b/src/codegen/visitors/base_cil_visitor.py index c8fd7b53..248a8a98 100644 --- a/src/codegen/visitors/base_cil_visitor.py +++ b/src/codegen/visitors/base_cil_visitor.py @@ -33,21 +33,20 @@ def localvars(self): def instructions(self): return self.current_function.instructions - def register_param(self, vinfo): - param_node = ParamNode(vinfo.name, self.index) - vinfo.name = f'param_{self.current_function.name[9:]}_{vinfo.name}_{len(self.params)}' + def register_param(self, vname, vtype): + name = f'param_{self.current_function.name[9:]}_{vname}_{len(self.params)}' + param_node = ParamNode(vname, vtype, self.index) self.params.append(param_node) - return vinfo.name + return vname - def register_local(self, vinfo): - name = f'local_{self.current_function.name[9:]}_{vinfo.name}_{len(self.localvars)}' + def register_local(self, vname): + name = f'local_{self.current_function.name[9:]}_{vname}_{len(self.localvars)}' local_node = LocalNode(name, self.index) self.localvars.append(local_node) return name def define_internal_local(self): - vinfo = VariableInfo('internal', None) - return self.register_local(vinfo) + return self.register_local('internal') def register_instruction(self, instruction): self.instructions.append(instruction) @@ -104,49 +103,4 @@ def initialize_attr(self, constructor, attr: Attribute, scope: Scope): elif attr.type == 'Bool': constructor.body.expr_list.append(AssignNode(attr.name, ConstantBoolNode(False))) elif attr.type == 'String': - constructor.body.expr_list.append(AssignNode(attr.name, ConstantStrNode(""))) - - - ###### TODO: Esto es lo de los métodos nativos que no creo que funcione ###### - def native_methods(self, typex: Type, name: str, *args): - if typex == StringType(): - return self.string_methods(name, *args) - elif typex == ObjectType(): - return self.object_methods(name, *args) - elif typex == IOType(): - return self.io_methods(name, *args) - - def string_methods(self, name, *args): - result = self.define_internal_local() - if name == 'length': - self.register_instruction(cil.LengthNode(result, *args)) - elif name == 'concat': - self.register_instruction(cil.ConcatNode(result, *args)) - elif name == 'substr': - self.register_instruction(cil.SubstringNode(result, *args)) - return result - - def object_methods(self, name, result, *args): - if name == 'abort': - pass - elif name == 'type_name': - pass - elif name == 'copy': - pass - - def io_methods(self, name, result, *args): - # ? Not sure of the difference between string and int - if name == 'out_string': - self.register_instruction(cil.PrintNode(*args)) - elif name == 'out_int': - aux = self.define_internal_local() - self.register_instruction(cil.ToStrNode(aux, *args)) - self.register_instruction(cil.PrintNode(aux)) - elif name == 'in_string': - result = self.define_internal_local() - self.register_instruction(cil.ReadNode(result)) - return result - elif name == 'in_int': - result = self.define_internal_local() - self.register_instruction(cil.ReadNode(result)) - return result + constructor.body.expr_list.append(AssignNode(attr.name, ConstantStrNode(""))) \ No newline at end of file diff --git a/src/codegen/visitors/base_mips_visitor.py b/src/codegen/visitors/base_mips_visitor.py index 6f0a65cb..c2684b3b 100644 --- a/src/codegen/visitors/base_mips_visitor.py +++ b/src/codegen/visitors/base_mips_visitor.py @@ -8,8 +8,7 @@ class BaseCILToMIPSVisitor: def __init__(self): self.code: list = [] self.initialize_data_code() - self.initialize_type_code() - + self.initialize_built_in_types() self.symbol_table = SymbolTable() # temp registers: t9, voy a usarlo para llevarlo de temporal en expresiones aritmeticas # Not sure if i should only use local registers @@ -19,6 +18,8 @@ def __init__(self): self.dispatch_table: DispatchTable = DispatchTable() self.obj_table: ObjTable = ObjTable(self.dispatch_table) self.initialize_methods() + # Will hold the type of any of the vars + self.var_address = {'self': AddrType.REF} def initialize_methods(self): self.methods = [] @@ -30,10 +31,13 @@ def initialize_methods(self): def initialize_data_code(self): self.data_code = ['.data'] - - def initialize_type_code(self): - self.type_code = [] - + def initialize_built_in_types(self): + self.data_code.append(f"type_String: .asciiz \"String\"") # guarda el nombre de la variable en la memoria + self.data_code.append(f"type_Int: .asciiz \"Int\"") # guarda el nombre de la variable en la memoria + self.data_code.append(f"type_Bool: .asciiz \"Bool\"") # guarda el nombre de la variable en la memoria + self.data_code.append(f"type_Object: .asciiz \"Object\"") # guarda el nombre de la variable en la memoria + self.data_code.append(f"type_IO: .asciiz \"IO\"") # guarda el nombre de la variable en la memoria + def get_basic_blocks(self, instructions: List[InstructionNode]): leaders = self.find_leaders(instructions) @@ -238,4 +242,14 @@ def get_method_offset(self, type_name, method_name): def save_meth_addr(self, func_nodes: List[FunctionNode]): self.methods += [funct.name for funct in func_nodes] words = 'methods: .word ' + ', '.join(map(lambda x: '0', self.methods)) - self.data_code.append(words) \ No newline at end of file + self.data_code.append(words) + + def get_type(self, xtype): + 'Return the var address type according to its static type' + if xtype == 'Int': + return AddrType.INT + elif xtype == 'Bool': + return AddrType.BOOL + elif xtype == 'String': + return AddrType.STR + return AddrType.REF \ No newline at end of file diff --git a/src/codegen/visitors/cil_visitor.py b/src/codegen/visitors/cil_visitor.py index 915d78a6..766ffc27 100644 --- a/src/codegen/visitors/cil_visitor.py +++ b/src/codegen/visitors/cil_visitor.py @@ -22,7 +22,7 @@ def visit(self, node: ProgramNode, scope: Scope): # self.register_instruction(cil.ArgNode(instance)) name = self.to_function_name('main', 'Main') - self.register_instruction(cil.StaticCallNode('Main', 'main', result, [cil.ArgNode(instance)])) + self.register_instruction(cil.StaticCallNode('Main', 'main', result, [cil.ArgNode(instance)], 'Object')) self.register_instruction(cil.ReturnNode(0)) self.current_function = None @@ -64,9 +64,9 @@ def visit(self, node: FuncDeclarationNode, scope: Scope): self.current_function = self.register_function(name) # Handle PARAMS - self.register_param(VariableInfo('self', self.current_type)) + self.register_param('self', self.current_type) for p_name, p_type in node.params: - self.register_param(VariableInfo(p_name, p_type)) + self.register_param(p_name, p_type) value, _ = self.visit(node.body, scope) @@ -79,7 +79,7 @@ def visit(self, node: FuncDeclarationNode, scope: Scope): def visit(self, node: VarDeclarationNode, scope: Scope): var_info = scope.find_variable(node.id) vtype = get_type(var_info.type, self.current_type) - local_var = self.register_local(VariableInfo(var_info.name, vtype)) + local_var = self.register_local(var_info.name) value, _ = self.visit(node.expr, scope) self.register_instruction(cil.AssignNode(local_var, value)) @@ -118,7 +118,7 @@ def visit(self, node: CallNode, scope: Scope): result = self.define_internal_local() # name = self.to_function_name(node.id, otype.name) - self.register_instruction(cil.StaticCallNode(otype.name, node.id, result, args_node)) + self.register_instruction(cil.StaticCallNode(otype.name, node.id, result, args_node, rtype.name)) return result, self._return_type(otype, node) @visitor.when(BaseCallNode) @@ -135,7 +135,7 @@ def visit(self, node: BaseCallNode, scope: Scope): result = self.define_internal_local() # name = self.to_function_name(node.id, node.type) - self.register_instruction(cil.StaticCallNode(node.type, node.id, result, args_node)) + self.register_instruction(cil.StaticCallNode(node.type, node.id, result, args_node, rtype.name)) return result, self._return_type(otype, node) @visitor.when(StaticCallNode) @@ -151,7 +151,7 @@ def visit(self, node: StaticCallNode, scope: Scope): else: result = self.define_internal_local() - self.register_instruction(cil.DynamicCallNode(self.current_type.name, node.id, result, args_node)) + self.register_instruction(cil.DynamicCallNode(self.current_type.name, node.id, result, args_node, rtype.name)) return result, self._return_type(self.current_type, node) @visitor.when(ConstantNumNode) @@ -181,9 +181,9 @@ def visit(self, node: VariableNode, scope: Scope): return name, get_type(typex, self.current_type) except: var_info = scope.find_attribute(node.lex) - local_var = self.register_local(var_info) + local_var = self.register_local(var_info.name) # attributes = [attr.name for attr, a_type in self.current_type.all_attributes()] - self.register_instruction(cil.GetAttribNode('self', var_info.name, self.current_type.name, local_var)) + self.register_instruction(cil.GetAttribNode('self', var_info.name, self.current_type.name, local_var, var_info.type.name)) return local_var, get_type(var_info.type, self.current_type) @visitor.when(InstantiateNode) @@ -313,7 +313,7 @@ def visit(self, node: OptionNode, scope: Scope, expr, expr_type, next_label): self.register_instruction(cil.GotoIfNode(aux, next_label)) var_info = scope.find_variable(node.id) - local_var = self.register_local(var_info) + local_var = self.register_local(var_info.name) self.register_instruction(cil.AssignNode(local_var, expr)) expr_i, typex = self.visit(node.expr, scope) diff --git a/src/codegen/visitors/mips_visitor.py b/src/codegen/visitors/mips_visitor.py index daf1b4cb..5ec1b08d 100644 --- a/src/codegen/visitors/mips_visitor.py +++ b/src/codegen/visitors/mips_visitor.py @@ -1,8 +1,9 @@ from codegen.cil_ast import * from utils import visitor from codegen.visitors.base_mips_visitor import BaseCILToMIPSVisitor -from codegen.tools import SymbolTable, AddressDescriptor, RegisterDescriptor +from codegen.tools import SymbolTable, AddressDescriptor, RegisterDescriptor, AddrType from semantic.tools import VariableInfo +from pprint import pprint class CILToMIPSVistor(BaseCILToMIPSVisitor): ''' @@ -37,6 +38,7 @@ def visit(self, node: ProgramNode): # visit TypeNodes for type_ in node.dottypes: self.visit(type_) + # visit DataNodes for data in node.dotdata: self.visit(data) @@ -45,7 +47,7 @@ def visit(self, node: ProgramNode): # visit code instrunctions for i, code in enumerate(node.dotcode): self.visit(code, 4*i) - + @visitor.when(TypeNode) def visit(self, node:TypeNode): self.obj_table.add_entry(node.name, node.methods, node.attributes) @@ -81,6 +83,7 @@ def visit(self, node:FunctionNode, index:int): @visitor.when(ParamNode) def visit(self, node:ParamNode, idx:int): self.symbol_table.insert_name(node.name) + self.var_address[node.name] = self.get_type(node.type) if idx <= 3: # los primeros 3 registros se guardan en a0-a3 self.addr_desc.insert_var(node.name, None, f'$a{idx}') self.reg_desc.insert_register(f'a{idx}', node.name) @@ -90,7 +93,7 @@ def visit(self, node:ParamNode, idx:int): @visitor.when(LocalNode) def visit(self, node:LocalNode, idx:int): - self.symbol_table.insert_name(node.name) # inserts the var in the symbol table, local by default + self.symbol_table.insert_name(node.name) # inserts the var in the symbol table, local by default self.addr_desc.insert_var(node.name, idx) # saves the address relative from the actual fp self.code.append(f'addiu $sp, $sp, -4') # updates stack pointers (pushing this value) @@ -100,16 +103,19 @@ def visit(self, node:AssignNode): if self.is_variable(node.source): rsrc = self.addr_desc.get_var_reg(node.source) self.code.append(f'move ${rdest}, ${rsrc}') + self.var_address[node.dest] = self.var_address[node.source] elif self.is_int(node.source): self.code.append(f'li ${rdest}, ${node.source}') - elif isinstance(node.source, str): # esto nunca se debe ejecutar (se llama a load node) - self.code.append(f'la ${rdest}, {self.strings[node.source]}') + self.var_address[node.dest] = AddrType.INT + # elif isinstance(node.source, str): # esto nunca se debe ejecutar (se llama a load node) + # self.code.append(f'la ${rdest}, {self.strings[node.source]}') @visitor.when(NotNode) def visit(self, node:NotNode): rdest = self.addr_desc.get_var_reg(node.dest) rscr = self.save_to_register(node.expr) self.code.append(f'not {rdest}, {rsrc}') + self.var_address[node.dest] = AddrType.BOOL @visitor.when(PlusNode) @@ -128,6 +134,7 @@ def visit(self, node:PlusNode): elif self.is_variable(node.right): rright = self.addr_desc.get_var_reg(node.right) self.code.append(f"addi ${rdest}, ${node.left}, ${rright}") + self.var_address[node.dest] = AddrType.INT @visitor.when(MinusNode) def visit(self, node:MinusNode): @@ -146,6 +153,7 @@ def visit(self, node:MinusNode): rright = self.addr_desc.get_var_reg(node.right) self.code.append(f"sub $t9, $zero, {rright}") self.code.append(f"addi ${rdest}, $t9, {node.left}") + self.var_address[node.dest] = AddrType.INT @visitor.when(StarNode) def visit(self, node:StarNode): @@ -175,6 +183,7 @@ def _code_to_mult_div(self, node, op:str): self.code.append(f"li $t9, {node.left}") self.code.append(f"{op} ${rright}, $t9") self.code.append(f"mflo ${rdest}") + self.var_address[node.dest] = AddrType.INT @visitor.when(LessNode) def visit(self, node:LessNode): @@ -205,11 +214,13 @@ def _code_to_comp(self, node, op): rright = self.addr_desc.get_var_reg(node.right) self.code.append(f"li $t9, {node.left}") self.code.append(f"{op} ${rdest}, $t9, {rright}") + self.var_address[node.dest] = AddrType.BOOL @visitor.when(GetAttribNode) def visit(self, node:GetAttribNode): rdest = self.addr_desc.get_var_reg(node.dest) + self.var_address[node.dest] = self.get_type(node.attr_type) rsrc = self.addr_desc.get_var_reg(node.obj) attr_offset = 4*self.get_attr_offset(node.attr, node.type_name) self.code.append(f'lw ${rdest}, {attr_offset}(${rsrc})') @@ -231,6 +242,7 @@ def visit(self, node:SetAttribNode): def visit(self, node:AllocateNode): rdest = self.addr_desc.get_var_reg(node.dest) size = 4*self.obj_table.size_of_entry(node.type) # size of the table entry of the new type + self.var_address[node.dest] = AddrType.REF # syscall to allocate memory of the object entry in heap self.code.append('li $v0, 9') # code to request memory self.code.append(f'li $a0, {size}') # argument (size) @@ -271,12 +283,16 @@ def visit(self, node:TypeOfNode): rdest = self.addr_desc.get_var_reg(node.dest) if self.is_variable(node.obj): rsrc = self.addr_desc.get_var_reg(node.obj) - # TODO: Falta comprobar si el tipo de la variable es por valor, en ese caso la información del nodo no estará en la primera posicion - # De todas formas todavía falta la implementacion de los tipos built in - self.code.append(f'la ${rdest}, 0(${rsrc})') # como en el offset 0 está el nombre del tipo this is ok + if self.var_address[node.obj] == AddrType.REF: + self.code.append(f'la ${rdest}, 0(${rsrc})') # como en el offset 0 está el nombre del tipo this is ok + elif self.var_address[node.obj] == AddrType.STR: + self.code.append(f'la ${rdest}, type_String') + elif self.var_address[node.obj] == AddrType.INT: + self.code.append(f'la ${rdest}, type_Int') + elif self.var_address[node.obj] == AddrType.BOOL: + self.code.append(f'la ${rdest}, type_Bool') elif self.is_int(node.obj): - # TODO: hacer algo para identificar el tipo int - pass + self.code.append(f'la ${rdest}, type_Int') @visitor.when(LabelNode) def visit(self, node:LabelNode): @@ -295,6 +311,7 @@ def visit(self, node:GotoIfNode): def visit(self, node:StaticCallNode): function = self.dispatch_table.find_full_name(node.type, node.function) self._code_to_function_call(node.args, function, node.dest) + self.var_address[node.dest] = self.get_type(node.return_type) @visitor.when(DynamicCallNode) def visit(self, node:DynamicCallNode): @@ -306,6 +323,7 @@ def visit(self, node:DynamicCallNode): self.code.append(f'lw $t8, {index}($t9)') # guarda en $t8 la dirección de la función a llamar # Call function self._code_to_function_call(node.args, '$t8', node.dest) + self.var_address[node.dest] = self.get_type(node.return_type) def _code_to_function_call(self, args, function, dest): self.empty_registers() # empty all used registers and saves them to memory @@ -354,4 +372,5 @@ def visit(self, node:ReturnNode): @visitor.when(LoadNode) def visit(self, node:LoadNode): rdest = self.addr_desc.get_var_reg(node.dest) + self.var_address[node.dest] = AddrType.STR self.code.append(f'la ${rdest}, {node.msg}') \ No newline at end of file diff --git a/src/cool_parser/output_parser/parselog.txt b/src/cool_parser/output_parser/parselog.txt index bb4c777d..0674a170 100644 --- a/src/cool_parser/output_parser/parselog.txt +++ b/src/cool_parser/output_parser/parselog.txt @@ -6146,19 +6146,19 @@ yacc.py: 411:State : 32 yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',3,23) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',3,23) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',3,23) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',3,23) @@ -6191,37 +6191,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',4,53) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar epsilon . LexToken(cpar,')',4,61) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar arg_list_empty . LexToken(cpar,')',4,61) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args . LexToken(cpar,')',4,61) @@ -6268,37 +6268,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args cpar . LexToken(ccur,'}',5,67) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['print','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) + yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot func_call . LexToken(ccur,'}',5,67) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : class type ocur def_func semi epsilon . LexToken(ccur,'}',6,70) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : class type ocur def_func semi feature_list . LexToken(ccur,'}',6,70) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 14 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['test1',':','Int'] and goto state 17 - yacc.py: 506:Result : ( ( id] with ['test3'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',12,146) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',12,146) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',12,146) @@ -6490,27 +6490,27 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur num . LexToken(minus,'-',13,165) yacc.py: 471:Action : Reduce rule [atom -> num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 160 - yacc.py: 506:Result : ( base_call] with [] and goto state 160 + yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 - yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( string] with ['1'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 + yacc.py: 506:Result : ( id colon type] with ['a',':','Alpha'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) + yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param . LexToken(comma,',',19,226) @@ -6678,24 +6678,24 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon type . LexToken(cpar,')',19,234) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['b',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) + yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 - yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 + yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 95 yacc.py: 430:Defaulted state 95: Reduce using 33 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals . LexToken(cpar,')',19,234) @@ -6732,12 +6732,12 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon type . LexToken(comma,',',20,265) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['count',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) + yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) yacc.py: 410: yacc.py: 411:State : 130 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let param . LexToken(comma,',',20,265) - yacc.py: 471:Action : Reduce rule [let_assign -> param] with [] and goto state 129 - yacc.py: 506:Result : ( param] with [] and goto state 129 + yacc.py: 506:Result : ( id colon type] with ['pow',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) + yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 130 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param . LexToken(larrow,'<-',20,276) @@ -6771,53 +6771,53 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow num . LexToken(in,'in',21,329) yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 - yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 + yacc.py: 506:Result : ( let_assign] with [] and goto state 197 - yacc.py: 506:Result : ([ let_assign] with [] and goto state 197 + yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 - yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 + yacc.py: 506:Result : ([ num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 135 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 196 - yacc.py: 506:Result : ( comp] with [] and goto state 196 + yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',26,389) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',26,389) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',26,389) @@ -7031,37 +7031,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new type . LexToken(comma,',',27,424) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ id opar args cpar] with ['testing2','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',30,450) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',30,450) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',30,450) @@ -7236,27 +7236,27 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar num . LexToken(plus,'+',31,480) yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 - yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',33,543) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',33,543) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar epsilon . LexToken(cpar,')',37,601) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list_empty . LexToken(cpar,')',37,601) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',37,601) @@ -7660,48 +7660,48 @@ yacc.py: 411:State : 93 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id opar string . LexToken(cpar,')',38,646) yacc.py: 471:Action : Reduce rule [atom -> string] with ['reached!!\n'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi epsilon . LexToken(ccur,'}',40,655) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi feature_list . LexToken(ccur,'}',40,655) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( (', pos) + Type.__init__(self, 'Void', pos) def conforms_to(self, other): return True From 5f7612bb1d0071622fe923a2c42fc9d210fb4f30 Mon Sep 17 00:00:00 2001 From: Amanda Marrero Date: Wed, 11 Nov 2020 17:44:16 -0700 Subject: [PATCH 36/60] Fixing some mistakes --- src/codegen/tools.py | 8 +- .../__pycache__/cil_visitor.cpython-37.pyc | Bin 12408 -> 12442 bytes src/codegen/visitors/base_mips_visitor.py | 4 +- src/codegen/visitors/cil_visitor.py | 14 +- src/codegen/visitors/mips_visitor.py | 18 +- src/cool_parser/output_parser/parselog.txt | 762 +++++++++--------- 6 files changed, 406 insertions(+), 400 deletions(-) diff --git a/src/codegen/tools.py b/src/codegen/tools.py index 1113903d..52d25a58 100644 --- a/src/codegen/tools.py +++ b/src/codegen/tools.py @@ -57,13 +57,17 @@ def __init__(self): self.vars = {} def insert_var(self, name, address, register=None, stack=None): - self.vars[name] = [address, register, stack] + if address is not None: + self.vars[name] = [4*address, register, stack] + else: + self.vars[name] = [address, register, stack] + def get_var_addr(self, name): return self.vars[name][0] def set_var_addr(self, name, addr): - self.vars[name][0] = addr + self.vars[name][0] = 4*addr def get_var_reg(self, var): return self.vars[var][1] diff --git a/src/codegen/visitors/__pycache__/cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/cil_visitor.cpython-37.pyc index d52d590c35dad6a6ec65b9e7d407ba8e687c4ce7..4c443db9e7add48c1f9c5930e47f081acc1afdfd 100644 GIT binary patch delta 1740 zcmZ`(&u<$=6!xsU_WrOP%hm<}TYkI~J)rmis!*kZeB#y{0>K5TQneEQ04fqaAXVxC=8cVA0>sLvw=-|v zeBXTY=27Wp**W8MN*4M@F5WKQ|Hk>9M9kJb={{$BoepXlct7oL{ovdsBn#QTxv3l- zO^TWWCvlzDhj1JL7nr=hwXQU@DU5B^N~NagCj8WQgyg~LeuW%`d3TEBTZUWWNC8HD zLD=)8-A8f#1j4fjZ^18~#Ly`k{(Gy_bkyXlxQ({hN<4L%$OTN~7!#QAd7;}TEKYSB}(uwbF$p>9%_*20@hhZ zV5CoCWJj1pIDv2sz79R-&SS``Fz@D>&r<)Ngw~S=Cgm*7yAWm}GjN!^3A+P_0&ErY zmaJ&gILq?bErIU`j*uTg44;`%g(lY|#9~n5;}y0ZIKeXTXL zT9wASmWPE{Kb(txo7>Nzq*bFAllAqybEa%(Q1zlub3aWgWyG&lSES2DK zEXS!X$izpcQE-7@QyO|P+1J+HE8i239cM~;+S&6J=H?EPJ`Z=|!Aw^=I}=)E-wV_x z#YAEiUSSUesy4+nUw;#Y`sDU*mlgwHW#T9t!PjMwF|CjQDh~^cU<|~+NE!P|ES9u=mT}5DR5S$_w zOU+HcEu6p|ZC-%}!|U4!-XFf@~m!ArOnA5v3%ZKGapHzIo` z8OsX1F!GSxfJ%B2mPTKs(PyI?MMr9b;(IBKAEtEq29{x7U#F#SIZ&N>0L|7;L3Au4 quVF$JVI3C6-XYiE+p%!?BOLe;;bVkP5I#i!gzNC~gumq)SIJ-73XLED delta 1663 zcmZ`(O>7%g5cXTgKfC^0oESTC@DH(LuN|jJi2w)Z>YCQMIa$@K|)4cdPH0}AXP#F-aH2z1+kXDot>HY zX1+Hw@3X?AykpMckPPg3NN?xveChaFBH8v2(vO1q6jRc9xRmg=zjd?-S%PI(dS;nv z6_MJ}i0h~eVFdvfbWGaY7u5!xLD^g_m1?S%h3{OmBm)llB$+%RZ z$yZRaARI?{31JcL`k#_BDDqu+tSrdiK zykcF`m1v55&(3JYqiI%6WJe?E)-Bsr;VOC2aDD?G8()Fkcw!g%WKBD2L(3`7E-k(b zC)4MK6Vj1hWs|td%SLr%{3b#GO=7XY$X3cVjfPO!rOYJ7b(BOmNpy-B3?nSK$_Ko` zG#znAy_~BRt8Cz_5Q~jlIwpQXa8en9QY`p{Oq{F<+f4kCn;abq;@4 diff --git a/src/codegen/visitors/base_mips_visitor.py b/src/codegen/visitors/base_mips_visitor.py index c2684b3b..1900d7c1 100644 --- a/src/codegen/visitors/base_mips_visitor.py +++ b/src/codegen/visitors/base_mips_visitor.py @@ -153,7 +153,7 @@ def get_reg_var(self, var): register = self.reg_desc.find_empty_reg() if register is not None: self.update_register(var, register) - self.code.append(self.save_var_code(var)) + self.save_var_code(var) return # Choose a register that requires the minimal number of load and store instructions @@ -193,7 +193,7 @@ def update_register(self, var, register): def save_var_code(self, var): "Code to save a variable to memory" - register, memory, _= self.addr_desc.get_var_storage(var) + memory, register, _= self.addr_desc.get_var_storage(var) self.code.append(f"sw ${register}, -{memory}($fp)") def load_var_code(self, var): diff --git a/src/codegen/visitors/cil_visitor.py b/src/codegen/visitors/cil_visitor.py index 766ffc27..b1b24e1b 100644 --- a/src/codegen/visitors/cil_visitor.py +++ b/src/codegen/visitors/cil_visitor.py @@ -229,11 +229,11 @@ def visit(self, node: WhileNode, scope: Scope): self.register_instruction(start_label) cond, _ = self.visit(node.cond, scope) - self.register_instruction(cil.GotoIfNode(cond, continue_label)) - self.register_instruction(cil.GotoNode(end_label)) + self.register_instruction(cil.GotoIfNode(cond, continue_label.label)) + self.register_instruction(cil.GotoNode(end_label.label)) self.register_instruction(continue_label) expr, typex = self.visit(node.expr, scope) - self.register_instruction(cil.GotoNode(start_label)) + self.register_instruction(cil.GotoNode(start_label.label)) self.register_instruction(end_label) self.register_instruction(cil.AssignNode(result, expr)) @@ -255,11 +255,11 @@ def visit(self, node: ConditionalNode, scope: Scope): end_label = cil.LabelNode("end") result = self.define_internal_local() - self.register_instruction(cil.GotoIfNode(cond, true_label)) + self.register_instruction(cil.GotoIfNode(cond, true_label.label)) false_expr, ftypex = self.visit(node.else_stm, scope) self.register_instruction(cil.AssignNode(result, false_expr)) - self.register_instruction(cil.GotoNode(end_label)) + self.register_instruction(cil.GotoNode(end_label.label)) self.register_instruction(true_label) true_expr, ttypex = self.visit(node.stm, scope) @@ -300,7 +300,7 @@ def visit(self, node: CaseNode, scope: Scope): next_label = cil.LabelNode(f'next_{i}') expr_i, label = self.visit(case, c_scope, expr, etype, next_label) self.register_instruction(cil.AssignNode(result, expr_i)) - self.register_instruction(cil.GotoNode(end_label)) + self.register_instruction(cil.GotoNode(end_label.label)) self.register_instruction(label) self.register_instruction(end_label) return result, typex @@ -311,7 +311,7 @@ def visit(self, node: OptionNode, scope: Scope, expr, expr_type, next_label): # TODO: Buscar una forma de representar conforms in cil self.register_instruction(cil.MinusNode(aux, expr_type, node.typex)) - self.register_instruction(cil.GotoIfNode(aux, next_label)) + self.register_instruction(cil.GotoIfNode(aux, next_label.label)) var_info = scope.find_variable(node.id) local_var = self.register_local(var_info.name) self.register_instruction(cil.AssignNode(local_var, expr)) diff --git a/src/codegen/visitors/mips_visitor.py b/src/codegen/visitors/mips_visitor.py index 5ec1b08d..46dc0e84 100644 --- a/src/codegen/visitors/mips_visitor.py +++ b/src/codegen/visitors/mips_visitor.py @@ -38,7 +38,6 @@ def visit(self, node: ProgramNode): # visit TypeNodes for type_ in node.dottypes: self.visit(type_) - # visit DataNodes for data in node.dotdata: self.visit(data) @@ -47,6 +46,7 @@ def visit(self, node: ProgramNode): # visit code instrunctions for i, code in enumerate(node.dotcode): self.visit(code, 4*i) + print() @visitor.when(TypeNode) def visit(self, node:TypeNode): @@ -66,11 +66,12 @@ def visit(self, node:FunctionNode, index:int): self.code.append(f'la $v0, methods') self.code.append(f'sw $t9, {4*index}($v0)') - self.code.append(f'move $fp, $sp') # gets the frame pointer from the stack + n = len(node.params) for i, param in enumerate(node.params): # gets the params from the stack - self.visit(param, i) - for i, var in enumerate(node.localvars): - self.visit(var, i+len(node.params)) + self.visit(param, i, n) + self.code.append(f'move $fp, $sp') # gets the frame pointer from the stack + for i, var in enumerate(node.localvars, len(node.params)): + self.visit(var, i) blocks = self.get_basic_blocks(node.instructions) self.next_use = self.construct_next_use(blocks) @@ -81,15 +82,16 @@ def visit(self, node:FunctionNode, index:int): self.visit(inst) @visitor.when(ParamNode) - def visit(self, node:ParamNode, idx:int): + def visit(self, node:ParamNode, idx:int, length:int): self.symbol_table.insert_name(node.name) self.var_address[node.name] = self.get_type(node.type) if idx <= 3: # los primeros 3 registros se guardan en a0-a3 - self.addr_desc.insert_var(node.name, None, f'$a{idx}') + addr = idx if length <= 3 else length - 4 + idx + self.addr_desc.insert_var(node.name, addr, f'$a{idx}') self.reg_desc.insert_register(f'a{idx}', node.name) else: self.code.append('addiu $sp, $sp, 4') # pops the register with the param value from stack - self.addr_desc.insert_var(node.name, idx) + self.addr_desc.insert_var(node.name, length-idx-1) @visitor.when(LocalNode) def visit(self, node:LocalNode, idx:int): diff --git a/src/cool_parser/output_parser/parselog.txt b/src/cool_parser/output_parser/parselog.txt index 0674a170..27463d2a 100644 --- a/src/cool_parser/output_parser/parselog.txt +++ b/src/cool_parser/output_parser/parselog.txt @@ -6146,19 +6146,19 @@ yacc.py: 411:State : 32 yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',3,23) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',3,23) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',3,23) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',3,23) @@ -6191,37 +6191,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',4,53) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar epsilon . LexToken(cpar,')',4,61) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar arg_list_empty . LexToken(cpar,')',4,61) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args . LexToken(cpar,')',4,61) @@ -6268,37 +6268,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args cpar . LexToken(ccur,'}',5,67) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['print','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) + yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot func_call . LexToken(ccur,'}',5,67) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : class type ocur def_func semi epsilon . LexToken(ccur,'}',6,70) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : class type ocur def_func semi feature_list . LexToken(ccur,'}',6,70) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 14 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['test1',':','Int'] and goto state 17 - yacc.py: 506:Result : ( ( id] with ['test3'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',12,146) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',12,146) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',12,146) @@ -6490,27 +6490,27 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur num . LexToken(minus,'-',13,165) yacc.py: 471:Action : Reduce rule [atom -> num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 160 - yacc.py: 506:Result : ( base_call] with [] and goto state 160 + yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 - yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( string] with ['1'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 + yacc.py: 506:Result : ( id colon type] with ['a',':','Alpha'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) + yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param . LexToken(comma,',',19,226) @@ -6678,24 +6678,24 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon type . LexToken(cpar,')',19,234) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['b',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) + yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 - yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 + yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 95 yacc.py: 430:Defaulted state 95: Reduce using 33 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals . LexToken(cpar,')',19,234) @@ -6732,12 +6732,12 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon type . LexToken(comma,',',20,265) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['count',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) + yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) yacc.py: 410: yacc.py: 411:State : 130 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let param . LexToken(comma,',',20,265) - yacc.py: 471:Action : Reduce rule [let_assign -> param] with [] and goto state 129 - yacc.py: 506:Result : ( param] with [] and goto state 129 + yacc.py: 506:Result : ( id colon type] with ['pow',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) + yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 130 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param . LexToken(larrow,'<-',20,276) @@ -6771,53 +6771,53 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow num . LexToken(in,'in',21,329) yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 - yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 + yacc.py: 506:Result : ( let_assign] with [] and goto state 197 - yacc.py: 506:Result : ([ let_assign] with [] and goto state 197 + yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 - yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 + yacc.py: 506:Result : ([ num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 135 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 196 - yacc.py: 506:Result : ( comp] with [] and goto state 196 + yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',26,389) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',26,389) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',26,389) @@ -7031,37 +7031,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new type . LexToken(comma,',',27,424) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ id opar args cpar] with ['testing2','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',30,450) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',30,450) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',30,450) @@ -7236,27 +7236,27 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar num . LexToken(plus,'+',31,480) yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 - yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',33,543) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',33,543) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar epsilon . LexToken(cpar,')',37,601) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list_empty . LexToken(cpar,')',37,601) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',37,601) @@ -7660,48 +7660,48 @@ yacc.py: 411:State : 93 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id opar string . LexToken(cpar,')',38,646) yacc.py: 471:Action : Reduce rule [atom -> string] with ['reached!!\n'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi epsilon . LexToken(ccur,'}',40,655) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi feature_list . LexToken(ccur,'}',40,655) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( ( Date: Wed, 11 Nov 2020 20:34:37 -0500 Subject: [PATCH 37/60] built-in Functions CIL --- src/codegen/cil_ast.py | 36 ++++++++++++++++++---- src/codegen/cil_built_in.py | 60 +++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+), 5 deletions(-) create mode 100644 src/codegen/cil_built_in.py diff --git a/src/codegen/cil_ast.py b/src/codegen/cil_ast.py index 7c0bd998..1f26b89d 100644 --- a/src/codegen/cil_ast.py +++ b/src/codegen/cil_ast.py @@ -10,10 +10,10 @@ def __init__(self, dottypes, dotdata, dotcode): class TypeNode(Node): - def __init__(self, name): + def __init__(self, name , atributes = [] ,methods = []): self.name = name - self.attributes = [] - self.methods = [] + self.attributes = atributes + self.methods = methods class DataNode(Node): @@ -198,8 +198,8 @@ class SubstringNode(InstructionNode): def __init__(self, dest, word, n): self.dest = dest self.word = word - self.n = n - + self.begin = begin + self.end = end class ToStrNode(InstructionNode): def __init__(self, dest, ivalue): @@ -220,3 +220,29 @@ def __init__(self, str_addr): class SelfNode(InstructionNode): def __init__(self): pass + + +class OutStringNode(InstructionNode): + def __init__(self,value): + self.value = value + +class OutIntNode(InstructionNode): + def __init__(self,value): + self.value = value + +class ReadStringNode(InstructionNode): + def __init__(self,dest): + self.dest = dest + +class ReadIntNode(InstructionNode): + def __init__(self,dest): + self.dest = dest + +class ExitNode(InstructionNode): + def __init__(self,value = 0): + self.value = value + +class CopyNode(InstructionNode): + def __init__(self,dest,source): + self.dest = dest + self.source = source \ No newline at end of file diff --git a/src/codegen/cil_built_in.py b/src/codegen/cil_built_in.py new file mode 100644 index 00000000..374fbaea --- /dev/null +++ b/src/codegen/cil_built_in.py @@ -0,0 +1,60 @@ + +from cil_ast import * + + +f1_params = [ParamNode("self")] +f1_localVars = [LocalNode("f1_self")] +f1_intructions = [AssignNode(f1_localVars[0],f1_params[0]),ExitNode(),ReturnNode(f1_localVars[0])] +f1 = FunctionNode("function_abort_Object",f1_params,f1_localVars,f1_intructions) + +f2_params = [ParamNode("self")] +f2_localVars = [LocalNode("f2_result")] +f2_intructions = [TypeOfNode(f2_params[0],f2_localVars[0]),ReturnNode(f2_localVars[0])] +f2 = FunctionNode("function_typeOf_Object",f2_params,f2_localVars,f2_intructions) + +f3_params = [ParamNode("self")] +f3_localVars = [LocalNode("f3_result")] +f3_intructions = [CopyNode(f3_localVars[0],f3_params[0]),ReturnNode(f3_localVars[0])] +f3 = FunctionNode("function_copy_Object",f3_params,f3_localVars,f3_intructions) + +f4_params = [ParamNode("self"),ParamNode("word")] +f4_localVars = [LocalNode("f4_self"),LocalNode("f4_word")] +f4_intructions = [AssignNode(f4_localVars[0],f4_params[0]),LoadNode(f4_localVars[1],f4_params[1]),OutStringNode(f4_localVars[1]),ReturnNode(f4_localVars[0])] +f4 = FunctionNode("function_outString_IO",f4_params,f4_localVars,f4_intructions) + +f5_params = [ParamNode("self"),ParamNode("number")] +f5_localVars = [LocalNode("f5_self")] +f5_intructions = [AssignNode(f5_localVars[0],f5_params[0]),OutIntNode(f5_params[1]),ReturnNode(f5_localVars[0])] +f5 = FunctionNode("function_outInt_IO",f5_params,f5_localVars,f5_intructions) + +f6_params = [ParamNode("self")] +f6_localVars = [LocalNode("f6_result")] +f6_intructions = [ReadIntNode(f6_localVars[0]),ReturnNode(f6_localVars[0])] +f6 = FunctionNode("function_inInt_IO",f6_params,f6_localVars,f6_intructions) + +f7_params = [ParamNode("self")] +f7_localVars = [LocalNode("f7_result")] +f7_intructions = [ReadStringNode(f7_localVars[0]),ReturnNode(f7_localVars[0])] +f7 = FunctionNode("function_inString_IO",f7_params,f7_localVars,f7_intructions) + +f8_params = [ParamNode("self")] +f8_localVars = [LocalNode("f8_word"),LocalNode("f8_result")] +f8_intructions = [LoadNode(f8_localVars[0],f8_params[0]),LengthNode(f8_localVars[1],f8_localVars[0]),ReturnNode(f8_localVars[1])] +f8 = FunctionNode("function_length_String",f8_params,f8_localVars,f8_intructions) + +f9_params = [ParamNode("self"),ParamNode("word")] +f9_localVars = [LocalNode("f9_word"),LocalNode("f9_word1"),LocalNode("f9_result")] +f9_intructions = [LoadNode(f9_localVars[0],f9_params[0]),LoadNode(f9_localVars[1],f9_params[1]),ConcatNode(f9_localVars[2],f9_localVars[0],f9_localVars[1]),ReturnNode(f9_localVars[2])] +f9 = FunctionNode("function_concat_String",f9_params,f9_localVars,f9_intructions) + +f10_params = [ParamNode("self"),ParamNode("begin"),ParamNode("end")] +f10_localVars = [LocalNode("f10_word"),LocalNode("f10_result")] +f10_intructions = [LoadNode(f10_localVars[0],f10_params[0]), SubstringNode(f10_localVars[1],f10_localVars[0],f10_params[1],f10_params[2])] +f10 = FunctionNode("function_substr_String",f10_params,f10_localVars,f10_intructions) + + +_data = [] + +_code = [f1,f2,f3,f4,f5,f6,f7,f8,f9,f10] + +_types = [TypeNode("Object",[],[f1,f2,f3]) , TypeNode("IO" , [],[f4,f5,f6,f7]) , TypeNode("String", [],[f8,f9,f10])] \ No newline at end of file From 2727f7c984a10d10b0a434e7f0f80b792df258bd Mon Sep 17 00:00:00 2001 From: Amanda Marrero Date: Thu, 12 Nov 2020 20:35:10 -0700 Subject: [PATCH 38/60] Fixing syntactics errors in mips code. Time to have fun with spim :) --- src/codegen/__init__.py | 11 +- .../__pycache__/__init__.cpython-37.pyc | Bin 723 -> 978 bytes .../base_cil_visitor.cpython-37.pyc | Bin 5048 -> 5153 bytes .../__pycache__/cil_visitor.cpython-37.pyc | Bin 12442 -> 12444 bytes src/codegen/visitors/base_cil_visitor.py | 9 +- src/codegen/visitors/base_mips_visitor.py | 8 +- src/codegen/visitors/cil_visitor.py | 2 +- src/codegen/visitors/mips_visitor.py | 75 +- src/cool_parser/output_parser/parselog.txt | 1759 +++-------------- src/main.py | 7 +- src/test.asm | 212 ++ src/test1.cl | 10 + 12 files changed, 552 insertions(+), 1541 deletions(-) create mode 100644 src/test.asm create mode 100644 src/test1.cl diff --git a/src/codegen/__init__.py b/src/codegen/__init__.py index 4cfcf538..2bf3bfe7 100644 --- a/src/codegen/__init__.py +++ b/src/codegen/__init__.py @@ -8,6 +8,13 @@ def codegen_pipeline(context, ast, scope): cool_to_cil = COOLToCILVisitor(context) cil_ast = cool_to_cil.visit(ast, scope) formatter = get_formatter() - cil_to_mips = CILToMIPSVistor().visit(cil_ast) print(formatter(cil_ast)) - return ast, context, scope, cil_ast \ No newline at end of file + data_code, text_code = CILToMIPSVistor().visit(cil_ast) + save_code(data_code, text_code) + return ast, context, scope, cil_ast + +def save_code(data_code, text_code): + text = '\n'.join(text_code) + '\n' + '\n'.join(data_code) + print(text) + with open('test.asm', 'w+') as fd: + fd.write(text) \ No newline at end of file diff --git a/src/codegen/__pycache__/__init__.cpython-37.pyc b/src/codegen/__pycache__/__init__.cpython-37.pyc index 3da409e9c7c51a5636eda9ed6ce59b019fa0475b..7df6384119562079e98f2406bbd0bc32d7bcf4bb 100644 GIT binary patch delta 460 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 DxOXig diff --git a/src/codegen/visitors/base_cil_visitor.py b/src/codegen/visitors/base_cil_visitor.py index 248a8a98..efe71746 100644 --- a/src/codegen/visitors/base_cil_visitor.py +++ b/src/codegen/visitors/base_cil_visitor.py @@ -3,6 +3,7 @@ from semantic.types import Type, StringType, ObjectType, IOType, Method, Attribute from codegen import cil_ast as cil from utils.ast import BinaryNode, UnaryNode, AssignNode +import re class BaseCOOLToCILVisitor: def __init__(self, context): @@ -14,6 +15,7 @@ def __init__(self, context): self.current_function = None self.context: Context = context self.idx = 0 + self.name_regex = re.compile('local_.+_(.+)_\d+') @property def index(self): @@ -60,9 +62,10 @@ def to_function_name(self, method_name, type_name): return f'function_{method_name}_{type_name}' def to_var_name(self, var_name): - for name in self.localvars: - if var_name == name.split('_')[2]: - return name + for node in self.localvars: + m = self.name_regex.match(node.name).groups()[0] + if m == var_name: + return node.name return '' def register_function(self, function_name): diff --git a/src/codegen/visitors/base_mips_visitor.py b/src/codegen/visitors/base_mips_visitor.py index 1900d7c1..1d50c439 100644 --- a/src/codegen/visitors/base_mips_visitor.py +++ b/src/codegen/visitors/base_mips_visitor.py @@ -6,7 +6,7 @@ class BaseCILToMIPSVisitor: def __init__(self): - self.code: list = [] + self.code: list = ['.text', '.globl main'] self.initialize_data_code() self.initialize_built_in_types() self.symbol_table = SymbolTable() @@ -153,7 +153,7 @@ def get_reg_var(self, var): register = self.reg_desc.find_empty_reg() if register is not None: self.update_register(var, register) - self.save_var_code(var) + self.load_var_code(var) return # Choose a register that requires the minimal number of load and store instructions @@ -198,8 +198,8 @@ def save_var_code(self, var): def load_var_code(self, var): "Code to load a variable from memory" - register, memory, _ = self.addr_desc.get_var_storage(var) - self.code.append(f'lw ${register}, -{memory}(fp)') + memory, register, _ = self.addr_desc.get_var_storage(var) + self.code.append(f'lw ${register}, -{memory}($fp)') def load_used_reg(self, registers): "Loads the used variables in there registers" diff --git a/src/codegen/visitors/cil_visitor.py b/src/codegen/visitors/cil_visitor.py index b1b24e1b..0f75b4ba 100644 --- a/src/codegen/visitors/cil_visitor.py +++ b/src/codegen/visitors/cil_visitor.py @@ -52,7 +52,7 @@ def visit(self, node: ClassDeclarationNode, scope: Scope): self.current_type.define_method(self.current_type.name, [], [], self.current_type) func_declarations += [f for f in node.features if isinstance(f, FuncDeclarationNode)] - for feature, child_scope in zip(func_declarations, [scope, scope.children]): + for feature, child_scope in zip(func_declarations, [scope] + scope.children): self.visit(feature, child_scope) diff --git a/src/codegen/visitors/mips_visitor.py b/src/codegen/visitors/mips_visitor.py index 46dc0e84..9d70b4ca 100644 --- a/src/codegen/visitors/mips_visitor.py +++ b/src/codegen/visitors/mips_visitor.py @@ -46,7 +46,7 @@ def visit(self, node: ProgramNode): # visit code instrunctions for i, code in enumerate(node.dotcode): self.visit(code, 4*i) - print() + return self.data_code, self.code @visitor.when(TypeNode) def visit(self, node:TypeNode): @@ -59,16 +59,20 @@ def visit(self, node:DataNode): @visitor.when(FunctionNode) def visit(self, node:FunctionNode, index:int): + self.code.append('') self.code.append(f'{node.name}:') # guardo la dirección del método en el array de métodos + self.code.append('# Save method direction in the methods array') self.code.append(f'la $t9, {node.name}') self.code.append(f'la $v0, methods') self.code.append(f'sw $t9, {4*index}($v0)') + self.code.append('# Gets the params from the stack') n = len(node.params) for i, param in enumerate(node.params): # gets the params from the stack self.visit(param, i, n) + self.code.append('# Gets the frame pointer from the stack') self.code.append(f'move $fp, $sp') # gets the frame pointer from the stack for i, var in enumerate(node.localvars, len(node.params)): self.visit(var, i) @@ -86,10 +90,12 @@ def visit(self, node:ParamNode, idx:int, length:int): self.symbol_table.insert_name(node.name) self.var_address[node.name] = self.get_type(node.type) if idx <= 3: # los primeros 3 registros se guardan en a0-a3 + self.code.append('# The 3 firsts registers are saved in a0-a3') addr = idx if length <= 3 else length - 4 + idx - self.addr_desc.insert_var(node.name, addr, f'$a{idx}') + self.addr_desc.insert_var(node.name, addr, f'a{idx}') self.reg_desc.insert_register(f'a{idx}', node.name) else: + self.code.append('# Pops the register with the param value') self.code.append('addiu $sp, $sp, 4') # pops the register with the param value from stack self.addr_desc.insert_var(node.name, length-idx-1) @@ -97,17 +103,19 @@ def visit(self, node:ParamNode, idx:int, length:int): def visit(self, node:LocalNode, idx:int): self.symbol_table.insert_name(node.name) # inserts the var in the symbol table, local by default self.addr_desc.insert_var(node.name, idx) # saves the address relative from the actual fp + self.code.append(f'# Updates stack pointer pushing {node.name} to the stack') self.code.append(f'addiu $sp, $sp, -4') # updates stack pointers (pushing this value) @visitor.when(AssignNode) def visit(self, node:AssignNode): rdest = self.addr_desc.get_var_reg(node.dest) + self.code.append(f'# Moving {node.source} to {node.dest}') if self.is_variable(node.source): rsrc = self.addr_desc.get_var_reg(node.source) self.code.append(f'move ${rdest}, ${rsrc}') self.var_address[node.dest] = self.var_address[node.source] elif self.is_int(node.source): - self.code.append(f'li ${rdest}, ${node.source}') + self.code.append(f'li ${rdest}, {node.source}') self.var_address[node.dest] = AddrType.INT # elif isinstance(node.source, str): # esto nunca se debe ejecutar (se llama a load node) # self.code.append(f'la ${rdest}, {self.strings[node.source]}') @@ -116,6 +124,7 @@ def visit(self, node:AssignNode): def visit(self, node:NotNode): rdest = self.addr_desc.get_var_reg(node.dest) rscr = self.save_to_register(node.expr) + self.code.append(f'# {node.dest} <- not {node.expr}') self.code.append(f'not {rdest}, {rsrc}') self.var_address[node.dest] = AddrType.BOOL @@ -123,6 +132,7 @@ def visit(self, node:NotNode): @visitor.when(PlusNode) def visit(self, node:PlusNode): rdest = self.addr_desc.get_var_reg(node.dest) + self.code.append(f'# {node.dest} <- {node.left} + {node.right}') if self.is_variable(node.left): rleft = self.addr_desc.get_var_reg(node.left) if self.is_variable(node.right): @@ -141,6 +151,7 @@ def visit(self, node:PlusNode): @visitor.when(MinusNode) def visit(self, node:MinusNode): rdest = self.addr_desc.get_var_reg(node.dest) + self.code.append(f'# {node.dest} <- {node.left} - {node.right}') if self.is_variable(node.left): rleft = self.addr_desc.get_var_reg(node.left) if self.is_variable(node.right): @@ -159,10 +170,12 @@ def visit(self, node:MinusNode): @visitor.when(StarNode) def visit(self, node:StarNode): + self.code.append(f'# {node.dest} <- {node.left} * {node.right}') self._code_to_mult_div(node, op='mult') @visitor.when(DivNode) def visit(self, node:DivNode): + self.code.append(f'# {node.dest} <- {node.left} / {node.right}') self._code_to_mult_div(node, op='div') def _code_to_mult_div(self, node, op:str): @@ -189,14 +202,17 @@ def _code_to_mult_div(self, node, op:str): @visitor.when(LessNode) def visit(self, node:LessNode): + self.code.append(f'# {node.dest} <- {node.left} < {node.right}') self._code_to_comp(node, op='slt') @visitor.when(LessEqNode) def visit(self, node:MinusNode): + self.code.append(f'# {node.dest} <- {node.left} <= {node.right}') self._code_to_comp(node, op='sle') @visitor.when(EqualNode) def visit(self, node:MinusNode): + self.code.append(f'# {node.dest} <- {node.left} = {node.right}') self._code_to_comp(node, op='seq') def _code_to_comp(self, node, op): @@ -221,6 +237,7 @@ def _code_to_comp(self, node, op): @visitor.when(GetAttribNode) def visit(self, node:GetAttribNode): + self.code.append(f'# {node.dest} <- GET {node.obj} . {node.type_name}') rdest = self.addr_desc.get_var_reg(node.dest) self.var_address[node.dest] = self.get_type(node.attr_type) rsrc = self.addr_desc.get_var_reg(node.obj) @@ -230,6 +247,7 @@ def visit(self, node:GetAttribNode): @visitor.when(SetAttribNode) def visit(self, node:SetAttribNode): + self.code.append(f'# {node.obj} . {node.attr} <- SET {node.value}') rdest = self.addr_desc.get_var_reg(node.obj) attr_offset = 4*self.get_attr_offset(node.attr, node.type_name) if self.is_variable(node.value): @@ -246,16 +264,25 @@ def visit(self, node:AllocateNode): size = 4*self.obj_table.size_of_entry(node.type) # size of the table entry of the new type self.var_address[node.dest] = AddrType.REF # syscall to allocate memory of the object entry in heap + var = self.reg_desc.get_content('a0') + if var is not None: + self.code.append('# Saving content of a0 to memory to use that register') + self.save_var_code(var) + + self.code.append('# Syscall to allocate memory of the object entry in heap') self.code.append('li $v0, 9') # code to request memory self.code.append(f'li $a0, {size}') # argument (size) self.code.append('syscall') # in v0 is the address of the new memory addrs_stack = self.addr_desc.get_var_addr(node.dest) - self.code.append(f'sw $v0, -{addrs_stack}(fp)') # save the address in the stack (where is the local variable) + self.code.append('# Save the address in the stack') + self.code.append(f'sw $v0, -{addrs_stack}($fp)') # save the address in the stack (where is the local variable) + self.code.append('# Loads the name of the variable and saves the name like the first field') self.code.append(f'la $t9, type_{node.type}') # loads the name of the variable self.code.append(f'sw $t9, 0($v0)') # saves the name like the first field + self.code.append(f'# Saves the size of the node') self.code.append(f'li $t9, {size}') # saves the size of the node self.code.append(f'sw $t9, 4($v0)') # this is the second file of the table offset self.code.append(f'move ${rdest}, $v0') # guarda la nueva dirección de la variable en el registro destino @@ -263,26 +290,36 @@ def visit(self, node:AllocateNode): self.create_dispatch_table(node.type) # memory of dispatch table in v0 self.code.append(f'sw $v0, 8(${rdest})') # save a pointer of the dispatch table in the 3th position + if var is not None: + self.code.append('# Restore the variable of a0') + self.load_var_code(var) + def create_dispatch_table(self, type_name): # Get methods of the dispatch table methods = self.dispatch_table.get_methods(type_name) # Allocate the dispatch table in the heap + self.code.append('# Allocate dispatch table in the heap') self.code.append('li $v0, 9') # code to request memory dispatch_table_size = 4*len(methods) self.code.append(f'li $a0, {dispatch_table_size}') self.code.append('syscall') # Memory of the dispatch table in v0 + self.code.append(f'# I save the offset of every one of the methods of this type') for i, meth in enumerate(methods): # guardo el offset de cada uno de los métodos de este tipo offset = 4*self.methods.index(meth) - self.code.append(f'la $t8, methods') # cargo la dirección de methods + self.code.append('# Save the direction of methods') + self.code.append('la $t8, methods') # cargo la dirección de methods + self.code.append(f'# Save the direction of the method {meth} in t9') self.code.append(f'lw $t9, {offset}($t8)') # cargo la dirección del método en t9 + self.code.append('# Save the direction of the method in his position in the dispatch table') self.code.append(f'sw $t9, {4*i}($v0)') # guardo la direccion del metodo en su posicion en el dispatch table @visitor.when(TypeOfNode) def visit(self, node:TypeOfNode): rdest = self.addr_desc.get_var_reg(node.dest) + self.code.append(f'{node.dest} <- Type of {node.obj}') if self.is_variable(node.obj): rsrc = self.addr_desc.get_var_reg(node.obj) if self.var_address[node.obj] == AddrType.REF: @@ -307,50 +344,64 @@ def visit(self, node:GotoNode): @visitor.when(GotoIfNode) def visit(self, node:GotoIfNode): reg = self.save_to_register(node.cond) + self.code.append(f'# If {node.cond} goto {node.label}') self.code.append(f'bnez ${reg}, {node.label}') @visitor.when(StaticCallNode) def visit(self, node:StaticCallNode): function = self.dispatch_table.find_full_name(node.type, node.function) + self.code.append(f'# Static Dispatch of the method {node.function}') self._code_to_function_call(node.args, function, node.dest) + self.var_address[node.dest] = self.get_type(node.return_type) @visitor.when(DynamicCallNode) def visit(self, node:DynamicCallNode): # Find the actual name of the method in the dispatch table + self.code.append('# Find the actual name in the dispatch table') reg = self.addr_desc.get_var_reg('self') # obtiene la instancia actual + self.code.append('# Gets in t9 the actual direction of the dispatch table') self.code.append(f'lw $t9, 8(${reg})') # obtiene en t9 la dirección del dispatch table function = self.dispatch_table.find_full_name(node.type, node.method) index = self.dispatch_table.get_offset(node.type, function) # guarda el offset del me + self.code.append(f'# Saves in t9 the direction of {function}') self.code.append(f'lw $t8, {index}($t9)') # guarda en $t8 la dirección de la función a llamar # Call function self._code_to_function_call(node.args, '$t8', node.dest) + self.var_address[node.dest] = self.get_type(node.return_type) def _code_to_function_call(self, args, function, dest): - self.empty_registers() # empty all used registers and saves them to memory self.push_register('fp') # pushes fp register to the stack self.push_register('ra') # pushes ra register to the stack + self.code.append('# Push the arguments to the stack') for i, arg in enumerate(args): # push the arguments to the stack self.visit(arg, i) + self.code.append('# Empty all used registers and saves them to memory') + self.empty_registers() # empty all used registers and saves them to memory + self.code.append('# This function will consume the arguments') self.code.append(f'jal {function}') # this function will consume the arguments - + self.code.append('# Pop fp register from the stack') self.pop_register('fp') # pop fp register from the stack if dest is not None: + self.get_reg_var(dest) rdest = self.addr_desc.get_var_reg(dest) + self.code.append('# saves the return value') self.code.append(f'move ${rdest}, $v0') # v0 es usado para guardar el valor de retorno @visitor.when(ArgNode) def visit(self, node:ArgNode, idx): - if idx <= 3: # los primeros 3 registros se guardan en a0-a2 + if idx <= 3: # los primeros 3 registros se guardan en a0-a3 reg = f'a{idx}' + self.code.append('# The 3 first registers are saved in a0-a3') if self.is_variable(node.dest): rdest = self.addr_desc.get_var_reg(node.dest) self.code.append(f'move ${reg}, ${rdest}') elif self.is_int(node.dest): self.code.append(f'li ${reg}, {node.dest}') else: + self.code.append('# The rest of the arguments are push into the stack') self.code.append('addiu $sp, $sp, -4') if self.is_variable(node.dest): reg = self.addr_desc.get_var_reg(node.dest) @@ -361,18 +412,24 @@ def visit(self, node:ArgNode, idx): @visitor.when(ReturnNode) def visit(self, node:ReturnNode): + self.code.append('# Pop ra register of return function of the stack') self.pop_register('ra') # pop register ra from the stack # save the return value if self.is_variable(node.value): rdest = self.addr_desc.get_var_reg(node.value) - self.code.append(f'move $v0, {rdest}') + self.code.append(f'move $v0, ${rdest}') elif self.is_int(node.value): self.code.append(f'li $v0, {node.value}') + self.code.append('# Empty all used registers and saves them to memory') + self.empty_registers() # empty all used registers and saves them to memory # return to the caller self.code.append(f'jr $ra') + self.code.append('') + @visitor.when(LoadNode) def visit(self, node:LoadNode): rdest = self.addr_desc.get_var_reg(node.dest) + self.code.append(f'Saves in {node.dest} {node.msg}') self.var_address[node.dest] = AddrType.STR self.code.append(f'la ${rdest}, {node.msg}') \ No newline at end of file diff --git a/src/cool_parser/output_parser/parselog.txt b/src/cool_parser/output_parser/parselog.txt index 27463d2a..67261175 100644 --- a/src/cool_parser/output_parser/parselog.txt +++ b/src/cool_parser/output_parser/parselog.txt @@ -6132,1690 +6132,409 @@ yacc.py: 445:Action : Shift and goto state 8 yacc.py: 410: yacc.py: 411:State : 8 - yacc.py: 435:Stack : class type . LexToken(ocur,'{',1,11) - yacc.py: 445:Action : Shift and goto state 10 - yacc.py: 410: - yacc.py: 411:State : 10 - yacc.py: 435:Stack : class type ocur . LexToken(id,'main',3,18) - yacc.py: 445:Action : Shift and goto state 19 - yacc.py: 410: - yacc.py: 411:State : 19 - yacc.py: 435:Stack : class type ocur id . LexToken(opar,'(',3,22) - yacc.py: 445:Action : Shift and goto state 32 - yacc.py: 410: - yacc.py: 411:State : 32 - yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',3,23) - yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',3,23) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',3,23) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',3,23) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : class type ocur id opar formals cpar . LexToken(colon,':',3,24) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon . LexToken(type,'Object',3,26) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type . LexToken(ocur,'{',3,33) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur . LexToken(opar,'(',4,43) - yacc.py: 445:Action : Shift and goto state 80 - yacc.py: 410: - yacc.py: 411:State : 80 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar . LexToken(new,'new',4,44) - yacc.py: 445:Action : Shift and goto state 89 - yacc.py: 410: - yacc.py: 411:State : 89 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new . LexToken(type,'Alpha',4,48) - yacc.py: 445:Action : Shift and goto state 134 - yacc.py: 410: - yacc.py: 411:State : 134 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',4,53) - yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 150 - yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar epsilon . LexToken(cpar,')',4,61) - yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 149 - yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar arg_list_empty . LexToken(cpar,')',4,61) - yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args . LexToken(cpar,')',4,61) - yacc.py: 445:Action : Shift and goto state 191 - yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args cpar . LexToken(ccur,'}',5,67) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['print','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) - yacc.py: 410: - yacc.py: 411:State : 167 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot func_call . LexToken(ccur,'}',5,67) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 16 - yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : class type ocur def_func semi epsilon . LexToken(ccur,'}',6,70) - yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 48 - yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : class type ocur def_func semi feature_list . LexToken(ccur,'}',6,70) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 14 - yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( id colon type] with ['test1',':','Int'] and goto state 17 - yacc.py: 506:Result : ( id] with ['test3'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',12,146) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',12,146) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',12,146) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar . LexToken(colon,':',12,147) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon . LexToken(type,'Int',12,149) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',12,153) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur . LexToken(num,2.0,13,163) - yacc.py: 445:Action : Shift and goto state 88 - yacc.py: 410: - yacc.py: 411:State : 88 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur num . LexToken(minus,'-',13,165) - yacc.py: 471:Action : Reduce rule [atom -> num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 160 - yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( string] with ['1'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type] with ['a',':','Alpha'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) - yacc.py: 410: - yacc.py: 411:State : 44 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param . LexToken(comma,',',19,226) - yacc.py: 445:Action : Shift and goto state 60 - yacc.py: 410: - yacc.py: 411:State : 60 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma . LexToken(id,'b',19,228) - yacc.py: 445:Action : Shift and goto state 46 - yacc.py: 410: - yacc.py: 411:State : 46 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id . LexToken(colon,':',19,229) - yacc.py: 445:Action : Shift and goto state 61 - yacc.py: 410: - yacc.py: 411:State : 61 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon . LexToken(type,'Int',19,231) - yacc.py: 445:Action : Shift and goto state 96 - yacc.py: 410: - yacc.py: 411:State : 96 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon type . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['b',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) - yacc.py: 410: - yacc.py: 411:State : 44 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 - yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) - yacc.py: 410: - yacc.py: 411:State : 95 - yacc.py: 430:Defaulted state 95: Reduce using 33 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) - yacc.py: 410: - yacc.py: 411:State : 42 - yacc.py: 430:Defaulted state 42: Reduce using 30 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals . LexToken(cpar,')',19,234) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar . LexToken(colon,':',19,235) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon . LexToken(type,'Int',19,237) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',19,241) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur . LexToken(let,'let',20,251) - yacc.py: 445:Action : Shift and goto state 84 - yacc.py: 410: - yacc.py: 411:State : 84 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let . LexToken(id,'count',20,255) - yacc.py: 445:Action : Shift and goto state 46 - yacc.py: 410: - yacc.py: 411:State : 46 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id . LexToken(colon,':',20,260) - yacc.py: 445:Action : Shift and goto state 61 - yacc.py: 410: - yacc.py: 411:State : 61 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon . LexToken(type,'Int',20,262) - yacc.py: 445:Action : Shift and goto state 96 - yacc.py: 410: - yacc.py: 411:State : 96 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon type . LexToken(comma,',',20,265) - yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['count',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) - yacc.py: 410: - yacc.py: 411:State : 130 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let param . LexToken(comma,',',20,265) - yacc.py: 471:Action : Reduce rule [let_assign -> param] with [] and goto state 129 - yacc.py: 506:Result : ( id colon type] with ['pow',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) - yacc.py: 410: - yacc.py: 411:State : 130 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param . LexToken(larrow,'<-',20,276) - yacc.py: 445:Action : Shift and goto state 173 - yacc.py: 410: - yacc.py: 411:State : 173 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow . LexToken(num,1.0,20,279) - yacc.py: 445:Action : Shift and goto state 88 - yacc.py: 410: - yacc.py: 411:State : 88 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow num . LexToken(in,'in',21,329) - yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 - yacc.py: 506:Result : ( let_assign] with [] and goto state 197 - yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 - yacc.py: 506:Result : ([ num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 - yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 135 - yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 196 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',26,389) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',26,389) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',26,389) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar . LexToken(colon,':',26,390) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon . LexToken(type,'Int',26,392) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',26,396) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'testing2',27,406) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id . LexToken(opar,'(',27,414) - yacc.py: 445:Action : Shift and goto state 113 - yacc.py: 410: - yacc.py: 411:State : 113 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar . LexToken(new,'new',27,415) - yacc.py: 445:Action : Shift and goto state 89 - yacc.py: 410: - yacc.py: 411:State : 89 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new . LexToken(type,'Alpha',27,419) - yacc.py: 445:Action : Shift and goto state 134 - yacc.py: 410: - yacc.py: 411:State : 134 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new type . LexToken(comma,',',27,424) - yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',30,450) + yacc.py: 435:Stack : class type inherits type ocur id opar epsilon . LexToken(cpar,')',3,35) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',30,450) + yacc.py: 435:Stack : class type inherits type ocur id opar param_list_empty . LexToken(cpar,')',3,35) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',30,450) + yacc.py: 435:Stack : class type inherits type ocur id opar formals . LexToken(cpar,')',3,35) yacc.py: 445:Action : Shift and goto state 64 yacc.py: 410: yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',30,451) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar . LexToken(colon,':',3,36) yacc.py: 445:Action : Shift and goto state 100 yacc.py: 410: yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'Int',30,453) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon . LexToken(type,'Object',3,38) yacc.py: 445:Action : Shift and goto state 138 yacc.py: 410: yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',30,457) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type . LexToken(ocur,'{',3,45) yacc.py: 445:Action : Shift and goto state 181 yacc.py: 410: yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'test1',31,467) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(larrow,'<-',31,473) - yacc.py: 445:Action : Shift and goto state 112 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur . LexToken(let,'let',4,55) + yacc.py: 445:Action : Shift and goto state 84 yacc.py: 410: - yacc.py: 411:State : 112 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow . LexToken(opar,'(',31,477) - yacc.py: 445:Action : Shift and goto state 80 + yacc.py: 411:State : 84 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur let . LexToken(id,'test1',4,59) + yacc.py: 445:Action : Shift and goto state 46 yacc.py: 410: - yacc.py: 411:State : 80 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar . LexToken(num,1.0,31,478) - yacc.py: 445:Action : Shift and goto state 88 + yacc.py: 411:State : 46 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur let id . LexToken(colon,':',4,64) + yacc.py: 445:Action : Shift and goto state 61 yacc.py: 410: - yacc.py: 411:State : 88 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar num . LexToken(plus,'+',31,480) - yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( id colon type] with ['test1',':','Int'] and goto state 130 + yacc.py: 506:Result : ((LexToken(id,'test1',4,59), LexToken(typ ...) yacc.py: 410: - yacc.py: 411:State : 77 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar factor . LexToken(plus,'+',31,480) - yacc.py: 471:Action : Reduce rule [base_call -> factor] with [] and goto state 76 - yacc.py: 506:Result : ( param] with [] and goto state 129 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( let_assign] with [] and goto state 128 + yacc.py: 506:Result : ([ term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( id] with ['test1'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 16 - yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',33,543) - yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 48 - yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',33,543) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( id opar args cpar] with ['out_int','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_int',7,115), [ atom] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar epsilon . LexToken(cpar,')',37,601) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list_empty . LexToken(cpar,')',37,601) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',37,601) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar . LexToken(colon,':',37,603) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon . LexToken(type,'Object',37,605) - yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur let let_list in ocur expr semi comp . LexToken(semi,';',7,129) + yacc.py: 471:Action : Reduce rule [expr -> comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ string] with ['reached!!\n'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ comp] with [] and goto state 196 + yacc.py: 506:Result : ( func_call] with [] and goto state 77 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi epsilon . LexToken(ccur,'}',40,655) + yacc.py: 435:Stack : class type inherits type ocur def_func semi epsilon . LexToken(ccur,'}',10,148) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi feature_list . LexToken(ccur,'}',40,655) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ def_class] with [] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( ( Date: Thu, 12 Nov 2020 22:29:01 -0700 Subject: [PATCH 39/60] Adding constructor call to set attrs and fixing some other syntactic mistakes --- .../__pycache__/cil_ast.cpython-37.pyc | Bin 12145 -> 12163 bytes src/codegen/cil_ast.py | 3 + .../base_cil_visitor.cpython-37.pyc | Bin 5153 -> 5140 bytes .../__pycache__/cil_visitor.cpython-37.pyc | Bin 12444 -> 12147 bytes src/codegen/visitors/base_cil_visitor.py | 2 +- src/codegen/visitors/base_mips_visitor.py | 6 + src/codegen/visitors/cil_visitor.py | 61 +- src/codegen/visitors/mips_visitor.py | 20 +- src/cool_parser/output_parser/parselog.txt | 1759 ++++++++++++++--- src/main.py | 2 +- src/test.asm | 498 ++++- src/test1.cl | 10 +- 12 files changed, 2017 insertions(+), 344 deletions(-) diff --git a/src/codegen/__pycache__/cil_ast.cpython-37.pyc b/src/codegen/__pycache__/cil_ast.cpython-37.pyc index 4fabe3897813ac1ba0d5afaf9a7e12525be62beb..2989af78cb94b3d0287c5a654a487faf65785a0f 100644 GIT binary patch delta 302 zcmewu*BsC5#LLUY00f`J*TuVU}LD}loOvUuNlDjdvby1 zOGfs|QCjhgY?F6sonjQ2+^QYL$Upgk_60`q$s2W|8O0{^>aJ&$o4i*yj8S&8h@Kmx WIJW?g06P$J2yg;f+(5_);sXFdfKku@ delta 303 zcmZpU{}{*X#LLUY00im9YvLs~@;1paGESZ#cVzNOS>MTPOXX`tEaP{|qP~&a%ULD-Q#mEd__q>GCFOP)L^1T*aR`yABx>aP z>u`c}ALn2ixANbLV<^;yS{A!6;s@0UoKsg%zC`jwcrZ=x6lQow^8&}+Zs7N-J;{`e z9GbLu0&CiEsY%i)ysvEx)qR=VBhcx zfvHNz@G5Vl{`|0Q`~Txla+n?&1UbTaf)O}GB{I_3aygYFR&K|M~{zp3X|dj_6pHeKC2X&`BbN1$1zwkkp<49 zTpm>>g`^yZ)`0gmo-3};Wep{zjvL<#omBtAp_|mw4E|nhh|Bm_@xjM3uTyMQ>)3Jo zo=jw-Z$Q}VM*R%8j4it#l*+YCL?;_ki9$LgUBM@%FDGP~USP+vR{itgYWd`Jrg>|F zR#@)^?U=H)g7?eYmyYPADQ_p}O* z9os|u=DB62e1wyu7sUd8IErg;kX6%2dt-q;TxGaMkm%q>JwJx``9tH7wqb>(nUmKo z$6faV*ShNkHtfg%*6^L`qMjPWud1!JWj3O^+g$+Za%7lGxX$KpGTa#AX#CJoZ{Wwm z`LU&aj=8N8@WXG;)qC`h9un*+n>jeOCpN{V@?$<$>09Hy1Lctrxu8pH-4S0Xu>4<6 zJmM$^qR+Y^S$Sgl8J6LkQ3tfslBN;uL55bq+1hOL62)T{myq2t8(o&D3aOpGps zG}q#tw3Fm4l$S?d{?~{irv<#uD=rjVWO$2Vk>Op2D-4`ps4?&aO7d;bPt@Do)~mcZ s&TxyN%J8Z5@;qj_;;9eE2-rfz0UE+6<7E9O@j3ocZ;oa8_)mTMU#=f}-2eap delta 1700 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 YcL;QP-nll}3u&I6JPxV7%aeofKXF=sp#T5? diff --git a/src/codegen/visitors/base_cil_visitor.py b/src/codegen/visitors/base_cil_visitor.py index efe71746..6204932c 100644 --- a/src/codegen/visitors/base_cil_visitor.py +++ b/src/codegen/visitors/base_cil_visitor.py @@ -16,6 +16,7 @@ def __init__(self, context): self.context: Context = context self.idx = 0 self.name_regex = re.compile('local_.+_(.+)_\d+') + self.constructors = [] @property def index(self): @@ -99,7 +100,6 @@ def _define_unary_node(self, node: UnaryNode, scope: Scope, cil_node): def initialize_attr(self, constructor, attr: Attribute, scope: Scope): if attr.expr: - expr, _ = self.visit(attr.expr, scope) constructor.body.expr_list.append(AssignNode(attr.name, attr.expr)) elif attr.type == 'Int': constructor.body.expr_list.append(AssignNode(attr.name, ConstantNumNode(0))) diff --git a/src/codegen/visitors/base_mips_visitor.py b/src/codegen/visitors/base_mips_visitor.py index 1d50c439..a5d3058a 100644 --- a/src/codegen/visitors/base_mips_visitor.py +++ b/src/codegen/visitors/base_mips_visitor.py @@ -243,6 +243,12 @@ def save_meth_addr(self, func_nodes: List[FunctionNode]): self.methods += [funct.name for funct in func_nodes] words = 'methods: .word ' + ', '.join(map(lambda x: '0', self.methods)) self.data_code.append(words) + # guardo la dirección del método en el array de métodos + self.code.append('# Save method directions in the methods array') + self.code.append('la $v0, methods') + for i, meth in enumerate(self.methods): + self.code.append(f'la $t9, {meth}') + self.code.append(f'sw $t9, {4*i}($v0)') def get_type(self, xtype): 'Return the var address type according to its static type' diff --git a/src/codegen/visitors/cil_visitor.py b/src/codegen/visitors/cil_visitor.py index 0f75b4ba..8dd1af64 100644 --- a/src/codegen/visitors/cil_visitor.py +++ b/src/codegen/visitors/cil_visitor.py @@ -34,25 +34,37 @@ def visit(self, node: ProgramNode, scope: Scope): @visitor.when(ClassDeclarationNode) def visit(self, node: ClassDeclarationNode, scope: Scope): - constructor = FuncDeclarationNode(node.token, [], node.token, BlockNode([], node.token)) self.current_type = self.context.get_type(node.id, node.pos) cil_type = self.register_type(node.id) - for attr, a_type in self.current_type.all_attributes(): + attrs = self.current_type.all_attributes() + if len(attrs) > 0: + # Si hay atributos creo el constructor, en otro caso no + constructor = FuncDeclarationNode(node.token, [], node.token, BlockNode([], node.token)) + # definiendo el constructor en el tipo para analizar + func_declarations = [constructor] + self.constructors.append(node.id) + self.current_type.define_method(self.current_type.name, [], [], self.current_type) + scopes = [scope] + scope.children + else: + func_declarations = [] + scopes = scope.children + + for attr, a_type in attrs: cil_type.attributes.append((attr.name, self.to_attr_name(attr.name, a_type.name))) self.initialize_attr(constructor, attr, scope) ## add the initialization code in the constructor - + if attrs: + # Append like the last expression self type + constructor.body.expr_list.append(SelfNode()) + + for method, mtype in self.current_type.all_methods(): cil_type.methods.append((method.name, self.to_function_name(method.name, mtype.name))) - # definiendo el constructor en el tipo para analizar - constructor.body.expr_list.append(SelfNode()) - func_declarations = [constructor] - self.current_type.define_method(self.current_type.name, [], [], self.current_type) func_declarations += [f for f in node.features if isinstance(f, FuncDeclarationNode)] - for feature, child_scope in zip(func_declarations, [scope] + scope.children): + for feature, child_scope in zip(func_declarations, scopes): self.visit(feature, child_scope) @@ -97,7 +109,7 @@ def visit(self, node: AssignNode, scope: Scope): self.register_instruction(cil.SetAttribNode('self', var_info.name, self.current_type.name, value)) else: local_name = self.to_var_name(var_info.name) - self.register_instruction(cil.AssignNode(var_info.name, value)) + self.register_instruction(cil.AssignNode(local_name, value)) return value, typex def _return_type(self, typex: Type, node): @@ -193,19 +205,24 @@ def visit(self, node: InstantiateNode, scope: Scope): typex = get_type(typex, self.current_type) self.register_instruction(cil.AllocateNode(typex.name, instance)) - attributes = [attr for attr, a_type in typex.all_attributes()] - for i, attr in enumerate(attributes): - # Aquí sería más cómodo llamar al constructor de la clase, pero tendría que guardar todos los constructores - if attr.expr is not None: - expr, _ = self.visit(attr.expr, scope) - elif attr.type.name == 'Int': - expr, _ = self.visit(ConstantNumNode(0), scope) - elif attr.type.name == 'Bool': - expr, _ = self.visit(ConstantBoolNode(False), scope) - elif attr.type.name == 'String': - expr, _ = self.visit(ConstantStrNode(''), scope) - # attr_name = self.to_attr_name(var_info.name, typex.name) - self.register_instruction(cil.SetAttribNode(instance, attr.name, typex.name, expr)) + # calling the constructor to load all attributes + # Si tiene atributos entonces tendrá constructor (esto se deberia optimizar mas) + if typex.all_attributes(): + self.register_instruction(cil.StaticCallNode(typex.name, typex.name, None, [cil.ArgNode(instance)], typex.name)) + + # attributes = [attr for attr, a_type in typex.all_attributes()] + # for i, attr in enumerate(attributes): + # # Aquí sería más cómodo llamar al constructor de la clase, pero tendría que guardar todos los constructores + # if attr.expr is not None: + # expr, _ = self.visit(attr.expr, scope) + # elif attr.type.name == 'Int': + # expr, _ = self.visit(ConstantNumNode(0), scope) + # elif attr.type.name == 'Bool': + # expr, _ = self.visit(ConstantBoolNode(False), scope) + # elif attr.type.name == 'String': + # expr, _ = self.visit(ConstantStrNode(''), scope) + # # attr_name = self.to_attr_name(var_info.name, typex.name) + # self.register_instruction(cil.SetAttribNode(instance, attr.name, typex.name, expr)) return instance, typex diff --git a/src/codegen/visitors/mips_visitor.py b/src/codegen/visitors/mips_visitor.py index 9d70b4ca..f0f2cd9d 100644 --- a/src/codegen/visitors/mips_visitor.py +++ b/src/codegen/visitors/mips_visitor.py @@ -44,8 +44,8 @@ def visit(self, node: ProgramNode): # guardo las direcciones de cada método self.save_meth_addr(node.dotcode) # visit code instrunctions - for i, code in enumerate(node.dotcode): - self.visit(code, 4*i) + for code in node.dotcode: + self.visit(code) return self.data_code, self.code @visitor.when(TypeNode) @@ -58,15 +58,9 @@ def visit(self, node:DataNode): self.data_code.append(f"{node.name}: .asciiz \"{node.value}\"") @visitor.when(FunctionNode) - def visit(self, node:FunctionNode, index:int): + def visit(self, node:FunctionNode): self.code.append('') self.code.append(f'{node.name}:') - - # guardo la dirección del método en el array de métodos - self.code.append('# Save method direction in the methods array') - self.code.append(f'la $t9, {node.name}') - self.code.append(f'la $v0, methods') - self.code.append(f'sw $t9, {4*index}($v0)') self.code.append('# Gets the params from the stack') n = len(node.params) @@ -305,11 +299,11 @@ def create_dispatch_table(self, type_name): self.code.append('syscall') # Memory of the dispatch table in v0 self.code.append(f'# I save the offset of every one of the methods of this type') + self.code.append('# Save the direction of methods') + self.code.append('la $t8, methods') # cargo la dirección de methods for i, meth in enumerate(methods): # guardo el offset de cada uno de los métodos de este tipo offset = 4*self.methods.index(meth) - self.code.append('# Save the direction of methods') - self.code.append('la $t8, methods') # cargo la dirección de methods self.code.append(f'# Save the direction of the method {meth} in t9') self.code.append(f'lw $t9, {offset}($t8)') # cargo la dirección del método en t9 self.code.append('# Save the direction of the method in his position in the dispatch table') @@ -396,6 +390,7 @@ def visit(self, node:ArgNode, idx): reg = f'a{idx}' self.code.append('# The 3 first registers are saved in a0-a3') if self.is_variable(node.dest): + self.get_reg_var(node.dest) rdest = self.addr_desc.get_var_reg(node.dest) self.code.append(f'move ${reg}, ${rdest}') elif self.is_int(node.dest): @@ -404,6 +399,7 @@ def visit(self, node:ArgNode, idx): self.code.append('# The rest of the arguments are push into the stack') self.code.append('addiu $sp, $sp, -4') if self.is_variable(node.dest): + self.get_reg(inst) reg = self.addr_desc.get_var_reg(node.dest) self.code.append(f'sw ${reg}, ($sp)') elif self.is_int(node.dest): @@ -430,6 +426,6 @@ def visit(self, node:ReturnNode): @visitor.when(LoadNode) def visit(self, node:LoadNode): rdest = self.addr_desc.get_var_reg(node.dest) - self.code.append(f'Saves in {node.dest} {node.msg}') + self.code.append(f'# Saves in {node.dest} {node.msg}') self.var_address[node.dest] = AddrType.STR self.code.append(f'la ${rdest}, {node.msg}') \ No newline at end of file diff --git a/src/cool_parser/output_parser/parselog.txt b/src/cool_parser/output_parser/parselog.txt index 67261175..17f8191f 100644 --- a/src/cool_parser/output_parser/parselog.txt +++ b/src/cool_parser/output_parser/parselog.txt @@ -6132,409 +6132,1690 @@ yacc.py: 445:Action : Shift and goto state 8 yacc.py: 410: yacc.py: 411:State : 8 - yacc.py: 435:Stack : class type . LexToken(inherits,'inherits',1,11) - yacc.py: 445:Action : Shift and goto state 11 + yacc.py: 435:Stack : class type . LexToken(ocur,'{',1,11) + yacc.py: 445:Action : Shift and goto state 10 + yacc.py: 410: + yacc.py: 411:State : 10 + yacc.py: 435:Stack : class type ocur . LexToken(id,'main',3,18) + yacc.py: 445:Action : Shift and goto state 19 + yacc.py: 410: + yacc.py: 411:State : 19 + yacc.py: 435:Stack : class type ocur id . LexToken(opar,'(',3,22) + yacc.py: 445:Action : Shift and goto state 32 + yacc.py: 410: + yacc.py: 411:State : 32 + yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',3,23) + yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',3,23) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',3,23) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',3,23) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : class type ocur id opar formals cpar . LexToken(colon,':',3,24) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon . LexToken(type,'Object',3,26) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type . LexToken(ocur,'{',3,33) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur . LexToken(opar,'(',4,43) + yacc.py: 445:Action : Shift and goto state 80 + yacc.py: 410: + yacc.py: 411:State : 80 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar . LexToken(new,'new',4,44) + yacc.py: 445:Action : Shift and goto state 89 + yacc.py: 410: + yacc.py: 411:State : 89 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new . LexToken(type,'Alpha',4,48) + yacc.py: 445:Action : Shift and goto state 134 + yacc.py: 410: + yacc.py: 411:State : 134 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',4,53) + yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar epsilon . LexToken(cpar,')',4,61) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar arg_list_empty . LexToken(cpar,')',4,61) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args . LexToken(cpar,')',4,61) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args cpar . LexToken(ccur,'}',5,67) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['print','(',[],')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) + yacc.py: 410: + yacc.py: 411:State : 167 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot func_call . LexToken(ccur,'}',5,67) + yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 16 + yacc.py: 430:Defaulted state 16: Reduce using 14 + yacc.py: 435:Stack : class type ocur def_func semi epsilon . LexToken(ccur,'}',6,70) + yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 48 + yacc.py: 430:Defaulted state 48: Reduce using 16 + yacc.py: 435:Stack : class type ocur def_func semi feature_list . LexToken(ccur,'}',6,70) + yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['test1',':','Int'] and goto state 17 + yacc.py: 506:Result : ( id] with ['test3'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',12,146) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',12,146) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',12,146) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar . LexToken(colon,':',12,147) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon . LexToken(type,'Int',12,149) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',12,153) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur . LexToken(num,2.0,13,163) + yacc.py: 445:Action : Shift and goto state 88 + yacc.py: 410: + yacc.py: 411:State : 88 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur num . LexToken(minus,'-',13,165) + yacc.py: 471:Action : Reduce rule [atom -> num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 160 + yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( string] with ['1'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 + yacc.py: 506:Result : ( id colon type] with ['a',':','Alpha'] and goto state 44 + yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param . LexToken(comma,',',19,226) + yacc.py: 445:Action : Shift and goto state 60 + yacc.py: 410: + yacc.py: 411:State : 60 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma . LexToken(id,'b',19,228) + yacc.py: 445:Action : Shift and goto state 46 + yacc.py: 410: + yacc.py: 411:State : 46 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id . LexToken(colon,':',19,229) + yacc.py: 445:Action : Shift and goto state 61 + yacc.py: 410: + yacc.py: 411:State : 61 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon . LexToken(type,'Int',19,231) + yacc.py: 445:Action : Shift and goto state 96 + yacc.py: 410: + yacc.py: 411:State : 96 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon type . LexToken(cpar,')',19,234) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['b',':','Int'] and goto state 44 + yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param . LexToken(cpar,')',19,234) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 + yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) + yacc.py: 410: + yacc.py: 411:State : 95 + yacc.py: 430:Defaulted state 95: Reduce using 33 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param_list . LexToken(cpar,')',19,234) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 410: + yacc.py: 411:State : 42 + yacc.py: 430:Defaulted state 42: Reduce using 30 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param_list . LexToken(cpar,')',19,234) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals . LexToken(cpar,')',19,234) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar . LexToken(colon,':',19,235) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon . LexToken(type,'Int',19,237) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',19,241) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur . LexToken(let,'let',20,251) + yacc.py: 445:Action : Shift and goto state 84 + yacc.py: 410: + yacc.py: 411:State : 84 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let . LexToken(id,'count',20,255) + yacc.py: 445:Action : Shift and goto state 46 + yacc.py: 410: + yacc.py: 411:State : 46 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id . LexToken(colon,':',20,260) + yacc.py: 445:Action : Shift and goto state 61 + yacc.py: 410: + yacc.py: 411:State : 61 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon . LexToken(type,'Int',20,262) + yacc.py: 445:Action : Shift and goto state 96 + yacc.py: 410: + yacc.py: 411:State : 96 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon type . LexToken(comma,',',20,265) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['count',':','Int'] and goto state 130 + yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) + yacc.py: 410: + yacc.py: 411:State : 130 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let param . LexToken(comma,',',20,265) + yacc.py: 471:Action : Reduce rule [let_assign -> param] with [] and goto state 129 + yacc.py: 506:Result : ( id colon type] with ['pow',':','Int'] and goto state 130 + yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) + yacc.py: 410: + yacc.py: 411:State : 130 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param . LexToken(larrow,'<-',20,276) + yacc.py: 445:Action : Shift and goto state 173 + yacc.py: 410: + yacc.py: 411:State : 173 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow . LexToken(num,1.0,20,279) + yacc.py: 445:Action : Shift and goto state 88 + yacc.py: 410: + yacc.py: 411:State : 88 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow num . LexToken(in,'in',21,329) + yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 + yacc.py: 506:Result : ( let_assign] with [] and goto state 197 + yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 + yacc.py: 506:Result : ([ num] with [0.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 196 + yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',26,389) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',26,389) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',26,389) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar . LexToken(colon,':',26,390) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon . LexToken(type,'Int',26,392) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',26,396) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'testing2',27,406) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id . LexToken(opar,'(',27,414) + yacc.py: 445:Action : Shift and goto state 113 + yacc.py: 410: + yacc.py: 411:State : 113 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar . LexToken(new,'new',27,415) + yacc.py: 445:Action : Shift and goto state 89 + yacc.py: 410: + yacc.py: 411:State : 89 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new . LexToken(type,'Alpha',27,419) + yacc.py: 445:Action : Shift and goto state 134 + yacc.py: 410: + yacc.py: 411:State : 134 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new type . LexToken(comma,',',27,424) + yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : class type inherits type ocur id opar epsilon . LexToken(cpar,')',3,35) + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',30,450) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : class type inherits type ocur id opar param_list_empty . LexToken(cpar,')',3,35) + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',30,450) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 - yacc.py: 435:Stack : class type inherits type ocur id opar formals . LexToken(cpar,')',3,35) + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',30,450) yacc.py: 445:Action : Shift and goto state 64 yacc.py: 410: yacc.py: 411:State : 64 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar . LexToken(colon,':',3,36) + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',30,451) yacc.py: 445:Action : Shift and goto state 100 yacc.py: 410: yacc.py: 411:State : 100 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon . LexToken(type,'Object',3,38) + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'Int',30,453) yacc.py: 445:Action : Shift and goto state 138 yacc.py: 410: yacc.py: 411:State : 138 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type . LexToken(ocur,'{',3,45) + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',30,457) yacc.py: 445:Action : Shift and goto state 181 yacc.py: 410: yacc.py: 411:State : 181 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur . LexToken(let,'let',4,55) - yacc.py: 445:Action : Shift and goto state 84 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'test1',31,467) + yacc.py: 445:Action : Shift and goto state 72 yacc.py: 410: - yacc.py: 411:State : 84 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur let . LexToken(id,'test1',4,59) - yacc.py: 445:Action : Shift and goto state 46 + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(larrow,'<-',31,473) + yacc.py: 445:Action : Shift and goto state 112 yacc.py: 410: - yacc.py: 411:State : 46 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur let id . LexToken(colon,':',4,64) - yacc.py: 445:Action : Shift and goto state 61 + yacc.py: 411:State : 112 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow . LexToken(opar,'(',31,477) + yacc.py: 445:Action : Shift and goto state 80 yacc.py: 410: - yacc.py: 411:State : 61 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur let id colon . LexToken(type,'Int',4,66) - yacc.py: 445:Action : Shift and goto state 96 + yacc.py: 411:State : 80 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar . LexToken(num,1.0,31,478) + yacc.py: 445:Action : Shift and goto state 88 yacc.py: 410: - yacc.py: 411:State : 96 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur let id colon type . LexToken(in,'in',5,79) - yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['test1',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'test1',4,59), LexToken(typ ...) + yacc.py: 411:State : 88 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar num . LexToken(plus,'+',31,480) + yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( param] with [] and goto state 129 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( let_assign] with [] and goto state 128 - yacc.py: 506:Result : ([ factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( num] with [3.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( num] with [4.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( id] with ['test1'] and goto state 79 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ id larrow expr] with ['test1','<-',] and goto state 206 + yacc.py: 506:Result : ( arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id opar args cpar] with ['out_int','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_int',7,115), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 16 + yacc.py: 430:Defaulted state 16: Reduce using 14 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',33,543) + yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 48 + yacc.py: 430:Defaulted state 48: Reduce using 16 + yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',33,543) + yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar epsilon . LexToken(cpar,')',37,601) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list_empty . LexToken(cpar,')',37,601) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',37,601) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar . LexToken(colon,':',37,603) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon . LexToken(type,'Object',37,605) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',37,612) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur . LexToken(id,'out_string',38,622) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id . LexToken(opar,'(',38,632) + yacc.py: 445:Action : Shift and goto state 113 + yacc.py: 410: + yacc.py: 411:State : 113 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id opar . LexToken(string,'reached!!\n',38,645) + yacc.py: 445:Action : Shift and goto state 93 + yacc.py: 410: + yacc.py: 411:State : 93 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id opar string . LexToken(cpar,')',38,646) + yacc.py: 471:Action : Reduce rule [atom -> string] with ['reached!!\n'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 196 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 - yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : class type inherits type ocur def_func semi epsilon . LexToken(ccur,'}',10,148) + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi epsilon . LexToken(ccur,'}',40,655) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : class type inherits type ocur def_func semi feature_list . LexToken(ccur,'}',10,148) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 53 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 2 - yacc.py: 506:Result : ([ def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( ( Date: Fri, 13 Nov 2020 14:58:08 -0700 Subject: [PATCH 40/60] Merging the built in types in project --- .../__pycache__/__init__.cpython-37.pyc | Bin 978 -> 978 bytes .../__pycache__/cil_ast.cpython-37.pyc | Bin 12163 -> 13273 bytes src/codegen/cil_ast.py | 27 +- src/codegen/cil_built_in.py | 59 +- src/codegen/tools.py | 2 +- .../base_cil_visitor.cpython-37.pyc | Bin 5140 -> 8014 bytes .../cil_format_visitor.cpython-37.pyc | Bin 6007 -> 7548 bytes .../__pycache__/cil_visitor.cpython-37.pyc | Bin 12147 -> 12174 bytes src/codegen/visitors/base_cil_visitor.py | 60 +- src/codegen/visitors/cil_format_visitor.py | 41 + src/codegen/visitors/cil_visitor.py | 4 +- src/cool_parser/output_parser/parselog.txt | 762 +++++++++--------- src/cool_parser/output_parser/parsetab.py | 252 +++--- src/test.asm | 346 +++++--- 14 files changed, 866 insertions(+), 687 deletions(-) diff --git a/src/codegen/__pycache__/__init__.cpython-37.pyc b/src/codegen/__pycache__/__init__.cpython-37.pyc index 7df6384119562079e98f2406bbd0bc32d7bcf4bb..7fb1f8f089c931e9dbbac2505c17379941912907 100644 GIT binary patch delta 131 zcmcb_euZn2c4 zR+QXgN=qr?2Z@0RfywO5lPv^6e0I1Xk~BykhfQvNN@-529V3ue%mE~L7=e(Pg9`uz Cxf)sk diff --git a/src/codegen/__pycache__/cil_ast.cpython-37.pyc b/src/codegen/__pycache__/cil_ast.cpython-37.pyc index 2989af78cb94b3d0287c5a654a487faf65785a0f..66ff5f28865a17713340ac51cd974e7215b488b9 100644 GIT binary patch delta 1041 zcmZ8g&rcIU6rS1bZh!x@(k7Ks5ZW#+B@qt>jSw0_G+Lv8Kq+inr#1~qA=46t?12Ol zu9}y4Fdp}Z(qgLRKp<45A-uPPb6Xp=!aA$vbiL7Rv~^vR3k8^P zW;;KXs6yQxpL;q6A5z{RPd;=VsPY>AI0)I(Jm(n{XnA|*D_LHQEwByPheZHKN1I;;(sf+d_%={ctaiS&fy z!Df3FcdH3UiF;}oDLet=1H(NV)@)*?V?=ULJ`E zo{9ygKWY1tU^UyOj*i(Li;gaIT)s!O3hP=~foGY%Sp0%Wq`C#m zbOfIMkPwOvT@VVJlruXOR2j6WR8S?ERQAbJ%4BBSa~9=&Vk1Qxo|}5?n10@9i^lni zWd!;%GnQS`vKJN#cG>4`Ch;etu)lXKSj9ocvT{}UR~-5EjV%aXjlnl<(!-NTI_nI$ z?}@?dR5&^&ip;-KoIX`06+0Ts;Lx9sFf6!cQ5A7P8-W|SkA0#CxHv~H4uO{iR0Ies coWY42f%vGOE<$efZqOZY2Rs31z}~(80YQr51^@s6 delta 522 zcmYjN$w~u35bc`KWA@B=FwwXZ6FV9e1rG`y6cI$?4l*udaAFiBY9|*Zc*)I^QYS%h z`GA1r1N7`4=-CfY@uq^+LBVS3RX6pz>Qz1E%64!(5b!dx_i)9Yik=4}aC?`y)O@V$ zvV^m=$iy-p8lswTrL>ewG09Za$S24P%>*SVF`MNWA=FSSX?Vf=aNZlkPag2&e!Ne2uFIRb^{gG#Pp(yQ)<4D;_9O06F3UZ^?b2w%2dd0{4 z_=LGmiH3jO*H!l^_hNQ$JH78@(_2cFG8NVOlot$wA}h0ND8UT?a~SO#(n6Cl%E%xA z-TkVc+4@(V(IQn{B<*3FC@p^(np(ZnB8f+X_lDYtRKrQ7PTJURhA}@Bf(1Mon)dk( LA03ZTXVm=wE5&yi diff --git a/src/codegen/cil_ast.py b/src/codegen/cil_ast.py index 06cb0a4b..540027a9 100644 --- a/src/codegen/cil_ast.py +++ b/src/codegen/cil_ast.py @@ -46,7 +46,7 @@ def __init__(self, idx=None): self.in1 = None self.in2 = None self.out = None - self.idx = idx + self.index = idx class AssignNode(InstructionNode): def __init__(self, dest, source, idx=None): @@ -228,7 +228,6 @@ def __init__(self, dest, arg, idx=None): class ConcatNode(InstructionNode): def __init__(self, dest, arg1, arg2, idx=None): super().__init__(idx) - self.dest = dest self.arg1 = arg1 self.arg2 = arg2 @@ -249,7 +248,7 @@ def __init__(self, dest, word, n, idx=None): self.in2 = n class SubstringNode(InstructionNode): - def __init__(self, dest, word, begin, idx=None): + def __init__(self, word, dest, begin, end, idx=None): super().__init__(idx) self.dest = dest self.word = word @@ -257,8 +256,8 @@ def __init__(self, dest, word, begin, idx=None): self.end = end self.out = dest - self.in1 = word - self.in2 = begin + self.in1 = begin + self.in2 = end class ToStrNode(InstructionNode): def __init__(self, dest, ivalue, idx=None): @@ -269,24 +268,6 @@ def __init__(self, dest, ivalue, idx=None): self.out = dest self.in1 = ivalue -class ReadNode(InstructionNode): - def __init__(self, dest, idx=None): - super().__init__(idx) - self.dest = dest - - self.out = dest - -class PrintNode(InstructionNode): - def __init__(self, str_addr, idx=None): - super().__init__(idx) - self.str_addr = str_addr - - self.out = str_addr - -class SelfNode(InstructionNode): - def __init__(self, idx=None): - super().__init__(idx) - class OutStringNode(InstructionNode): def __init__(self, value, idx=None): super().__init__(idx) diff --git a/src/codegen/cil_built_in.py b/src/codegen/cil_built_in.py index 374fbaea..28486b29 100644 --- a/src/codegen/cil_built_in.py +++ b/src/codegen/cil_built_in.py @@ -1,60 +1,3 @@ -from cil_ast import * +from codegen.cil_ast import * - -f1_params = [ParamNode("self")] -f1_localVars = [LocalNode("f1_self")] -f1_intructions = [AssignNode(f1_localVars[0],f1_params[0]),ExitNode(),ReturnNode(f1_localVars[0])] -f1 = FunctionNode("function_abort_Object",f1_params,f1_localVars,f1_intructions) - -f2_params = [ParamNode("self")] -f2_localVars = [LocalNode("f2_result")] -f2_intructions = [TypeOfNode(f2_params[0],f2_localVars[0]),ReturnNode(f2_localVars[0])] -f2 = FunctionNode("function_typeOf_Object",f2_params,f2_localVars,f2_intructions) - -f3_params = [ParamNode("self")] -f3_localVars = [LocalNode("f3_result")] -f3_intructions = [CopyNode(f3_localVars[0],f3_params[0]),ReturnNode(f3_localVars[0])] -f3 = FunctionNode("function_copy_Object",f3_params,f3_localVars,f3_intructions) - -f4_params = [ParamNode("self"),ParamNode("word")] -f4_localVars = [LocalNode("f4_self"),LocalNode("f4_word")] -f4_intructions = [AssignNode(f4_localVars[0],f4_params[0]),LoadNode(f4_localVars[1],f4_params[1]),OutStringNode(f4_localVars[1]),ReturnNode(f4_localVars[0])] -f4 = FunctionNode("function_outString_IO",f4_params,f4_localVars,f4_intructions) - -f5_params = [ParamNode("self"),ParamNode("number")] -f5_localVars = [LocalNode("f5_self")] -f5_intructions = [AssignNode(f5_localVars[0],f5_params[0]),OutIntNode(f5_params[1]),ReturnNode(f5_localVars[0])] -f5 = FunctionNode("function_outInt_IO",f5_params,f5_localVars,f5_intructions) - -f6_params = [ParamNode("self")] -f6_localVars = [LocalNode("f6_result")] -f6_intructions = [ReadIntNode(f6_localVars[0]),ReturnNode(f6_localVars[0])] -f6 = FunctionNode("function_inInt_IO",f6_params,f6_localVars,f6_intructions) - -f7_params = [ParamNode("self")] -f7_localVars = [LocalNode("f7_result")] -f7_intructions = [ReadStringNode(f7_localVars[0]),ReturnNode(f7_localVars[0])] -f7 = FunctionNode("function_inString_IO",f7_params,f7_localVars,f7_intructions) - -f8_params = [ParamNode("self")] -f8_localVars = [LocalNode("f8_word"),LocalNode("f8_result")] -f8_intructions = [LoadNode(f8_localVars[0],f8_params[0]),LengthNode(f8_localVars[1],f8_localVars[0]),ReturnNode(f8_localVars[1])] -f8 = FunctionNode("function_length_String",f8_params,f8_localVars,f8_intructions) - -f9_params = [ParamNode("self"),ParamNode("word")] -f9_localVars = [LocalNode("f9_word"),LocalNode("f9_word1"),LocalNode("f9_result")] -f9_intructions = [LoadNode(f9_localVars[0],f9_params[0]),LoadNode(f9_localVars[1],f9_params[1]),ConcatNode(f9_localVars[2],f9_localVars[0],f9_localVars[1]),ReturnNode(f9_localVars[2])] -f9 = FunctionNode("function_concat_String",f9_params,f9_localVars,f9_intructions) - -f10_params = [ParamNode("self"),ParamNode("begin"),ParamNode("end")] -f10_localVars = [LocalNode("f10_word"),LocalNode("f10_result")] -f10_intructions = [LoadNode(f10_localVars[0],f10_params[0]), SubstringNode(f10_localVars[1],f10_localVars[0],f10_params[1],f10_params[2])] -f10 = FunctionNode("function_substr_String",f10_params,f10_localVars,f10_intructions) - - -_data = [] - -_code = [f1,f2,f3,f4,f5,f6,f7,f8,f9,f10] - -_types = [TypeNode("Object",[],[f1,f2,f3]) , TypeNode("IO" , [],[f4,f5,f6,f7]) , TypeNode("String", [],[f8,f9,f10])] \ No newline at end of file diff --git a/src/codegen/tools.py b/src/codegen/tools.py index 52d25a58..8ab2042a 100644 --- a/src/codegen/tools.py +++ b/src/codegen/tools.py @@ -173,7 +173,7 @@ def method_offset(self, meth): class ObjTable: def __init__(self, dispatch_table: DispatchTable): - self.objects: Dict[str, ObjTabEntry] = self.initialize_built_in() + self.objects: Dict[str, ObjTabEntry] = {} #self.initialize_built_in() self.dispatch_table = dispatch_table def initialize_built_in(self): diff --git a/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc index bc5fb9e59619b70a6a0886c1578c1893333d8d39..afe229de79745b28acfa8ac2c40e4d20014a5ffb 100644 GIT binary patch delta 2965 zcmZuzOOG2x5T2eHzs75?*N=T=ceCq#*?GXe9})tIh(l16g#_hbMY6n}vGHnSN8_*9~;?-=`I_?rEeHp|~Cl@;^WW2JoC%MbsG=YRS}{bkmzGY-e6jBgU( zd-!($(G|r}OlGPBwaNO-VWu`$77DHT1;94BGe5jTYI!nv%kWHL`>;}k|Xo;5T2FO+f8E*&cuYzn@ zwBv?o#~K)uv?du>L(CY{HyL>RcC5KmuGq*GRO2R+uFxv2(M=>>50b(Lv#^2Wt0MWD zc;18rtzQ%pijse0Do>J%LV~N)MyMlP-5gx&VpxJ;AFA^o*IONk*a#6!$RZ$iH zJpHSVZQ7r684G@7rw5Ua-D)?b*8g$vpz6N8&BNv!ZXiDtdjFylZTFsCTDE<`QTZ`> zs~uFKk{jvbq1=JEf)8!A#lh&(*%4NH0QF1c0vJdh!N)}%I}stvb8WSo&X-kjkG&wH zJd_msxLI&9>3J;55^&Tz?Rw1thl^tDy>rSd6fjGuWIp&?^$Qo!OSez&MJ}yotLdDt;6&v;}xJ-f}?Lcm1e)qDwyE zV^Ky-Hs9I{Tx5YiB6yU`;zwIaH1?~{Yj*8fw=#pJn8hbGyIV9ERWExjyhK~=4i39d@lep6 delta 93 zcmX?SH${WbiI(3w?rm!i)?OYI>^uLrztbJ vNVb{v7ISiD&g5UR3XDpVC$b82i2(I-0CBO(WLr7)$!T)EjB%5{$VCAF!NnR3 diff --git a/src/codegen/visitors/__pycache__/cil_format_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/cil_format_visitor.cpython-37.pyc index 07d22908f4a27dcb471130324929356ebfb6c2b4..4ddbce2318aa1826ec1658855434fbff5fdf97df 100644 GIT binary patch delta 914 zcmaKpy>HV%7{+~eKAqZ7H8@J*B+ds#7E<{TVn85~hNwiU927f(utX^~X;77vt3yku z6eKz@u)vL_65UupR9)!MzXK@?13LnBV9CJiODyUIOFrHG-sgSp@#{Ye;~V0lAn*)4 zpH4nE52A0ykL*wO;OiI-E$&0WO70^oY5LwHGj4J_zE|j>pK=+vOnJh?Q@~S{Cp|n3 zJWaXm;Thl=%2OV$><^Kp&_dc%$U;Mw@{EV)fafSzJUkCPPkGkE3&0DM=Ui^)bw(`= z@@>m*KJJmtaO&_o`)!uIhzR8NT$mh-i72n!QkKiwl5tm2S)7Eq;Vk(Q$)i>BG!i4n zGZ*uYq*T>PMMJ^!AW%7~8~IweeTA-9$!}3XYfc9r1ceUoMvfH4_)U}DMo+k1W-ka? zIBg(+nO;sew#gPj{GZDyVD(UR@bDi>omtSt`v0IjhdTv6zDu_t@X(- zF^g;vUK2vqy3wQxgcI~bw*K*oW+}FHC-%n@0n}OLcNdij&LI85ZlLCEZ8w$dPniaQ-j$!ve#sld&X= WA)5c}keLY}+#rQm0X0Y^w(u9W3jB`% delta 124 zcmexk^<9t8iIJG^MJPCns_#Z$8g_U69#N zQ+l(QlqTckKv~hrm!yRlgC;+f4rMBGo}3~R&X_rQkBk|wGtj6aRv@9tSmZkSzl;nI Y8_0Affh0D@BG1X1vMP+8ll^4%00=xGVgLXD diff --git a/src/codegen/visitors/__pycache__/cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/cil_visitor.cpython-37.pyc index 27fbff2cfb6b1ccbb124b66a49c3d1bfef0accd3..06753f8de8dcd9040c57df522c5be5b7eab2414c 100644 GIT binary patch delta 1535 zcmZ9MUrbw79LM`B>uqT%w{ZIh7_9v3;6m-p6bTx2V|9RIY_e`@M`+S_`sW)@k!%@=Xc6jw8{PCoZtPO z@9+D&=bZjITS0b!8yn3p|b6!XVV6@(tfj{3`^d!eW`K7 z9=E0ZGxjy-nv1`e%g(ZE(+;+L<$0Uwxalj~mYVp}%pV06X#o8Al=NX!Ql4kJX6os= zVkT>*Gs}2a`V88z;tYYy`p5}(h+|5A%(_!Q4&kI!m^W7RLUoU3nye~mX>)Z&uSz-H zJZCH<@rb7%B39P(F2ICU=T$%&g zCuSWgzB79$)WoWZ!# z2QQE>Z;}V94ud?gvsh7vU=>rr9&1~%1J}47+6R^YY94)?FDckLB%9jI8cC5<*jYjg zp`8#Q{J%2A`Ux}mM?mpBOT!33xCscI6wQU$ERE7Q66}F%Rw{VlzM~u5(G$2G+UZjM zfal$J)WqAEYv~J!%C&Y$WvA$kmN0MpUQfXHpn#}ftMWcNTi4-JyxKYq8s2F=2w$Mw z_A(!zZ%cuNx7*Ia*EqU&tM@q))d-@8Q#5iC9wtl^j^R(T9|zmRz64E08F36wij(s# zvi4hCIodJC_mIxg_tsk-zW_fldN|4t&pY8!UyfFe6DA3@ylv~B@Ou!Sr^phA>aFd9 zNEREArB^{hh_FmBII1o^ThP-5GslioYz1$3g+seVl5Ud~^>kL7)3Yp(a`zE%;HmD- zE=pFNtbx|hTO$2x4c1bR$hCv7@hjfTWZ4)SUP`U>9g!rxivT6Iqp&KQ{m;rcQ;TPM6h ZxI(x}xJI~0@X-Gux?_F_TH#m%{spaDbC&=B delta 1521 zcmZ{ke@I(b6vuOt<(c>r^Yk^wAJI4yH7~|=YgcVM7_F?zx|tMf>y}p2IG-!lHhS}< zDaN_cwOUu*9|wf84O#}vsZ`#9#ja%%s~dD~aCO)C6f&HpvnD8)dtI>S^&~!s!9gw zD0zDEoG$poH`tWBZ&h5uaC*;jo^(lZkQ77#mgtNHeuZJRr)wt3}c@u=agtsuG zc7)Gx^S=^CxVPlYQF%6s>*@ixY(7-mfam)%&x8yIW2!0ok$5!l4P8_vVmIMTQoIZ2hq38LFmWK|GeAPf-(a9?o0a+*w0 zN1TvBamc>KmEac7+TYaA&j1~}@69ioeg#P3d!aZ#XB(kjWtvtVCnO10+#hD3sYdGa~v(ZwyzvwKQA<ELoZBonJ-3y5W<1*x?kunOA+!?C`VeP?T#ok zY9=ER9HM5@&P#g1$Y?&Rr}FZ0V|2<&l|%f9rzVoQah(-#r7fcDbR=5UeE7WLuMwk< z&;q9}E`@=AwjBT_2EHG=+kZ)jkev~+*QvV%VSpgEO{A`($0Q!?2*yZN+D)xyMAEDD z?8wd*tWUroMSeiAHtZO#b*#ck{7pM7UnjTdWf8OSC=7G2il0ZvTjuDExWDdWGqc$# z(VDnhLc@8CXH*h)D!#`M-{V3KAxotbw*#r4)`}fX6 zaG7kmoMlO5nZxDyf`>XTJx4QUXVBlZ1&jDoS17bhC9e@aB-|v>H-xPcme8As!yfZ+ HVhEl9Jb7WA diff --git a/src/codegen/visitors/base_cil_visitor.py b/src/codegen/visitors/base_cil_visitor.py index 6204932c..53cb2bae 100644 --- a/src/codegen/visitors/base_cil_visitor.py +++ b/src/codegen/visitors/base_cil_visitor.py @@ -106,4 +106,62 @@ def initialize_attr(self, constructor, attr: Attribute, scope: Scope): elif attr.type == 'Bool': constructor.body.expr_list.append(AssignNode(attr.name, ConstantBoolNode(False))) elif attr.type == 'String': - constructor.body.expr_list.append(AssignNode(attr.name, ConstantStrNode(""))) \ No newline at end of file + constructor.body.expr_list.append(AssignNode(attr.name, ConstantStrNode(""))) + + def create_built_in(self): + f1_params = [ParamNode("self", 'Object')] + f1_localVars = [LocalNode("local_abort_self_0")] + f1_intructions = [cil.AssignNode(f1_localVars[0].name,f1_params[0].name, self.index),cil.ExitNode(idx=self.index),cil.ReturnNode(f1_localVars[0].name, self.index)] + f1 = FunctionNode("function_abort_Object",f1_params,f1_localVars,f1_intructions) + + f2_params = [ParamNode("self", 'Object')] + f2_localVars = [LocalNode("local_type_name_result_0")] + f2_intructions = [cil.TypeOfNode(f2_params[0].name,f2_localVars[0].name, self.index),cil.ReturnNode(f2_localVars[0].name, self.index)] + f2 = FunctionNode("function_type_name_Object",f2_params,f2_localVars,f2_intructions) + + f3_params = [ParamNode("self", 'Object')] + f3_localVars = [LocalNode("local_copy_result_0")] + f3_intructions = [cil.CopyNode(f3_localVars[0].name,f3_params[0].name, self.index),cil.ReturnNode(f3_localVars[0].name, self.index)] + f3 = FunctionNode("function_copy_Object",f3_params,f3_localVars,f3_intructions) + + f4_params = [ParamNode("self", 'IO'), ParamNode("word", 'String')] + f4_localVars = [LocalNode("local_out_string_self_0"),LocalNode("local_out_string_word_1")] + f4_intructions = [cil.AssignNode(f4_localVars[0].name,f4_params[0].name, self.index),cil.LoadNode(f4_localVars[1].name,f4_params[1].name, self.index),cil.OutStringNode(f4_localVars[1].name, self.index),cil.ReturnNode(f4_localVars[0].name, self.index)] + f4 = FunctionNode("function_out_string_IO",f4_params,f4_localVars,f4_intructions) + + f5_params = [ParamNode("self", 'IO'),ParamNode("number", 'Int')] + f5_localVars = [LocalNode("local_out_int_self_0")] + f5_intructions = [cil.AssignNode(f5_localVars[0].name,f5_params[0].name, self.index),cil.OutIntNode(f5_params[1].name, self.index),cil.ReturnNode(f5_localVars[0].name, self.index)] + f5 = FunctionNode("function_out_int_IO",f5_params,f5_localVars,f5_intructions) + + f6_params = [ParamNode("self", 'IO')] + f6_localVars = [LocalNode("local_in_int_result_0")] + f6_intructions = [cil.ReadIntNode(f6_localVars[0].name, self.index),cil.ReturnNode(f6_localVars[0].name, self.index)] + f6 = FunctionNode("function_in_int_IO",f6_params,f6_localVars,f6_intructions) + + f7_params = [ParamNode("self", 'IO')] + f7_localVars = [LocalNode("local_in_string_result_0")] + f7_intructions = [cil.ReadStringNode(f7_localVars[0].name, self.index),cil.ReturnNode(f7_localVars[0].name, self.index)] + f7 = FunctionNode("function_in_string_IO",f7_params,f7_localVars,f7_intructions) + + f8_params = [ParamNode("self", 'String')] + f8_localVars = [LocalNode("local_length_word_0"),LocalNode("local_length_result_1")] + f8_intructions = [cil.LoadNode(f8_localVars[0].name,f8_params[0].name, self.index),cil.LengthNode(f8_localVars[1].name,f8_localVars[0].name, self.index),cil.ReturnNode(f8_localVars[1].name, self.index)] + f8 = FunctionNode("function_length_String",f8_params,f8_localVars,f8_intructions) + + f9_params = [ParamNode("self", 'String'),ParamNode("word", 'String')] + f9_localVars = [LocalNode("local_concat_word_0"),LocalNode("local_concat_word_1"),LocalNode("local_concat_result_2")] + f9_intructions = [cil.LoadNode(f9_localVars[0].name,f9_params[0].name, self.index),cil.LoadNode(f9_localVars[1].name,f9_params[1].name, self.index),cil.ConcatNode(f9_localVars[2].name,f9_localVars[0].name,f9_localVars[1].name, self.index),cil.ReturnNode(f9_localVars[2].name, self.index)] + f9 = FunctionNode("function_concat_String",f9_params,f9_localVars,f9_intructions) + + f10_params = [ParamNode("self", 'String'),ParamNode("begin", 'Int'),ParamNode("end", 'Int')] + f10_localVars = [LocalNode("local_substr_word_0"),LocalNode("local_substr_result_1")] + f10_intructions = [cil.LoadNode(f10_localVars[0].name,f10_params[0].name, self.index), cil.SubstringNode(f10_localVars[1].name,f10_localVars[0].name,f10_params[1].name,f10_params[2].name, self.index), cil.ReturnNode(f10_localVars[0].name)] + f10 = FunctionNode("function_substr_String",f10_params,f10_localVars,f10_intructions) + + self.dotcode = [f1,f2,f3,f4,f5,f6,f7,f8,f9,f10] + self.dottypes += [TypeNode("Object", [], [('abort', f1.name), ('type_of', f2.name), ('copy', f3.name)]), + TypeNode("IO", [], [('out_string', f4.name), ('out_int', f5.name), ('in_int', f6.name), ('in_string', f7.name)]) , + TypeNode("String", [], [('length', f8.name), ('concat', f9.name), ('substr', f10.name)]), + TypeNode('Int'), + TypeNode('Bool')] diff --git a/src/codegen/visitors/cil_format_visitor.py b/src/codegen/visitors/cil_format_visitor.py index 44b57a2c..7dcfba18 100644 --- a/src/codegen/visitors/cil_format_visitor.py +++ b/src/codegen/visitors/cil_format_visitor.py @@ -101,5 +101,46 @@ def visit(self, node: GetAttribNode): def visit(self, node: SetAttribNode): return f'SETATTR {node.obj} {node.attr} = {node.value}' + @visitor.when(LengthNode) + def visit(self, node: LengthNode): + return f'{node.dest} = LENGTH {node.arg}' + + @visitor.when(ConcatNode) + def visit(self, node: ConcatNode): + return f'{node.dest} = CONCAT {node.arg1} {node.arg2}' + + @visitor.when(SubstringNode) + def visit(self, node: SubstringNode): + return f'{node.dest} = SUBSTRING {node.word} {node.begin} {node.end}' + + @visitor.when(ToStrNode) + def visit(self, node: ToStrNode): + return f'{node.dest} = STR {node.ivalue}' + + @visitor.when(OutStringNode) + def visit(self, node: OutStringNode): + return f'OUT_STR {node.value}' + + @visitor.when(OutIntNode) + def visit(self, node: OutIntNode): + return f'OUT_INT {node.value}' + + @visitor.when(ReadStringNode) + def visit(self, node: ReadStringNode): + return f'{node.dest} = READ_STR' + + @visitor.when(ReadIntNode) + def visit(self, node: ReadIntNode): + return f'{node.dest} = READ_INT' + + @visitor.when(ExitNode) + def visit(self, node: ExitNode): + return f'EXIT {node.value}' + + @visitor.when(CopyNode) + def visit(self, node: CopyNode): + return f'{node.dest} = COPY {node.source}' + + printer = PrintVisitor() return lambda ast: printer.visit(ast) diff --git a/src/codegen/visitors/cil_visitor.py b/src/codegen/visitors/cil_visitor.py index 8dd1af64..d1ad6095 100644 --- a/src/codegen/visitors/cil_visitor.py +++ b/src/codegen/visitors/cil_visitor.py @@ -25,7 +25,9 @@ def visit(self, node: ProgramNode, scope: Scope): self.register_instruction(cil.StaticCallNode('Main', 'main', result, [cil.ArgNode(instance)], 'Object')) self.register_instruction(cil.ReturnNode(0)) self.current_function = None - + + self.create_built_in() + for declaration, child_scope in zip(node.declarations, scope.children): self.visit(declaration, child_scope) diff --git a/src/cool_parser/output_parser/parselog.txt b/src/cool_parser/output_parser/parselog.txt index 17f8191f..b29f76b7 100644 --- a/src/cool_parser/output_parser/parselog.txt +++ b/src/cool_parser/output_parser/parselog.txt @@ -6146,19 +6146,19 @@ yacc.py: 411:State : 32 yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',3,23) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',3,23) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',3,23) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',3,23) @@ -6191,37 +6191,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',4,53) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar epsilon . LexToken(cpar,')',4,61) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar arg_list_empty . LexToken(cpar,')',4,61) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args . LexToken(cpar,')',4,61) @@ -6268,37 +6268,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args cpar . LexToken(ccur,'}',5,67) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['print','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) + yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot func_call . LexToken(ccur,'}',5,67) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : class type ocur def_func semi epsilon . LexToken(ccur,'}',6,70) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : class type ocur def_func semi feature_list . LexToken(ccur,'}',6,70) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 14 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['test1',':','Int'] and goto state 17 - yacc.py: 506:Result : ( ( id] with ['test3'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',12,146) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',12,146) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',12,146) @@ -6490,27 +6490,27 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur num . LexToken(minus,'-',13,165) yacc.py: 471:Action : Reduce rule [atom -> num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 160 - yacc.py: 506:Result : ( base_call] with [] and goto state 160 + yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 - yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( string] with ['1'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 + yacc.py: 506:Result : ( id colon type] with ['a',':','Alpha'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) + yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param . LexToken(comma,',',19,226) @@ -6678,24 +6678,24 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon type . LexToken(cpar,')',19,234) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['b',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) + yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 - yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 + yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 95 yacc.py: 430:Defaulted state 95: Reduce using 33 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals . LexToken(cpar,')',19,234) @@ -6732,12 +6732,12 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon type . LexToken(comma,',',20,265) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['count',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) + yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) yacc.py: 410: yacc.py: 411:State : 130 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let param . LexToken(comma,',',20,265) - yacc.py: 471:Action : Reduce rule [let_assign -> param] with [] and goto state 129 - yacc.py: 506:Result : ( param] with [] and goto state 129 + yacc.py: 506:Result : ( id colon type] with ['pow',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) + yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 130 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param . LexToken(larrow,'<-',20,276) @@ -6771,53 +6771,53 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow num . LexToken(in,'in',21,329) yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 - yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 + yacc.py: 506:Result : ( let_assign] with [] and goto state 197 - yacc.py: 506:Result : ([ let_assign] with [] and goto state 197 + yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 - yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 + yacc.py: 506:Result : ([ num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 135 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 196 - yacc.py: 506:Result : ( comp] with [] and goto state 196 + yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',26,389) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',26,389) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',26,389) @@ -7031,37 +7031,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new type . LexToken(comma,',',27,424) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ id opar args cpar] with ['testing2','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',30,450) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',30,450) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',30,450) @@ -7236,27 +7236,27 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar num . LexToken(plus,'+',31,480) yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 - yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',33,543) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',33,543) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar epsilon . LexToken(cpar,')',37,601) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list_empty . LexToken(cpar,')',37,601) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',37,601) @@ -7660,48 +7660,48 @@ yacc.py: 411:State : 93 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id opar string . LexToken(cpar,')',38,646) yacc.py: 471:Action : Reduce rule [atom -> string] with ['reached!!\n'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi epsilon . LexToken(ccur,'}',40,655) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi feature_list . LexToken(ccur,'}',40,655) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( ( program","S'",1,None,None,None), - ('program -> class_list','program',1,'p_program','parser.py',8), - ('epsilon -> ','epsilon',0,'p_epsilon','parser.py',12), - ('class_list -> def_class class_list','class_list',2,'p_class_list','parser.py',17), - ('class_list -> def_class','class_list',1,'p_class_list','parser.py',18), - ('class_list -> error class_list','class_list',2,'p_class_list_error','parser.py',23), - ('def_class -> class type ocur feature_list ccur semi','def_class',6,'p_def_class','parser.py',29), - ('def_class -> class type inherits type ocur feature_list ccur semi','def_class',8,'p_def_class','parser.py',30), - ('def_class -> class error ocur feature_list ccur semi','def_class',6,'p_def_class_error','parser.py',38), - ('def_class -> class type ocur feature_list ccur error','def_class',6,'p_def_class_error','parser.py',39), - ('def_class -> class error inherits type ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',40), - ('def_class -> class error inherits error ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',41), - ('def_class -> class type inherits error ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',42), - ('def_class -> class type inherits type ocur feature_list ccur error','def_class',8,'p_def_class_error','parser.py',43), - ('feature_list -> epsilon','feature_list',1,'p_feature_list','parser.py',48), - ('feature_list -> def_attr semi feature_list','feature_list',3,'p_feature_list','parser.py',49), - ('feature_list -> def_func semi feature_list','feature_list',3,'p_feature_list','parser.py',50), - ('feature_list -> error feature_list','feature_list',2,'p_feature_list_error','parser.py',55), - ('def_attr -> id colon type','def_attr',3,'p_def_attr','parser.py',60), - ('def_attr -> id colon type larrow expr','def_attr',5,'p_def_attr','parser.py',61), - ('def_attr -> error colon type','def_attr',3,'p_def_attr_error','parser.py',68), - ('def_attr -> id colon error','def_attr',3,'p_def_attr_error','parser.py',69), - ('def_attr -> error colon type larrow expr','def_attr',5,'p_def_attr_error','parser.py',70), - ('def_attr -> id colon error larrow expr','def_attr',5,'p_def_attr_error','parser.py',71), - ('def_attr -> id colon type larrow error','def_attr',5,'p_def_attr_error','parser.py',72), - ('def_func -> id opar formals cpar colon type ocur expr ccur','def_func',9,'p_def_func','parser.py',77), - ('def_func -> error opar formals cpar colon type ocur expr ccur','def_func',9,'p_def_func_error','parser.py',81), - ('def_func -> id opar error cpar colon type ocur expr ccur','def_func',9,'p_def_func_error','parser.py',82), - ('def_func -> id opar formals cpar colon error ocur expr ccur','def_func',9,'p_def_func_error','parser.py',83), - ('def_func -> id opar formals cpar colon type ocur error ccur','def_func',9,'p_def_func_error','parser.py',84), - ('formals -> param_list','formals',1,'p_formals','parser.py',89), - ('formals -> param_list_empty','formals',1,'p_formals','parser.py',90), - ('param_list -> param','param_list',1,'p_param_list','parser.py',96), - ('param_list -> param comma param_list','param_list',3,'p_param_list','parser.py',97), - ('param_list_empty -> epsilon','param_list_empty',1,'p_param_list_empty','parser.py',106), - ('param -> id colon type','param',3,'p_param','parser.py',110), - ('let_list -> let_assign','let_list',1,'p_let_list','parser.py',115), - ('let_list -> let_assign comma let_list','let_list',3,'p_let_list','parser.py',116), - ('let_assign -> param larrow expr','let_assign',3,'p_let_assign','parser.py',125), - ('let_assign -> param','let_assign',1,'p_let_assign','parser.py',126), - ('cases_list -> casep semi','cases_list',2,'p_cases_list','parser.py',134), - ('cases_list -> casep semi cases_list','cases_list',3,'p_cases_list','parser.py',135), - ('cases_list -> error cases_list','cases_list',2,'p_cases_list_error','parser.py',139), - ('cases_list -> error semi','cases_list',2,'p_cases_list_error','parser.py',140), - ('casep -> id colon type rarrow expr','casep',5,'p_case','parser.py',144), - ('expr -> id larrow expr','expr',3,'p_expr','parser.py',149), - ('expr -> comp','expr',1,'p_expr','parser.py',150), - ('comp -> comp less op','comp',3,'p_comp','parser.py',158), - ('comp -> comp lesseq op','comp',3,'p_comp','parser.py',159), - ('comp -> comp equal op','comp',3,'p_comp','parser.py',160), - ('comp -> op','comp',1,'p_comp','parser.py',161), - ('op -> op plus term','op',3,'p_op','parser.py',180), - ('op -> op minus term','op',3,'p_op','parser.py',181), - ('op -> term','op',1,'p_op','parser.py',182), - ('term -> term star base_call','term',3,'p_term','parser.py',197), - ('term -> term div base_call','term',3,'p_term','parser.py',198), - ('term -> base_call','term',1,'p_term','parser.py',199), - ('term -> term star error','term',3,'p_term_error','parser.py',209), - ('term -> term div error','term',3,'p_term_error','parser.py',210), - ('base_call -> factor arroba type dot func_call','base_call',5,'p_base_call','parser.py',215), - ('base_call -> factor','base_call',1,'p_base_call','parser.py',216), - ('base_call -> error arroba type dot func_call','base_call',5,'p_base_call_error','parser.py',223), - ('base_call -> factor arroba error dot func_call','base_call',5,'p_base_call_error','parser.py',224), - ('factor -> atom','factor',1,'p_factor1','parser.py',229), - ('factor -> opar expr cpar','factor',3,'p_factor1','parser.py',230), - ('factor -> factor dot func_call','factor',3,'p_factor2','parser.py',234), - ('factor -> not expr','factor',2,'p_factor2','parser.py',235), - ('factor -> func_call','factor',1,'p_factor2','parser.py',236), - ('factor -> isvoid base_call','factor',2,'p_factor3','parser.py',245), - ('factor -> nox base_call','factor',2,'p_factor3','parser.py',246), - ('factor -> let let_list in expr','factor',4,'p_expr_let','parser.py',255), - ('factor -> case expr of cases_list esac','factor',5,'p_expr_case','parser.py',267), - ('factor -> if expr then expr else expr fi','factor',7,'p_expr_if','parser.py',279), - ('factor -> while expr loop expr pool','factor',5,'p_expr_while','parser.py',293), - ('atom -> num','atom',1,'p_atom_num','parser.py',306), - ('atom -> id','atom',1,'p_atom_id','parser.py',310), - ('atom -> new type','atom',2,'p_atom_new','parser.py',314), - ('atom -> ocur block ccur','atom',3,'p_atom_block','parser.py',318), - ('atom -> error block ccur','atom',3,'p_atom_block_error','parser.py',322), - ('atom -> ocur error ccur','atom',3,'p_atom_block_error','parser.py',323), - ('atom -> ocur block error','atom',3,'p_atom_block_error','parser.py',324), - ('atom -> true','atom',1,'p_atom_boolean','parser.py',328), - ('atom -> false','atom',1,'p_atom_boolean','parser.py',329), - ('atom -> string','atom',1,'p_atom_string','parser.py',333), - ('block -> expr semi','block',2,'p_block','parser.py',338), - ('block -> expr semi block','block',3,'p_block','parser.py',339), - ('block -> error block','block',2,'p_block_error','parser.py',343), - ('block -> error semi','block',2,'p_block_error','parser.py',344), - ('func_call -> id opar args cpar','func_call',4,'p_func_call','parser.py',349), - ('func_call -> id opar error cpar','func_call',4,'p_func_call_error','parser.py',353), - ('func_call -> error opar args cpar','func_call',4,'p_func_call_error','parser.py',354), - ('args -> arg_list','args',1,'p_args','parser.py',359), - ('args -> arg_list_empty','args',1,'p_args','parser.py',360), - ('arg_list -> expr','arg_list',1,'p_arg_list','parser.py',366), - ('arg_list -> expr comma arg_list','arg_list',3,'p_arg_list','parser.py',367), - ('arg_list -> error arg_list','arg_list',2,'p_arg_list_error','parser.py',374), - ('arg_list_empty -> epsilon','arg_list_empty',1,'p_arg_list_empty','parser.py',378), -] + +# parsetab.py +# This file is automatically generated. Do not edit. +# pylint: disable=W,C,R +_tabversion = '3.10' + +_lr_method = 'LALR' + +_lr_signature = 'programarroba case ccur class colon comma cpar div dot else equal esac false fi id if in inherits isvoid larrow less lesseq let loop minus new not nox num ocur of opar plus pool rarrow semi star string then true type whileprogram : class_listepsilon :class_list : def_class class_list \n | def_classclass_list : error class_listdef_class : class type ocur feature_list ccur semi \n | class type inherits type ocur feature_list ccur semidef_class : class error ocur feature_list ccur semi \n | class type ocur feature_list ccur error \n | class error inherits type ocur feature_list ccur semi\n | class error inherits error ocur feature_list ccur semi\n | class type inherits error ocur feature_list ccur semi\n | class type inherits type ocur feature_list ccur errorfeature_list : epsilon\n | def_attr semi feature_list\n | def_func semi feature_listfeature_list : error feature_listdef_attr : id colon type\n | id colon type larrow exprdef_attr : error colon type\n | id colon error\n | error colon type larrow expr\n | id colon error larrow expr\n | id colon type larrow errordef_func : id opar formals cpar colon type ocur expr ccurdef_func : error opar formals cpar colon type ocur expr ccur\n | id opar error cpar colon type ocur expr ccur\n | id opar formals cpar colon error ocur expr ccur\n | id opar formals cpar colon type ocur error ccurformals : param_list\n | param_list_empty\n param_list : param\n | param comma param_listparam_list_empty : epsilonparam : id colon typelet_list : let_assign\n | let_assign comma let_listlet_assign : param larrow expr\n | paramcases_list : casep semi\n | casep semi cases_listcases_list : error cases_list\n | error semicasep : id colon type rarrow exprexpr : id larrow expr\n | comp\n comp : comp less op\n | comp lesseq op\n | comp equal op\n | opop : op plus term\n | op minus term\n | termterm : term star base_call\n | term div base_call\n | base_callterm : term star error\n | term div errorbase_call : factor arroba type dot func_call\n | factorbase_call : error arroba type dot func_call\n | factor arroba error dot func_call\n factor : atom\n | opar expr cparfactor : factor dot func_call\n | not expr\n | func_callfactor : isvoid base_call\n | nox base_call\n factor : let let_list in exprfactor : case expr of cases_list esacfactor : if expr then expr else expr fifactor : while expr loop expr poolatom : numatom : idatom : new typeatom : ocur block ccuratom : error block ccur\n | ocur error ccur\n | ocur block erroratom : true\n | falseatom : stringblock : expr semi\n | expr semi blockblock : error block\n | error semifunc_call : id opar args cparfunc_call : id opar error cpar\n | error opar args cparargs : arg_list\n | arg_list_empty\n arg_list : expr \n | expr comma arg_listarg_list : error arg_listarg_list_empty : epsilon' + +_lr_action_items = {'error':([0,3,4,5,10,11,12,13,15,25,29,30,31,32,33,34,36,37,38,39,55,58,62,63,66,70,80,81,82,83,85,86,87,90,98,100,102,103,104,105,106,107,110,112,113,114,115,116,117,118,119,120,121,122,135,136,141,142,145,151,154,162,164,171,173,174,175,176,180,181,182,183,184,185,189,190,193,194,195,201,207,215,219,229,],[4,4,4,9,15,21,15,23,15,39,15,15,50,52,15,15,15,15,-6,-9,-8,70,98,70,103,107,70,70,70,70,70,70,70,136,107,139,-7,-13,-12,-11,-10,107,145,70,154,70,70,70,70,70,162,164,166,169,178,107,-86,-87,185,107,185,107,107,70,70,201,70,70,70,207,70,70,169,185,145,-85,169,169,145,201,107,201,70,70,]),'class':([0,3,4,38,39,55,102,103,104,105,106,],[5,5,5,-6,-9,-8,-7,-13,-12,-11,-10,]),'$end':([1,2,3,6,7,38,39,55,102,103,104,105,106,],[0,-1,-4,-3,-5,-6,-9,-8,-7,-13,-12,-11,-10,]),'type':([5,11,13,27,31,61,89,94,100,101,108,121,218,],[8,20,24,40,49,96,134,137,138,140,143,165,227,]),'ocur':([8,9,20,21,23,24,58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,137,138,139,140,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[10,12,33,34,36,37,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,180,181,182,183,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,]),'inherits':([8,9,],[11,13,]),'ccur':([10,12,14,15,16,22,26,29,30,33,34,36,37,47,48,53,54,56,57,72,73,74,75,76,77,78,79,88,91,92,93,109,124,125,126,127,134,135,136,141,142,144,151,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,190,191,192,196,205,206,207,208,209,210,212,213,214,220,230,],[-2,-2,25,-2,-14,35,-17,-2,-2,-2,-2,-2,-2,-15,-16,66,67,68,69,-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,144,-66,-68,-75,-69,-76,177,179,144,-87,-78,-84,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-85,-88,-89,-70,221,222,223,224,225,-61,-59,-62,-71,-73,-72,]),'id':([10,12,15,28,29,30,32,33,34,36,37,58,60,62,63,70,80,81,82,83,84,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,122,136,145,151,154,162,164,171,172,173,174,175,176,180,181,182,183,184,185,189,193,194,195,201,207,215,219,229,],[19,19,19,46,19,19,46,19,19,19,19,72,46,72,72,72,72,72,126,126,46,72,72,72,72,72,72,72,72,72,126,126,126,126,126,126,126,168,72,72,72,72,72,72,72,46,72,202,72,72,72,72,72,72,168,72,72,168,168,72,202,72,202,72,72,]),'colon':([15,19,46,59,64,65,202,],[27,31,61,94,100,101,218,]),'opar':([15,19,58,62,63,70,72,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,126,136,145,151,154,162,164,168,169,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[28,32,80,80,80,110,113,80,80,80,80,80,80,80,80,110,110,80,80,80,80,80,80,80,80,80,80,113,110,110,80,110,110,110,113,195,80,80,80,80,80,80,80,80,110,80,80,110,80,80,]),'semi':([17,18,25,35,40,49,50,66,67,68,69,71,72,73,74,75,76,77,78,79,88,91,92,93,97,98,99,107,111,124,125,126,127,134,136,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,185,187,188,191,192,196,200,201,210,212,213,214,220,221,222,223,224,225,230,231,],[29,30,38,55,-20,-18,-21,102,104,105,106,-22,-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-19,-24,-23,142,151,-66,-68,-75,-69,-76,142,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,142,151,-90,-88,-89,-70,215,217,-61,-59,-62,-71,-73,-26,-25,-29,-28,-27,-72,-44,]),'cpar':([28,32,41,42,43,44,45,51,52,72,73,74,75,76,77,78,79,88,91,92,93,95,96,110,113,123,124,125,126,127,134,144,146,147,148,149,150,152,153,154,155,156,157,158,159,160,161,162,163,164,167,170,177,178,179,186,187,188,191,192,195,196,210,211,212,213,214,220,230,],[-2,-2,59,-30,-31,-32,-34,64,65,-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-33,-35,-2,-2,170,-66,-68,-75,-69,-76,-78,188,170,-91,-92,-96,-45,191,192,-93,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-95,-93,-90,-88,-89,-2,-70,-61,-94,-59,-62,-71,-73,-72,]),'larrow':([40,49,50,72,96,130,],[58,62,63,112,-35,173,]),'comma':([44,72,73,74,75,76,77,78,79,88,91,92,93,96,124,125,126,127,129,130,134,144,147,152,155,156,157,158,159,160,161,162,163,164,167,170,177,178,179,187,188,191,192,196,198,210,212,213,214,220,230,],[60,-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-35,-66,-68,-75,-69,172,-39,-76,-78,189,-45,189,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,189,-90,-88,-89,-70,-38,-61,-59,-62,-71,-73,-72,]),'not':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,]),'isvoid':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,]),'nox':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,]),'let':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,]),'case':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,]),'if':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,]),'while':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,]),'num':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,]),'new':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,]),'true':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,]),'false':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,]),'string':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,]),'arroba':([70,72,73,74,75,76,77,78,79,88,91,92,93,98,107,124,125,126,127,134,136,144,145,152,154,156,157,158,159,160,161,162,163,164,167,170,177,178,179,185,188,191,192,196,207,210,212,213,214,220,230,],[108,-75,-46,-50,-53,-56,121,-67,-63,-74,-81,-82,-83,108,108,-66,-68,-75,-69,-76,108,-78,108,-45,108,-47,-48,-49,-51,-52,-54,108,-55,108,-65,-64,-77,-80,-79,108,-90,-88,-89,-70,108,-61,-59,-62,-71,-73,-72,]),'dot':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,143,144,152,156,157,158,159,160,161,162,163,164,165,166,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,122,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,184,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,193,194,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'star':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,119,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,119,119,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'div':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,120,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,120,120,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'plus':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,117,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,117,117,117,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'minus':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,118,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,118,118,118,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'less':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,114,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'lesseq':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,115,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'equal':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,116,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'of':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,131,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,174,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'then':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,132,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,175,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'loop':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,133,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,176,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,-72,]),'in':([72,73,74,75,76,77,78,79,88,91,92,93,96,124,125,126,127,128,129,130,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,197,198,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-35,-66,-68,-75,-69,171,-36,-39,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-37,-38,-61,-59,-62,-71,-73,-72,]),'else':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,203,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,219,-61,-59,-62,-71,-73,-72,]),'pool':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,204,210,212,213,214,220,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,220,-61,-59,-62,-71,-73,-72,]),'fi':([72,73,74,75,76,77,78,79,88,91,92,93,124,125,126,127,134,144,152,156,157,158,159,160,161,162,163,164,167,170,177,178,179,188,191,192,196,210,212,213,214,220,228,230,],[-75,-46,-50,-53,-56,-60,-67,-63,-74,-81,-82,-83,-66,-68,-75,-69,-76,-78,-45,-47,-48,-49,-51,-52,-54,-57,-55,-58,-65,-64,-77,-80,-79,-90,-88,-89,-70,-61,-59,-62,-71,-73,230,-72,]),'esac':([199,215,216,217,226,],[214,-40,-42,-43,-41,]),'rarrow':([227,],[229,]),} + +_lr_action = {} +for _k, _v in _lr_action_items.items(): + for _x,_y in zip(_v[0],_v[1]): + if not _x in _lr_action: _lr_action[_x] = {} + _lr_action[_x][_k] = _y +del _lr_action_items + +_lr_goto_items = {'program':([0,],[1,]),'class_list':([0,3,4,],[2,6,7,]),'def_class':([0,3,4,],[3,3,3,]),'feature_list':([10,12,15,29,30,33,34,36,37,],[14,22,26,47,48,53,54,56,57,]),'epsilon':([10,12,15,28,29,30,32,33,34,36,37,110,113,195,],[16,16,16,45,16,16,45,16,16,16,16,150,150,150,]),'def_attr':([10,12,15,29,30,33,34,36,37,],[17,17,17,17,17,17,17,17,17,]),'def_func':([10,12,15,29,30,33,34,36,37,],[18,18,18,18,18,18,18,18,18,]),'formals':([28,32,],[41,51,]),'param_list':([28,32,60,],[42,42,95,]),'param_list_empty':([28,32,],[43,43,]),'param':([28,32,60,84,172,],[44,44,44,130,130,]),'expr':([58,62,63,70,80,81,85,86,87,90,98,107,110,112,113,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[71,97,99,111,123,124,131,132,133,111,111,111,147,152,155,111,187,111,187,111,111,196,198,203,204,205,206,208,209,187,155,155,111,228,231,]),'comp':([58,62,63,70,80,81,85,86,87,90,98,107,110,112,113,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,]),'op':([58,62,63,70,80,81,85,86,87,90,98,107,110,112,113,114,115,116,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,156,157,158,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,]),'term':([58,62,63,70,80,81,85,86,87,90,98,107,110,112,113,114,115,116,117,118,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,159,160,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,]),'base_call':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[76,76,76,76,76,76,125,127,76,76,76,76,76,76,76,76,76,76,76,76,76,76,161,163,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,]),'factor':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,]),'func_call':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,122,136,145,151,154,162,164,171,173,175,176,180,181,182,183,184,185,189,193,194,195,207,219,229,],[78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,167,78,78,78,78,78,78,78,78,78,78,78,78,78,78,210,78,78,212,213,78,78,78,78,]),'atom':([58,62,63,70,80,81,82,83,85,86,87,90,98,107,110,112,113,114,115,116,117,118,119,120,136,145,151,154,162,164,171,173,175,176,180,181,182,183,185,189,195,207,219,229,],[79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,]),'block':([70,90,98,107,136,145,151,154,162,164,185,207,],[109,135,109,141,141,109,190,109,109,109,141,109,]),'let_list':([84,172,],[128,197,]),'let_assign':([84,172,],[129,129,]),'args':([110,113,195,],[146,153,146,]),'arg_list':([110,113,145,154,185,189,195,],[148,148,186,186,186,211,148,]),'arg_list_empty':([110,113,195,],[149,149,149,]),'cases_list':([174,201,215,],[199,216,226,]),'casep':([174,201,215,],[200,200,200,]),} + +_lr_goto = {} +for _k, _v in _lr_goto_items.items(): + for _x, _y in zip(_v[0], _v[1]): + if not _x in _lr_goto: _lr_goto[_x] = {} + _lr_goto[_x][_k] = _y +del _lr_goto_items +_lr_productions = [ + ("S' -> program","S'",1,None,None,None), + ('program -> class_list','program',1,'p_program','parser.py',8), + ('epsilon -> ','epsilon',0,'p_epsilon','parser.py',12), + ('class_list -> def_class class_list','class_list',2,'p_class_list','parser.py',17), + ('class_list -> def_class','class_list',1,'p_class_list','parser.py',18), + ('class_list -> error class_list','class_list',2,'p_class_list_error','parser.py',23), + ('def_class -> class type ocur feature_list ccur semi','def_class',6,'p_def_class','parser.py',29), + ('def_class -> class type inherits type ocur feature_list ccur semi','def_class',8,'p_def_class','parser.py',30), + ('def_class -> class error ocur feature_list ccur semi','def_class',6,'p_def_class_error','parser.py',38), + ('def_class -> class type ocur feature_list ccur error','def_class',6,'p_def_class_error','parser.py',39), + ('def_class -> class error inherits type ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',40), + ('def_class -> class error inherits error ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',41), + ('def_class -> class type inherits error ocur feature_list ccur semi','def_class',8,'p_def_class_error','parser.py',42), + ('def_class -> class type inherits type ocur feature_list ccur error','def_class',8,'p_def_class_error','parser.py',43), + ('feature_list -> epsilon','feature_list',1,'p_feature_list','parser.py',48), + ('feature_list -> def_attr semi feature_list','feature_list',3,'p_feature_list','parser.py',49), + ('feature_list -> def_func semi feature_list','feature_list',3,'p_feature_list','parser.py',50), + ('feature_list -> error feature_list','feature_list',2,'p_feature_list_error','parser.py',55), + ('def_attr -> id colon type','def_attr',3,'p_def_attr','parser.py',60), + ('def_attr -> id colon type larrow expr','def_attr',5,'p_def_attr','parser.py',61), + ('def_attr -> error colon type','def_attr',3,'p_def_attr_error','parser.py',68), + ('def_attr -> id colon error','def_attr',3,'p_def_attr_error','parser.py',69), + ('def_attr -> error colon type larrow expr','def_attr',5,'p_def_attr_error','parser.py',70), + ('def_attr -> id colon error larrow expr','def_attr',5,'p_def_attr_error','parser.py',71), + ('def_attr -> id colon type larrow error','def_attr',5,'p_def_attr_error','parser.py',72), + ('def_func -> id opar formals cpar colon type ocur expr ccur','def_func',9,'p_def_func','parser.py',77), + ('def_func -> error opar formals cpar colon type ocur expr ccur','def_func',9,'p_def_func_error','parser.py',81), + ('def_func -> id opar error cpar colon type ocur expr ccur','def_func',9,'p_def_func_error','parser.py',82), + ('def_func -> id opar formals cpar colon error ocur expr ccur','def_func',9,'p_def_func_error','parser.py',83), + ('def_func -> id opar formals cpar colon type ocur error ccur','def_func',9,'p_def_func_error','parser.py',84), + ('formals -> param_list','formals',1,'p_formals','parser.py',89), + ('formals -> param_list_empty','formals',1,'p_formals','parser.py',90), + ('param_list -> param','param_list',1,'p_param_list','parser.py',96), + ('param_list -> param comma param_list','param_list',3,'p_param_list','parser.py',97), + ('param_list_empty -> epsilon','param_list_empty',1,'p_param_list_empty','parser.py',106), + ('param -> id colon type','param',3,'p_param','parser.py',110), + ('let_list -> let_assign','let_list',1,'p_let_list','parser.py',115), + ('let_list -> let_assign comma let_list','let_list',3,'p_let_list','parser.py',116), + ('let_assign -> param larrow expr','let_assign',3,'p_let_assign','parser.py',125), + ('let_assign -> param','let_assign',1,'p_let_assign','parser.py',126), + ('cases_list -> casep semi','cases_list',2,'p_cases_list','parser.py',134), + ('cases_list -> casep semi cases_list','cases_list',3,'p_cases_list','parser.py',135), + ('cases_list -> error cases_list','cases_list',2,'p_cases_list_error','parser.py',139), + ('cases_list -> error semi','cases_list',2,'p_cases_list_error','parser.py',140), + ('casep -> id colon type rarrow expr','casep',5,'p_case','parser.py',144), + ('expr -> id larrow expr','expr',3,'p_expr','parser.py',149), + ('expr -> comp','expr',1,'p_expr','parser.py',150), + ('comp -> comp less op','comp',3,'p_comp','parser.py',158), + ('comp -> comp lesseq op','comp',3,'p_comp','parser.py',159), + ('comp -> comp equal op','comp',3,'p_comp','parser.py',160), + ('comp -> op','comp',1,'p_comp','parser.py',161), + ('op -> op plus term','op',3,'p_op','parser.py',180), + ('op -> op minus term','op',3,'p_op','parser.py',181), + ('op -> term','op',1,'p_op','parser.py',182), + ('term -> term star base_call','term',3,'p_term','parser.py',197), + ('term -> term div base_call','term',3,'p_term','parser.py',198), + ('term -> base_call','term',1,'p_term','parser.py',199), + ('term -> term star error','term',3,'p_term_error','parser.py',209), + ('term -> term div error','term',3,'p_term_error','parser.py',210), + ('base_call -> factor arroba type dot func_call','base_call',5,'p_base_call','parser.py',215), + ('base_call -> factor','base_call',1,'p_base_call','parser.py',216), + ('base_call -> error arroba type dot func_call','base_call',5,'p_base_call_error','parser.py',223), + ('base_call -> factor arroba error dot func_call','base_call',5,'p_base_call_error','parser.py',224), + ('factor -> atom','factor',1,'p_factor1','parser.py',229), + ('factor -> opar expr cpar','factor',3,'p_factor1','parser.py',230), + ('factor -> factor dot func_call','factor',3,'p_factor2','parser.py',234), + ('factor -> not expr','factor',2,'p_factor2','parser.py',235), + ('factor -> func_call','factor',1,'p_factor2','parser.py',236), + ('factor -> isvoid base_call','factor',2,'p_factor3','parser.py',245), + ('factor -> nox base_call','factor',2,'p_factor3','parser.py',246), + ('factor -> let let_list in expr','factor',4,'p_expr_let','parser.py',255), + ('factor -> case expr of cases_list esac','factor',5,'p_expr_case','parser.py',267), + ('factor -> if expr then expr else expr fi','factor',7,'p_expr_if','parser.py',279), + ('factor -> while expr loop expr pool','factor',5,'p_expr_while','parser.py',293), + ('atom -> num','atom',1,'p_atom_num','parser.py',306), + ('atom -> id','atom',1,'p_atom_id','parser.py',310), + ('atom -> new type','atom',2,'p_atom_new','parser.py',314), + ('atom -> ocur block ccur','atom',3,'p_atom_block','parser.py',318), + ('atom -> error block ccur','atom',3,'p_atom_block_error','parser.py',322), + ('atom -> ocur error ccur','atom',3,'p_atom_block_error','parser.py',323), + ('atom -> ocur block error','atom',3,'p_atom_block_error','parser.py',324), + ('atom -> true','atom',1,'p_atom_boolean','parser.py',328), + ('atom -> false','atom',1,'p_atom_boolean','parser.py',329), + ('atom -> string','atom',1,'p_atom_string','parser.py',333), + ('block -> expr semi','block',2,'p_block','parser.py',338), + ('block -> expr semi block','block',3,'p_block','parser.py',339), + ('block -> error block','block',2,'p_block_error','parser.py',343), + ('block -> error semi','block',2,'p_block_error','parser.py',344), + ('func_call -> id opar args cpar','func_call',4,'p_func_call','parser.py',349), + ('func_call -> id opar error cpar','func_call',4,'p_func_call_error','parser.py',353), + ('func_call -> error opar args cpar','func_call',4,'p_func_call_error','parser.py',354), + ('args -> arg_list','args',1,'p_args','parser.py',359), + ('args -> arg_list_empty','args',1,'p_args','parser.py',360), + ('arg_list -> expr','arg_list',1,'p_arg_list','parser.py',366), + ('arg_list -> expr comma arg_list','arg_list',3,'p_arg_list','parser.py',367), + ('arg_list -> error arg_list','arg_list',2,'p_arg_list_error','parser.py',374), + ('arg_list_empty -> epsilon','arg_list_empty',1,'p_arg_list_empty','parser.py',378), +] diff --git a/src/test.asm b/src/test.asm index 4cf31890..44071b1d 100644 --- a/src/test.asm +++ b/src/test.asm @@ -2,117 +2,266 @@ .globl main # Save method directions in the methods array la $v0, methods -la $t9, function_out_string_IO +la $t9, function_abort_Object sw $t9, 0($v0) -la $t9, function_out_int_IO +la $t9, function_type_name_Object sw $t9, 4($v0) -la $t9, function_in_string_IO +la $t9, function_copy_Object sw $t9, 8($v0) -la $t9, function_in_int_IO +la $t9, function_out_string_IO sw $t9, 12($v0) -la $t9, function_length_String +la $t9, function_out_int_IO sw $t9, 16($v0) -la $t9, function_concat_String +la $t9, function_in_int_IO sw $t9, 20($v0) -la $t9, function_substr_String +la $t9, function_in_string_IO sw $t9, 24($v0) -la $t9, function_abort_Object +la $t9, function_length_String sw $t9, 28($v0) -la $t9, function_type_name_Object +la $t9, function_concat_String sw $t9, 32($v0) -la $t9, function_copy_Object +la $t9, function_substr_String sw $t9, 36($v0) -la $t9, entry -sw $t9, 40($v0) la $t9, function_main_Main -sw $t9, 44($v0) +sw $t9, 40($v0) la $t9, function_Test_Test -sw $t9, 48($v0) +sw $t9, 44($v0) la $t9, function_testing1_Test -sw $t9, 52($v0) +sw $t9, 48($v0) la $t9, function_testing2_Test -sw $t9, 56($v0) +sw $t9, 52($v0) la $t9, function_testing3_Test -sw $t9, 60($v0) +sw $t9, 56($v0) la $t9, function_testing4_Test -sw $t9, 64($v0) +sw $t9, 60($v0) la $t9, function_Alpha_Alpha -sw $t9, 68($v0) +sw $t9, 64($v0) la $t9, function_print_Alpha -sw $t9, 72($v0) +sw $t9, 68($v0) -entry: +function_abort_Object: # Gets the params from the stack +# The 3 firsts registers are saved in a0-a3 # Gets the frame pointer from the stack move $fp, $sp -# Updates stack pointer pushing local__internal_0 to the stack +# Updates stack pointer pushing local_abort_self_0 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local__internal_1 to the stack +lw $t0, -4($fp) +# Moving self to local_abort_self_0 +move $t0, $a0 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $a0, -0($fp) +jr $ra + + +function_type_name_Object: +# Gets the params from the stack +# The 3 firsts registers are saved in a0-a3 +# Gets the frame pointer from the stack +move $fp, $sp +# Updates stack pointer pushing local_type_name_result_0 to the stack addiu $sp, $sp, -4 -lw $t0, -0($fp) -# Syscall to allocate memory of the object entry in heap -li $v0, 9 -li $a0, 12 -syscall -# Save the address in the stack -sw $v0, -0($fp) -# Loads the name of the variable and saves the name like the first field -la $t9, type_Main -sw $t9, 0($v0) -# Saves the size of the node -li $t9, 12 -sw $t9, 4($v0) -move $t0, $v0 -# Allocate dispatch table in the heap -li $v0, 9 -li $a0, 16 -syscall -# I save the offset of every one of the methods of this type -# Save the direction of methods -la $t8, methods -# Save the direction of the method function_abort_Object in t9 -lw $t9, 28($t8) -# Save the direction of the method in his position in the dispatch table -sw $t9, 0($v0) -# Save the direction of the method function_type_name_Object in t9 -lw $t9, 32($t8) -# Save the direction of the method in his position in the dispatch table -sw $t9, 4($v0) -# Save the direction of the method function_copy_Object in t9 -lw $t9, 36($t8) -# Save the direction of the method in his position in the dispatch table -sw $t9, 8($v0) -# Save the direction of the method function_main_Main in t9 -lw $t9, 44($t8) -# Save the direction of the method in his position in the dispatch table -sw $t9, 12($v0) -sw $v0, 8($t0) -lw $t1, -4($fp) -# Static Dispatch of the method main +lw $t0, -4($fp) +local_type_name_result_0 <- Type of self +la $t0, 0($a0) +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $a0, -0($fp) +jr $ra + + +function_copy_Object: +# Gets the params from the stack +# The 3 firsts registers are saved in a0-a3 +# Gets the frame pointer from the stack +move $fp, $sp +# Updates stack pointer pushing local_copy_result_0 to the stack addiu $sp, $sp, -4 -sw $fp, ($sp) +lw $t0, -4($fp) +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $a0, -0($fp) +jr $ra + + +function_out_string_IO: +# Gets the params from the stack +# The 3 firsts registers are saved in a0-a3 +# The 3 firsts registers are saved in a0-a3 +# Gets the frame pointer from the stack +move $fp, $sp +# Updates stack pointer pushing local_out_string_self_0 to the stack addiu $sp, $sp, -4 -sw $ra, ($sp) -# Push the arguments to the stack -# The 3 first registers are saved in a0-a3 -move $a0, $t0 +# Updates stack pointer pushing local_out_string_word_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +# Moving self to local_out_string_self_0 +move $t0, $a0 +lw $t1, -12($fp) +# Saves in local_out_string_word_1 word +la $t1, word +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +move $v0, $t0 # Empty all used registers and saves them to memory -sw $t0, -0($fp) -sw $t1, -4($fp) -# This function will consume the arguments -jal function_main_Main -# Pop fp register from the stack +sw $t0, -8($fp) +sw $t1, -12($fp) +sw $a0, -0($fp) +sw $a1, -4($fp) +jr $ra + + +function_out_int_IO: +# Gets the params from the stack +# The 3 firsts registers are saved in a0-a3 +# The 3 firsts registers are saved in a0-a3 +# Gets the frame pointer from the stack +move $fp, $sp +# Updates stack pointer pushing local_out_int_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +# Moving self to local_out_int_self_0 +move $t0, $a0 +# Pop ra register of return function of the stack addiu $sp, $sp, 4 -lw $fp, ($sp) +lw $ra, ($sp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $a0, -0($fp) +sw $a1, -4($fp) +jr $ra + + +function_in_int_IO: +# Gets the params from the stack +# The 3 firsts registers are saved in a0-a3 +# Gets the frame pointer from the stack +move $fp, $sp +# Updates stack pointer pushing local_in_int_result_0 to the stack +addiu $sp, $sp, -4 lw $t0, -4($fp) -# saves the return value -move $t0, $v0 # Pop ra register of return function of the stack addiu $sp, $sp, 4 lw $ra, ($sp) -li $v0, 0 +move $v0, $t0 # Empty all used registers and saves them to memory sw $t0, -4($fp) +sw $a0, -0($fp) +jr $ra + + +function_in_string_IO: +# Gets the params from the stack +# The 3 firsts registers are saved in a0-a3 +# Gets the frame pointer from the stack +move $fp, $sp +# Updates stack pointer pushing local_in_string_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $a0, -0($fp) +jr $ra + + +function_length_String: +# Gets the params from the stack +# The 3 firsts registers are saved in a0-a3 +# Gets the frame pointer from the stack +move $fp, $sp +# Updates stack pointer pushing local_length_word_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_length_result_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_length_word_0 self +la $t0, self +lw $t1, -8($fp) +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $a0, -0($fp) +jr $ra + + +function_concat_String: +# Gets the params from the stack +# The 3 firsts registers are saved in a0-a3 +# The 3 firsts registers are saved in a0-a3 +# Gets the frame pointer from the stack +move $fp, $sp +# Updates stack pointer pushing local_concat_word_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_concat_word_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_concat_result_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +# Saves in local_concat_word_0 self +la $t0, self +lw $t1, -12($fp) +# Saves in local_concat_word_1 word +la $t1, word +lw $t2, -16($fp) +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -12($fp) +sw $t2, -16($fp) +sw $a0, -0($fp) +sw $a1, -4($fp) +jr $ra + + +function_substr_String: +# Gets the params from the stack +# The 3 firsts registers are saved in a0-a3 +# The 3 firsts registers are saved in a0-a3 +# The 3 firsts registers are saved in a0-a3 +# Gets the frame pointer from the stack +move $fp, $sp +# Updates stack pointer pushing local_substr_word_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_substr_result_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -12($fp) +# Saves in local_substr_word_0 self +la $t0, self +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $a0, -0($fp) +sw $a1, -4($fp) +sw $a2, -8($fp) jr $ra @@ -149,39 +298,39 @@ syscall # Save the direction of methods la $t8, methods # Save the direction of the method function_abort_Object in t9 -lw $t9, 28($t8) +lw $t9, 0($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 0($v0) # Save the direction of the method function_type_name_Object in t9 -lw $t9, 32($t8) +lw $t9, 4($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 4($v0) # Save the direction of the method function_copy_Object in t9 -lw $t9, 36($t8) +lw $t9, 8($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 8($v0) # Save the direction of the method function_out_string_IO in t9 -lw $t9, 0($t8) +lw $t9, 12($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 12($v0) # Save the direction of the method function_out_int_IO in t9 -lw $t9, 4($t8) +lw $t9, 16($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 16($v0) # Save the direction of the method function_in_string_IO in t9 -lw $t9, 8($t8) +lw $t9, 24($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 20($v0) # Save the direction of the method function_in_int_IO in t9 -lw $t9, 12($t8) +lw $t9, 20($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 24($v0) # Save the direction of the method function_print_Alpha in t9 -lw $t9, 72($t8) +lw $t9, 68($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 28($v0) # Save the direction of the method function_Alpha_Alpha in t9 -lw $t9, 68($t8) +lw $t9, 64($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 32($v0) sw $v0, 8($t0) @@ -369,39 +518,39 @@ syscall # Save the direction of methods la $t8, methods # Save the direction of the method function_abort_Object in t9 -lw $t9, 28($t8) +lw $t9, 0($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 0($v0) # Save the direction of the method function_type_name_Object in t9 -lw $t9, 32($t8) +lw $t9, 4($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 4($v0) # Save the direction of the method function_copy_Object in t9 -lw $t9, 36($t8) +lw $t9, 8($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 8($v0) # Save the direction of the method function_out_string_IO in t9 -lw $t9, 0($t8) +lw $t9, 12($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 12($v0) # Save the direction of the method function_out_int_IO in t9 -lw $t9, 4($t8) +lw $t9, 16($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 16($v0) # Save the direction of the method function_in_string_IO in t9 -lw $t9, 8($t8) +lw $t9, 24($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 20($v0) # Save the direction of the method function_in_int_IO in t9 -lw $t9, 12($t8) +lw $t9, 20($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 24($v0) # Save the direction of the method function_print_Alpha in t9 -lw $t9, 72($t8) +lw $t9, 68($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 28($v0) # Save the direction of the method function_Alpha_Alpha in t9 -lw $t9, 68($t8) +lw $t9, 64($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 32($v0) sw $v0, 8($t0) @@ -577,10 +726,15 @@ type_Int: .asciiz "Int" type_Bool: .asciiz "Bool" type_Object: .asciiz "Object" type_IO: .asciiz "IO" +type_Object: .asciiz "Object" +type_IO: .asciiz "IO" +type_String: .asciiz "String" +type_Int: .asciiz "Int" +type_Bool: .asciiz "Bool" type_Main: .asciiz "Main" type_Test: .asciiz "Test" type_Alpha: .asciiz "Alpha" data_0: .asciiz "1" data_1: .asciiz "reached!! " -methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ No newline at end of file +methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ No newline at end of file From 0eab07e1b2bb23c99616813b1143bad4a501379f Mon Sep 17 00:00:00 2001 From: Noly Fernandez Date: Sat, 14 Nov 2020 21:59:17 -0700 Subject: [PATCH 41/60] Mips code to built in types done, missing checks for literal values --- doc/test.py | 0 .../base_cil_visitor.cpython-37.pyc | Bin 8014 -> 8014 bytes .../__pycache__/cil_visitor.cpython-37.pyc | Bin 12174 -> 12255 bytes src/codegen/visitors/base_mips_visitor.py | 17 +- src/codegen/visitors/cil_visitor.py | 14 +- src/codegen/visitors/mips_visitor.py | 192 ++++- src/cool_parser/output_parser/parselog.txt | 762 +++++++++--------- 7 files changed, 588 insertions(+), 397 deletions(-) create mode 100644 doc/test.py diff --git a/doc/test.py b/doc/test.py new file mode 100644 index 00000000..e69de29b diff --git a/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc index afe229de79745b28acfa8ac2c40e4d20014a5ffb..5f444ac4517574ff0c7d4c1b05b25f9c1949b7b7 100644 GIT binary patch delta 20 acmX?Scg~L6iI`|EDr!YSOtXu delta 20 acmX?Scg~L6iI6(gQ-f)nq!kqE#Y+(n3Yu0d6oL|>yQNL@!%ns((%Hr~ z{z6dDp(ha%@DEUeHxFLCc+qn&Lh<0yledEJZ8vGmlJCsEdG9;>J~OZKKl8CG(WoWC z@9*x1d}8)v?Ca^qFL?E&7I6rdit=0Oo!llq4I*-1L%=n(f720a#dEg%IgkD18=oXkq$RXkl^sU$)w< z!;cZK&wRR+(`sIUdHI}qzgqEDD(h~3PjM>_=tgzLNk!NQbiZfbDBN>P*{b8R1iT9` zzDZWapZEp!IDtouk4-mzzyjM?-9mZ7UujKyGJt0>5W6;Y4`JApEcQbH+%>=|yU=H_c&ncc)#1!ELn4VVGa2uAUi zu>q98_8QD`RtBIG%l!gddS$s}rNLBn!&XBU0O%02g@na?ck}WbuM#S9s z7wzy6#L&dtDIbZ_!g`%$v3ee53uPgw-JSSG9*NQPMe$~`PBuDrYLM7XTn|pTAqrEI zBAdQUn&L&8fgYsSK&u&??`OQe+?`Hgs!YhX_&yzvKSqlN$`h2QD9=!yqwI8|=eNl} DD%&A3 delta 1024 zcmYk4&ubGw6vuaVclKABSUp%3YGScz($s>Ahtfkqtazwt!Gch#F*aN1k|xb&QzFh1 zYuftbAjo(VF##`n5Nh3Ds6mXPDEx9fE8a(m6%Cv&oh8!Ycgh7sQ zlo3Z`a$8=Necd<0Y@O*$b&NqibTAo(21nSfyc z0qZQLK~)ce)S99Fv9LiTY+(73BMq$nCX{Icg6<9R*>msa-8DGA>wu)AZVde<3J&fT zQBIlL!SSWkIRBlhlX_=0 zJxs_RKS*8TZzpHL{hD+^vzZELH-rB2lo#9U*YAe)onUI7kS0$|$K(6>b_eAN%2SkQ ND9=%LJ9npd$bW!v2h#um diff --git a/src/codegen/visitors/base_mips_visitor.py b/src/codegen/visitors/base_mips_visitor.py index a5d3058a..ba0a5246 100644 --- a/src/codegen/visitors/base_mips_visitor.py +++ b/src/codegen/visitors/base_mips_visitor.py @@ -20,6 +20,9 @@ def __init__(self): self.initialize_methods() # Will hold the type of any of the vars self.var_address = {'self': AddrType.REF} + self.strings = {} + self.loop_idx = 0 # to count the generic loops in the app + self.first_defined = {'strcopier': True} # bool to keep in account when the first defined string function was defined def initialize_methods(self): self.methods = [] @@ -258,4 +261,16 @@ def get_type(self, xtype): return AddrType.BOOL elif xtype == 'String': return AddrType.STR - return AddrType.REF \ No newline at end of file + return AddrType.REF + + def save_reg_if_occupied(reg): + var = self.reg_desc.get_content(reg) + if var is not None: + self.code.append(f'# Saving content of {reg} to memory to use that register') + self.save_var_code(var) + return var + + def load_var_if_occupied(var): + if var is not None: + self.code.append(f'# Restore the variable of {var}') + self.load_var_code(var) \ No newline at end of file diff --git a/src/codegen/visitors/cil_visitor.py b/src/codegen/visitors/cil_visitor.py index d1ad6095..6ff690db 100644 --- a/src/codegen/visitors/cil_visitor.py +++ b/src/codegen/visitors/cil_visitor.py @@ -239,9 +239,9 @@ def visit(self, node: WhileNode, scope: Scope): GOTO start LABEL end ''' - start_label = cil.LabelNode('start') - continue_label = cil.LabelNode('continue') - end_label = cil.LabelNode('end') + start_label = cil.LabelNode(f'start_{self.idx}') + continue_label = cil.LabelNode(f'continue_{self.idx}') + end_label = cil.LabelNode(f'end_{self.idx}') result = self.define_internal_local() self.register_instruction(cil.AssignNode(result, 'void')) @@ -270,8 +270,8 @@ def visit(self, node: ConditionalNode, scope: Scope): ''' cond, _ = self.visit(node.cond, scope) - true_label = cil.LabelNode("true") - end_label = cil.LabelNode("end") + true_label = cil.LabelNode(f"true_{self.idx}") + end_label = cil.LabelNode(f"end_{self.idx}") result = self.define_internal_local() self.register_instruction(cil.GotoIfNode(cond, true_label.label)) @@ -311,12 +311,12 @@ def visit(self, node: CaseNode, scope: Scope): expr, typex = self.visit(node.expr, scope) result = self.define_internal_local() etype = self.define_internal_local() - end_label = cil.LabelNode('end') + end_label = cil.LabelNode(f'end_{self.idx}') self.register_instruction(cil.TypeOfNode(expr, etype)) new_scope = scope.expr_dict[node] for i, (case, c_scope) in enumerate(zip(node.case_list, new_scope.children)): - next_label = cil.LabelNode(f'next_{i}') + next_label = cil.LabelNode(f'next_{self.idx}_{i}') expr_i, label = self.visit(case, c_scope, expr, etype, next_label) self.register_instruction(cil.AssignNode(result, expr_i)) self.register_instruction(cil.GotoNode(end_label.label)) diff --git a/src/codegen/visitors/mips_visitor.py b/src/codegen/visitors/mips_visitor.py index f0f2cd9d..f44a5cc3 100644 --- a/src/codegen/visitors/mips_visitor.py +++ b/src/codegen/visitors/mips_visitor.py @@ -56,6 +56,7 @@ def visit(self, node:TypeNode): @visitor.when(DataNode) def visit(self, node:DataNode): self.data_code.append(f"{node.name}: .asciiz \"{node.value}\"") + self.strings[node.name] = node.value @visitor.when(FunctionNode) def visit(self, node:FunctionNode): @@ -258,10 +259,7 @@ def visit(self, node:AllocateNode): size = 4*self.obj_table.size_of_entry(node.type) # size of the table entry of the new type self.var_address[node.dest] = AddrType.REF # syscall to allocate memory of the object entry in heap - var = self.reg_desc.get_content('a0') - if var is not None: - self.code.append('# Saving content of a0 to memory to use that register') - self.save_var_code(var) + var = self.save_reg_if_occupied('a0') self.code.append('# Syscall to allocate memory of the object entry in heap') self.code.append('li $v0, 9') # code to request memory @@ -284,9 +282,7 @@ def visit(self, node:AllocateNode): self.create_dispatch_table(node.type) # memory of dispatch table in v0 self.code.append(f'sw $v0, 8(${rdest})') # save a pointer of the dispatch table in the 3th position - if var is not None: - self.code.append('# Restore the variable of a0') - self.load_var_code(var) + self.load_var_if_occupied(var) def create_dispatch_table(self, type_name): # Get methods of the dispatch table @@ -428,4 +424,184 @@ def visit(self, node:LoadNode): rdest = self.addr_desc.get_var_reg(node.dest) self.code.append(f'# Saves in {node.dest} {node.msg}') self.var_address[node.dest] = AddrType.STR - self.code.append(f'la ${rdest}, {node.msg}') \ No newline at end of file + self.code.append(f'la ${rdest}, {node.msg}') + + + @visitor.when(LengthNode) + def visit(self, node: LengthNode): + rdest = self.addr_desc.get_var_reg(node.dest) + reg = self.addr_desc.get_var_reg(node.arg) + loop = f'loop_{self.loop_idx}' + end = f'end_{self.loop_idx}' + # saving the value of reg to iterate + self.code.append(f'move $t8, ${reg}') + self.code.append('# Determining the length of a string') + self.code.append(f'{loop}:') + self.code.append(f'lb $t9, 0($t8)') + self.code.append(f'beq $t9, $zero, {end}') + self.code.append(f'addi $t8, $t8, 1') + self.code.append(f'j {loop}') + self.code.append(f'{end}:') + self.code.append(f'{rdest}, $t8, {reg}') + self.loop_idx += 1 + + @visitor.when(ConcatNode) + def visit(self, node: ConcatNode): + rdest = self.addr_desc.get_var_reg(node.dest) + rsrc1 = self.addr_desc.get_var_reg(node.arg1) + rsrc2 = self.addr_desc.get_var_reg(node.arg2) + + self.code.append('# Copy the first string to dest') + var1 = self.save_reg_if_occupied('a0') + var2 = self.save_reg_if_occupied('a1') + self.code.append(f'move $a0, ${rsrc1}') + self.code.append(f'move $a1, ${rdest}') + self.code.append('jal strcopier') + + self.code.append('# Concatenate second string on result buffer') + self.code.append(f'move $a0, ${rsrc2}') + self.code.append(f'move $a1, $v0') + self.code.append('jal strcopier') + self.code.append(f'j finish_{self.loop_idx}') + + if self.first_defined['strcopier']: + self.code.append('# Definition of strcopier') + self.code.append('strcopier:') + self.code.append('# In a0 is the source and in a1 is the destination') + self.code.append(f'loop_{self.loop_idx}:') + self.code.append('lb $t8, ($a0)') + self.code.append(f'beq $t8, $zero, end_{self.loop_idx}') + self.code.append('addiu $a0, $a0, 1') + self.code.append('sb $t8, ($a1)') + self.code.append('addiu $a1, $a1, 1') + self.code.append(f'b loop_{self.loop_idx}') + self.code.append(f'end_{self.loop_idx}:') + self.code.append('move $v0, $a1') + self.code.append('jr $ra') + self.first_defined['strcopier'] = False + + self.code.append(f'finish_{self.loop_idx}:') + self.load_var_if_occupied(var1) + self.load_var_if_occupied(var2) + self.loop_idx += 1 + + + @visitor.when(SubstringNode) + def visit(self, node: SubstringNode): + # TODO: Really not sure if the result should be allocated as well + rdest = self.addr_desc.get_var_reg(node.dest) + rstart = self.addr_desc.get_var_reg(node.start) + rend = self.addr_desc.get_var_reg(node.end) + rself = self.addr_desc.get_var_reg('self') + + self.code.append("# Getting the substring of a node") + # Moves to the first position of the string + self.code.append(f'sll $t9, ${rstart}, 2') # multiplicar entre 4 + self.code.append(f'add $t8, t8, $t9') + + self.code.append('# Saving dest to iterate over him') + self.code.append(f'move $v0, ${rdest}') + + loop = f'loop_{self.loop_idx}' + end = f'end_{self.loop_idx}' + # Loops moving the bytes until reaching to end + self.code.append(f'{loop}:') + self.code.append(f'sub $t9, $v0, ${rdest}') # i should check: if this rest is negative runtime error generated + self.code.append('srl $t9, $t9, 2') # dividir entre 4 + self.code.append(f'beq $t9, ${rend}, {end}') + self.code.append(f'lb $t9, 0($t8)') + self.code.append(f'sb $t9, $v0') + + self.code.append('addi $t8, $t8, 1') + self.code.append(f'addi $v0, $v0, 1') + self.code.append(f'j {loop}') + self.code.append(f'{end}:') + self.code.append(f'{rdest}, $t8, {reg}') + + + @visitor.when(OutStringNode) + def visit(self, node: OutStringNode): + reg = self.addr_desc.get_var_reg(node.value) + self.code.append('# Printing a string') + self.code.append('li $v0, 4') + var = self.save_reg_if_occupied('a0') + self.code.append(f'move $a0, ${reg}') + self.code.append('syscall') + self.load_var_if_occupied(var) + + @visitor.when(OutIntNode) + def visit(self, node: OutIntNode): + reg = self.addr_desc.get_var_reg(node.value) + self.code.append('# Printing an int') + self.code.append('li $v0, 1') + var = self.save_reg_if_occupied('a0') + self.code.append(f'move $a0, ${reg}') + self.code.append('syscall') + self.load_var_if_occupied(var) + + + @visitor.when(ReadStringNode) + def visit(self, node: ReadStringNode): + # TODO: I should allocate space for this string, not sure of how this is done + rdest = self.addr_desc.get_var_reg(node.dest) + self.code.append('# Reading a string') + self.code.append('li $v0, 8') + var1 = self.save_reg_if_occupied('a0') + var2 = self.save_reg_if_occupied('a1') + self.code.append('Putting buffer in a0') + self.code.append(f'move $a0, {rdest}') + length = len(self.strings[node.dest]) # Get length of the string + self.code.append('Putting length of string in a1') + self.code.append(f'move $a1, {length}') + self.code.append('syscall') + self.code.append(f'move ${rdest}, $v0') + + + @visitor.when(ReadIntNode) + def visit(self, node: ReadIntNode): + rdest = self.addr_desc.get_var_reg(node.dest) + self.code.append('# Reading a int') + self.code.append('li $v0, 5') + self.code.append('syscall') + self.code.append(f'move ${rdest}, $v0') + + + @visitor.when(ExitNode) + def visit(self, node: ExitNode): + reg = self.addr_desc.get_var_reg(node.value) + self.code.append('li $v0, 17') + self.code.append(f'move $a0, ${reg}') + self.code.append('syscall') + + @visitor.when(CopyNode) + def visit(self, node: CopyNode): + rdest = self.addr_desc.get_var_reg(node.dest) + rsrc = self.addr_desc.get_var_reg(node.source) + + self.code.append(f'move $t9, 4(${rscr})') # getting the size of the object + self.code.append('# Syscall to allocate memory of the object entry in heap') + self.code.append('li $v0, 9') # code to request memory + var = self.save_reg_if_occupied('a0') + self.code.append(f'move $a0, $t9') # argument (size) + self.code.append('syscall') + + self.code.append(f'move ${rdest}, $v0') + + self.code.append('# Loop to copy every field of the previous object') + # loop to copy every field of the previous object + self.code.append('# t8 the register to loop') + self.code.append('li $t8, 0') + self.code.append(f'loop_{self.loop_idx}:') + self.code.apppend('# In t9 is stored the size of the object') + self.code.append(f'bgt $t8, $t9, exit_{self.loop_idx}') + # offset in the copied element + self.code.append('addi $v0, $v0, 4') + # offset in the original element + self.code.append(f'addi ${rsrc}, ${rsrc}, 4') + self.code.append(f'lw $a0, (${rsrc})') + self.code.append('sw $a0, ($v0)') + self.code.append('# Increase loop counter') + self.code.append('addi $t8, $t8, 4') + self.code.append(f'j loop_{self.loop_idx}') + self.code.append(f'exit_{self.loop_idx}:') + self.loop_idx += 1 \ No newline at end of file diff --git a/src/cool_parser/output_parser/parselog.txt b/src/cool_parser/output_parser/parselog.txt index b29f76b7..c4aac612 100644 --- a/src/cool_parser/output_parser/parselog.txt +++ b/src/cool_parser/output_parser/parselog.txt @@ -6146,19 +6146,19 @@ yacc.py: 411:State : 32 yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',3,23) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',3,23) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',3,23) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',3,23) @@ -6191,37 +6191,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',4,53) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar epsilon . LexToken(cpar,')',4,61) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar arg_list_empty . LexToken(cpar,')',4,61) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args . LexToken(cpar,')',4,61) @@ -6268,37 +6268,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args cpar . LexToken(ccur,'}',5,67) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['print','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) + yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot func_call . LexToken(ccur,'}',5,67) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : class type ocur def_func semi epsilon . LexToken(ccur,'}',6,70) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : class type ocur def_func semi feature_list . LexToken(ccur,'}',6,70) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 14 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['test1',':','Int'] and goto state 17 - yacc.py: 506:Result : ( ( id] with ['test3'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',12,146) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',12,146) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',12,146) @@ -6490,27 +6490,27 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur num . LexToken(minus,'-',13,165) yacc.py: 471:Action : Reduce rule [atom -> num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 160 - yacc.py: 506:Result : ( base_call] with [] and goto state 160 + yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 - yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( string] with ['1'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 + yacc.py: 506:Result : ( id colon type] with ['a',':','Alpha'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) + yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param . LexToken(comma,',',19,226) @@ -6678,24 +6678,24 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon type . LexToken(cpar,')',19,234) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['b',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) + yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 - yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 + yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 95 yacc.py: 430:Defaulted state 95: Reduce using 33 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals . LexToken(cpar,')',19,234) @@ -6732,12 +6732,12 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon type . LexToken(comma,',',20,265) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['count',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) + yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) yacc.py: 410: yacc.py: 411:State : 130 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let param . LexToken(comma,',',20,265) - yacc.py: 471:Action : Reduce rule [let_assign -> param] with [] and goto state 129 - yacc.py: 506:Result : ( param] with [] and goto state 129 + yacc.py: 506:Result : ( id colon type] with ['pow',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) + yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 130 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param . LexToken(larrow,'<-',20,276) @@ -6771,53 +6771,53 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow num . LexToken(in,'in',21,329) yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 - yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 + yacc.py: 506:Result : ( let_assign] with [] and goto state 197 - yacc.py: 506:Result : ([ let_assign] with [] and goto state 197 + yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 - yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 + yacc.py: 506:Result : ([ num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 135 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 196 - yacc.py: 506:Result : ( comp] with [] and goto state 196 + yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',26,389) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',26,389) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',26,389) @@ -7031,37 +7031,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new type . LexToken(comma,',',27,424) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ id opar args cpar] with ['testing2','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',30,450) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',30,450) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',30,450) @@ -7236,27 +7236,27 @@ yacc.py: 411:State : 88 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar num . LexToken(plus,'+',31,480) yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 - yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',33,543) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',33,543) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( comp] with [] and goto state 97 + yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar epsilon . LexToken(cpar,')',37,601) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list_empty . LexToken(cpar,')',37,601) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',37,601) @@ -7660,48 +7660,48 @@ yacc.py: 411:State : 93 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id opar string . LexToken(cpar,')',38,646) yacc.py: 471:Action : Reduce rule [atom -> string] with ['reached!!\n'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi epsilon . LexToken(ccur,'}',40,655) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi feature_list . LexToken(ccur,'}',40,655) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( ( Date: Sun, 15 Nov 2020 21:34:28 -0700 Subject: [PATCH 42/60] Fixed some errors in built-ins. Already started testing with spim :) --- .../__pycache__/cil_ast.cpython-37.pyc | Bin 13273 -> 13273 bytes src/codegen/cil_ast.py | 4 +- .../base_cil_visitor.cpython-37.pyc | Bin 8014 -> 7747 bytes src/codegen/visitors/base_cil_visitor.py | 18 +- src/codegen/visitors/base_mips_visitor.py | 27 +- src/codegen/visitors/mips_visitor.py | 74 +- src/cool_parser/output_parser/parselog.txt | 1642 +---------------- src/main.py | 2 +- src/test.asm | 795 +++----- 9 files changed, 374 insertions(+), 2188 deletions(-) diff --git a/src/codegen/__pycache__/cil_ast.cpython-37.pyc b/src/codegen/__pycache__/cil_ast.cpython-37.pyc index 66ff5f28865a17713340ac51cd974e7215b488b9..9a012ec78ce50759ec44a0ce718ac0db2f6183d9 100644 GIT binary patch delta 79 zcmcbaelwlhiIs12*^uJiR1sEm?ox-S7E7FTP(7zTbEDZQIo7nfyB)eQBLK z2d-(+@_^pi8+7uC2!UDTuq+KX)! z9}!hVw2o_^>%}w-<+C9+J{|I@qm2k1s<^8vw$(HmXVai{Q%yym$JD`&%GD#M5_+o~ z7UFfXm`3%s++3_?Pc`<*yNwt<^vQbw&Ctd!4CG;<2p?6{(Lxu4#Jr<%ZR9G#OMSr; zO++xp#tSYw$Sdu_I@3hYbRxEhh*4B0J@`udsFEIXF+g3RhC*#ZchOSFHFT9;$3PJ) zGdE*od4rnEsX{!VJ<@h>%7>Moa#;OZ4kmA&Kb?#w$FGz0>QJ`vW!lS58)HNq5uE@ delta 1059 zcmZvbzi-n(6vutGqee~bILX=F=LliYq;|f$g ztAp7XZ(%}|i4my8z{(8j%zpslkKpBU4p23c^Of)Wx%b}pN&b4{`z`afVazJ{d-d)^ z@VfEQTrbY%@O2%Z(XW%uqEC(@!tx0T)!2;Gw;GsC_msX4hE%1WIo8n0p<_vBqNy`C zb;c(uvNO{v;w04Le3WGcFu;U-qQ_RGFv4<)ifR;DDN(U~0SBS{cd3~%puj9nY16l% z07WR_6`EcNNo*tO;K(F)u$jrXXvZ&u4Gxr%bpIheBwazyBbn##X@_|HlzN-<2|@3I z2woHMYBF&3OmGWoGI&a)!DptO8+z`9WTsSk ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',3,23) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',3,23) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',3,23) @@ -6169,1653 +6169,141 @@ yacc.py: 445:Action : Shift and goto state 100 yacc.py: 410: yacc.py: 411:State : 100 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon . LexToken(type,'Object',3,26) + yacc.py: 435:Stack : class type ocur id opar formals cpar colon . LexToken(type,'Int',3,26) yacc.py: 445:Action : Shift and goto state 138 yacc.py: 410: yacc.py: 411:State : 138 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type . LexToken(ocur,'{',3,33) + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type . LexToken(ocur,'{',3,30) yacc.py: 445:Action : Shift and goto state 181 yacc.py: 410: yacc.py: 411:State : 181 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur . LexToken(opar,'(',4,43) - yacc.py: 445:Action : Shift and goto state 80 - yacc.py: 410: - yacc.py: 411:State : 80 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar . LexToken(new,'new',4,44) - yacc.py: 445:Action : Shift and goto state 89 - yacc.py: 410: - yacc.py: 411:State : 89 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new . LexToken(type,'Alpha',4,48) - yacc.py: 445:Action : Shift and goto state 134 - yacc.py: 410: - yacc.py: 411:State : 134 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',4,53) - yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 150 - yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar epsilon . LexToken(cpar,')',4,61) - yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 149 - yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar arg_list_empty . LexToken(cpar,')',4,61) - yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args . LexToken(cpar,')',4,61) - yacc.py: 445:Action : Shift and goto state 191 - yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot id opar args cpar . LexToken(ccur,'}',5,67) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['print','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'print',4,55), [])) - yacc.py: 410: - yacc.py: 411:State : 167 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur factor dot func_call . LexToken(ccur,'}',5,67) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 16 - yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : class type ocur def_func semi epsilon . LexToken(ccur,'}',6,70) - yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 48 - yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : class type ocur def_func semi feature_list . LexToken(ccur,'}',6,70) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 14 - yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( id colon type] with ['test1',':','Int'] and goto state 17 - yacc.py: 506:Result : ( id] with ['test3'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test2',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',12,146) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',12,146) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',12,146) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar . LexToken(colon,':',12,147) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon . LexToken(type,'Int',12,149) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',12,153) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur . LexToken(num,2.0,13,163) - yacc.py: 445:Action : Shift and goto state 88 - yacc.py: 410: - yacc.py: 411:State : 88 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur num . LexToken(minus,'-',13,165) - yacc.py: 471:Action : Reduce rule [atom -> num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 160 - yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing1','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( string] with ['1'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( id colon type larrow expr] with ['test3',':','String','<-',] and goto state 17 - yacc.py: 506:Result : ( id colon type] with ['a',':','Alpha'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'a',19,218), LexToken(type, ...) - yacc.py: 410: - yacc.py: 411:State : 44 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param . LexToken(comma,',',19,226) - yacc.py: 445:Action : Shift and goto state 60 - yacc.py: 410: - yacc.py: 411:State : 60 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma . LexToken(id,'b',19,228) - yacc.py: 445:Action : Shift and goto state 46 - yacc.py: 410: - yacc.py: 411:State : 46 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id . LexToken(colon,':',19,229) - yacc.py: 445:Action : Shift and goto state 61 - yacc.py: 410: - yacc.py: 411:State : 61 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon . LexToken(type,'Int',19,231) - yacc.py: 445:Action : Shift and goto state 96 - yacc.py: 410: - yacc.py: 411:State : 96 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma id colon type . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['b',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'b',19,228), LexToken(type, ...) - yacc.py: 410: - yacc.py: 411:State : 44 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 - yacc.py: 506:Result : ([(LexToken(id,'b',19,228), LexToken(type ...) - yacc.py: 410: - yacc.py: 411:State : 95 - yacc.py: 430:Defaulted state 95: Reduce using 33 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param comma param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) - yacc.py: 410: - yacc.py: 411:State : 42 - yacc.py: 430:Defaulted state 42: Reduce using 30 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar param_list . LexToken(cpar,')',19,234) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'a',19,218), LexToken(type ...) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals . LexToken(cpar,')',19,234) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar . LexToken(colon,':',19,235) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon . LexToken(type,'Int',19,237) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',19,241) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur . LexToken(let,'let',20,251) - yacc.py: 445:Action : Shift and goto state 84 - yacc.py: 410: - yacc.py: 411:State : 84 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let . LexToken(id,'count',20,255) - yacc.py: 445:Action : Shift and goto state 46 - yacc.py: 410: - yacc.py: 411:State : 46 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id . LexToken(colon,':',20,260) - yacc.py: 445:Action : Shift and goto state 61 - yacc.py: 410: - yacc.py: 411:State : 61 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon . LexToken(type,'Int',20,262) - yacc.py: 445:Action : Shift and goto state 96 - yacc.py: 410: - yacc.py: 411:State : 96 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let id colon type . LexToken(comma,',',20,265) - yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['count',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'count',20,255), LexToken(t ...) - yacc.py: 410: - yacc.py: 411:State : 130 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let param . LexToken(comma,',',20,265) - yacc.py: 471:Action : Reduce rule [let_assign -> param] with [] and goto state 129 - yacc.py: 506:Result : ( id colon type] with ['pow',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'pow',20,267), LexToken(typ ...) - yacc.py: 410: - yacc.py: 411:State : 130 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param . LexToken(larrow,'<-',20,276) - yacc.py: 445:Action : Shift and goto state 173 - yacc.py: 410: - yacc.py: 411:State : 173 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow . LexToken(num,1.0,20,279) - yacc.py: 445:Action : Shift and goto state 88 - yacc.py: 410: - yacc.py: 411:State : 88 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi id opar formals cpar colon type ocur let let_assign comma param larrow num . LexToken(in,'in',21,329) - yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 - yacc.py: 506:Result : ( let_assign] with [] and goto state 197 - yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 - yacc.py: 506:Result : ([ num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( id larrow expr] with ['count','<-',] and goto state 111 - yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 135 - yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 196 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing2','(',,')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',26,389) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',26,389) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',26,389) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar . LexToken(colon,':',26,390) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon . LexToken(type,'Int',26,392) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',26,396) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'testing2',27,406) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id . LexToken(opar,'(',27,414) - yacc.py: 445:Action : Shift and goto state 113 - yacc.py: 410: - yacc.py: 411:State : 113 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar . LexToken(new,'new',27,415) - yacc.py: 445:Action : Shift and goto state 89 - yacc.py: 410: - yacc.py: 411:State : 89 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new . LexToken(type,'Alpha',27,419) - yacc.py: 445:Action : Shift and goto state 134 - yacc.py: 410: - yacc.py: 411:State : 134 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi id opar formals cpar colon type ocur id opar new type . LexToken(comma,',',27,424) - yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Alpha'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['testing2','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'testing2',27,406), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing3','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',30,450) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',30,450) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',30,450) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',30,451) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'Int',30,453) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',30,457) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'test1',31,467) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(larrow,'<-',31,473) - yacc.py: 445:Action : Shift and goto state 112 - yacc.py: 410: - yacc.py: 411:State : 112 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow . LexToken(opar,'(',31,477) - yacc.py: 445:Action : Shift and goto state 80 - yacc.py: 410: - yacc.py: 411:State : 80 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar . LexToken(num,1.0,31,478) + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur . LexToken(num,1.0,4,40) yacc.py: 445:Action : Shift and goto state 88 yacc.py: 410: yacc.py: 411:State : 88 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id larrow opar num . LexToken(plus,'+',31,480) + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur num . LexToken(plus,'+',4,42) yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( id larrow expr] with ['test1','<-',] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['testing4','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',33,543) + yacc.py: 435:Stack : class type ocur def_func semi epsilon . LexToken(ccur,'}',6,53) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 48 - yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',33,543) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : def_class class type ocur def_attr semi def_attr semi def_func semi def_attr semi def_func semi def_func semi feature_list . LexToken(ccur,'}',33,543) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Test','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 97 - yacc.py: 506:Result : ( id colon type larrow expr] with ['x',':','Int','<-',] and goto state 17 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar epsilon . LexToken(cpar,')',37,601) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list_empty . LexToken(cpar,')',37,601) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',37,601) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar . LexToken(colon,':',37,603) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon . LexToken(type,'Object',37,605) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',37,612) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur . LexToken(id,'out_string',38,622) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id . LexToken(opar,'(',38,632) - yacc.py: 445:Action : Shift and goto state 113 - yacc.py: 410: - yacc.py: 411:State : 113 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id opar . LexToken(string,'reached!!\n',38,645) - yacc.py: 445:Action : Shift and goto state 93 - yacc.py: 410: - yacc.py: 411:State : 93 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur id opar string . LexToken(cpar,')',38,646) - yacc.py: 471:Action : Reduce rule [atom -> string] with ['reached!!\n'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',38,622), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 16 - yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi epsilon . LexToken(ccur,'}',40,655) - yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 48 - yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi feature_list . LexToken(ccur,'}',40,655) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Alpha','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ def_class] with [] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( ( Date: Mon, 16 Nov 2020 19:27:50 -0700 Subject: [PATCH 43/60] All built in functions and almost all functions tested :) --- .../base_cil_visitor.cpython-37.pyc | Bin 7747 -> 7783 bytes .../cil_format_visitor.cpython-37.pyc | Bin 7548 -> 8470 bytes .../__pycache__/cil_visitor.cpython-37.pyc | Bin 12255 -> 12292 bytes src/codegen/visitors/base_cil_visitor.py | 5 +- src/codegen/visitors/base_mips_visitor.py | 4 +- src/codegen/visitors/cil_format_visitor.py | 24 ++ src/codegen/visitors/cil_visitor.py | 8 +- src/codegen/visitors/mips_visitor.py | 135 ++++---- src/cool_parser/output_parser/parselog.txt | 254 +++++++++----- src/test.asm | 316 ++++++++++++------ src/test1.cl | 8 +- 11 files changed, 482 insertions(+), 272 deletions(-) diff --git a/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc index 0d39ba0c45128371c1390e576ce7587264327bb0..e0154d9e769b96c9a4b6a93f95aaa2d9e50c69cc 100644 GIT binary patch delta 531 zcmZwC&rcIk5C`x#OLtkfzqUQJ8f}D_DBFY!2{howMkH1QTd+VA2;ok}R|WG- zfqA5m270}I%g4vu=>ChYH^3#Dir;}P+KlIo%W*o5ug`EiF7jN+8+7q9b@YF!xXhy^ z<_Tr(+ptfo_B<5mt^LiA!m+SK%>){&JW-%uiCa(~8p&N9)~J@AwWQJRAMbmJPlq4V zuK>!!?6prCAj#`LEC1HuAK@J1GWVGW%mVX}NiZhUR>)AXQ}wXOeUe#W;>qgZeuG!e_H3$Ly$J?67Yh(!Vv*Cm)SBEn(|3e zsj^6Co4nKyJ9s7qwcQbXk+wW;8eF1YwNfoI)=Ad=m&{hEHAbxRyiv$tRSrQIALLg( zo8j*+k;U-R!n6r$3U@xWTV+sMOGgor{A3#}$Hoosl37(HO( zL1WZs3<=YWgoDv&6cXdXyEljjIgoJh;MG6CnCR!@=L4v!9N2JEi>EJ;kw``Y84aD%7TsE9 z2)`rF9OQ2()TZQY?m4ygS`Bmy$@E@vl!z_OEPh&jPjK=~aSPD5iYQwF7 z1TowVbRsAU#v8gCVl>~`j%El2jdY=n0`@DtY)RV_MVq$2o0ISI>qN=2_4hZ3upRS!d%lyfZ? zd~0N1JdP*A3hLoLm_RE$2CwmRI4Mog844~6bXSx3 UCmeM}+)yylXo`S|*`_0Z0U)#LfB*mh delta 482 zcmbQ{^v8L>ifk5R>SN?cQ4VI%RH;&){ENs4juL0*H&0ivdi{*yoQ2v43VI)_nl@&z_Y#!#RxKSrg=^Ti~A`gV#bL3A?) zPyQyB#25ioEk3zGJccm_%+eQ>nIs{@s5V(v!jv%qER-c-E~*B!q>5R=RzZ`wNCC($ z(gYHd8>LklQ^0CK&K8pt23l#rtIU`IGiq{x0RQ9(k~~23=1Q6|=77atOF9AhdQvu% zBg7RaZxEE4yj043@)>c7$$dhylLe&>CI?AC*kwTWZ6JG}biia^Nf50z*+)ie@?{{q zPsVFY0d(^Q=tCc8x?Hn4wA@7zyH&%N0a4(o&Hf~5+Wc;sq?OW|Hd$jE5EQE**m_Zv9z>xyu@%kQM8#O+G3Si!;WbBDq>xz!)a!K!D^}lrZg>7p(5FGQ*p!w zm@2xF%pO0D1gHgFX7*GRT0^lzw1#5{6?H*vK(p5+NAEtW3_Cv4*Qrn)*-=a%K8YJx ziVndoeCOYevx)Pgx9Mn$j6@dlQLC3sTP&Y4tsFT^;*ur7ow2;uR*#g=8i%i6oVPSS zkmQoVJF$~N{w=U53xJG2W7+>eJn*lGU`DzTUC9Ly9R3TU_#%D{9&VtHJfbshpvF3= z)+|TpLdABXfI%&VdF@bmiO=sQt7=(zhRfO@GerEPW#&cN*+=0>rtGqc#2v*&ebiKn z$X}7|fFs*MipZphlukrF6p=#b3)vLcdUdBpaeR(UE3Fgo8GU>dXOdTFTOQb-*nasNHK41^FR5kw6(;Y7-2s{*>ZhHp{}@Cxwy1*cat>LdQ_OvzvQ1tF@1_ryl`e+H@ApRJ;4|CYm zCvhdW4NCYuw+03-=NoX2dZ+NRu0xre1&gH9cy!BFxJqsxek6CJ)3>`&gq!51aHXI_ S)%#L-4^m8pXv}MkPr_do!P#d3 delta 813 zcmbu6OK1~O6o%*A$vpB-CS{T|NvW+VNt#4K?V=mO7F;N}QSea`l~i%!a_dEam(J%Gz zu5dUY(DU=^qx!%~xE3F|O{*5P1se=#2^}`U9MSPD2n%q6HK4)fRjROYp$U#;iEW=P zw!n~ZC7#(MQ$?Xy?J&ddC|1B$tYDLwQw_mUXH+^h)FDUTFm*<3pAq#sR9m(cBifNV z0D{fyF-&Ub!NKSL5qzahCFkf;XBder6ys)u%t!I`aRUz~ip(tFTp|Z~yp}koXjBrI zhGI|tKS*}|D+&BX62qX@!1u|1SnLvHm*`$y0?i{Z57U-;gam7eLHv;F!M%FW`cV+_iZ`9KlaP1RU84+Oid* zAWRBE@q!3b5DE=CVnI8)(e3ppw$GO7q>U)}A2D9Vi^+3v6MrP{R&M ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',3,23) + yacc.py: 435:Stack : class type inherits type ocur id opar epsilon . LexToken(cpar,')',3,35) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',3,23) + yacc.py: 435:Stack : class type inherits type ocur id opar param_list_empty . LexToken(cpar,')',3,35) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 - yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',3,23) + yacc.py: 435:Stack : class type inherits type ocur id opar formals . LexToken(cpar,')',3,35) yacc.py: 445:Action : Shift and goto state 64 yacc.py: 410: yacc.py: 411:State : 64 - yacc.py: 435:Stack : class type ocur id opar formals cpar . LexToken(colon,':',3,24) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar . LexToken(colon,':',3,36) yacc.py: 445:Action : Shift and goto state 100 yacc.py: 410: yacc.py: 411:State : 100 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon . LexToken(type,'Int',3,26) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon . LexToken(type,'Object',3,38) yacc.py: 445:Action : Shift and goto state 138 yacc.py: 410: yacc.py: 411:State : 138 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type . LexToken(ocur,'{',3,30) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type . LexToken(ocur,'{',3,45) yacc.py: 445:Action : Shift and goto state 181 yacc.py: 410: yacc.py: 411:State : 181 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur . LexToken(num,1.0,4,40) - yacc.py: 445:Action : Shift and goto state 88 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur . LexToken(id,'out_string',4,55) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id . LexToken(opar,'(',4,65) + yacc.py: 445:Action : Shift and goto state 113 yacc.py: 410: - yacc.py: 411:State : 88 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur num . LexToken(plus,'+',4,42) - yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( string] with ['HI'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id opar factor dot id opar epsilon . LexToken(cpar,')',4,81) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id opar factor dot id opar arg_list_empty . LexToken(cpar,')',4,81) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id opar factor dot id opar args . LexToken(cpar,')',4,81) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id opar factor dot id opar args cpar . LexToken(cpar,')',4,82) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['type_name','(',[],')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'type_name',4,71), [])) + yacc.py: 410: + yacc.py: 411:State : 167 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id opar factor dot func_call . LexToken(cpar,')',4,82) + yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ atom] with [] and goto state 77 - yacc.py: 506:Result : ( id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',4,55), [ func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : class type ocur def_func semi epsilon . LexToken(ccur,'}',6,53) + yacc.py: 435:Stack : class type inherits type ocur def_func semi epsilon . LexToken(ccur,'}',6,91) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : class type ocur def_func semi feature_list . LexToken(ccur,'}',6,53) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 14 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 53 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','Main','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 2 - yacc.py: 506:Result : ([ def_class] with [] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( ( Date: Tue, 24 Nov 2020 22:29:51 -0700 Subject: [PATCH 44/60] Changing errors names --- src/codegen/__init__.py | 10 +- .../__pycache__/__init__.cpython-37.pyc | Bin 978 -> 1003 bytes .../__pycache__/cil_ast.cpython-37.pyc | Bin 13273 -> 13273 bytes .../base_cil_visitor.cpython-37.pyc | Bin 7783 -> 7783 bytes .../cil_format_visitor.cpython-37.pyc | Bin 8470 -> 8470 bytes .../__pycache__/cil_visitor.cpython-37.pyc | Bin 12292 -> 12292 bytes src/cool_parser/output_parser/parselog.txt | 186 ++++++++---------- src/coolc.sh | 8 +- src/main.py | 10 +- src/semantic/semantic.py | 60 +++--- src/semantic/tools.py | 2 +- src/semantic/types.py | 16 +- src/semantic/visitors/type_builder.py | 39 ++-- src/semantic/visitors/type_checker.py | 118 +++++++---- src/semantic/visitors/type_collector.py | 5 +- src/semantic/visitors/var_collector.py | 25 ++- src/utils/__init__.py | 2 +- src/utils/errors.py | 52 +++-- src/utils/utils.py | 3 + tests/utils/utils.py | 2 + 20 files changed, 313 insertions(+), 225 deletions(-) diff --git a/src/codegen/__init__.py b/src/codegen/__init__.py index 2bf3bfe7..e4f4e590 100644 --- a/src/codegen/__init__.py +++ b/src/codegen/__init__.py @@ -3,12 +3,14 @@ from codegen.visitors.mips_visitor import CILToMIPSVistor -def codegen_pipeline(context, ast, scope): - print('============= TRANSFORMING TO CIL =============') +def codegen_pipeline(context, ast, scope, debug=False): + if debug: + print('============= TRANSFORMING TO CIL =============') cool_to_cil = COOLToCILVisitor(context) cil_ast = cool_to_cil.visit(ast, scope) - formatter = get_formatter() - print(formatter(cil_ast)) + if debug: + formatter = get_formatter() + print(formatter(cil_ast)) data_code, text_code = CILToMIPSVistor().visit(cil_ast) save_code(data_code, text_code) return ast, context, scope, cil_ast diff --git a/src/codegen/__pycache__/__init__.cpython-37.pyc b/src/codegen/__pycache__/__init__.cpython-37.pyc index 7fb1f8f089c931e9dbbac2505c17379941912907..1858c7c56eaaa2dff39b57b20704ce63b57178c2 100644 GIT binary patch delta 274 zcmcb_{+eCgiI)TAYlw5Du%@uJFh;SZu%~de zFhsGZa0WAIa!*XLt#?aif$HG|(jc}oNLvh$s9`SRDPc%qY-VI+C}FH&XlATssbN{b zRKr-qw2-Nm6)103!raVI%T~fr!&bxE3{lC_%m7rwx{xu3sg}K#qlC4Fy@sQiiID-Q zkD&%Alg0wHoXM|B-`3W4vN&TnBj@CNMp4mQtSPBUrRh=J$@%#?@g@23$(cD(lP58* n;}-!shJlfVkpl>M7+EHJGaX?Rnk>L9&cx_8S&exW6BiEvW>z>I delta 292 zcmYjLy-EW?5T4ne+chy@Bhg-nVqt3&6z#9kDhNl|O+W~)cw30SN|MNo+$kOl%x=7Mgr^66y!56v-_2f9tI1KM2&9T^K!h`hZ~+px*osn%OLIz!+&~=GlFEYA ziXwNAVUu(CL)ajSCm-VvH8TNeaRsSjNv$X-Dgv9yj?K&>50FxC5a9_lDU;E8@@|1k zjNX&`1dG^wLBh^p*GdW%vN8rt?iRP?iek$v%}q)zD)QTWPQ0Fx(SNg_WIuB_*iMi| zMdl#F5=7X62zwCW03w_~gdm9E01=r$;uecveoAVQ7lIZ!}&^CPacjEuK7 zPvBu?Vzi$;jjxK)bh047gn>CwuO>&4B9JPw2NCWd!UIU$Vk=55F3l+^@&a*KODYRe zD~h~9hE2}l4`G8So_vfy)XWs5#S^58CAFfUs0eH(J2o?md_YS5L4+^Rq)bNl$-4zE zG5SyL6D(p21PQx?T`MV6$jTTpxm(lRyHX>L+#QBlz5bK>=kjKQ1zB>S1e!FGZy zDzX9*HXy5ca{6Ksm5D@?(_(4Q0h^U!tC?`JI NTlOGh-eg|6C;$&MRNMdn diff --git a/src/codegen/visitors/__pycache__/cil_format_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/cil_format_visitor.cpython-37.pyc index fc68855583f6a8980cc30ebd816b88a82461501a..5f181f5bb165e484533b3acbbd43fb42f7c17fb1 100644 GIT binary patch delta 20 acmbQ{G|h?IiIh($ delta 19 YcmZokXi4C5;^pOH00J-7ja ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type inherits type ocur id opar epsilon . LexToken(cpar,')',3,35) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type inherits type ocur id opar param_list_empty . LexToken(cpar,')',3,35) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type inherits type ocur id opar formals . LexToken(cpar,')',3,35) @@ -6193,193 +6193,175 @@ yacc.py: 445:Action : Shift and goto state 113 yacc.py: 410: yacc.py: 411:State : 113 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id opar . LexToken(string,'HI',4,69) - yacc.py: 445:Action : Shift and goto state 93 - yacc.py: 410: - yacc.py: 411:State : 93 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id opar string . LexToken(dot,'.',4,70) - yacc.py: 471:Action : Reduce rule [atom -> string] with ['HI'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id opar factor dot id opar epsilon . LexToken(cpar,')',4,81) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id opar id opar epsilon . LexToken(cpar,')',4,76) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id opar factor dot id opar arg_list_empty . LexToken(cpar,')',4,81) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id opar id opar arg_list_empty . LexToken(cpar,')',4,76) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id opar factor dot id opar args . LexToken(cpar,')',4,81) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id opar id opar args . LexToken(cpar,')',4,76) yacc.py: 445:Action : Shift and goto state 191 yacc.py: 410: yacc.py: 411:State : 191 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id opar factor dot id opar args cpar . LexToken(cpar,')',4,82) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['type_name','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'type_name',4,71), [])) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id opar id opar args cpar . LexToken(cpar,')',4,77) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['type_name','(',[],')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'type_name',4,66), [])) yacc.py: 410: - yacc.py: 411:State : 167 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id opar factor dot func_call . LexToken(cpar,')',4,82) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',4,55), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',4,55), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : class type inherits type ocur def_func semi epsilon . LexToken(ccur,'}',6,91) + yacc.py: 435:Stack : class type inherits type ocur def_func semi epsilon . LexToken(ccur,'}',6,86) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : class type inherits type ocur def_func semi feature_list . LexToken(ccur,'}',6,91) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 53 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 2 - yacc.py: 506:Result : ([ def_class] with [] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( ( Type: if name in self.types: - error_text = TypesError.TYPE_ALREADY_DEFINED % name + error_text = TypesError.TYPE_ALREADY_DEFINED raise TypesError(error_text, *pos) typex = self.types[name] = Type(name, pos) return typex diff --git a/src/semantic/types.py b/src/semantic/types.py index 73135431..0ec57f5d 100644 --- a/src/semantic/types.py +++ b/src/semantic/types.py @@ -67,14 +67,22 @@ def get_attribute(self, name:str, pos) -> Attribute: raise AttributesError(error_text, *pos) def define_attribute(self, name:str, typex, pos): + if name == 'self': + raise SemanticError(SemanticError.SELF_ATTR, *pos) try: - self.get_attribute(name, pos) - except AttributesError: + self.attributes[name] + except KeyError: + try: + self.get_attribute(name, pos) + except SemanticError: + error_text = AttributesError.ATTR_DEFINED_PARENT % name + raise AttributesError(error_text, *pos) + self.attributes[name] = attribute = Attribute(name, typex, len(self.attributes)) # self.attributes.append(attribute) return attribute else: - error_text = AttributesError.ATTRIBUTE_ALREADY_DEFINED %(name, self.name) + error_text = AttributesError.ATTRIBUTE_ALREADY_DEFINED % name raise AttributesError(error_text, *pos) def get_method(self, name:str, pos) -> Method: @@ -91,7 +99,7 @@ def get_method(self, name:str, pos) -> Method: def define_method(self, name:str, param_names:list, param_types:list, return_type): if name in self.methods: - error_text = AttributesError.METHOD_ALREADY_DEFINED % (name, self.name) + error_text = AttributesError.METHOD_ALREADY_DEFINED % name raise AttributesError(error_text, *pos) method = self.methods[name] = Method(name, param_names, param_types, return_type) diff --git a/src/semantic/visitors/type_builder.py b/src/semantic/visitors/type_builder.py index 81c2eaa2..3178b9a7 100644 --- a/src/semantic/visitors/type_builder.py +++ b/src/semantic/visitors/type_builder.py @@ -1,7 +1,7 @@ from utils.errors import SemanticError, AttributesError, TypesError, NamesError from semantic.types import Type, VoidType, ErrorType, Attribute, Method from semantic.tools import Context -from utils import visitor +from utils import visitor, is_basic_type from utils.ast import * class TypeBuilder: @@ -27,13 +27,22 @@ def visit(self, node:ClassDeclarationNode): self.current_type = ErrorType() self.errors.append(e) + if node.parent is not None: + if node.parent in ['Int', 'Bool', 'String']: + error_text = SemanticError.INHERIT_ERROR % (node.id, node.parent) + self.errors.append(SemanticError(error_text, *node.parent_pos)) try: parent = self.context.get_type(node.parent, node.parent_pos) + except SemanticError: + error_text = TypesError.INHERIT_UNDEFINED % (node.id, node.parent) + self.errors.append(TypesError(error_text, *node.parent_pos)) + parent = None + try: current = parent while current is not None: if current.name == self.current_type.name: - error_text = TypesError.CIRCULAR_DEPENDENCY %(parent.name, self.current_type.name) + error_text = TypesError.CIRCULAR_DEPENDENCY %(self.current_type.name, self.current_type.name) raise TypesError(error_text, *node.pos) current = current.parent except SemanticError as e: @@ -50,18 +59,25 @@ def visit(self, node:FuncDeclarationNode): args_names = [] args_types = [] for name, type_ in node.params: + if name in args_names: + error_text = TypesError.PARAMETER_MULTY_DEFINED % name + self.errors.append(TypesError(error_text, *name.pos)) + args_names.append(name) + try: - args_names.append(name) - args_types.append(self.context.get_type(type_.value, type_.pos)) - except SemanticError as e: - args_types.append(ErrorType(type_.pos)) - self.errors.append(e) - + arg_type = self.context.get_type(type_.value, type_.pos) + except SemanticError: + error_text = TypesError.PARAMETER_UNDEFINED % type_.value + self.errors.append(TypesError(error_text, *type_.pos)) + arg_type = ErrorType() + args_types.append(arg_type) + try: return_type = self.context.get_type(node.type, node.type_pos) except SemanticError as e: + error_text = TypesError.RETURN_TYPE_UNDEFINED % (node.type, node.id) + self.errors.append(TypesError(error_text, *node.type_pos)) return_type = ErrorType(node.type_pos) - self.errors.append(e) try: self.current_type.define_method(node.id, args_names, args_types, return_type) @@ -73,10 +89,11 @@ def visit(self, node:AttrDeclarationNode): try: attr_type = self.context.get_type(node.type, node.pos) except SemanticError as e: + error_text = TypesError.ATTR_TYPE_UNDEFINED %(node.type, node.id) attr_type = ErrorType(node.type_pos) - self.errors.append(e) + self.errors.append(TypesError(error_text, *node.type_pos)) try: self.current_type.define_attribute(node.id, attr_type, node.pos) except SemanticError as e: - self.errors.append(e) \ No newline at end of file + self.errors.append(e) \ No newline at end of file diff --git a/src/semantic/visitors/type_checker.py b/src/semantic/visitors/type_checker.py index fb249ef0..79e8a8ca 100644 --- a/src/semantic/visitors/type_checker.py +++ b/src/semantic/visitors/type_checker.py @@ -36,9 +36,10 @@ def _get_method(self, typex:Type, name:str, pos) -> Method: return typex.get_method(name, pos) except SemanticError as e: if type(typex) != ErrorType and type(typex) != AutoType: - self.errors.append(e) + error_text = AttributesError.DISPATCH_UNDEFINED % name + self.errors.append(AttributesError(error_text, *pos)) return MethodError(name, [], [], ErrorType()) - + @visitor.when(ClassDeclarationNode) def visit(self, node:ClassDeclarationNode, scope:Scope): @@ -65,7 +66,7 @@ def visit(self, node:AttrDeclarationNode, scope:Scope): self.current_index = None if not typex.conforms_to(vartype): - error_text = TypesError.INCOMPATIBLE_TYPES %(typex.name, vartype.name) + error_text = TypesError.ATTR_TYPE_ERROR %(typex.name, attr.name, vartype.name) self.errors.append(TypesError(error_text, *node.pos)) return ErrorType() return typex @@ -74,17 +75,21 @@ def visit(self, node:AttrDeclarationNode, scope:Scope): @visitor.when(FuncDeclarationNode) def visit(self, node:FuncDeclarationNode, scope:Scope): parent = self.current_type.parent - ptypes = [param[1] for param in node.params] self.current_method = method = self.current_type.get_method(node.id, node.pos) if parent is not None: try: old_meth = parent.get_method(node.id, node.pos) - error_text = AttributesError.WRONG_SIGNATURE % (node.id, parent.name) if old_meth.return_type.name != method.return_type.name: - self.errors.append(AttributesError(error_text, *node.pos)) - elif any(type1.name != type2.name for name, type1, type2 in zip(ptypes, method.param_types, old_meth.param_types)): - self.errors.append(AttributesError(error_text, *node.pos)) + error_text = AttributesError.WRONG_SIGNATURE_RETURN % (node.id, method.return_type.name, old_meth.return_type.name) + self.errors.append(AttributesError(error_text, *node.type_pos)) + if len(method.param_names) != len(old_meth.param_names): + error_text = AttributesError.WRONG_NUMBER_PARAM % node.id + self.errors.append(AttributesError(error_text, *node.pos)) + for name, type1, type2 in zip(method.param_names, method.param_types, old_meth.param_types): + if type1.name != type2.name: + error_text = AttributesError.WRONG_SIGNATURE_PARAMETER % (name, type1.name, type2.name) + self.errors.append(AttributesError(error_text, *name.pos)) except SemanticError: pass @@ -93,7 +98,7 @@ def visit(self, node:FuncDeclarationNode, scope:Scope): return_type = get_type(method.return_type, self.current_type) if not result.conforms_to(return_type): - error_text = TypesError.INCOMPATIBLE_TYPES %(return_type.name, result.name) + error_text = TypesError.RETURN_TYPE_ERROR %(result.name, return_type.name) self.errors.append(TypesError(error_text, *node.type_pos)) @@ -106,7 +111,7 @@ def visit(self, node:VarDeclarationNode, scope:Scope): if node.expr != None: typex = self.visit(node.expr, scope) if not typex.conforms_to(vtype): - error_text = TypesError.INCOMPATIBLE_TYPES %(vtype.name, typex.name) + error_text = TypesError.UNCONFORMS_TYPE %(typex.name, node.id, vtype.name) self.errors.append(TypesError(error_text, *node.type_pos)) return typex return vtype @@ -120,7 +125,7 @@ def visit(self, node:AssignNode, scope:Scope): typex = self.visit(node.expr, scope) if not typex.conforms_to(vtype): - error_text = TypesError.INCOMPATIBLE_TYPES %(vtype.name, typex.name) + error_text = TypesError.UNCONFORMS_TYPE %(typex.name, node.id, vtype.name) self.errors.append(TypesError(error_text, *node.pos)) return typex @@ -129,16 +134,16 @@ def _check_args(self, meth:Method, scope:Scope, args, pos): arg_types = [self.visit(arg, scope) for arg in args] if len(arg_types) > len(meth.param_types): - error_text = SemanticError.TOO_MANY_ARGUMENTS % meth.name + error_text = SemanticError.ARGUMENT_ERROR % meth.name self.errors.append(SemanticError(error_text, *pos)) elif len(arg_types) < len(meth.param_types): for arg, arg_info in zip(meth.param_names[len(arg_types):], args[len(arg_types):]): - error_text = SemanticError.MISSING_PARAMETER % (arg, meth.name) + error_text = SemanticError.ARGUMENT_ERROR % (meth.name) self.errors.append(SemanticError(error_text, *arg_info.pos)) for atype, ptype, arg_info in zip(arg_types, meth.param_types, args): if not atype.conforms_to(ptype): - error_text = TypesError.INCOMPATIBLE_TYPES % (ptype.name, atype.name) + error_text = TypesError.INCOSISTENT_ARG_TYPE % (meth.name, atype.name, arg_info.name, ptype.name) self.errors.append(TypesError(error_text, *arg_info.pos)) @@ -159,7 +164,7 @@ def visit(self, node:BaseCallNode, scope:Scope): typex = self._get_type(node.type, node.type_pos) if not obj.conforms_to(typex): - error_text = TypesError.INCOMPATIBLE_TYPES % (typex.name, obj.name) + error_text = TypesError.INCOMPATIBLE_TYPES_DISPATCH % (typex.name, obj.name) self.errors.append(TypesError(error_text, *node.type_pos)) return ErrorType() @@ -215,7 +220,14 @@ def visit(self, node:VariableNode, scope:Scope): @visitor.when(InstantiateNode) def visit(self, node:InstantiateNode, scope:Scope): - return get_type(self._get_type(node.lex, node.pos), self.current_type) + try: + type_ = self.context.get_type(node.lex, node.pos) + except SemanticError: + type_ = ErrorType() + error_text = TypesError.NEW_UNDEFINED_CLASS % node.lex + self.errors.append(TypesError(error_text, *node.pos)) + + return get_type(type_, self.current_type) @visitor.when(WhileNode) @@ -223,7 +235,7 @@ def visit(self, node:WhileNode, scope:Scope): cond = self.visit(node.cond, scope) if cond.name != 'Bool': - self.errors.append(INCORRECT_TYPE % (cond.name, 'Bool')) + self.errors.append(TypesError(TypesError.LOOP_CONDITION_ERROR, *node.pos)) self.visit(node.expr, scope) return VoidType() @@ -238,7 +250,7 @@ def visit(self, node:ConditionalNode, scope:Scope): cond = self.visit(node.cond, scope) if cond.name != 'Bool': - error_text = TypesError.INCORRECT_TYPE % (cond.name, 'Bool') + error_text = TypesError.PREDICATE_ERROR % ('if', 'Bool') self.errors.append(TypesError(error_text, node.pos)) true_type = self.visit(node.stm, scope) @@ -297,46 +309,72 @@ def visit(self, node:OptionNode, scope:Scope): typex = self.visit(node.expr, scope) return typex, var_info.type - - @visitor.when(BinaryArithNode) - def visit(self, node:BinaryArithNode, scope:Scope): + + def binary_operation(self, node, operator): ltype = self.visit(node.left, scope) rtype = self.visit(node.right, scope) - if ltype != rtype != IntType(): - error_text = TypesError.BOPERATION_NOT_DEFINED %('Arithmetic', ltype.name, rtype.name) + int_type = IntType() + if ltype != int_type or rtype != int_type: + error_text = TypesError.BOPERATION_NOT_DEFINED %(ltype.name, operator, rtype.name) self.errors.append(TypesError(error_text, *node.pos)) return ErrorType() - return IntType() + if opertor == '<' or operator == '<=': + return BoolType() + return int_type + + @visitor.when(PlusNode) + def visit(self, node:PlusNode, scope:Scope): + return self.binary_operation(node, '+') + + @visitor.when(MinusNode) + def visit(self, node:MinusNode, scope:Scope): + return self.binary_operation(node, '-') + + @visitor.when(StarNode) + def visit(self, node:StarNode, scope:Scope): + return self.binary_operation(node, '*') + + @visitor.when(DivNode) + def visit(self, node:DivNode, scope:Scope): + return self.binary_operation(node, '/') + + @visitor.when(LessEqNode) + def visit(self, node:DivNode, scope:Scope): + return self.binary_operation(node, '<=') + + @visitor.when(LessNode) + def visit(self, node:DivNode, scope:Scope): + return self.binary_operation(node, '<') - @visitor.when(BinaryLogicalNode) - def visit(self, node:BinaryLogicalNode, scope:Scope): + @visitor.when(EqualNode) + def visit(self, node:EqualNode, scope:Scope): ltype = self.visit(node.left, scope) rtype = self.visit(node.right, scope) - if ltype != rtype != IntType(): - error_text = TypesError.BOPERATION_NOT_DEFINED %('Logical', ltype.name, rtype.name) + if ltype == rtype and (ltype == IntType() or ltype == StringType() or ltype == BoolType()): + error_text = TypesError.COMPARISON_ERROR self.errors.append(TypesError(error_text, *node.pos)) return ErrorType() - return BoolType() - @visitor.when(UnaryLogicalNode) - def visit(self, node:UnaryLogicalNode, scope:Scope): + @visitor.when(NotNode) + def visit(self, node:NotNode, scope:Scope): ltype = self.visit(node.expr, scope) - if ltype != BoolType(): - error_text = TypesError.UOPERATION_NOT_DEFINED %('Logical', ltype.name) + typex = BoolType() + if ltype != typex: + error_text = TypesError.UOPERATION_NOT_DEFINED %('not', ltype.name, typex.name) self.errors.append(TypesError(error_text, *node.pos)) return ErrorType() - - return BoolType() + return typex - @visitor.when(UnaryArithNode) - def visit(self, node:UnaryArithNode, scope:Scope): + @visitor.when(BinaryNotNode) + def visit(self, node:BinaryNotNode, scope:Scope): ltype = self.visit(node.expr, scope) - if ltype != IntType(): - error_text = TypesError.UOPERATION_NOT_DEFINED %('Arithmetic', ltype.name) + int_type = IntType() + if ltype != int_type: + error_text = TypesError.UOPERATION_NOT_DEFINED %('~', ltype.name, int_type.name) self.errors.append(TypesError(error_text, *node.pos)) return ErrorType() - return IntType() \ No newline at end of file + return int_type \ No newline at end of file diff --git a/src/semantic/visitors/type_collector.py b/src/semantic/visitors/type_collector.py index 164576b0..1f65f418 100644 --- a/src/semantic/visitors/type_collector.py +++ b/src/semantic/visitors/type_collector.py @@ -11,7 +11,7 @@ def __init__(self, errors=[]): @visitor.on('node') def visit(self, node): - pass + pass @visitor.when(ProgramNode) def visit(self, node:ProgramNode): @@ -28,6 +28,9 @@ def visit(self, node:ProgramNode): @visitor.when(ClassDeclarationNode) def visit(self, node:ClassDeclarationNode): + if node.id in ['String', 'Int', 'Object', 'Bool', 'SELF_TYPE', 'IO']: + error = SemanticError.REDEFINITION_ERROR % node.id + self.errors.append(SemanticError(error, *node.pos)) try: self.context.create_type(node.id, node.pos) except SemanticError as e: diff --git a/src/semantic/visitors/var_collector.py b/src/semantic/visitors/var_collector.py index d1526ab9..89da2fe1 100644 --- a/src/semantic/visitors/var_collector.py +++ b/src/semantic/visitors/var_collector.py @@ -85,6 +85,8 @@ def visit(self, node:FuncDeclarationNode, scope:Scope): # Añadir las variables de argumento for pname, ptype in node.params: + if pname == 'self': + self.errors.append(SemanticError.SELF_PARAM, pname.pos) new_scope.define_variable(pname, self._get_type(ptype.value, ptype.pos)) self.visit(node.body, new_scope) @@ -101,7 +103,7 @@ def _get_type(self, ntype, pos): @visitor.when(VarDeclarationNode) def visit(self, node:VarDeclarationNode, scope:Scope): if node.id == 'self': - error_text = SemanticError.SELF_IS_READONLY + error_text = SemanticError.SELF_IN_LET self.errors.append(SemanticError(error_text, *node.pos)) return @@ -112,6 +114,13 @@ def visit(self, node:VarDeclarationNode, scope:Scope): self.errors.append(SemanticError(error_text, *node.pos)) return + try: + vtype = self.context.get_type(node.type, node.pos) + except SemanticError: + error_text = TypesError.UNDEFINED_TYPE_LET % (node.type, node.id) + self.errors.append(TypesError(error_text, *node.type_pos)) + vtype = ErrorType() + vtype = self._get_type(node.type, node.type_pos) var_info = scope.define_variable(node.id, vtype) @@ -130,7 +139,7 @@ def visit(self, node:AssignNode, scope:Scope): vinfo = scope.find_variable(node.id) if vinfo is None: - error_text = NamesError.VARIABLE_NOT_DEFINED %(node.id, self.current_method.name) + error_text = NamesError.VARIABLE_NOT_DEFINED %(node.id) self.errors.append(NamesError(error_text, *node.pos)) vtype = ErrorType() scope.define_variable(node.id, vtype) @@ -160,7 +169,7 @@ def visit(self, node:BinaryNode, scope:Scope): self.visit(node.left, scope) self.visit(node.right, scope) - + @visitor.when(UnaryNode) def visit(self, node:UnaryNode, scope:Scope): self.visit(node.expr, scope) @@ -172,7 +181,7 @@ def visit(self, node:VariableNode, scope:Scope): return self.current_type.get_attribute(node.lex, node.pos).type except AttributesError: if not scope.is_defined(node.lex): - error_text = NamesError.VARIABLE_NOT_DEFINED %(node.lex, self.current_method.name) + error_text = NamesError.VARIABLE_NOT_DEFINED %(node.lex) self.errors.append(NamesError(error_text, *node.pos)) vinfo = scope.define_variable(node.lex, ErrorType(node.pos)) else: @@ -229,8 +238,12 @@ def visit(self, node:CaseNode, scope:Scope): @visitor.when(OptionNode) def visit(self, node:OptionNode, scope:Scope): - typex = self.context.get_type(node.typex, node.type_pos) - + try: + typex = self.context.get_type(node.typex, node.type_pos) + except TypesError: + error_txt = TypesError.CLASS_CASE_BRANCH_UNDEFINED % node.typex + self.errors.append(TypesError(error_txt, *node.type_pos)) + self.visit(node.expr, scope) scope.define_variable(node.id, typex) diff --git a/src/utils/__init__.py b/src/utils/__init__.py index c7320825..172e19fb 100644 --- a/src/utils/__init__.py +++ b/src/utils/__init__.py @@ -1 +1 @@ -from utils.utils import get_common_basetype, get_type, find_column, path_to_objet \ No newline at end of file +from utils.utils import get_common_basetype, get_type, find_column, path_to_objet, is_basic_type \ No newline at end of file diff --git a/src/utils/errors.py b/src/utils/errors.py index 66cd9c6d..c74babca 100644 --- a/src/utils/errors.py +++ b/src/utils/errors.py @@ -56,11 +56,17 @@ def error_type(self): class SemanticError(CoolError): 'Otros errores semanticos' - SELF_IS_READONLY = 'Variable "self" is read-only.' + SELF_IS_READONLY = 'Cannot assign to \'self\'.' + SELF_IN_LET = '\'self\' cannot be bound in a \'let\' expression.' + SELF_PARAM = "'self' cannot be the name of a formal parameter." + SELF_ATTR = "'self' cannot be the name of an attribute." + LOCAL_ALREADY_DEFINED = 'Variable "%s" is already defined in method "%s".' - MISSING_PARAMETER = 'Missing argument "%s" in function call "%s"' - TOO_MANY_ARGUMENTS = 'Too many arguments for function call "%s"' + ARGUMENT_ERROR = 'Method %s called with wrong number of arguments.' + REDEFINITION_ERROR = 'Redefinition of basic class %s' + INHERIT_ERROR = 'Class %s cannot inherit class %s.' + @property def error_type(self): return 'SemanticError' @@ -69,8 +75,7 @@ def error_type(self): class NamesError(SemanticError): 'Se reporta al referenciar a un identificador en un ambito en el que no es visible' - USED_BEFORE_ASSIGNMENT = 'Variable "%s" used before being assigned' - VARIABLE_NOT_DEFINED = 'Variable "%s" is not defined in "%s".' + VARIABLE_NOT_DEFINED = 'Undeclared identifier %s.' @property def error_type(self): @@ -80,15 +85,30 @@ def error_type(self): class TypesError(SemanticError): 'Se reporta al detectar un problema de tipos' - INVALID_OPERATION = 'Operation is not defined between "%s" and "%s".' INCOMPATIBLE_TYPES = 'Cannot convert "%s" into "%s".' - INCORRECT_TYPE = 'Incorrect type "%s" waiting "%s"' - BOPERATION_NOT_DEFINED = '%s operations are not defined between "%s" and "%s"' - UOPERATION_NOT_DEFINED = '%s operations are not defined for "%s"' - CIRCULAR_DEPENDENCY = 'Circular dependency between %s and %s' + + ATTR_TYPE_ERROR = 'Inferred type %s of initialization of attribute %s does not conform to declared type %s.' + ATTR_TYPE_UNDEFINED = 'Class %s of attribute %s is undefined.' + BOPERATION_NOT_DEFINED = 'non-Int arguments: %s %s %s.' + COMPARISON_ERROR = 'Illegal comparison with a basic type.' + UOPERATION_NOT_DEFINED = 'Argument of \'%s\' has type %s instead of %s.' + CLASS_CASE_BRANCH_UNDEFINED = 'Class %s of case branch is undefined.' + TYPE_ALREADY_DEFINED = 'Classes may not be redefined.' + PREDICATE_ERROR = 'Predicate of \'%s\' ddoes not have type %s.' + INCOSISTENT_ARG_TYPE = 'In call of method %s, type %s of parameter %s does not conform to declared type %s.' + INCOMPATIBLE_TYPES_DISPATCH = 'Expression type %s does not conform to declared static dispatch type %s.' + INHERIT_UNDEFINED = 'Class %s inherits from an undefined class %s.' + CIRCULAR_DEPENDENCY = 'Class %s, or an ancestor of %s, is involved in an inheritance cycle.' + UNCONFORMS_TYPE = 'Inferred type %s of initialization of %s does not conform to identifier\'s declared type %s.' + UNDEFINED_TYPE_LET = 'Class %s of let-bound identifier %s is undefined.' + LOOP_CONDITION_ERROR = 'Loop condition does not have type Bool.' + PARAMETER_MULTY_DEFINED = 'Formal parameter %s is multiply defined.' + RETURN_TYPE_ERROR = 'Inferred return type %s of method test does not conform to declared return type %s.' + PARAMETER_UNDEFINED = 'Class %s of formal parameter %s is undefined.' + RETURN_TYPE_UNDEFINED = 'Undefined return type %s in method %s.' + NEW_UNDEFINED_CLASS = '\'new\' used with undefined class %s.' PARENT_ALREADY_DEFINED = 'Parent type is already set for "%s"' - TYPE_ALREADY_DEFINED = 'Type with the same name (%s) already in context.' TYPE_NOT_DEFINED = 'Type "%s" is not defined.' @property @@ -99,11 +119,15 @@ def error_type(self): class AttributesError(SemanticError): 'Se reporta cuando un atributo o método se referencia pero no está definido' - WRONG_SIGNATURE = 'Method "%s" already defined in "%s" with a different signature.' + DISPATCH_UNDEFINED = 'Dispatch to undefined method %s.' + METHOD_ALREADY_DEFINED = 'Method "%s" is multiply defined.' + ATTRIBUTE_ALREADY_DEFINED = 'Attribute "%s" is multiply defined in class.' + ATTR_DEFINED_PARENT = 'Attribute %s is an attribute of an inherited class.' + WRONG_SIGNATURE_PARAMETER = 'In redefined method %s, parameter type %s is different from original type %s.' + WRONG_SIGNATURE_RETURN = 'In redefined method %s, return type %s is different from original return type %s.' + WRONG_NUMBER_PARAM = 'Incompatible number of formal parameters in redefined method %s.' - METHOD_ALREADY_DEFINED = 'Method "%s" is already defined in class "%s"' METHOD_NOT_DEFINED = 'Method "%s" is not defined in "%s"' - ATTRIBUTE_ALREADY_DEFINED = 'Attribute "%s" is already defined in %s' ATTRIBUTE_NOT_DEFINED = 'Attribute "%s" is not defined in %s' @property diff --git a/src/utils/utils.py b/src/utils/utils.py index a963c217..6aca4e6e 100644 --- a/src/utils/utils.py +++ b/src/utils/utils.py @@ -33,3 +33,6 @@ def get_common_basetype(types): def get_type(typex: Type, current_type: Type) -> Type: return current_type if typex == SelfType() else typex + +def is_basic_type(type_name:str): + return type_name in ['String', 'Int', 'Object', 'Bool', 'SELF_TYPE', 'IO'] \ No newline at end of file diff --git a/tests/utils/utils.py b/tests/utils/utils.py index 961cf7cb..ad6c8a7c 100644 --- a/tests/utils/utils.py +++ b/tests/utils/utils.py @@ -67,6 +67,8 @@ def compare_errors(compiler_path: str, cool_file_path: str, error_file_path: str (?:Loaded: .+\n)*''' def compare_outputs(compiler_path: str, cool_file_path: str, input_file_path: str, output_file_path: str, timeout=100): try: + print(compiler_path) + print(cool_file_path) sp = subprocess.run(['bash', compiler_path, cool_file_path], capture_output=True, timeout=timeout) assert sp.returncode == 0, TEST_MUST_COMPILE % get_file_name(cool_file_path) except subprocess.TimeoutExpired: From 9b70b3d0a5bdfa7a0da58bbfad379ad08d6397ab Mon Sep 17 00:00:00 2001 From: Loraine Monteagudo Date: Wed, 25 Nov 2020 01:43:25 -0700 Subject: [PATCH 45/60] All semantic tests passed ^^. Probably should check column position for error report --- src/arithmetic1.cl | 19 + .../__pycache__/__init__.cpython-37.pyc | Bin 1003 -> 1003 bytes .../__pycache__/cil_ast.cpython-37.pyc | Bin 13273 -> 13273 bytes .../base_cil_visitor.cpython-37.pyc | Bin 7783 -> 7783 bytes .../cil_format_visitor.cpython-37.pyc | Bin 8470 -> 8470 bytes .../__pycache__/cil_visitor.cpython-37.pyc | Bin 12292 -> 12296 bytes src/codegen/visitors/cil_visitor.py | 2 +- .../__pycache__/__init__.cpython-37.pyc | Bin 245 -> 245 bytes .../__pycache__/base_parser.cpython-37.pyc | Bin 1062 -> 1062 bytes .../__pycache__/logger.cpython-37.pyc | Bin 442 -> 442 bytes .../__pycache__/parser.cpython-37.pyc | Bin 14145 -> 14145 bytes src/cool_parser/output_parser/parselog.txt | 2453 ----------------- src/coolc.sh | 26 +- src/main.py | 7 +- src/semantic/tools.py | 9 +- src/semantic/types.py | 24 +- src/semantic/visitors/type_builder.py | 15 +- src/semantic/visitors/type_checker.py | 95 +- src/semantic/visitors/var_collector.py | 22 +- src/utils/__pycache__/visitor.cpython-37.pyc | Bin 2359 -> 2359 bytes src/utils/errors.py | 29 +- 21 files changed, 147 insertions(+), 2554 deletions(-) create mode 100644 src/arithmetic1.cl diff --git a/src/arithmetic1.cl b/src/arithmetic1.cl new file mode 100644 index 00000000..5b1f7e9d --- /dev/null +++ b/src/arithmetic1.cl @@ -0,0 +1,19 @@ +(* +No method name may be defined multiple times in +a class, and no attribute name may be defined multiple times in a class, but a method and an attribute +may have the same name. +*) + +class Main inherits IO { + main(): IO { out_string("hi!") }; + + main: IO <- out_string("bye!"); +}; + +class A { + x: Int <- 3; + + x(): String { "3" }; + + x(): String { ":)" }; +}; \ No newline at end of file diff --git a/src/codegen/__pycache__/__init__.cpython-37.pyc b/src/codegen/__pycache__/__init__.cpython-37.pyc index 1858c7c56eaaa2dff39b57b20704ce63b57178c2..2b523cd3e3d219d75f2e04481f1e7f6aa15dd569 100644 GIT binary patch delta 19 ZcmaFO{+gZ3iI1h`{L(r delta 19 Zcmey$_?3~{iIn={_5@%6 delta 20 acmZ3+v5bS;iIuxdTuD diff --git a/src/cool_parser/__pycache__/logger.cpython-37.pyc b/src/cool_parser/__pycache__/logger.cpython-37.pyc index 298889ee8051620aebc2f79ce321c8bf71049a2a..090b0eca62f7274ba7581ac99c22d35b2bbda526 100644 GIT binary patch delta 20 acmdnRyo;IJiI comp less op .) yacc.py:2687: equal reduce using rule 47 (comp -> comp less op .) yacc.py:2687: semi reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: cpar reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: arroba reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: dot reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: star reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: div reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: of reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: then reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: loop reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: comma reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: in reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: else reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: pool reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: ccur reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: fi reduce using rule 47 (comp -> comp less op .) - yacc.py:2687: plus shift and go to state 117 - yacc.py:2687: minus shift and go to state 118 - yacc.py:2689: - yacc.py:2696: ! plus [ reduce using rule 47 (comp -> comp less op .) ] - yacc.py:2696: ! minus [ reduce using rule 47 (comp -> comp less op .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 157 - yacc.py:2563: - yacc.py:2565: (48) comp -> comp lesseq op . - yacc.py:2565: (51) op -> op . plus term - yacc.py:2565: (52) op -> op . minus term - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for plus resolved as shift - yacc.py:2666: ! shift/reduce conflict for minus resolved as shift - yacc.py:2687: less reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: lesseq reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: equal reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: semi reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: cpar reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: arroba reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: dot reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: star reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: div reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: of reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: then reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: loop reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: comma reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: in reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: else reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: pool reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: ccur reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: fi reduce using rule 48 (comp -> comp lesseq op .) - yacc.py:2687: plus shift and go to state 117 - yacc.py:2687: minus shift and go to state 118 - yacc.py:2689: - yacc.py:2696: ! plus [ reduce using rule 48 (comp -> comp lesseq op .) ] - yacc.py:2696: ! minus [ reduce using rule 48 (comp -> comp lesseq op .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 158 - yacc.py:2563: - yacc.py:2565: (49) comp -> comp equal op . - yacc.py:2565: (51) op -> op . plus term - yacc.py:2565: (52) op -> op . minus term - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for plus resolved as shift - yacc.py:2666: ! shift/reduce conflict for minus resolved as shift - yacc.py:2687: less reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: lesseq reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: equal reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: semi reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: cpar reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: arroba reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: dot reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: star reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: div reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: of reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: then reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: loop reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: comma reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: in reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: else reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: pool reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: ccur reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: fi reduce using rule 49 (comp -> comp equal op .) - yacc.py:2687: plus shift and go to state 117 - yacc.py:2687: minus shift and go to state 118 - yacc.py:2689: - yacc.py:2696: ! plus [ reduce using rule 49 (comp -> comp equal op .) ] - yacc.py:2696: ! minus [ reduce using rule 49 (comp -> comp equal op .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 159 - yacc.py:2563: - yacc.py:2565: (51) op -> op plus term . - yacc.py:2565: (54) term -> term . star base_call - yacc.py:2565: (55) term -> term . div base_call - yacc.py:2565: (57) term -> term . star error - yacc.py:2565: (58) term -> term . div error - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for star resolved as shift - yacc.py:2666: ! shift/reduce conflict for div resolved as shift - yacc.py:2687: plus reduce using rule 51 (op -> op plus term .) - yacc.py:2687: minus reduce using rule 51 (op -> op plus term .) - yacc.py:2687: less reduce using rule 51 (op -> op plus term .) - yacc.py:2687: lesseq reduce using rule 51 (op -> op plus term .) - yacc.py:2687: equal reduce using rule 51 (op -> op plus term .) - yacc.py:2687: semi reduce using rule 51 (op -> op plus term .) - yacc.py:2687: cpar reduce using rule 51 (op -> op plus term .) - yacc.py:2687: arroba reduce using rule 51 (op -> op plus term .) - yacc.py:2687: dot reduce using rule 51 (op -> op plus term .) - yacc.py:2687: of reduce using rule 51 (op -> op plus term .) - yacc.py:2687: then reduce using rule 51 (op -> op plus term .) - yacc.py:2687: loop reduce using rule 51 (op -> op plus term .) - yacc.py:2687: comma reduce using rule 51 (op -> op plus term .) - yacc.py:2687: in reduce using rule 51 (op -> op plus term .) - yacc.py:2687: else reduce using rule 51 (op -> op plus term .) - yacc.py:2687: pool reduce using rule 51 (op -> op plus term .) - yacc.py:2687: ccur reduce using rule 51 (op -> op plus term .) - yacc.py:2687: fi reduce using rule 51 (op -> op plus term .) - yacc.py:2687: star shift and go to state 119 - yacc.py:2687: div shift and go to state 120 - yacc.py:2689: - yacc.py:2696: ! star [ reduce using rule 51 (op -> op plus term .) ] - yacc.py:2696: ! div [ reduce using rule 51 (op -> op plus term .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 160 - yacc.py:2563: - yacc.py:2565: (52) op -> op minus term . - yacc.py:2565: (54) term -> term . star base_call - yacc.py:2565: (55) term -> term . div base_call - yacc.py:2565: (57) term -> term . star error - yacc.py:2565: (58) term -> term . div error - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for star resolved as shift - yacc.py:2666: ! shift/reduce conflict for div resolved as shift - yacc.py:2687: plus reduce using rule 52 (op -> op minus term .) - yacc.py:2687: minus reduce using rule 52 (op -> op minus term .) - yacc.py:2687: less reduce using rule 52 (op -> op minus term .) - yacc.py:2687: lesseq reduce using rule 52 (op -> op minus term .) - yacc.py:2687: equal reduce using rule 52 (op -> op minus term .) - yacc.py:2687: semi reduce using rule 52 (op -> op minus term .) - yacc.py:2687: cpar reduce using rule 52 (op -> op minus term .) - yacc.py:2687: arroba reduce using rule 52 (op -> op minus term .) - yacc.py:2687: dot reduce using rule 52 (op -> op minus term .) - yacc.py:2687: of reduce using rule 52 (op -> op minus term .) - yacc.py:2687: then reduce using rule 52 (op -> op minus term .) - yacc.py:2687: loop reduce using rule 52 (op -> op minus term .) - yacc.py:2687: comma reduce using rule 52 (op -> op minus term .) - yacc.py:2687: in reduce using rule 52 (op -> op minus term .) - yacc.py:2687: else reduce using rule 52 (op -> op minus term .) - yacc.py:2687: pool reduce using rule 52 (op -> op minus term .) - yacc.py:2687: ccur reduce using rule 52 (op -> op minus term .) - yacc.py:2687: fi reduce using rule 52 (op -> op minus term .) - yacc.py:2687: star shift and go to state 119 - yacc.py:2687: div shift and go to state 120 - yacc.py:2689: - yacc.py:2696: ! star [ reduce using rule 52 (op -> op minus term .) ] - yacc.py:2696: ! div [ reduce using rule 52 (op -> op minus term .) ] - yacc.py:2700: - yacc.py:2561: - yacc.py:2562:state 161 - yacc.py:2563: - yacc.py:2565: (54) term -> term star base_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: div reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: plus reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: minus reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: less reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: lesseq reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: equal reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: semi reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: cpar reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: arroba reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: dot reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: of reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: then reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: loop reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: comma reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: in reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: else reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: pool reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: ccur reduce using rule 54 (term -> term star base_call .) - yacc.py:2687: fi reduce using rule 54 (term -> term star base_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 162 - yacc.py:2563: - yacc.py:2565: (57) term -> term star error . - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift - yacc.py:2687: star reduce using rule 57 (term -> term star error .) - yacc.py:2687: div reduce using rule 57 (term -> term star error .) - yacc.py:2687: plus reduce using rule 57 (term -> term star error .) - yacc.py:2687: minus reduce using rule 57 (term -> term star error .) - yacc.py:2687: less reduce using rule 57 (term -> term star error .) - yacc.py:2687: lesseq reduce using rule 57 (term -> term star error .) - yacc.py:2687: equal reduce using rule 57 (term -> term star error .) - yacc.py:2687: semi reduce using rule 57 (term -> term star error .) - yacc.py:2687: cpar reduce using rule 57 (term -> term star error .) - yacc.py:2687: dot reduce using rule 57 (term -> term star error .) - yacc.py:2687: of reduce using rule 57 (term -> term star error .) - yacc.py:2687: then reduce using rule 57 (term -> term star error .) - yacc.py:2687: loop reduce using rule 57 (term -> term star error .) - yacc.py:2687: comma reduce using rule 57 (term -> term star error .) - yacc.py:2687: in reduce using rule 57 (term -> term star error .) - yacc.py:2687: else reduce using rule 57 (term -> term star error .) - yacc.py:2687: pool reduce using rule 57 (term -> term star error .) - yacc.py:2687: ccur reduce using rule 57 (term -> term star error .) - yacc.py:2687: fi reduce using rule 57 (term -> term star error .) - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2696: ! arroba [ reduce using rule 57 (term -> term star error .) ] - yacc.py:2700: - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 163 - yacc.py:2563: - yacc.py:2565: (55) term -> term div base_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: div reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: plus reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: minus reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: less reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: lesseq reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: equal reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: semi reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: cpar reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: arroba reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: dot reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: of reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: then reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: loop reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: comma reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: in reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: else reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: pool reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: ccur reduce using rule 55 (term -> term div base_call .) - yacc.py:2687: fi reduce using rule 55 (term -> term div base_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 164 - yacc.py:2563: - yacc.py:2565: (58) term -> term div error . - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift - yacc.py:2687: star reduce using rule 58 (term -> term div error .) - yacc.py:2687: div reduce using rule 58 (term -> term div error .) - yacc.py:2687: plus reduce using rule 58 (term -> term div error .) - yacc.py:2687: minus reduce using rule 58 (term -> term div error .) - yacc.py:2687: less reduce using rule 58 (term -> term div error .) - yacc.py:2687: lesseq reduce using rule 58 (term -> term div error .) - yacc.py:2687: equal reduce using rule 58 (term -> term div error .) - yacc.py:2687: semi reduce using rule 58 (term -> term div error .) - yacc.py:2687: cpar reduce using rule 58 (term -> term div error .) - yacc.py:2687: dot reduce using rule 58 (term -> term div error .) - yacc.py:2687: of reduce using rule 58 (term -> term div error .) - yacc.py:2687: then reduce using rule 58 (term -> term div error .) - yacc.py:2687: loop reduce using rule 58 (term -> term div error .) - yacc.py:2687: comma reduce using rule 58 (term -> term div error .) - yacc.py:2687: in reduce using rule 58 (term -> term div error .) - yacc.py:2687: else reduce using rule 58 (term -> term div error .) - yacc.py:2687: pool reduce using rule 58 (term -> term div error .) - yacc.py:2687: ccur reduce using rule 58 (term -> term div error .) - yacc.py:2687: fi reduce using rule 58 (term -> term div error .) - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2696: ! arroba [ reduce using rule 58 (term -> term div error .) ] - yacc.py:2700: - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 165 - yacc.py:2563: - yacc.py:2565: (59) base_call -> factor arroba type . dot func_call - yacc.py:2566: - yacc.py:2687: dot shift and go to state 193 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 166 - yacc.py:2563: - yacc.py:2565: (62) base_call -> factor arroba error . dot func_call - yacc.py:2566: - yacc.py:2687: dot shift and go to state 194 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 167 - yacc.py:2563: - yacc.py:2565: (65) factor -> factor dot func_call . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: dot reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: star reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: div reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: plus reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: minus reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: less reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: lesseq reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: equal reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: semi reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: cpar reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: of reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: then reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: loop reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: comma reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: in reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: else reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: pool reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: ccur reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2687: fi reduce using rule 65 (factor -> factor dot func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 168 - yacc.py:2563: - yacc.py:2565: (88) func_call -> id . opar args cpar - yacc.py:2565: (89) func_call -> id . opar error cpar - yacc.py:2566: - yacc.py:2687: opar shift and go to state 113 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 169 - yacc.py:2563: - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2566: - yacc.py:2687: opar shift and go to state 195 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 170 - yacc.py:2563: - yacc.py:2565: (64) factor -> opar expr cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: dot reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: star reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: div reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: plus reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: minus reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: less reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: lesseq reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: equal reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: semi reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: cpar reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: of reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: then reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: loop reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: comma reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: in reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: else reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: pool reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: ccur reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2687: fi reduce using rule 64 (factor -> opar expr cpar .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 171 - yacc.py:2563: - yacc.py:2565: (70) factor -> let let_list in . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 196 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 172 - yacc.py:2563: - yacc.py:2565: (37) let_list -> let_assign comma . let_list - yacc.py:2565: (36) let_list -> . let_assign - yacc.py:2565: (37) let_list -> . let_assign comma let_list - yacc.py:2565: (38) let_assign -> . param larrow expr - yacc.py:2565: (39) let_assign -> . param - yacc.py:2565: (35) param -> . id colon type - yacc.py:2566: - yacc.py:2687: id shift and go to state 46 - yacc.py:2689: - yacc.py:2714: let_assign shift and go to state 129 - yacc.py:2714: let_list shift and go to state 197 - yacc.py:2714: param shift and go to state 130 - yacc.py:2561: - yacc.py:2562:state 173 - yacc.py:2563: - yacc.py:2565: (38) let_assign -> param larrow . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 198 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 174 - yacc.py:2563: - yacc.py:2565: (71) factor -> case expr of . cases_list esac - yacc.py:2565: (40) cases_list -> . casep semi - yacc.py:2565: (41) cases_list -> . casep semi cases_list - yacc.py:2565: (42) cases_list -> . error cases_list - yacc.py:2565: (43) cases_list -> . error semi - yacc.py:2565: (44) casep -> . id colon type rarrow expr - yacc.py:2566: - yacc.py:2687: error shift and go to state 201 - yacc.py:2687: id shift and go to state 202 - yacc.py:2689: - yacc.py:2714: cases_list shift and go to state 199 - yacc.py:2714: casep shift and go to state 200 - yacc.py:2561: - yacc.py:2562:state 175 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr then . expr else expr fi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 203 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 176 - yacc.py:2563: - yacc.py:2565: (73) factor -> while expr loop . expr pool - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 204 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 177 - yacc.py:2563: - yacc.py:2565: (77) atom -> ocur block ccur . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: dot reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: star reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: div reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: plus reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: minus reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: less reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: lesseq reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: equal reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: semi reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: cpar reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: of reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: then reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: loop reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: comma reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: in reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: else reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: pool reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: ccur reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2687: fi reduce using rule 77 (atom -> ocur block ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 178 - yacc.py:2563: - yacc.py:2565: (80) atom -> ocur block error . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: dot reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: star reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: div reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: plus reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: minus reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: less reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: lesseq reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: equal reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: semi reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: cpar reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: of reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: then reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: loop reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: comma reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: in reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: else reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: pool reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: ccur reduce using rule 80 (atom -> ocur block error .) - yacc.py:2687: fi reduce using rule 80 (atom -> ocur block error .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 179 - yacc.py:2563: - yacc.py:2565: (79) atom -> ocur error ccur . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: dot reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: star reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: div reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: plus reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: minus reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: less reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: lesseq reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: equal reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: semi reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: cpar reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: of reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: then reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: loop reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: comma reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: in reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: else reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: pool reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: ccur reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2687: fi reduce using rule 79 (atom -> ocur error ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 180 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur . expr ccur - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 205 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 181 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur . expr ccur - yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur . error ccur - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 207 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 206 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 182 - yacc.py:2563: - yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur . expr ccur - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 208 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 183 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur . expr ccur - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 209 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 184 - yacc.py:2563: - yacc.py:2565: (61) base_call -> error arroba type dot . func_call - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 168 - yacc.py:2687: error shift and go to state 169 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 210 - yacc.py:2561: - yacc.py:2562:state 185 - yacc.py:2563: - yacc.py:2565: (95) arg_list -> error . arg_list - yacc.py:2565: (86) block -> error . block - yacc.py:2565: (87) block -> error . semi - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: semi shift and go to state 142 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 185 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: arg_list shift and go to state 186 - yacc.py:2714: block shift and go to state 141 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: expr shift and go to state 187 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 186 - yacc.py:2563: - yacc.py:2565: (95) arg_list -> error arg_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 95 (arg_list -> error arg_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 187 - yacc.py:2563: - yacc.py:2565: (93) arg_list -> expr . - yacc.py:2565: (94) arg_list -> expr . comma arg_list - yacc.py:2565: (84) block -> expr . semi - yacc.py:2565: (85) block -> expr . semi block - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 93 (arg_list -> expr .) - yacc.py:2687: comma shift and go to state 189 - yacc.py:2687: semi shift and go to state 151 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 188 - yacc.py:2563: - yacc.py:2565: (90) func_call -> error opar args cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: dot reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: star reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: div reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: plus reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: minus reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: less reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: lesseq reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: equal reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: semi reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: cpar reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: of reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: then reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: loop reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: comma reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: in reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: else reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: pool reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: ccur reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2687: fi reduce using rule 90 (func_call -> error opar args cpar .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 189 - yacc.py:2563: - yacc.py:2565: (94) arg_list -> expr comma . arg_list - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 145 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 155 - yacc.py:2714: arg_list shift and go to state 211 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 190 - yacc.py:2563: - yacc.py:2565: (85) block -> expr semi block . - yacc.py:2566: - yacc.py:2687: ccur reduce using rule 85 (block -> expr semi block .) - yacc.py:2687: error reduce using rule 85 (block -> expr semi block .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 191 - yacc.py:2563: - yacc.py:2565: (88) func_call -> id opar args cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: dot reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: star reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: div reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: plus reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: minus reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: less reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: lesseq reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: equal reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: semi reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: cpar reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: of reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: then reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: loop reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: comma reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: in reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: else reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: pool reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: ccur reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2687: fi reduce using rule 88 (func_call -> id opar args cpar .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 192 - yacc.py:2563: - yacc.py:2565: (89) func_call -> id opar error cpar . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: dot reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: star reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: div reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: plus reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: minus reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: less reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: lesseq reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: equal reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: semi reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: cpar reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: of reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: then reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: loop reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: comma reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: in reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: else reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: pool reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: ccur reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2687: fi reduce using rule 89 (func_call -> id opar error cpar .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 193 - yacc.py:2563: - yacc.py:2565: (59) base_call -> factor arroba type dot . func_call - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 168 - yacc.py:2687: error shift and go to state 169 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 212 - yacc.py:2561: - yacc.py:2562:state 194 - yacc.py:2563: - yacc.py:2565: (62) base_call -> factor arroba error dot . func_call - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 168 - yacc.py:2687: error shift and go to state 169 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 213 - yacc.py:2561: - yacc.py:2562:state 195 - yacc.py:2563: - yacc.py:2565: (90) func_call -> error opar . args cpar - yacc.py:2565: (91) args -> . arg_list - yacc.py:2565: (92) args -> . arg_list_empty - yacc.py:2565: (93) arg_list -> . expr - yacc.py:2565: (94) arg_list -> . expr comma arg_list - yacc.py:2565: (95) arg_list -> . error arg_list - yacc.py:2565: (96) arg_list_empty -> . epsilon - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (2) epsilon -> . - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: error shift and go to state 145 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: args shift and go to state 146 - yacc.py:2714: arg_list shift and go to state 148 - yacc.py:2714: arg_list_empty shift and go to state 149 - yacc.py:2714: expr shift and go to state 155 - yacc.py:2714: epsilon shift and go to state 150 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 196 - yacc.py:2563: - yacc.py:2565: (70) factor -> let let_list in expr . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: dot reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: star reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: div reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: plus reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: minus reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: less reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: lesseq reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: equal reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: semi reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: cpar reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: of reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: then reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: loop reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: comma reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: in reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: else reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: pool reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: ccur reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2687: fi reduce using rule 70 (factor -> let let_list in expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 197 - yacc.py:2563: - yacc.py:2565: (37) let_list -> let_assign comma let_list . - yacc.py:2566: - yacc.py:2687: in reduce using rule 37 (let_list -> let_assign comma let_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 198 - yacc.py:2563: - yacc.py:2565: (38) let_assign -> param larrow expr . - yacc.py:2566: - yacc.py:2687: comma reduce using rule 38 (let_assign -> param larrow expr .) - yacc.py:2687: in reduce using rule 38 (let_assign -> param larrow expr .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 199 - yacc.py:2563: - yacc.py:2565: (71) factor -> case expr of cases_list . esac - yacc.py:2566: - yacc.py:2687: esac shift and go to state 214 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 200 - yacc.py:2563: - yacc.py:2565: (40) cases_list -> casep . semi - yacc.py:2565: (41) cases_list -> casep . semi cases_list - yacc.py:2566: - yacc.py:2687: semi shift and go to state 215 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 201 - yacc.py:2563: - yacc.py:2565: (42) cases_list -> error . cases_list - yacc.py:2565: (43) cases_list -> error . semi - yacc.py:2565: (40) cases_list -> . casep semi - yacc.py:2565: (41) cases_list -> . casep semi cases_list - yacc.py:2565: (42) cases_list -> . error cases_list - yacc.py:2565: (43) cases_list -> . error semi - yacc.py:2565: (44) casep -> . id colon type rarrow expr - yacc.py:2566: - yacc.py:2687: semi shift and go to state 217 - yacc.py:2687: error shift and go to state 201 - yacc.py:2687: id shift and go to state 202 - yacc.py:2689: - yacc.py:2714: cases_list shift and go to state 216 - yacc.py:2714: casep shift and go to state 200 - yacc.py:2561: - yacc.py:2562:state 202 - yacc.py:2563: - yacc.py:2565: (44) casep -> id . colon type rarrow expr - yacc.py:2566: - yacc.py:2687: colon shift and go to state 218 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 203 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr then expr . else expr fi - yacc.py:2566: - yacc.py:2687: else shift and go to state 219 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 204 - yacc.py:2563: - yacc.py:2565: (73) factor -> while expr loop expr . pool - yacc.py:2566: - yacc.py:2687: pool shift and go to state 220 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 205 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur expr . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 221 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 206 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur expr . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 222 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 207 - yacc.py:2563: - yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur error . ccur - yacc.py:2565: (61) base_call -> error . arroba type dot func_call - yacc.py:2565: (78) atom -> error . block ccur - yacc.py:2565: (90) func_call -> error . opar args cpar - yacc.py:2565: (84) block -> . expr semi - yacc.py:2565: (85) block -> . expr semi block - yacc.py:2565: (86) block -> . error block - yacc.py:2565: (87) block -> . error semi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 223 - yacc.py:2687: arroba shift and go to state 108 - yacc.py:2687: opar shift and go to state 110 - yacc.py:2687: error shift and go to state 107 - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: block shift and go to state 109 - yacc.py:2714: expr shift and go to state 111 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 208 - yacc.py:2563: - yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur expr . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 224 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 209 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur expr . ccur - yacc.py:2566: - yacc.py:2687: ccur shift and go to state 225 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 210 - yacc.py:2563: - yacc.py:2565: (61) base_call -> error arroba type dot func_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: div reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: plus reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: minus reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: less reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: lesseq reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: equal reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: semi reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: cpar reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: arroba reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: dot reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: of reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: then reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: loop reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: comma reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: in reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: else reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: pool reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: ccur reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2687: fi reduce using rule 61 (base_call -> error arroba type dot func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 211 - yacc.py:2563: - yacc.py:2565: (94) arg_list -> expr comma arg_list . - yacc.py:2566: - yacc.py:2687: cpar reduce using rule 94 (arg_list -> expr comma arg_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 212 - yacc.py:2563: - yacc.py:2565: (59) base_call -> factor arroba type dot func_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: div reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: plus reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: minus reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: less reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: lesseq reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: equal reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: semi reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: cpar reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: arroba reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: dot reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: of reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: then reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: loop reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: comma reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: in reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: else reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: pool reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: ccur reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2687: fi reduce using rule 59 (base_call -> factor arroba type dot func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 213 - yacc.py:2563: - yacc.py:2565: (62) base_call -> factor arroba error dot func_call . - yacc.py:2566: - yacc.py:2687: star reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: div reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: plus reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: minus reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: less reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: lesseq reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: equal reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: semi reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: cpar reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: arroba reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: dot reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: of reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: then reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: loop reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: comma reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: in reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: else reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: pool reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: ccur reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2687: fi reduce using rule 62 (base_call -> factor arroba error dot func_call .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 214 - yacc.py:2563: - yacc.py:2565: (71) factor -> case expr of cases_list esac . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: dot reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: star reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: div reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: plus reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: minus reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: less reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: lesseq reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: equal reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: semi reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: cpar reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: of reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: then reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: loop reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: comma reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: in reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: else reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: pool reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: ccur reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2687: fi reduce using rule 71 (factor -> case expr of cases_list esac .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 215 - yacc.py:2563: - yacc.py:2565: (40) cases_list -> casep semi . - yacc.py:2565: (41) cases_list -> casep semi . cases_list - yacc.py:2565: (40) cases_list -> . casep semi - yacc.py:2565: (41) cases_list -> . casep semi cases_list - yacc.py:2565: (42) cases_list -> . error cases_list - yacc.py:2565: (43) cases_list -> . error semi - yacc.py:2565: (44) casep -> . id colon type rarrow expr - yacc.py:2566: - yacc.py:2687: esac reduce using rule 40 (cases_list -> casep semi .) - yacc.py:2687: error shift and go to state 201 - yacc.py:2687: id shift and go to state 202 - yacc.py:2689: - yacc.py:2714: casep shift and go to state 200 - yacc.py:2714: cases_list shift and go to state 226 - yacc.py:2561: - yacc.py:2562:state 216 - yacc.py:2563: - yacc.py:2565: (42) cases_list -> error cases_list . - yacc.py:2566: - yacc.py:2687: esac reduce using rule 42 (cases_list -> error cases_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 217 - yacc.py:2563: - yacc.py:2565: (43) cases_list -> error semi . - yacc.py:2566: - yacc.py:2687: esac reduce using rule 43 (cases_list -> error semi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 218 - yacc.py:2563: - yacc.py:2565: (44) casep -> id colon . type rarrow expr - yacc.py:2566: - yacc.py:2687: type shift and go to state 227 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 219 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr then expr else . expr fi - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 228 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 220 - yacc.py:2563: - yacc.py:2565: (73) factor -> while expr loop expr pool . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: dot reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: star reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: div reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: plus reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: minus reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: less reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: lesseq reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: equal reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: semi reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: cpar reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: of reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: then reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: loop reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: comma reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: in reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: else reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: pool reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: ccur reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2687: fi reduce using rule 73 (factor -> while expr loop expr pool .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 221 - yacc.py:2563: - yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur expr ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 26 (def_func -> error opar formals cpar colon type ocur expr ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 222 - yacc.py:2563: - yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur expr ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 25 (def_func -> id opar formals cpar colon type ocur expr ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 223 - yacc.py:2563: - yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur error ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 29 (def_func -> id opar formals cpar colon type ocur error ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 224 - yacc.py:2563: - yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur expr ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 28 (def_func -> id opar formals cpar colon error ocur expr ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 225 - yacc.py:2563: - yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur expr ccur . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 27 (def_func -> id opar error cpar colon type ocur expr ccur .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 226 - yacc.py:2563: - yacc.py:2565: (41) cases_list -> casep semi cases_list . - yacc.py:2566: - yacc.py:2687: esac reduce using rule 41 (cases_list -> casep semi cases_list .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 227 - yacc.py:2563: - yacc.py:2565: (44) casep -> id colon type . rarrow expr - yacc.py:2566: - yacc.py:2687: rarrow shift and go to state 229 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 228 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr then expr else expr . fi - yacc.py:2566: - yacc.py:2687: fi shift and go to state 230 - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 229 - yacc.py:2563: - yacc.py:2565: (44) casep -> id colon type rarrow . expr - yacc.py:2565: (45) expr -> . id larrow expr - yacc.py:2565: (46) expr -> . comp - yacc.py:2565: (47) comp -> . comp less op - yacc.py:2565: (48) comp -> . comp lesseq op - yacc.py:2565: (49) comp -> . comp equal op - yacc.py:2565: (50) comp -> . op - yacc.py:2565: (51) op -> . op plus term - yacc.py:2565: (52) op -> . op minus term - yacc.py:2565: (53) op -> . term - yacc.py:2565: (54) term -> . term star base_call - yacc.py:2565: (55) term -> . term div base_call - yacc.py:2565: (56) term -> . base_call - yacc.py:2565: (57) term -> . term star error - yacc.py:2565: (58) term -> . term div error - yacc.py:2565: (59) base_call -> . factor arroba type dot func_call - yacc.py:2565: (60) base_call -> . factor - yacc.py:2565: (61) base_call -> . error arroba type dot func_call - yacc.py:2565: (62) base_call -> . factor arroba error dot func_call - yacc.py:2565: (63) factor -> . atom - yacc.py:2565: (64) factor -> . opar expr cpar - yacc.py:2565: (65) factor -> . factor dot func_call - yacc.py:2565: (66) factor -> . not expr - yacc.py:2565: (67) factor -> . func_call - yacc.py:2565: (68) factor -> . isvoid base_call - yacc.py:2565: (69) factor -> . nox base_call - yacc.py:2565: (70) factor -> . let let_list in expr - yacc.py:2565: (71) factor -> . case expr of cases_list esac - yacc.py:2565: (72) factor -> . if expr then expr else expr fi - yacc.py:2565: (73) factor -> . while expr loop expr pool - yacc.py:2565: (74) atom -> . num - yacc.py:2565: (75) atom -> . id - yacc.py:2565: (76) atom -> . new type - yacc.py:2565: (77) atom -> . ocur block ccur - yacc.py:2565: (78) atom -> . error block ccur - yacc.py:2565: (79) atom -> . ocur error ccur - yacc.py:2565: (80) atom -> . ocur block error - yacc.py:2565: (81) atom -> . true - yacc.py:2565: (82) atom -> . false - yacc.py:2565: (83) atom -> . string - yacc.py:2565: (88) func_call -> . id opar args cpar - yacc.py:2565: (89) func_call -> . id opar error cpar - yacc.py:2565: (90) func_call -> . error opar args cpar - yacc.py:2566: - yacc.py:2687: id shift and go to state 72 - yacc.py:2687: error shift and go to state 70 - yacc.py:2687: opar shift and go to state 80 - yacc.py:2687: not shift and go to state 81 - yacc.py:2687: isvoid shift and go to state 82 - yacc.py:2687: nox shift and go to state 83 - yacc.py:2687: let shift and go to state 84 - yacc.py:2687: case shift and go to state 85 - yacc.py:2687: if shift and go to state 86 - yacc.py:2687: while shift and go to state 87 - yacc.py:2687: num shift and go to state 88 - yacc.py:2687: new shift and go to state 89 - yacc.py:2687: ocur shift and go to state 90 - yacc.py:2687: true shift and go to state 91 - yacc.py:2687: false shift and go to state 92 - yacc.py:2687: string shift and go to state 93 - yacc.py:2689: - yacc.py:2714: expr shift and go to state 231 - yacc.py:2714: comp shift and go to state 73 - yacc.py:2714: op shift and go to state 74 - yacc.py:2714: term shift and go to state 75 - yacc.py:2714: base_call shift and go to state 76 - yacc.py:2714: factor shift and go to state 77 - yacc.py:2714: func_call shift and go to state 78 - yacc.py:2714: atom shift and go to state 79 - yacc.py:2561: - yacc.py:2562:state 230 - yacc.py:2563: - yacc.py:2565: (72) factor -> if expr then expr else expr fi . - yacc.py:2566: - yacc.py:2687: arroba reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: dot reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: star reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: div reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: plus reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: minus reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: less reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: lesseq reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: equal reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: semi reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: cpar reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: of reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: then reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: loop reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: comma reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: in reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: else reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: pool reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: ccur reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2687: fi reduce using rule 72 (factor -> if expr then expr else expr fi .) - yacc.py:2689: - yacc.py:2561: - yacc.py:2562:state 231 - yacc.py:2563: - yacc.py:2565: (44) casep -> id colon type rarrow expr . - yacc.py:2566: - yacc.py:2687: semi reduce using rule 44 (casep -> id colon type rarrow expr .) - yacc.py:2689: - yacc.py:3447:24 shift/reduce conflicts - yacc.py:3457: - yacc.py:3458:Conflicts: - yacc.py:3459: - yacc.py:3462:shift/reduce conflict for less in state 73 resolved as shift - yacc.py:3462:shift/reduce conflict for lesseq in state 73 resolved as shift - yacc.py:3462:shift/reduce conflict for equal in state 73 resolved as shift - yacc.py:3462:shift/reduce conflict for plus in state 74 resolved as shift - yacc.py:3462:shift/reduce conflict for minus in state 74 resolved as shift - yacc.py:3462:shift/reduce conflict for star in state 75 resolved as shift - yacc.py:3462:shift/reduce conflict for div in state 75 resolved as shift - yacc.py:3462:shift/reduce conflict for arroba in state 77 resolved as shift - yacc.py:3462:shift/reduce conflict for dot in state 77 resolved as shift - yacc.py:3462:shift/reduce conflict for ccur in state 141 resolved as shift - yacc.py:3462:shift/reduce conflict for cpar in state 147 resolved as shift - yacc.py:3462:shift/reduce conflict for error in state 151 resolved as shift - yacc.py:3462:shift/reduce conflict for plus in state 156 resolved as shift - yacc.py:3462:shift/reduce conflict for minus in state 156 resolved as shift - yacc.py:3462:shift/reduce conflict for plus in state 157 resolved as shift - yacc.py:3462:shift/reduce conflict for minus in state 157 resolved as shift - yacc.py:3462:shift/reduce conflict for plus in state 158 resolved as shift - yacc.py:3462:shift/reduce conflict for minus in state 158 resolved as shift - yacc.py:3462:shift/reduce conflict for star in state 159 resolved as shift - yacc.py:3462:shift/reduce conflict for div in state 159 resolved as shift - yacc.py:3462:shift/reduce conflict for star in state 160 resolved as shift - yacc.py:3462:shift/reduce conflict for div in state 160 resolved as shift - yacc.py:3462:shift/reduce conflict for arroba in state 162 resolved as shift - yacc.py:3462:shift/reduce conflict for arroba in state 164 resolved as shift - yacc.py: 362:PLY: PARSE DEBUG START - yacc.py: 410: - yacc.py: 411:State : 0 - yacc.py: 435:Stack : . LexToken(class,'class',1,0) - yacc.py: 445:Action : Shift and goto state 5 - yacc.py: 410: - yacc.py: 411:State : 5 - yacc.py: 435:Stack : class . LexToken(type,'Main',1,6) - yacc.py: 445:Action : Shift and goto state 8 - yacc.py: 410: - yacc.py: 411:State : 8 - yacc.py: 435:Stack : class type . LexToken(inherits,'inherits',1,11) - yacc.py: 445:Action : Shift and goto state 11 - yacc.py: 410: - yacc.py: 411:State : 11 - yacc.py: 435:Stack : class type inherits . LexToken(type,'IO',1,20) - yacc.py: 445:Action : Shift and goto state 20 - yacc.py: 410: - yacc.py: 411:State : 20 - yacc.py: 435:Stack : class type inherits type . LexToken(ocur,'{',1,23) - yacc.py: 445:Action : Shift and goto state 33 - yacc.py: 410: - yacc.py: 411:State : 33 - yacc.py: 435:Stack : class type inherits type ocur . LexToken(id,'main',3,30) - yacc.py: 445:Action : Shift and goto state 19 - yacc.py: 410: - yacc.py: 411:State : 19 - yacc.py: 435:Stack : class type inherits type ocur id . LexToken(opar,'(',3,34) - yacc.py: 445:Action : Shift and goto state 32 - yacc.py: 410: - yacc.py: 411:State : 32 - yacc.py: 435:Stack : class type inherits type ocur id opar . LexToken(cpar,')',3,35) - yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : class type inherits type ocur id opar epsilon . LexToken(cpar,')',3,35) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : class type inherits type ocur id opar param_list_empty . LexToken(cpar,')',3,35) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : class type inherits type ocur id opar formals . LexToken(cpar,')',3,35) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar . LexToken(colon,':',3,36) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon . LexToken(type,'Object',3,38) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type . LexToken(ocur,'{',3,45) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur . LexToken(id,'out_string',4,55) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id . LexToken(opar,'(',4,65) - yacc.py: 445:Action : Shift and goto state 113 - yacc.py: 410: - yacc.py: 411:State : 113 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id opar . LexToken(id,'type_name',4,66) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id opar id . LexToken(opar,'(',4,75) - yacc.py: 445:Action : Shift and goto state 113 - yacc.py: 410: - yacc.py: 411:State : 113 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id opar id opar . LexToken(cpar,')',4,76) - yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 150 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 150 - yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id opar id opar epsilon . LexToken(cpar,')',4,76) - yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 149 - yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id opar id opar arg_list_empty . LexToken(cpar,')',4,76) - yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id opar id opar args . LexToken(cpar,')',4,76) - yacc.py: 445:Action : Shift and goto state 191 - yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id opar id opar args cpar . LexToken(cpar,')',4,77) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['type_name','(',[],')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'type_name',4,66), [])) - yacc.py: 410: - yacc.py: 411:State : 78 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id opar func_call . LexToken(cpar,')',4,77) - yacc.py: 471:Action : Reduce rule [factor -> func_call] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',4,55), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 16 - yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : class type inherits type ocur def_func semi epsilon . LexToken(ccur,'}',6,86) - yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 48 - yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : class type inherits type ocur def_func semi feature_list . LexToken(ccur,'}',6,86) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 53 - yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( def_class] with [] and goto state 2 - yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( ( Type: if name in self.types: - error_text = TypesError.TYPE_ALREADY_DEFINED - raise TypesError(error_text, *pos) + error_text = SemanticError.TYPE_ALREADY_DEFINED + raise SemanticError(error_text, *pos) typex = self.types[name] = Type(name, pos) return typex @@ -80,7 +80,8 @@ def create_child(self): def define_variable(self, vname, vtype) -> VariableInfo: info = VariableInfo(vname, vtype) - self.locals.append(info) + if info not in self.locals: + self.locals.append(info) return info def find_variable(self, vname, index=None) -> VariableInfo: @@ -103,7 +104,7 @@ def find_attribute(self, vname, index=None): try: return next(x for x in locals if x.name == vname) except StopIteration: - return self.parent.find_attribute(vname, self.index) if self.parent else None + return self.parent.find_attribute(vname, index) if self.parent else None def get_class_scope(self): diff --git a/src/semantic/types.py b/src/semantic/types.py index 0ec57f5d..8729a8f0 100644 --- a/src/semantic/types.py +++ b/src/semantic/types.py @@ -67,23 +67,21 @@ def get_attribute(self, name:str, pos) -> Attribute: raise AttributesError(error_text, *pos) def define_attribute(self, name:str, typex, pos): - if name == 'self': - raise SemanticError(SemanticError.SELF_ATTR, *pos) try: self.attributes[name] except KeyError: try: self.get_attribute(name, pos) except SemanticError: - error_text = AttributesError.ATTR_DEFINED_PARENT % name - raise AttributesError(error_text, *pos) - - self.attributes[name] = attribute = Attribute(name, typex, len(self.attributes)) - # self.attributes.append(attribute) - return attribute + self.attributes[name] = attribute = Attribute(name, typex, len(self.attributes)) + # self.attributes.append(attribute) + return attribute + else: + error_text = SemanticError.ATTR_DEFINED_PARENT % name + raise SemanticError(error_text, *pos) else: - error_text = AttributesError.ATTRIBUTE_ALREADY_DEFINED % name - raise AttributesError(error_text, *pos) + error_text = SemanticError.ATTRIBUTE_ALREADY_DEFINED % name + raise SemanticError(error_text, *pos) def get_method(self, name:str, pos) -> Method: try: @@ -97,10 +95,10 @@ def get_method(self, name:str, pos) -> Method: except AttributesError: raise AttributesError(error_text, *pos) - def define_method(self, name:str, param_names:list, param_types:list, return_type): + def define_method(self, name:str, param_names:list, param_types:list, return_type, pos=(0, 0)): if name in self.methods: - error_text = AttributesError.METHOD_ALREADY_DEFINED % name - raise AttributesError(error_text, *pos) + error_text = SemanticError.METHOD_ALREADY_DEFINED % name + raise SemanticError(error_text, *pos) method = self.methods[name] = Method(name, param_names, param_types, return_type) return method diff --git a/src/semantic/visitors/type_builder.py b/src/semantic/visitors/type_builder.py index 3178b9a7..a3609242 100644 --- a/src/semantic/visitors/type_builder.py +++ b/src/semantic/visitors/type_builder.py @@ -42,8 +42,8 @@ def visit(self, node:ClassDeclarationNode): current = parent while current is not None: if current.name == self.current_type.name: - error_text = TypesError.CIRCULAR_DEPENDENCY %(self.current_type.name, self.current_type.name) - raise TypesError(error_text, *node.pos) + error_text = SemanticError.CIRCULAR_DEPENDENCY %(self.current_type.name, self.current_type.name) + raise SemanticError(error_text, *node.pos) current = current.parent except SemanticError as e: parent = ErrorType() @@ -60,14 +60,14 @@ def visit(self, node:FuncDeclarationNode): args_types = [] for name, type_ in node.params: if name in args_names: - error_text = TypesError.PARAMETER_MULTY_DEFINED % name - self.errors.append(TypesError(error_text, *name.pos)) + error_text = SemanticError.PARAMETER_MULTY_DEFINED % name + self.errors.append(SemanticError(error_text, *type_.pos)) args_names.append(name) try: arg_type = self.context.get_type(type_.value, type_.pos) except SemanticError: - error_text = TypesError.PARAMETER_UNDEFINED % type_.value + error_text = TypesError.PARAMETER_UNDEFINED % (type_.value, type_.value) self.errors.append(TypesError(error_text, *type_.pos)) arg_type = ErrorType() args_types.append(arg_type) @@ -80,7 +80,7 @@ def visit(self, node:FuncDeclarationNode): return_type = ErrorType(node.type_pos) try: - self.current_type.define_method(node.id, args_names, args_types, return_type) + self.current_type.define_method(node.id, args_names, args_types, return_type, node.pos) except SemanticError as e: self.errors.append(e) @@ -93,6 +93,9 @@ def visit(self, node:AttrDeclarationNode): attr_type = ErrorType(node.type_pos) self.errors.append(TypesError(error_text, *node.type_pos)) + if node.id == 'self': + self.errors.append(SemanticError(SemanticError.SELF_ATTR, *node.pos)) + try: self.current_type.define_attribute(node.id, attr_type, node.pos) except SemanticError as e: diff --git a/src/semantic/visitors/type_checker.py b/src/semantic/visitors/type_checker.py index 79e8a8ca..05911771 100644 --- a/src/semantic/visitors/type_checker.py +++ b/src/semantic/visitors/type_checker.py @@ -3,8 +3,7 @@ from semantic.types import * from utils.ast import * from utils.errors import SemanticError, AttributesError, TypesError, NamesError -# from utils.utils import get_type, get_common_basetype -from utils import get_type +from utils import get_type, get_common_basetype class TypeChecker: @@ -24,7 +23,7 @@ def visit(self, node:ProgramNode, scope:Scope): for declaration, new_scope in zip(node.declarations, scope.children): self.visit(declaration, new_scope) - def _get_type(self, ntype:Type, pos): + def _get_type(self, ntype:str, pos): try: return self.context.get_type(ntype, pos) except SemanticError as e: @@ -81,15 +80,15 @@ def visit(self, node:FuncDeclarationNode, scope:Scope): try: old_meth = parent.get_method(node.id, node.pos) if old_meth.return_type.name != method.return_type.name: - error_text = AttributesError.WRONG_SIGNATURE_RETURN % (node.id, method.return_type.name, old_meth.return_type.name) - self.errors.append(AttributesError(error_text, *node.type_pos)) + error_text = SemanticError.WRONG_SIGNATURE_RETURN % (node.id, method.return_type.name, old_meth.return_type.name) + self.errors.append(SemanticError(error_text, *node.type_pos)) if len(method.param_names) != len(old_meth.param_names): - error_text = AttributesError.WRONG_NUMBER_PARAM % node.id - self.errors.append(AttributesError(error_text, *node.pos)) - for name, type1, type2 in zip(method.param_names, method.param_types, old_meth.param_types): + error_text = SemanticError.WRONG_NUMBER_PARAM % node.id + self.errors.append(SemanticError(error_text, *node.pos)) + for (name, param), type1, type2 in zip(node.params, method.param_types, old_meth.param_types): if type1.name != type2.name: - error_text = AttributesError.WRONG_SIGNATURE_PARAMETER % (name, type1.name, type2.name) - self.errors.append(AttributesError(error_text, *name.pos)) + error_text = SemanticError.WRONG_SIGNATURE_PARAMETER % (name, type1.name, type2.name) + self.errors.append(SemanticError(error_text, *param.pos)) except SemanticError: pass @@ -105,8 +104,9 @@ def visit(self, node:FuncDeclarationNode, scope:Scope): @visitor.when(VarDeclarationNode) def visit(self, node:VarDeclarationNode, scope:Scope): - var_info = self.find_variable(scope, node.id) - vtype = get_type(var_info.type, self.current_type) + vtype = self._get_type(node.type, node.type_pos) + # var_info = self.find_variable(scope, node.id) + vtype = get_type(vtype, self.current_type) if node.expr != None: typex = self.visit(node.expr, scope) @@ -141,10 +141,10 @@ def _check_args(self, meth:Method, scope:Scope, args, pos): error_text = SemanticError.ARGUMENT_ERROR % (meth.name) self.errors.append(SemanticError(error_text, *arg_info.pos)) - for atype, ptype, arg_info in zip(arg_types, meth.param_types, args): + for atype, ptype, param_name in zip(arg_types, meth.param_types, meth.param_names): if not atype.conforms_to(ptype): - error_text = TypesError.INCOSISTENT_ARG_TYPE % (meth.name, atype.name, arg_info.name, ptype.name) - self.errors.append(TypesError(error_text, *arg_info.pos)) + error_text = TypesError.INCOSISTENT_ARG_TYPE % (meth.name, atype.name, param_name, ptype.name) + self.errors.append(TypesError(error_text, *pos)) @visitor.when(CallNode) @@ -205,11 +205,11 @@ def visit(self, node:ConstantVoidNode, scope:Scope): return VoidType(node.pos) def find_variable(self, scope, lex): - var_info = scope.find_attribute(lex, self.current_index) + var_info = scope.find_local(lex) + if var_info is None: + var_info = scope.find_attribute(lex, self.current_index) if lex in self.current_type.attributes and var_info is None: return VariableInfo(lex, VoidType()) - if var_info is None: - var_info = scope.find_local(lex) return var_info @visitor.when(VariableNode) @@ -236,8 +236,9 @@ def visit(self, node:WhileNode, scope:Scope): if cond.name != 'Bool': self.errors.append(TypesError(TypesError.LOOP_CONDITION_ERROR, *node.pos)) + self.visit(node.expr, scope) - return VoidType() + return ObjectType() @visitor.when(IsVoidNode) def visit(self, node:IsVoidNode, scope:Scope): @@ -251,19 +252,20 @@ def visit(self, node:ConditionalNode, scope:Scope): if cond.name != 'Bool': error_text = TypesError.PREDICATE_ERROR % ('if', 'Bool') - self.errors.append(TypesError(error_text, node.pos)) + self.errors.append(TypesError(error_text, *node.pos)) true_type = self.visit(node.stm, scope) false_type = self.visit(node.else_stm, scope) - if true_type.conforms_to(false_type): - return false_type - elif false_type.conforms_to(true_type): - return true_type - else: - error_text = TypesError.INCOMPATIBLE_TYPES % (false_type.name, true_type.name) - self.errors.append(TypesError(error_text, node.pos)) - return ErrorType() + return get_common_basetype([false_type, true_type]) + # if true_type.conforms_to(false_type): + # return false_type + # elif false_type.conforms_to(true_type): + # return true_type + # else: + # error_text = TypesError.INCOMPATIBLE_TYPES % (false_type.name, true_type.name) + # self.errors.append(TypesError(error_text, *node.pos)) + # return ErrorType() @visitor.when(BlockNode) @@ -290,15 +292,19 @@ def visit(self, node:CaseNode, scope:Scope): types = [] var_types = [] for case, c_scope in zip(node.case_list, new_scope.children): + case: OptionNode t, vt = self.visit(case, c_scope) types.append(t) - var_types.append(vt) + if case.typex in var_types: + error_text = SemanticError.DUPLICATE_CASE_BRANCH % case.typex + self.errors.append(SemanticError(error_text, *case.type_pos)) + var_types.append(case.typex) - for t in var_types: - if not type_expr.conforms_to(t): - error_text = TypesError.INCOMPATIBLE_TYPES % (t.name, type_expr.name) - self.errors.append(TypesError(error_text, *node.pos)) - return ErrorType() + # for t in var_types: + # if not type_expr.conforms_to(t): + # error_text = TypesError.INCOMPATIBLE_TYPES % (t.name, type_expr.name) + # self.errors.append(TypesError(error_text, *node.pos)) + # return ErrorType() return get_common_basetype(types) @@ -310,7 +316,7 @@ def visit(self, node:OptionNode, scope:Scope): return typex, var_info.type - def binary_operation(self, node, operator): + def binary_operation(self, node, scope, operator): ltype = self.visit(node.left, scope) rtype = self.visit(node.right, scope) int_type = IntType() @@ -318,44 +324,45 @@ def binary_operation(self, node, operator): error_text = TypesError.BOPERATION_NOT_DEFINED %(ltype.name, operator, rtype.name) self.errors.append(TypesError(error_text, *node.pos)) return ErrorType() - if opertor == '<' or operator == '<=': + if operator == '<' or operator == '<=': return BoolType() return int_type @visitor.when(PlusNode) def visit(self, node:PlusNode, scope:Scope): - return self.binary_operation(node, '+') + return self.binary_operation(node, scope, '+') @visitor.when(MinusNode) def visit(self, node:MinusNode, scope:Scope): - return self.binary_operation(node, '-') + return self.binary_operation(node, scope, '-') @visitor.when(StarNode) def visit(self, node:StarNode, scope:Scope): - return self.binary_operation(node, '*') + return self.binary_operation(node, scope, '*') @visitor.when(DivNode) def visit(self, node:DivNode, scope:Scope): - return self.binary_operation(node, '/') + return self.binary_operation(node, scope, '/') @visitor.when(LessEqNode) def visit(self, node:DivNode, scope:Scope): - return self.binary_operation(node, '<=') + return self.binary_operation(node, scope, '<=') @visitor.when(LessNode) def visit(self, node:DivNode, scope:Scope): - return self.binary_operation(node, '<') + return self.binary_operation(node, scope, '<') @visitor.when(EqualNode) def visit(self, node:EqualNode, scope:Scope): ltype = self.visit(node.left, scope) rtype = self.visit(node.right, scope) - if ltype == rtype and (ltype == IntType() or ltype == StringType() or ltype == BoolType()): + if (ltype == IntType() or rtype == IntType() or ltype == StringType() or rtype == StringType() or ltype == BoolType() or rtype == BoolType()) and ltype != rtype: error_text = TypesError.COMPARISON_ERROR self.errors.append(TypesError(error_text, *node.pos)) return ErrorType() - return BoolType() + else: + return BoolType() @visitor.when(NotNode) diff --git a/src/semantic/visitors/var_collector.py b/src/semantic/visitors/var_collector.py index 89da2fe1..07f580b6 100644 --- a/src/semantic/visitors/var_collector.py +++ b/src/semantic/visitors/var_collector.py @@ -28,7 +28,7 @@ def visit(self, node:ProgramNode, scope:Scope=None): def copy_scope(self, scope:Scope, parent:Type): if parent is None: return - for attr in parent.attributes: + for attr in parent.attributes.values(): if scope.find_variable(attr.name) is None: scope.define_attribute(attr) self.copy_scope(scope, parent.parent) @@ -43,7 +43,10 @@ def visit(self, node:ClassDeclarationNode, scope:Scope): if isinstance(feat, AttrDeclarationNode): self.visit(feat, scope) - self.copy_scope(scope, self.current_type.parent) + for attr, _ in self.current_type.all_attributes(): + if scope.find_attribute(attr.name) is None: + scope.define_attribute(attr) + # self.copy_scope(scope, self.current_type.parent) for feat in node.features: if isinstance(feat, FuncDeclarationNode): @@ -86,7 +89,7 @@ def visit(self, node:FuncDeclarationNode, scope:Scope): # Añadir las variables de argumento for pname, ptype in node.params: if pname == 'self': - self.errors.append(SemanticError.SELF_PARAM, pname.pos) + self.errors.append(SemanticError(SemanticError.SELF_PARAM, *ptype.pos)) new_scope.define_variable(pname, self._get_type(ptype.value, ptype.pos)) self.visit(node.body, new_scope) @@ -107,12 +110,12 @@ def visit(self, node:VarDeclarationNode, scope:Scope): self.errors.append(SemanticError(error_text, *node.pos)) return - if scope.is_defined(node.id): - var = scope.find_variable(node.id) - if var.type != ErrorType(): - error_text = SemanticError.LOCAL_ALREADY_DEFINED %(node.id, self.current_method.name) - self.errors.append(SemanticError(error_text, *node.pos)) - return + # if scope.is_defined(node.id): + # var = scope.find_variable(node.id) + # if var.type != ErrorType(): + # error_text = SemanticError.LOCAL_ALREADY_DEFINED %(node.id, self.current_method.name) + # self.errors.append(SemanticError(error_text, *node.pos)) + # return try: vtype = self.context.get_type(node.type, node.pos) @@ -243,6 +246,7 @@ def visit(self, node:OptionNode, scope:Scope): except TypesError: error_txt = TypesError.CLASS_CASE_BRANCH_UNDEFINED % node.typex self.errors.append(TypesError(error_txt, *node.type_pos)) + typex = ErrorType() self.visit(node.expr, scope) scope.define_variable(node.id, typex) diff --git a/src/utils/__pycache__/visitor.cpython-37.pyc b/src/utils/__pycache__/visitor.cpython-37.pyc index 6a7c3d0f4c72238f18d5827506df0fefd064ab19..55a648984a0e3907ed1999aa3eca70d333a1b379 100644 GIT binary patch delta 20 acmdlkv|WhXiI Date: Wed, 25 Nov 2020 10:05:40 -0700 Subject: [PATCH 46/60] Cleaning some files --- .fuse_hidden0000159500000002 | 183 + .fuse_hidden00001c2e00000003 | 183 + Pipfile | 12 - Pipfile.lock | 29 - src/arithmetic1.cl | 19 - .../__pycache__/__init__.cpython-37.pyc | Bin 1003 -> 1003 bytes .../__pycache__/cil_visitor.cpython-37.pyc | Bin 12296 -> 12296 bytes src/cool_parser/output_parser/parselog.txt | 3485 +++++++++++++++++ tests/semantic/hello_world.cl | 5 - venv/Scripts/Activate.ps1 | 51 - venv/Scripts/activate | 76 - venv/Scripts/activate.bat | 45 - venv/Scripts/deactivate.bat | 21 - venv/Scripts/python.exe | Bin 515584 -> 0 bytes venv/Scripts/pythonw.exe | Bin 515072 -> 0 bytes venv/pyvenv.cfg | 3 - 16 files changed, 3851 insertions(+), 261 deletions(-) create mode 100644 .fuse_hidden0000159500000002 create mode 100644 .fuse_hidden00001c2e00000003 delete mode 100644 Pipfile delete mode 100644 Pipfile.lock delete mode 100644 src/arithmetic1.cl delete mode 100644 tests/semantic/hello_world.cl delete mode 100644 venv/Scripts/Activate.ps1 delete mode 100644 venv/Scripts/activate delete mode 100644 venv/Scripts/activate.bat delete mode 100644 venv/Scripts/deactivate.bat delete mode 100644 venv/Scripts/python.exe delete mode 100644 venv/Scripts/pythonw.exe delete mode 100644 venv/pyvenv.cfg diff --git a/.fuse_hidden0000159500000002 b/.fuse_hidden0000159500000002 new file mode 100644 index 00000000..55093d31 --- /dev/null +++ b/.fuse_hidden0000159500000002 @@ -0,0 +1,183 @@ +# COOL: Proyecto de Compilación + + +[![Build Status](https://travis-ci.org/matcom/cool-compiler-2020.svg?branch=master)](https://travis-ci.org/matcom/cool-compiler-2020) + +> Proyecto base para el compilador de 4to año en Ciencia de la Computación. + +## Generalidades + +La evaluación de la asignatura Complementos de Compilación, inscrita en el programa del 4to año de la Licenciatura en Ciencia de la Computación de la Facultad de Matemática y Computación de la +Universidad de La Habana, consiste este curso en la implementación de un compilador completamente +funcional para el lenguaje _COOL_. + +_COOL (Classroom Object-Oriented Language)_ es un pequeño lenguaje que puede ser implementado con un esfuerzo razonable en un semestre del curso. Aun así, _COOL_ mantiene muchas de las características de los lenguajes de programación modernos, incluyendo orientación a objetos, tipado estático y manejo automático de memoria. + +## Cómo comenzar (o terminar) + +El proyecto de Compilación será recogido y evaluado **únicamente** a través de Github. Es imprescindible tener una cuenta de Github para cada participante, y que su proyecto esté correctamente hosteado en esta plataforma. A continuación le damos las instrucciones mínimas necesarias para ello: + +### 1. Si no lo han hecho ya, regístrense en [Github](https://github.com) todos los miembros del equipo (es gratis). + +![](img/img1.png) + +### 2. Haga click en el botón **Fork** para hacer una copia del proyecto en el perfil de Github de uno de los miembros. + +Opcionalmente pueden [crear una organización](https://github.com/organizations/new) y copiar el proyecto en el perfil de la misma. + +![](img/img2.png) + +### 3. Una vez hecho esto, tendrá un nuevo repositorio en `github/`. + +Revise que el repositorio de su equipo está en su perfil. +En este ejemplo se ha copiado a la cuenta de `github.com/apiad`. + +Debe indicar bajo el nombre del repositorio: `"forked from matcom/cool-compiler-2020"`. + +![](img/img3.png) + +### 4. Clone este proyecto en un repositorio local. + +Busque la URL de su proyecto en la interfaz web de Github. + +Asegúrese de clonar **su copia** y no el proyecto original en `matcom/cool-compiler-2020`. + +![](img/img4.png) + +```bash +$ git clone git@github.com:/cool-compiler-2020.git +``` + +> Donde `` es posiblemente el nombre de su equipo o del miembro donde se hizo el _fork_. + +A partir de este punto debe tener un proyecto `cool-compiler-2020` local. +El siguiente paso depende de si usted ya tiene su código versionado con `git` o no. + +### 5.A. Si tiene su proyecto en git (y no quiere perder la historia): + +#### 5.1. Mezcle hacia el nuevo respositorio su repositorio anterior: + +```bash +$ cd cool-compiler-2020 +$ git pull --allow-unrelated-histories master +``` + +#### 5.2. Organice su proyecto, código fuente y documentación, de acuerdo a las instrucciones de este documento, y vuelva a hacer `commit`. + +```bash +$ mv src/ +$ git add . +$ git commit -a -m "Mezclado con el proyecto base" +``` + +#### 5.3. A partir de este punto puede hacer `push` cada vez que tenga cambios que subir. + +```bash +$ git push origin master +``` + +### 5.B Si aún no tiene su proyecto en git (o no le importa la historia): + +#### 5.1. Simplemente copie el código de su proyecto en la carpeta correspondiente `src` y haga su primer commit. + +```bash +$ mv src/ +$ git commit -a -m "Hello Git!" +``` + +#### 5.2. A partir de este punto asegúrese de hacer `commit` de forma regular para mantener su repositorio actualizado. + +Si necesita saber más sobre `git`, todo lo imprescindible está en [esta guía](doc/github-git-cheat-sheet.pdf). + +#### 5.3. A partir de este punto puede hacer `push` cada vez que tenga cambios que subir. + +```bash +$ git push origin master +``` + +## Entregas + +En este proyecto se realizarán entregas parciales a lo largo del curso. Para realizar una entrega, siga los siguientes pasos. + +### 1. Cree un pull request al proyecto original desde su copia. + +![](img/img5.png) + +### 2. Asegúrese de tener la siguiente configuración antes de hacer click en **Create pull request**. + +- **base repository**: `matcom/cool-compiler-2020` (repositorio original) + - **branch**: `entrega-final` +- **head repository**: `/cool-compiler-2020` (repositorio propio) + - **branch**: `master` (o la que corresponda) + +> Asegúrese que se indica **Able to merge**. De lo contrario, existen cambios en el repositorio original que usted no tiene, y debe actualizarlos. + +> **NOTA**: Asegúrese que el _pull request_ se hace a la rama `entrega-final`. + +![](img/img6.png) + +### 3. Introduzca un título y descripción adecuados, y haga click en **Create pull request**. + +![](img/img7.png) + +### 4. Espere mientras se ejecutan las pruebas. + +Verá la indicación **Some checks haven't completed yet**. + +![](img/img8.png) + +Es posible que tenga que actualizar los cambios que se hayan hecho en el repositorio original, por ejemplo, si se han agregado nuevos tests. En este caso obtendrá el siguiente mensaje: + +> **This branch is out-of-date with base branch** + +Haga click en **Update branch** y siga las instrucciones. + +![](img/img12.png) + +### 5. Verifique que no hubo errores en las pruebas. + +Si ve el mensaje **All checks have failed**, significa que su código no pasó las pruebas. + +![](img/img9.png) + +Para ver los resultados de las pruebas haga click en el link **Details** junto al ícono de `continuous-integration/travis-ci/pr`, o visite [este link](https://travis-ci.org/matcom/cool-compiler-2020/pull_requests) y busque su _pull request_. + +![](img/img11.png) + +Haciendo click en el título de su _pull request_ (ej. **PR #1**) podrá ver los detalles de ejecución de todas las pruebas, así como las excepciones lanzadas. + +![](img/img10.png) + +### 6. Arregle los errores y repita el paso 5 hasta que todas las pruebas pasen. + +Para cualquier modificación que haga a su proyecto, haga _commit_ y _push_ para **su repositorio personal** y automáticamente se actualizará el estado del _pull request_ y se volverán a ejecutar las pruebas. **No es necesario** abrir un _pull request_ nuevo por cada entrega, sino actualizar el anterior. + +> **Por favor asegúrese de mantener un solo _pull request_ activo por equipo**. En caso de abrir uno nuevo, cerrar el anterior. + +## Sobre la implementación + +Ponga todo su código e instrucciones necesarias en la carpeta `src`. Más información en [`src/Readme.md`](src/Readme.md). + +## Sobre la documentación + +Usted debe presentar un reporte escrito documentando el proceso de construcción de su compilador y los detalles más importantes de su funcionamiento. Más información en [`doc/Readme.md`](doc/Readme.md). + +## Sobre los equipos de desarrollo + +Para desarrollar el compilador del lenguaje COOL se trabajará en equipos de 2 o 3 integrantes. + +## Sobre los casos de prueba + +La carpeta `tests` contiene todos los casos de prueba que son obligatorios de pasar para que su proyecto tenga derecho a ser evaluado. + +Estos tests se ejecutan automáticamente cada vez que hace un _pull request_ al repositorio `matcom/cool-compiler-2020`. Solo aquellos proyectos que pasen todas las pruebas con éxito serán evaluados. + +Para ejecutar las pruebas localmente, debe tener instalado `Python 3.7`, `pip` y `make` (normalmente viene con Linux). Ejecute: + +```bash +$ pip install -r requirements.txt +$ cd src +$ make test +``` + +Si desea configurar su repositorio en Github para que ejecute automáticamente las pruebas en cada commit, siga las instrucciones en [travis-ci.org](https://travis-ci.org) para registrarse y activar su repositorio. El archivo `.travis.yml` que se encuentra en este repositorio ya contiene todas las instrucciones necesarias para que funcione la integracion con Travis-CI. diff --git a/.fuse_hidden00001c2e00000003 b/.fuse_hidden00001c2e00000003 new file mode 100644 index 00000000..5b1cbbce --- /dev/null +++ b/.fuse_hidden00001c2e00000003 @@ -0,0 +1,183 @@ +# COOL: Proyecto de Compilación + + +[![Build Status](https://travis-ci.org/matcom/cool-compiler-2020.svg?branch=master)](https://travis-ci.org/matcom/cool-compiler-2020) + +> Proyecto base para el compilador de 4to año en Ciencia de la Computación. + +## Generalidades + +La evaluación de la asignatura Complementos de Compilación, inscrita en el programa del 4to año de la Licenciatura en Ciencia de la Computación de la Facultad de Matemática y Computación de la +Universidad de La Habana, consiste este curso en la implementación de un compilador completamente +funcional para el lenguaje _COOL_. + +_COOL (Classroom Object-Oriented Language)_ es un pequeño lenguaje que puede ser implementado con un esfuerzo razonable en un semestre del curso. Aun así, _COOL_ mantiene muchas de las características de los lenguajes de programación modernos, incluyendo orientación a objetos, tipado estático y manejo automático de memoria. + +## Cómo comenzar (o terminar) + +El proyecto de Compilación será recogido y evaluado **únicamente** a través de Github. Es imprescindible tener una cuenta de Github para cada participante, y que su proyecto esté correctamente hosteado en esta plataforma. A continuación le damos las instrucciones mínimas necesarias para ello: + +### 1. Si no lo han hecho ya, regístrense en [Github](https://github.com) todos los miembros del equipo (es gratis). + +![](img/img1.png) + +### 2. Haga click en el botón **Fork** para hacer una copia del proyecto en el perfil de Github de uno de los miembros. + +Opcionalmente pueden [crear una organización](https://github.com/organizations/new) y copiar el proyecto en el perfil de la misma. + +![](img/img2.png) + +### 3. Una vez hecho esto, tendrá un nuevo repositorio en `github/`. + +Revise que el repositorio de su equipo está en su perfil. +En este ejemplo se ha copiado a la cuenta de `github.com/apiad`. + +Debe indicar bajo el nombre del repositorio: `"forked from matcom/cool-compiler-2020"`. + +![](img/img3.png) + +### 4. Clone este proyecto en un repositorio local. + +Busque la URL de su proyecto en la interfaz web de Github. + +Asegúrese de clonar **su copia** y no el proyecto original en `matcom/cool-compiler-2020`. + +![](img/img4.png) + +```bash +$ git clone git@github.com:/cool-compiler-2020.git +``` + +> Donde `` es posiblemente el nombre de su equipo o del miembro donde se hizo el _fork_. + +A partir de este punto debe tener un proyecto `cool-compiler-2020` local. +El siguiente paso depende de si usted ya tiene su código versionado con `git` o no. + +### 5.A. Si tiene su proyecto en git (y no quiere perder la historia): + +#### 5.1. Mezcle hacia el nuevo respositorio su repositorio anterior: + +```bash +$ cd cool-compiler-2020 +$ git pull --allow-unrelated-histories master +``` + +#### 5.2. Organice su proyecto, código fuente y documentación, de acuerdo a las instrucciones de este documento, y vuelva a hacer `commit`. + +```bash +$ mv src/ +$ git add . +$ git commit -a -m "Mezclado con el proyecto base" +``` + +#### 5.3. A partir de este punto puede hacer `push` cada vez que tenga cambios que subir. + +```bash +$ git push origin master +``` + +### 5.B Si aún no tiene su proyecto en git (o no le importa la historia): + +#### 5.1. Simplemente copie el código de su proyecto en la carpeta correspondiente `src` y haga su primer commit. + +```bash +$ mv src/ +$ git commit -a -m "Hello Git!" +``` + +#### 5.2. A partir de este punto asegúrese de hacer `commit` de forma regular para mantener su repositorio actualizado. + +Si necesita saber más sobre `git`, todo lo imprescindible está en [esta guía](doc/github-git-cheat-sheet.pdf). + +#### 5.3. A partir de este punto puede hacer `push` cada vez que tenga cambios que subir. + +```bash +$ git push origin master +``` + +## Entregas + +En este proyecto se realizarán entregas parciales a lo largo del curso. Para realizar una entrega, siga los siguientes pasos. + +### 1. Cree un pull request al proyecto original desde su copia. + +![](img/img5.png) + +### 2. Asegúrese de tener la siguiente configuración antes de hacer click en **Create pull request**. + +- **base repository**: `matcom/cool-compiler-2020` (repositorio original) + - **branch**: `entrega-parser` +- **head repository**: `/cool-compiler-2020` (repositorio propio) + - **branch**: `master` (o la que corresponda) + +> Asegúrese que se indica **Able to merge**. De lo contrario, existen cambios en el repositorio original que usted no tiene, y debe actualizarlos. + +> **NOTA**: Asegúrese que el _pull request_ se hace a la rama `entrega-parser`. + +![](img/img6.png) + +### 3. Introduzca un título y descripción adecuados, y haga click en **Create pull request**. + +![](img/img7.png) + +### 4. Espere mientras se ejecutan las pruebas. + +Verá la indicación **Some checks haven't completed yet**. + +![](img/img8.png) + +Es posible que tenga que actualizar los cambios que se hayan hecho en el repositorio original, por ejemplo, si se han agregado nuevos tests. En este caso obtendrá el siguiente mensaje: + +> **This branch is out-of-date with base branch** + +Haga click en **Update branch** y siga las instrucciones. + +![](img/img12.png) + +### 5. Verifique que no hubo errores en las pruebas. + +Si ve el mensaje **All checks have failed**, significa que su código no pasó las pruebas. + +![](img/img9.png) + +Para ver los resultados de las pruebas haga click en el link **Details** junto al ícono de `continuous-integration/travis-ci/pr`, o visite [este link](https://travis-ci.org/matcom/cool-compiler-2020/pull_requests) y busque su _pull request_. + +![](img/img11.png) + +Haciendo click en el título de su _pull request_ (ej. **PR #1**) podrá ver los detalles de ejecución de todas las pruebas, así como las excepciones lanzadas. + +![](img/img10.png) + +### 6. Arregle los errores y repita el paso 5 hasta que todas las pruebas pasen. + +Para cualquier modificación que haga a su proyecto, haga _commit_ y _push_ para **su repositorio personal** y automáticamente se actualizará el estado del _pull request_ y se volverán a ejecutar las pruebas. **No es necesario** abrir un _pull request_ nuevo por cada entrega, sino actualizar el anterior. + +> **Por favor asegúrese de mantener un solo _pull request_ activo por equipo**. En caso de abrir uno nuevo, cerrar el anterior. + +## Sobre la implementación + +Ponga todo su código e instrucciones necesarias en la carpeta `src`. Más información en [`src/Readme.md`](src/Readme.md). + +## Sobre la documentación + +Usted debe presentar un reporte escrito documentando el proceso de construcción de su compilador y los detalles más importantes de su funcionamiento. Más información en [`doc/Readme.md`](doc/Readme.md). + +## Sobre los equipos de desarrollo + +Para desarrollar el compilador del lenguaje COOL se trabajará en equipos de 2 o 3 integrantes. + +## Sobre los casos de prueba + +La carpeta `tests` contiene todos los casos de prueba que son obligatorios de pasar para que su proyecto tenga derecho a ser evaluado. + +Estos tests se ejecutan automáticamente cada vez que hace un _pull request_ al repositorio `matcom/cool-compiler-2020`. Solo aquellos proyectos que pasen todas las pruebas con éxito serán evaluados. + +Para ejecutar las pruebas localmente, debe tener instalado `Python 3.7`, `pip` y `make` (normalmente viene con Linux). Ejecute: + +```bash +$ pip install -r requirements.txt +$ cd src +$ make test +``` + +Si desea configurar su repositorio en Github para que ejecute automáticamente las pruebas en cada commit, siga las instrucciones en [travis-ci.org](https://travis-ci.org) para registrarse y activar su repositorio. El archivo `.travis.yml` que se encuentra en este repositorio ya contiene todas las instrucciones necesarias para que funcione la integracion con Travis-CI. diff --git a/Pipfile b/Pipfile deleted file mode 100644 index 6ad89606..00000000 --- a/Pipfile +++ /dev/null @@ -1,12 +0,0 @@ -[[source]] -name = "pypi" -url = "https://pypi.org/simple" -verify_ssl = true - -[dev-packages] - -[packages] -ply = "*" - -[requires] -python_version = "3.7" diff --git a/Pipfile.lock b/Pipfile.lock deleted file mode 100644 index 8b110a67..00000000 --- a/Pipfile.lock +++ /dev/null @@ -1,29 +0,0 @@ -{ - "_meta": { - "hash": { - "sha256": "768c4b66d0ce858fbbf1b8a8998ffa9616166666555d0dc7bd1b92a9316518c8" - }, - "pipfile-spec": 6, - "requires": { - "python_version": "3.7" - }, - "sources": [ - { - "name": "pypi", - "url": "https://pypi.org/simple", - "verify_ssl": true - } - ] - }, - "default": { - "ply": { - "hashes": [ - "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", - "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce" - ], - "index": "pypi", - "version": "==3.11" - } - }, - "develop": {} -} diff --git a/src/arithmetic1.cl b/src/arithmetic1.cl deleted file mode 100644 index 5b1f7e9d..00000000 --- a/src/arithmetic1.cl +++ /dev/null @@ -1,19 +0,0 @@ -(* -No method name may be defined multiple times in -a class, and no attribute name may be defined multiple times in a class, but a method and an attribute -may have the same name. -*) - -class Main inherits IO { - main(): IO { out_string("hi!") }; - - main: IO <- out_string("bye!"); -}; - -class A { - x: Int <- 3; - - x(): String { "3" }; - - x(): String { ":)" }; -}; \ No newline at end of file diff --git a/src/codegen/__pycache__/__init__.cpython-37.pyc b/src/codegen/__pycache__/__init__.cpython-37.pyc index 2b523cd3e3d219d75f2e04481f1e7f6aa15dd569..78b86deb13460d1066c816b38abedf25266722cd 100644 GIT binary patch delta 20 acmaFO{+gZJiI diff --git a/src/codegen/visitors/__pycache__/cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/cil_visitor.cpython-37.pyc index c81593db7b389e8572fa910d30edbfe66616aba9..020c165550cda14ef315100a4ab345a7c1e6b4a9 100644 GIT binary patch delta 19 YcmeB3=t$sl;^pOH0D^MKja>iq0WK^Axc~qF delta 19 ZcmeB3=t$sl;^pOH0D>1h8@c}J0{}3Q1swnY diff --git a/src/cool_parser/output_parser/parselog.txt b/src/cool_parser/output_parser/parselog.txt index 363745e5..a87e0631 100644 --- a/src/cool_parser/output_parser/parselog.txt +++ b/src/cool_parser/output_parser/parselog.txt @@ -3912,3 +3912,3488 @@ yacc.py:2687: lesseq reduce using rule 47 (comp -> comp less op .) yacc.py:2687: equal reduce using rule 47 (comp -> comp less op .) yacc.py:2687: semi reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: cpar reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: arroba reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: dot reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: star reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: div reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: of reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: then reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: loop reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: comma reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: in reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: else reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: pool reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: ccur reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: fi reduce using rule 47 (comp -> comp less op .) + yacc.py:2687: plus shift and go to state 117 + yacc.py:2687: minus shift and go to state 118 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 47 (comp -> comp less op .) ] + yacc.py:2696: ! minus [ reduce using rule 47 (comp -> comp less op .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 157 + yacc.py:2563: + yacc.py:2565: (48) comp -> comp lesseq op . + yacc.py:2565: (51) op -> op . plus term + yacc.py:2565: (52) op -> op . minus term + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for plus resolved as shift + yacc.py:2666: ! shift/reduce conflict for minus resolved as shift + yacc.py:2687: less reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: lesseq reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: equal reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: semi reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: cpar reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: arroba reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: dot reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: star reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: div reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: of reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: then reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: loop reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: comma reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: in reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: else reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: pool reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: ccur reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: fi reduce using rule 48 (comp -> comp lesseq op .) + yacc.py:2687: plus shift and go to state 117 + yacc.py:2687: minus shift and go to state 118 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 48 (comp -> comp lesseq op .) ] + yacc.py:2696: ! minus [ reduce using rule 48 (comp -> comp lesseq op .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 158 + yacc.py:2563: + yacc.py:2565: (49) comp -> comp equal op . + yacc.py:2565: (51) op -> op . plus term + yacc.py:2565: (52) op -> op . minus term + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for plus resolved as shift + yacc.py:2666: ! shift/reduce conflict for minus resolved as shift + yacc.py:2687: less reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: lesseq reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: equal reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: semi reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: cpar reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: arroba reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: dot reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: star reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: div reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: of reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: then reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: loop reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: comma reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: in reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: else reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: pool reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: ccur reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: fi reduce using rule 49 (comp -> comp equal op .) + yacc.py:2687: plus shift and go to state 117 + yacc.py:2687: minus shift and go to state 118 + yacc.py:2689: + yacc.py:2696: ! plus [ reduce using rule 49 (comp -> comp equal op .) ] + yacc.py:2696: ! minus [ reduce using rule 49 (comp -> comp equal op .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 159 + yacc.py:2563: + yacc.py:2565: (51) op -> op plus term . + yacc.py:2565: (54) term -> term . star base_call + yacc.py:2565: (55) term -> term . div base_call + yacc.py:2565: (57) term -> term . star error + yacc.py:2565: (58) term -> term . div error + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for star resolved as shift + yacc.py:2666: ! shift/reduce conflict for div resolved as shift + yacc.py:2687: plus reduce using rule 51 (op -> op plus term .) + yacc.py:2687: minus reduce using rule 51 (op -> op plus term .) + yacc.py:2687: less reduce using rule 51 (op -> op plus term .) + yacc.py:2687: lesseq reduce using rule 51 (op -> op plus term .) + yacc.py:2687: equal reduce using rule 51 (op -> op plus term .) + yacc.py:2687: semi reduce using rule 51 (op -> op plus term .) + yacc.py:2687: cpar reduce using rule 51 (op -> op plus term .) + yacc.py:2687: arroba reduce using rule 51 (op -> op plus term .) + yacc.py:2687: dot reduce using rule 51 (op -> op plus term .) + yacc.py:2687: of reduce using rule 51 (op -> op plus term .) + yacc.py:2687: then reduce using rule 51 (op -> op plus term .) + yacc.py:2687: loop reduce using rule 51 (op -> op plus term .) + yacc.py:2687: comma reduce using rule 51 (op -> op plus term .) + yacc.py:2687: in reduce using rule 51 (op -> op plus term .) + yacc.py:2687: else reduce using rule 51 (op -> op plus term .) + yacc.py:2687: pool reduce using rule 51 (op -> op plus term .) + yacc.py:2687: ccur reduce using rule 51 (op -> op plus term .) + yacc.py:2687: fi reduce using rule 51 (op -> op plus term .) + yacc.py:2687: star shift and go to state 119 + yacc.py:2687: div shift and go to state 120 + yacc.py:2689: + yacc.py:2696: ! star [ reduce using rule 51 (op -> op plus term .) ] + yacc.py:2696: ! div [ reduce using rule 51 (op -> op plus term .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 160 + yacc.py:2563: + yacc.py:2565: (52) op -> op minus term . + yacc.py:2565: (54) term -> term . star base_call + yacc.py:2565: (55) term -> term . div base_call + yacc.py:2565: (57) term -> term . star error + yacc.py:2565: (58) term -> term . div error + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for star resolved as shift + yacc.py:2666: ! shift/reduce conflict for div resolved as shift + yacc.py:2687: plus reduce using rule 52 (op -> op minus term .) + yacc.py:2687: minus reduce using rule 52 (op -> op minus term .) + yacc.py:2687: less reduce using rule 52 (op -> op minus term .) + yacc.py:2687: lesseq reduce using rule 52 (op -> op minus term .) + yacc.py:2687: equal reduce using rule 52 (op -> op minus term .) + yacc.py:2687: semi reduce using rule 52 (op -> op minus term .) + yacc.py:2687: cpar reduce using rule 52 (op -> op minus term .) + yacc.py:2687: arroba reduce using rule 52 (op -> op minus term .) + yacc.py:2687: dot reduce using rule 52 (op -> op minus term .) + yacc.py:2687: of reduce using rule 52 (op -> op minus term .) + yacc.py:2687: then reduce using rule 52 (op -> op minus term .) + yacc.py:2687: loop reduce using rule 52 (op -> op minus term .) + yacc.py:2687: comma reduce using rule 52 (op -> op minus term .) + yacc.py:2687: in reduce using rule 52 (op -> op minus term .) + yacc.py:2687: else reduce using rule 52 (op -> op minus term .) + yacc.py:2687: pool reduce using rule 52 (op -> op minus term .) + yacc.py:2687: ccur reduce using rule 52 (op -> op minus term .) + yacc.py:2687: fi reduce using rule 52 (op -> op minus term .) + yacc.py:2687: star shift and go to state 119 + yacc.py:2687: div shift and go to state 120 + yacc.py:2689: + yacc.py:2696: ! star [ reduce using rule 52 (op -> op minus term .) ] + yacc.py:2696: ! div [ reduce using rule 52 (op -> op minus term .) ] + yacc.py:2700: + yacc.py:2561: + yacc.py:2562:state 161 + yacc.py:2563: + yacc.py:2565: (54) term -> term star base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: div reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: plus reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: minus reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: less reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: lesseq reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: equal reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: semi reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: cpar reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: arroba reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: dot reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: of reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: then reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: loop reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: comma reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: in reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: else reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: pool reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: ccur reduce using rule 54 (term -> term star base_call .) + yacc.py:2687: fi reduce using rule 54 (term -> term star base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 162 + yacc.py:2563: + yacc.py:2565: (57) term -> term star error . + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2687: star reduce using rule 57 (term -> term star error .) + yacc.py:2687: div reduce using rule 57 (term -> term star error .) + yacc.py:2687: plus reduce using rule 57 (term -> term star error .) + yacc.py:2687: minus reduce using rule 57 (term -> term star error .) + yacc.py:2687: less reduce using rule 57 (term -> term star error .) + yacc.py:2687: lesseq reduce using rule 57 (term -> term star error .) + yacc.py:2687: equal reduce using rule 57 (term -> term star error .) + yacc.py:2687: semi reduce using rule 57 (term -> term star error .) + yacc.py:2687: cpar reduce using rule 57 (term -> term star error .) + yacc.py:2687: dot reduce using rule 57 (term -> term star error .) + yacc.py:2687: of reduce using rule 57 (term -> term star error .) + yacc.py:2687: then reduce using rule 57 (term -> term star error .) + yacc.py:2687: loop reduce using rule 57 (term -> term star error .) + yacc.py:2687: comma reduce using rule 57 (term -> term star error .) + yacc.py:2687: in reduce using rule 57 (term -> term star error .) + yacc.py:2687: else reduce using rule 57 (term -> term star error .) + yacc.py:2687: pool reduce using rule 57 (term -> term star error .) + yacc.py:2687: ccur reduce using rule 57 (term -> term star error .) + yacc.py:2687: fi reduce using rule 57 (term -> term star error .) + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2696: ! arroba [ reduce using rule 57 (term -> term star error .) ] + yacc.py:2700: + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 163 + yacc.py:2563: + yacc.py:2565: (55) term -> term div base_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: div reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: plus reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: minus reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: less reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: lesseq reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: equal reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: semi reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: cpar reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: arroba reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: dot reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: of reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: then reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: loop reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: comma reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: in reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: else reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: pool reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: ccur reduce using rule 55 (term -> term div base_call .) + yacc.py:2687: fi reduce using rule 55 (term -> term div base_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 164 + yacc.py:2563: + yacc.py:2565: (58) term -> term div error . + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2666: ! shift/reduce conflict for arroba resolved as shift + yacc.py:2687: star reduce using rule 58 (term -> term div error .) + yacc.py:2687: div reduce using rule 58 (term -> term div error .) + yacc.py:2687: plus reduce using rule 58 (term -> term div error .) + yacc.py:2687: minus reduce using rule 58 (term -> term div error .) + yacc.py:2687: less reduce using rule 58 (term -> term div error .) + yacc.py:2687: lesseq reduce using rule 58 (term -> term div error .) + yacc.py:2687: equal reduce using rule 58 (term -> term div error .) + yacc.py:2687: semi reduce using rule 58 (term -> term div error .) + yacc.py:2687: cpar reduce using rule 58 (term -> term div error .) + yacc.py:2687: dot reduce using rule 58 (term -> term div error .) + yacc.py:2687: of reduce using rule 58 (term -> term div error .) + yacc.py:2687: then reduce using rule 58 (term -> term div error .) + yacc.py:2687: loop reduce using rule 58 (term -> term div error .) + yacc.py:2687: comma reduce using rule 58 (term -> term div error .) + yacc.py:2687: in reduce using rule 58 (term -> term div error .) + yacc.py:2687: else reduce using rule 58 (term -> term div error .) + yacc.py:2687: pool reduce using rule 58 (term -> term div error .) + yacc.py:2687: ccur reduce using rule 58 (term -> term div error .) + yacc.py:2687: fi reduce using rule 58 (term -> term div error .) + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2696: ! arroba [ reduce using rule 58 (term -> term div error .) ] + yacc.py:2700: + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 165 + yacc.py:2563: + yacc.py:2565: (59) base_call -> factor arroba type . dot func_call + yacc.py:2566: + yacc.py:2687: dot shift and go to state 193 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 166 + yacc.py:2563: + yacc.py:2565: (62) base_call -> factor arroba error . dot func_call + yacc.py:2566: + yacc.py:2687: dot shift and go to state 194 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 167 + yacc.py:2563: + yacc.py:2565: (65) factor -> factor dot func_call . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: dot reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: star reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: div reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: plus reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: minus reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: less reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: lesseq reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: equal reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: semi reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: cpar reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: of reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: then reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: loop reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: comma reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: in reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: else reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: pool reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: ccur reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2687: fi reduce using rule 65 (factor -> factor dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 168 + yacc.py:2563: + yacc.py:2565: (88) func_call -> id . opar args cpar + yacc.py:2565: (89) func_call -> id . opar error cpar + yacc.py:2566: + yacc.py:2687: opar shift and go to state 113 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 169 + yacc.py:2563: + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2566: + yacc.py:2687: opar shift and go to state 195 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 170 + yacc.py:2563: + yacc.py:2565: (64) factor -> opar expr cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: dot reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: star reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: div reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: plus reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: minus reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: less reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: lesseq reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: equal reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: semi reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: cpar reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: of reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: then reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: loop reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: comma reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: in reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: else reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: pool reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: ccur reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2687: fi reduce using rule 64 (factor -> opar expr cpar .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 171 + yacc.py:2563: + yacc.py:2565: (70) factor -> let let_list in . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 196 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 172 + yacc.py:2563: + yacc.py:2565: (37) let_list -> let_assign comma . let_list + yacc.py:2565: (36) let_list -> . let_assign + yacc.py:2565: (37) let_list -> . let_assign comma let_list + yacc.py:2565: (38) let_assign -> . param larrow expr + yacc.py:2565: (39) let_assign -> . param + yacc.py:2565: (35) param -> . id colon type + yacc.py:2566: + yacc.py:2687: id shift and go to state 46 + yacc.py:2689: + yacc.py:2714: let_assign shift and go to state 129 + yacc.py:2714: let_list shift and go to state 197 + yacc.py:2714: param shift and go to state 130 + yacc.py:2561: + yacc.py:2562:state 173 + yacc.py:2563: + yacc.py:2565: (38) let_assign -> param larrow . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 198 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 174 + yacc.py:2563: + yacc.py:2565: (71) factor -> case expr of . cases_list esac + yacc.py:2565: (40) cases_list -> . casep semi + yacc.py:2565: (41) cases_list -> . casep semi cases_list + yacc.py:2565: (42) cases_list -> . error cases_list + yacc.py:2565: (43) cases_list -> . error semi + yacc.py:2565: (44) casep -> . id colon type rarrow expr + yacc.py:2566: + yacc.py:2687: error shift and go to state 201 + yacc.py:2687: id shift and go to state 202 + yacc.py:2689: + yacc.py:2714: cases_list shift and go to state 199 + yacc.py:2714: casep shift and go to state 200 + yacc.py:2561: + yacc.py:2562:state 175 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr then . expr else expr fi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 203 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 176 + yacc.py:2563: + yacc.py:2565: (73) factor -> while expr loop . expr pool + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 204 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 177 + yacc.py:2563: + yacc.py:2565: (77) atom -> ocur block ccur . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: dot reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: star reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: div reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: plus reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: minus reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: less reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: lesseq reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: equal reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: semi reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: cpar reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: of reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: then reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: loop reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: comma reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: in reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: else reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: pool reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: ccur reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2687: fi reduce using rule 77 (atom -> ocur block ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 178 + yacc.py:2563: + yacc.py:2565: (80) atom -> ocur block error . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: dot reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: star reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: div reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: plus reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: minus reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: less reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: lesseq reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: equal reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: semi reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: cpar reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: of reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: then reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: loop reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: comma reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: in reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: else reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: pool reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: ccur reduce using rule 80 (atom -> ocur block error .) + yacc.py:2687: fi reduce using rule 80 (atom -> ocur block error .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 179 + yacc.py:2563: + yacc.py:2565: (79) atom -> ocur error ccur . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: dot reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: star reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: div reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: plus reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: minus reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: less reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: lesseq reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: equal reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: semi reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: cpar reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: of reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: then reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: loop reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: comma reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: in reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: else reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: pool reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: ccur reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2687: fi reduce using rule 79 (atom -> ocur error ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 180 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur . expr ccur + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 205 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 181 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur . expr ccur + yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur . error ccur + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 207 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 206 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 182 + yacc.py:2563: + yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur . expr ccur + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 208 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 183 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur . expr ccur + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 209 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 184 + yacc.py:2563: + yacc.py:2565: (61) base_call -> error arroba type dot . func_call + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 168 + yacc.py:2687: error shift and go to state 169 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 210 + yacc.py:2561: + yacc.py:2562:state 185 + yacc.py:2563: + yacc.py:2565: (95) arg_list -> error . arg_list + yacc.py:2565: (86) block -> error . block + yacc.py:2565: (87) block -> error . semi + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: semi shift and go to state 142 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 185 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: arg_list shift and go to state 186 + yacc.py:2714: block shift and go to state 141 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: expr shift and go to state 187 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 186 + yacc.py:2563: + yacc.py:2565: (95) arg_list -> error arg_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 95 (arg_list -> error arg_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 187 + yacc.py:2563: + yacc.py:2565: (93) arg_list -> expr . + yacc.py:2565: (94) arg_list -> expr . comma arg_list + yacc.py:2565: (84) block -> expr . semi + yacc.py:2565: (85) block -> expr . semi block + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 93 (arg_list -> expr .) + yacc.py:2687: comma shift and go to state 189 + yacc.py:2687: semi shift and go to state 151 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 188 + yacc.py:2563: + yacc.py:2565: (90) func_call -> error opar args cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: dot reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: star reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: div reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: plus reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: minus reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: less reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: lesseq reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: equal reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: semi reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: cpar reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: of reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: then reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: loop reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: comma reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: in reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: else reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: pool reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: ccur reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2687: fi reduce using rule 90 (func_call -> error opar args cpar .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 189 + yacc.py:2563: + yacc.py:2565: (94) arg_list -> expr comma . arg_list + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 145 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 155 + yacc.py:2714: arg_list shift and go to state 211 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 190 + yacc.py:2563: + yacc.py:2565: (85) block -> expr semi block . + yacc.py:2566: + yacc.py:2687: ccur reduce using rule 85 (block -> expr semi block .) + yacc.py:2687: error reduce using rule 85 (block -> expr semi block .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 191 + yacc.py:2563: + yacc.py:2565: (88) func_call -> id opar args cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: dot reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: star reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: div reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: plus reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: minus reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: less reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: lesseq reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: equal reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: semi reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: cpar reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: of reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: then reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: loop reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: comma reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: in reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: else reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: pool reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: ccur reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2687: fi reduce using rule 88 (func_call -> id opar args cpar .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 192 + yacc.py:2563: + yacc.py:2565: (89) func_call -> id opar error cpar . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: dot reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: star reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: div reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: plus reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: minus reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: less reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: lesseq reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: equal reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: semi reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: cpar reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: of reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: then reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: loop reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: comma reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: in reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: else reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: pool reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: ccur reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2687: fi reduce using rule 89 (func_call -> id opar error cpar .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 193 + yacc.py:2563: + yacc.py:2565: (59) base_call -> factor arroba type dot . func_call + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 168 + yacc.py:2687: error shift and go to state 169 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 212 + yacc.py:2561: + yacc.py:2562:state 194 + yacc.py:2563: + yacc.py:2565: (62) base_call -> factor arroba error dot . func_call + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 168 + yacc.py:2687: error shift and go to state 169 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 213 + yacc.py:2561: + yacc.py:2562:state 195 + yacc.py:2563: + yacc.py:2565: (90) func_call -> error opar . args cpar + yacc.py:2565: (91) args -> . arg_list + yacc.py:2565: (92) args -> . arg_list_empty + yacc.py:2565: (93) arg_list -> . expr + yacc.py:2565: (94) arg_list -> . expr comma arg_list + yacc.py:2565: (95) arg_list -> . error arg_list + yacc.py:2565: (96) arg_list_empty -> . epsilon + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (2) epsilon -> . + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: error shift and go to state 145 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: cpar reduce using rule 2 (epsilon -> .) + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: args shift and go to state 146 + yacc.py:2714: arg_list shift and go to state 148 + yacc.py:2714: arg_list_empty shift and go to state 149 + yacc.py:2714: expr shift and go to state 155 + yacc.py:2714: epsilon shift and go to state 150 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 196 + yacc.py:2563: + yacc.py:2565: (70) factor -> let let_list in expr . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: dot reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: star reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: div reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: plus reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: minus reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: less reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: lesseq reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: equal reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: semi reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: cpar reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: of reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: then reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: loop reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: comma reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: in reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: else reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: pool reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: ccur reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2687: fi reduce using rule 70 (factor -> let let_list in expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 197 + yacc.py:2563: + yacc.py:2565: (37) let_list -> let_assign comma let_list . + yacc.py:2566: + yacc.py:2687: in reduce using rule 37 (let_list -> let_assign comma let_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 198 + yacc.py:2563: + yacc.py:2565: (38) let_assign -> param larrow expr . + yacc.py:2566: + yacc.py:2687: comma reduce using rule 38 (let_assign -> param larrow expr .) + yacc.py:2687: in reduce using rule 38 (let_assign -> param larrow expr .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 199 + yacc.py:2563: + yacc.py:2565: (71) factor -> case expr of cases_list . esac + yacc.py:2566: + yacc.py:2687: esac shift and go to state 214 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 200 + yacc.py:2563: + yacc.py:2565: (40) cases_list -> casep . semi + yacc.py:2565: (41) cases_list -> casep . semi cases_list + yacc.py:2566: + yacc.py:2687: semi shift and go to state 215 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 201 + yacc.py:2563: + yacc.py:2565: (42) cases_list -> error . cases_list + yacc.py:2565: (43) cases_list -> error . semi + yacc.py:2565: (40) cases_list -> . casep semi + yacc.py:2565: (41) cases_list -> . casep semi cases_list + yacc.py:2565: (42) cases_list -> . error cases_list + yacc.py:2565: (43) cases_list -> . error semi + yacc.py:2565: (44) casep -> . id colon type rarrow expr + yacc.py:2566: + yacc.py:2687: semi shift and go to state 217 + yacc.py:2687: error shift and go to state 201 + yacc.py:2687: id shift and go to state 202 + yacc.py:2689: + yacc.py:2714: cases_list shift and go to state 216 + yacc.py:2714: casep shift and go to state 200 + yacc.py:2561: + yacc.py:2562:state 202 + yacc.py:2563: + yacc.py:2565: (44) casep -> id . colon type rarrow expr + yacc.py:2566: + yacc.py:2687: colon shift and go to state 218 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 203 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr then expr . else expr fi + yacc.py:2566: + yacc.py:2687: else shift and go to state 219 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 204 + yacc.py:2563: + yacc.py:2565: (73) factor -> while expr loop expr . pool + yacc.py:2566: + yacc.py:2687: pool shift and go to state 220 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 205 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 221 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 206 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 222 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 207 + yacc.py:2563: + yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur error . ccur + yacc.py:2565: (61) base_call -> error . arroba type dot func_call + yacc.py:2565: (78) atom -> error . block ccur + yacc.py:2565: (90) func_call -> error . opar args cpar + yacc.py:2565: (84) block -> . expr semi + yacc.py:2565: (85) block -> . expr semi block + yacc.py:2565: (86) block -> . error block + yacc.py:2565: (87) block -> . error semi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 223 + yacc.py:2687: arroba shift and go to state 108 + yacc.py:2687: opar shift and go to state 110 + yacc.py:2687: error shift and go to state 107 + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: block shift and go to state 109 + yacc.py:2714: expr shift and go to state 111 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 208 + yacc.py:2563: + yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 224 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 209 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur expr . ccur + yacc.py:2566: + yacc.py:2687: ccur shift and go to state 225 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 210 + yacc.py:2563: + yacc.py:2565: (61) base_call -> error arroba type dot func_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: div reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: plus reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: minus reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: less reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: lesseq reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: equal reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: semi reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: cpar reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: arroba reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: dot reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: of reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: then reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: loop reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: comma reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: in reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: else reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: pool reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: ccur reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2687: fi reduce using rule 61 (base_call -> error arroba type dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 211 + yacc.py:2563: + yacc.py:2565: (94) arg_list -> expr comma arg_list . + yacc.py:2566: + yacc.py:2687: cpar reduce using rule 94 (arg_list -> expr comma arg_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 212 + yacc.py:2563: + yacc.py:2565: (59) base_call -> factor arroba type dot func_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: div reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: plus reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: minus reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: less reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: lesseq reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: equal reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: semi reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: cpar reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: arroba reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: dot reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: of reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: then reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: loop reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: comma reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: in reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: else reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: pool reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: ccur reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2687: fi reduce using rule 59 (base_call -> factor arroba type dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 213 + yacc.py:2563: + yacc.py:2565: (62) base_call -> factor arroba error dot func_call . + yacc.py:2566: + yacc.py:2687: star reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: div reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: plus reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: minus reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: less reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: lesseq reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: equal reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: semi reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: cpar reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: arroba reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: dot reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: of reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: then reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: loop reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: comma reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: in reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: else reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: pool reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: ccur reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2687: fi reduce using rule 62 (base_call -> factor arroba error dot func_call .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 214 + yacc.py:2563: + yacc.py:2565: (71) factor -> case expr of cases_list esac . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: dot reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: star reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: div reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: plus reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: minus reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: less reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: lesseq reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: equal reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: semi reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: cpar reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: of reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: then reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: loop reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: comma reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: in reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: else reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: pool reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: ccur reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2687: fi reduce using rule 71 (factor -> case expr of cases_list esac .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 215 + yacc.py:2563: + yacc.py:2565: (40) cases_list -> casep semi . + yacc.py:2565: (41) cases_list -> casep semi . cases_list + yacc.py:2565: (40) cases_list -> . casep semi + yacc.py:2565: (41) cases_list -> . casep semi cases_list + yacc.py:2565: (42) cases_list -> . error cases_list + yacc.py:2565: (43) cases_list -> . error semi + yacc.py:2565: (44) casep -> . id colon type rarrow expr + yacc.py:2566: + yacc.py:2687: esac reduce using rule 40 (cases_list -> casep semi .) + yacc.py:2687: error shift and go to state 201 + yacc.py:2687: id shift and go to state 202 + yacc.py:2689: + yacc.py:2714: casep shift and go to state 200 + yacc.py:2714: cases_list shift and go to state 226 + yacc.py:2561: + yacc.py:2562:state 216 + yacc.py:2563: + yacc.py:2565: (42) cases_list -> error cases_list . + yacc.py:2566: + yacc.py:2687: esac reduce using rule 42 (cases_list -> error cases_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 217 + yacc.py:2563: + yacc.py:2565: (43) cases_list -> error semi . + yacc.py:2566: + yacc.py:2687: esac reduce using rule 43 (cases_list -> error semi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 218 + yacc.py:2563: + yacc.py:2565: (44) casep -> id colon . type rarrow expr + yacc.py:2566: + yacc.py:2687: type shift and go to state 227 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 219 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr then expr else . expr fi + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 228 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 220 + yacc.py:2563: + yacc.py:2565: (73) factor -> while expr loop expr pool . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: dot reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: star reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: div reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: plus reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: minus reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: less reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: lesseq reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: equal reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: semi reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: cpar reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: of reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: then reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: loop reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: comma reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: in reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: else reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: pool reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: ccur reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2687: fi reduce using rule 73 (factor -> while expr loop expr pool .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 221 + yacc.py:2563: + yacc.py:2565: (26) def_func -> error opar formals cpar colon type ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 26 (def_func -> error opar formals cpar colon type ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 222 + yacc.py:2563: + yacc.py:2565: (25) def_func -> id opar formals cpar colon type ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 25 (def_func -> id opar formals cpar colon type ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 223 + yacc.py:2563: + yacc.py:2565: (29) def_func -> id opar formals cpar colon type ocur error ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 29 (def_func -> id opar formals cpar colon type ocur error ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 224 + yacc.py:2563: + yacc.py:2565: (28) def_func -> id opar formals cpar colon error ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 28 (def_func -> id opar formals cpar colon error ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 225 + yacc.py:2563: + yacc.py:2565: (27) def_func -> id opar error cpar colon type ocur expr ccur . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 27 (def_func -> id opar error cpar colon type ocur expr ccur .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 226 + yacc.py:2563: + yacc.py:2565: (41) cases_list -> casep semi cases_list . + yacc.py:2566: + yacc.py:2687: esac reduce using rule 41 (cases_list -> casep semi cases_list .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 227 + yacc.py:2563: + yacc.py:2565: (44) casep -> id colon type . rarrow expr + yacc.py:2566: + yacc.py:2687: rarrow shift and go to state 229 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 228 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr then expr else expr . fi + yacc.py:2566: + yacc.py:2687: fi shift and go to state 230 + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 229 + yacc.py:2563: + yacc.py:2565: (44) casep -> id colon type rarrow . expr + yacc.py:2565: (45) expr -> . id larrow expr + yacc.py:2565: (46) expr -> . comp + yacc.py:2565: (47) comp -> . comp less op + yacc.py:2565: (48) comp -> . comp lesseq op + yacc.py:2565: (49) comp -> . comp equal op + yacc.py:2565: (50) comp -> . op + yacc.py:2565: (51) op -> . op plus term + yacc.py:2565: (52) op -> . op minus term + yacc.py:2565: (53) op -> . term + yacc.py:2565: (54) term -> . term star base_call + yacc.py:2565: (55) term -> . term div base_call + yacc.py:2565: (56) term -> . base_call + yacc.py:2565: (57) term -> . term star error + yacc.py:2565: (58) term -> . term div error + yacc.py:2565: (59) base_call -> . factor arroba type dot func_call + yacc.py:2565: (60) base_call -> . factor + yacc.py:2565: (61) base_call -> . error arroba type dot func_call + yacc.py:2565: (62) base_call -> . factor arroba error dot func_call + yacc.py:2565: (63) factor -> . atom + yacc.py:2565: (64) factor -> . opar expr cpar + yacc.py:2565: (65) factor -> . factor dot func_call + yacc.py:2565: (66) factor -> . not expr + yacc.py:2565: (67) factor -> . func_call + yacc.py:2565: (68) factor -> . isvoid base_call + yacc.py:2565: (69) factor -> . nox base_call + yacc.py:2565: (70) factor -> . let let_list in expr + yacc.py:2565: (71) factor -> . case expr of cases_list esac + yacc.py:2565: (72) factor -> . if expr then expr else expr fi + yacc.py:2565: (73) factor -> . while expr loop expr pool + yacc.py:2565: (74) atom -> . num + yacc.py:2565: (75) atom -> . id + yacc.py:2565: (76) atom -> . new type + yacc.py:2565: (77) atom -> . ocur block ccur + yacc.py:2565: (78) atom -> . error block ccur + yacc.py:2565: (79) atom -> . ocur error ccur + yacc.py:2565: (80) atom -> . ocur block error + yacc.py:2565: (81) atom -> . true + yacc.py:2565: (82) atom -> . false + yacc.py:2565: (83) atom -> . string + yacc.py:2565: (88) func_call -> . id opar args cpar + yacc.py:2565: (89) func_call -> . id opar error cpar + yacc.py:2565: (90) func_call -> . error opar args cpar + yacc.py:2566: + yacc.py:2687: id shift and go to state 72 + yacc.py:2687: error shift and go to state 70 + yacc.py:2687: opar shift and go to state 80 + yacc.py:2687: not shift and go to state 81 + yacc.py:2687: isvoid shift and go to state 82 + yacc.py:2687: nox shift and go to state 83 + yacc.py:2687: let shift and go to state 84 + yacc.py:2687: case shift and go to state 85 + yacc.py:2687: if shift and go to state 86 + yacc.py:2687: while shift and go to state 87 + yacc.py:2687: num shift and go to state 88 + yacc.py:2687: new shift and go to state 89 + yacc.py:2687: ocur shift and go to state 90 + yacc.py:2687: true shift and go to state 91 + yacc.py:2687: false shift and go to state 92 + yacc.py:2687: string shift and go to state 93 + yacc.py:2689: + yacc.py:2714: expr shift and go to state 231 + yacc.py:2714: comp shift and go to state 73 + yacc.py:2714: op shift and go to state 74 + yacc.py:2714: term shift and go to state 75 + yacc.py:2714: base_call shift and go to state 76 + yacc.py:2714: factor shift and go to state 77 + yacc.py:2714: func_call shift and go to state 78 + yacc.py:2714: atom shift and go to state 79 + yacc.py:2561: + yacc.py:2562:state 230 + yacc.py:2563: + yacc.py:2565: (72) factor -> if expr then expr else expr fi . + yacc.py:2566: + yacc.py:2687: arroba reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: dot reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: star reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: div reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: plus reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: minus reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: less reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: lesseq reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: equal reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: semi reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: cpar reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: of reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: then reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: loop reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: comma reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: in reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: else reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: pool reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: ccur reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2687: fi reduce using rule 72 (factor -> if expr then expr else expr fi .) + yacc.py:2689: + yacc.py:2561: + yacc.py:2562:state 231 + yacc.py:2563: + yacc.py:2565: (44) casep -> id colon type rarrow expr . + yacc.py:2566: + yacc.py:2687: semi reduce using rule 44 (casep -> id colon type rarrow expr .) + yacc.py:2689: + yacc.py:3447:24 shift/reduce conflicts + yacc.py:3457: + yacc.py:3458:Conflicts: + yacc.py:3459: + yacc.py:3462:shift/reduce conflict for less in state 73 resolved as shift + yacc.py:3462:shift/reduce conflict for lesseq in state 73 resolved as shift + yacc.py:3462:shift/reduce conflict for equal in state 73 resolved as shift + yacc.py:3462:shift/reduce conflict for plus in state 74 resolved as shift + yacc.py:3462:shift/reduce conflict for minus in state 74 resolved as shift + yacc.py:3462:shift/reduce conflict for star in state 75 resolved as shift + yacc.py:3462:shift/reduce conflict for div in state 75 resolved as shift + yacc.py:3462:shift/reduce conflict for arroba in state 77 resolved as shift + yacc.py:3462:shift/reduce conflict for dot in state 77 resolved as shift + yacc.py:3462:shift/reduce conflict for ccur in state 141 resolved as shift + yacc.py:3462:shift/reduce conflict for cpar in state 147 resolved as shift + yacc.py:3462:shift/reduce conflict for error in state 151 resolved as shift + yacc.py:3462:shift/reduce conflict for plus in state 156 resolved as shift + yacc.py:3462:shift/reduce conflict for minus in state 156 resolved as shift + yacc.py:3462:shift/reduce conflict for plus in state 157 resolved as shift + yacc.py:3462:shift/reduce conflict for minus in state 157 resolved as shift + yacc.py:3462:shift/reduce conflict for plus in state 158 resolved as shift + yacc.py:3462:shift/reduce conflict for minus in state 158 resolved as shift + yacc.py:3462:shift/reduce conflict for star in state 159 resolved as shift + yacc.py:3462:shift/reduce conflict for div in state 159 resolved as shift + yacc.py:3462:shift/reduce conflict for star in state 160 resolved as shift + yacc.py:3462:shift/reduce conflict for div in state 160 resolved as shift + yacc.py:3462:shift/reduce conflict for arroba in state 162 resolved as shift + yacc.py:3462:shift/reduce conflict for arroba in state 164 resolved as shift + yacc.py: 362:PLY: PARSE DEBUG START + yacc.py: 410: + yacc.py: 411:State : 0 + yacc.py: 435:Stack : . LexToken(class,'class',13,377) + yacc.py: 445:Action : Shift and goto state 5 + yacc.py: 410: + yacc.py: 411:State : 5 + yacc.py: 435:Stack : class . LexToken(type,'A2I',13,383) + yacc.py: 445:Action : Shift and goto state 8 + yacc.py: 410: + yacc.py: 411:State : 8 + yacc.py: 435:Stack : class type . LexToken(ocur,'{',13,387) + yacc.py: 445:Action : Shift and goto state 10 + yacc.py: 410: + yacc.py: 411:State : 10 + yacc.py: 435:Stack : class type ocur . LexToken(id,'c2i',15,395) + yacc.py: 445:Action : Shift and goto state 19 + yacc.py: 410: + yacc.py: 411:State : 19 + yacc.py: 435:Stack : class type ocur id . LexToken(opar,'(',15,398) + yacc.py: 445:Action : Shift and goto state 32 + yacc.py: 410: + yacc.py: 411:State : 32 + yacc.py: 435:Stack : class type ocur id opar . LexToken(id,'char',15,399) + yacc.py: 445:Action : Shift and goto state 46 + yacc.py: 410: + yacc.py: 411:State : 46 + yacc.py: 435:Stack : class type ocur id opar id . LexToken(colon,':',15,404) + yacc.py: 445:Action : Shift and goto state 61 + yacc.py: 410: + yacc.py: 411:State : 61 + yacc.py: 435:Stack : class type ocur id opar id colon . LexToken(type,'String',15,406) + yacc.py: 445:Action : Shift and goto state 96 + yacc.py: 410: + yacc.py: 411:State : 96 + yacc.py: 435:Stack : class type ocur id opar id colon type . LexToken(cpar,')',15,412) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['char',':','String'] and goto state 44 + yacc.py: 506:Result : ((LexToken(id,'char',15,399), LexToken(ty ...) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : class type ocur id opar param . LexToken(cpar,')',15,412) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'char',15,399), LexToken(t ...) + yacc.py: 410: + yacc.py: 411:State : 42 + yacc.py: 430:Defaulted state 42: Reduce using 30 + yacc.py: 435:Stack : class type ocur id opar param_list . LexToken(cpar,')',15,412) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'char',15,399), LexToken(t ...) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',15,412) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : class type ocur id opar formals cpar . LexToken(colon,':',15,414) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon . LexToken(type,'Int',15,416) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type . LexToken(ocur,'{',15,420) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur . LexToken(if,'if',16,423) + yacc.py: 445:Action : Shift and goto state 86 + yacc.py: 410: + yacc.py: 411:State : 86 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if . LexToken(id,'char',16,426) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if id . LexToken(equal,'=',16,431) + yacc.py: 471:Action : Reduce rule [atom -> id] with ['char'] and goto state 79 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( string] with ['0'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( string] with ['1'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( string] with ['2'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( string] with ['3'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( string] with ['4'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( string] with ['5'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( string] with ['6'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( num] with [6.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( string] with ['7'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( num] with [7.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( string] with ['8'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( num] with [8.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( string] with ['9'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( nul -) - -set "VIRTUAL_ENV=C:\Lo&Lo\__UH\__VER\CC\Compiler\cool-compiler-2020\venv" - -if not defined PROMPT ( - set "PROMPT=$P$G" -) - -if defined _OLD_VIRTUAL_PROMPT ( - set "PROMPT=%_OLD_VIRTUAL_PROMPT%" -) - -if defined _OLD_VIRTUAL_PYTHONHOME ( - set "PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%" -) - -set "_OLD_VIRTUAL_PROMPT=%PROMPT%" -set "PROMPT=(venv) %PROMPT%" - -if defined PYTHONHOME ( - set "_OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME%" - set PYTHONHOME= -) - -if defined _OLD_VIRTUAL_PATH ( - set "PATH=%_OLD_VIRTUAL_PATH%" -) else ( - set "_OLD_VIRTUAL_PATH=%PATH%" -) - -set "PATH=%VIRTUAL_ENV%\Scripts;%PATH%" - -:END -if defined _OLD_CODEPAGE ( - "%SystemRoot%\System32\chcp.com" %_OLD_CODEPAGE% > nul - set "_OLD_CODEPAGE=" -) diff --git a/venv/Scripts/deactivate.bat b/venv/Scripts/deactivate.bat deleted file mode 100644 index 313c0791..00000000 --- a/venv/Scripts/deactivate.bat +++ /dev/null @@ -1,21 +0,0 @@ -@echo off - -if defined _OLD_VIRTUAL_PROMPT ( - set "PROMPT=%_OLD_VIRTUAL_PROMPT%" -) -set _OLD_VIRTUAL_PROMPT= - -if defined _OLD_VIRTUAL_PYTHONHOME ( - set "PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%" - set _OLD_VIRTUAL_PYTHONHOME= -) - -if defined _OLD_VIRTUAL_PATH ( - set "PATH=%_OLD_VIRTUAL_PATH%" -) - -set _OLD_VIRTUAL_PATH= - -set VIRTUAL_ENV= - -:END diff --git a/venv/Scripts/python.exe b/venv/Scripts/python.exe deleted file mode 100644 index 1b4f57f90933cc901c6c89e3f3fcefc29ac77e67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 515584 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�J~*0wjTZN<&T%C1%F${bfF*e&H*d$zOQk3A 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 diff --git a/venv/Scripts/pythonw.exe b/venv/Scripts/pythonw.exe deleted file mode 100644 index b0da33ac85db0f58b2a82ef615dafeccc9047332..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 515072 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ΠqJC2Sg`z( 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

cRW`G%+>K@C@xwk) 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 Date: Wed, 25 Nov 2020 11:19:54 -0700 Subject: [PATCH 47/60] Adding strings equality --- src/codegen/visitors/base_mips_visitor.py | 36 +- src/codegen/visitors/mips_visitor.py | 6 +- src/cool_parser/output_parser/parselog.txt | 1379 +++----------------- src/main.py | 14 +- src/test.asm | 88 +- src/test1.cl | 2 +- 6 files changed, 271 insertions(+), 1254 deletions(-) diff --git a/src/codegen/visitors/base_mips_visitor.py b/src/codegen/visitors/base_mips_visitor.py index ae135912..01cbe650 100644 --- a/src/codegen/visitors/base_mips_visitor.py +++ b/src/codegen/visitors/base_mips_visitor.py @@ -274,4 +274,38 @@ def save_reg_if_occupied(self, reg): def load_var_if_occupied(self, var): if var is not None: self.code.append(f'# Restore the variable of {var}') - self.load_var_code(var) \ No newline at end of file + self.load_var_code(var) + + def compare_strings(self, node: EqualNode): + rdest = self.addr_desc.get_var_reg(node.dest) + rleft = self.addr_desc.get_var_reg(node.left) + rright = self.addr_desc.get_var_reg(node.right) + + var1 = self.save_reg_if_occupied('a0') + var2 = self.save_reg_if_occupied('a1') + loop_idx = self.loop_idx + + self.code.append(f'move $t8, ${rleft}') # counter + self.code.append(f'move $t9, ${rright}') + self.code.append(f'loop_{loop_idx}:') + self.code.append(f'lb $a0, ($t8)') # load byte from each string + self.code.append(f'lb $a1, ($t9)') + self.code.append(f'beqz $a0, check_{loop_idx}') # str1 ended + self.code.append(f'beqz $a1, mismatch_{loop_idx}') # str2 ended when str1 hasnt ended + self.code.append('seq $v0, $a0, $a1') # compare two bytes + self.code.append(f'beqz $v0, mismatch_{loop_idx}') # bytes are different + self.code.append('addi $t8, $t8, 1') # Point to the next byte of str + self.code.append('addi $t9, $t9, 1') + self.code.append(f'j loop_{loop_idx}') + + self.code.append(f'mismatch_{loop_idx}:') + self.code.append('li $v0, 0') + self.code.append(f'j end_{loop_idx}') + self.code.append(f'check_{loop_idx}:') + self.code.append(f'bnez $a1, mismatch_{loop_idx}') + self.code.append('li $v0, 1') + self.code.append(f'end_{loop_idx}:') + self.code.append(f'move ${rdest}, $v0') + self.load_var_if_occupied(var1) + self.load_var_if_occupied(var2) + self.loop_idx += 1 \ No newline at end of file diff --git a/src/codegen/visitors/mips_visitor.py b/src/codegen/visitors/mips_visitor.py index eef94ce7..8192936b 100644 --- a/src/codegen/visitors/mips_visitor.py +++ b/src/codegen/visitors/mips_visitor.py @@ -204,7 +204,10 @@ def visit(self, node:MinusNode): @visitor.when(EqualNode) def visit(self, node:MinusNode): self.code.append(f'# {node.dest} <- {node.left} = {node.right}') - self._code_to_comp(node, 'seq', lambda x, y: x == y) + if self.is_variable(node.left) and self.is_variable(node.right) and self.var_address[node.left] == AddrType.STR and self.var_address[node.right] == AddrType.STR: + self.compare_strings(node) + else: + self._code_to_comp(node, 'seq', lambda x, y: x == y) def _code_to_comp(self, node, op, func_op): rdest = self.addr_desc.get_var_reg(node.dest) @@ -535,6 +538,7 @@ def visit(self, node: SubstringNode): self.code.append(f'j {loop}') self.code.append(f'{end}:') self.load_var_if_occupied(var) + self.loop_idx += 1 @visitor.when(OutStringNode) diff --git a/src/cool_parser/output_parser/parselog.txt b/src/cool_parser/output_parser/parselog.txt index a87e0631..828e2785 100644 --- a/src/cool_parser/output_parser/parselog.txt +++ b/src/cool_parser/output_parser/parselog.txt @@ -6124,1276 +6124,257 @@ yacc.py: 362:PLY: PARSE DEBUG START yacc.py: 410: yacc.py: 411:State : 0 - yacc.py: 435:Stack : . LexToken(class,'class',13,377) + yacc.py: 435:Stack : . LexToken(class,'class',1,0) yacc.py: 445:Action : Shift and goto state 5 yacc.py: 410: yacc.py: 411:State : 5 - yacc.py: 435:Stack : class . LexToken(type,'A2I',13,383) + yacc.py: 435:Stack : class . LexToken(type,'Main',1,6) yacc.py: 445:Action : Shift and goto state 8 yacc.py: 410: yacc.py: 411:State : 8 - yacc.py: 435:Stack : class type . LexToken(ocur,'{',13,387) - yacc.py: 445:Action : Shift and goto state 10 + yacc.py: 435:Stack : class type . LexToken(inherits,'inherits',1,11) + yacc.py: 445:Action : Shift and goto state 11 yacc.py: 410: - yacc.py: 411:State : 10 - yacc.py: 435:Stack : class type ocur . LexToken(id,'c2i',15,395) + yacc.py: 411:State : 11 + yacc.py: 435:Stack : class type inherits . LexToken(type,'IO',1,20) + yacc.py: 445:Action : Shift and goto state 20 + yacc.py: 410: + yacc.py: 411:State : 20 + yacc.py: 435:Stack : class type inherits type . LexToken(ocur,'{',1,23) + yacc.py: 445:Action : Shift and goto state 33 + yacc.py: 410: + yacc.py: 411:State : 33 + yacc.py: 435:Stack : class type inherits type ocur . LexToken(id,'main',3,30) yacc.py: 445:Action : Shift and goto state 19 yacc.py: 410: yacc.py: 411:State : 19 - yacc.py: 435:Stack : class type ocur id . LexToken(opar,'(',15,398) + yacc.py: 435:Stack : class type inherits type ocur id . LexToken(opar,'(',3,34) yacc.py: 445:Action : Shift and goto state 32 yacc.py: 410: yacc.py: 411:State : 32 - yacc.py: 435:Stack : class type ocur id opar . LexToken(id,'char',15,399) - yacc.py: 445:Action : Shift and goto state 46 - yacc.py: 410: - yacc.py: 411:State : 46 - yacc.py: 435:Stack : class type ocur id opar id . LexToken(colon,':',15,404) - yacc.py: 445:Action : Shift and goto state 61 - yacc.py: 410: - yacc.py: 411:State : 61 - yacc.py: 435:Stack : class type ocur id opar id colon . LexToken(type,'String',15,406) - yacc.py: 445:Action : Shift and goto state 96 - yacc.py: 410: - yacc.py: 411:State : 96 - yacc.py: 435:Stack : class type ocur id opar id colon type . LexToken(cpar,')',15,412) - yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['char',':','String'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'char',15,399), LexToken(ty ...) - yacc.py: 410: - yacc.py: 411:State : 44 - yacc.py: 435:Stack : class type ocur id opar param . LexToken(cpar,')',15,412) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'char',15,399), LexToken(t ...) - yacc.py: 410: - yacc.py: 411:State : 42 - yacc.py: 430:Defaulted state 42: Reduce using 30 - yacc.py: 435:Stack : class type ocur id opar param_list . LexToken(cpar,')',15,412) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'char',15,399), LexToken(t ...) + yacc.py: 435:Stack : class type inherits type ocur id opar . LexToken(cpar,')',3,35) + yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : class type inherits type ocur id opar epsilon . LexToken(cpar,')',3,35) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : class type inherits type ocur id opar param_list_empty . LexToken(cpar,')',3,35) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 - yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',15,412) + yacc.py: 435:Stack : class type inherits type ocur id opar formals . LexToken(cpar,')',3,35) yacc.py: 445:Action : Shift and goto state 64 yacc.py: 410: yacc.py: 411:State : 64 - yacc.py: 435:Stack : class type ocur id opar formals cpar . LexToken(colon,':',15,414) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar . LexToken(colon,':',3,36) yacc.py: 445:Action : Shift and goto state 100 yacc.py: 410: yacc.py: 411:State : 100 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon . LexToken(type,'Int',15,416) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon . LexToken(type,'Object',3,38) yacc.py: 445:Action : Shift and goto state 138 yacc.py: 410: yacc.py: 411:State : 138 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type . LexToken(ocur,'{',15,420) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type . LexToken(ocur,'{',3,45) yacc.py: 445:Action : Shift and goto state 181 yacc.py: 410: yacc.py: 411:State : 181 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur . LexToken(if,'if',16,423) - yacc.py: 445:Action : Shift and goto state 86 - yacc.py: 410: - yacc.py: 411:State : 86 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if . LexToken(id,'char',16,426) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur if id . LexToken(equal,'=',16,431) - yacc.py: 471:Action : Reduce rule [atom -> id] with ['char'] and goto state 79 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( string] with ['0'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( string] with ['1'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( string] with ['2'] and goto state 79 - yacc.py: 506:Result : ( string] with ['Ho'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_int','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_int',4,55), [ func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( string] with ['3'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( string] with ['4'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( string] with ['5'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( string] with ['6'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( num] with [6.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( string] with ['7'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( num] with [7.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( string] with ['8'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( num] with [8.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( string] with ['9'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 16 + yacc.py: 430:Defaulted state 16: Reduce using 14 + yacc.py: 435:Stack : class type inherits type ocur def_func semi epsilon . LexToken(ccur,'}',6,83) + yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 48 + yacc.py: 430:Defaulted state 48: Reduce using 16 + yacc.py: 435:Stack : class type inherits type ocur def_func semi feature_list . LexToken(ccur,'}',6,83) + yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( Date: Wed, 25 Nov 2020 19:14:31 -0700 Subject: [PATCH 48/60] Implementing case node and conforms in mips --- src/codegen/__init__.py | 13 +- .../__pycache__/__init__.cpython-37.pyc | Bin 1003 -> 1098 bytes .../__pycache__/cil_ast.cpython-37.pyc | Bin 13273 -> 13853 bytes src/codegen/cil_ast.py | 16 +- src/codegen/tools.py | 2 +- .../base_cil_visitor.cpython-37.pyc | Bin 7783 -> 8334 bytes .../cil_format_visitor.cpython-37.pyc | Bin 8470 -> 8947 bytes .../__pycache__/cil_visitor.cpython-37.pyc | Bin 12296 -> 12391 bytes src/codegen/visitors/base_cil_visitor.py | 9 +- src/codegen/visitors/base_mips_visitor.py | 67 +- src/codegen/visitors/cil_format_visitor.py | 12 + src/codegen/visitors/cil_visitor.py | 35 +- src/codegen/visitors/mips_visitor.py | 54 +- src/cool_parser/output_parser/parselog.txt | 1605 +++++++++++++++-- src/main.py | 2 +- src/semantic/tools.py | 20 + src/test.asm | 414 ++++- src/test1.cl | 33 +- 18 files changed, 2078 insertions(+), 204 deletions(-) diff --git a/src/codegen/__init__.py b/src/codegen/__init__.py index e4f4e590..61780e82 100644 --- a/src/codegen/__init__.py +++ b/src/codegen/__init__.py @@ -1,7 +1,7 @@ from codegen.visitors.cil_visitor import COOLToCILVisitor from codegen.visitors.cil_format_visitor import get_formatter from codegen.visitors.mips_visitor import CILToMIPSVistor - +from pprint import pprint def codegen_pipeline(context, ast, scope, debug=False): if debug: @@ -11,12 +11,15 @@ def codegen_pipeline(context, ast, scope, debug=False): if debug: formatter = get_formatter() print(formatter(cil_ast)) - data_code, text_code = CILToMIPSVistor().visit(cil_ast) - save_code(data_code, text_code) + inherit_graph = context.build_inheritance_graph() + # pprint(inherit_graph) + data_code, text_code = CILToMIPSVistor(inherit_graph).visit(cil_ast) + save_code(data_code, text_code, False) return ast, context, scope, cil_ast -def save_code(data_code, text_code): +def save_code(data_code, text_code, debug): text = '\n'.join(text_code) + '\n' + '\n'.join(data_code) - print(text) + if debug: + print(text) with open('test.asm', 'w+') as fd: fd.write(text) \ No newline at end of file diff --git a/src/codegen/__pycache__/__init__.cpython-37.pyc b/src/codegen/__pycache__/__init__.cpython-37.pyc index 78b86deb13460d1066c816b38abedf25266722cd..137204268dd94404ed5d19561175c98c58c20b29 100644 GIT binary patch delta 577 zcmYjOO^XyU5KSfhkshaYcNKR9K~O=Py)9mZT}6e#llXB^8nJ0RnVp9DB9qlc(umC7 zW#~UJee~iV@Zeo9dd*+(Pgu#SSfMJ9delq3?qBgYp59N>9>Ms`zZO4M=_MGfZrr>^ zL@DHoQr6WVlHLT{0jB3^B+J15{`2W!PhbEN&me&aT~leN>M{ zQBOxw)w-NkvN%-be5Bk%Hd&N!WKqq8%zEuR$PR2=)#IXE=sX$D)TGo}syzKOeL86q zQR>nU*+k1@?cpb)Hrt=@;r&I_B@h6|)5kl)%IOwXbsm|DIUXa#OfbFKhX@3$(Mbma zwoftX5H-wDbzOsDO8}y&pn@&w$Bia1!I~M?VfQ%^o&J^DAcCw`LgAZ+vx)4!v9;?@m6qo*MF43AWPbNOx<&nUjYy8o&61$@O;Gp delta 485 zcmYjM%}T>S5Z>7&&5ubfBD4kXHXsUuprSpf^ytNdPzoh$jMuK z^aVWn0N%XrEBF%5Migh6*^h5#zM1)OzU<&C2t0zeXukJP@}LRl`F^YJF^g4J(5*0= zIV;k&nR`dVt(;#rIs;SJqq*oBU!$kJ{PV0O%#5t5v^LPAOMB@EOWM-OC=dyfNX!gP z)S*Qijt|0$vSvJ)2u@KzS@R@K1UC?Kt*YEKn#cXYl*OT2yg_)_wFk+lAElz}4ySw^ z2@!MUvPeW_m2yS=C`$NBc(vH0PsuI{5ir5Q=i^_&SOX7u4f%ndt4)v7$CQWMAYib@ zjW@uc{)5Q|(UJ;~Gy@=lGRlmMKG&9pG}eZsg>M|)TiB}1=`5ZoYrzu{hbH%t<3X9w z>nS>9ysEh}Y-?m=*g;Pn3J7lWVbg-h;V_n(AvF2+;#FpAsotK;LP HzTx@b$xdPc diff --git a/src/codegen/__pycache__/cil_ast.cpython-37.pyc b/src/codegen/__pycache__/cil_ast.cpython-37.pyc index 960cbb921db9070198ec2204eaf47b27f195ce22..3710c06cc0bda8249192e3b220348448d95eb964 100644 GIT binary patch delta 1912 zcmYjRUrbY17{7=1mVbrz6oD36DYUc}+frH;bRY^iv16SgDwLL@y|+q4s~482S;jV* zY;G_5sav*)BwOaj(-yL9nJmsdYXHj|M|HY2W6>Jitg zX2cbUor(*wOW;bx8_1i^eXZ5Mbdgca7+Cia-f*V7?q?ze?-Q07;^n^q~zVGUx##k94^<5uwGHWk0RHg%Q-6Mw6k#kR1Y#lbJX@F`dcKf+nqqCZ`=~ zMhq*(nT(RpW-{=|*XYP0(?v6qRKko*BPJ1Oh4axa7J|>Be%1~TqfK2s$ZLHR_E4Zx zs?n*^=;&y4Rx~;m8g;%#{j5=!YSeUE8g|C)<@E71l|l~OycSN!EGz{t#_R@z)c|kB JdWx*2{{fE0sYCz( delta 1453 zcmZ8gU1*zC818BNrLrzbPqH*go1|%)EX$VWug%t3w|1FZyVP#W`kOTU(SETgMf3=p z2vX^fTZ2cyiFUXmPPyi{YDdHD{^{wLKNOOLxCqp}R}9gtroI&>IOi zDr_d~(Y=Jd3R?*K^d`bh3R?;L^=87&3fB=1=q-d>6y}73dWdjHVH@G?dYEvyvQ)F8 zvkT0m7X~UKW60SeD?L>!TUaH!gYKH@(sNG>;a~Anxmaz9VZ-`{sg=4AF(fTMmc^AF zF1%aUt3`=Cf(5Gw6E+W0Ji+6{4AOeGlEMQ_#BrNP@g`4d2_i-?!#iNMC9uk?Spn;W zp0~w$inMV?y6C&@>wD9r(qqMVKdx+SVaIbzZt~uMZeT2^9DQCHwi0gIsDn4};wf)4uf**;Oca(Q0wJu`L zquE_{Zn!6!)uF1|0BOQcAyO^2%I~tIdbog74MnY+SYW}OMW8XyGD=y(rN$xc04bO8 zT|*XKo~$`TC{k74r0lwi4?KhXAn{jdZT52z2ex-1?;Ur_jQ^Z{ND}4TYxvDu&>kk@ zZCJcnT=ZS1fg@Q}-7CM2s8ViVwn^uQiCCt!dB|bhZu-*nukC%m!;zI4kI3-<4L-tM z{|xUV=|jT?ePEvbc&~YmeSt(^i1(BBxk2w&U91OAv#&AIGO8UV?JLX&viQ5@8FpNi zwuXh^C_hHZw}#APDsxZh1$IKYe!yC&$aCcQ-r&lSYt1AlTMQ}N&+1QbBHYUdi2TW5 z9Z(zo8h*_*BJHEf{s-Bo_%IQ_8?3{stK*S5HiFeiuvR4$WY(C<`U}3DC7vhZt|2S0 zvTp5sk&R1NWer2lV#m2%J-kRZ6T5%!MP>Cw&$2pPjgIjN(ya!4Le<*edYU=$P3tJ1 zB)#6CPpbTrv2)Cad$FQ6MYS3xWjICRqmfqJXy3=;xYHhHop7WB!*W!GoH-%qNywQH z^5KPiT_GP*$afO*1%$j?A+JivOAxYCA=?pCGRPu@tVifrv^lYywz5%tl6J9bY@{>) E0NArliU0rr diff --git a/src/codegen/cil_ast.py b/src/codegen/cil_ast.py index ef9047a4..991fddcb 100644 --- a/src/codegen/cil_ast.py +++ b/src/codegen/cil_ast.py @@ -64,11 +64,13 @@ def __init__(self, dest, expr, idx=None): self.expr = expr self.in1 = expr - self.dest = dest + self.out = dest class NotNode(UnaryNode): pass +class LogicalNotNode(UnaryNode): + pass class BinaryNode(InstructionNode): def __init__(self, dest, left, right, idx=None): @@ -311,3 +313,15 @@ def __init__(self, dest, source, idx=None): self.out = dest self.in1 = source + +class ConformsNode(InstructionNode): + "Checks if the type of expr conforms to type2" + def __init__(self, dest, expr, type2, idx=None): + super().__init__(idx) + self.dest = dest + self.expr = expr + self.type = type2 + + self.out = dest + self.in1 = expr # is a string, so is always a variable + \ No newline at end of file diff --git a/src/codegen/tools.py b/src/codegen/tools.py index 8ab2042a..eacaeab1 100644 --- a/src/codegen/tools.py +++ b/src/codegen/tools.py @@ -164,7 +164,7 @@ def dispatch_ptr_offset(self): return 2 def attr_offset(self, attr): - return self.attrs.index(attr) + 3 + return self.attrs.index(attr) + 4 def method_offset(self, meth): "Method offset in dispatch table" diff --git a/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc index 465154c0042a469412d07f7f8d36905e6736063a..df418931f1136eb76a68b20b04da51fdd7956b1b 100644 GIT binary patch delta 2378 zcmah~+iw(A7@spcJDu%bdZDme+HICCl@6EU4Ix;d1u6(qu!xsUaGdU(ZKux8tY>DM zZquaUA{amtdW$m z-~0RlQTSytm>m^Z`BDqkXf~Np9t5m5HG|5OkRp;Smy>4Z<^mowyUXU5hSc`B%!+a35}{H52^y zbs{8M=u8Jnp6`#J-y_Hg$19u8yva7>?*{%3em_1nBKRrW^#fKf2e#*KCb9=ahPbYN zwk$*x*R0Yo=1^A{XEJJJM2jSU5T>x z6mCQ=hz$LY3xb0>*Ih_OE|~mP?b6fFqUH_j5pK0;#dfJ-yAXB6L`3}_?=GAMy z=#|xKlr(72$WsMdAtcpSKa*f$jdX(lnY_|1N}5A&L|q|hekWBdww#`>^@OcCc#i*= z@{et67R0sah1EQ5(2ePJJ($WVel>mblIXE43abdMJr>62O{Y#7wpuA+nSr@sll`L^ zDX;N2GY82L{$Xa39N=9Yx!0cqab1hL_6XWJi7){Ws*L(|Ct#=WC610Qu+#XpB?((# zK#3-twq27ogd3Onm5yU-q>z8tacSZJ3ci4v6uMAjOxSJP$S!*ksV^a%L1?nZ-|EZ~ zi!XE@Cnx#Woj>nDR;WySRwGQHTEl@e9rgSclpWy@yT(Sv=u4JiJO^2ghDkvxxQ-z6{e+u1yMg5S^XBf(yhPsrQPPF?Yo$xkoz`Kg#)CyyZc5QVyg^9B1Q_&2iOnKIJEJj_! zFMDt?U1Wd%AM2)`0f6oqToW*yn4?Bm@flv~<7jStM z0i$gK447>NKwUnL6pd&ZemP%EXotlIy^r6>-ym~5JuoodgY*Felxfl<)UMXF>REM% U9>sR>Qvm&>hZNxY$`MWe8%Cx*_y7O^ delta 1841 zcmah}OK%%h6!x`e{D>b(TswBsyzDe2)6f?2XjKs~&Ak8= z@z>BE%i!BmF4!F5VOhK_El&>fRV4@o{^v0Riu~V)37U}&OVhWr__uU(dWa^%brsZ_ zqc9QCMTcolIgYM;eMXRDrd?6ZEfxNYuW zEI1_SL^%Z5G)u7rYfdcU?Z~IQGkgl3<)B1>>Jh?lnntu42oX>;oZ+BIew&`73BLr< zlK&||aEN|bLc%XW#V@0)b1#tckq6*qHN9$BdfBk}RxH&l3n>b4s8IpdJSk3oDR%8N zHC9w9>TP?V6gMo#g+|3SY^$?L_(N=voyFf`&PCe3SW-e_d!?A_x=6F?rz$eAAj~Bjjts9*vCbx4NFufSaWzjet%80evGonHPx+b zie7u+4X_(^NBE?D5~V12qhF~+Ht<-jyUsXIaX?zYxx}rsIL;hZBhHj>8XqN!@s6v4 z|0D+3Rm>)x`D`bT#^Tu9Z8^et$wT8&=WgIn$xl{=odzg4Owes7Pu^0^h7RPaQcP1_ z^+-QGQ6|bN-c6ljv-o?e`NoSpkc$|O;d+v(S6xpAV`I~Wm-vDb^*uXFsh0>Y5uxzQ*0Qos(IB`p*(Q241LQnBZ4HnWnHccqc8~B&;G6Ux7kvZRlq<-d#ckbk)_%>kY$n z`K1P28r}=7C?ojw=;ZDRl8@HG=I@)k-qg=sQjD8bL3?nsDj6G<;IE7|~6I3SC?GAtVW7rG&%u>b%7 diff --git a/src/codegen/visitors/__pycache__/cil_format_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/cil_format_visitor.cpython-37.pyc index 3132b1972a0bbb9235b699e01ca333d1a6e922ef..4869cbc26caa1d3c93ebf0d4dcefbd852e026614 100644 GIT binary patch delta 913 zcmZuvUq}>T5WjD4J?pyN`+v84x7Y4@Dy(|;iW3Xk9mGbnL{qR$WxoPQ$bXBJGFt$;q)hknQh>OAs z%bC$?jAr{!O1lC*0%;}&HO?N;*cMpE^9O6U9mHH+G(&=`8wyTGC3V-;<4Q@g)x1Kl z&<5R2kaI;VwYS_Hq}&41K95yu`(GCAF(jGFtQn+m7I^1wh4Ljc zZzh_lU-U1LTKHh&$tBFnk~&xp@U`{ECX7|;5}LAYQk_1pDLA{$;EYnbS(+5#cVH9- zI1Z+QXJHdh9D9Ki7#THtyNZI$$97(3Jv5D&ff%ULXxZ^3gXSD$rBUpyqr^VV3VEw*{=S9zClT^oG4=SEg3Dc z&kzidVDmhDn zU^mbseA%9VA9&z=#%{lSHOH6;zphxa1CJJ zDRVAnRn4S_$wyZ>bm5XWf%C3$+!yWEj?fN;1ouCoQE?1+-9o48oj5KI|Ie}DK8Y1i zxKsPuEu$bMaOgROArI$Q(WLXDpkPnxMOu<^a6&-Bn`N<9TMa4auvUttk&3D@y&d}{ zdGXo%f>n`qjNy}Sh^6XskS$`+zs9bk=$5eUf5;NJb1cY~x#*m3P)#< zsi;4hs#$b_XHpzmBZ(5*w=OTO-&m>An5;ZuZb^8Jn+VB^Y?W#RsCgS6$y00{-{nam zO`5-BRdFGx;g&38Gnn`BOwB}9DXns+3;_y}6uyz7Aa&zR$VJ`qEo=n&iZX(oBDBY%^Q)vIu-aDDPyU12C=I2 zV3+tCLByVtMZeOv$am$?P#mTSEmM!)Yd(q2Gl;QnR>xp$23xVSMtv3^Vpkl`sqG_r q4YerUtpKLuK4F$VbqfJ4=NdNRDNEAI^aVVQC(R2KCMO>b;{HDp{Iwte diff --git a/src/codegen/visitors/__pycache__/cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/cil_visitor.cpython-37.pyc index 020c165550cda14ef315100a4ab345a7c1e6b4a9..f9722be9eaf8c3711a60ee3fa85447c4cedb1f10 100644 GIT binary patch delta 3014 zcmZt|OKcn0ao=)xxm=Pfnxv?YMNzhFi7Se7<)EpZGz}DgV#hX}SV7XV3Mh(PNn|LJ zeq6D`q; zO^U1DIbBryXGx=3)Y^<>izuCAD3u#%OHA6DazZXE?{VdF_?moNdLgFQ#Rfk{BD(CX0swH!V4-^3AwI~~gliJ1+ zZ=qIo>@A0Tk=Zfxl}aw}IJ~s7>DY~qx#;AbQsEeqGqs}KQL6b3yW?HpYw(^n1b@)h znE_9Fr~RsPxo&UqI4XgL_o0aiL?k)DG^R6M4l@(~r*J>PLQIo&w(|?GBC`|l%;3Xb zYmASQoMxl~d@o`hPsOhCSvX}ps*y%M39lK;p#-t?RXgu&a=XFz!GDa)YzA)446!Nr zp8xat!*sw{vz^?A?X1^|{7WP}PgJw8$vJvsmqWUE9Nr3~rj8OiL|~Y}1OiLv0m3OO z_yB=8{39^Wo`U_sn^QuoaF;@_=HgnD+iRtUWAj|4R>)US;Pc=G?G(wL7AC#`i{}5r z^c>5>(?nk&@B}g=>LEm{#{h2s{}|?OR8*5k)`|2&3l%EQ)Jf>@3EU0HFo{2@>df2tEtNf^>_ebRV7sc~6SH zv@^G7fw45y!wF&HRW$KZaGV6m5=^NyygWR5hRpvCu7-?2ldLc&>pPy>N|~n+<0=7q zdq>IhwMN&|eLehcQ<{-D8-tsX$JjK?j*PQ!!8@_(okTQ9hI}&AHRJ~mHe{U)c^%iT zArWB+&(ihx8p6LxG!gL!+Ckjs2rLnZ5fC{tM%Wp&ZyYvbgFPF+zw=IP>TdgfBx0Ew zKKVsw2}k}I-WVRT#Kj^LMHobwMZODvP~LV;NWrJW$NhqnBVyMvKZG+QSLOF5XeDFt z$B`=g5Ee&YV{!O&bQ-vSn0*BCy^piQ(3(lIU&5<eIxk*8;8_Bc$RdULB4K9< z#9?`CE+jHa+$yr{8Ii`nf)B@jwn+8bl@!{9slxm_bu=Or5ulRh!f*6oOTE9grih;u z+Hb?h@mY2o{u@8Bjcu&kPgQJ!nu{G3+n=|oi>@lQysp<(%6ePwol+dB<#Sb}h+ayk zs5gs_Od5=y24B~0)HO=Xxs{jwCVWH=2vXd z7WqMXK{rR>H;Gy89PKmkuf$`6(}b1@oF*VR;;oUtJCYADC1t1K|Kz(x1JcXQ&$KI-QN)@>1A7M%O>EzpA6R*5e zGhGop^2NS7Ln@R~wdC|%v#V$x-aC*m>269;F`9o3zdsN^;&@t05r<@1y(ztc@xcKt zV|uU=Neo;shFW*MWsF@@->N!>t6yU{J6GWN!Sr^Ztu%ueem`mnxT+iMrw>trIL6I> z`uN=dMgQW{&(l!HkuP#Vb(L-|WcWH7mQ|}bJaZzr)QmS&_C~h9$}kzJswEuOIIuki4(b>iMo7tNGJ_RV zV&l)i)ep*b+@O1;w$xPdpE+{NgO2rJ7?k#I1rt?8s@iuqQ8c6|WiQdTu}tNbjzT^W zQK|cxg*bgg(cu7=JARJ!3Oa}<&0ay%7m<$D$uby#dy_63I998!*7!z)zFtI@cFeQ2 zwGvL~OwAEQQBPl|g5pmR5Use|1!*f>E=qu$YZ(u8`L~gk_2f6Vc(+rMpi4kh`kwRT z+%WDX{PKyRJ7GL|LFP@-nU`SS>?6v{$b=V@53yz3Mqt7!OlFN|F(=Ni3M*-Xb$ll- zZj#~nlqK9_n|{k0g)0XXc*!4SHr%#uunMU&uM(TGuj4ycs=}d}6sr@1T?Hle73TEt zOR0z1RuBIx(%l}uG<%d?A>7|r#IFczuY;04$qvAobYgUt^oO6z^W%1*lE*B?gcinS z;Cgx*hxohcBkWQ5Q~GiCWjHuD$+qG2Tp~dq3j7)Y${qd+fmaE9m%tVH_|Oo%IXB3L S;Dfo-YFKCCz>a)KWB&(hq?~F1 delta 2941 zcmZ`*O>7(25#G1lT`rg6iuxmE(GnF~l(Zs6$w&~(F;Yv7occ#{T3c`sB`r;nE13*` zl*gqlx68}Yo0ym|9xzM0v-+_-)Av_q22e^%PvKL0 zA6C>en>+rzFE2OchUQ8;ilgr6c{%TMRpbJ$(qwBauQb&rV^VwF$m1Km=TVYjC=E6x zCT)y59WE<|T)Aj&%k$DVdtZ2n=+GLdi_}m?S@^c*o99wKB*qp*Ho@a zmUhKc?TW+iEGvuILd8?cM73vDigwQ73>~(5;dQNSg`H||$HUqc2i_=_w6d;T$1AwBrB|IvW~G$hF#Ok+CJh<a(?cA*9d78FPk<`r9ImgTIuaG64 z06ml(ogp?#q@Tzj5=-YD#8V=9Cy@j^7dpi*!fT;7M}<{CN)Gg`|v8dK_Zm-YIdM zN%93Gp1E463L6)<400ReUCA6=)>2xQm!Qyzzngfl-4izCk9kL@p7zMubq(!r@ioE)z+>AC9NPOM)dL zu=jOg_xCV3`18I=l8T+en(%iT9t`#*g{uP5B6t*AOFfF^leB$F*!v@#9!jy#AU|~e zk|XV?u7>?o-tVW_{92t=!`|t4u@4_~O$D`e?3_w5aHx+m!&Qp`crerxqdmd)oeT;#unrZM>9H&Z%S_=5*mJ7A*tW>xmr8da#45LF{z<%yzB%VLu6Vn zc5KVr3}@?2Xe1^#HMgUwB3?obvuz>ds&422Eo9Sl{l(7Kye1vjB)q+pf0m}X=K2Nt zR96w$P_FQs=<>2!!O52qX|}?x$R0-KFqxYoo7CDogIe7)t2BLijRXO^QZL&)izA1C z;RSM8%x?*25Ff_(c9w~w^jn=rlhi^NtrP5)Ra>-oO1&4T*tavaTy>q<@T<`=R;DuB zJd0llH7Z6)?xxW$aA@Fg?`IL>naK>6(?|h-L42sXMRsl>gVB&EH~619@($*~RWRmC zbH6@GO7)}`4>E-LVnw}`zsK-n$zL?^g+6#lIq2$G-1~*z{xlNhjiu_CuDUA2?pS2g z3oI5Y^_mEs0OUbY@QdhJYusHXPIMko9s=wXA`HyNdZu6n9~Qsm0D-(U7#pPQ%hosA zt&Z%yOavz@hOcvx!WTw?gkM4t8P>oXXD%c_%&z`RRPv2l|>$s6ZhGR!rnHCg}qJWguN;)ux-dCPqSK^|5NgDcDv1A zNS$WiY4g8Honf2An}>#8**AnHCZA@Hz)vUR0~QLs?(11TZ|6!`L?eDOia;;Ir;}qW z2Ep_UdjjUu=h$O#FMX12!Mo{r{2sYSp7HMz`5uw)6S+_16_}ci!oSjeECM}K7u7Dr LT4*mjrLq42BD#*W diff --git a/src/codegen/visitors/base_cil_visitor.py b/src/codegen/visitors/base_cil_visitor.py index 4610bf82..a8d33720 100644 --- a/src/codegen/visitors/base_cil_visitor.py +++ b/src/codegen/visitors/base_cil_visitor.py @@ -2,7 +2,7 @@ from semantic.tools import VariableInfo, Scope, Context from semantic.types import Type, StringType, ObjectType, IOType, Method, Attribute from codegen import cil_ast as cil -from utils.ast import BinaryNode, UnaryNode, AssignNode +from utils.ast import BinaryNode, UnaryNode, AssignNode, ProgramNode import re class BaseCOOLToCILVisitor: @@ -17,6 +17,8 @@ def __init__(self, context): self.idx = 0 self.name_regex = re.compile('local_.+_(.+)_\d+') self.constructors = [] + self.class_depth = {} + self.inherit_graph = {} @property def index(self): @@ -168,3 +170,8 @@ def create_built_in(self): TypeNode("String", [], [('length', f8.name), ('concat', f9.name), ('substr', f10.name)]), TypeNode('Int'), TypeNode('Bool')] + + def sort_option_nodes_by_type(self, case_list, children_scope): + "Sort option nodes from specific types to more general types" + return sorted(zip(case_list, children_scope), reverse=True, + key=lambda x: self.context.get_depth(x[0].typex)) diff --git a/src/codegen/visitors/base_mips_visitor.py b/src/codegen/visitors/base_mips_visitor.py index 01cbe650..25ae759f 100644 --- a/src/codegen/visitors/base_mips_visitor.py +++ b/src/codegen/visitors/base_mips_visitor.py @@ -5,7 +5,7 @@ from typing import List class BaseCILToMIPSVisitor: - def __init__(self): + def __init__(self, inherit_graph): self.code: list = ['.text', '.globl main', 'main:'] self.initialize_data_code() # self.initialize_built_in_types() @@ -20,9 +20,11 @@ def __init__(self): self.initialize_methods() # Will hold the type of any of the vars self.var_address = {'self': AddrType.REF} - self.strings = {} + self.loop_idx = 0 # to count the generic loops in the app self.first_defined = {'strcopier': True} # bool to keep in account when the first defined string function was defined + + self.inherit_graph = inherit_graph def initialize_methods(self): self.methods = [] @@ -33,7 +35,8 @@ def initialize_methods(self): def initialize_data_code(self): self.data_code = ['.data'] - + + # def initialize_built_in_types(self): # self.data_code.append(f"type_String: .asciiz \"String\"") # guarda el nombre de la variable en la memoria # self.data_code.append(f"type_Int: .asciiz \"Int\"") # guarda el nombre de la variable en la memoria @@ -254,6 +257,42 @@ def save_meth_addr(self, func_nodes: List[FunctionNode]): self.code.append(f'la $t9, {meth}') self.code.append(f'sw $t9, {4*i}($v0)') + def save_types_addr(self, type_nodes: List[FunctionNode]): + "Saves the structure where the type information is stored" + words = 'types: .word ' + ', '.join(map(lambda x: '0', self.inherit_graph)) + self.data_code.append(words) + self.code.append('# Save types directions in the types array') + self.code.append('la $t9, types') + self.types = [] + self.code.append('# Save space to locate the type info') + for i, (ntype, nparent) in enumerate(self.inherit_graph.items()): + self.code.append('# Allocating memory') + self.code.append('li $v0, 9') + self.code.append(f'li $a0, 8') + self.code.append('syscall') + self.types.append(ntype) + + self.code.append('# Filling table methods') + self.code.append(f'la $t8, type_{ntype}') + self.code.append(f'sw $t8, 0($v0)') + + self.code.append('# Copying direction to array') + self.code.append(f'sw $v0, {4*i}($t9)') + + # self.code.append('la $t9, types') + self.code.append('# Copying parents') + for i, ntype in enumerate(self.types): + self.code.append(f'lw $v0, {4*i}($t9)') + # self.code.append('lw $v0, 0($t8)') + nparent = self.inherit_graph[ntype] + if nparent is not None: + parent_idx = self.types.index(nparent) + + self.code.append(f'lw $t8, {4*parent_idx}($t9)') + else: + self.code.append('li $t8, 0') + self.code.append('sw $t8, 4($v0)') + def get_type(self, xtype): 'Return the var address type according to its static type' if xtype == 'Int': @@ -308,4 +347,26 @@ def compare_strings(self, node: EqualNode): self.code.append(f'move ${rdest}, $v0') self.load_var_if_occupied(var1) self.load_var_if_occupied(var2) + self.loop_idx += 1 + + def conforms_to(self, rsrc, rdest, type_name): + "Returns if the object in rsrc conforms to type_name" + self.code.append(f'la $t9, type_{type_name}') + + loop_idx = self.loop_idx + self.code.append(f'lw $v0, 12(${rsrc})') # saves the direction to the type info table + self.code.append(f'loop_{loop_idx}:') + self.code.append(f'move $t8, $v0') # Saves parent addr + self.code.append(f'beqz $t8, false_{loop_idx}') + self.code.append('lw $v1, 0($t8)') + self.code.append(f'beq $t9, $v1, true_{loop_idx}') + self.code.append('lw $v0, 4($t8)') + self.code.append(f'j loop_{loop_idx}') + + self.code.append(f'true_{loop_idx}:') + self.code.append(f'li ${rdest}, 1') + self.code.append(f'j end_{loop_idx}') + self.code.append(f'false_{loop_idx}:') + self.code.append(f'li ${rdest}, 0') + self.code.append(f'end_{loop_idx}:') self.loop_idx += 1 \ No newline at end of file diff --git a/src/codegen/visitors/cil_format_visitor.py b/src/codegen/visitors/cil_format_visitor.py index 75a1b6d3..d8c88b21 100644 --- a/src/codegen/visitors/cil_format_visitor.py +++ b/src/codegen/visitors/cil_format_visitor.py @@ -46,6 +46,14 @@ def visit(self, node: LocalNode): @visitor.when(AssignNode) def visit(self, node: AssignNode): return f'{node.dest} = {node.source}' + + @visitor.when(NotNode) + def visit(self, node: NotNode): + return f'{node.dest} = ~{node.expr}' + + @visitor.when(LogicalNotNode) + def visit(self, node: LogicalNotNode): + return f'{node.dest} = NOT {node.expr}' @visitor.when(PlusNode) def visit(self, node: PlusNode): @@ -165,6 +173,10 @@ def visit(self, node: ExitNode): def visit(self, node: CopyNode): return f'{node.dest} = COPY {node.source}' + @visitor.when(ConformsNode) + def visit(self, node: ConformsNode): + return f'{node.dest} = CONFORMS {node.expr} {node.type}' + printer = PrintVisitor() return lambda ast: printer.visit(ast) diff --git a/src/codegen/visitors/cil_visitor.py b/src/codegen/visitors/cil_visitor.py index 69313f44..28c50d19 100644 --- a/src/codegen/visitors/cil_visitor.py +++ b/src/codegen/visitors/cil_visitor.py @@ -18,16 +18,17 @@ def visit(self, node: ProgramNode, scope: Scope): instance = self.define_internal_local() result = self.define_internal_local() - self.register_instruction(cil.AllocateNode('Main', instance)) - # self.register_instruction(cil.ArgNode(instance)) - + self.register_instruction(cil.AllocateNode('Main', instance)) + typex = self.context.get_type('Main', (0,0)) + if typex.all_attributes(): + self.register_instruction(cil.StaticCallNode(typex.name, typex.name, None, [cil.ArgNode(instance)], typex.name)) + name = self.to_function_name('main', 'Main') self.register_instruction(cil.StaticCallNode('Main', 'main', result, [cil.ArgNode(instance)], 'Object')) self.register_instruction(cil.ReturnNode(0)) self.current_function = None self.create_built_in() - for declaration, child_scope in zip(node.declarations, scope.children): self.visit(declaration, child_scope) @@ -250,7 +251,7 @@ def visit(self, node: WhileNode, scope: Scope): end_label = cil.LabelNode(f'end_{self.idx}') result = self.define_internal_local() - self.register_instruction(cil.AssignNode(result, 'void')) + # self.register_instruction(cil.AssignNode(result, 'void')) self.register_instruction(start_label) cond, _ = self.visit(node.cond, scope) @@ -316,40 +317,40 @@ def visit(self, node: LetNode, scope: Scope): def visit(self, node: CaseNode, scope: Scope): expr, typex = self.visit(node.expr, scope) result = self.define_internal_local() - etype = self.define_internal_local() + # etype = self.define_internal_local() end_label = cil.LabelNode(f'end_{self.idx}') - self.register_instruction(cil.TypeOfNode(expr, etype)) + # self.register_instruction(cil.TypeOfNode(expr, etype)) new_scope = scope.expr_dict[node] - for i, (case, c_scope) in enumerate(zip(node.case_list, new_scope.children)): + sorted_case_list = self.sort_option_nodes_by_type(node.case_list, new_scope.children) + for i, (case, c_scope) in enumerate(sorted_case_list): next_label = cil.LabelNode(f'next_{self.idx}_{i}') - expr_i, label = self.visit(case, c_scope, expr, etype, next_label) + expr_i = self.visit(case, c_scope, expr, next_label) self.register_instruction(cil.AssignNode(result, expr_i)) self.register_instruction(cil.GotoNode(end_label.label)) - self.register_instruction(label) + self.register_instruction(next_label) self.register_instruction(end_label) return result, typex @visitor.when(OptionNode) - def visit(self, node: OptionNode, scope: Scope, expr, expr_type, next_label): + def visit(self, node: OptionNode, scope: Scope, expr, next_label): aux = self.define_internal_local() - # TODO: Buscar una forma de representar conforms in cil - self.register_instruction(cil.MinusNode(aux, expr_type, node.typex)) - + self.register_instruction(cil.ConformsNode(aux, expr, node.typex)) + self.register_instruction(cil.LogicalNotNode(aux, aux)) self.register_instruction(cil.GotoIfNode(aux, next_label.label)) var_info = scope.find_variable(node.id) local_var = self.register_local(var_info.name) self.register_instruction(cil.AssignNode(local_var, expr)) expr_i, typex = self.visit(node.expr, scope) - return exp_i, next_label + return expr_i @visitor.when(NotNode) def visit(self, node: NotNode, scope: Scope): - return self._define_unary_node(node, scope, cil.NotNode) + return self._define_unary_node(node, scope, cil.LogicalNotNode) @visitor.when(BinaryNotNode) - def visit(self, node: NotNode, scope: Scope): + def visit(self, node: BinaryNotNode, scope: Scope): return self._define_unary_node(node, scope, cil.NotNode) diff --git a/src/codegen/visitors/mips_visitor.py b/src/codegen/visitors/mips_visitor.py index 8192936b..bd7e79e2 100644 --- a/src/codegen/visitors/mips_visitor.py +++ b/src/codegen/visitors/mips_visitor.py @@ -38,6 +38,8 @@ def visit(self, node: ProgramNode): # visit TypeNodes for type_ in node.dottypes: self.visit(type_) + # guardo las direcciones de cada tipo + self.save_types_addr(node.dottypes) # visit DataNodes for data in node.dotdata: self.visit(data) @@ -108,15 +110,31 @@ def visit(self, node:AssignNode): elif self.is_int(node.source): self.code.append(f'li ${rdest}, {node.source}') self.var_address[node.dest] = AddrType.INT + self.save_var_code(node.dest) # elif isinstance(node.source, str): # esto nunca se debe ejecutar (se llama a load node) # self.code.append(f'la ${rdest}, {self.strings[node.source]}') @visitor.when(NotNode) def visit(self, node:NotNode): rdest = self.addr_desc.get_var_reg(node.dest) - rscr = self.save_to_register(node.expr) + rsrc = self.save_to_register(node.expr) + self.code.append(f'# {node.dest} <- ~{node.expr}') + self.code.append(f'not ${rdest}, ${rsrc}') + self.var_address[node.dest] = AddrType.INT + + + @visitor.when(LogicalNotNode) + def visit(self, node:LogicalNotNode): + rdest = self.addr_desc.get_var_reg(node.dest) + rsrc = self.save_to_register(node.expr) self.code.append(f'# {node.dest} <- not {node.expr}') - self.code.append(f'not {rdest}, {rsrc}') + self.code.append(f'beqz ${rsrc}, false_{self.loop_idx}') + self.code.append(f'li ${rdest}, 0') + self.code.append(f'j end_{self.loop_idx}') + self.code.append(f'false_{self.loop_idx}:') + self.code.append(f'li ${rdest}, 1') + self.code.append(f'end_{self.loop_idx}:') + self.loop_idx += 1 self.var_address[node.dest] = AddrType.BOOL @@ -225,13 +243,13 @@ def _code_to_comp(self, node, op, func_op): elif self.is_variable(node.right): rright = self.addr_desc.get_var_reg(node.right) self.code.append(f"li $t9, {node.left}") - self.code.append(f"{op} ${rdest}, $t9, {rright}") + self.code.append(f"{op} ${rdest}, $t9, ${rright}") self.var_address[node.dest] = AddrType.BOOL @visitor.when(GetAttribNode) def visit(self, node:GetAttribNode): - self.code.append(f'# {node.dest} <- GET {node.obj} . {node.type_name}') + self.code.append(f'# {node.dest} <- GET {node.obj} . {node.attr}') rdest = self.addr_desc.get_var_reg(node.dest) self.var_address[node.dest] = self.get_type(node.attr_type) rsrc = self.addr_desc.get_var_reg(node.obj) @@ -280,7 +298,12 @@ def visit(self, node:AllocateNode): self.create_dispatch_table(node.type) # memory of dispatch table in v0 self.code.append(f'sw $v0, 8(${rdest})') # save a pointer of the dispatch table in the 3th position - + + idx = self.types.index(node.type) + self.code.append('# Adding Type Info addr') + self.code.append('la $t8, types') + self.code.append(f'lw $v0, {4*idx}($t8)') + self.code.append(f'sw $v0, 12(${rdest})') self.load_var_if_occupied(var) def create_dispatch_table(self, type_name): @@ -353,7 +376,7 @@ def visit(self, node:DynamicCallNode): self.code.append(f'lw $t9, 8(${reg})') # obtiene en t9 la dirección del dispatch table function = self.dispatch_table.find_full_name(node.type, node.method) index = 4*self.dispatch_table.get_offset(node.type, function) # guarda el offset del me - self.code.append(f'# Saves in t9 the direction of {function}') + self.code.append(f'# Saves in t8 the direction of {function}') self.code.append(f'lw $t8, {index}($t9)') # guarda en $t8 la dirección de la función a llamar # Call function self._code_to_function_call(node.args, '$t8', node.dest) @@ -637,4 +660,21 @@ def visit(self, node: CopyNode): self.code.append('addi $t8, $t8, 4') self.code.append(f'j loop_{self.loop_idx}') self.code.append(f'exit_{self.loop_idx}:') - self.loop_idx += 1 \ No newline at end of file + self.loop_idx += 1 + + @visitor.when(ConformsNode) + def visit(self, node: ConformsNode): + rdest = self.addr_desc.get_var_reg(node.dest) + + if self.is_variable(node.expr): + rsrc = self.addr_desc.get_var_reg(node.expr) + if self.var_address[node.expr] == AddrType.REF: + self.conforms_to(rsrc, rdest, node.type) + elif self.var_address[node.expr] == AddrType.STR: + self.code.append(f'li ${rdest}, 0') + elif self.var_address[node.expr] == AddrType.INT: + self.code.append(f'li ${rdest}, 0') + elif self.var_address[node.expr] == AddrType.BOOL: + self.code.append(f'li ${rdest}, 0') + elif self.is_int(node.expr): + self.code.append(f'li ${rdest}, 0') diff --git a/src/cool_parser/output_parser/parselog.txt b/src/cool_parser/output_parser/parselog.txt index 828e2785..c439087e 100644 --- a/src/cool_parser/output_parser/parselog.txt +++ b/src/cool_parser/output_parser/parselog.txt @@ -6144,237 +6144,1600 @@ yacc.py: 445:Action : Shift and goto state 33 yacc.py: 410: yacc.py: 411:State : 33 - yacc.py: 435:Stack : class type inherits type ocur . LexToken(id,'main',3,30) + yacc.py: 435:Stack : class type inherits type ocur . LexToken(id,'main',3,81) yacc.py: 445:Action : Shift and goto state 19 yacc.py: 410: yacc.py: 411:State : 19 - yacc.py: 435:Stack : class type inherits type ocur id . LexToken(opar,'(',3,34) + yacc.py: 435:Stack : class type inherits type ocur id . LexToken(opar,'(',3,85) yacc.py: 445:Action : Shift and goto state 32 yacc.py: 410: yacc.py: 411:State : 32 - yacc.py: 435:Stack : class type inherits type ocur id opar . LexToken(cpar,')',3,35) + yacc.py: 435:Stack : class type inherits type ocur id opar . LexToken(cpar,')',3,86) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : class type inherits type ocur id opar epsilon . LexToken(cpar,')',3,35) + yacc.py: 435:Stack : class type inherits type ocur id opar epsilon . LexToken(cpar,')',3,86) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : class type inherits type ocur id opar param_list_empty . LexToken(cpar,')',3,35) + yacc.py: 435:Stack : class type inherits type ocur id opar param_list_empty . LexToken(cpar,')',3,86) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 - yacc.py: 435:Stack : class type inherits type ocur id opar formals . LexToken(cpar,')',3,35) + yacc.py: 435:Stack : class type inherits type ocur id opar formals . LexToken(cpar,')',3,86) yacc.py: 445:Action : Shift and goto state 64 yacc.py: 410: yacc.py: 411:State : 64 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar . LexToken(colon,':',3,36) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar . LexToken(colon,':',3,87) yacc.py: 445:Action : Shift and goto state 100 yacc.py: 410: yacc.py: 411:State : 100 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon . LexToken(type,'Object',3,38) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon . LexToken(type,'Object',3,89) yacc.py: 445:Action : Shift and goto state 138 yacc.py: 410: yacc.py: 411:State : 138 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type . LexToken(ocur,'{',3,45) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type . LexToken(ocur,'{',3,96) yacc.py: 445:Action : Shift and goto state 181 yacc.py: 410: yacc.py: 411:State : 181 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur . LexToken(id,'out_int',4,55) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur . LexToken(ocur,'{',4,100) + yacc.py: 445:Action : Shift and goto state 90 + yacc.py: 410: + yacc.py: 411:State : 90 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur . LexToken(id,'out_string',5,105) yacc.py: 445:Action : Shift and goto state 72 yacc.py: 410: yacc.py: 411:State : 72 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id . LexToken(opar,'(',4,62) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur id . LexToken(opar,'(',5,115) yacc.py: 445:Action : Shift and goto state 113 yacc.py: 410: yacc.py: 411:State : 113 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id opar . LexToken(string,'Ho',4,66) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur id opar . LexToken(string,'Enter n to find nth fibonacci number!\n',5,156) yacc.py: 445:Action : Shift and goto state 93 yacc.py: 410: yacc.py: 411:State : 93 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur id opar string . LexToken(equal,'=',4,68) - yacc.py: 471:Action : Reduce rule [atom -> string] with ['Ho'] and goto state 79 - yacc.py: 506:Result : ( string] with [] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',5,105), [ func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi id opar id opar id opar epsilon . LexToken(cpar,')',6,182) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi id opar id opar id opar arg_list_empty . LexToken(cpar,')',6,182) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi id opar id opar id opar args . LexToken(cpar,')',6,182) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi id opar id opar id opar args cpar . LexToken(cpar,')',6,183) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['in_int','(',[],')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'in_int',6,175), [])) + yacc.py: 410: + yacc.py: 411:State : 78 + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi id opar id opar func_call . LexToken(cpar,')',6,183) + yacc.py: 471:Action : Reduce rule [factor -> func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['fib','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'fib',6,171), [ func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_int','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_int',6,163), [ func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( string] with ['Ho'] and goto state 79 - yacc.py: 506:Result : ( string] with ['\n'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_int','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_int',4,55), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',7,190), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 435:Stack : class type inherits type ocur def_func semi . LexToken(id,'fib',11,218) + yacc.py: 445:Action : Shift and goto state 19 yacc.py: 410: - yacc.py: 411:State : 16 - yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : class type inherits type ocur def_func semi epsilon . LexToken(ccur,'}',6,83) - yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 411:State : 19 + yacc.py: 435:Stack : class type inherits type ocur def_func semi id . LexToken(opar,'(',11,221) + yacc.py: 445:Action : Shift and goto state 32 yacc.py: 410: - yacc.py: 411:State : 48 - yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : class type inherits type ocur def_func semi feature_list . LexToken(ccur,'}',6,83) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 53 - yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( id colon type] with ['i',':','Int'] and goto state 44 + yacc.py: 506:Result : ((LexToken(id,'i',11,222), LexToken(type, ...) yacc.py: 410: - yacc.py: 411:State : 3 - yacc.py: 435:Stack : def_class . $end - yacc.py: 471:Action : Reduce rule [class_list -> def_class] with [] and goto state 2 - yacc.py: 506:Result : ([ param] with [] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'i',11,222), LexToken(type ...) + yacc.py: 410: + yacc.py: 411:State : 42 + yacc.py: 430:Defaulted state 42: Reduce using 30 + yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar param_list . LexToken(cpar,')',11,229) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'i',11,222), LexToken(type ...) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals . LexToken(cpar,')',11,229) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar . LexToken(colon,':',11,231) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon . LexToken(type,'Int',11,233) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type . LexToken(ocur,'{',11,237) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur . LexToken(let,'let',12,297) + yacc.py: 445:Action : Shift and goto state 84 + yacc.py: 410: + yacc.py: 411:State : 84 + yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let . LexToken(id,'a',12,301) + yacc.py: 445:Action : Shift and goto state 46 + yacc.py: 410: + yacc.py: 411:State : 46 + yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let id . LexToken(colon,':',12,303) + yacc.py: 445:Action : Shift and goto state 61 + yacc.py: 410: + yacc.py: 411:State : 61 + yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let id colon . LexToken(type,'Int',12,305) + yacc.py: 445:Action : Shift and goto state 96 + yacc.py: 410: + yacc.py: 411:State : 96 + yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let id colon type . LexToken(larrow,'<-',12,309) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['a',':','Int'] and goto state 130 + yacc.py: 506:Result : ((LexToken(id,'a',12,301), LexToken(type, ...) + yacc.py: 410: + yacc.py: 411:State : 130 + yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let param . LexToken(larrow,'<-',12,309) + yacc.py: 445:Action : Shift and goto state 173 + yacc.py: 410: + yacc.py: 411:State : 173 + yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let param larrow . LexToken(num,1.0,12,312) + yacc.py: 445:Action : Shift and goto state 88 + yacc.py: 410: + yacc.py: 411:State : 88 + yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let param larrow num . LexToken(comma,',',12,313) + yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 + yacc.py: 506:Result : ( id colon type] with ['b',':','Int'] and goto state 130 + yacc.py: 506:Result : ((LexToken(id,'b',13,320), LexToken(type, ...) + yacc.py: 410: + yacc.py: 411:State : 130 + yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let let_assign comma param . LexToken(larrow,'<-',13,328) + yacc.py: 445:Action : Shift and goto state 173 + yacc.py: 410: + yacc.py: 411:State : 173 + yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let let_assign comma param larrow . LexToken(num,0.0,13,331) + yacc.py: 445:Action : Shift and goto state 88 + yacc.py: 410: + yacc.py: 411:State : 88 + yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let let_assign comma param larrow num . LexToken(comma,',',13,332) + yacc.py: 471:Action : Reduce rule [atom -> num] with [0.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 + yacc.py: 506:Result : ( id colon type] with ['c',':','Int'] and goto state 130 + yacc.py: 506:Result : ((LexToken(id,'c',14,339), LexToken(type, ...) + yacc.py: 410: + yacc.py: 411:State : 130 + yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let let_assign comma let_assign comma param . LexToken(larrow,'<-',14,347) + yacc.py: 445:Action : Shift and goto state 173 + yacc.py: 410: + yacc.py: 411:State : 173 + yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let let_assign comma let_assign comma param larrow . LexToken(num,0.0,14,350) + yacc.py: 445:Action : Shift and goto state 88 + yacc.py: 410: + yacc.py: 411:State : 88 + yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let let_assign comma let_assign comma param larrow num . LexToken(in,'in',15,355) + yacc.py: 471:Action : Reduce rule [atom -> num] with [0.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 + yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 + yacc.py: 506:Result : ( let_assign] with [] and goto state 197 + yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 197 + yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 + yacc.py: 506:Result : ([ ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 124 + yacc.py: 506:Result : ( not expr] with ['not',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 133 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( id] with ['b'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 159 + yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['c','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['c'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 160 + yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['i','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['b','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['c'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['a','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 204 + yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['c'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 196 + yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['fib','(',,')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 16 + yacc.py: 430:Defaulted state 16: Reduce using 14 + yacc.py: 435:Stack : class type inherits type ocur def_func semi def_func semi epsilon . LexToken(ccur,'}',29,509) + yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 48 + yacc.py: 430:Defaulted state 48: Reduce using 16 + yacc.py: 435:Stack : class type inherits type ocur def_func semi def_func semi feature_list . LexToken(ccur,'}',29,509) + yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 16 + yacc.py: 430:Defaulted state 16: Reduce using 14 + yacc.py: 435:Stack : def_class class type ocur epsilon . LexToken(ccur,'}',33,524) + yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 14 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 14 + yacc.py: 435:Stack : def_class class type ocur feature_list . LexToken(ccur,'}',33,524) + yacc.py: 445:Action : Shift and goto state 25 + yacc.py: 410: + yacc.py: 411:State : 25 + yacc.py: 435:Stack : def_class class type ocur feature_list ccur . LexToken(semi,';',33,525) + yacc.py: 445:Action : Shift and goto state 38 + yacc.py: 410: + yacc.py: 411:State : 38 + yacc.py: 435:Stack : def_class class type ocur feature_list ccur semi . $end + yacc.py: 471:Action : Reduce rule [def_class -> class type ocur feature_list ccur semi] with ['class','A','{',[],'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( ( Type: if name in self.types: error_text = SemanticError.TYPE_ALREADY_DEFINED diff --git a/src/test.asm b/src/test.asm index 91238d5f..e8c6e887 100644 --- a/src/test.asm +++ b/src/test.asm @@ -1,6 +1,94 @@ .text .globl main main: +# Save types directions in the types array +la $t9, types +# Save space to locate the type info +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_String +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 0($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Int +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 4($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Object +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 8($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Bool +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 12($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_IO +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 16($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Main +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 20($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_A +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 24($t9) +# Copying parents +lw $v0, 0($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 4($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 8($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 12($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 16($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +lw $v0, 20($t9) +lw $t8, 16($t9) +sw $t8, 4($v0) +lw $v0, 24($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) # Save method directions in the methods array la $v0, methods la $t9, entry @@ -27,6 +115,8 @@ la $t9, function_substr_String sw $t9, 40($v0) la $t9, function_main_Main sw $t9, 44($v0) +la $t9, function_fib_Main +sw $t9, 48($v0) entry: # Gets the params from the stack @@ -52,7 +142,7 @@ sw $t9, 4($v0) move $t0, $v0 # Allocate dispatch table in the heap li $v0, 9 -li $a0, 32 +li $a0, 36 syscall # I save the offset of every one of the methods of this type # Save the direction of methods @@ -89,7 +179,15 @@ sw $t9, 24($v0) lw $t9, 44($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 28($v0) +# Save the direction of the method function_fib_Main in t9 +lw $t9, 48($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t0) lw $t1, -4($fp) # Static Dispatch of the method main sw $fp, ($sp) @@ -133,6 +231,7 @@ lw $t0, -0($fp) lw $t1, -4($fp) # Moving self to local_abort_self_0 move $t1, $t0 +sw $t1, -4($fp) # Exiting the program li $t8, 0 li $v0, 17 @@ -215,6 +314,7 @@ lw $t0, -4($fp) lw $t1, -8($fp) # Moving self to local_out_string_self_0 move $t1, $t0 +sw $t1, -8($fp) lw $t2, -0($fp) # Printing a string li $v0, 4 @@ -241,6 +341,7 @@ lw $t0, -4($fp) lw $t1, -8($fp) # Moving self to local_out_int_self_0 move $t1, $t0 +sw $t1, -8($fp) lw $t2, -0($fp) # Printing an int li $v0, 1 @@ -423,58 +524,102 @@ addiu $sp, $sp, -4 addiu $sp, $sp, -4 # Updates stack pointer pushing local_main_Main_internal_3 to the stack addiu $sp, $sp, -4 -lw $t0, -8($fp) -# Saves in local_main_Main_internal_1 data_0 +# Updates stack pointer pushing local_main_Main_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_7 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_main_Main_internal_0 data_0 la $t0, data_0 -lw $t1, -12($fp) -# Saves in local_main_Main_internal_2 data_1 -la $t1, data_1 -lw $t2, -4($fp) -# local_main_Main_internal_0 <- local_main_Main_internal_1 = local_main_Main_internal_2 -move $t8, $t0 -move $t9, $t1 -loop_4: -lb $a0, ($t8) -lb $a1, ($t9) -beqz $a0, check_4 -beqz $a1, mismatch_4 -seq $v0, $a0, $a1 -beqz $v0, mismatch_4 -addi $t8, $t8, 1 -addi $t9, $t9, 1 -j loop_4 -mismatch_4: -li $v0, 0 -j end_4 -check_4: -bnez $a1, mismatch_4 -li $v0, 1 -end_4: -move $t2, $v0 -lw $t3, -0($fp) -lw $t4, -16($fp) +lw $t1, -0($fp) +lw $t2, -8($fp) # Find the actual name in the dispatch table # Gets in t9 the actual direction of the dispatch table -lw $t9, 8($t3) -# Saves in t9 the direction of function_out_int_IO -lw $t8, 16($t9) +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 12($t9) sw $fp, ($sp) addiu $sp, $sp, -4 sw $ra, ($sp) addiu $sp, $sp, -4 # Push the arguments to the stack # The rest of the arguments are push into the stack -sw $t2, ($sp) +sw $t0, ($sp) addiu $sp, $sp, -4 # The rest of the arguments are push into the stack -sw $t3, ($sp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -12($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_in_int_IO +lw $t8, 24($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory sw $t0, -8($fp) -sw $t1, -12($fp) -sw $t2, -4($fp) -sw $t3, -0($fp) -sw $t4, -16($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_fib_Main +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $t1, -0($fp) +sw $t2, -16($fp) # This function will consume the arguments jal $t8 # Pop ra register of return function of the stack @@ -486,10 +631,187 @@ lw $fp, ($sp) lw $t0, -16($fp) # saves the return value move $t0, $v0 -move $v0, $t0 +lw $t1, -0($fp) +lw $t2, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_int_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -0($fp) +sw $t2, -20($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# Saves in local_main_Main_internal_5 data_1 +la $t1, data_1 +lw $t2, -0($fp) +lw $t3, -28($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 12($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -24($fp) +sw $t2, -0($fp) +sw $t3, -28($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -28($fp) +# saves the return value +move $t0, $v0 +lw $t1, -32($fp) +# Moving local_main_Main_internal_6 to local_main_Main_internal_7 +move $t1, $t0 +sw $t1, -32($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +# Removing all locals from stack +addiu $sp, $sp, 36 +jr $ra + + +function_fib_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value i +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_fib_Main_a_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_fib_Main_b_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_fib_Main_c_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_fib_Main_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_fib_Main_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_fib_Main_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_fib_Main_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_fib_Main_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_fib_Main_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_fib_Main_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_fib_Main_internal_10 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +# Moving 1 to local_fib_Main_a_0 +li $t0, 1 +sw $t0, -8($fp) +lw $t1, -12($fp) +# Moving 0 to local_fib_Main_b_1 +li $t1, 0 +sw $t1, -12($fp) +lw $t2, -16($fp) +# Moving 0 to local_fib_Main_c_2 +li $t2, 0 +sw $t2, -16($fp) +start_64: +lw $t3, -0($fp) +lw $t4, -28($fp) +# local_fib_Main_internal_5 <- i = 0 +li $t9, 0 +seq $t4, $t3, $t9 +lw $t5, -24($fp) +# local_fib_Main_internal_4 <- not local_fib_Main_internal_5 +beqz $t4, false_4 +li $t5, 0 +j end_4 +false_4: +li $t5, 1 +end_4: +# If local_fib_Main_internal_4 goto continue_64 +bnez $t5, continue_64 +j end_64 +continue_64: +lw $t6, -32($fp) +# local_fib_Main_internal_6 <- local_fib_Main_a_0 + local_fib_Main_b_1 +add $t6, $t0, $t1 +# Moving local_fib_Main_internal_6 to local_fib_Main_c_2 +move $t2, $t6 +sw $t2, -16($fp) +lw $t7, -36($fp) +# local_fib_Main_internal_7 <- local_fib_Main_c_2 - 1 +addi $t7, $t2, -1 +# Moving local_fib_Main_internal_7 to i +move $t3, $t7 +sw $t3, -0($fp) +# Moving local_fib_Main_a_0 to local_fib_Main_b_1 +move $t1, $t0 +sw $t1, -12($fp) +# Moving local_fib_Main_c_2 to local_fib_Main_a_0 +move $t0, $t2 +sw $t0, -8($fp) +lw $a0, -40($fp) +# Moving local_fib_Main_c_2 to local_fib_Main_internal_8 +move $a0, $t2 +sw $a0, -40($fp) +j start_64 +end_64: +lw $a1, -20($fp) +# Moving local_fib_Main_internal_8 to local_fib_Main_internal_3 +move $a1, $a0 +sw $a1, -20($fp) +lw $a2, -44($fp) +# Moving local_fib_Main_c_2 to local_fib_Main_internal_9 +move $a2, $t2 +sw $a2, -44($fp) +lw $a3, -48($fp) +# Moving local_fib_Main_internal_9 to local_fib_Main_internal_10 +move $a3, $a2 +sw $a3, -48($fp) +move $v0, $a3 # Empty all used registers and saves them to memory # Removing all locals from stack -addiu $sp, $sp, 20 +addiu $sp, $sp, 52 jr $ra .data @@ -499,9 +821,13 @@ type_String: .asciiz "String" type_Int: .asciiz "Int" type_Bool: .asciiz "Bool" type_Main: .asciiz "Main" -data_0: .asciiz "Ho" -data_1: .asciiz "Ho" -methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +type_A: .asciiz "A" +types: .word 0, 0, 0, 0, 0, 0, 0 +data_0: .asciiz "Enter n to find nth fibonacci number! +" +data_1: .asciiz " +" +methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 local_in_string_result_0: .space 20 local_concat_result_0: .space 20 local_substr_result_0: .space 20 \ No newline at end of file diff --git a/src/test1.cl b/src/test1.cl index 46dded22..024cbfbe 100644 --- a/src/test1.cl +++ b/src/test1.cl @@ -1,6 +1,33 @@ class Main inherits IO { + -- the class has features. Only methods in this case. + main(): Object { + { + out_string("Enter n to find nth fibonacci number!\n"); + out_int(fib(in_int())); + out_string("\n"); + } + }; + + fib(i : Int) : Int { -- list of formals. And the return type of the method. + let a : Int <- 1, + b : Int <- 0, + c : Int <- 0 + in + { + while (not (i = 0)) loop -- expressions are nested. + { + c <- a + b; + i <- c - 1; + b <- a; + a <- c; + } + pool; + c; + } + }; - main(): Object { - out_int("Ho" = "Ho") - }; }; + +class A { + +}; \ No newline at end of file From f241b85368d38dd1c80075a4b357e7d9d28e34a3 Mon Sep 17 00:00:00 2001 From: Noly Fernandez Date: Thu, 26 Nov 2020 13:03:08 -0700 Subject: [PATCH 49/60] Runtime errors implemented --- src/codegen/__init__.py | 10 +- .../__pycache__/__init__.cpython-37.pyc | Bin 1098 -> 1084 bytes .../__pycache__/cil_ast.cpython-37.pyc | Bin 13853 -> 14892 bytes src/codegen/cil_ast.py | 23 +- src/codegen/tools.py | 3 +- .../base_cil_visitor.cpython-37.pyc | Bin 8334 -> 8667 bytes .../cil_format_visitor.cpython-37.pyc | Bin 8947 -> 9397 bytes .../__pycache__/cil_visitor.cpython-37.pyc | Bin 12391 -> 13088 bytes src/codegen/visitors/base_cil_visitor.py | 14 +- src/codegen/visitors/base_mips_visitor.py | 24 +- src/codegen/visitors/cil_format_visitor.py | 11 + src/codegen/visitors/cil_visitor.py | 71 +- src/codegen/visitors/mips_visitor.py | 128 +- src/cool_parser/output_parser/parselog.txt | 3865 ++++++++++++----- src/coolc.sh | 8 +- src/main.py | 22 +- src/semantic/types.py | 4 +- src/semantic/visitors/var_collector.py | 2 +- src/test.asm | 670 ++- src/test1.cl | 43 +- src/utils/ast.py | 4 +- 21 files changed, 3537 insertions(+), 1365 deletions(-) diff --git a/src/codegen/__init__.py b/src/codegen/__init__.py index 61780e82..e2fc46fe 100644 --- a/src/codegen/__init__.py +++ b/src/codegen/__init__.py @@ -14,12 +14,12 @@ def codegen_pipeline(context, ast, scope, debug=False): inherit_graph = context.build_inheritance_graph() # pprint(inherit_graph) data_code, text_code = CILToMIPSVistor(inherit_graph).visit(cil_ast) - save_code(data_code, text_code, False) - return ast, context, scope, cil_ast + return get_code(data_code, text_code, debug) -def save_code(data_code, text_code, debug): +def get_code(data_code, text_code, debug): text = '\n'.join(text_code) + '\n' + '\n'.join(data_code) if debug: print(text) - with open('test.asm', 'w+') as fd: - fd.write(text) \ No newline at end of file + with open('test.asm', 'w+') as fd: + fd.write(text) + return text \ No newline at end of file diff --git a/src/codegen/__pycache__/__init__.cpython-37.pyc b/src/codegen/__pycache__/__init__.cpython-37.pyc index 137204268dd94404ed5d19561175c98c58c20b29..67210d793aa7134ddb6adfa4dc5a11dc82e03907 100644 GIT binary patch delta 192 zcmX@bv4?}#iI=3oX*rpb1UMw1H}Em=6yQ%feV zXEb1pn*4y#no(e~3{xYc$mDrU;!H(ClXo&%FuF|s#H7Jg!#r7r+1P;(XkrmRh~Nbh zw^&M2D@txLrKJ=JfW*LrAc(~YB!q#umR01fVCZk7@P3V~H1>4IpT Kti>YF$O`~7#3n!h delta 207 zcmdnPaf*Z2iI9(}A}LJG%!~{*j5Q23Of{@&EWr$#%#)26 zjTqe~r!ZQwauz3+rA}VRXux=D@+C%VM#0H^OpT0UlP55Vv+yt$2~S?hWWlI1`4N)_ zQwqam9%f@ZexMaa0w97HNZev6Nv$Zk#gvv(BnT1%6G9*sCy)>U;$pC)7$q247&#bu XCf74JO9{i|k@P?`PL^SjXXFC_#T6+= diff --git a/src/codegen/__pycache__/cil_ast.cpython-37.pyc b/src/codegen/__pycache__/cil_ast.cpython-37.pyc index 3710c06cc0bda8249192e3b220348448d95eb964..31c53048aff493135bbf84f02cc9c329e4e5ce16 100644 GIT binary patch delta 1131 zcmZ8gOH5Ny5apJ(pg`&46aMfh<{_>w!hGv}O{x%bXnp1Bn@G$tkO zjKS{*d*U~kmJFF1Q|wCFcTKH3MjDm;XJRD39Ctd_SBd_Z6hJ?q_zv{Pr6Br2#dk_l zUyMZtPl{#L9ovtp|ftd(6Gk1frLI(}zG;K2$gL`?k`75}I#8YjS$n;FF zna|vo$gq^%2pQP!)p_72XQy@Cgkw<@JaQSK@}&JHQ8Pq0xuBJ?5Sql(pstPTAD zM);sY`v%v`GNHG$Md-)iR~5BiN%*<+qJD_zK83!C^fAGUfuAa>S2&6hz0;|0ZI&7y{A*|WFx&X#R7_DrBWA;T>2EXkix^aw^!a0WvE>vD&m0)!Y>4F%u z!$YSF9yyj-E%=;fCc}cWR*(>>QB{?&YCY&&m)Typ=JE*>i0@J16NqQ6nyca&bAzoq zlsbuoCL(BY6VJ4aPg3Iv#({81IuM?XL<8Wlb*9uI%uQ%4u{@FXb#wta9+K+OSB6$I zpQV!RcN`R^5b06XpQ8F;uClmxG;tp0U13R{FLBGWG7kmC;7lMA5u;&|%X48K6=kAC z#L%pGBs3R+_ofW+=awhsV$!WP@~Dlpp{)~88}lhjYG|)6)bJ3zFq*TbQ8Bp1QBFyb zE{hB9R9_vYe}>cCa~f_=6U=E?In5%cDdRLhoTh=(JM%Fz0W$PloZg4iQ*gR(PIt=b cIQZnFnO)?vY$2AS`tENzEOfbg%1tO0J1poj5 delta 776 zcmZ9KJxr5P6oz|ii^WRyV$>Ryw$LA1prxfmF;R?(T1zd;kCakqiv?riP%k7J2eC0a zx!5wlh}kxA-d-f{4I0h zB^FwSWtzgP2A+l|*o!`IMZCc)Z^qhB>~+LcSyx{a3}H zCZCWDWsF2!=u)M9HPKigLR0k@9Hva8`ZWovN;h6CFBSN ze;TYK`XMhub0ULdZC<-h8sp3yXPSSTP-`p6EJfB0X<40?Xul>Vw5?vC;@F1u_TzG# zY&P+4RO8xO?YJQt;S7(-JaK8@dHt^E;fmOWqmhiYK-`JT;UvCCZVESMI&-o}F_$5y zsB1PwuZsZgMMvc%ale62689q(n-^icjd?94;*k5gtY_)cQH{k=-s{Abt~;U|JK|Y6 zMd7$1e`>iB_XyF8``zbJj$5`LWN0CmO<07Qrb{{)!NdJ`Q~YNrUccfUE8eH#)hS+z q;&Ce;p5n16e!D8L6j``!#VsjrKuzOW<4!#8*&=dS?KzD41Fk<`NU>x9 diff --git a/src/codegen/cil_ast.py b/src/codegen/cil_ast.py index 991fddcb..7d36ae05 100644 --- a/src/codegen/cil_ast.py +++ b/src/codegen/cil_ast.py @@ -173,6 +173,14 @@ def __init__(self, cond, label, idx=None): self.in1 = cond +class GotoIfFalseNode(InstructionNode): + def __init__(self, cond, label, idx=None): + super().__init__(idx) + self.cond = cond + self.label = label + + self.in1 = cond + class StaticCallNode(InstructionNode): def __init__(self, xtype, function, dest, args, return_type, idx=None): super().__init__(idx) @@ -324,4 +332,17 @@ def __init__(self, dest, expr, type2, idx=None): self.out = dest self.in1 = expr # is a string, so is always a variable - \ No newline at end of file + +class VoidConstantNode(InstructionNode): + def __init__(self, obj, idx=None): + super().__init__(idx) + self.obj = obj + + self.out = obj + +class ErrorNode(InstructionNode): + "Generic class to report errors in mips" + def __init__(self, typex, idx=None): + super().__init__(idx) + self.type = typex + diff --git a/src/codegen/tools.py b/src/codegen/tools.py index eacaeab1..e8ba9f0f 100644 --- a/src/codegen/tools.py +++ b/src/codegen/tools.py @@ -49,7 +49,8 @@ class AddrType(Enum): REF = 1, STR = 2, BOOL = 3, - INT = 4 + INT = 4, + VOID = 5 class AddressDescriptor: 'Stores the location of each variable' diff --git a/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc index df418931f1136eb76a68b20b04da51fdd7956b1b..e697d9e40a5731013198b44199371ae08e60c9ac 100644 GIT binary patch delta 1903 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 delta 657 zcmZuv&1=(O9PXQ@#dWqxle9^iCQX+Fsjlmgja6+CEXpkCWx_dv{(P$(< zU#a!ZT~cqw9y6=K7jJG7Rj9M~NnNT3m)NW1T*wPP414kl@#IF0F_=B|{;@zVKW|~N z*J^CCZzK36q+tpY%6t(&xhk4`By7;ieg;IdFvnL>ivJh-!B_c$nG5<_o3?{H9Um20 zvsB&<`xYM+f@WzqXi6A@CTcsot_uokF$;Ia!*InT;3NT`IR|T^f`X~zvQ)qcNkK8; zU|l+dC)6&O20kV7FcT8^7wafpe% z>OnF?xs&7~<;XOn2k+G}ve5CmN8)fcrS@d$)?e9)*;x=SixpKtBUR}{{eBAJyISt_ zbF~rNODTU2%;AexfvqVRN?*Zks@wZ*q(_iWcXw*)A-MVhH2(R6aC8R?hKjtgA2&L7 z1)Eeq(|K$gd5jy~I_ERPXj1#{oNJj3J_vT~IUQ(*p(4PX&JEzY`3U9gC49_oW3_J| zd4P?+8qQc1#&@x7jrYE$%&j(kK0|+qjHI22y43YUROE<1fuik%2E)YnFlpPw!!>*0 EHx$*k{{R30 diff --git a/src/codegen/visitors/__pycache__/cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/cil_visitor.cpython-37.pyc index f9722be9eaf8c3711a60ee3fa85447c4cedb1f10..25bd107f529277af219040f91ffd8b3f650d6ef9 100644 GIT binary patch delta 3956 zcmcgvU2I%O6~1%-_U_$Zuh(m@9sks>*S_}JZW}kL8`30=-86~gv`Olq?ayYtd+qGv z>^ig8#T9quR1PF1&>}`4q*CO4qkTXPMyUKeRDc9L^#Q4%6%Q1U`b3Zr;-P@xoO9Q9 zFo}4>(VU$*XYQGqbH4MFk1uU5hMx?DObPxB>HX|4pS&HG89TSt!VW5Zwz8?)!*ym4 z+eShCrd&uBlq6^O7~ZHK(>RS!W`zy?4rq)>$dwO4$}y+KkmDCatBMR+p9H zu3T!{kf)^=<1ffHqvi*B!ZlofU1rkN-&~X&ZL{5#N*yqgFgnFW{Q&C{uj@Y_Y=pSI zRIEBS&lYk{uHm0QdvZEEckIke#{Y7qSRk%=&i7N+FOo(#3vWGY_+)lM95$m*-rL~?Od)D_#?pJ`^BB$3_BzyL-TA_ z+zP$fLTn#yR-IQ?Y(6OthL`kHxcM}x%WnNRth0d$_uZXV#av&zd^?*YKJR8Q}SD7K8UHSx8U$uQp74?}@b{fGE< z%Z+tM-;5O0o2+EKDZM4vSno{s*vTZBj<*dzlg0(;&1lC%ywv#s|~o{l;08nM$&U<xhGI!D!-uzW{UoA`q*Cyv|=j#uyR}NjDNSI`2TzgQN|~ zJs`m^p#agqb4V7DAOLtCNdd?yZsU}^eFkUub2*3>QBFrM;p{RJ^fNCaDT$-;p48W2 z`oA5xm2MBPz2?~>^L(}A+_nJ13{Jtb!O((?Z&O>Zj+~|CS{Y?C@^LZbC0JSfR zRM!l%Fukt-0vJ^Th$IJ@!Q#6pMc*M}kHe^9HiW_=0iq!F)D%bFR47rYz*Sw9(v0G0 z8xkcLHfQO44!+^bNYL+%CPhGbkyZ}q@P{PJME`3PI*3aQ=PW)uw{wU>lGTyVu zJWs`@A-cPN5THAgGbY7H-H++RxM2i0jDHN%Du%rz8!X0xEUp?XCI3fg>mVhg{azG$ zW}bGWP0iK4j7`RZ{0=!;+SI|AK3A^GP`7jIU z1e)LYYi9GCAY}W!Unro1ssx>>iLu^yb3U*=cd}Uu*@k9AS0>g}hj3m|hYl=V2%|3}n#qEN*>9%=A5wqTp)yQ9C73FXC2l!)YY6mCQNxH&|CO zAxME3m@@`Og=7h7GY%^gIruAY{i<(+&FT)vTEiXKZiT&6Ls}`V-0S`?!%oT>4a0`I zk*zvcIM#jsSyAur-M4e4j7h4!+pggTOZ>L~2^JS!12>O+3K?jHyDURTQVZeRi(Kp; z8j8KP!UE#L3MCRR9@?Y_tMkQ*oTy&b|!jC*vQ{wLr_C}(>KwJ~h z`kAl>$JZTYQ!U8Q<7v%)!bd2>ege_u1Gxd6fo}(0GIReX z!mhc&psQQ}bOvAqYa!CFc=`*f8-P)8GxUSYB&BG$D=0qv;!uNB|np_Rv?rrD^9Ueraq!7j-=w} z20@0{U%g`U95kCA+<-|{3yJ}C4<<4qNW5Uc8Pz2OUnbx^!-Hc&ihMI{7|C3=r8wpuHEZ!UHSs)$&wu? zi15Xhc~3ih9z+=>x4P!_;pb7$7m!f4NaoN82z*Sw3CIya_=gV{|4L7Yw}+F#OnA1k zRLtj~iFCx(QA=!%9AY=buysHTjmEEFW>#TP(4aNpsZ`RM4^wJb&SWZVnyWd=ZaGu$ z!U5u4BPX*<8117refDQ}}+8Y=bR8F6RqLc9^(uF+VpY0qIXJ${586xYWG*iG^6 z@!sAq!dLtjk}o0oGLqMkyn*B^V&b88@y~IybPbkJC!t2hk}w8f#9){(Lg8&LN+K|n l=Fs662d;xK!Z5mFbipuS1e$Zyf_qSpCaz8-#Ky!Q{|yzIP^|y} delta 3199 zcmai0TWnj$5xsj~yq7QW6^W81QMPP8OiPy3R*~X7tT;k#N0#f_a2(n$Lz`DJ8H==+ zSB2tUmR98^{wNAGgZ9U0N(N|w{uFft1Zh7Sq(#vpKSlG&0?kKXKtJ-`qK|ZDFGVSI ziV)c0?Ck99&beoHx4H7Smx9j*0$vG!9~$rGZ!J6w%8bozhuPzbUQC{sGO6twYLvsT_g|1~tr>Hq@?+Tg zu?;{&pJj1)TmKEb>G{>j7%eLMna&Jm$PpIA|0MRuScvJ{_Y9BB7U848S@@;*DR$&_ z-*Gk$3%)Ab4-b8>!0!*lSrSh8|1>azVcOnR%g(P^_Kj+hPoaTN!&8ApHV<2Yi|jPC z0}sN&>>+2>e&v?MXW-S~s(zB3Pr?4w0K2;F>(iNUf-DOpo<(z1JBn%rH*yTBp}sK@ zB}k)ZP_%<9rAjehux(ztwr*3%5Y8w~XeD>c&mOJK-$*D*QS8`Jjn*Y6`a6Tab*rX544Z zK3i{w;N!@?K-f_o){<9b{GKXo4xVHaa4VV+scj03-;bV|6N$e_OE7l{AL=|nf-v|7 zwwjDWmogDf5VV!*wKC7b%dzp*p1ohBVdG-8RJ=e~_hXk2kQgR$3B{xMwTL z7Gsh_C`Ed)(On$icY{L$pzrPg)c6d5zK46*0VpZ};*=84lF&$ukf79foWv-J$4Gn% zdi)9v>;-NP`_Gf{|HH?x(zsaRE2QN~xS)L-RTs4FU&MW^H_IPlmiMjC$nZxLqeFpE zZz2g=OR$$J(#=)mHBDV2gp0%#_`^^lD{?S;OJsNF0;=8Zvp3btyxlTzqx&39r^6fW?EmSk zUPB1&e9pXHt=Of?x|MIM7M^q&zo2g0Tq<0%ZZ2bK@1R$1*I$WAK9mf$3bZ8`SkQDY8&`id@SiPLU8Z1)PUI!hVfT56KrnI3uzld-2wY zq3)$VquzFCe2YD=*&H{_Z=i1`=oX>~DT=Oy*1dbC?#m=@qG%h|&6<_3*=u~6Y-{l0 z!NhQPKRK_6>~6I}4k;Kq^fdFsi-+z%^8^{_gYT(Yu_T4cczU@`H$hvmHg0jjFPEul zm`ncnxJY}q^ml_iQZR=ph+3+Y><(76yc=p7=2MA2+7FRhu53%fT*5&->6FkKfy0dO@NojxIQ>IjVa>EsHOg(<;`6 zofkaF^trh1;?naeIs7|)cyXM-Kr*ebS-gM;fw*u8e7;74J}~m3=T>$pM&p8e71+q+ z#-3zIwjnf1NGg1sC|-P&^s_ihqFNCCn;B&HAb$8rL+fVBY`Ljp?rPc7vB^yX(KQh( z9TW8;3O>{cb@KINIV;`S0rU)Z3YH#I2Hw?d88iPR4|4t!)yhhhuhm3pr5m`%c5tb> zTDo4qdbEYL%V&O?5)+5=5^3TP6NnHm1Z6VbPetTwIG$4q>l^N~R!Lpv`kFY4}#O%zhdqU;PbQg$(X!7gN{!I(G+?`Ds&P59Qt984dH!PL ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',29,1046) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',29,1046) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',29,1046) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : class type ocur id opar formals cpar . LexToken(colon,':',29,1048) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon . LexToken(type,'Bool',29,1050) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type . LexToken(ocur,'{',29,1055) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur . LexToken(true,'true',29,1057) + yacc.py: 445:Action : Shift and goto state 91 + yacc.py: 410: + yacc.py: 411:State : 91 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur true . LexToken(ccur,'}',29,1062) + yacc.py: 471:Action : Reduce rule [atom -> true] with ['true'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : class type ocur def_func semi id opar epsilon . LexToken(cpar,')',35,1254) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : class type ocur def_func semi id opar param_list_empty . LexToken(cpar,')',35,1254) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals . LexToken(cpar,')',35,1254) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar . LexToken(colon,':',35,1257) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon . LexToken(type,'Int',35,1259) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type . LexToken(ocur,'{',35,1263) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur . LexToken(ocur,'{',35,1265) + yacc.py: 445:Action : Shift and goto state 90 + yacc.py: 410: + yacc.py: 411:State : 90 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur . LexToken(id,'abort',35,1267) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id . LexToken(opar,'(',35,1272) + yacc.py: 445:Action : Shift and goto state 113 + yacc.py: 410: + yacc.py: 411:State : 113 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar . LexToken(cpar,')',35,1273) + yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar epsilon . LexToken(cpar,')',35,1273) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar arg_list_empty . LexToken(cpar,')',35,1273) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar args . LexToken(cpar,')',35,1273) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar args cpar . LexToken(semi,';',35,1274) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['abort','(',[],')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'abort',35,1267), [])) + yacc.py: 410: + yacc.py: 411:State : 78 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur func_call . LexToken(semi,';',35,1274) + yacc.py: 471:Action : Reduce rule [factor -> func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar epsilon . LexToken(cpar,')',40,1389) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',40,1389) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals . LexToken(cpar,')',40,1389) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar . LexToken(colon,':',40,1392) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon . LexToken(type,'List',40,1394) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',40,1399) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(ocur,'{',40,1401) + yacc.py: 445:Action : Shift and goto state 90 + yacc.py: 410: + yacc.py: 411:State : 90 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur . LexToken(id,'abort',40,1403) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id . LexToken(opar,'(',40,1408) + yacc.py: 445:Action : Shift and goto state 113 + yacc.py: 410: + yacc.py: 411:State : 113 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar . LexToken(cpar,')',40,1409) + yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar epsilon . LexToken(cpar,')',40,1409) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar arg_list_empty . LexToken(cpar,')',40,1409) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar args . LexToken(cpar,')',40,1409) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar args cpar . LexToken(semi,';',40,1410) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['abort','(',[],')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'abort',40,1403), [])) + yacc.py: 410: + yacc.py: 411:State : 78 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur func_call . LexToken(semi,';',40,1410) + yacc.py: 471:Action : Reduce rule [factor -> func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['i',':','Int'] and goto state 44 + yacc.py: 506:Result : ((LexToken(id,'i',49,1777), LexToken(type ...) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar param . LexToken(cpar,')',49,1784) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) + yacc.py: 410: + yacc.py: 411:State : 42 + yacc.py: 430:Defaulted state 42: Reduce using 30 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',49,1784) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',49,1784) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',49,1786) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'List',49,1788) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',49,1793) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(opar,'(',50,1801) + yacc.py: 445:Action : Shift and goto state 80 + yacc.py: 410: + yacc.py: 411:State : 80 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar . LexToken(new,'new',50,1802) + yacc.py: 445:Action : Shift and goto state 89 + yacc.py: 410: + yacc.py: 411:State : 89 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar new . LexToken(type,'Cons',50,1806) + yacc.py: 445:Action : Shift and goto state 134 + yacc.py: 410: + yacc.py: 411:State : 134 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',50,1810) + yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Cons'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( id] with ['i'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['init','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'init',50,1812), [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['cons','(',,')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 16 + yacc.py: 430:Defaulted state 16: Reduce using 14 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',53,1833) + yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 48 + yacc.py: 430:Defaulted state 48: Reduce using 16 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',53,1833) + yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','List','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['car',':','Int'] and goto state 17 + yacc.py: 506:Result : ( id colon type] with ['cdr',':','List'] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',76,2482) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',76,2482) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',76,2482) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals cpar . LexToken(colon,':',76,2484) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals cpar colon . LexToken(type,'Bool',76,2486) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',76,2491) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur . LexToken(false,'false',76,2493) + yacc.py: 445:Action : Shift and goto state 92 + yacc.py: 410: + yacc.py: 411:State : 92 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur false . LexToken(ccur,'}',76,2499) + yacc.py: 471:Action : Reduce rule [atom -> false] with ['false'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',78,2511) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',78,2511) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',78,2511) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals cpar . LexToken(colon,':',78,2514) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals cpar colon . LexToken(type,'Int',78,2516) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',78,2520) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'car',78,2522) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',78,2526) + yacc.py: 471:Action : Reduce rule [atom -> id] with ['car'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',80,2538) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',80,2538) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',80,2538) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',80,2541) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'List',80,2543) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',80,2548) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'cdr',80,2550) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',80,2554) + yacc.py: 471:Action : Reduce rule [atom -> id] with ['cdr'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['i',':','Int'] and goto state 44 + yacc.py: 506:Result : ((LexToken(id,'i',82,2566), LexToken(type ...) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param . LexToken(comma,',',82,2573) + yacc.py: 445:Action : Shift and goto state 60 + yacc.py: 410: + yacc.py: 411:State : 60 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma . LexToken(id,'rest',82,2575) + yacc.py: 445:Action : Shift and goto state 46 + yacc.py: 410: + yacc.py: 411:State : 46 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma id . LexToken(colon,':',82,2580) + yacc.py: 445:Action : Shift and goto state 61 + yacc.py: 410: + yacc.py: 411:State : 61 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma id colon . LexToken(type,'List',82,2582) + yacc.py: 445:Action : Shift and goto state 96 + yacc.py: 410: + yacc.py: 411:State : 96 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma id colon type . LexToken(cpar,')',82,2586) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['rest',':','List'] and goto state 44 + yacc.py: 506:Result : ((LexToken(id,'rest',82,2575), LexToken(t ...) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param . LexToken(cpar,')',82,2586) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 + yacc.py: 506:Result : ([(LexToken(id,'rest',82,2575), LexToken( ...) + yacc.py: 410: + yacc.py: 411:State : 95 + yacc.py: 430:Defaulted state 95: Reduce using 33 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param_list . LexToken(cpar,')',82,2586) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) + yacc.py: 410: + yacc.py: 411:State : 42 + yacc.py: 430:Defaulted state 42: Reduce using 30 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',82,2586) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',82,2586) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',82,2588) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'List',82,2590) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',82,2595) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(ocur,'{',83,2603) + yacc.py: 445:Action : Shift and goto state 90 + yacc.py: 410: + yacc.py: 411:State : 90 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur ocur . LexToken(id,'car',84,2607) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur ocur id . LexToken(larrow,'<-',84,2611) + yacc.py: 445:Action : Shift and goto state 112 + yacc.py: 410: + yacc.py: 411:State : 112 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur ocur id larrow . LexToken(id,'i',84,2614) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur ocur id larrow id . LexToken(semi,';',84,2615) + yacc.py: 471:Action : Reduce rule [atom -> id] with ['i'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['car','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['rest'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['cdr','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['init','(',,')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 16 + yacc.py: 430:Defaulted state 16: Reduce using 14 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',90,2655) + yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 48 + yacc.py: 430:Defaulted state 48: Reduce using 16 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',90,2655) + yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Cons','inherits','List','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['mylist',':','List'] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar . LexToken(id,'l',107,3036) + yacc.py: 445:Action : Shift and goto state 46 yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : class type inherits type ocur id opar epsilon . LexToken(cpar,')',3,86) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 411:State : 46 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar id . LexToken(colon,':',107,3038) + yacc.py: 445:Action : Shift and goto state 61 yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : class type inherits type ocur id opar param_list_empty . LexToken(cpar,')',3,86) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 411:State : 61 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar id colon . LexToken(type,'List',107,3040) + yacc.py: 445:Action : Shift and goto state 96 + yacc.py: 410: + yacc.py: 411:State : 96 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar id colon type . LexToken(cpar,')',107,3044) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['l',':','List'] and goto state 44 + yacc.py: 506:Result : ((LexToken(id,'l',107,3036), LexToken(typ ...) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param . LexToken(cpar,')',107,3044) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) + yacc.py: 410: + yacc.py: 411:State : 42 + yacc.py: 430:Defaulted state 42: Reduce using 30 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list . LexToken(cpar,')',107,3044) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) yacc.py: 410: yacc.py: 411:State : 51 - yacc.py: 435:Stack : class type inherits type ocur id opar formals . LexToken(cpar,')',3,86) + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',107,3044) yacc.py: 445:Action : Shift and goto state 64 yacc.py: 410: yacc.py: 411:State : 64 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar . LexToken(colon,':',3,87) + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar . LexToken(colon,':',107,3046) yacc.py: 445:Action : Shift and goto state 100 yacc.py: 410: yacc.py: 411:State : 100 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon . LexToken(type,'Object',3,89) + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon . LexToken(type,'Object',107,3048) yacc.py: 445:Action : Shift and goto state 138 yacc.py: 410: yacc.py: 411:State : 138 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type . LexToken(ocur,'{',3,96) + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',107,3055) yacc.py: 445:Action : Shift and goto state 181 yacc.py: 410: yacc.py: 411:State : 181 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur . LexToken(ocur,'{',4,100) - yacc.py: 445:Action : Shift and goto state 90 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur . LexToken(if,'if',108,3063) + yacc.py: 445:Action : Shift and goto state 86 yacc.py: 410: - yacc.py: 411:State : 90 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur . LexToken(id,'out_string',5,105) + yacc.py: 411:State : 86 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if . LexToken(id,'l',108,3066) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if id . LexToken(dot,'.',108,3067) + yacc.py: 471:Action : Reduce rule [atom -> id] with ['l'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar epsilon . LexToken(cpar,')',108,3074) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar arg_list_empty . LexToken(cpar,')',108,3074) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar args . LexToken(cpar,')',108,3074) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar args cpar . LexToken(then,'then',108,3076) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['isNil','(',[],')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'isNil',108,3068), [])) + yacc.py: 410: + yacc.py: 411:State : 167 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot func_call . LexToken(then,'then',108,3076) + yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( string] with [] and goto state 79 - yacc.py: 506:Result : ( string] with ['\n'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',5,105), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',108,3081), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( id] with ['l'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi id opar id opar id opar epsilon . LexToken(cpar,')',6,182) + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar epsilon . LexToken(cpar,')',110,3145) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi id opar id opar id opar arg_list_empty . LexToken(cpar,')',6,182) + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar arg_list_empty . LexToken(cpar,')',110,3145) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi id opar id opar id opar args . LexToken(cpar,')',6,182) + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar args . LexToken(cpar,')',110,3145) yacc.py: 445:Action : Shift and goto state 191 yacc.py: 410: yacc.py: 411:State : 191 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi id opar id opar id opar args cpar . LexToken(cpar,')',6,183) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['in_int','(',[],')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'in_int',6,175), [])) + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar args cpar . LexToken(cpar,')',110,3146) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['head','(',[],')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'head',110,3140), [])) yacc.py: 410: - yacc.py: 411:State : 78 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur expr semi id opar id opar func_call . LexToken(cpar,')',6,183) - yacc.py: 471:Action : Reduce rule [factor -> func_call] with [] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['fib','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'fib',6,171), [ id opar args cpar] with ['out_int','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_int',110,3130), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( string] with [' '] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_int','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_int',6,163), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',111,3155), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( string] with ['\n'] and goto state 79 - yacc.py: 506:Result : ( id] with ['l'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar epsilon . LexToken(cpar,')',112,3196) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar arg_list_empty . LexToken(cpar,')',112,3196) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar args . LexToken(cpar,')',112,3196) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar args cpar . LexToken(cpar,')',112,3197) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['tail','(',[],')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'tail',112,3191), [])) + yacc.py: 410: + yacc.py: 411:State : 167 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot func_call . LexToken(cpar,')',112,3197) + yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',7,190), [ id opar args cpar] with ['print_list','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'print_list',112,3178), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print_list','(',,')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['i',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'i',11,222), LexToken(type, ...) + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar . LexToken(cpar,')',126,3742) + yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 + yacc.py: 548:Result : (None) yacc.py: 410: - yacc.py: 411:State : 44 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar param . LexToken(cpar,')',11,229) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'i',11,222), LexToken(type ...) + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',126,3742) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) yacc.py: 410: - yacc.py: 411:State : 42 - yacc.py: 430:Defaulted state 42: Reduce using 30 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar param_list . LexToken(cpar,')',11,229) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'i',11,222), LexToken(type ...) + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',126,3742) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals . LexToken(cpar,')',11,229) + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals . LexToken(cpar,')',126,3742) yacc.py: 445:Action : Shift and goto state 64 yacc.py: 410: yacc.py: 411:State : 64 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar . LexToken(colon,':',11,231) + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar . LexToken(colon,':',126,3744) yacc.py: 445:Action : Shift and goto state 100 yacc.py: 410: yacc.py: 411:State : 100 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon . LexToken(type,'Int',11,233) + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon . LexToken(type,'Object',126,3746) yacc.py: 445:Action : Shift and goto state 138 yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type . LexToken(ocur,'{',11,237) - yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',126,3753) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur . LexToken(ocur,'{',127,3761) + yacc.py: 445:Action : Shift and goto state 90 + yacc.py: 410: + yacc.py: 411:State : 90 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur . LexToken(id,'mylist',128,3765) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id . LexToken(larrow,'<-',128,3772) + yacc.py: 445:Action : Shift and goto state 112 + yacc.py: 410: + yacc.py: 411:State : 112 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow . LexToken(new,'new',128,3775) + yacc.py: 445:Action : Shift and goto state 89 + yacc.py: 410: + yacc.py: 411:State : 89 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow new . LexToken(type,'List',128,3779) + yacc.py: 445:Action : Shift and goto state 134 + yacc.py: 410: + yacc.py: 411:State : 134 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow new type . LexToken(dot,'.',128,3783) + yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','List'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3784), [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3792), [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( id colon type] with ['a',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'a',12,301), LexToken(type, ...) + yacc.py: 411:State : 122 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow factor dot . LexToken(id,'cons',128,3800) + yacc.py: 445:Action : Shift and goto state 168 yacc.py: 410: - yacc.py: 411:State : 130 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let param . LexToken(larrow,'<-',12,309) - yacc.py: 445:Action : Shift and goto state 173 + yacc.py: 411:State : 168 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow factor dot id . LexToken(opar,'(',128,3804) + yacc.py: 445:Action : Shift and goto state 113 yacc.py: 410: - yacc.py: 411:State : 173 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let param larrow . LexToken(num,1.0,12,312) + yacc.py: 411:State : 113 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow factor dot id opar . LexToken(num,3.0,128,3805) yacc.py: 445:Action : Shift and goto state 88 yacc.py: 410: yacc.py: 411:State : 88 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let param larrow num . LexToken(comma,',',12,313) - yacc.py: 471:Action : Reduce rule [atom -> num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( num] with [3.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 - yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3800), [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( id colon type] with ['b',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'b',13,320), LexToken(type, ...) + yacc.py: 411:State : 77 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow factor . LexToken(dot,'.',128,3807) + yacc.py: 445:Action : Shift and goto state 122 yacc.py: 410: - yacc.py: 411:State : 130 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let let_assign comma param . LexToken(larrow,'<-',13,328) - yacc.py: 445:Action : Shift and goto state 173 + yacc.py: 411:State : 122 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow factor dot . LexToken(id,'cons',128,3808) + yacc.py: 445:Action : Shift and goto state 168 yacc.py: 410: - yacc.py: 411:State : 173 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let let_assign comma param larrow . LexToken(num,0.0,13,331) + yacc.py: 411:State : 168 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow factor dot id . LexToken(opar,'(',128,3812) + yacc.py: 445:Action : Shift and goto state 113 + yacc.py: 410: + yacc.py: 411:State : 113 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow factor dot id opar . LexToken(num,4.0,128,3813) yacc.py: 445:Action : Shift and goto state 88 yacc.py: 410: yacc.py: 411:State : 88 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let let_assign comma param larrow num . LexToken(comma,',',13,332) - yacc.py: 471:Action : Reduce rule [atom -> num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( num] with [4.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 - yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3808), [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( id colon type] with ['c',':','Int'] and goto state 130 - yacc.py: 506:Result : ((LexToken(id,'c',14,339), LexToken(type, ...) + yacc.py: 411:State : 77 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow factor . LexToken(dot,'.',128,3815) + yacc.py: 445:Action : Shift and goto state 122 + yacc.py: 410: + yacc.py: 411:State : 122 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow factor dot . LexToken(id,'cons',128,3816) + yacc.py: 445:Action : Shift and goto state 168 yacc.py: 410: - yacc.py: 411:State : 130 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let let_assign comma let_assign comma param . LexToken(larrow,'<-',14,347) - yacc.py: 445:Action : Shift and goto state 173 + yacc.py: 411:State : 168 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow factor dot id . LexToken(opar,'(',128,3820) + yacc.py: 445:Action : Shift and goto state 113 yacc.py: 410: - yacc.py: 411:State : 173 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let let_assign comma let_assign comma param larrow . LexToken(num,0.0,14,350) + yacc.py: 411:State : 113 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow factor dot id opar . LexToken(num,5.0,128,3821) yacc.py: 445:Action : Shift and goto state 88 yacc.py: 410: yacc.py: 411:State : 88 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let let_assign comma let_assign comma param larrow num . LexToken(in,'in',15,355) - yacc.py: 471:Action : Reduce rule [atom -> num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( num] with [5.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 198 - yacc.py: 506:Result : ( param larrow expr] with [,'<-',] and goto state 129 - yacc.py: 506:Result : ( let_assign] with [] and goto state 197 - yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 197 - yacc.py: 506:Result : ([ let_assign comma let_list] with [,',',] and goto state 128 - yacc.py: 506:Result : ([ comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ ( id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3816), [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) yacc.py: 410: - yacc.py: 411:State : 73 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let let_list in ocur while opar not opar comp . LexToken(cpar,')',17,383) - yacc.py: 471:Action : Reduce rule [expr -> comp] with [] and goto state 123 - yacc.py: 506:Result : ( epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) yacc.py: 410: - yacc.py: 411:State : 123 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let let_list in ocur while opar not opar expr . LexToken(cpar,')',17,383) - yacc.py: 445:Action : Shift and goto state 170 + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar arg_list_empty . LexToken(cpar,')',129,3851) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) yacc.py: 410: - yacc.py: 411:State : 170 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let let_list in ocur while opar not opar expr cpar . LexToken(cpar,')',17,384) - yacc.py: 471:Action : Reduce rule [factor -> opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( id opar args cpar] with ['isNil','(',[],')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'isNil',129,3845), [])) + yacc.py: 410: + yacc.py: 411:State : 167 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot func_call . LexToken(cpar,')',129,3852) + yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 124 - yacc.py: 506:Result : ( comp] with [] and goto state 124 + yacc.py: 506:Result : ( not expr] with ['not',] and goto state 77 - yacc.py: 506:Result : ( not expr] with ['not',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 133 - yacc.py: 506:Result : ( comp] with [] and goto state 133 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 - yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( id] with ['b'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 159 - yacc.py: 506:Result : ( op plus term] with [,'+',] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( id larrow expr] with ['c','<-',] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id] with ['c'] and goto state 79 - yacc.py: 506:Result : ( id opar args cpar] with ['print_list','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'print_list',131,3874), [ atom] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 160 - yacc.py: 506:Result : ( op minus term] with [,'-',] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( id larrow expr] with ['i','<-',] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['a'] and goto state 79 - yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( id larrow expr] with ['b','<-',] and goto state 111 - yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) yacc.py: 410: - yacc.py: 411:State : 151 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let let_list in ocur while expr loop ocur expr semi expr semi expr semi . LexToken(id,'a',22,471) - yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar epsilon . LexToken(cpar,')',132,3924) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let let_list in ocur while expr loop ocur expr semi expr semi expr semi id . LexToken(larrow,'<-',22,473) - yacc.py: 445:Action : Shift and goto state 112 + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar arg_list_empty . LexToken(cpar,')',132,3924) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) yacc.py: 410: - yacc.py: 411:State : 112 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let let_list in ocur while expr loop ocur expr semi expr semi expr semi id larrow . LexToken(id,'c',22,476) - yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 411:State : 153 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar args . LexToken(cpar,')',132,3924) + yacc.py: 445:Action : Shift and goto state 191 yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let let_list in ocur while expr loop ocur expr semi expr semi expr semi id larrow id . LexToken(semi,';',22,477) - yacc.py: 471:Action : Reduce rule [atom -> id] with ['c'] and goto state 79 - yacc.py: 506:Result : ( id opar args cpar] with ['tail','(',[],')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'tail',132,3919), [])) yacc.py: 410: - yacc.py: 411:State : 79 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur let let_list in ocur while expr loop ocur expr semi expr semi expr semi id larrow atom . LexToken(semi,';',22,477) - yacc.py: 471:Action : Reduce rule [factor -> atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['a','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 204 - yacc.py: 506:Result : ( comp] with [] and goto state 204 + yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( id] with ['c'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 196 - yacc.py: 506:Result : ( let let_list in expr] with ['let',,'in',] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['fib','(',,')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : class type inherits type ocur def_func semi def_func semi epsilon . LexToken(ccur,'}',29,509) + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi def_func semi epsilon . LexToken(ccur,'}',138,3957) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : class type inherits type ocur def_func semi def_func semi feature_list . LexToken(ccur,'}',29,509) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 16 - yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : def_class class type ocur epsilon . LexToken(ccur,'}',33,524) - yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 14 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 14 - yacc.py: 435:Stack : def_class class type ocur feature_list . LexToken(ccur,'}',33,524) - yacc.py: 445:Action : Shift and goto state 25 + yacc.py: 435:Stack : def_class def_class def_class . $end + yacc.py: 471:Action : Reduce rule [class_list -> def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','A','{',[],'}',';'] and goto state 3 - yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( ( "Hi"; + n : Object => "Hello"; + esac; + a <- new A; + }) + }; }; class A { - + i : Int; + f(): Int { + 1 + }; }; \ No newline at end of file diff --git a/src/utils/ast.py b/src/utils/ast.py index 93c3c7b9..1ab0b92b 100644 --- a/src/utils/ast.py +++ b/src/utils/ast.py @@ -185,8 +185,8 @@ class ConstantStrNode(AtomicNode): pass class ConstantVoidNode(AtomicNode): - def __init__(self): - super().__init__('void') + def __init__(self, obj): + super().__init__(obj) class SelfNode(Node): pass From 50db1e69239748bfc859c23546338fa9bccaae28 Mon Sep 17 00:00:00 2001 From: Noly Fernandez Date: Thu, 26 Nov 2020 13:38:32 -0700 Subject: [PATCH 50/60] Starting codegen tests --- src/cool_parser/output_parser/parselog.txt | 1658 ++++++++++---------- src/main.py | 4 +- 2 files changed, 831 insertions(+), 831 deletions(-) diff --git a/src/cool_parser/output_parser/parselog.txt b/src/cool_parser/output_parser/parselog.txt index 51df02d3..920d07d8 100644 --- a/src/cool_parser/output_parser/parselog.txt +++ b/src/cool_parser/output_parser/parselog.txt @@ -6146,19 +6146,19 @@ yacc.py: 411:State : 32 yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',29,1046) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',29,1046) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',29,1046) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',29,1046) @@ -6183,37 +6183,37 @@ yacc.py: 411:State : 91 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur true . LexToken(ccur,'}',29,1062) yacc.py: 471:Action : Reduce rule [atom -> true] with ['true'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur def_func semi id opar epsilon . LexToken(cpar,')',35,1254) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur def_func semi id opar param_list_empty . LexToken(cpar,')',35,1254) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur def_func semi id opar formals . LexToken(cpar,')',35,1254) @@ -6285,19 +6285,19 @@ yacc.py: 411:State : 113 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar . LexToken(cpar,')',35,1273) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar epsilon . LexToken(cpar,')',35,1273) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar arg_list_empty . LexToken(cpar,')',35,1273) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar args . LexToken(cpar,')',35,1273) @@ -6306,37 +6306,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar args cpar . LexToken(semi,';',35,1274) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['abort','(',[],')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'abort',35,1267), [])) + yacc.py: 506:Result : ((LexToken(id,'abort',35,1267), [])) yacc.py: 410: yacc.py: 411:State : 78 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur func_call . LexToken(semi,';',35,1274) - yacc.py: 471:Action : Reduce rule [factor -> func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar epsilon . LexToken(cpar,')',40,1389) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',40,1389) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals . LexToken(cpar,')',40,1389) @@ -6504,19 +6504,19 @@ yacc.py: 411:State : 113 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar . LexToken(cpar,')',40,1409) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar epsilon . LexToken(cpar,')',40,1409) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar arg_list_empty . LexToken(cpar,')',40,1409) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar args . LexToken(cpar,')',40,1409) @@ -6525,37 +6525,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar args cpar . LexToken(semi,';',40,1410) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['abort','(',[],')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'abort',40,1403), [])) + yacc.py: 506:Result : ((LexToken(id,'abort',40,1403), [])) yacc.py: 410: yacc.py: 411:State : 78 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur func_call . LexToken(semi,';',40,1410) - yacc.py: 471:Action : Reduce rule [factor -> func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['i',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'i',49,1777), LexToken(type ...) + yacc.py: 506:Result : ((LexToken(id,'i',49,1777), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar param . LexToken(cpar,')',49,1784) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',49,1784) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',49,1784) @@ -6734,37 +6734,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',50,1810) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Cons'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( id] with ['i'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['init','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'init',50,1812), [ id opar args cpar] with ['init','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'init',50,1812), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['cons','(',,')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['cons','(',,')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',53,1833) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',53,1833) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','List','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','List','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['car',':','Int'] and goto state 17 - yacc.py: 506:Result : ( ( id colon type] with ['cdr',':','List'] and goto state 17 - yacc.py: 506:Result : ( ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',76,2482) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',76,2482) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',76,2482) @@ -7097,37 +7097,37 @@ yacc.py: 411:State : 92 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur false . LexToken(ccur,'}',76,2499) yacc.py: 471:Action : Reduce rule [atom -> false] with ['false'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',78,2511) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',78,2511) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',78,2511) @@ -7191,37 +7191,37 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',78,2526) yacc.py: 471:Action : Reduce rule [atom -> id] with ['car'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',80,2538) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',80,2538) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',80,2538) @@ -7285,37 +7285,37 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',80,2554) yacc.py: 471:Action : Reduce rule [atom -> id] with ['cdr'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['i',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'i',82,2566), LexToken(type ...) + yacc.py: 506:Result : ((LexToken(id,'i',82,2566), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param . LexToken(comma,',',82,2573) @@ -7375,24 +7375,24 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma id colon type . LexToken(cpar,')',82,2586) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['rest',':','List'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'rest',82,2575), LexToken(t ...) + yacc.py: 506:Result : ((LexToken(id,'rest',82,2575), LexToken(t ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 - yacc.py: 506:Result : ([(LexToken(id,'rest',82,2575), LexToken( ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 + yacc.py: 506:Result : ([(LexToken(id,'rest',82,2575), LexToken( ...) yacc.py: 410: yacc.py: 411:State : 95 yacc.py: 430:Defaulted state 95: Reduce using 33 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param_list . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',82,2586) @@ -7429,42 +7429,42 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur ocur id larrow id . LexToken(semi,';',84,2615) yacc.py: 471:Action : Reduce rule [atom -> id] with ['i'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['car','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['car','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['rest'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['cdr','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['cdr','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['init','(',,')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['init','(',,')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',90,2655) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',90,2655) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Cons','inherits','List','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Cons','inherits','List','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['mylist',':','List'] and goto state 17 - yacc.py: 506:Result : ( ( id colon type] with ['l',':','List'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'l',107,3036), LexToken(typ ...) + yacc.py: 506:Result : ((LexToken(id,'l',107,3036), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param . LexToken(cpar,')',107,3044) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list . LexToken(cpar,')',107,3044) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',107,3044) @@ -7801,12 +7801,12 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if id . LexToken(dot,'.',108,3067) yacc.py: 471:Action : Reduce rule [atom -> id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar epsilon . LexToken(cpar,')',108,3074) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar arg_list_empty . LexToken(cpar,')',108,3074) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar args . LexToken(cpar,')',108,3074) @@ -7844,37 +7844,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar args cpar . LexToken(then,'then',108,3076) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['isNil','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'isNil',108,3068), [])) + yacc.py: 506:Result : ((LexToken(id,'isNil',108,3068), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot func_call . LexToken(then,'then',108,3076) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( string] with ['\n'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',108,3081), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',108,3081), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar epsilon . LexToken(cpar,')',110,3145) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar arg_list_empty . LexToken(cpar,')',110,3145) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar args . LexToken(cpar,')',110,3145) @@ -8043,48 +8043,48 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar args cpar . LexToken(cpar,')',110,3146) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['head','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'head',110,3140), [])) + yacc.py: 506:Result : ((LexToken(id,'head',110,3140), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot func_call . LexToken(cpar,')',110,3146) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_int','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_int',110,3130), [ id opar args cpar] with ['out_int','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_int',110,3130), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( string] with [' '] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',111,3155), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',111,3155), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar epsilon . LexToken(cpar,')',112,3196) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar arg_list_empty . LexToken(cpar,')',112,3196) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar args . LexToken(cpar,')',112,3196) @@ -8288,48 +8288,48 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar args cpar . LexToken(cpar,')',112,3197) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['tail','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'tail',112,3191), [])) + yacc.py: 506:Result : ((LexToken(id,'tail',112,3191), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot func_call . LexToken(cpar,')',112,3197) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['print_list','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'print_list',112,3178), [ id opar args cpar] with ['print_list','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'print_list',112,3178), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print_list','(',,')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print_list','(',,')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',126,3742) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',126,3742) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals . LexToken(cpar,')',126,3742) @@ -8540,12 +8540,12 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow new type . LexToken(dot,'.',128,3783) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','List'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3784), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3784), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3792), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3792), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3800), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3800), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3808), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3808), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3816), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3816), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar epsilon . LexToken(cpar,')',129,3851) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar arg_list_empty . LexToken(cpar,')',129,3851) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar args . LexToken(cpar,')',129,3851) @@ -9023,67 +9023,67 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar args cpar . LexToken(cpar,')',129,3852) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['isNil','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'isNil',129,3845), [])) + yacc.py: 506:Result : ((LexToken(id,'isNil',129,3845), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot func_call . LexToken(cpar,')',129,3852) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 124 - yacc.py: 506:Result : ( comp] with [] and goto state 124 + yacc.py: 506:Result : ( not expr] with ['not',] and goto state 77 - yacc.py: 506:Result : ( not expr] with ['not',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 133 - yacc.py: 506:Result : ( comp] with [] and goto state 133 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['print_list','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'print_list',131,3874), [ id opar args cpar] with ['print_list','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'print_list',131,3874), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar epsilon . LexToken(cpar,')',132,3924) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar arg_list_empty . LexToken(cpar,')',132,3924) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar args . LexToken(cpar,')',132,3924) @@ -9286,42 +9286,42 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar args cpar . LexToken(semi,';',132,3925) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['tail','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'tail',132,3919), [])) + yacc.py: 506:Result : ((LexToken(id,'tail',132,3919), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot func_call . LexToken(semi,';',132,3925) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 204 - yacc.py: 506:Result : ( comp] with [] and goto state 204 + yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 - yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi def_func semi epsilon . LexToken(ccur,'}',138,3957) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi def_func semi feature_list . LexToken(ccur,'}',138,3957) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( ( Date: Fri, 27 Nov 2020 18:50:44 -0700 Subject: [PATCH 51/60] Fixing bugs --- src/codegen/__init__.py | 2 +- .../__pycache__/__init__.cpython-37.pyc | Bin 1084 -> 1085 bytes .../__pycache__/cil_ast.cpython-37.pyc | Bin 14892 -> 14905 bytes src/codegen/cil_ast.py | 7 +- .../base_cil_visitor.cpython-37.pyc | Bin 8667 -> 8621 bytes .../__pycache__/cil_visitor.cpython-37.pyc | Bin 13088 -> 12712 bytes src/codegen/visitors/base_cil_visitor.py | 20 +- src/codegen/visitors/base_mips_visitor.py | 63 +- src/codegen/visitors/cil_visitor.py | 48 +- src/codegen/visitors/mips_visitor.py | 124 +- src/cool_parser/output_parser/parselog.txt | 3426 ++--------------- src/main.py | 26 +- src/semantic/tools.py | 6 +- src/semantic/visitors/type_checker.py | 3 +- src/semantic/visitors/var_collector.py | 21 +- src/test.cl | 121 +- src/test.mips | 2143 +++++++++++ src/test1.cl | 26 +- src/test1.mips | 762 ++++ 19 files changed, 3444 insertions(+), 3354 deletions(-) create mode 100644 src/test.mips create mode 100644 src/test1.mips diff --git a/src/codegen/__init__.py b/src/codegen/__init__.py index e2fc46fe..e302f426 100644 --- a/src/codegen/__init__.py +++ b/src/codegen/__init__.py @@ -14,7 +14,7 @@ def codegen_pipeline(context, ast, scope, debug=False): inherit_graph = context.build_inheritance_graph() # pprint(inherit_graph) data_code, text_code = CILToMIPSVistor(inherit_graph).visit(cil_ast) - return get_code(data_code, text_code, debug) + return get_code(data_code, text_code, False) def get_code(data_code, text_code, debug): text = '\n'.join(text_code) + '\n' + '\n'.join(data_code) diff --git a/src/codegen/__pycache__/__init__.cpython-37.pyc b/src/codegen/__pycache__/__init__.cpython-37.pyc index 67210d793aa7134ddb6adfa4dc5a11dc82e03907..ee9d69ce40f5cc9110c443ecb973421128b307d9 100644 GIT binary patch delta 39 tcmdnPv6q9(iI4+QE zmY2F~e^AT`T{0|&)X&q29yR-?DX zLHPq{JBV7197akMCr(~2p2O4c`RLbko;}Kn{i0YUDEPo-%5Wm?TWOK%xmOopTB@Qw--3VJVzKCwtq==%u}5R_ww5iUo!&X0AoOEOb0zh{v5v7-Vzg2IKsU Z%wdev(N`om&^3#=eAu-L=xOejegK|2XNUj* diff --git a/src/codegen/cil_ast.py b/src/codegen/cil_ast.py index 7d36ae05..5eedc2f9 100644 --- a/src/codegen/cil_ast.py +++ b/src/codegen/cil_ast.py @@ -193,16 +193,17 @@ def __init__(self, xtype, function, dest, args, return_type, idx=None): self.out = dest class DynamicCallNode(InstructionNode): - def __init__(self, xtype, method, dest, args, return_type, idx=None): + def __init__(self, xtype, obj, method, dest, args, return_type, idx=None): super().__init__(idx) self.type = xtype self.method = method self.dest = dest self.args = args self.return_type = return_type - + self.obj = obj + self.out = dest - self.in1 = 'self' + self.in1 = obj class ArgNode(InstructionNode): def __init__(self, name, idx=None): diff --git a/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc index e697d9e40a5731013198b44199371ae08e60c9ac..2cd2e4465017533621b869551223c6a305e3aeb7 100644 GIT binary patch delta 463 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 GOTO continue - GOTO end - LABEL continue + IF NOT GOTO end res = GOTO start LABEL end ''' start_label = cil.LabelNode(f'start__{self.idx}') - continue_label = cil.LabelNode(f'continue__{self.idx}') end_label = cil.LabelNode(f'end__{self.idx}') result = self.define_internal_local() @@ -263,9 +263,7 @@ def visit(self, node: WhileNode, scope: Scope): self.register_instruction(start_label) cond, _ = self.visit(node.cond, scope) - self.register_instruction(cil.GotoIfNode(cond, continue_label.label)) - self.register_instruction(cil.GotoNode(end_label.label)) - self.register_instruction(continue_label) + self.register_instruction(cil.GotoIfFalseNode(cond, end_label.label)) expr, typex = self.visit(node.expr, scope) self.register_instruction(cil.AssignNode(result, expr)) self.register_instruction(cil.GotoNode(start_label.label)) @@ -317,9 +315,9 @@ def visit(self, node: LetNode, scope: Scope): self.visit(init, child_scope) expr, typex = self.visit(node.expr, child_scope) - result = self.define_internal_local() - self.register_instruction(cil.AssignNode(result, expr)) - return result, typex + # result = self.define_internal_local() + # self.register_instruction(cil.AssignNode(result, expr)) + return expr, typex @visitor.when(CaseNode) diff --git a/src/codegen/visitors/mips_visitor.py b/src/codegen/visitors/mips_visitor.py index f6107346..f8000943 100644 --- a/src/codegen/visitors/mips_visitor.py +++ b/src/codegen/visitors/mips_visitor.py @@ -88,6 +88,11 @@ def visit(self, node:FunctionNode): self.inst = inst self.get_reg(inst) self.visit(inst) + inst = block[-1] + if not (isinstance(inst, GotoNode) or isinstance(inst, GotoIfNode) or isinstance(inst, ReturnNode) \ + or isinstance(inst, StaticCallNode) or isinstance(inst, DynamicCallNode)): + self.empty_registers() + # self.empty_registers() @visitor.when(ParamNode) def visit(self, node:ParamNode, idx:int, length:int): @@ -116,7 +121,7 @@ def visit(self, node:AssignNode): self.code.append(f'li ${rdest}, {node.source}') self.var_address[node.dest] = AddrType.INT self.save_var_code(node.dest) - + @visitor.when(NotNode) def visit(self, node:NotNode): @@ -125,8 +130,7 @@ def visit(self, node:NotNode): self.code.append(f'# {node.dest} <- ~{node.expr}') self.code.append(f'not ${rdest}, ${rsrc}') self.var_address[node.dest] = AddrType.INT - - + @visitor.when(LogicalNotNode) def visit(self, node:LogicalNotNode): rdest = self.addr_desc.get_var_reg(node.dest) @@ -140,8 +144,7 @@ def visit(self, node:LogicalNotNode): self.code.append(f'end_{self.loop_idx}:') self.loop_idx += 1 self.var_address[node.dest] = AddrType.BOOL - - + @visitor.when(PlusNode) def visit(self, node:PlusNode): rdest = self.addr_desc.get_var_reg(node.dest) @@ -160,7 +163,7 @@ def visit(self, node:PlusNode): rright = self.addr_desc.get_var_reg(node.right) self.code.append(f"addi ${rdest}, ${rright}, {node.left}") self.var_address[node.dest] = AddrType.INT - + @visitor.when(MinusNode) def visit(self, node:MinusNode): rdest = self.addr_desc.get_var_reg(node.dest) @@ -218,7 +221,6 @@ def _code_to_mult_div(self, node, op:str, func_op): self.code.append(f"mflo ${rdest}") self.var_address[node.dest] = AddrType.INT - @visitor.when(LessNode) def visit(self, node:LessNode): self.code.append(f'# {node.dest} <- {node.left} < {node.right}') @@ -256,7 +258,6 @@ def _code_to_comp(self, node, op, func_op): self.code.append(f"{op} ${rdest}, $t9, ${rright}") self.var_address[node.dest] = AddrType.BOOL - @visitor.when(GetAttribNode) def visit(self, node:GetAttribNode): self.code.append(f'# {node.dest} <- GET {node.obj} . {node.attr}') @@ -281,8 +282,7 @@ def visit(self, node:SetAttribNode): self.code.append(f'la $t9, type_{VOID_NAME}') rsrc = 't9' self.code.append(f'sw ${rsrc}, {attr_offset}(${rdest})') # saves the new value in the attr offset - - + @visitor.when(AllocateNode) def visit(self, node:AllocateNode): rdest = self.addr_desc.get_var_reg(node.dest) @@ -370,18 +370,21 @@ def visit(self, node:LabelNode): @visitor.when(GotoNode) def visit(self, node:GotoNode): + self.empty_registers() self.code.append(f'j {node.label}') @visitor.when(GotoIfNode) def visit(self, node:GotoIfNode): reg = self.save_to_register(node.cond) self.code.append(f'# If {node.cond} goto {node.label}') + self.empty_registers() self.code.append(f'bnez ${reg}, {node.label}') @visitor.when(GotoIfFalseNode) def visit(self, node:GotoIfNode): reg = self.save_to_register(node.cond) self.code.append(f'# If not {node.cond} goto {node.label}') + self.empty_registers() self.code.append(f'beqz ${reg}, {node.label}') @visitor.when(StaticCallNode) @@ -396,7 +399,8 @@ def visit(self, node:StaticCallNode): def visit(self, node:DynamicCallNode): # Find the actual name of the method in the dispatch table self.code.append('# Find the actual name in the dispatch table') - reg = self.addr_desc.get_var_reg('self') # obtiene la instancia actual + reg = self.addr_desc.get_var_reg(node.obj) # obtiene la instancia actual + self.code.append('# Gets in t9 the actual direction of the dispatch table') self.code.append(f'lw $t9, 8(${reg})') # obtiene en t9 la dirección del dispatch table function = self.dispatch_table.find_full_name(node.type, node.method) @@ -404,20 +408,24 @@ def visit(self, node:DynamicCallNode): self.code.append(f'# Saves in t8 the direction of {function}') self.code.append(f'lw $t8, {index}($t9)') # guarda en $t8 la dirección de la función a llamar # Call function - self._code_to_function_call(node.args, '$t8', node.dest) + self._code_to_function_call(node.args, '$t8', node.dest, function) self.var_address[node.dest] = self.get_type(node.return_type) - def _code_to_function_call(self, args, function, dest): + def _code_to_function_call(self, args, function, dest, function_name=None): self.push_register('fp') # pushes fp register to the stack self.push_register('ra') # pushes ra register to the stack self.code.append('# Push the arguments to the stack') - for i, arg in enumerate(reversed(args)): # push the arguments to the stack - self.visit(arg, i) + if function == 'function_concat_String' or function == 'function_substr_String' or (function_name and 'in_string' in function_name): + self.create_new_space(dest) + for arg in reversed(args): # push the arguments to the stack + self.visit(arg) + self.code.append('# Empty all used registers and saves them to memory') - self.empty_registers() # empty all used registers and saves them to memory + self.empty_registers() self.code.append('# This function will consume the arguments') + self.code.append(f'jal {function}') # this function will consume the arguments self.code.append('# Pop ra register of return function of the stack') self.pop_register('ra') # pop register ra from the stack @@ -430,17 +438,7 @@ def _code_to_function_call(self, args, function, dest): self.code.append(f'move ${rdest}, $v0') # v0 es usado para guardar el valor de retorno @visitor.when(ArgNode) - def visit(self, node:ArgNode, idx): - # if idx <= 3: # los primeros 3 registros se guardan en a0-a3 - # reg = f'a{idx}' - # self.code.append('# The 3 first registers are saved in a0-a3') - # if self.is_variable(node.dest): - # self.get_reg_var(node.dest) - # rdest = self.addr_desc.get_var_reg(node.dest) - # self.code.append(f'move ${reg}, ${rdest}') - # elif self.is_int(node.dest): - # self.code.append(f'li ${reg}, {node.dest}') - # else: + def visit(self, node:ArgNode): self.code.append('# The rest of the arguments are push into the stack') if self.is_variable(node.dest): self.get_reg_var(node.dest) @@ -460,7 +458,7 @@ def visit(self, node:ReturnNode): elif self.is_int(node.value): self.code.append(f'li $v0, {node.value}') self.code.append('# Empty all used registers and saves them to memory') - self.empty_registers(False) # empty all used registers and saves them to memory + self.empty_registers() # empty all used registers and saves them to memory self.code.append('# Removing all locals from stack') self.code.append(f'addiu $sp, $sp, {self.locals*4}') # return to the caller @@ -474,7 +472,6 @@ def visit(self, node:LoadNode): self.code.append(f'# Saves in {node.dest} {node.msg}') self.var_address[node.dest] = AddrType.STR self.code.append(f'la ${rdest}, {node.msg}') - @visitor.when(LengthNode) def visit(self, node: LengthNode): @@ -497,9 +494,10 @@ def visit(self, node: LengthNode): @visitor.when(ConcatNode) def visit(self, node: ConcatNode): - self.data_code.append(f'{node.dest}: .space 20') + # self.data_code.append(f'{node.dest}: .space 536') rdest = self.addr_desc.get_var_reg(node.dest) - self.code.append(f'la ${rdest}, {node.dest}') + # self.code.append(f'la ${rdest}, {node.dest}') + # self.code.append(f'sb $0, 0(${rdest})') rsrc1 = self.addr_desc.get_var_reg(node.arg1) rsrc2 = self.addr_desc.get_var_reg(node.arg2) @@ -516,6 +514,7 @@ def visit(self, node: ConcatNode): self.code.append(f'move $a0, ${rsrc2}') self.code.append(f'move $a1, $v0') self.code.append('jal strcopier') + self.code.append('sb $0, 0($v0)') self.pop_register('ra') self.code.append(f'j finish_{self.loop_idx}') @@ -540,13 +539,12 @@ def visit(self, node: ConcatNode): self.load_var_if_occupied(var2) self.loop_idx += 1 - @visitor.when(SubstringNode) def visit(self, node: SubstringNode): - self.data_code.append(f'{node.dest}: .space 20') + # self.data_code.append(f'{node.dest}: .space 536') rdest = self.addr_desc.get_var_reg(node.dest) - self.code.append(f'la ${rdest}, {node.dest}') - + # self.code.append(f'la ${rdest}, {node.dest}') + if self.is_variable(node.begin): rstart = self.addr_desc.get_var_reg(node.begin) elif self.is_int(node.start): @@ -568,7 +566,8 @@ def visit(self, node: SubstringNode): # self.code.append(f'sll $t9, ${rstart}, 2') # multiplicar por 4 start = f'start_{self.loop_idx}' error = f'error_{self.loop_idx}' - + end_lp = f'end_len_{self.loop_idx}' + self.code.append('# Move to the first position in the string') self.code.append('li $v0, 0') @@ -577,9 +576,11 @@ def visit(self, node: SubstringNode): self.code.append('lb $t9, 0($t8)') self.code.append(f'beqz $t9, {error}') self.code.append('addi $v0, 1') + self.code.append(f'bgt $v0, ${rstart}, {end_lp}') self.code.append(f'addi $t8, 1') - self.code.append(f'blt $v0, ${rstart}, {start}') - + self.code.append(f'j {start}') + self.code.append(f'{end_lp}:') + self.code.append('# Saving dest to iterate over him') self.code.append(f'move $v0, ${rdest}') @@ -598,12 +599,25 @@ def visit(self, node: SubstringNode): self.code.append(f'j {loop}') self.code.append(f'{error}:') self.code.append('la $a0, index_error') + + self.code.append('li $v0, 4') + self.code.append(f'move $a0, ${rself}') + self.code.append('syscall') + + self.code.append('li $v0, 1') + self.code.append(f'move $a0, ${rstart}') + self.code.append('syscall') + + self.code.append('li $v0, 1') + self.code.append(f'move $a0, ${rend}') + self.code.append('syscall') + self.code.append('j .raise') self.code.append(f'{end}:') + self.code.append('sb $0, 0($v0)') self.load_var_if_occupied(var) self.loop_idx += 1 - @visitor.when(OutStringNode) def visit(self, node: OutStringNode): reg = self.addr_desc.get_var_reg(node.value) @@ -632,20 +646,37 @@ def visit(self, node: OutIntNode): @visitor.when(ReadStringNode) def visit(self, node: ReadStringNode): - self.data_code.append(f'{node.dest}: .space 20') + # self.data_code.append(f'{node.dest}: .space 20') rdest = self.addr_desc.get_var_reg(node.dest) - self.code.append('# Copying buffer memory address') - self.code.append(f'la ${rdest}, {node.dest}') + # self.code.append('# Copying buffer memory address') + # self.code.append(f'la ${rdest}, {node.dest}') + # self.code.append(f'sb $0, 0(${rdest})') + self.code.append('# Reading a string') - self.code.append('li $v0, 8') var1 = self.save_reg_if_occupied('a0') var2 = self.save_reg_if_occupied('a1') self.code.append('# Putting buffer in a0') self.code.append(f'move $a0, ${rdest}') # Get length of the string self.code.append('# Putting length of string in a1') self.code.append(f'li $a1, 20') + self.code.append('li $v0, 8') self.code.append('syscall') + self.code.append('# Walks to eliminate the newline') + start = f'start_{self.loop_idx}' + end = f'end_{self.loop_idx}' + + self.code.append(f'move $t9, ${rdest}') + self.code.append(f'{start}:') # moves to the newline + self.code.append('lb $t8, 0($t9)') + self.code.append(f"beqz $t8, {end}") + self.code.append('add $t9, $t9, 1') + self.code.append(f'j {start}') + self.code.append(f'{end}:') + self.code.append('addiu $t9, $t9, -1') + self.code.append('sb $0, ($t9)') # overwrites the newline with zero + self.loop_idx += 1 + @visitor.when(ReadIntNode) def visit(self, node: ReadIntNode): @@ -664,6 +695,9 @@ def visit(self, node: ExitNode): elif self.is_int(node.value): reg = 't8' self.code.append(f'li $t8, {node.value}') + self.code.append('li $v0, 1') + self.code.append('li $a0, 1') + self.code.append('syscall') self.code.append('li $v0, 17') self.code.append(f'move $a0, ${reg}') self.code.append('syscall') @@ -718,6 +752,7 @@ def visit(self, node: ConformsNode): self.code.append(f'li ${rdest}, 0') elif self.is_int(node.expr): self.code.append(f'li ${rdest}, 0') + @visitor.when(ErrorNode) def visit(self, node: ErrorNode): @@ -737,4 +772,5 @@ def visit(self, node:VoidConstantNode): self.code.append('sw $t9, 0($v0)') # saves the name like the first field self.code.append(f'move ${rdest}, $v0') self.load_var_if_occupied(var) - self.var_address[node.obj] = AddrType.REF \ No newline at end of file + self.var_address[node.obj] = AddrType.REF + \ No newline at end of file diff --git a/src/cool_parser/output_parser/parselog.txt b/src/cool_parser/output_parser/parselog.txt index 920d07d8..f6bf2618 100644 --- a/src/cool_parser/output_parser/parselog.txt +++ b/src/cool_parser/output_parser/parselog.txt @@ -6124,3425 +6124,503 @@ yacc.py: 362:PLY: PARSE DEBUG START yacc.py: 410: yacc.py: 411:State : 0 - yacc.py: 435:Stack : . LexToken(class,'class',26,983) + yacc.py: 435:Stack : . LexToken(class,'class',1,0) yacc.py: 445:Action : Shift and goto state 5 yacc.py: 410: yacc.py: 411:State : 5 - yacc.py: 435:Stack : class . LexToken(type,'List',26,989) + yacc.py: 435:Stack : class . LexToken(type,'Main',1,6) yacc.py: 445:Action : Shift and goto state 8 yacc.py: 410: yacc.py: 411:State : 8 - yacc.py: 435:Stack : class type . LexToken(ocur,'{',26,994) - yacc.py: 445:Action : Shift and goto state 10 - yacc.py: 410: - yacc.py: 411:State : 10 - yacc.py: 435:Stack : class type ocur . LexToken(id,'isNil',29,1040) - yacc.py: 445:Action : Shift and goto state 19 - yacc.py: 410: - yacc.py: 411:State : 19 - yacc.py: 435:Stack : class type ocur id . LexToken(opar,'(',29,1045) - yacc.py: 445:Action : Shift and goto state 32 - yacc.py: 410: - yacc.py: 411:State : 32 - yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',29,1046) - yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',29,1046) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',29,1046) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',29,1046) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : class type ocur id opar formals cpar . LexToken(colon,':',29,1048) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon . LexToken(type,'Bool',29,1050) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type . LexToken(ocur,'{',29,1055) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur . LexToken(true,'true',29,1057) - yacc.py: 445:Action : Shift and goto state 91 - yacc.py: 410: - yacc.py: 411:State : 91 - yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur true . LexToken(ccur,'}',29,1062) - yacc.py: 471:Action : Reduce rule [atom -> true] with ['true'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : class type ocur def_func semi id opar epsilon . LexToken(cpar,')',35,1254) + yacc.py: 435:Stack : class type inherits type ocur id opar epsilon . LexToken(cpar,')',2,31) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : class type ocur def_func semi id opar param_list_empty . LexToken(cpar,')',35,1254) + yacc.py: 435:Stack : class type inherits type ocur id opar param_list_empty . LexToken(cpar,')',2,31) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 - yacc.py: 435:Stack : class type ocur def_func semi id opar formals . LexToken(cpar,')',35,1254) + yacc.py: 435:Stack : class type inherits type ocur id opar formals . LexToken(cpar,')',2,31) yacc.py: 445:Action : Shift and goto state 64 yacc.py: 410: yacc.py: 411:State : 64 - yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar . LexToken(colon,':',35,1257) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar . LexToken(colon,':',2,32) yacc.py: 445:Action : Shift and goto state 100 yacc.py: 410: yacc.py: 411:State : 100 - yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon . LexToken(type,'Int',35,1259) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon . LexToken(type,'IO',2,34) yacc.py: 445:Action : Shift and goto state 138 yacc.py: 410: yacc.py: 411:State : 138 - yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type . LexToken(ocur,'{',35,1263) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type . LexToken(ocur,'{',2,37) yacc.py: 445:Action : Shift and goto state 181 yacc.py: 410: yacc.py: 411:State : 181 - yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur . LexToken(ocur,'{',35,1265) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur . LexToken(ocur,'{',2,39) yacc.py: 445:Action : Shift and goto state 90 yacc.py: 410: yacc.py: 411:State : 90 - yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur . LexToken(id,'abort',35,1267) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur . LexToken(id,'out_string',3,43) yacc.py: 445:Action : Shift and goto state 72 yacc.py: 410: yacc.py: 411:State : 72 - yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id . LexToken(opar,'(',35,1272) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur id . LexToken(opar,'(',3,53) yacc.py: 445:Action : Shift and goto state 113 yacc.py: 410: yacc.py: 411:State : 113 - yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar . LexToken(cpar,')',35,1273) - yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 150 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 150 - yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar epsilon . LexToken(cpar,')',35,1273) - yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 149 - yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar arg_list_empty . LexToken(cpar,')',35,1273) - yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar args . LexToken(cpar,')',35,1273) - yacc.py: 445:Action : Shift and goto state 191 - yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar args cpar . LexToken(semi,';',35,1274) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['abort','(',[],')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'abort',35,1267), [])) - yacc.py: 410: - yacc.py: 411:State : 78 - yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur func_call . LexToken(semi,';',35,1274) - yacc.py: 471:Action : Reduce rule [factor -> func_call] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar epsilon . LexToken(cpar,')',40,1389) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',40,1389) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals . LexToken(cpar,')',40,1389) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar . LexToken(colon,':',40,1392) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon . LexToken(type,'List',40,1394) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',40,1399) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(ocur,'{',40,1401) - yacc.py: 445:Action : Shift and goto state 90 - yacc.py: 410: - yacc.py: 411:State : 90 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur . LexToken(id,'abort',40,1403) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur id opar . LexToken(id,'in_string',3,54) yacc.py: 445:Action : Shift and goto state 72 yacc.py: 410: yacc.py: 411:State : 72 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id . LexToken(opar,'(',40,1408) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur id opar id . LexToken(opar,'(',3,63) yacc.py: 445:Action : Shift and goto state 113 yacc.py: 410: yacc.py: 411:State : 113 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar . LexToken(cpar,')',40,1409) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur id opar id opar . LexToken(cpar,')',3,64) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar epsilon . LexToken(cpar,')',40,1409) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur id opar id opar epsilon . LexToken(cpar,')',3,64) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar arg_list_empty . LexToken(cpar,')',40,1409) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur id opar id opar arg_list_empty . LexToken(cpar,')',3,64) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar args . LexToken(cpar,')',40,1409) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur id opar id opar args . LexToken(cpar,')',3,64) yacc.py: 445:Action : Shift and goto state 191 yacc.py: 410: yacc.py: 411:State : 191 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar args cpar . LexToken(semi,';',40,1410) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['abort','(',[],')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'abort',40,1403), [])) + yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur id opar id opar args cpar . LexToken(cpar,')',3,65) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['in_string','(',[],')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'in_string',3,54), [])) yacc.py: 410: yacc.py: 411:State : 78 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur func_call . LexToken(semi,';',40,1410) - yacc.py: 471:Action : Reduce rule [factor -> func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',3,43), [ func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','IO','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['i',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'i',49,1777), LexToken(type ...) + yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar id colon type . LexToken(cpar,')',7,95) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['a',':','String'] and goto state 44 + yacc.py: 506:Result : ((LexToken(id,'a',7,85), LexToken(type,'S ...) yacc.py: 410: yacc.py: 411:State : 44 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar param . LexToken(cpar,')',49,1784) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) + yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar param . LexToken(cpar,')',7,95) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'a',7,85), LexToken(type,' ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',49,1784) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) + yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar param_list . LexToken(cpar,')',7,95) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'a',7,85), LexToken(type,' ...) yacc.py: 410: yacc.py: 411:State : 51 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',49,1784) + yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals . LexToken(cpar,')',7,95) yacc.py: 445:Action : Shift and goto state 64 yacc.py: 410: yacc.py: 411:State : 64 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',49,1786) + yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar . LexToken(colon,':',7,97) yacc.py: 445:Action : Shift and goto state 100 yacc.py: 410: yacc.py: 411:State : 100 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'List',49,1788) + yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon . LexToken(type,'IO',7,99) yacc.py: 445:Action : Shift and goto state 138 yacc.py: 410: yacc.py: 411:State : 138 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',49,1793) + yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type . LexToken(ocur,'{',7,102) yacc.py: 445:Action : Shift and goto state 181 yacc.py: 410: yacc.py: 411:State : 181 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(opar,'(',50,1801) - yacc.py: 445:Action : Shift and goto state 80 - yacc.py: 410: - yacc.py: 411:State : 80 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar . LexToken(new,'new',50,1802) - yacc.py: 445:Action : Shift and goto state 89 - yacc.py: 410: - yacc.py: 411:State : 89 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar new . LexToken(type,'Cons',50,1806) - yacc.py: 445:Action : Shift and goto state 134 - yacc.py: 410: - yacc.py: 411:State : 134 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',50,1810) - yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Cons'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( id] with ['i'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( string] with ['a'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 158 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['init','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'init',50,1812), [ id opar args cpar] with ['out_int','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_int',8,106), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['cons','(',,')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['compare','(',,')',':','IO','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',53,1833) + yacc.py: 435:Stack : class type inherits type ocur def_func semi def_func semi epsilon . LexToken(ccur,'}',10,127) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 48 - yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',53,1833) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',53,1833) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','List','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['car',':','Int'] and goto state 17 - yacc.py: 506:Result : ( id colon type] with ['cdr',':','List'] and goto state 17 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',76,2482) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',76,2482) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',76,2482) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals cpar . LexToken(colon,':',76,2484) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals cpar colon . LexToken(type,'Bool',76,2486) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',76,2491) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur . LexToken(false,'false',76,2493) - yacc.py: 445:Action : Shift and goto state 92 - yacc.py: 410: - yacc.py: 411:State : 92 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur false . LexToken(ccur,'}',76,2499) - yacc.py: 471:Action : Reduce rule [atom -> false] with ['false'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',78,2511) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',78,2511) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',78,2511) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals cpar . LexToken(colon,':',78,2514) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals cpar colon . LexToken(type,'Int',78,2516) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',78,2520) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'car',78,2522) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',78,2526) - yacc.py: 471:Action : Reduce rule [atom -> id] with ['car'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',80,2538) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',80,2538) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',80,2538) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',80,2541) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'List',80,2543) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',80,2548) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'cdr',80,2550) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',80,2554) - yacc.py: 471:Action : Reduce rule [atom -> id] with ['cdr'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id colon type] with ['i',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'i',82,2566), LexToken(type ...) - yacc.py: 410: - yacc.py: 411:State : 44 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param . LexToken(comma,',',82,2573) - yacc.py: 445:Action : Shift and goto state 60 - yacc.py: 410: - yacc.py: 411:State : 60 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma . LexToken(id,'rest',82,2575) - yacc.py: 445:Action : Shift and goto state 46 - yacc.py: 410: - yacc.py: 411:State : 46 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma id . LexToken(colon,':',82,2580) - yacc.py: 445:Action : Shift and goto state 61 - yacc.py: 410: - yacc.py: 411:State : 61 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma id colon . LexToken(type,'List',82,2582) - yacc.py: 445:Action : Shift and goto state 96 - yacc.py: 410: - yacc.py: 411:State : 96 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma id colon type . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['rest',':','List'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'rest',82,2575), LexToken(t ...) - yacc.py: 410: - yacc.py: 411:State : 44 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 - yacc.py: 506:Result : ([(LexToken(id,'rest',82,2575), LexToken( ...) - yacc.py: 410: - yacc.py: 411:State : 95 - yacc.py: 430:Defaulted state 95: Reduce using 33 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param_list . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) - yacc.py: 410: - yacc.py: 411:State : 42 - yacc.py: 430:Defaulted state 42: Reduce using 30 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',82,2586) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',82,2588) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'List',82,2590) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',82,2595) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(ocur,'{',83,2603) - yacc.py: 445:Action : Shift and goto state 90 - yacc.py: 410: - yacc.py: 411:State : 90 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur ocur . LexToken(id,'car',84,2607) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur ocur id . LexToken(larrow,'<-',84,2611) - yacc.py: 445:Action : Shift and goto state 112 - yacc.py: 410: - yacc.py: 411:State : 112 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur ocur id larrow . LexToken(id,'i',84,2614) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur ocur id larrow id . LexToken(semi,';',84,2615) - yacc.py: 471:Action : Reduce rule [atom -> id] with ['i'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( id larrow expr] with ['car','<-',] and goto state 111 - yacc.py: 506:Result : ( id] with ['rest'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( id larrow expr] with ['cdr','<-',] and goto state 111 - yacc.py: 506:Result : ( id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['init','(',,')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 16 - yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',90,2655) - yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 48 - yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',90,2655) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Cons','inherits','List','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( id colon type] with ['mylist',':','List'] and goto state 17 - yacc.py: 506:Result : ( id colon type] with ['l',':','List'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'l',107,3036), LexToken(typ ...) - yacc.py: 410: - yacc.py: 411:State : 44 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param . LexToken(cpar,')',107,3044) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) - yacc.py: 410: - yacc.py: 411:State : 42 - yacc.py: 430:Defaulted state 42: Reduce using 30 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list . LexToken(cpar,')',107,3044) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',107,3044) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar . LexToken(colon,':',107,3046) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon . LexToken(type,'Object',107,3048) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',107,3055) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur . LexToken(if,'if',108,3063) - yacc.py: 445:Action : Shift and goto state 86 - yacc.py: 410: - yacc.py: 411:State : 86 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if . LexToken(id,'l',108,3066) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if id . LexToken(dot,'.',108,3067) - yacc.py: 471:Action : Reduce rule [atom -> id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 150 - yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar epsilon . LexToken(cpar,')',108,3074) - yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 149 - yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar arg_list_empty . LexToken(cpar,')',108,3074) - yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar args . LexToken(cpar,')',108,3074) - yacc.py: 445:Action : Shift and goto state 191 - yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar args cpar . LexToken(then,'then',108,3076) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['isNil','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'isNil',108,3068), [])) - yacc.py: 410: - yacc.py: 411:State : 167 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot func_call . LexToken(then,'then',108,3076) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( string] with ['\n'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',108,3081), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 150 - yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar epsilon . LexToken(cpar,')',110,3145) - yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 149 - yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar arg_list_empty . LexToken(cpar,')',110,3145) - yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar args . LexToken(cpar,')',110,3145) - yacc.py: 445:Action : Shift and goto state 191 - yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar args cpar . LexToken(cpar,')',110,3146) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['head','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'head',110,3140), [])) - yacc.py: 410: - yacc.py: 411:State : 167 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot func_call . LexToken(cpar,')',110,3146) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['out_int','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_int',110,3130), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( string] with [' '] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',111,3155), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 150 - yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar epsilon . LexToken(cpar,')',112,3196) - yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 149 - yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar arg_list_empty . LexToken(cpar,')',112,3196) - yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar args . LexToken(cpar,')',112,3196) - yacc.py: 445:Action : Shift and goto state 191 - yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar args cpar . LexToken(cpar,')',112,3197) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['tail','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'tail',112,3191), [])) - yacc.py: 410: - yacc.py: 411:State : 167 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot func_call . LexToken(cpar,')',112,3197) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['print_list','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'print_list',112,3178), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print_list','(',,')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 45 - yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',126,3742) - yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 43 - yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',126,3742) - yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 51 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals . LexToken(cpar,')',126,3742) - yacc.py: 445:Action : Shift and goto state 64 - yacc.py: 410: - yacc.py: 411:State : 64 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar . LexToken(colon,':',126,3744) - yacc.py: 445:Action : Shift and goto state 100 - yacc.py: 410: - yacc.py: 411:State : 100 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon . LexToken(type,'Object',126,3746) - yacc.py: 445:Action : Shift and goto state 138 - yacc.py: 410: - yacc.py: 411:State : 138 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',126,3753) - yacc.py: 445:Action : Shift and goto state 181 - yacc.py: 410: - yacc.py: 411:State : 181 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur . LexToken(ocur,'{',127,3761) - yacc.py: 445:Action : Shift and goto state 90 - yacc.py: 410: - yacc.py: 411:State : 90 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur . LexToken(id,'mylist',128,3765) - yacc.py: 445:Action : Shift and goto state 72 - yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id . LexToken(larrow,'<-',128,3772) - yacc.py: 445:Action : Shift and goto state 112 - yacc.py: 410: - yacc.py: 411:State : 112 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow . LexToken(new,'new',128,3775) - yacc.py: 445:Action : Shift and goto state 89 - yacc.py: 410: - yacc.py: 411:State : 89 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow new . LexToken(type,'List',128,3779) - yacc.py: 445:Action : Shift and goto state 134 - yacc.py: 410: - yacc.py: 411:State : 134 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow new type . LexToken(dot,'.',128,3783) - yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','List'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3784), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3792), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3800), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3808), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3816), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 - yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 150 - yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar epsilon . LexToken(cpar,')',129,3851) - yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 149 - yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar arg_list_empty . LexToken(cpar,')',129,3851) - yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar args . LexToken(cpar,')',129,3851) - yacc.py: 445:Action : Shift and goto state 191 - yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar args cpar . LexToken(cpar,')',129,3852) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['isNil','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'isNil',129,3845), [])) - yacc.py: 410: - yacc.py: 411:State : 167 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot func_call . LexToken(cpar,')',129,3852) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 124 - yacc.py: 506:Result : ( not expr] with ['not',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 133 - yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['print_list','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'print_list',131,3874), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 150 - yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar epsilon . LexToken(cpar,')',132,3924) - yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 149 - yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar arg_list_empty . LexToken(cpar,')',132,3924) - yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 153 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar args . LexToken(cpar,')',132,3924) - yacc.py: 445:Action : Shift and goto state 191 - yacc.py: 410: - yacc.py: 411:State : 191 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar args cpar . LexToken(semi,';',132,3925) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['tail','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'tail',132,3919), [])) - yacc.py: 410: - yacc.py: 411:State : 167 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot func_call . LexToken(semi,';',132,3925) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 - yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 204 - yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) - yacc.py: 410: - yacc.py: 411:State : 16 - yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi def_func semi epsilon . LexToken(ccur,'}',138,3957) - yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) - yacc.py: 410: - yacc.py: 411:State : 48 - yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi def_func semi feature_list . LexToken(ccur,'}',138,3957) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ def_class] with [] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( ( VariableInfo: try: return next(x for x in locals if x.name == vname) except StopIteration: - return self.parent.find_variable(vname, self.index) if self.parent else None + return self.parent.find_variable(vname, index) if self.parent is not None else None def find_local(self, vname, index=None) -> VariableInfo: locals = self.locals if index is None else itt.islice(self.locals, index) try: return next(x for x in locals if x.name == vname) except StopIteration: - return self.parent.find_local(vname, self.index) if self.parent else None + return self.parent.find_local(vname, self.index) if self.parent is not None else None def find_attribute(self, vname, index=None): locals = self.attributes if index is None else itt.islice(self.attributes, index) try: return next(x for x in locals if x.name == vname) except StopIteration: - return self.parent.find_attribute(vname, index) if self.parent else None + return self.parent.find_attribute(vname, index) if self.parent is not None else None def get_class_scope(self): diff --git a/src/semantic/visitors/type_checker.py b/src/semantic/visitors/type_checker.py index 05911771..615a8529 100644 --- a/src/semantic/visitors/type_checker.py +++ b/src/semantic/visitors/type_checker.py @@ -237,8 +237,7 @@ def visit(self, node:WhileNode, scope:Scope): if cond.name != 'Bool': self.errors.append(TypesError(TypesError.LOOP_CONDITION_ERROR, *node.pos)) - self.visit(node.expr, scope) - return ObjectType() + return self.visit(node.expr, scope) @visitor.when(IsVoidNode) def visit(self, node:IsVoidNode, scope:Scope): diff --git a/src/semantic/visitors/var_collector.py b/src/semantic/visitors/var_collector.py index e62a0ef3..edfe1867 100644 --- a/src/semantic/visitors/var_collector.py +++ b/src/semantic/visitors/var_collector.py @@ -109,13 +109,6 @@ def visit(self, node:VarDeclarationNode, scope:Scope): error_text = SemanticError.SELF_IN_LET self.errors.append(SemanticError(error_text, *node.pos)) return - - # if scope.is_defined(node.id): - # var = scope.find_variable(node.id) - # if var.type != ErrorType(): - # error_text = SemanticError.LOCAL_ALREADY_DEFINED %(node.id, self.current_method.name) - # self.errors.append(SemanticError(error_text, *node.pos)) - # return try: vtype = self.context.get_type(node.type, node.pos) @@ -142,12 +135,12 @@ def visit(self, node:AssignNode, scope:Scope): vinfo = scope.find_variable(node.id) if vinfo is None: - error_text = NamesError.VARIABLE_NOT_DEFINED %(node.id) - self.errors.append(NamesError(error_text, *node.pos)) - vtype = ErrorType() - scope.define_variable(node.id, vtype) - else: - vtype = vinfo.type + var_info = scope.find_attribute(node.id) + if var_info is None: + error_text = NamesError.VARIABLE_NOT_DEFINED %(node.id) + self.errors.append(NamesError(error_text, *node.pos)) + vtype = ErrorType() + scope.define_variable(node.id, vtype) self.visit(node.expr, scope) @@ -248,8 +241,8 @@ def visit(self, node:OptionNode, scope:Scope): self.errors.append(TypesError(error_txt, *node.type_pos)) typex = ErrorType() - self.visit(node.expr, scope) scope.define_variable(node.id, typex) + self.visit(node.expr, scope) \ No newline at end of file diff --git a/src/test.cl b/src/test.cl index 69d1aea2..bcd89149 100644 --- a/src/test.cl +++ b/src/test.cl @@ -1,40 +1,97 @@ -class Main { - - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Int; - test2: Int <- test3; - - testing1(): Int { - 2 - 2 +(* models one-dimensional cellular automaton on a circle of finite radius + arrays are faked as Strings, + X's respresent live cells, dots represent dead cells, + no error checking is done *) +class CellularAutomaton inherits IO { + population_map : String; + + init(map : String) : CellularAutomaton { + { + population_map <- map; + self; + } }; - - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - let count: Int, pow: Int <- 1 -- Initialization must be an expression - in { - count <- 0; + + print() : CellularAutomaton { + { + out_string(population_map.concat("\n")); + self; } }; - - testing3(): Int { - testing2(new Alpha, 2) + + num_cells() : Int { + population_map.length() }; - - testing4(): Int { - test1 <- ~(1 + 2 + 3 + 4 + 5) -- The left side must be an expression + + cell(position : Int) : String { + population_map.substr(position, 1) + }; + + cell_left_neighbor(position : Int) : String { + if position = 0 then + cell(num_cells() - 1) + else + cell(position - 1) + fi + }; + + cell_right_neighbor(position : Int) : String { + if position = num_cells() - 1 then + cell(0) + else + cell(position + 1) + fi + }; + + (* a cell will live if exactly 1 of itself and it's immediate + neighbors are alive *) + cell_at_next_evolution(position : Int) : String { + if (if cell(position) = "X" then 1 else 0 fi + + if cell_left_neighbor(position) = "X" then 1 else 0 fi + + if cell_right_neighbor(position) = "X" then 1 else 0 fi + = 1) + then + "X" + else + "." + fi + }; + + evolve() : CellularAutomaton { + (let position : Int in + (let num : Int <- num_cells() in + (let temp : String in + { + while position < num loop + { + temp <- temp.concat(cell_at_next_evolution(position)); + position <- position + 1; + } + pool; + population_map <- temp; + self; + } + ) ) ) }; }; -class Alpha inherits IO { - x : Int <- 0; - print() : Object { - out_string("reached!!\n") +class Main { + cells : CellularAutomaton; + + main() : Main { + { + cells <- (new CellularAutomaton).init(" X "); + cells.print(); + (let countdown : Int <- 20 in + while 0 < countdown loop + { + cells.evolve(); + cells.print(); + countdown <- countdown - 1; + } + pool + ); + self; + } }; -}; \ No newline at end of file +}; diff --git a/src/test.mips b/src/test.mips new file mode 100644 index 00000000..e08a4af3 --- /dev/null +++ b/src/test.mips @@ -0,0 +1,2143 @@ +.text +.globl main +main: +# Save types directions in the types array +la $t9, types +# Save space to locate the type info +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_String +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 0($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Int +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 4($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Object +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 8($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Bool +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 12($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_IO +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 16($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_CellularAutomaton +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 20($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Main +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 24($t9) +# Copying parents +lw $v0, 0($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 4($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 8($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 12($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 16($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +lw $v0, 20($t9) +lw $t8, 16($t9) +sw $t8, 4($v0) +lw $v0, 24($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +# Save method directions in the methods array +la $v0, methods +la $t9, entry +sw $t9, 0($v0) +la $t9, function_abort_Object +sw $t9, 4($v0) +la $t9, function_type_name_Object +sw $t9, 8($v0) +la $t9, function_copy_Object +sw $t9, 12($v0) +la $t9, function_out_string_IO +sw $t9, 16($v0) +la $t9, function_out_int_IO +sw $t9, 20($v0) +la $t9, function_in_int_IO +sw $t9, 24($v0) +la $t9, function_in_string_IO +sw $t9, 28($v0) +la $t9, function_length_String +sw $t9, 32($v0) +la $t9, function_concat_String +sw $t9, 36($v0) +la $t9, function_substr_String +sw $t9, 40($v0) +la $t9, function_CellularAutomaton_CellularAutomaton +sw $t9, 44($v0) +la $t9, function_init_CellularAutomaton +sw $t9, 48($v0) +la $t9, function_print_CellularAutomaton +sw $t9, 52($v0) +la $t9, function_num_cells_CellularAutomaton +sw $t9, 56($v0) +la $t9, function_cell_CellularAutomaton +sw $t9, 60($v0) +la $t9, function_cell_left_neighbor_CellularAutomaton +sw $t9, 64($v0) +la $t9, function_cell_right_neighbor_CellularAutomaton +sw $t9, 68($v0) +la $t9, function_cell_at_next_evolution_CellularAutomaton +sw $t9, 72($v0) +la $t9, function_evolve_CellularAutomaton +sw $t9, 76($v0) +la $t9, function_Main_Main +sw $t9, 80($v0) +la $t9, function_main_Main +sw $t9, 84($v0) + +entry: +# Gets the params from the stack +move $fp, $sp +# Gets the frame pointer from the stack +# Updates stack pointer pushing local__internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local__internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Main +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 20 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 0($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_main_Main in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_Main_Main in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t0) +# Static Dispatch of the method Main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +# This function will consume the arguments +jal function_Main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# Static Dispatch of the method main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +li $v0, 0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_abort_self_0 +move $t1, $t0 +sw $t1, -4($fp) +# Exiting the program +li $t8, 0 +li $v0, 1 +li $a0, 1 +syscall +li $v0, 17 +move $a0, $t8 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_type_name_result_0 <- Type of self +lw $t1, 0($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +lw $t9, 4($t0) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +move $a0, $t9 +syscall +move $t1, $v0 +# Loop to copy every field of the previous object +# t8 the register to loop +li $t8, 0 +loop_0: +# In t9 is stored the size of the object +bge $t8, $t9, exit_0 +lw $a0, ($t0) +sw $a0, ($v0) +addi $v0, $v0, 4 +addi $t0, $t0, 4 +# Increase loop counter +addi $t8, $t8, 4 +j loop_0 +exit_0: +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_out_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_string_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_string_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing a string +li $v0, 4 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_out_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value number +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_int_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_int_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing an int +li $v0, 1 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_in_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Reading a int +li $v0, 5 +syscall +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_in_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_string_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Copying buffer memory address +la $t0, local_in_string_result_0 +# Reading a string +li $v0, 8 +# Putting buffer in a0 +move $a0, $t0 +# Putting length of string in a1 +li $a1, 20 +syscall +# Walks to eliminate the newline +move $t9, $t0 +start_1: +lb $t8, 0($t9) +beqz $t8, end_1 +add $t9, $t9, 1 +end_1: +sb $0, ($t9) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_length_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_length_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +move $t8, $t0 +# Determining the length of a string +loop_2: +lb $t9, 0($t8) +beq $t9, $zero, end_2 +addi $t8, $t8, 1 +j loop_2 +end_2: +sub $t1, $t8, $t0 +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_concat_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Pops the register with the param value dest +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +lw $t0, -8($fp) +lw $t1, -4($fp) +lw $t2, -0($fp) +la $t2, dest +# Copy the first string to dest +move $a0, $t0 +move $a1, $t2 +sw $ra, ($sp) +addiu $sp, $sp, -4 +jal strcopier +# Concatenate second string on result buffer +move $a0, $t1 +move $a1, $v0 +jal strcopier +sb $0, 0($v0) +addiu $sp, $sp, 4 +lw $ra, ($sp) +j finish_3 +# Definition of strcopier +strcopier: +# In a0 is the source and in a1 is the destination +loop_3: +lb $t8, ($a0) +beq $t8, $zero, end_3 +addiu $a0, $a0, 1 +sb $t8, ($a1) +addiu $a1, $a1, 1 +b loop_3 +end_3: +move $v0, $a1 +jr $ra +finish_3: +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -4($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_substr_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value begin +addiu $fp, $fp, 4 +# Pops the register with the param value end +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_substr_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -12($fp) +la $t2, local_substr_result_0 +lw $t3, -8($fp) +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t3 +start_4: +lb $t9, 0($t8) +beqz $t9, error_4 +addi $v0, 1 +bgt $v0, $t0, end_len_4 +addi $t8, 1 +j start_4 +end_len_4: +# Saving dest to iterate over him +move $v0, $t2 +loop_4: +sub $t9, $v0, $t2 +beq $t9, $t1, end_4 +lb $t9, 0($t8) +beqz $t9, error_4 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_4 +error_4: +la $a0, index_error +li $v0, 4 +move $a0, $t3 +syscall +li $v0, 1 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t1 +syscall +j .raise +end_4: +sb $0, 0($v0) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_CellularAutomaton_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_CellularAutomaton_CellularAutomaton_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_CellularAutomaton_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_CellularAutomaton_CellularAutomaton_internal_0 data_1 +la $t0, data_1 +lw $t1, -0($fp) +# self . population_map <- SET local_CellularAutomaton_CellularAutomaton_internal_0 +sw $t0, 16($t1) +lw $t2, -8($fp) +# Moving self to local_CellularAutomaton_CellularAutomaton_internal_1 +move $t2, $t1 +sw $t2, -8($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_init_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value map +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_init_CellularAutomaton_internal_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# self . population_map <- SET map +sw $t0, 16($t1) +lw $t2, -8($fp) +# Moving self to local_init_CellularAutomaton_internal_0 +move $t2, $t1 +sw $t2, -8($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_print_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_print_CellularAutomaton_population_map_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_CellularAutomaton_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_CellularAutomaton_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_CellularAutomaton_internal_4 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_print_CellularAutomaton_population_map_0 <- GET self . population_map +lw $t1, 16($t0) +lw $t2, -8($fp) +# Saves in local_print_CellularAutomaton_internal_1 data_2 +la $t2, data_2 +lw $t3, -12($fp) +# Static Dispatch of the method concat +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +la $local_print_CellularAutomaton_internal_2, local_print_CellularAutomaton_internal_2_0 +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +sw $t2, -8($fp) +sw $t3, -12($fp) +# This function will consume the arguments +jal function_concat_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 12($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $t1, -0($fp) +sw $t2, -16($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -20($fp) +# Moving self to local_print_CellularAutomaton_internal_4 +move $t2, $t1 +sw $t2, -20($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -0($fp) +sw $t2, -20($fp) +# Removing all locals from stack +addiu $sp, $sp, 24 +jr $ra + + +function_num_cells_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_num_cells_CellularAutomaton_population_map_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_num_cells_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_num_cells_CellularAutomaton_population_map_0 <- GET self . population_map +lw $t1, 16($t0) +lw $t2, -8($fp) +# Static Dispatch of the method length +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal function_length_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_cell_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value position +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_cell_CellularAutomaton_population_map_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# local_cell_CellularAutomaton_population_map_0 <- GET self . population_map +lw $t1, 16($t0) +lw $t2, -12($fp) +# Static Dispatch of the method substr +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +li $t9, 1 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t3, -0($fp) +sw $t3, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +sw $t3, -0($fp) +# This function will consume the arguments +jal function_substr_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_cell_left_neighbor_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value position +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_cell_left_neighbor_CellularAutomaton_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_left_neighbor_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_left_neighbor_CellularAutomaton_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_left_neighbor_CellularAutomaton_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_left_neighbor_CellularAutomaton_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_left_neighbor_CellularAutomaton_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_left_neighbor_CellularAutomaton_internal_6 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +# local_cell_left_neighbor_CellularAutomaton_internal_0 <- position = 0 +li $t9, 0 +seq $t1, $t0, $t9 +# If local_cell_left_neighbor_CellularAutomaton_internal_0 goto true__89 +sw $t0, -0($fp) +sw $t1, -8($fp) +bnez $t1, true__89 +lw $t0, -0($fp) +lw $t1, -16($fp) +# local_cell_left_neighbor_CellularAutomaton_internal_2 <- position - 1 +addi $t1, $t0, -1 +lw $t2, -4($fp) +lw $t3, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_cell_CellularAutomaton +lw $t8, 40($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -16($fp) +sw $t2, -4($fp) +sw $t3, -20($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Moving local_cell_left_neighbor_CellularAutomaton_internal_3 to local_cell_left_neighbor_CellularAutomaton_internal_1 +move $t1, $t0 +sw $t1, -12($fp) +sw $t0, -20($fp) +sw $t1, -12($fp) +j end__89 +true__89: +lw $t0, -4($fp) +lw $t1, -28($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_num_cells_CellularAutomaton +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -28($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -28($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# local_cell_left_neighbor_CellularAutomaton_internal_4 <- local_cell_left_neighbor_CellularAutomaton_internal_5 - 1 +addi $t1, $t0, -1 +lw $t2, -4($fp) +lw $t3, -32($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_cell_CellularAutomaton +lw $t8, 40($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -28($fp) +sw $t1, -24($fp) +sw $t2, -4($fp) +sw $t3, -32($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -32($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Moving local_cell_left_neighbor_CellularAutomaton_internal_6 to local_cell_left_neighbor_CellularAutomaton_internal_1 +move $t1, $t0 +sw $t1, -12($fp) +sw $t0, -32($fp) +sw $t1, -12($fp) +end__89: +lw $t0, -12($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 36 +jr $ra + + +function_cell_right_neighbor_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value position +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_cell_right_neighbor_CellularAutomaton_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_right_neighbor_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_right_neighbor_CellularAutomaton_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_right_neighbor_CellularAutomaton_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_right_neighbor_CellularAutomaton_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_right_neighbor_CellularAutomaton_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_right_neighbor_CellularAutomaton_internal_6 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_num_cells_CellularAutomaton +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -16($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# local_cell_right_neighbor_CellularAutomaton_internal_1 <- local_cell_right_neighbor_CellularAutomaton_internal_2 - 1 +addi $t1, $t0, -1 +lw $t2, -0($fp) +lw $t3, -8($fp) +# local_cell_right_neighbor_CellularAutomaton_internal_0 <- position = local_cell_right_neighbor_CellularAutomaton_internal_1 +seq $t3, $t2, $t1 +# If local_cell_right_neighbor_CellularAutomaton_internal_0 goto true__118 +sw $t0, -16($fp) +sw $t1, -12($fp) +sw $t2, -0($fp) +sw $t3, -8($fp) +bnez $t3, true__118 +lw $t0, -0($fp) +lw $t1, -24($fp) +# local_cell_right_neighbor_CellularAutomaton_internal_4 <- position + 1 +addi $t1, $t0, 1 +lw $t2, -4($fp) +lw $t3, -28($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_cell_CellularAutomaton +lw $t8, 40($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -24($fp) +sw $t2, -4($fp) +sw $t3, -28($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -28($fp) +# saves the return value +move $t0, $v0 +lw $t1, -20($fp) +# Moving local_cell_right_neighbor_CellularAutomaton_internal_5 to local_cell_right_neighbor_CellularAutomaton_internal_3 +move $t1, $t0 +sw $t1, -20($fp) +sw $t0, -28($fp) +sw $t1, -20($fp) +j end__118 +true__118: +lw $t0, -4($fp) +lw $t1, -32($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_cell_CellularAutomaton +lw $t8, 40($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +li $t9, 0 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -32($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -32($fp) +# saves the return value +move $t0, $v0 +lw $t1, -20($fp) +# Moving local_cell_right_neighbor_CellularAutomaton_internal_6 to local_cell_right_neighbor_CellularAutomaton_internal_3 +move $t1, $t0 +sw $t1, -20($fp) +sw $t0, -32($fp) +sw $t1, -20($fp) +end__118: +lw $t0, -20($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +# Removing all locals from stack +addiu $sp, $sp, 36 +jr $ra + + +function_cell_at_next_evolution_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value position +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_15 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_16 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_17 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -24($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_cell_CellularAutomaton +lw $t8, 40($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -0($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -24($fp) +sw $t2, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -24($fp) +# saves the return value +move $t0, $v0 +lw $t1, -28($fp) +# Saves in local_cell_at_next_evolution_CellularAutomaton_internal_5 data_3 +la $t1, data_3 +lw $t2, -20($fp) +# local_cell_at_next_evolution_CellularAutomaton_internal_3 <- local_cell_at_next_evolution_CellularAutomaton_internal_4 = local_cell_at_next_evolution_CellularAutomaton_internal_5 +move $t8, $t0 +move $t9, $t1 +loop_5: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_5 +beqz $a1, mismatch_5 +seq $v0, $a0, $a1 +beqz $v0, mismatch_5 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_5 +mismatch_5: +li $v0, 0 +j end_5 +check_5: +bnez $a1, mismatch_5 +li $v0, 1 +end_5: +move $t2, $v0 +# If local_cell_at_next_evolution_CellularAutomaton_internal_3 goto true__148 +sw $t0, -24($fp) +sw $t1, -28($fp) +sw $t2, -20($fp) +bnez $t2, true__148 +lw $t0, -32($fp) +# Moving 0 to local_cell_at_next_evolution_CellularAutomaton_internal_6 +li $t0, 0 +sw $t0, -32($fp) +sw $t0, -32($fp) +j end__148 +true__148: +lw $t0, -32($fp) +# Moving 1 to local_cell_at_next_evolution_CellularAutomaton_internal_6 +li $t0, 1 +sw $t0, -32($fp) +sw $t0, -32($fp) +end__148: +lw $t0, -4($fp) +lw $t1, -40($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_cell_left_neighbor_CellularAutomaton +lw $t8, 44($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -0($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -40($fp) +sw $t2, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +lw $t1, -44($fp) +# Saves in local_cell_at_next_evolution_CellularAutomaton_internal_9 data_4 +la $t1, data_4 +lw $t2, -36($fp) +# local_cell_at_next_evolution_CellularAutomaton_internal_7 <- local_cell_at_next_evolution_CellularAutomaton_internal_8 = local_cell_at_next_evolution_CellularAutomaton_internal_9 +move $t8, $t0 +move $t9, $t1 +loop_6: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_6 +beqz $a1, mismatch_6 +seq $v0, $a0, $a1 +beqz $v0, mismatch_6 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_6 +mismatch_6: +li $v0, 0 +j end_6 +check_6: +bnez $a1, mismatch_6 +li $v0, 1 +end_6: +move $t2, $v0 +# If local_cell_at_next_evolution_CellularAutomaton_internal_7 goto true__163 +sw $t0, -40($fp) +sw $t1, -44($fp) +sw $t2, -36($fp) +bnez $t2, true__163 +lw $t0, -48($fp) +# Moving 0 to local_cell_at_next_evolution_CellularAutomaton_internal_10 +li $t0, 0 +sw $t0, -48($fp) +sw $t0, -48($fp) +j end__163 +true__163: +lw $t0, -48($fp) +# Moving 1 to local_cell_at_next_evolution_CellularAutomaton_internal_10 +li $t0, 1 +sw $t0, -48($fp) +sw $t0, -48($fp) +end__163: +lw $t0, -32($fp) +lw $t1, -48($fp) +lw $t2, -16($fp) +# local_cell_at_next_evolution_CellularAutomaton_internal_2 <- local_cell_at_next_evolution_CellularAutomaton_internal_6 + local_cell_at_next_evolution_CellularAutomaton_internal_10 +add $t2, $t0, $t1 +lw $t3, -4($fp) +lw $t4, -56($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_cell_right_neighbor_CellularAutomaton +lw $t8, 48($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t5, -0($fp) +sw $t5, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -32($fp) +sw $t1, -48($fp) +sw $t2, -16($fp) +sw $t3, -4($fp) +sw $t4, -56($fp) +sw $t5, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -56($fp) +# saves the return value +move $t0, $v0 +lw $t1, -60($fp) +# Saves in local_cell_at_next_evolution_CellularAutomaton_internal_13 data_5 +la $t1, data_5 +lw $t2, -52($fp) +# local_cell_at_next_evolution_CellularAutomaton_internal_11 <- local_cell_at_next_evolution_CellularAutomaton_internal_12 = local_cell_at_next_evolution_CellularAutomaton_internal_13 +move $t8, $t0 +move $t9, $t1 +loop_7: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_7 +beqz $a1, mismatch_7 +seq $v0, $a0, $a1 +beqz $v0, mismatch_7 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_7 +mismatch_7: +li $v0, 0 +j end_7 +check_7: +bnez $a1, mismatch_7 +li $v0, 1 +end_7: +move $t2, $v0 +# If local_cell_at_next_evolution_CellularAutomaton_internal_11 goto true__179 +sw $t0, -56($fp) +sw $t1, -60($fp) +sw $t2, -52($fp) +bnez $t2, true__179 +lw $t0, -64($fp) +# Moving 0 to local_cell_at_next_evolution_CellularAutomaton_internal_14 +li $t0, 0 +sw $t0, -64($fp) +sw $t0, -64($fp) +j end__179 +true__179: +lw $t0, -64($fp) +# Moving 1 to local_cell_at_next_evolution_CellularAutomaton_internal_14 +li $t0, 1 +sw $t0, -64($fp) +sw $t0, -64($fp) +end__179: +lw $t0, -16($fp) +lw $t1, -64($fp) +lw $t2, -12($fp) +# local_cell_at_next_evolution_CellularAutomaton_internal_1 <- local_cell_at_next_evolution_CellularAutomaton_internal_2 + local_cell_at_next_evolution_CellularAutomaton_internal_14 +add $t2, $t0, $t1 +lw $t3, -8($fp) +# local_cell_at_next_evolution_CellularAutomaton_internal_0 <- local_cell_at_next_evolution_CellularAutomaton_internal_1 = 1 +li $t9, 1 +seq $t3, $t2, $t9 +# If local_cell_at_next_evolution_CellularAutomaton_internal_0 goto true__188 +sw $t0, -16($fp) +sw $t1, -64($fp) +sw $t2, -12($fp) +sw $t3, -8($fp) +bnez $t3, true__188 +lw $t0, -72($fp) +# Saves in local_cell_at_next_evolution_CellularAutomaton_internal_16 data_6 +la $t0, data_6 +lw $t1, -68($fp) +# Moving local_cell_at_next_evolution_CellularAutomaton_internal_16 to local_cell_at_next_evolution_CellularAutomaton_internal_15 +move $t1, $t0 +sw $t1, -68($fp) +sw $t0, -72($fp) +sw $t1, -68($fp) +j end__188 +true__188: +lw $t0, -76($fp) +# Saves in local_cell_at_next_evolution_CellularAutomaton_internal_17 data_7 +la $t0, data_7 +lw $t1, -68($fp) +# Moving local_cell_at_next_evolution_CellularAutomaton_internal_17 to local_cell_at_next_evolution_CellularAutomaton_internal_15 +move $t1, $t0 +sw $t1, -68($fp) +sw $t0, -76($fp) +sw $t1, -68($fp) +end__188: +lw $t0, -68($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -68($fp) +# Removing all locals from stack +addiu $sp, $sp, 80 +jr $ra + + +function_evolve_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_evolve_CellularAutomaton_position_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_num_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_temp_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_11 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Moving 0 to local_evolve_CellularAutomaton_position_0 +li $t0, 0 +sw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -12($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_num_cells_CellularAutomaton +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# Moving local_evolve_CellularAutomaton_internal_2 to local_evolve_CellularAutomaton_num_1 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -20($fp) +# Saves in local_evolve_CellularAutomaton_internal_4 data_8 +la $t2, data_8 +lw $t3, -16($fp) +# Moving local_evolve_CellularAutomaton_internal_4 to local_evolve_CellularAutomaton_temp_3 +move $t3, $t2 +sw $t3, -16($fp) +lw $t4, -24($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t4, $v0 +sw $t0, -12($fp) +sw $t1, -8($fp) +sw $t2, -20($fp) +sw $t3, -16($fp) +sw $t4, -24($fp) +start__215: +lw $t0, -4($fp) +lw $t1, -8($fp) +lw $t2, -28($fp) +# local_evolve_CellularAutomaton_internal_6 <- local_evolve_CellularAutomaton_position_0 < local_evolve_CellularAutomaton_num_1 +slt $t2, $t0, $t1 +# If not local_evolve_CellularAutomaton_internal_6 goto end__215 +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -28($fp) +beqz $t2, end__215 +lw $t0, -0($fp) +lw $t1, -32($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_cell_at_next_evolution_CellularAutomaton +lw $t8, 52($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -4($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -32($fp) +sw $t2, -4($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -32($fp) +# saves the return value +move $t0, $v0 +lw $t1, -36($fp) +# Static Dispatch of the method concat +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t2, -16($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +la $local_evolve_CellularAutomaton_internal_8, local_evolve_CellularAutomaton_internal_8_1 +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -32($fp) +sw $t1, -36($fp) +sw $t2, -16($fp) +# This function will consume the arguments +jal function_concat_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -36($fp) +# saves the return value +move $t0, $v0 +lw $t1, -16($fp) +# Moving local_evolve_CellularAutomaton_internal_8 to local_evolve_CellularAutomaton_temp_3 +move $t1, $t0 +sw $t1, -16($fp) +lw $t2, -4($fp) +lw $t3, -40($fp) +# local_evolve_CellularAutomaton_internal_9 <- local_evolve_CellularAutomaton_position_0 + 1 +addi $t3, $t2, 1 +# Moving local_evolve_CellularAutomaton_internal_9 to local_evolve_CellularAutomaton_position_0 +move $t2, $t3 +sw $t2, -4($fp) +lw $t4, -44($fp) +# Moving local_evolve_CellularAutomaton_internal_9 to local_evolve_CellularAutomaton_internal_10 +move $t4, $t3 +sw $t4, -44($fp) +lw $t5, -24($fp) +# Moving local_evolve_CellularAutomaton_internal_10 to local_evolve_CellularAutomaton_internal_5 +move $t5, $t4 +sw $t5, -24($fp) +sw $t0, -36($fp) +sw $t1, -16($fp) +sw $t2, -4($fp) +sw $t3, -40($fp) +sw $t4, -44($fp) +sw $t5, -24($fp) +j start__215 +end__215: +lw $t0, -16($fp) +lw $t1, -0($fp) +# self . population_map <- SET local_evolve_CellularAutomaton_temp_3 +sw $t0, 16($t1) +lw $t2, -48($fp) +# Moving self to local_evolve_CellularAutomaton_internal_11 +move $t2, $t1 +sw $t2, -48($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -0($fp) +sw $t2, -48($fp) +# Removing all locals from stack +addiu $sp, $sp, 52 +jr $ra + + +function_Main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_Main_Main_cells_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t0, $v0 +lw $t1, -0($fp) +# self . cells <- SET local_Main_Main_cells_0 +sw $t0, 16($t1) +lw $t2, -8($fp) +# Moving self to local_Main_Main_internal_1 +move $t2, $t1 +sw $t2, -8($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_main_Main_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_cells_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_countdown_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_cells_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_cells_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_14 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_CellularAutomaton +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 64 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 0($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_init_CellularAutomaton in t9 +lw $t9, 48($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_print_CellularAutomaton in t9 +lw $t9, 52($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_num_cells_CellularAutomaton in t9 +lw $t9, 56($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_cell_CellularAutomaton in t9 +lw $t9, 60($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_cell_left_neighbor_CellularAutomaton in t9 +lw $t9, 64($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_cell_right_neighbor_CellularAutomaton in t9 +lw $t9, 68($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_cell_at_next_evolution_CellularAutomaton in t9 +lw $t9, 72($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_evolve_CellularAutomaton in t9 +lw $t9, 76($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +# Save the direction of the method function_CellularAutomaton_CellularAutomaton in t9 +lw $t9, 44($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 60($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t0) +# Static Dispatch of the method CellularAutomaton +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# This function will consume the arguments +jal function_CellularAutomaton_CellularAutomaton +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# Saves in local_main_Main_internal_1 data_9 +la $t1, data_9 +lw $t2, -12($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_init_CellularAutomaton +lw $t8, 28($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . cells <- SET local_main_Main_internal_2 +sw $t0, 16($t1) +lw $t2, -16($fp) +# local_main_Main_cells_3 <- GET self . cells +lw $t2, 16($t1) +lw $t3, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_print_CellularAutomaton +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $t1, -0($fp) +sw $t2, -16($fp) +sw $t3, -20($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# Moving 20 to local_main_Main_countdown_5 +li $t1, 20 +sw $t1, -24($fp) +lw $t2, -28($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t2, $v0 +sw $t0, -20($fp) +sw $t1, -24($fp) +sw $t2, -28($fp) +start__269: +lw $t0, -24($fp) +lw $t1, -32($fp) +# local_main_Main_internal_7 <- 0 < local_main_Main_countdown_5 +li $t9, 0 +slt $t1, $t9, $t0 +# If not local_main_Main_internal_7 goto end__269 +sw $t0, -24($fp) +sw $t1, -32($fp) +beqz $t1, end__269 +lw $t0, -0($fp) +lw $t1, -36($fp) +# local_main_Main_cells_8 <- GET self . cells +lw $t1, 16($t0) +lw $t2, -40($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_evolve_CellularAutomaton +lw $t8, 56($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -36($fp) +sw $t2, -40($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -44($fp) +# local_main_Main_cells_10 <- GET self . cells +lw $t2, 16($t1) +lw $t3, -48($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_print_CellularAutomaton +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -40($fp) +sw $t1, -0($fp) +sw $t2, -44($fp) +sw $t3, -48($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -48($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +lw $t2, -52($fp) +# local_main_Main_internal_12 <- local_main_Main_countdown_5 - 1 +addi $t2, $t1, -1 +# Moving local_main_Main_internal_12 to local_main_Main_countdown_5 +move $t1, $t2 +sw $t1, -24($fp) +lw $t3, -56($fp) +# Moving local_main_Main_internal_12 to local_main_Main_internal_13 +move $t3, $t2 +sw $t3, -56($fp) +lw $t4, -28($fp) +# Moving local_main_Main_internal_13 to local_main_Main_internal_6 +move $t4, $t3 +sw $t4, -28($fp) +sw $t0, -48($fp) +sw $t1, -24($fp) +sw $t2, -52($fp) +sw $t3, -56($fp) +sw $t4, -28($fp) +j start__269 +end__269: +lw $t0, -0($fp) +lw $t1, -60($fp) +# Moving self to local_main_Main_internal_14 +move $t1, $t0 +sw $t1, -60($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -60($fp) +# Removing all locals from stack +addiu $sp, $sp, 64 +jr $ra + +# Raise exception method +.raise: +li $v0, 4 +syscall +li $v0, 17 +li $a0, 1 +syscall + +.data +type_Object: .asciiz "Object" +type_IO: .asciiz "IO" +type_String: .asciiz "String" +type_Int: .asciiz "Int" +type_Bool: .asciiz "Bool" +type_CellularAutomaton: .asciiz "CellularAutomaton" +type_Main: .asciiz "Main" +type_Void: .asciiz "Void" +types: .word 0, 0, 0, 0, 0, 0, 0 +data_0: .asciiz "Void" +data_1: .asciiz "" +data_2: .asciiz " +" +data_3: .asciiz "X" +data_4: .asciiz "X" +data_5: .asciiz "X" +data_6: .asciiz "." +data_7: .asciiz "X" +data_8: .asciiz "" +data_9: .asciiz " X " +methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +local_in_string_result_0: .space 20 +dest: .space 536 +local_substr_result_0: .space 536 +local_print_CellularAutomaton_internal_2_0: .space 536 +local_evolve_CellularAutomaton_internal_8_1: .space 536 +zero_error: .asciiz "Division by zero error +" +case_void_error: .asciiz "Case on void error +" +dispatch_error: .asciiz "Dispatch on void error +" +case_error: .asciiz "Case statement without a matching branch error +" +index_error: .asciiz "Substring out of range error +" +heap_error: .asciiz "Heap overflow error +" \ No newline at end of file diff --git a/src/test1.cl b/src/test1.cl index 5ded9a0e..4c00bf1d 100644 --- a/src/test1.cl +++ b/src/test1.cl @@ -1,20 +1,10 @@ class Main inherits IO { - a : A; - - main(): IO { - out_string({ - case a of - n : IO => "Hi"; - n : Object => "Hello"; - esac; - a <- new A; - }) - }; -}; + main(): IO { { + out_string(in_string()); + } + }; -class A { - i : Int; - f(): Int { - 1 - }; -}; \ No newline at end of file + compare(a : String) : IO { + out_int(a = "a") + }; +}; diff --git a/src/test1.mips b/src/test1.mips new file mode 100644 index 00000000..ce078763 --- /dev/null +++ b/src/test1.mips @@ -0,0 +1,762 @@ +.text +.globl main +main: +# Save types directions in the types array +la $t9, types +# Save space to locate the type info +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_String +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 0($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Int +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 4($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Object +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 8($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Bool +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 12($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_IO +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 16($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Main +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 20($t9) +# Copying parents +lw $v0, 0($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 4($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 8($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 12($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 16($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +lw $v0, 20($t9) +lw $t8, 16($t9) +sw $t8, 4($v0) +# Save method directions in the methods array +la $v0, methods +la $t9, entry +sw $t9, 0($v0) +la $t9, function_abort_Object +sw $t9, 4($v0) +la $t9, function_type_name_Object +sw $t9, 8($v0) +la $t9, function_copy_Object +sw $t9, 12($v0) +la $t9, function_out_string_IO +sw $t9, 16($v0) +la $t9, function_out_int_IO +sw $t9, 20($v0) +la $t9, function_in_int_IO +sw $t9, 24($v0) +la $t9, function_in_string_IO +sw $t9, 28($v0) +la $t9, function_length_String +sw $t9, 32($v0) +la $t9, function_concat_String +sw $t9, 36($v0) +la $t9, function_substr_String +sw $t9, 40($v0) +la $t9, function_main_Main +sw $t9, 44($v0) +la $t9, function_compare_Main +sw $t9, 48($v0) + +entry: +# Gets the params from the stack +move $fp, $sp +# Gets the frame pointer from the stack +# Updates stack pointer pushing local__internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local__internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 12 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Main +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 12 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 36 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 0($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_main_Main in t9 +lw $t9, 44($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_compare_Main in t9 +lw $t9, 48($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t0) +lw $t1, -4($fp) +# Static Dispatch of the method main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# This function will consume the arguments +jal function_main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +li $v0, 0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_abort_self_0 +move $t1, $t0 +sw $t1, -4($fp) +# Exiting the program +li $t8, 0 +li $v0, 1 +li $a0, 1 +syscall +li $v0, 17 +move $a0, $t8 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_type_name_result_0 <- Type of self +lw $t1, 0($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +lw $t9, 4($t0) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +move $a0, $t9 +syscall +move $t1, $v0 +# Loop to copy every field of the previous object +# t8 the register to loop +li $t8, 0 +loop_0: +# In t9 is stored the size of the object +bge $t8, $t9, exit_0 +lw $a0, ($t0) +sw $a0, ($v0) +addi $v0, $v0, 4 +addi $t0, $t0, 4 +# Increase loop counter +addi $t8, $t8, 4 +j loop_0 +exit_0: +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_out_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_string_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_string_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing a string +li $v0, 4 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_out_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value number +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_int_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_int_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing an int +li $v0, 1 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_in_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Reading a int +li $v0, 5 +syscall +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_in_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value dest +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +lw $t0, -0($fp) +# Reading a string +# Putting buffer in a0 +move $a0, $t0 +# Putting length of string in a1 +li $a1, 20 +li $v0, 8 +syscall +# Walks to eliminate the newline +move $t9, $t0 +start_1: +lb $t8, 0($t9) +beqz $t8, end_1 +add $t9, $t9, 1 +j start_1 +end_1: +addiu $t9, $t9, -1 +sb $0, ($t9) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_length_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_length_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +move $t8, $t0 +# Determining the length of a string +loop_2: +lb $t9, 0($t8) +beq $t9, $zero, end_2 +addi $t8, $t8, 1 +j loop_2 +end_2: +sub $t1, $t8, $t0 +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_concat_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Pops the register with the param value dest +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +lw $t0, -8($fp) +lw $t1, -4($fp) +lw $t2, -0($fp) +# Copy the first string to dest +move $a0, $t0 +move $a1, $t2 +sw $ra, ($sp) +addiu $sp, $sp, -4 +jal strcopier +# Concatenate second string on result buffer +move $a0, $t1 +move $a1, $v0 +jal strcopier +sb $0, 0($v0) +addiu $sp, $sp, 4 +lw $ra, ($sp) +j finish_3 +# Definition of strcopier +strcopier: +# In a0 is the source and in a1 is the destination +loop_3: +lb $t8, ($a0) +beq $t8, $zero, end_3 +addiu $a0, $a0, 1 +sb $t8, ($a1) +addiu $a1, $a1, 1 +b loop_3 +end_3: +move $v0, $a1 +jr $ra +finish_3: +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -4($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_substr_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value begin +addiu $fp, $fp, 4 +# Pops the register with the param value end +addiu $fp, $fp, 4 +# Pops the register with the param value dest +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +lw $t0, -8($fp) +lw $t1, -4($fp) +lw $t2, -0($fp) +lw $t3, -12($fp) +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t3 +start_4: +lb $t9, 0($t8) +beqz $t9, error_4 +addi $v0, 1 +bgt $v0, $t0, end_len_4 +addi $t8, 1 +j start_4 +end_len_4: +# Saving dest to iterate over him +move $v0, $t2 +loop_4: +sub $t9, $v0, $t2 +beq $t9, $t1, end_4 +lb $t9, 0($t8) +beqz $t9, error_4 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_4 +error_4: +la $a0, index_error +li $v0, 4 +move $a0, $t3 +syscall +li $v0, 1 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t1 +syscall +j .raise +end_4: +sb $0, 0($v0) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -4($fp) +sw $t2, -0($fp) +sw $t3, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_main_Main_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_in_string_IO +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# Loading new space and pushing it to the stack +la $t1, local_main_Main_internal_0_0 +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -8($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 12($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Moving local_main_Main_internal_1 to local_main_Main_internal_2 +move $t1, $t0 +sw $t1, -12($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_compare_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value a +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_compare_Main_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_compare_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_compare_Main_internal_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -12($fp) +# Saves in local_compare_Main_internal_1 data_1 +la $t0, data_1 +lw $t1, -0($fp) +lw $t2, -8($fp) +# local_compare_Main_internal_0 <- a = local_compare_Main_internal_1 +move $t8, $t1 +move $t9, $t0 +loop_5: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_5 +beqz $a1, mismatch_5 +seq $v0, $a0, $a1 +beqz $v0, mismatch_5 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_5 +mismatch_5: +li $v0, 0 +j end_5 +check_5: +bnez $a1, mismatch_5 +li $v0, 1 +end_5: +move $t2, $v0 +lw $t3, -4($fp) +lw $t4, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_out_int_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +sw $t3, -4($fp) +sw $t4, -16($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +# Removing all locals from stack +addiu $sp, $sp, 20 +jr $ra + +# Raise exception method +.raise: +li $v0, 4 +syscall +li $v0, 17 +li $a0, 1 +syscall + +.data +type_Object: .asciiz "Object" +type_IO: .asciiz "IO" +type_String: .asciiz "String" +type_Int: .asciiz "Int" +type_Bool: .asciiz "Bool" +type_Main: .asciiz "Main" +type_Void: .asciiz "Void" +types: .word 0, 0, 0, 0, 0, 0 +data_0: .asciiz "Void" +data_1: .asciiz "a" +methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +local_main_Main_internal_0_0: .space 536 +zero_error: .asciiz "Division by zero error +" +case_void_error: .asciiz "Case on void error +" +dispatch_error: .asciiz "Dispatch on void error +" +case_error: .asciiz "Case statement without a matching branch error +" +index_error: .asciiz "Substring out of range error +" +heap_error: .asciiz "Heap overflow error +" \ No newline at end of file From e9ca378a363a9e92464f940373fa208ad07dbdac Mon Sep 17 00:00:00 2001 From: Noly Fernandez Date: Sat, 28 Nov 2020 19:51:53 -0700 Subject: [PATCH 52/60] Fixing built in classes. Almost all tests passed --- src/codegen/__init__.py | 3 +- .../__pycache__/__init__.cpython-37.pyc | Bin 1085 -> 1140 bytes .../base_cil_visitor.cpython-37.pyc | Bin 8621 -> 10209 bytes .../__pycache__/cil_visitor.cpython-37.pyc | Bin 12712 -> 12850 bytes src/codegen/visitors/base_cil_visitor.py | 99 +- src/codegen/visitors/cil_visitor.py | 36 +- src/codegen/visitors/mips_visitor.py | 55 +- src/cool_parser/output_parser/parselog.txt | 3426 ++++++++- src/lexer/lexer.py | 2 +- src/main.py | 26 +- src/semantic/types.py | 24 + src/semantic/visitors/type_checker.py | 4 +- src/semantic/visitors/var_collector.py | 3 +- src/test.asm | 6408 +++++++++++++++- src/test.cil | 450 ++ src/test.cl | 473 +- src/test.mips | 6646 ++++++++++++++--- src/test1.cl | 8 +- src/test1.mips | 408 +- 19 files changed, 16095 insertions(+), 1976 deletions(-) create mode 100644 src/test.cil diff --git a/src/codegen/__init__.py b/src/codegen/__init__.py index e302f426..055a4f8a 100644 --- a/src/codegen/__init__.py +++ b/src/codegen/__init__.py @@ -10,7 +10,8 @@ def codegen_pipeline(context, ast, scope, debug=False): cil_ast = cool_to_cil.visit(ast, scope) if debug: formatter = get_formatter() - print(formatter(cil_ast)) + with open('test.cil', 'w+') as fd: + fd.write(formatter(cil_ast)) inherit_graph = context.build_inheritance_graph() # pprint(inherit_graph) data_code, text_code = CILToMIPSVistor(inherit_graph).visit(cil_ast) diff --git a/src/codegen/__pycache__/__init__.cpython-37.pyc b/src/codegen/__pycache__/__init__.cpython-37.pyc index ee9d69ce40f5cc9110c443ecb973421128b307d9..7a39a2c28eb5b0171107f27d29de1aec7f324066 100644 GIT binary patch delta 360 zcmYjNKTE?v6u)=5YcFlnYLiG1#Z3%?LkBk(1;>JRP^6$>A_SzC%VA5nAQEtua$lgu zNjDca7r%jPK7gOV!O^=6;)D0&_jvF9-k*2&&76J5X&`Mu_Hq6*bKcrb9oX6rw5MYB zxjEeceqlXbD`>!K?2Pp4A!)H>OK_Al(p BOv?ZO delta 309 zcmeyuv6q9_iI1tz;OHA;y9ZDC+!VdMZp9w5yIBsrLb7>k4^KW1tR zzQvMXkeYXkwY(^^Bvq5Oh!3c`h#y4o0*PBJC8-r9x0upWiUdGnU_ubY;sg@HKwQiN zBp4Vaz&7wOiZB*&PTs}bU?l_;1uH_*2-kg!!zMRBr8FnijuB)8C_s3C&H_RvE?xjt Cn>#81 diff --git a/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc index 2cd2e4465017533621b869551223c6a305e3aeb7..3f1e21693ccdb6f0de439ce8d13a63744a2d2e7d 100644 GIT binary patch delta 4416 zcmZ`+U2Gd!6`mRY#CCq1xJjI(Nt^%1PU1RF;-qQ%m$apYZd%CxRI@F!6VJq%)Ung+ zNl3!Aj5gY3S=g5yi5EaL;%y}!P?2~5u>ziu0PzA6BeY^yJOEFKH(n6uoEbZ|+l`fT z?>#@?IrpA3Gw1$z_0#)pE3K^|0sdb7>{kj){-o_kQb>a3D*P93TR)d(2eSeflz@gb zXdn$~!nzQX)|d!Nv1TjndDHsHvmg#zpLyQz?*^tI`s;rZu8#(+KSsK&AA0Yd83G+! zG}thV4jHlj=goB?zm|#139IbWUn+@N|Mfk2sU&V4`hRw30?lzZ>;e$mukP;Zc`fE+ zTDV`>`kum%OngG8`uk&I?Z74wRyEXdyZlwP({E{8l1ffh6#lL|SsQkuRET zFJl^od|k}H4}OrsD2W;KINCwgG?_yC4&t_HT4(m1&_SZn%x>P%&8>pwXfISi9lH@L z)%>9B1EwGTsc!aRVhYbhP2|G1wC&L(O?XG@6}~5Eo*#Hl#FBI{XL>>AI~H#WkHVHv}q6 z-x{0605MBPL1iK_8B-oL)9YvlCP?AZaP@9V6nYm`FUx1*YwE!&@E zg}vP(!#Z-SMh@(&?g9Fkp4AU*FDCM$E$-AFBN*7tWtAh059iUuw{H{;)Ar`{P1E)S&H`g!K_Ts{ z0X}Tx4bxC_#*wbze42OoFw z#;RkO@W-^lsvjTusc6Dud?JCf3uZtY;$wWAUpV%bCQLySwbo+^B8`EMVe%0N%LtD< z*jjl6-vK8cf^(U~LAXhP8|5(`=aT?8RRcE-aAU_J&~c&{0NPVZ07{rAG$-6?#|0h9 z8Q?m>yHYJoK0C@Fa8A!v*SrepW!J!3vhEaaPt5+MQ~|=^YFAA=zPt-nyTDN3Kjrwn$Pnz zUjV#C!b?zimjLe~;Vn^kONdk6_G-zR_=s7lB}l<#fSci$_!7SiaLYAtR{$cXpVE8$%OyjgyQU**>T?>a9FUSYcv-tz(8!rOT#@8SJ?kdN{SKE;!KjxX|M zem&d1AV`AJsm*ckws%v~=6Qg|G;hHXa(_cx;Df|lqS22$O?O=0)2#$&noNAP}Fmq zN|KFPmwQH6*HJZks%qp-+d~7=VVs`@6?QHR-&xhhI&T_D=Njk4M1;H`KM$hd(W2T z7f#CEa0NFlxFwmlgm z=YD-*$u3yG>9r>8z`cU1twBFz2VXJrdqtcw>bLNY!mwqH-DX42jlSQCWjVAtGow)d zUzA&MP6zP1%8GIrmj;}S(`FZC4=~UmRb!BFNaYbyCDq{<* zCt&T49vqXdd=bWeSYLPLaT>efLgMH<>ySA0l66At7w5!Lp#2hbv49d1k4EX{`iK7Z z0SQBbKOC`h#`-H_J(&U*Epb439XZ$u7TbWlCv3w-2)?n>30zZR;u1%b za@X9Vo--!e;z8ZbZv?dh%Qu&2X8&yQ*-#xRPM0U zA!DyB2loqxrchhm(9MQ2TYBb+g7QzSch5gAk0MrJmlfcWZ5}!o4ZKh}mu0%trf`W@ zUv?VNA}*JZtRlIIUiDpI!das zS}6}jm3Tn&2NI#aAR$pzfS?Zu2_f;q57-9;Pf!U2s>B-)oHOgB?j@1G**WJsmzg

KQ~Qm|GlX321ZWo^|^ zsZlg|(Q}lf`L^dlR~I;vi0`HUFySYZVp|Gy4l!vOS{E|>iBd|Syjh6dF+SrpUaJ}B zUwLo6R@=S+3f&RwdBw9$wv=s2C*4xr!#s@KlBpl%SESqi>(Y83Fuh!@)hbnrMbKD;ynjt=3|hhIcgSksCx=!Ck zZSxHL+}cGJ`0uU9eXcbhk6m5BX!JCiDaLw*x}1d0f?vC9`a( zwX#Mx#F%ydOKg^$;zN7>8A3ZpS+w*GCxC&}63nZ+TiVduB%g}k7!e0Rs9-g=j78~1 zREmK%#p93S?PP`j7(dgR1AQ2NqA2E-$Ng>7@~AE8oqA+bF3R=pqEzp(<*g{|)?2%! z6$LAJTLwuBO8C9Ry{=ulr#=MqBq(ESNbltx9RnV0k953wcbBBp(?H4qX%9>51Hxxo zR~oGwBdz!D#`20-J4_KB@*1)I`XEcQ3>(>0>RASxb0y9c=4W9RW9_Vq^|3*gV%cKw zup~?B-MFB%+3mVql=LB{tSC#eo@9Q}4zn<}MbD-O7$IP!SWIZrtX;Gj)+O2z)+d;X zU`BwMWrISKV=2*&vaDdZzT%q%JdTZSlA>2+(kAx#_<2zyj_<=osLd4?tjY#|*fTnC1r{#f=?blytwKeZ<)T_ON=xb_&GLVHQf-%z z)Bc=emTkVjcW)%&ip;W#lKI}fmmEbms&+oHR4a?q78E-k&s@ki_$8xUw3p#h#Qma9 z<~w%T4b2si!&AJTIO$6rc#8K%6RlcXgfvx`=6G?ycD_Z7(^_&AF}8vJ?6l)^9XdWJ z=YnQCKG%|727kGPd;g(t$5Sv%)ZGNorK4Q$=WXt3)`0>q8suo|@xZ`OB;363xRz`W zt%15a4qR#m)Na0Jyjz(;VeY{7E|Z;=&v*uVp3=T`7g zG_y#e87RGIdoPp-l%BS_KQsM&Xu<`Y-vn z>4m!^!gYmWj`oIofruxOc&3O~#6h4?e00#~X-#8y2H^z4EW#YZNrXKJegsV4QAF0~ zu#ZbZFCercEDR&o5$+>AKzN?A_{#8aGNY|QzZd>}?JY51EbO1=&oYmD`jMS@t;u&I G$^QXWCXD<5 diff --git a/src/codegen/visitors/__pycache__/cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/cil_visitor.cpython-37.pyc index a7e2c1b916fc0497abbd23f77f4b241fc8dd85a4..f804f4efd7244b0030ec568eed62bac4281e2b6a 100644 GIT binary patch delta 2346 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 ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',29,1046) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',29,1046) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',29,1046) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : class type ocur id opar formals cpar . LexToken(colon,':',29,1048) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon . LexToken(type,'Bool',29,1050) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type . LexToken(ocur,'{',29,1055) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur . LexToken(true,'true',29,1057) + yacc.py: 445:Action : Shift and goto state 91 + yacc.py: 410: + yacc.py: 411:State : 91 + yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur true . LexToken(ccur,'}',29,1062) + yacc.py: 471:Action : Reduce rule [atom -> true] with ['true'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 - yacc.py: 435:Stack : class type inherits type ocur id opar epsilon . LexToken(cpar,')',2,31) + yacc.py: 435:Stack : class type ocur def_func semi id opar epsilon . LexToken(cpar,')',35,1254) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 - yacc.py: 435:Stack : class type inherits type ocur id opar param_list_empty . LexToken(cpar,')',2,31) + yacc.py: 435:Stack : class type ocur def_func semi id opar param_list_empty . LexToken(cpar,')',35,1254) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 - yacc.py: 435:Stack : class type inherits type ocur id opar formals . LexToken(cpar,')',2,31) + yacc.py: 435:Stack : class type ocur def_func semi id opar formals . LexToken(cpar,')',35,1254) yacc.py: 445:Action : Shift and goto state 64 yacc.py: 410: yacc.py: 411:State : 64 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar . LexToken(colon,':',2,32) + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar . LexToken(colon,':',35,1257) yacc.py: 445:Action : Shift and goto state 100 yacc.py: 410: yacc.py: 411:State : 100 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon . LexToken(type,'IO',2,34) + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon . LexToken(type,'Int',35,1259) yacc.py: 445:Action : Shift and goto state 138 yacc.py: 410: yacc.py: 411:State : 138 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type . LexToken(ocur,'{',2,37) + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type . LexToken(ocur,'{',35,1263) yacc.py: 445:Action : Shift and goto state 181 yacc.py: 410: yacc.py: 411:State : 181 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur . LexToken(ocur,'{',2,39) + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur . LexToken(ocur,'{',35,1265) yacc.py: 445:Action : Shift and goto state 90 yacc.py: 410: yacc.py: 411:State : 90 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur . LexToken(id,'out_string',3,43) + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur . LexToken(id,'abort',35,1267) yacc.py: 445:Action : Shift and goto state 72 yacc.py: 410: yacc.py: 411:State : 72 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur id . LexToken(opar,'(',3,53) + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id . LexToken(opar,'(',35,1272) yacc.py: 445:Action : Shift and goto state 113 yacc.py: 410: yacc.py: 411:State : 113 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur id opar . LexToken(id,'in_string',3,54) + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar . LexToken(cpar,')',35,1273) + yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar epsilon . LexToken(cpar,')',35,1273) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar arg_list_empty . LexToken(cpar,')',35,1273) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar args . LexToken(cpar,')',35,1273) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar args cpar . LexToken(semi,';',35,1274) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['abort','(',[],')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'abort',35,1267), [])) + yacc.py: 410: + yacc.py: 411:State : 78 + yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur func_call . LexToken(semi,';',35,1274) + yacc.py: 471:Action : Reduce rule [factor -> func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar epsilon . LexToken(cpar,')',40,1389) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',40,1389) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals . LexToken(cpar,')',40,1389) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar . LexToken(colon,':',40,1392) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon . LexToken(type,'List',40,1394) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',40,1399) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(ocur,'{',40,1401) + yacc.py: 445:Action : Shift and goto state 90 + yacc.py: 410: + yacc.py: 411:State : 90 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur . LexToken(id,'abort',40,1403) yacc.py: 445:Action : Shift and goto state 72 yacc.py: 410: yacc.py: 411:State : 72 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur id opar id . LexToken(opar,'(',3,63) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id . LexToken(opar,'(',40,1408) yacc.py: 445:Action : Shift and goto state 113 yacc.py: 410: yacc.py: 411:State : 113 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur id opar id opar . LexToken(cpar,')',3,64) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar . LexToken(cpar,')',40,1409) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur id opar id opar epsilon . LexToken(cpar,')',3,64) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar epsilon . LexToken(cpar,')',40,1409) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur id opar id opar arg_list_empty . LexToken(cpar,')',3,64) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar arg_list_empty . LexToken(cpar,')',40,1409) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur id opar id opar args . LexToken(cpar,')',3,64) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar args . LexToken(cpar,')',40,1409) yacc.py: 445:Action : Shift and goto state 191 yacc.py: 410: yacc.py: 411:State : 191 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur id opar id opar args cpar . LexToken(cpar,')',3,65) - yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['in_string','(',[],')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'in_string',3,54), [])) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar args cpar . LexToken(semi,';',40,1410) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['abort','(',[],')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'abort',40,1403), [])) yacc.py: 410: yacc.py: 411:State : 78 - yacc.py: 435:Stack : class type inherits type ocur id opar formals cpar colon type ocur ocur id opar func_call . LexToken(cpar,')',3,65) - yacc.py: 471:Action : Reduce rule [factor -> func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ comp] with [] and goto state 111 + yacc.py: 506:Result : ( arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',3,43), [ id] with ['self'] and goto state 79 + yacc.py: 506:Result : ( func_call] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 135 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','IO','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['a',':','String'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'a',7,85), LexToken(type,'S ...) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar id colon type . LexToken(cpar,')',49,1784) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['i',':','Int'] and goto state 44 + yacc.py: 506:Result : ((LexToken(id,'i',49,1777), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 44 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar param . LexToken(cpar,')',7,95) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'a',7,85), LexToken(type,' ...) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar param . LexToken(cpar,')',49,1784) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar param_list . LexToken(cpar,')',7,95) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'a',7,85), LexToken(type,' ...) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',49,1784) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 51 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals . LexToken(cpar,')',7,95) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',49,1784) yacc.py: 445:Action : Shift and goto state 64 yacc.py: 410: yacc.py: 411:State : 64 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar . LexToken(colon,':',7,97) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',49,1786) yacc.py: 445:Action : Shift and goto state 100 yacc.py: 410: yacc.py: 411:State : 100 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon . LexToken(type,'IO',7,99) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'List',49,1788) yacc.py: 445:Action : Shift and goto state 138 yacc.py: 410: yacc.py: 411:State : 138 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type . LexToken(ocur,'{',7,102) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',49,1793) yacc.py: 445:Action : Shift and goto state 181 yacc.py: 410: yacc.py: 411:State : 181 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur . LexToken(id,'out_int',8,106) - yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(opar,'(',50,1801) + yacc.py: 445:Action : Shift and goto state 80 yacc.py: 410: - yacc.py: 411:State : 72 - yacc.py: 435:Stack : class type inherits type ocur def_func semi id opar formals cpar colon type ocur id . LexToken(opar,'(',8,113) + yacc.py: 411:State : 80 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar . LexToken(new,'new',50,1802) + yacc.py: 445:Action : Shift and goto state 89 + yacc.py: 410: + yacc.py: 411:State : 89 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar new . LexToken(type,'Cons',50,1806) + yacc.py: 445:Action : Shift and goto state 134 + yacc.py: 410: + yacc.py: 411:State : 134 + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',50,1810) + yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Cons'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( ( id] with ['i'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( string] with ['a'] and goto state 79 - yacc.py: 506:Result : ( id] with ['self'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 158 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( comp equal op] with [,'=',] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_int','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_int',8,106), [ id opar args cpar] with ['init','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'init',50,1812), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['compare','(',,')',':','IO','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['cons','(',,')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 - yacc.py: 435:Stack : class type inherits type ocur def_func semi def_func semi epsilon . LexToken(ccur,'}',10,127) + yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',53,1833) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 - yacc.py: 435:Stack : class type inherits type ocur def_func semi def_func semi feature_list . LexToken(ccur,'}',10,127) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','List','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 2 - yacc.py: 506:Result : ([ id colon type] with ['car',':','Int'] and goto state 17 + yacc.py: 506:Result : ( id colon type] with ['cdr',':','List'] and goto state 17 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',76,2482) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',76,2482) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',76,2482) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals cpar . LexToken(colon,':',76,2484) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals cpar colon . LexToken(type,'Bool',76,2486) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',76,2491) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur . LexToken(false,'false',76,2493) + yacc.py: 445:Action : Shift and goto state 92 + yacc.py: 410: + yacc.py: 411:State : 92 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur false . LexToken(ccur,'}',76,2499) + yacc.py: 471:Action : Reduce rule [atom -> false] with ['false'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',78,2511) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',78,2511) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',78,2511) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals cpar . LexToken(colon,':',78,2514) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals cpar colon . LexToken(type,'Int',78,2516) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',78,2520) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'car',78,2522) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',78,2526) + yacc.py: 471:Action : Reduce rule [atom -> id] with ['car'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',80,2538) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',80,2538) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',80,2538) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',80,2541) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'List',80,2543) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',80,2548) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(id,'cdr',80,2550) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',80,2554) + yacc.py: 471:Action : Reduce rule [atom -> id] with ['cdr'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['i',':','Int'] and goto state 44 + yacc.py: 506:Result : ((LexToken(id,'i',82,2566), LexToken(type ...) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param . LexToken(comma,',',82,2573) + yacc.py: 445:Action : Shift and goto state 60 + yacc.py: 410: + yacc.py: 411:State : 60 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma . LexToken(id,'rest',82,2575) + yacc.py: 445:Action : Shift and goto state 46 + yacc.py: 410: + yacc.py: 411:State : 46 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma id . LexToken(colon,':',82,2580) + yacc.py: 445:Action : Shift and goto state 61 + yacc.py: 410: + yacc.py: 411:State : 61 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma id colon . LexToken(type,'List',82,2582) + yacc.py: 445:Action : Shift and goto state 96 + yacc.py: 410: + yacc.py: 411:State : 96 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma id colon type . LexToken(cpar,')',82,2586) + yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['rest',':','List'] and goto state 44 + yacc.py: 506:Result : ((LexToken(id,'rest',82,2575), LexToken(t ...) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param . LexToken(cpar,')',82,2586) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 + yacc.py: 506:Result : ([(LexToken(id,'rest',82,2575), LexToken( ...) + yacc.py: 410: + yacc.py: 411:State : 95 + yacc.py: 430:Defaulted state 95: Reduce using 33 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param_list . LexToken(cpar,')',82,2586) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) + yacc.py: 410: + yacc.py: 411:State : 42 + yacc.py: 430:Defaulted state 42: Reduce using 30 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',82,2586) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',82,2586) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar . LexToken(colon,':',82,2588) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon . LexToken(type,'List',82,2590) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',82,2595) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur . LexToken(ocur,'{',83,2603) + yacc.py: 445:Action : Shift and goto state 90 + yacc.py: 410: + yacc.py: 411:State : 90 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur ocur . LexToken(id,'car',84,2607) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur ocur id . LexToken(larrow,'<-',84,2611) + yacc.py: 445:Action : Shift and goto state 112 + yacc.py: 410: + yacc.py: 411:State : 112 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur ocur id larrow . LexToken(id,'i',84,2614) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur ocur id larrow id . LexToken(semi,';',84,2615) + yacc.py: 471:Action : Reduce rule [atom -> id] with ['i'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['car','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['rest'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['cdr','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['init','(',,')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 16 + yacc.py: 430:Defaulted state 16: Reduce using 14 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',90,2655) + yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 48 + yacc.py: 430:Defaulted state 48: Reduce using 16 + yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',90,2655) + yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Cons','inherits','List','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['mylist',':','List'] and goto state 17 + yacc.py: 506:Result : ( id colon type] with ['l',':','List'] and goto state 44 + yacc.py: 506:Result : ((LexToken(id,'l',107,3036), LexToken(typ ...) + yacc.py: 410: + yacc.py: 411:State : 44 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param . LexToken(cpar,')',107,3044) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) + yacc.py: 410: + yacc.py: 411:State : 42 + yacc.py: 430:Defaulted state 42: Reduce using 30 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list . LexToken(cpar,')',107,3044) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',107,3044) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar . LexToken(colon,':',107,3046) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon . LexToken(type,'Object',107,3048) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type . LexToken(ocur,'{',107,3055) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur . LexToken(if,'if',108,3063) + yacc.py: 445:Action : Shift and goto state 86 + yacc.py: 410: + yacc.py: 411:State : 86 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if . LexToken(id,'l',108,3066) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if id . LexToken(dot,'.',108,3067) + yacc.py: 471:Action : Reduce rule [atom -> id] with ['l'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar epsilon . LexToken(cpar,')',108,3074) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar arg_list_empty . LexToken(cpar,')',108,3074) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar args . LexToken(cpar,')',108,3074) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar args cpar . LexToken(then,'then',108,3076) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['isNil','(',[],')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'isNil',108,3068), [])) + yacc.py: 410: + yacc.py: 411:State : 167 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot func_call . LexToken(then,'then',108,3076) + yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( string] with ['\n'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',108,3081), [ func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( id] with ['l'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar epsilon . LexToken(cpar,')',110,3145) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar arg_list_empty . LexToken(cpar,')',110,3145) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar args . LexToken(cpar,')',110,3145) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar args cpar . LexToken(cpar,')',110,3146) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['head','(',[],')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'head',110,3140), [])) + yacc.py: 410: + yacc.py: 411:State : 167 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot func_call . LexToken(cpar,')',110,3146) + yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_int','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_int',110,3130), [ func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( string] with [' '] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',111,3155), [ func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['l'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar epsilon . LexToken(cpar,')',112,3196) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar arg_list_empty . LexToken(cpar,')',112,3196) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar args . LexToken(cpar,')',112,3196) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar args cpar . LexToken(cpar,')',112,3197) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['tail','(',[],')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'tail',112,3191), [])) + yacc.py: 410: + yacc.py: 411:State : 167 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot func_call . LexToken(cpar,')',112,3197) + yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['print_list','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'print_list',112,3178), [ func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print_list','(',,')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 45 + yacc.py: 430:Defaulted state 45: Reduce using 34 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',126,3742) + yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 43 + yacc.py: 430:Defaulted state 43: Reduce using 31 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',126,3742) + yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 51 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals . LexToken(cpar,')',126,3742) + yacc.py: 445:Action : Shift and goto state 64 + yacc.py: 410: + yacc.py: 411:State : 64 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar . LexToken(colon,':',126,3744) + yacc.py: 445:Action : Shift and goto state 100 + yacc.py: 410: + yacc.py: 411:State : 100 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon . LexToken(type,'Object',126,3746) + yacc.py: 445:Action : Shift and goto state 138 + yacc.py: 410: + yacc.py: 411:State : 138 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type . LexToken(ocur,'{',126,3753) + yacc.py: 445:Action : Shift and goto state 181 + yacc.py: 410: + yacc.py: 411:State : 181 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur . LexToken(ocur,'{',127,3761) + yacc.py: 445:Action : Shift and goto state 90 + yacc.py: 410: + yacc.py: 411:State : 90 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur . LexToken(id,'mylist',128,3765) + yacc.py: 445:Action : Shift and goto state 72 + yacc.py: 410: + yacc.py: 411:State : 72 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id . LexToken(larrow,'<-',128,3772) + yacc.py: 445:Action : Shift and goto state 112 + yacc.py: 410: + yacc.py: 411:State : 112 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow . LexToken(new,'new',128,3775) + yacc.py: 445:Action : Shift and goto state 89 + yacc.py: 410: + yacc.py: 411:State : 89 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow new . LexToken(type,'List',128,3779) + yacc.py: 445:Action : Shift and goto state 134 + yacc.py: 410: + yacc.py: 411:State : 134 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow new type . LexToken(dot,'.',128,3783) + yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','List'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3784), [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3792), [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3800), [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3808), [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3816), [ factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar epsilon . LexToken(cpar,')',129,3851) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar arg_list_empty . LexToken(cpar,')',129,3851) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar args . LexToken(cpar,')',129,3851) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar args cpar . LexToken(cpar,')',129,3852) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['isNil','(',[],')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'isNil',129,3845), [])) + yacc.py: 410: + yacc.py: 411:State : 167 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot func_call . LexToken(cpar,')',129,3852) + yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 124 + yacc.py: 506:Result : ( not expr] with ['not',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 133 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['print_list','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'print_list',131,3874), [ func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 150 + yacc.py: 430:Defaulted state 150: Reduce using 96 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar epsilon . LexToken(cpar,')',132,3924) + yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 149 + yacc.py: 430:Defaulted state 149: Reduce using 92 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar arg_list_empty . LexToken(cpar,')',132,3924) + yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 153 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar args . LexToken(cpar,')',132,3924) + yacc.py: 445:Action : Shift and goto state 191 + yacc.py: 410: + yacc.py: 411:State : 191 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar args cpar . LexToken(semi,';',132,3925) + yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['tail','(',[],')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'tail',132,3919), [])) + yacc.py: 410: + yacc.py: 411:State : 167 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot func_call . LexToken(semi,';',132,3925) + yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 204 + yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 + yacc.py: 548:Result : (None) + yacc.py: 410: + yacc.py: 411:State : 16 + yacc.py: 430:Defaulted state 16: Reduce using 14 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi def_func semi epsilon . LexToken(ccur,'}',138,3957) + yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 + yacc.py: 506:Result : ([]) + yacc.py: 410: + yacc.py: 411:State : 48 + yacc.py: 430:Defaulted state 48: Reduce using 16 + yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi def_func semi feature_list . LexToken(ccur,'}',138,3957) + yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( ( Date: Sat, 28 Nov 2020 20:23:55 -0700 Subject: [PATCH 53/60] Adding abort message. All tests passed --- .fuse_hidden0000072700000001 | 183 - .fuse_hidden0000159500000002 | 183 - .fuse_hidden00001c2e00000003 | 183 - .../__pycache__/cil_ast.cpython-37.pyc | Bin 14905 -> 14939 bytes src/codegen/cil_ast.py | 4 +- .../base_cil_visitor.cpython-37.pyc | Bin 10209 -> 10906 bytes src/codegen/visitors/base_cil_visitor.py | 93 +- src/codegen/visitors/base_mips_visitor.py | 31 +- src/codegen/visitors/mips_visitor.py | 21 +- src/cool_parser/output_parser/parselog.txt | 1658 +-- src/main.py | 4 +- src/test.cil | 450 - src/test.cl | 382 - src/test.mips | 6753 --------- src/test1.cl | 6 - tests/.gitignore | 61 - tests/codegen/arith.mips | 12019 ++++++++++++++++ tests/codegen/atoi.mips | 3396 +++++ tests/codegen/book_list.mips | 3182 ++++ tests/codegen/cells.mips | 2427 ++++ tests/codegen/complex.mips | 1764 +++ tests/codegen/fib.mips | 1217 ++ src/test.asm => tests/codegen/graph.mips | 533 +- tests/codegen/hairyscary.mips | 6178 ++++++++ .../codegen/hello_world.mips | 121 +- tests/codegen/helloworld.cl | 6 - tests/codegen/io.mips | 1786 +++ tests/codegen/life.mips | 7607 ++++++++++ tests/codegen/list.mips | 2080 +++ tests/codegen/new_complex.mips | 2182 +++ tests/codegen/palindrome.mips | 1557 ++ tests/codegen/primes.mips | 1451 ++ tests/codegen/print-cool.mips | 1208 ++ tests/codegen/sort-list.mips | 3688 +++++ tests/codegen/test.cl | 19 - tests/lexer_test.py | 3 +- tests/parser_test.py | 3 +- tests/semantic_test.py | 3 +- tests/utils/utils.py | 3 +- 39 files changed, 53093 insertions(+), 9352 deletions(-) delete mode 100644 .fuse_hidden0000072700000001 delete mode 100644 .fuse_hidden0000159500000002 delete mode 100644 .fuse_hidden00001c2e00000003 delete mode 100644 src/test.cil delete mode 100644 src/test.cl delete mode 100644 src/test.mips delete mode 100644 src/test1.cl create mode 100644 tests/codegen/arith.mips create mode 100644 tests/codegen/atoi.mips create mode 100644 tests/codegen/book_list.mips create mode 100644 tests/codegen/cells.mips create mode 100644 tests/codegen/complex.mips create mode 100644 tests/codegen/fib.mips rename src/test.asm => tests/codegen/graph.mips (97%) create mode 100644 tests/codegen/hairyscary.mips rename src/test1.mips => tests/codegen/hello_world.mips (90%) delete mode 100644 tests/codegen/helloworld.cl create mode 100644 tests/codegen/io.mips create mode 100644 tests/codegen/life.mips create mode 100644 tests/codegen/list.mips create mode 100644 tests/codegen/new_complex.mips create mode 100644 tests/codegen/palindrome.mips create mode 100644 tests/codegen/primes.mips create mode 100644 tests/codegen/print-cool.mips create mode 100644 tests/codegen/sort-list.mips delete mode 100644 tests/codegen/test.cl diff --git a/.fuse_hidden0000072700000001 b/.fuse_hidden0000072700000001 deleted file mode 100644 index 5b1cbbce..00000000 --- a/.fuse_hidden0000072700000001 +++ /dev/null @@ -1,183 +0,0 @@ -# COOL: Proyecto de Compilación - - -[![Build Status](https://travis-ci.org/matcom/cool-compiler-2020.svg?branch=master)](https://travis-ci.org/matcom/cool-compiler-2020) - -> Proyecto base para el compilador de 4to año en Ciencia de la Computación. - -## Generalidades - -La evaluación de la asignatura Complementos de Compilación, inscrita en el programa del 4to año de la Licenciatura en Ciencia de la Computación de la Facultad de Matemática y Computación de la -Universidad de La Habana, consiste este curso en la implementación de un compilador completamente -funcional para el lenguaje _COOL_. - -_COOL (Classroom Object-Oriented Language)_ es un pequeño lenguaje que puede ser implementado con un esfuerzo razonable en un semestre del curso. Aun así, _COOL_ mantiene muchas de las características de los lenguajes de programación modernos, incluyendo orientación a objetos, tipado estático y manejo automático de memoria. - -## Cómo comenzar (o terminar) - -El proyecto de Compilación será recogido y evaluado **únicamente** a través de Github. Es imprescindible tener una cuenta de Github para cada participante, y que su proyecto esté correctamente hosteado en esta plataforma. A continuación le damos las instrucciones mínimas necesarias para ello: - -### 1. Si no lo han hecho ya, regístrense en [Github](https://github.com) todos los miembros del equipo (es gratis). - -![](img/img1.png) - -### 2. Haga click en el botón **Fork** para hacer una copia del proyecto en el perfil de Github de uno de los miembros. - -Opcionalmente pueden [crear una organización](https://github.com/organizations/new) y copiar el proyecto en el perfil de la misma. - -![](img/img2.png) - -### 3. Una vez hecho esto, tendrá un nuevo repositorio en `github/`. - -Revise que el repositorio de su equipo está en su perfil. -En este ejemplo se ha copiado a la cuenta de `github.com/apiad`. - -Debe indicar bajo el nombre del repositorio: `"forked from matcom/cool-compiler-2020"`. - -![](img/img3.png) - -### 4. Clone este proyecto en un repositorio local. - -Busque la URL de su proyecto en la interfaz web de Github. - -Asegúrese de clonar **su copia** y no el proyecto original en `matcom/cool-compiler-2020`. - -![](img/img4.png) - -```bash -$ git clone git@github.com:/cool-compiler-2020.git -``` - -> Donde `` es posiblemente el nombre de su equipo o del miembro donde se hizo el _fork_. - -A partir de este punto debe tener un proyecto `cool-compiler-2020` local. -El siguiente paso depende de si usted ya tiene su código versionado con `git` o no. - -### 5.A. Si tiene su proyecto en git (y no quiere perder la historia): - -#### 5.1. Mezcle hacia el nuevo respositorio su repositorio anterior: - -```bash -$ cd cool-compiler-2020 -$ git pull --allow-unrelated-histories master -``` - -#### 5.2. Organice su proyecto, código fuente y documentación, de acuerdo a las instrucciones de este documento, y vuelva a hacer `commit`. - -```bash -$ mv src/ -$ git add . -$ git commit -a -m "Mezclado con el proyecto base" -``` - -#### 5.3. A partir de este punto puede hacer `push` cada vez que tenga cambios que subir. - -```bash -$ git push origin master -``` - -### 5.B Si aún no tiene su proyecto en git (o no le importa la historia): - -#### 5.1. Simplemente copie el código de su proyecto en la carpeta correspondiente `src` y haga su primer commit. - -```bash -$ mv src/ -$ git commit -a -m "Hello Git!" -``` - -#### 5.2. A partir de este punto asegúrese de hacer `commit` de forma regular para mantener su repositorio actualizado. - -Si necesita saber más sobre `git`, todo lo imprescindible está en [esta guía](doc/github-git-cheat-sheet.pdf). - -#### 5.3. A partir de este punto puede hacer `push` cada vez que tenga cambios que subir. - -```bash -$ git push origin master -``` - -## Entregas - -En este proyecto se realizarán entregas parciales a lo largo del curso. Para realizar una entrega, siga los siguientes pasos. - -### 1. Cree un pull request al proyecto original desde su copia. - -![](img/img5.png) - -### 2. Asegúrese de tener la siguiente configuración antes de hacer click en **Create pull request**. - -- **base repository**: `matcom/cool-compiler-2020` (repositorio original) - - **branch**: `entrega-parser` -- **head repository**: `/cool-compiler-2020` (repositorio propio) - - **branch**: `master` (o la que corresponda) - -> Asegúrese que se indica **Able to merge**. De lo contrario, existen cambios en el repositorio original que usted no tiene, y debe actualizarlos. - -> **NOTA**: Asegúrese que el _pull request_ se hace a la rama `entrega-parser`. - -![](img/img6.png) - -### 3. Introduzca un título y descripción adecuados, y haga click en **Create pull request**. - -![](img/img7.png) - -### 4. Espere mientras se ejecutan las pruebas. - -Verá la indicación **Some checks haven't completed yet**. - -![](img/img8.png) - -Es posible que tenga que actualizar los cambios que se hayan hecho en el repositorio original, por ejemplo, si se han agregado nuevos tests. En este caso obtendrá el siguiente mensaje: - -> **This branch is out-of-date with base branch** - -Haga click en **Update branch** y siga las instrucciones. - -![](img/img12.png) - -### 5. Verifique que no hubo errores en las pruebas. - -Si ve el mensaje **All checks have failed**, significa que su código no pasó las pruebas. - -![](img/img9.png) - -Para ver los resultados de las pruebas haga click en el link **Details** junto al ícono de `continuous-integration/travis-ci/pr`, o visite [este link](https://travis-ci.org/matcom/cool-compiler-2020/pull_requests) y busque su _pull request_. - -![](img/img11.png) - -Haciendo click en el título de su _pull request_ (ej. **PR #1**) podrá ver los detalles de ejecución de todas las pruebas, así como las excepciones lanzadas. - -![](img/img10.png) - -### 6. Arregle los errores y repita el paso 5 hasta que todas las pruebas pasen. - -Para cualquier modificación que haga a su proyecto, haga _commit_ y _push_ para **su repositorio personal** y automáticamente se actualizará el estado del _pull request_ y se volverán a ejecutar las pruebas. **No es necesario** abrir un _pull request_ nuevo por cada entrega, sino actualizar el anterior. - -> **Por favor asegúrese de mantener un solo _pull request_ activo por equipo**. En caso de abrir uno nuevo, cerrar el anterior. - -## Sobre la implementación - -Ponga todo su código e instrucciones necesarias en la carpeta `src`. Más información en [`src/Readme.md`](src/Readme.md). - -## Sobre la documentación - -Usted debe presentar un reporte escrito documentando el proceso de construcción de su compilador y los detalles más importantes de su funcionamiento. Más información en [`doc/Readme.md`](doc/Readme.md). - -## Sobre los equipos de desarrollo - -Para desarrollar el compilador del lenguaje COOL se trabajará en equipos de 2 o 3 integrantes. - -## Sobre los casos de prueba - -La carpeta `tests` contiene todos los casos de prueba que son obligatorios de pasar para que su proyecto tenga derecho a ser evaluado. - -Estos tests se ejecutan automáticamente cada vez que hace un _pull request_ al repositorio `matcom/cool-compiler-2020`. Solo aquellos proyectos que pasen todas las pruebas con éxito serán evaluados. - -Para ejecutar las pruebas localmente, debe tener instalado `Python 3.7`, `pip` y `make` (normalmente viene con Linux). Ejecute: - -```bash -$ pip install -r requirements.txt -$ cd src -$ make test -``` - -Si desea configurar su repositorio en Github para que ejecute automáticamente las pruebas en cada commit, siga las instrucciones en [travis-ci.org](https://travis-ci.org) para registrarse y activar su repositorio. El archivo `.travis.yml` que se encuentra en este repositorio ya contiene todas las instrucciones necesarias para que funcione la integracion con Travis-CI. diff --git a/.fuse_hidden0000159500000002 b/.fuse_hidden0000159500000002 deleted file mode 100644 index 55093d31..00000000 --- a/.fuse_hidden0000159500000002 +++ /dev/null @@ -1,183 +0,0 @@ -# COOL: Proyecto de Compilación - - -[![Build Status](https://travis-ci.org/matcom/cool-compiler-2020.svg?branch=master)](https://travis-ci.org/matcom/cool-compiler-2020) - -> Proyecto base para el compilador de 4to año en Ciencia de la Computación. - -## Generalidades - -La evaluación de la asignatura Complementos de Compilación, inscrita en el programa del 4to año de la Licenciatura en Ciencia de la Computación de la Facultad de Matemática y Computación de la -Universidad de La Habana, consiste este curso en la implementación de un compilador completamente -funcional para el lenguaje _COOL_. - -_COOL (Classroom Object-Oriented Language)_ es un pequeño lenguaje que puede ser implementado con un esfuerzo razonable en un semestre del curso. Aun así, _COOL_ mantiene muchas de las características de los lenguajes de programación modernos, incluyendo orientación a objetos, tipado estático y manejo automático de memoria. - -## Cómo comenzar (o terminar) - -El proyecto de Compilación será recogido y evaluado **únicamente** a través de Github. Es imprescindible tener una cuenta de Github para cada participante, y que su proyecto esté correctamente hosteado en esta plataforma. A continuación le damos las instrucciones mínimas necesarias para ello: - -### 1. Si no lo han hecho ya, regístrense en [Github](https://github.com) todos los miembros del equipo (es gratis). - -![](img/img1.png) - -### 2. Haga click en el botón **Fork** para hacer una copia del proyecto en el perfil de Github de uno de los miembros. - -Opcionalmente pueden [crear una organización](https://github.com/organizations/new) y copiar el proyecto en el perfil de la misma. - -![](img/img2.png) - -### 3. Una vez hecho esto, tendrá un nuevo repositorio en `github/`. - -Revise que el repositorio de su equipo está en su perfil. -En este ejemplo se ha copiado a la cuenta de `github.com/apiad`. - -Debe indicar bajo el nombre del repositorio: `"forked from matcom/cool-compiler-2020"`. - -![](img/img3.png) - -### 4. Clone este proyecto en un repositorio local. - -Busque la URL de su proyecto en la interfaz web de Github. - -Asegúrese de clonar **su copia** y no el proyecto original en `matcom/cool-compiler-2020`. - -![](img/img4.png) - -```bash -$ git clone git@github.com:/cool-compiler-2020.git -``` - -> Donde `` es posiblemente el nombre de su equipo o del miembro donde se hizo el _fork_. - -A partir de este punto debe tener un proyecto `cool-compiler-2020` local. -El siguiente paso depende de si usted ya tiene su código versionado con `git` o no. - -### 5.A. Si tiene su proyecto en git (y no quiere perder la historia): - -#### 5.1. Mezcle hacia el nuevo respositorio su repositorio anterior: - -```bash -$ cd cool-compiler-2020 -$ git pull --allow-unrelated-histories master -``` - -#### 5.2. Organice su proyecto, código fuente y documentación, de acuerdo a las instrucciones de este documento, y vuelva a hacer `commit`. - -```bash -$ mv src/ -$ git add . -$ git commit -a -m "Mezclado con el proyecto base" -``` - -#### 5.3. A partir de este punto puede hacer `push` cada vez que tenga cambios que subir. - -```bash -$ git push origin master -``` - -### 5.B Si aún no tiene su proyecto en git (o no le importa la historia): - -#### 5.1. Simplemente copie el código de su proyecto en la carpeta correspondiente `src` y haga su primer commit. - -```bash -$ mv src/ -$ git commit -a -m "Hello Git!" -``` - -#### 5.2. A partir de este punto asegúrese de hacer `commit` de forma regular para mantener su repositorio actualizado. - -Si necesita saber más sobre `git`, todo lo imprescindible está en [esta guía](doc/github-git-cheat-sheet.pdf). - -#### 5.3. A partir de este punto puede hacer `push` cada vez que tenga cambios que subir. - -```bash -$ git push origin master -``` - -## Entregas - -En este proyecto se realizarán entregas parciales a lo largo del curso. Para realizar una entrega, siga los siguientes pasos. - -### 1. Cree un pull request al proyecto original desde su copia. - -![](img/img5.png) - -### 2. Asegúrese de tener la siguiente configuración antes de hacer click en **Create pull request**. - -- **base repository**: `matcom/cool-compiler-2020` (repositorio original) - - **branch**: `entrega-final` -- **head repository**: `/cool-compiler-2020` (repositorio propio) - - **branch**: `master` (o la que corresponda) - -> Asegúrese que se indica **Able to merge**. De lo contrario, existen cambios en el repositorio original que usted no tiene, y debe actualizarlos. - -> **NOTA**: Asegúrese que el _pull request_ se hace a la rama `entrega-final`. - -![](img/img6.png) - -### 3. Introduzca un título y descripción adecuados, y haga click en **Create pull request**. - -![](img/img7.png) - -### 4. Espere mientras se ejecutan las pruebas. - -Verá la indicación **Some checks haven't completed yet**. - -![](img/img8.png) - -Es posible que tenga que actualizar los cambios que se hayan hecho en el repositorio original, por ejemplo, si se han agregado nuevos tests. En este caso obtendrá el siguiente mensaje: - -> **This branch is out-of-date with base branch** - -Haga click en **Update branch** y siga las instrucciones. - -![](img/img12.png) - -### 5. Verifique que no hubo errores en las pruebas. - -Si ve el mensaje **All checks have failed**, significa que su código no pasó las pruebas. - -![](img/img9.png) - -Para ver los resultados de las pruebas haga click en el link **Details** junto al ícono de `continuous-integration/travis-ci/pr`, o visite [este link](https://travis-ci.org/matcom/cool-compiler-2020/pull_requests) y busque su _pull request_. - -![](img/img11.png) - -Haciendo click en el título de su _pull request_ (ej. **PR #1**) podrá ver los detalles de ejecución de todas las pruebas, así como las excepciones lanzadas. - -![](img/img10.png) - -### 6. Arregle los errores y repita el paso 5 hasta que todas las pruebas pasen. - -Para cualquier modificación que haga a su proyecto, haga _commit_ y _push_ para **su repositorio personal** y automáticamente se actualizará el estado del _pull request_ y se volverán a ejecutar las pruebas. **No es necesario** abrir un _pull request_ nuevo por cada entrega, sino actualizar el anterior. - -> **Por favor asegúrese de mantener un solo _pull request_ activo por equipo**. En caso de abrir uno nuevo, cerrar el anterior. - -## Sobre la implementación - -Ponga todo su código e instrucciones necesarias en la carpeta `src`. Más información en [`src/Readme.md`](src/Readme.md). - -## Sobre la documentación - -Usted debe presentar un reporte escrito documentando el proceso de construcción de su compilador y los detalles más importantes de su funcionamiento. Más información en [`doc/Readme.md`](doc/Readme.md). - -## Sobre los equipos de desarrollo - -Para desarrollar el compilador del lenguaje COOL se trabajará en equipos de 2 o 3 integrantes. - -## Sobre los casos de prueba - -La carpeta `tests` contiene todos los casos de prueba que son obligatorios de pasar para que su proyecto tenga derecho a ser evaluado. - -Estos tests se ejecutan automáticamente cada vez que hace un _pull request_ al repositorio `matcom/cool-compiler-2020`. Solo aquellos proyectos que pasen todas las pruebas con éxito serán evaluados. - -Para ejecutar las pruebas localmente, debe tener instalado `Python 3.7`, `pip` y `make` (normalmente viene con Linux). Ejecute: - -```bash -$ pip install -r requirements.txt -$ cd src -$ make test -``` - -Si desea configurar su repositorio en Github para que ejecute automáticamente las pruebas en cada commit, siga las instrucciones en [travis-ci.org](https://travis-ci.org) para registrarse y activar su repositorio. El archivo `.travis.yml` que se encuentra en este repositorio ya contiene todas las instrucciones necesarias para que funcione la integracion con Travis-CI. diff --git a/.fuse_hidden00001c2e00000003 b/.fuse_hidden00001c2e00000003 deleted file mode 100644 index 5b1cbbce..00000000 --- a/.fuse_hidden00001c2e00000003 +++ /dev/null @@ -1,183 +0,0 @@ -# COOL: Proyecto de Compilación - - -[![Build Status](https://travis-ci.org/matcom/cool-compiler-2020.svg?branch=master)](https://travis-ci.org/matcom/cool-compiler-2020) - -> Proyecto base para el compilador de 4to año en Ciencia de la Computación. - -## Generalidades - -La evaluación de la asignatura Complementos de Compilación, inscrita en el programa del 4to año de la Licenciatura en Ciencia de la Computación de la Facultad de Matemática y Computación de la -Universidad de La Habana, consiste este curso en la implementación de un compilador completamente -funcional para el lenguaje _COOL_. - -_COOL (Classroom Object-Oriented Language)_ es un pequeño lenguaje que puede ser implementado con un esfuerzo razonable en un semestre del curso. Aun así, _COOL_ mantiene muchas de las características de los lenguajes de programación modernos, incluyendo orientación a objetos, tipado estático y manejo automático de memoria. - -## Cómo comenzar (o terminar) - -El proyecto de Compilación será recogido y evaluado **únicamente** a través de Github. Es imprescindible tener una cuenta de Github para cada participante, y que su proyecto esté correctamente hosteado en esta plataforma. A continuación le damos las instrucciones mínimas necesarias para ello: - -### 1. Si no lo han hecho ya, regístrense en [Github](https://github.com) todos los miembros del equipo (es gratis). - -![](img/img1.png) - -### 2. Haga click en el botón **Fork** para hacer una copia del proyecto en el perfil de Github de uno de los miembros. - -Opcionalmente pueden [crear una organización](https://github.com/organizations/new) y copiar el proyecto en el perfil de la misma. - -![](img/img2.png) - -### 3. Una vez hecho esto, tendrá un nuevo repositorio en `github/`. - -Revise que el repositorio de su equipo está en su perfil. -En este ejemplo se ha copiado a la cuenta de `github.com/apiad`. - -Debe indicar bajo el nombre del repositorio: `"forked from matcom/cool-compiler-2020"`. - -![](img/img3.png) - -### 4. Clone este proyecto en un repositorio local. - -Busque la URL de su proyecto en la interfaz web de Github. - -Asegúrese de clonar **su copia** y no el proyecto original en `matcom/cool-compiler-2020`. - -![](img/img4.png) - -```bash -$ git clone git@github.com:/cool-compiler-2020.git -``` - -> Donde `` es posiblemente el nombre de su equipo o del miembro donde se hizo el _fork_. - -A partir de este punto debe tener un proyecto `cool-compiler-2020` local. -El siguiente paso depende de si usted ya tiene su código versionado con `git` o no. - -### 5.A. Si tiene su proyecto en git (y no quiere perder la historia): - -#### 5.1. Mezcle hacia el nuevo respositorio su repositorio anterior: - -```bash -$ cd cool-compiler-2020 -$ git pull --allow-unrelated-histories master -``` - -#### 5.2. Organice su proyecto, código fuente y documentación, de acuerdo a las instrucciones de este documento, y vuelva a hacer `commit`. - -```bash -$ mv src/ -$ git add . -$ git commit -a -m "Mezclado con el proyecto base" -``` - -#### 5.3. A partir de este punto puede hacer `push` cada vez que tenga cambios que subir. - -```bash -$ git push origin master -``` - -### 5.B Si aún no tiene su proyecto en git (o no le importa la historia): - -#### 5.1. Simplemente copie el código de su proyecto en la carpeta correspondiente `src` y haga su primer commit. - -```bash -$ mv src/ -$ git commit -a -m "Hello Git!" -``` - -#### 5.2. A partir de este punto asegúrese de hacer `commit` de forma regular para mantener su repositorio actualizado. - -Si necesita saber más sobre `git`, todo lo imprescindible está en [esta guía](doc/github-git-cheat-sheet.pdf). - -#### 5.3. A partir de este punto puede hacer `push` cada vez que tenga cambios que subir. - -```bash -$ git push origin master -``` - -## Entregas - -En este proyecto se realizarán entregas parciales a lo largo del curso. Para realizar una entrega, siga los siguientes pasos. - -### 1. Cree un pull request al proyecto original desde su copia. - -![](img/img5.png) - -### 2. Asegúrese de tener la siguiente configuración antes de hacer click en **Create pull request**. - -- **base repository**: `matcom/cool-compiler-2020` (repositorio original) - - **branch**: `entrega-parser` -- **head repository**: `/cool-compiler-2020` (repositorio propio) - - **branch**: `master` (o la que corresponda) - -> Asegúrese que se indica **Able to merge**. De lo contrario, existen cambios en el repositorio original que usted no tiene, y debe actualizarlos. - -> **NOTA**: Asegúrese que el _pull request_ se hace a la rama `entrega-parser`. - -![](img/img6.png) - -### 3. Introduzca un título y descripción adecuados, y haga click en **Create pull request**. - -![](img/img7.png) - -### 4. Espere mientras se ejecutan las pruebas. - -Verá la indicación **Some checks haven't completed yet**. - -![](img/img8.png) - -Es posible que tenga que actualizar los cambios que se hayan hecho en el repositorio original, por ejemplo, si se han agregado nuevos tests. En este caso obtendrá el siguiente mensaje: - -> **This branch is out-of-date with base branch** - -Haga click en **Update branch** y siga las instrucciones. - -![](img/img12.png) - -### 5. Verifique que no hubo errores en las pruebas. - -Si ve el mensaje **All checks have failed**, significa que su código no pasó las pruebas. - -![](img/img9.png) - -Para ver los resultados de las pruebas haga click en el link **Details** junto al ícono de `continuous-integration/travis-ci/pr`, o visite [este link](https://travis-ci.org/matcom/cool-compiler-2020/pull_requests) y busque su _pull request_. - -![](img/img11.png) - -Haciendo click en el título de su _pull request_ (ej. **PR #1**) podrá ver los detalles de ejecución de todas las pruebas, así como las excepciones lanzadas. - -![](img/img10.png) - -### 6. Arregle los errores y repita el paso 5 hasta que todas las pruebas pasen. - -Para cualquier modificación que haga a su proyecto, haga _commit_ y _push_ para **su repositorio personal** y automáticamente se actualizará el estado del _pull request_ y se volverán a ejecutar las pruebas. **No es necesario** abrir un _pull request_ nuevo por cada entrega, sino actualizar el anterior. - -> **Por favor asegúrese de mantener un solo _pull request_ activo por equipo**. En caso de abrir uno nuevo, cerrar el anterior. - -## Sobre la implementación - -Ponga todo su código e instrucciones necesarias en la carpeta `src`. Más información en [`src/Readme.md`](src/Readme.md). - -## Sobre la documentación - -Usted debe presentar un reporte escrito documentando el proceso de construcción de su compilador y los detalles más importantes de su funcionamiento. Más información en [`doc/Readme.md`](doc/Readme.md). - -## Sobre los equipos de desarrollo - -Para desarrollar el compilador del lenguaje COOL se trabajará en equipos de 2 o 3 integrantes. - -## Sobre los casos de prueba - -La carpeta `tests` contiene todos los casos de prueba que son obligatorios de pasar para que su proyecto tenga derecho a ser evaluado. - -Estos tests se ejecutan automáticamente cada vez que hace un _pull request_ al repositorio `matcom/cool-compiler-2020`. Solo aquellos proyectos que pasen todas las pruebas con éxito serán evaluados. - -Para ejecutar las pruebas localmente, debe tener instalado `Python 3.7`, `pip` y `make` (normalmente viene con Linux). Ejecute: - -```bash -$ pip install -r requirements.txt -$ cd src -$ make test -``` - -Si desea configurar su repositorio en Github para que ejecute automáticamente las pruebas en cada commit, siga las instrucciones en [travis-ci.org](https://travis-ci.org) para registrarse y activar su repositorio. El archivo `.travis.yml` que se encuentra en este repositorio ya contiene todas las instrucciones necesarias para que funcione la integracion con Travis-CI. diff --git a/src/codegen/__pycache__/cil_ast.cpython-37.pyc b/src/codegen/__pycache__/cil_ast.cpython-37.pyc index c8c81797b33ceafefbcbf6e21c5fc8016605c6b4..2df822beb33eb474f0c4b362c8cb211ef692360a 100644 GIT binary patch delta 263 zcmdm4a=V1riIBkvGa{@+4!U$qIaO3b)vja}tY-D~d#b(nSg&LJ>%4 zvJ~-v*lCj&iYW`5Gcqs~gAHKhVPs=uV`5|6{MyKzkl8z>Qs zWJ)&Fl;eyslbtP08M7uc3aSX_098eyn3FSkgT-3`kQ<6XmK1@^Dax6AP)L085z9Pw LP618Pd+FlKKYqt9y_}LrvSGAI{>nQFaH1l diff --git a/src/codegen/cil_ast.py b/src/codegen/cil_ast.py index 5eedc2f9..0a57de67 100644 --- a/src/codegen/cil_ast.py +++ b/src/codegen/cil_ast.py @@ -308,11 +308,13 @@ def __init__(self, dest, idx=None): self.out = dest class ExitNode(InstructionNode): - def __init__(self, value=0, idx=None): + def __init__(self, classx, value=0, idx=None): super().__init__(idx) + self.classx = classx # instance of the method that called the class self.value = value self.in1 = value + self.in2 = classx class CopyNode(InstructionNode): def __init__(self, dest, source, idx=None): diff --git a/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc index 3f1e21693ccdb6f0de439ce8d13a63744a2d2e7d..0b8debcf7c184e3c55d8207b885aa7f04e56c267 100644 GIT binary patch delta 1478 zcmai!OHUeM6o%)UL8TyQ20?1HR%=Z)+KQrF6i~nm-Y=;O(uANBCK7}O#!Y(&3)WrD zuB*E5qK0LcUGyJx-=t}}YtvuQGiN@?;HD&#^PbE5eCKTVe)RsOJLz&c1pIxIzvO(; zJ2&$ToMP(5FNI%i(5^r7ga(*mdngobAQXF)o_AvFmFLXHT>7VB?^3{QDYLhtCVp@N z&y7)|QtY)>46`cfzlLWTGOTdtJk3hz?rYafw<^{{nq7Gg%di5WrmY^<1cfPbQ&d?! zqA}$~lc9>DQ-Ua8F=9sArms__ZIHK$yak9rv;nIKT(baU2n-M~jzAe=e7!|}7|$(- zSt{mX^#tOVAO>+rAbp+aL0WeM>B~e<61|b+_!Z0bywL zi>}||*Kc-R->$Z=-$q^pHen04FA%t60cH>wCEzaYm*MNJ^6PnSx!zLY*Y6>I4KlC` zdr05cfBMH8VOWDS>_8CKVPExx1X0KhDKW4WZ3R(@gPmdm`i-bc^#f%c9#d@trYI)i z8O0a`DaK)rVgeS7sP@(ml@tt8Ee%5yH^EPFs{x}lWUC+Hqw7?RLzrR$)~F}dkFmGU zduiU=;k^?OY(mki`4mwV;Gij?avBPbh6T!8m>rUmQ5};CqB?0xs;h@C_A0`eFtgoq zj5wr_zf`%*mvZ@wN>$69Y1ON;n!B#4xrJw*vW3|Ps*J{p` zHSTwGnTUCX)( zfl!WM=lNvcJ+oftz{)F=(`hz`LM+i?skOlJHqM$ZA8JsC#@w`s=)33jZk*?--g&#Y@FDb|54*T; zph9;tvnn*93j=GZ!2}y8Wfjbc`Bcangot%m)U*tHPc~qKv?gp3TaY7O&+JfMhmxkX zU=L**mPqSBlGue+Vh_@qGt0C`KGP}{>(JCh(|up9>(&Nt?Esj`CaLL)6c&TMxq(qc zM=-k0D2rk?q$rNjK1D^04(5gxpbrkFBs*gHzEimyHq`6&QX5zY(hO}@ZS I)aU%)|9lm@-T(jq diff --git a/src/codegen/visitors/base_cil_visitor.py b/src/codegen/visitors/base_cil_visitor.py index 036de9af..2f109275 100644 --- a/src/codegen/visitors/base_cil_visitor.py +++ b/src/codegen/visitors/base_cil_visitor.py @@ -118,95 +118,142 @@ def initialize_attr(self, constructor, attr: Attribute, scope: Scope): def create_built_in(self): - # ------------ Object Functions ------------ # + # ---------------------------------- Object Functions ---------------------------------- # f1_params = [ParamNode("self", 'Object')] f1_localVars = [LocalNode("local_abort_Object_self_0")] - f1_intructions = [cil.AssignNode(f1_localVars[0].name,f1_params[0].name, self.index),cil.ExitNode(idx=self.index),cil.ReturnNode(f1_localVars[0].name, self.index)] + f1_intructions = [cil.AssignNode(f1_localVars[0].name,f1_params[0].name, self.index), + cil.ExitNode(f1_params[0].name, idx=self.index), + cil.ReturnNode(f1_localVars[0].name, self.index)] f1 = FunctionNode("function_abort_Object",f1_params,f1_localVars,f1_intructions) f2_params = [ParamNode("self", 'Object')] f2_localVars = [LocalNode("local_type_name_Object_result_0")] - f2_intructions = [cil.TypeOfNode(f2_params[0].name,f2_localVars[0].name, self.index),cil.ReturnNode(f2_localVars[0].name, self.index)] + f2_intructions = [cil.TypeOfNode(f2_params[0].name,f2_localVars[0].name, self.index), + cil.ReturnNode(f2_localVars[0].name, self.index)] f2 = FunctionNode("function_type_name_Object",f2_params,f2_localVars,f2_intructions) f3_params = [ParamNode("self", 'Object')] f3_localVars = [LocalNode("local_copy_Object_result_0")] - f3_intructions = [cil.CopyNode(f3_localVars[0].name,f3_params[0].name, self.index),cil.ReturnNode(f3_localVars[0].name, self.index)] + f3_intructions = [cil.CopyNode(f3_localVars[0].name,f3_params[0].name, self.index), + cil.ReturnNode(f3_localVars[0].name, self.index)] f3 = FunctionNode("function_copy_Object",f3_params,f3_localVars,f3_intructions) - # ------------ IO Functions ------------ # + # ---------------------------------- IO Functions ---------------------------------- # f4_params = [ParamNode("self", 'IO'), ParamNode("word", 'String')] f4_localVars = [LocalNode("local_out_string_String_self_0")] - f4_intructions = [cil.AssignNode(f4_localVars[0].name, f4_params[0].name, self.index),cil.OutStringNode(f4_params[1].name, self.index),cil.ReturnNode(f4_localVars[0].name, self.index)] + f4_intructions = [cil.AssignNode(f4_localVars[0].name, f4_params[0].name, self.index), + cil.OutStringNode(f4_params[1].name, self.index), + cil.ReturnNode(f4_localVars[0].name, self.index)] f4 = FunctionNode("function_out_string_IO",f4_params,f4_localVars,f4_intructions) f5_params = [ParamNode("self", 'IO'),ParamNode("number", 'Int')] f5_localVars = [LocalNode("local_out_int_IO_self_0")] - f5_intructions = [cil.AssignNode(f5_localVars[0].name,f5_params[0].name, self.index),cil.OutIntNode(f5_params[1].name, self.index),cil.ReturnNode(f5_localVars[0].name, self.index)] + f5_intructions = [cil.AssignNode(f5_localVars[0].name,f5_params[0].name, self.index), + cil.OutIntNode(f5_params[1].name, self.index), + cil.ReturnNode(f5_localVars[0].name, self.index)] f5 = FunctionNode("function_out_int_IO",f5_params,f5_localVars,f5_intructions) f6_params = [ParamNode("self", 'IO')] f6_localVars = [LocalNode("local_in_int_IO_result_0")] - f6_intructions = [cil.ReadIntNode(f6_localVars[0].name, self.index),cil.ReturnNode(f6_localVars[0].name, self.index)] + f6_intructions = [cil.ReadIntNode(f6_localVars[0].name, self.index), + cil.ReturnNode(f6_localVars[0].name, self.index)] f6 = FunctionNode("function_in_int_IO",f6_params,f6_localVars,f6_intructions) f7_params = [ParamNode("self", 'IO')] f7_localVars = [LocalNode("local_in_string_IO_result_0")] - f7_intructions = [cil.ReadStringNode(f7_localVars[0].name, self.index),cil.ReturnNode(f7_localVars[0].name, self.index)] + f7_intructions = [cil.ReadStringNode(f7_localVars[0].name, self.index), + cil.ReturnNode(f7_localVars[0].name, self.index)] f7 = FunctionNode("function_in_string_IO",f7_params,f7_localVars,f7_intructions) - # ------------ String Functions ------------ # + # ---------------------------------- String Functions ---------------------------------- # f8_params = [ParamNode("self", 'String')] f8_localVars = [LocalNode("local_length_String_result_0")] - f8_intructions = [cil.LengthNode(f8_localVars[0].name,f8_params[0].name, self.index),cil.ReturnNode(f8_localVars[0].name, self.index)] + f8_intructions = [cil.LengthNode(f8_localVars[0].name,f8_params[0].name, self.index), + cil.ReturnNode(f8_localVars[0].name, self.index)] f8 = FunctionNode("function_length_String",f8_params,f8_localVars,f8_intructions) f9_params = [ParamNode("self", 'String'),ParamNode("word", 'String')] f9_localVars = [LocalNode("local_concat_String_result_0")] - f9_intructions = [cil.ConcatNode(f9_localVars[0].name,f9_params[0].name,f9_params[1].name, self.index),cil.ReturnNode(f9_localVars[0].name, self.index)] + f9_intructions = [cil.ConcatNode(f9_localVars[0].name,f9_params[0].name,f9_params[1].name, self.index), + cil.ReturnNode(f9_localVars[0].name, self.index)] f9 = FunctionNode("function_concat_String",f9_params,f9_localVars,f9_intructions) f10_params = [ParamNode("self", 'String'),ParamNode("begin", 'Int'),ParamNode("end", 'Int')] f10_localVars = [LocalNode("local_substr_String_result_0")] - f10_intructions = [cil.SubstringNode(f10_localVars[0].name,f10_params[0].name,f10_params[1].name,f10_params[2].name, self.index), cil.ReturnNode(f10_localVars[0].name, self.index)] + f10_intructions = [cil.SubstringNode(f10_localVars[0].name,f10_params[0].name,f10_params[1].name,f10_params[2].name, self.index), + cil.ReturnNode(f10_localVars[0].name, self.index)] f10 = FunctionNode("function_substr_String",f10_params,f10_localVars,f10_intructions) f11_params = [ParamNode("self", 'String')] f11_localVars = [LocalNode("local_type_name_String_result_0")] - f11_intructions = [cil.LoadNode(f11_localVars[0].name, 'type_String', self.index),cil.ReturnNode(f11_localVars[0].name, self.index)] + f11_intructions = [cil.LoadNode(f11_localVars[0].name, 'type_String', self.index), + cil.ReturnNode(f11_localVars[0].name, self.index)] f11 = FunctionNode("function_type_name_String",f11_params,f11_localVars,f11_intructions) f12_params = [ParamNode("self", 'String')] f12_localVars = [LocalNode("local_copy_String_result_0"), LocalNode("local_copy_String_result_1"), LocalNode("local_copy_String_result_2")] - f12_intructions = [cil.LengthNode(f12_localVars[1].name, f12_params[0].name), cil.MinusNode(f12_localVars[2].name, f12_localVars[1].name, 1), cil.SubstringNode(f12_localVars[0].name, f12_params[0].name, 0, f12_localVars[2].name),cil.ReturnNode(f12_localVars[0].name, self.index)] + f12_intructions = [cil.LengthNode(f12_localVars[1].name, f12_params[0].name), + cil.MinusNode(f12_localVars[2].name, f12_localVars[1].name, 1), + cil.SubstringNode(f12_localVars[0].name, f12_params[0].name, 0, f12_localVars[2].name), + cil.ReturnNode(f12_localVars[0].name, self.index)] f12 = FunctionNode("function_copy_String",f12_params,f12_localVars,f12_intructions) + f17_params = [ParamNode("self", 'String')] + f17_localVars = [LocalNode('local_abort_String_msg_0')] + f17_intructions = [cil.LoadNode(f17_params[0].name, 'string_abort'), + cil.OutStringNode(f17_params[0].name, self.index), + # cil.AssignNode(f1_localVars[0].name,f1_params[0].name, self.index), + cil.ExitNode(f17_params[0].name, idx=self.index)] + # cil.ReturnNode(f17_localVars[0].name, self.index)] + f17 = FunctionNode("function_abort_String",f17_params,f17_localVars,f17_intructions) + + # ---------------------------------- Int Functions ---------------------------------- # f13_params = [ParamNode("self", 'Int')] f13_localVars = [LocalNode("local_type_name_Int_result_0")] - f13_intructions = [cil.LoadNode(f13_localVars[0].name, 'type_Int', self.index),cil.ReturnNode(f13_localVars[0].name, self.index)] + f13_intructions = [cil.LoadNode(f13_localVars[0].name, 'type_Int', self.index), + cil.ReturnNode(f13_localVars[0].name, self.index)] f13 = FunctionNode("function_type_name_Int",f13_params,f13_localVars,f13_intructions) f14_params = [ParamNode("self", 'Int')] f14_localVars = [LocalNode("local_copy_Int_result_0")] - f14_intructions = [cil.AssignNode(f14_localVars[0].name, f14_params[0].name), cil.ReturnNode(f14_localVars[0].name, self.index)] + f14_intructions = [cil.AssignNode(f14_localVars[0].name, f14_params[0].name), + cil.ReturnNode(f14_localVars[0].name, self.index)] f14 = FunctionNode("function_copy_Int",f14_params,f14_localVars,f14_intructions) + f18_params = [ParamNode("self", 'Int')] + f18_localVars = [LocalNode('local_abort_Int_msg_0')] + f18_intructions = [cil.LoadNode(f18_params[0].name, 'int_abort'), + cil.OutStringNode(f18_params[0].name, self.index), + cil.ExitNode(f18_params[0].name, idx=self.index)] + f18 = FunctionNode("function_abort_Int",f18_params,f18_localVars,f18_intructions) + + # ---------------------------------- Bool Functions ---------------------------------- # f15_params = [ParamNode("self", 'Bool')] f15_localVars = [LocalNode("local_type_name_Bool_result_0")] - f15_intructions = [cil.LoadNode(f15_localVars[0].name, 'type_Bool', self.index),cil.ReturnNode(f15_localVars[0].name, self.index)] + f15_intructions = [cil.LoadNode(f15_localVars[0].name, 'type_Bool', self.index), + cil.ReturnNode(f15_localVars[0].name, self.index)] f15 = FunctionNode("function_type_name_Bool",f15_params,f15_localVars,f15_intructions) f16_params = [ParamNode("self", 'Bool')] f16_localVars = [LocalNode("local_copy_result_Bool_0")] - f16_intructions = [cil.AssignNode(f16_localVars[0].name, f16_params[0].name), cil.ReturnNode(f16_localVars[0].name, self.index)] + f16_intructions = [cil.AssignNode(f16_localVars[0].name, f16_params[0].name), + cil.ReturnNode(f16_localVars[0].name, self.index)] f16 = FunctionNode("function_copy_Bool",f16_params,f16_localVars,f16_intructions) - self.dotcode += [f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11, f12, f13, f14, f15, f16] + f19_params = [ParamNode("self", 'Bool')] + f19_localVars = [LocalNode('local_abort_Bool_msg_0')] + f19_intructions = [cil.LoadNode(f19_params[0].name, 'bool_abort'), + cil.OutStringNode(f19_params[0].name, self.index), + cil.ExitNode(f19_params[0].name, idx=self.index)] + f19 = FunctionNode("function_abort_Bool",f19_params,f19_localVars,f19_intructions) + + + self.dotcode += [f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11, f12, f13, f14, f15, f16, f17, f18, f19] object_methods = [('abort', f1.name), ('type_name', f2.name), ('copy', f3.name)] - string_methods = [('length', f8.name), ('concat', f9.name), ('substr', f10.name), ('abort', f1.name), ('type_name', f11.name), ('copy', f12.name)] + string_methods = [('length', f8.name), ('concat', f9.name), ('substr', f10.name), ('abort', f17.name), ('type_name', f11.name), ('copy', f12.name)] io_methods = [('out_string', f4.name), ('out_int', f5.name), ('in_int', f6.name), ('in_string', f7.name)] - int_methods = [('abort', f1.name), ('type_name', f13.name), ('copy', f14.name)] - bool_methods = [('abort', f1.name), ('type_name', f15.name), ('copy', f16.name)] + int_methods = [('abort', f18.name), ('type_name', f13.name), ('copy', f14.name)] + bool_methods = [('abort', f19.name), ('type_name', f15.name), ('copy', f16.name)] self.dottypes += [TypeNode("Object", [], object_methods), TypeNode("IO", [], object_methods + io_methods) , diff --git a/src/codegen/visitors/base_mips_visitor.py b/src/codegen/visitors/base_mips_visitor.py index f39eea97..68c91b04 100644 --- a/src/codegen/visitors/base_mips_visitor.py +++ b/src/codegen/visitors/base_mips_visitor.py @@ -18,6 +18,7 @@ def __init__(self, inherit_graph): self.dispatch_table: DispatchTable = DispatchTable() self.obj_table: ObjTable = ObjTable(self.dispatch_table) self.initialize_methods() + self.load_abort_messages() # Will hold the type of any of the vars self.var_address = {'self': AddrType.REF} @@ -55,14 +56,15 @@ def initialize_runtime_errors(self): self.data_code.append('case_error: .asciiz \"Case statement without a matching branch error\n\"' ) self.data_code.append('index_error: .asciiz \"Substring out of range error\n\"') self.data_code.append('heap_error: .asciiz \"Heap overflow error\n\"') # no idea how to check for this - - # def initialize_built_in_types(self): - # self.data_code.append(f"type_String: .asciiz \"String\"") # guarda el nombre de la variable en la memoria - # self.data_code.append(f"type_Int: .asciiz \"Int\"") # guarda el nombre de la variable en la memoria - # self.data_code.append(f"type_Bool: .asciiz \"Bool\"") # guarda el nombre de la variable en la memoria - # self.data_code.append(f"type_Object: .asciiz \"Object\"") # guarda el nombre de la variable en la memoria - # self.data_code.append(f"type_IO: .asciiz \"IO\"") # guarda el nombre de la variable en la memoria - + + + def load_abort_messages(self): + self.data_code.append("abort_msg: .asciiz \"Abort called from class \"") # guarda el nombre de Void Type + self.data_code.append(f"new_line: .asciiz \"\n\"") # guarda el nombre de Void Type + self.data_code.append('string_abort: .asciiz \"Abort called from class String\n\"') + self.data_code.append('int_abort: .asciiz \"Abort called from class Int\n\"') + self.data_code.append('bool_abort: .asciiz \"Abort called from class Bool\n\"') + def get_basic_blocks(self, instructions: List[InstructionNode]): leaders = self.find_leaders(instructions) @@ -413,15 +415,4 @@ def conforms_to(self, rsrc, rdest, type_name): self.code.append(f'false_{loop_idx}:') self.code.append(f'li ${rdest}, 0') self.code.append(f'end_{loop_idx}:') - self.loop_idx += 1 - - def create_new_space(self, obj): - self.code.append("# Loading new space and pushing it to the stack") - label_name = f'{obj}_{self.space_idx}' - self.data_code.append(f'{label_name}: .space 536') - self.get_reg_var(obj) - reg = self.addr_desc.get_var_reg(obj) - self.code.append(f'la ${reg}, {label_name}') - self.code.append(f'sw ${reg}, ($sp)') - self.code.append('addiu $sp, $sp, -4') - self.space_idx += 1 \ No newline at end of file + self.loop_idx += 1 \ No newline at end of file diff --git a/src/codegen/visitors/mips_visitor.py b/src/codegen/visitors/mips_visitor.py index b212b6ff..4ec900be 100644 --- a/src/codegen/visitors/mips_visitor.py +++ b/src/codegen/visitors/mips_visitor.py @@ -40,8 +40,6 @@ def visit(self, node: ProgramNode): for type_ in node.dottypes: self.visit(type_) self.data_code.append(f"type_Void: .asciiz \"Void\"") # guarda el nombre de Void Type - self.data_code.append("abort_msj: .asciiz \"Abort called from class \"") # guarda el nombre de Void Type - self.data_code.append(f"new_line: .asciiz \"\n\"") # guarda el nombre de Void Type # guardo las direcciones de cada tipo self.save_types_addr(node.dottypes) # visit DataNodes @@ -708,11 +706,22 @@ def visit(self, node: ExitNode): reg = 't8' self.code.append(f'li $t8, {node.value}') - 'Abort called from class String' + rself = self.addr_desc.get_var_reg(node.classx) - # self.code.append('li $v0, 1') - # self.code.append('li $a0, 1') - # self.code.append('syscall') + 'Abort called from class String' + if self.var_address[node.classx] == AddrType.REF: + self.code.append('# Printing abort message') + self.code.append('li $v0, 4') + self.code.append(f'la $a0, abort_msg') + self.code.append('syscall') + + self.code.append('li $v0, 4') + self.code.append(f'lw $a0, 0(${rself})') + self.code.append('syscall') + self.code.append('li $v0, 4') + self.code.append(f'la $a0, new_line') + self.code.append('syscall') + self.code.append('li $v0, 17') self.code.append(f'move $a0, ${reg}') self.code.append('syscall') diff --git a/src/cool_parser/output_parser/parselog.txt b/src/cool_parser/output_parser/parselog.txt index 3054c790..b3835fa8 100644 --- a/src/cool_parser/output_parser/parselog.txt +++ b/src/cool_parser/output_parser/parselog.txt @@ -6146,19 +6146,19 @@ yacc.py: 411:State : 32 yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',29,1046) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',29,1046) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',29,1046) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',29,1046) @@ -6183,37 +6183,37 @@ yacc.py: 411:State : 91 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur true . LexToken(ccur,'}',29,1062) yacc.py: 471:Action : Reduce rule [atom -> true] with ['true'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur def_func semi id opar epsilon . LexToken(cpar,')',35,1254) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur def_func semi id opar param_list_empty . LexToken(cpar,')',35,1254) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur def_func semi id opar formals . LexToken(cpar,')',35,1254) @@ -6285,19 +6285,19 @@ yacc.py: 411:State : 113 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar . LexToken(cpar,')',35,1273) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar epsilon . LexToken(cpar,')',35,1273) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar arg_list_empty . LexToken(cpar,')',35,1273) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar args . LexToken(cpar,')',35,1273) @@ -6306,37 +6306,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar args cpar . LexToken(semi,';',35,1274) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['abort','(',[],')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'abort',35,1267), [])) + yacc.py: 506:Result : ((LexToken(id,'abort',35,1267), [])) yacc.py: 410: yacc.py: 411:State : 78 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur func_call . LexToken(semi,';',35,1274) - yacc.py: 471:Action : Reduce rule [factor -> func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar epsilon . LexToken(cpar,')',40,1389) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',40,1389) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals . LexToken(cpar,')',40,1389) @@ -6504,19 +6504,19 @@ yacc.py: 411:State : 113 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar . LexToken(cpar,')',40,1409) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar epsilon . LexToken(cpar,')',40,1409) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar arg_list_empty . LexToken(cpar,')',40,1409) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar args . LexToken(cpar,')',40,1409) @@ -6525,37 +6525,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar args cpar . LexToken(semi,';',40,1410) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['abort','(',[],')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'abort',40,1403), [])) + yacc.py: 506:Result : ((LexToken(id,'abort',40,1403), [])) yacc.py: 410: yacc.py: 411:State : 78 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur func_call . LexToken(semi,';',40,1410) - yacc.py: 471:Action : Reduce rule [factor -> func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['i',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'i',49,1777), LexToken(type ...) + yacc.py: 506:Result : ((LexToken(id,'i',49,1777), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar param . LexToken(cpar,')',49,1784) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',49,1784) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',49,1784) @@ -6734,37 +6734,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',50,1810) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Cons'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( id] with ['i'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['init','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'init',50,1812), [ id opar args cpar] with ['init','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'init',50,1812), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['cons','(',,')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['cons','(',,')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',53,1833) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',53,1833) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','List','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','List','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['car',':','Int'] and goto state 17 - yacc.py: 506:Result : ( ( id colon type] with ['cdr',':','List'] and goto state 17 - yacc.py: 506:Result : ( ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',76,2482) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',76,2482) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',76,2482) @@ -7097,37 +7097,37 @@ yacc.py: 411:State : 92 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur false . LexToken(ccur,'}',76,2499) yacc.py: 471:Action : Reduce rule [atom -> false] with ['false'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',78,2511) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',78,2511) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',78,2511) @@ -7191,37 +7191,37 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',78,2526) yacc.py: 471:Action : Reduce rule [atom -> id] with ['car'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',80,2538) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',80,2538) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',80,2538) @@ -7285,37 +7285,37 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',80,2554) yacc.py: 471:Action : Reduce rule [atom -> id] with ['cdr'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['i',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'i',82,2566), LexToken(type ...) + yacc.py: 506:Result : ((LexToken(id,'i',82,2566), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param . LexToken(comma,',',82,2573) @@ -7375,24 +7375,24 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma id colon type . LexToken(cpar,')',82,2586) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['rest',':','List'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'rest',82,2575), LexToken(t ...) + yacc.py: 506:Result : ((LexToken(id,'rest',82,2575), LexToken(t ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 - yacc.py: 506:Result : ([(LexToken(id,'rest',82,2575), LexToken( ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 + yacc.py: 506:Result : ([(LexToken(id,'rest',82,2575), LexToken( ...) yacc.py: 410: yacc.py: 411:State : 95 yacc.py: 430:Defaulted state 95: Reduce using 33 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param_list . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',82,2586) @@ -7429,42 +7429,42 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur ocur id larrow id . LexToken(semi,';',84,2615) yacc.py: 471:Action : Reduce rule [atom -> id] with ['i'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['car','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['car','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['rest'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['cdr','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['cdr','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['init','(',,')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['init','(',,')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',90,2655) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',90,2655) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Cons','inherits','List','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Cons','inherits','List','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['mylist',':','List'] and goto state 17 - yacc.py: 506:Result : ( ( id colon type] with ['l',':','List'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'l',107,3036), LexToken(typ ...) + yacc.py: 506:Result : ((LexToken(id,'l',107,3036), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param . LexToken(cpar,')',107,3044) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list . LexToken(cpar,')',107,3044) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',107,3044) @@ -7801,12 +7801,12 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if id . LexToken(dot,'.',108,3067) yacc.py: 471:Action : Reduce rule [atom -> id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar epsilon . LexToken(cpar,')',108,3074) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar arg_list_empty . LexToken(cpar,')',108,3074) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar args . LexToken(cpar,')',108,3074) @@ -7844,37 +7844,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar args cpar . LexToken(then,'then',108,3076) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['isNil','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'isNil',108,3068), [])) + yacc.py: 506:Result : ((LexToken(id,'isNil',108,3068), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot func_call . LexToken(then,'then',108,3076) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( string] with ['\n'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',108,3081), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',108,3081), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar epsilon . LexToken(cpar,')',110,3145) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar arg_list_empty . LexToken(cpar,')',110,3145) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar args . LexToken(cpar,')',110,3145) @@ -8043,48 +8043,48 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar args cpar . LexToken(cpar,')',110,3146) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['head','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'head',110,3140), [])) + yacc.py: 506:Result : ((LexToken(id,'head',110,3140), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot func_call . LexToken(cpar,')',110,3146) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_int','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_int',110,3130), [ id opar args cpar] with ['out_int','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_int',110,3130), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( string] with [' '] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',111,3155), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',111,3155), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar epsilon . LexToken(cpar,')',112,3196) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar arg_list_empty . LexToken(cpar,')',112,3196) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar args . LexToken(cpar,')',112,3196) @@ -8288,48 +8288,48 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar args cpar . LexToken(cpar,')',112,3197) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['tail','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'tail',112,3191), [])) + yacc.py: 506:Result : ((LexToken(id,'tail',112,3191), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot func_call . LexToken(cpar,')',112,3197) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['print_list','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'print_list',112,3178), [ id opar args cpar] with ['print_list','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'print_list',112,3178), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print_list','(',,')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print_list','(',,')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',126,3742) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',126,3742) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals . LexToken(cpar,')',126,3742) @@ -8540,12 +8540,12 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow new type . LexToken(dot,'.',128,3783) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','List'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3784), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3784), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3792), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3792), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3800), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3800), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3808), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3808), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3816), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3816), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar epsilon . LexToken(cpar,')',129,3851) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar arg_list_empty . LexToken(cpar,')',129,3851) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar args . LexToken(cpar,')',129,3851) @@ -9023,67 +9023,67 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar args cpar . LexToken(cpar,')',129,3852) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['isNil','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'isNil',129,3845), [])) + yacc.py: 506:Result : ((LexToken(id,'isNil',129,3845), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot func_call . LexToken(cpar,')',129,3852) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 124 - yacc.py: 506:Result : ( comp] with [] and goto state 124 + yacc.py: 506:Result : ( not expr] with ['not',] and goto state 77 - yacc.py: 506:Result : ( not expr] with ['not',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 133 - yacc.py: 506:Result : ( comp] with [] and goto state 133 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['print_list','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'print_list',131,3874), [ id opar args cpar] with ['print_list','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'print_list',131,3874), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar epsilon . LexToken(cpar,')',132,3924) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar arg_list_empty . LexToken(cpar,')',132,3924) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar args . LexToken(cpar,')',132,3924) @@ -9286,42 +9286,42 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar args cpar . LexToken(semi,';',132,3925) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['tail','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'tail',132,3919), [])) + yacc.py: 506:Result : ((LexToken(id,'tail',132,3919), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot func_call . LexToken(semi,';',132,3925) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 204 - yacc.py: 506:Result : ( comp] with [] and goto state 204 + yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 - yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi def_func semi epsilon . LexToken(ccur,'}',138,3957) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi def_func semi feature_list . LexToken(ccur,'}',138,3957) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( (>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e *.egg-info/ .installed.cfg *.egg @@ -334,10 +329,6 @@ pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ -<<<<<<< HEAD -.nox/ -======= ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e .coverage .coverage.* .cache @@ -351,8 +342,6 @@ coverage.xml *.mo *.pot -<<<<<<< HEAD -======= # Django stuff: *.log local_settings.py @@ -362,7 +351,6 @@ db.sqlite3 instance/ .webassets-cache ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e # Scrapy stuff: .scrapy @@ -372,33 +360,18 @@ docs/_build/ # PyBuilder target/ -<<<<<<< HEAD -# pyenv -.python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -======= # Jupyter Notebook .ipynb_checkpoints # pyenv .python-version ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e # celery beat schedule file celerybeat-schedule # SageMath parsed files *.sage.py -<<<<<<< HEAD -======= # Environments .env .venv @@ -408,7 +381,6 @@ ENV/ env.bak/ venv.bak/ ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e # Spyder project settings .spyderproject .spyproject @@ -416,41 +388,8 @@ venv.bak/ # Rope project settings .ropeproject -<<<<<<< HEAD -# Mr Developer -.mr.developer.cfg -.project -.pydevproject - -======= ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e # mkdocs documentation /site # mypy -<<<<<<< HEAD -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -### VisualStudioCode Patch ### -# Ignore all local history of files -.history - -# End of https://www.gitignore.io/api/visualstudiocode,linux,latex,python - -# Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option) - -======= .mypy_cache/ ->>>>>>> 2eefd51c34480eaec5213d7fee27ab7678cde99e diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips new file mode 100644 index 00000000..ed92f6be --- /dev/null +++ b/tests/codegen/arith.mips @@ -0,0 +1,12019 @@ +.text +.globl main +main: +# Save types directions in the types array +la $t9, types +# Save space to locate the type info +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_String +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 0($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Int +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 4($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Object +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 8($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Bool +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 12($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_IO +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 16($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_A +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 20($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_B +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 24($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_C +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 28($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_D +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 32($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_E +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 36($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_A2I +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 40($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Main +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 44($t9) +# Copying parents +lw $v0, 0($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 4($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 8($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 12($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 16($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +lw $v0, 20($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +lw $v0, 24($t9) +lw $t8, 20($t9) +sw $t8, 4($v0) +lw $v0, 28($t9) +lw $t8, 24($t9) +sw $t8, 4($v0) +lw $v0, 32($t9) +lw $t8, 24($t9) +sw $t8, 4($v0) +lw $v0, 36($t9) +lw $t8, 32($t9) +sw $t8, 4($v0) +lw $v0, 40($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +lw $v0, 44($t9) +lw $t8, 16($t9) +sw $t8, 4($v0) +# Save method directions in the methods array +la $v0, methods +la $t9, entry +sw $t9, 0($v0) +la $t9, function_abort_Object +sw $t9, 4($v0) +la $t9, function_type_name_Object +sw $t9, 8($v0) +la $t9, function_copy_Object +sw $t9, 12($v0) +la $t9, function_out_string_IO +sw $t9, 16($v0) +la $t9, function_out_int_IO +sw $t9, 20($v0) +la $t9, function_in_int_IO +sw $t9, 24($v0) +la $t9, function_in_string_IO +sw $t9, 28($v0) +la $t9, function_length_String +sw $t9, 32($v0) +la $t9, function_concat_String +sw $t9, 36($v0) +la $t9, function_substr_String +sw $t9, 40($v0) +la $t9, function_type_name_String +sw $t9, 44($v0) +la $t9, function_copy_String +sw $t9, 48($v0) +la $t9, function_type_name_Int +sw $t9, 52($v0) +la $t9, function_copy_Int +sw $t9, 56($v0) +la $t9, function_type_name_Bool +sw $t9, 60($v0) +la $t9, function_copy_Bool +sw $t9, 64($v0) +la $t9, function_abort_String +sw $t9, 68($v0) +la $t9, function_abort_Int +sw $t9, 72($v0) +la $t9, function_abort_Bool +sw $t9, 76($v0) +la $t9, function_A_A +sw $t9, 80($v0) +la $t9, function_value_A +sw $t9, 84($v0) +la $t9, function_set_var_A +sw $t9, 88($v0) +la $t9, function_method1_A +sw $t9, 92($v0) +la $t9, function_method2_A +sw $t9, 96($v0) +la $t9, function_method3_A +sw $t9, 100($v0) +la $t9, function_method4_A +sw $t9, 104($v0) +la $t9, function_method5_A +sw $t9, 108($v0) +la $t9, function_B_B +sw $t9, 112($v0) +la $t9, function_method5_B +sw $t9, 116($v0) +la $t9, function_C_C +sw $t9, 120($v0) +la $t9, function_method6_C +sw $t9, 124($v0) +la $t9, function_method5_C +sw $t9, 128($v0) +la $t9, function_D_D +sw $t9, 132($v0) +la $t9, function_method7_D +sw $t9, 136($v0) +la $t9, function_E_E +sw $t9, 140($v0) +la $t9, function_method6_E +sw $t9, 144($v0) +la $t9, function_c2i_A2I +sw $t9, 148($v0) +la $t9, function_i2c_A2I +sw $t9, 152($v0) +la $t9, function_a2i_A2I +sw $t9, 156($v0) +la $t9, function_a2i_aux_A2I +sw $t9, 160($v0) +la $t9, function_i2a_A2I +sw $t9, 164($v0) +la $t9, function_i2a_aux_A2I +sw $t9, 168($v0) +la $t9, function_Main_Main +sw $t9, 172($v0) +la $t9, function_menu_Main +sw $t9, 176($v0) +la $t9, function_prompt_Main +sw $t9, 180($v0) +la $t9, function_get_int_Main +sw $t9, 184($v0) +la $t9, function_is_even_Main +sw $t9, 188($v0) +la $t9, function_class_type_Main +sw $t9, 192($v0) +la $t9, function_print_Main +sw $t9, 196($v0) +la $t9, function_main_Main +sw $t9, 200($v0) + +entry: +# Gets the params from the stack +move $fp, $sp +# Gets the frame pointer from the stack +# Updates stack pointer pushing local__internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local__internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 28 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Main +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 28 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 64 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_menu_Main in t9 +lw $t9, 176($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_prompt_Main in t9 +lw $t9, 180($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_get_int_Main in t9 +lw $t9, 184($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_is_even_Main in t9 +lw $t9, 188($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_class_type_Main in t9 +lw $t9, 192($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_print_Main in t9 +lw $t9, 196($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_main_Main in t9 +lw $t9, 200($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +# Save the direction of the method function_Main_Main in t9 +lw $t9, 172($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 60($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 44($t8) +sw $v0, 12($t0) +# Static Dispatch of the method Main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +# This function will consume the arguments +jal function_Main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# Static Dispatch of the method main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +li $v0, 0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Object_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_abort_Object_self_0 +move $t1, $t0 +sw $t1, -4($fp) +# Exiting the program +li $t8, 0 +# Printing abort message +li $v0, 4 +la $a0, abort_msg +syscall +li $v0, 4 +lw $a0, 0($t0) +syscall +li $v0, 4 +la $a0, new_line +syscall +li $v0, 17 +move $a0, $t8 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_type_name_Object_result_0 <- Type of self +lw $t1, 0($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +lw $t9, 4($t0) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +move $a0, $t9 +syscall +move $t1, $v0 +# Loop to copy every field of the previous object +# t8 the register to loop +li $t8, 0 +loop_0: +# In t9 is stored the size of the object +bge $t8, $t9, exit_0 +lw $a0, ($t0) +sw $a0, ($v0) +addi $v0, $v0, 4 +addi $t0, $t0, 4 +# Increase loop counter +addi $t8, $t8, 4 +j loop_0 +exit_0: +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_out_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_string_String_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_string_String_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing a string +li $v0, 4 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_out_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value number +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_int_IO_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_int_IO_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing an int +li $v0, 1 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_in_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_int_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Reading a int +li $v0, 5 +syscall +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_in_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_string_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t0, $v0 +# Reading a string +# Putting buffer in a0 +move $a0, $t0 +# Putting length of string in a1 +li $a1, 356 +li $v0, 8 +syscall +# Walks to eliminate the newline +move $t9, $t0 +start_1: +lb $t8, 0($t9) +beqz $t8, end_1 +add $t9, $t9, 1 +j start_1 +end_1: +addiu $t9, $t9, -1 +sb $0, ($t9) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_length_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_length_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +move $t8, $t0 +# Determining the length of a string +loop_2: +lb $t9, 0($t8) +beq $t9, $zero, end_2 +addi $t8, $t8, 1 +j loop_2 +end_2: +sub $t1, $t8, $t0 +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_concat_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_concat_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -8($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +# Copy the first string to dest +move $a0, $t0 +move $a1, $t2 +sw $ra, ($sp) +addiu $sp, $sp, -4 +jal strcopier +# Concatenate second string on result buffer +move $a0, $t1 +move $a1, $v0 +jal strcopier +sb $0, 0($v0) +addiu $sp, $sp, 4 +lw $ra, ($sp) +j finish_3 +# Definition of strcopier +strcopier: +# In a0 is the source and in a1 is the destination +loop_3: +lb $t8, ($a0) +beq $t8, $zero, end_3 +addiu $a0, $a0, 1 +sb $t8, ($a1) +addiu $a1, $a1, 1 +b loop_3 +end_3: +move $v0, $a1 +jr $ra +finish_3: +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_substr_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value begin +addiu $fp, $fp, 4 +# Pops the register with the param value end +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_substr_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -12($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +lw $t3, -8($fp) +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t3 +start_4: +lb $t9, 0($t8) +beqz $t9, error_4 +addi $v0, 1 +bgt $v0, $t0, end_len_4 +addi $t8, 1 +j start_4 +end_len_4: +# Saving dest to iterate over him +move $v0, $t2 +loop_4: +sub $t9, $v0, $t2 +beq $t9, $t1, end_4 +lb $t9, 0($t8) +beqz $t9, error_4 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_4 +error_4: +la $a0, index_error +li $v0, 4 +move $a0, $t3 +syscall +li $v0, 1 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t1 +syscall +j .raise +end_4: +sb $0, 0($v0) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_String_result_0 type_String +la $t0, type_String +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_String_result_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +move $t8, $t0 +# Determining the length of a string +loop_5: +lb $t9, 0($t8) +beq $t9, $zero, end_5 +addi $t8, $t8, 1 +j loop_5 +end_5: +sub $t1, $t8, $t0 +lw $t2, -12($fp) +# local_copy_String_result_2 <- local_copy_String_result_1 - 1 +addi $t2, $t1, -1 +lw $t3, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t3, $v0 +li $t8, 0 +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t0 +start_6: +lb $t9, 0($t8) +beqz $t9, error_6 +addi $v0, 1 +bgt $v0, $t8, end_len_6 +addi $t8, 1 +j start_6 +end_len_6: +# Saving dest to iterate over him +move $v0, $t3 +loop_6: +sub $t9, $v0, $t3 +beq $t9, $t2, end_6 +lb $t9, 0($t8) +beqz $t9, error_6 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_6 +error_6: +la $a0, index_error +li $v0, 4 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t8 +syscall +li $v0, 1 +move $a0, $t2 +syscall +j .raise +end_6: +sb $0, 0($v0) +move $v0, $t3 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +sw $t3, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Int_result_0 type_Int +la $t0, type_Int +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_Int_result_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Bool_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Bool_result_0 type_Bool +la $t0, type_Bool +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_result_Bool_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_result_Bool_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_String_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self string_abort +la $t0, string_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Int_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self int_abort +la $t0, int_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Bool_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self bool_abort +la $t0, bool_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_A_A: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_A_A_internal_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# self . var <- SET 0 +li $t9, 0 +sw $t9, 16($t0) +lw $t1, -4($fp) +# Moving self to local_A_A_internal_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_value_A: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_value_A_var_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_value_A_var_0 <- GET self . var +lw $t1, 16($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_set_var_A: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value num +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_set_var_A_internal_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# self . var <- SET num +sw $t0, 16($t1) +lw $t2, -8($fp) +# Moving self to local_set_var_A_internal_0 +move $t2, $t1 +sw $t2, -8($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_method1_A: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value num +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +lw $t0, -4($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_method2_A: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value num1 +addiu $fp, $fp, 4 +# Pops the register with the param value num2 +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_method2_A_x_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method2_A_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method2_A_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method2_A_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method2_A_internal_4 to the stack +addiu $sp, $sp, -4 +lw $t0, -12($fp) +# Moving 0 to local_method2_A_x_0 +li $t0, 0 +sw $t0, -12($fp) +lw $t1, -4($fp) +lw $t2, -0($fp) +lw $t3, -16($fp) +# local_method2_A_internal_1 <- num1 + num2 +add $t3, $t1, $t2 +# Moving local_method2_A_internal_1 to local_method2_A_x_0 +move $t0, $t3 +sw $t0, -12($fp) +lw $t4, -20($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_B +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t4, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 52 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_value_A in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_set_var_A in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_method1_A in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_method2_A in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_method3_A in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_method4_A in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_method5_B in t9 +lw $t9, 116($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_A_A in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_B_B in t9 +lw $t9, 112($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +sw $v0, 8($t4) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t4) +# Static Dispatch of the method B +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t4, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $t1, -4($fp) +sw $t2, -0($fp) +sw $t3, -16($fp) +sw $t4, -20($fp) +# This function will consume the arguments +jal function_B_B +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_set_var_A +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -12($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -24($fp) +sw $t2, -12($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -24($fp) +# saves the return value +move $t0, $v0 +lw $t1, -28($fp) +# Moving local_method2_A_internal_3 to local_method2_A_internal_4 +move $t1, $t0 +sw $t1, -28($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -24($fp) +sw $t1, -28($fp) +# Removing all locals from stack +addiu $sp, $sp, 32 +jr $ra + + +function_method3_A: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value num +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_method3_A_x_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method3_A_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method3_A_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method3_A_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method3_A_internal_4 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +# Moving 0 to local_method3_A_x_0 +li $t0, 0 +sw $t0, -8($fp) +lw $t1, -0($fp) +lw $t2, -12($fp) +# local_method3_A_internal_1 <- ~num +not $t2, $t1 +addi $t2, $t2, 1 +# Moving local_method3_A_internal_1 to local_method3_A_x_0 +move $t0, $t2 +sw $t0, -8($fp) +lw $t3, -16($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_C +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t3, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 60 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_value_A in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_set_var_A in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_method1_A in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_method2_A in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_method3_A in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_method4_A in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_method5_C in t9 +lw $t9, 128($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_A_A in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_B_B in t9 +lw $t9, 112($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_method6_C in t9 +lw $t9, 124($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_C_C in t9 +lw $t9, 120($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +sw $v0, 8($t3) +# Adding Type Info addr +la $t8, types +lw $v0, 28($t8) +sw $v0, 12($t3) +# Static Dispatch of the method C +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -16($fp) +# This function will consume the arguments +jal function_C_C +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_set_var_A +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -8($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -20($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# Moving local_method3_A_internal_3 to local_method3_A_internal_4 +move $t1, $t0 +sw $t1, -24($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -24($fp) +# Removing all locals from stack +addiu $sp, $sp, 28 +jr $ra + + +function_method4_A: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value num1 +addiu $fp, $fp, 4 +# Pops the register with the param value num2 +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_method4_A_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method4_A_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method4_A_x_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method4_A_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method4_A_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method4_A_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method4_A_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method4_A_x_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method4_A_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method4_A_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method4_A_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method4_A_internal_11 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +lw $t2, -12($fp) +# local_method4_A_internal_0 <- num2 < num1 +slt $t2, $t0, $t1 +# If local_method4_A_internal_0 goto true__112 +sw $t0, -0($fp) +sw $t1, -4($fp) +sw $t2, -12($fp) +bnez $t2, true__112 +lw $t0, -20($fp) +# Moving 0 to local_method4_A_x_2 +li $t0, 0 +sw $t0, -20($fp) +lw $t1, -0($fp) +lw $t2, -4($fp) +lw $t3, -24($fp) +# local_method4_A_internal_3 <- num2 - num1 +sub $t3, $t1, $t2 +# Moving local_method4_A_internal_3 to local_method4_A_x_2 +move $t0, $t3 +sw $t0, -20($fp) +lw $t4, -28($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_D +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t4, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 60 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_value_A in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_set_var_A in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_method1_A in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_method2_A in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_method3_A in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_method4_A in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_method5_B in t9 +lw $t9, 116($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_A_A in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_B_B in t9 +lw $t9, 112($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_method7_D in t9 +lw $t9, 136($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_D_D in t9 +lw $t9, 132($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +sw $v0, 8($t4) +# Adding Type Info addr +la $t8, types +lw $v0, 32($t8) +sw $v0, 12($t4) +# Static Dispatch of the method D +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t4, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -0($fp) +sw $t2, -4($fp) +sw $t3, -24($fp) +sw $t4, -28($fp) +# This function will consume the arguments +jal function_D_D +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -28($fp) +# saves the return value +move $t0, $v0 +lw $t1, -32($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_set_var_A +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -20($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -28($fp) +sw $t1, -32($fp) +sw $t2, -20($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -32($fp) +# saves the return value +move $t0, $v0 +lw $t1, -36($fp) +# Moving local_method4_A_internal_5 to local_method4_A_internal_6 +move $t1, $t0 +sw $t1, -36($fp) +lw $t2, -16($fp) +# Moving local_method4_A_internal_6 to local_method4_A_internal_1 +move $t2, $t1 +sw $t2, -16($fp) +sw $t0, -32($fp) +sw $t1, -36($fp) +sw $t2, -16($fp) +j end__112 +true__112: +lw $t0, -40($fp) +# Moving 0 to local_method4_A_x_7 +li $t0, 0 +sw $t0, -40($fp) +lw $t1, -4($fp) +lw $t2, -0($fp) +lw $t3, -44($fp) +# local_method4_A_internal_8 <- num1 - num2 +sub $t3, $t1, $t2 +# Moving local_method4_A_internal_8 to local_method4_A_x_7 +move $t0, $t3 +sw $t0, -40($fp) +lw $t4, -48($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_D +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t4, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 60 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_value_A in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_set_var_A in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_method1_A in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_method2_A in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_method3_A in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_method4_A in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_method5_B in t9 +lw $t9, 116($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_A_A in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_B_B in t9 +lw $t9, 112($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_method7_D in t9 +lw $t9, 136($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_D_D in t9 +lw $t9, 132($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +sw $v0, 8($t4) +# Adding Type Info addr +la $t8, types +lw $v0, 32($t8) +sw $v0, 12($t4) +# Static Dispatch of the method D +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t4, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -40($fp) +sw $t1, -4($fp) +sw $t2, -0($fp) +sw $t3, -44($fp) +sw $t4, -48($fp) +# This function will consume the arguments +jal function_D_D +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -48($fp) +# saves the return value +move $t0, $v0 +lw $t1, -52($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_set_var_A +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -40($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -48($fp) +sw $t1, -52($fp) +sw $t2, -40($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -52($fp) +# saves the return value +move $t0, $v0 +lw $t1, -56($fp) +# Moving local_method4_A_internal_10 to local_method4_A_internal_11 +move $t1, $t0 +sw $t1, -56($fp) +lw $t2, -16($fp) +# Moving local_method4_A_internal_11 to local_method4_A_internal_1 +move $t2, $t1 +sw $t2, -16($fp) +sw $t0, -52($fp) +sw $t1, -56($fp) +sw $t2, -16($fp) +end__112: +lw $t0, -16($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +# Removing all locals from stack +addiu $sp, $sp, 60 +jr $ra + + +function_method5_A: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value num +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_method5_A_x_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method5_A_y_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method5_A_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method5_A_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method5_A_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method5_A_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method5_A_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method5_A_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method5_A_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method5_A_internal_9 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +# Moving 1 to local_method5_A_x_0 +li $t0, 1 +sw $t0, -8($fp) +lw $t1, -12($fp) +# Moving 1 to local_method5_A_y_1 +li $t1, 1 +sw $t1, -12($fp) +lw $t2, -16($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t2, $v0 +sw $t0, -8($fp) +sw $t1, -12($fp) +sw $t2, -16($fp) +start__155: +lw $t0, -12($fp) +lw $t1, -0($fp) +lw $t2, -20($fp) +# local_method5_A_internal_3 <- local_method5_A_y_1 <= num +sle $t2, $t0, $t1 +# If not local_method5_A_internal_3 goto end__155 +sw $t0, -12($fp) +sw $t1, -0($fp) +sw $t2, -20($fp) +beqz $t2, end__155 +lw $t0, -8($fp) +lw $t1, -12($fp) +lw $t2, -24($fp) +# local_method5_A_internal_4 <- local_method5_A_x_0 * local_method5_A_y_1 +mult $t0, $t1 +mflo $t2 +# Moving local_method5_A_internal_4 to local_method5_A_x_0 +move $t0, $t2 +sw $t0, -8($fp) +lw $t3, -28($fp) +# local_method5_A_internal_5 <- local_method5_A_y_1 + 1 +addi $t3, $t1, 1 +# Moving local_method5_A_internal_5 to local_method5_A_y_1 +move $t1, $t3 +sw $t1, -12($fp) +lw $t4, -32($fp) +# Moving local_method5_A_internal_5 to local_method5_A_internal_6 +move $t4, $t3 +sw $t4, -32($fp) +lw $t5, -16($fp) +# Moving local_method5_A_internal_6 to local_method5_A_internal_2 +move $t5, $t4 +sw $t5, -16($fp) +sw $t0, -8($fp) +sw $t1, -12($fp) +sw $t2, -24($fp) +sw $t3, -28($fp) +sw $t4, -32($fp) +sw $t5, -16($fp) +j start__155 +end__155: +lw $t0, -36($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_E +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 68 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_value_A in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_set_var_A in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_method1_A in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_method2_A in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_method3_A in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_method4_A in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_method5_B in t9 +lw $t9, 116($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_A_A in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_B_B in t9 +lw $t9, 112($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_method7_D in t9 +lw $t9, 136($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_D_D in t9 +lw $t9, 132($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +# Save the direction of the method function_method6_E in t9 +lw $t9, 144($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 60($v0) +# Save the direction of the method function_E_E in t9 +lw $t9, 140($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 64($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 36($t8) +sw $v0, 12($t0) +# Static Dispatch of the method E +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -36($fp) +# This function will consume the arguments +jal function_E_E +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -36($fp) +# saves the return value +move $t0, $v0 +lw $t1, -40($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_set_var_A +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -8($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -36($fp) +sw $t1, -40($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +lw $t1, -44($fp) +# Moving local_method5_A_internal_8 to local_method5_A_internal_9 +move $t1, $t0 +sw $t1, -44($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -40($fp) +sw $t1, -44($fp) +# Removing all locals from stack +addiu $sp, $sp, 48 +jr $ra + + +function_B_B: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_B_B_internal_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# self . var <- SET 0 +li $t9, 0 +sw $t9, 16($t0) +lw $t1, -4($fp) +# Moving self to local_B_B_internal_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_method5_B: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value num +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_method5_B_x_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method5_B_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method5_B_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method5_B_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method5_B_internal_4 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +# Moving 0 to local_method5_B_x_0 +li $t0, 0 +sw $t0, -8($fp) +lw $t1, -0($fp) +lw $t2, -12($fp) +# local_method5_B_internal_1 <- num * num +mult $t1, $t1 +mflo $t2 +# Moving local_method5_B_internal_1 to local_method5_B_x_0 +move $t0, $t2 +sw $t0, -8($fp) +lw $t3, -16($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_E +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t3, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 68 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_value_A in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_set_var_A in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_method1_A in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_method2_A in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_method3_A in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_method4_A in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_method5_B in t9 +lw $t9, 116($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_A_A in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_B_B in t9 +lw $t9, 112($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_method7_D in t9 +lw $t9, 136($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_D_D in t9 +lw $t9, 132($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +# Save the direction of the method function_method6_E in t9 +lw $t9, 144($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 60($v0) +# Save the direction of the method function_E_E in t9 +lw $t9, 140($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 64($v0) +sw $v0, 8($t3) +# Adding Type Info addr +la $t8, types +lw $v0, 36($t8) +sw $v0, 12($t3) +# Static Dispatch of the method E +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -16($fp) +# This function will consume the arguments +jal function_E_E +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_set_var_A +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -8($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -20($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# Moving local_method5_B_internal_3 to local_method5_B_internal_4 +move $t1, $t0 +sw $t1, -24($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -24($fp) +# Removing all locals from stack +addiu $sp, $sp, 28 +jr $ra + + +function_C_C: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_C_C_internal_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# self . var <- SET 0 +li $t9, 0 +sw $t9, 16($t0) +lw $t1, -4($fp) +# Moving self to local_C_C_internal_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_method6_C: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value num +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_method6_C_x_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method6_C_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method6_C_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method6_C_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method6_C_internal_4 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +# Moving 0 to local_method6_C_x_0 +li $t0, 0 +sw $t0, -8($fp) +lw $t1, -0($fp) +lw $t2, -12($fp) +# local_method6_C_internal_1 <- ~num +not $t2, $t1 +addi $t2, $t2, 1 +# Moving local_method6_C_internal_1 to local_method6_C_x_0 +move $t0, $t2 +sw $t0, -8($fp) +lw $t3, -16($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_A +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t3, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 48 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_value_A in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_set_var_A in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_method1_A in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_method2_A in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_method3_A in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_method4_A in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_method5_A in t9 +lw $t9, 108($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_A_A in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +sw $v0, 8($t3) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t3) +# Static Dispatch of the method A +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -16($fp) +# This function will consume the arguments +jal function_A_A +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_set_var_A +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -8($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -20($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# Moving local_method6_C_internal_3 to local_method6_C_internal_4 +move $t1, $t0 +sw $t1, -24($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -24($fp) +# Removing all locals from stack +addiu $sp, $sp, 28 +jr $ra + + +function_method5_C: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value num +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_method5_C_x_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method5_C_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method5_C_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method5_C_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method5_C_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method5_C_internal_5 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +# Moving 0 to local_method5_C_x_0 +li $t0, 0 +sw $t0, -8($fp) +lw $t1, -0($fp) +lw $t2, -16($fp) +# local_method5_C_internal_2 <- num * num +mult $t1, $t1 +mflo $t2 +lw $t3, -12($fp) +# local_method5_C_internal_1 <- local_method5_C_internal_2 * num +mult $t2, $t1 +mflo $t3 +# Moving local_method5_C_internal_1 to local_method5_C_x_0 +move $t0, $t3 +sw $t0, -8($fp) +lw $t4, -20($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_E +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t4, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 68 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_value_A in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_set_var_A in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_method1_A in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_method2_A in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_method3_A in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_method4_A in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_method5_B in t9 +lw $t9, 116($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_A_A in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_B_B in t9 +lw $t9, 112($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_method7_D in t9 +lw $t9, 136($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_D_D in t9 +lw $t9, 132($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +# Save the direction of the method function_method6_E in t9 +lw $t9, 144($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 60($v0) +# Save the direction of the method function_E_E in t9 +lw $t9, 140($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 64($v0) +sw $v0, 8($t4) +# Adding Type Info addr +la $t8, types +lw $v0, 36($t8) +sw $v0, 12($t4) +# Static Dispatch of the method E +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t4, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -0($fp) +sw $t2, -16($fp) +sw $t3, -12($fp) +sw $t4, -20($fp) +# This function will consume the arguments +jal function_E_E +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_set_var_A +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -8($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -24($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -24($fp) +# saves the return value +move $t0, $v0 +lw $t1, -28($fp) +# Moving local_method5_C_internal_4 to local_method5_C_internal_5 +move $t1, $t0 +sw $t1, -28($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -24($fp) +sw $t1, -28($fp) +# Removing all locals from stack +addiu $sp, $sp, 32 +jr $ra + + +function_D_D: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_D_D_internal_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# self . var <- SET 0 +li $t9, 0 +sw $t9, 16($t0) +lw $t1, -4($fp) +# Moving self to local_D_D_internal_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_method7_D: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value num +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_method7_D_x_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method7_D_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method7_D_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method7_D_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method7_D_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method7_D_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method7_D_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method7_D_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method7_D_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method7_D_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method7_D_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method7_D_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method7_D_internal_12 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +# Moving num to local_method7_D_x_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -12($fp) +# local_method7_D_internal_1 <- local_method7_D_x_0 < 0 +li $t9, 0 +slt $t2, $t1, $t9 +# If local_method7_D_internal_1 goto true__263 +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +bnez $t2, true__263 +lw $t0, -8($fp) +lw $t1, -20($fp) +# local_method7_D_internal_3 <- 0 = local_method7_D_x_0 +li $t9, 0 +seq $t1, $t9, $t0 +# If local_method7_D_internal_3 goto true__267 +sw $t0, -8($fp) +sw $t1, -20($fp) +bnez $t1, true__267 +lw $t0, -8($fp) +lw $t1, -28($fp) +# local_method7_D_internal_5 <- 1 = local_method7_D_x_0 +li $t9, 1 +seq $t1, $t9, $t0 +# If local_method7_D_internal_5 goto true__271 +sw $t0, -8($fp) +sw $t1, -28($fp) +bnez $t1, true__271 +lw $t0, -8($fp) +lw $t1, -36($fp) +# local_method7_D_internal_7 <- 2 = local_method7_D_x_0 +li $t9, 2 +seq $t1, $t9, $t0 +# If local_method7_D_internal_7 goto true__275 +sw $t0, -8($fp) +sw $t1, -36($fp) +bnez $t1, true__275 +lw $t0, -8($fp) +lw $t1, -44($fp) +# local_method7_D_internal_9 <- local_method7_D_x_0 - 3 +addi $t1, $t0, -3 +lw $t2, -4($fp) +lw $t3, -48($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_method7_D +lw $t8, 52($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -44($fp) +sw $t2, -4($fp) +sw $t3, -48($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -48($fp) +# saves the return value +move $t0, $v0 +lw $t1, -40($fp) +# Moving local_method7_D_internal_10 to local_method7_D_internal_8 +move $t1, $t0 +sw $t1, -40($fp) +sw $t0, -48($fp) +sw $t1, -40($fp) +j end__275 +true__275: +lw $t0, -40($fp) +# Moving 0 to local_method7_D_internal_8 +li $t0, 0 +sw $t0, -40($fp) +sw $t0, -40($fp) +end__275: +lw $t0, -40($fp) +lw $t1, -32($fp) +# Moving local_method7_D_internal_8 to local_method7_D_internal_6 +move $t1, $t0 +sw $t1, -32($fp) +sw $t0, -40($fp) +sw $t1, -32($fp) +j end__271 +true__271: +lw $t0, -32($fp) +# Moving 0 to local_method7_D_internal_6 +li $t0, 0 +sw $t0, -32($fp) +sw $t0, -32($fp) +end__271: +lw $t0, -32($fp) +lw $t1, -24($fp) +# Moving local_method7_D_internal_6 to local_method7_D_internal_4 +move $t1, $t0 +sw $t1, -24($fp) +sw $t0, -32($fp) +sw $t1, -24($fp) +j end__267 +true__267: +lw $t0, -24($fp) +# Moving 1 to local_method7_D_internal_4 +li $t0, 1 +sw $t0, -24($fp) +sw $t0, -24($fp) +end__267: +lw $t0, -24($fp) +lw $t1, -16($fp) +# Moving local_method7_D_internal_4 to local_method7_D_internal_2 +move $t1, $t0 +sw $t1, -16($fp) +sw $t0, -24($fp) +sw $t1, -16($fp) +j end__263 +true__263: +lw $t0, -8($fp) +lw $t1, -52($fp) +# local_method7_D_internal_11 <- ~local_method7_D_x_0 +not $t1, $t0 +addi $t1, $t1, 1 +lw $t2, -4($fp) +lw $t3, -56($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_method7_D +lw $t8, 52($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -52($fp) +sw $t2, -4($fp) +sw $t3, -56($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -56($fp) +# saves the return value +move $t0, $v0 +lw $t1, -16($fp) +# Moving local_method7_D_internal_12 to local_method7_D_internal_2 +move $t1, $t0 +sw $t1, -16($fp) +sw $t0, -56($fp) +sw $t1, -16($fp) +end__263: +lw $t0, -16($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +# Removing all locals from stack +addiu $sp, $sp, 60 +jr $ra + + +function_E_E: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_E_E_internal_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# self . var <- SET 0 +li $t9, 0 +sw $t9, 16($t0) +lw $t1, -4($fp) +# Moving self to local_E_E_internal_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_method6_E: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value num +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_method6_E_x_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method6_E_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method6_E_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method6_E_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_method6_E_internal_4 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +# Moving 0 to local_method6_E_x_0 +li $t0, 0 +sw $t0, -8($fp) +lw $t1, -0($fp) +lw $t2, -12($fp) +# local_method6_E_internal_1 <- num / 8 +li $t9, 8 +la $a0, zero_error +beqz $t9, .raise +div $t1, $t9 +mflo $t2 +# Moving local_method6_E_internal_1 to local_method6_E_x_0 +move $t0, $t2 +sw $t0, -8($fp) +lw $t3, -16($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_A +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t3, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 48 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_value_A in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_set_var_A in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_method1_A in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_method2_A in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_method3_A in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_method4_A in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_method5_A in t9 +lw $t9, 108($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_A_A in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +sw $v0, 8($t3) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t3) +# Static Dispatch of the method A +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -16($fp) +# This function will consume the arguments +jal function_A_A +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_set_var_A +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -8($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -20($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# Moving local_method6_E_internal_3 to local_method6_E_internal_4 +move $t1, $t0 +sw $t1, -24($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -24($fp) +# Removing all locals from stack +addiu $sp, $sp, 28 +jr $ra + + +function_c2i_A2I: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value char +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_c2i_A2I_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_15 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_16 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_17 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_18 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_19 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_20 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_21 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_22 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_23 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_24 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_25 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_26 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_27 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_28 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_29 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_30 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_31 to the stack +addiu $sp, $sp, -4 +lw $t0, -12($fp) +# Saves in local_c2i_A2I_internal_1 data_1 +la $t0, data_1 +lw $t1, -0($fp) +lw $t2, -8($fp) +# local_c2i_A2I_internal_0 <- char = local_c2i_A2I_internal_1 +move $t8, $t1 +move $t9, $t0 +loop_7: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_7 +beqz $a1, mismatch_7 +seq $v0, $a0, $a1 +beqz $v0, mismatch_7 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_7 +mismatch_7: +li $v0, 0 +j end_7 +check_7: +bnez $a1, mismatch_7 +li $v0, 1 +end_7: +move $t2, $v0 +# If local_c2i_A2I_internal_0 goto true__340 +sw $t0, -12($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +bnez $t2, true__340 +lw $t0, -24($fp) +# Saves in local_c2i_A2I_internal_4 data_2 +la $t0, data_2 +lw $t1, -0($fp) +lw $t2, -20($fp) +# local_c2i_A2I_internal_3 <- char = local_c2i_A2I_internal_4 +move $t8, $t1 +move $t9, $t0 +loop_8: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_8 +beqz $a1, mismatch_8 +seq $v0, $a0, $a1 +beqz $v0, mismatch_8 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_8 +mismatch_8: +li $v0, 0 +j end_8 +check_8: +bnez $a1, mismatch_8 +li $v0, 1 +end_8: +move $t2, $v0 +# If local_c2i_A2I_internal_3 goto true__347 +sw $t0, -24($fp) +sw $t1, -0($fp) +sw $t2, -20($fp) +bnez $t2, true__347 +lw $t0, -36($fp) +# Saves in local_c2i_A2I_internal_7 data_3 +la $t0, data_3 +lw $t1, -0($fp) +lw $t2, -32($fp) +# local_c2i_A2I_internal_6 <- char = local_c2i_A2I_internal_7 +move $t8, $t1 +move $t9, $t0 +loop_9: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_9 +beqz $a1, mismatch_9 +seq $v0, $a0, $a1 +beqz $v0, mismatch_9 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_9 +mismatch_9: +li $v0, 0 +j end_9 +check_9: +bnez $a1, mismatch_9 +li $v0, 1 +end_9: +move $t2, $v0 +# If local_c2i_A2I_internal_6 goto true__354 +sw $t0, -36($fp) +sw $t1, -0($fp) +sw $t2, -32($fp) +bnez $t2, true__354 +lw $t0, -48($fp) +# Saves in local_c2i_A2I_internal_10 data_4 +la $t0, data_4 +lw $t1, -0($fp) +lw $t2, -44($fp) +# local_c2i_A2I_internal_9 <- char = local_c2i_A2I_internal_10 +move $t8, $t1 +move $t9, $t0 +loop_10: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_10 +beqz $a1, mismatch_10 +seq $v0, $a0, $a1 +beqz $v0, mismatch_10 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_10 +mismatch_10: +li $v0, 0 +j end_10 +check_10: +bnez $a1, mismatch_10 +li $v0, 1 +end_10: +move $t2, $v0 +# If local_c2i_A2I_internal_9 goto true__361 +sw $t0, -48($fp) +sw $t1, -0($fp) +sw $t2, -44($fp) +bnez $t2, true__361 +lw $t0, -60($fp) +# Saves in local_c2i_A2I_internal_13 data_5 +la $t0, data_5 +lw $t1, -0($fp) +lw $t2, -56($fp) +# local_c2i_A2I_internal_12 <- char = local_c2i_A2I_internal_13 +move $t8, $t1 +move $t9, $t0 +loop_11: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_11 +beqz $a1, mismatch_11 +seq $v0, $a0, $a1 +beqz $v0, mismatch_11 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_11 +mismatch_11: +li $v0, 0 +j end_11 +check_11: +bnez $a1, mismatch_11 +li $v0, 1 +end_11: +move $t2, $v0 +# If local_c2i_A2I_internal_12 goto true__368 +sw $t0, -60($fp) +sw $t1, -0($fp) +sw $t2, -56($fp) +bnez $t2, true__368 +lw $t0, -72($fp) +# Saves in local_c2i_A2I_internal_16 data_6 +la $t0, data_6 +lw $t1, -0($fp) +lw $t2, -68($fp) +# local_c2i_A2I_internal_15 <- char = local_c2i_A2I_internal_16 +move $t8, $t1 +move $t9, $t0 +loop_12: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_12 +beqz $a1, mismatch_12 +seq $v0, $a0, $a1 +beqz $v0, mismatch_12 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_12 +mismatch_12: +li $v0, 0 +j end_12 +check_12: +bnez $a1, mismatch_12 +li $v0, 1 +end_12: +move $t2, $v0 +# If local_c2i_A2I_internal_15 goto true__375 +sw $t0, -72($fp) +sw $t1, -0($fp) +sw $t2, -68($fp) +bnez $t2, true__375 +lw $t0, -84($fp) +# Saves in local_c2i_A2I_internal_19 data_7 +la $t0, data_7 +lw $t1, -0($fp) +lw $t2, -80($fp) +# local_c2i_A2I_internal_18 <- char = local_c2i_A2I_internal_19 +move $t8, $t1 +move $t9, $t0 +loop_13: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_13 +beqz $a1, mismatch_13 +seq $v0, $a0, $a1 +beqz $v0, mismatch_13 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_13 +mismatch_13: +li $v0, 0 +j end_13 +check_13: +bnez $a1, mismatch_13 +li $v0, 1 +end_13: +move $t2, $v0 +# If local_c2i_A2I_internal_18 goto true__382 +sw $t0, -84($fp) +sw $t1, -0($fp) +sw $t2, -80($fp) +bnez $t2, true__382 +lw $t0, -96($fp) +# Saves in local_c2i_A2I_internal_22 data_8 +la $t0, data_8 +lw $t1, -0($fp) +lw $t2, -92($fp) +# local_c2i_A2I_internal_21 <- char = local_c2i_A2I_internal_22 +move $t8, $t1 +move $t9, $t0 +loop_14: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_14 +beqz $a1, mismatch_14 +seq $v0, $a0, $a1 +beqz $v0, mismatch_14 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_14 +mismatch_14: +li $v0, 0 +j end_14 +check_14: +bnez $a1, mismatch_14 +li $v0, 1 +end_14: +move $t2, $v0 +# If local_c2i_A2I_internal_21 goto true__389 +sw $t0, -96($fp) +sw $t1, -0($fp) +sw $t2, -92($fp) +bnez $t2, true__389 +lw $t0, -108($fp) +# Saves in local_c2i_A2I_internal_25 data_9 +la $t0, data_9 +lw $t1, -0($fp) +lw $t2, -104($fp) +# local_c2i_A2I_internal_24 <- char = local_c2i_A2I_internal_25 +move $t8, $t1 +move $t9, $t0 +loop_15: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_15 +beqz $a1, mismatch_15 +seq $v0, $a0, $a1 +beqz $v0, mismatch_15 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_15 +mismatch_15: +li $v0, 0 +j end_15 +check_15: +bnez $a1, mismatch_15 +li $v0, 1 +end_15: +move $t2, $v0 +# If local_c2i_A2I_internal_24 goto true__396 +sw $t0, -108($fp) +sw $t1, -0($fp) +sw $t2, -104($fp) +bnez $t2, true__396 +lw $t0, -120($fp) +# Saves in local_c2i_A2I_internal_28 data_10 +la $t0, data_10 +lw $t1, -0($fp) +lw $t2, -116($fp) +# local_c2i_A2I_internal_27 <- char = local_c2i_A2I_internal_28 +move $t8, $t1 +move $t9, $t0 +loop_16: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_16 +beqz $a1, mismatch_16 +seq $v0, $a0, $a1 +beqz $v0, mismatch_16 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_16 +mismatch_16: +li $v0, 0 +j end_16 +check_16: +bnez $a1, mismatch_16 +li $v0, 1 +end_16: +move $t2, $v0 +# If local_c2i_A2I_internal_27 goto true__403 +sw $t0, -120($fp) +sw $t1, -0($fp) +sw $t2, -116($fp) +bnez $t2, true__403 +lw $t0, -4($fp) +lw $t1, -128($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_abort_Object +lw $t8, 4($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -128($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -128($fp) +# saves the return value +move $t0, $v0 +lw $t1, -132($fp) +# Moving 0 to local_c2i_A2I_internal_31 +li $t1, 0 +sw $t1, -132($fp) +lw $t2, -124($fp) +# Moving local_c2i_A2I_internal_31 to local_c2i_A2I_internal_29 +move $t2, $t1 +sw $t2, -124($fp) +sw $t0, -128($fp) +sw $t1, -132($fp) +sw $t2, -124($fp) +j end__403 +true__403: +lw $t0, -124($fp) +# Moving 9 to local_c2i_A2I_internal_29 +li $t0, 9 +sw $t0, -124($fp) +sw $t0, -124($fp) +end__403: +lw $t0, -124($fp) +lw $t1, -112($fp) +# Moving local_c2i_A2I_internal_29 to local_c2i_A2I_internal_26 +move $t1, $t0 +sw $t1, -112($fp) +sw $t0, -124($fp) +sw $t1, -112($fp) +j end__396 +true__396: +lw $t0, -112($fp) +# Moving 8 to local_c2i_A2I_internal_26 +li $t0, 8 +sw $t0, -112($fp) +sw $t0, -112($fp) +end__396: +lw $t0, -112($fp) +lw $t1, -100($fp) +# Moving local_c2i_A2I_internal_26 to local_c2i_A2I_internal_23 +move $t1, $t0 +sw $t1, -100($fp) +sw $t0, -112($fp) +sw $t1, -100($fp) +j end__389 +true__389: +lw $t0, -100($fp) +# Moving 7 to local_c2i_A2I_internal_23 +li $t0, 7 +sw $t0, -100($fp) +sw $t0, -100($fp) +end__389: +lw $t0, -100($fp) +lw $t1, -88($fp) +# Moving local_c2i_A2I_internal_23 to local_c2i_A2I_internal_20 +move $t1, $t0 +sw $t1, -88($fp) +sw $t0, -100($fp) +sw $t1, -88($fp) +j end__382 +true__382: +lw $t0, -88($fp) +# Moving 6 to local_c2i_A2I_internal_20 +li $t0, 6 +sw $t0, -88($fp) +sw $t0, -88($fp) +end__382: +lw $t0, -88($fp) +lw $t1, -76($fp) +# Moving local_c2i_A2I_internal_20 to local_c2i_A2I_internal_17 +move $t1, $t0 +sw $t1, -76($fp) +sw $t0, -88($fp) +sw $t1, -76($fp) +j end__375 +true__375: +lw $t0, -76($fp) +# Moving 5 to local_c2i_A2I_internal_17 +li $t0, 5 +sw $t0, -76($fp) +sw $t0, -76($fp) +end__375: +lw $t0, -76($fp) +lw $t1, -64($fp) +# Moving local_c2i_A2I_internal_17 to local_c2i_A2I_internal_14 +move $t1, $t0 +sw $t1, -64($fp) +sw $t0, -76($fp) +sw $t1, -64($fp) +j end__368 +true__368: +lw $t0, -64($fp) +# Moving 4 to local_c2i_A2I_internal_14 +li $t0, 4 +sw $t0, -64($fp) +sw $t0, -64($fp) +end__368: +lw $t0, -64($fp) +lw $t1, -52($fp) +# Moving local_c2i_A2I_internal_14 to local_c2i_A2I_internal_11 +move $t1, $t0 +sw $t1, -52($fp) +sw $t0, -64($fp) +sw $t1, -52($fp) +j end__361 +true__361: +lw $t0, -52($fp) +# Moving 3 to local_c2i_A2I_internal_11 +li $t0, 3 +sw $t0, -52($fp) +sw $t0, -52($fp) +end__361: +lw $t0, -52($fp) +lw $t1, -40($fp) +# Moving local_c2i_A2I_internal_11 to local_c2i_A2I_internal_8 +move $t1, $t0 +sw $t1, -40($fp) +sw $t0, -52($fp) +sw $t1, -40($fp) +j end__354 +true__354: +lw $t0, -40($fp) +# Moving 2 to local_c2i_A2I_internal_8 +li $t0, 2 +sw $t0, -40($fp) +sw $t0, -40($fp) +end__354: +lw $t0, -40($fp) +lw $t1, -28($fp) +# Moving local_c2i_A2I_internal_8 to local_c2i_A2I_internal_5 +move $t1, $t0 +sw $t1, -28($fp) +sw $t0, -40($fp) +sw $t1, -28($fp) +j end__347 +true__347: +lw $t0, -28($fp) +# Moving 1 to local_c2i_A2I_internal_5 +li $t0, 1 +sw $t0, -28($fp) +sw $t0, -28($fp) +end__347: +lw $t0, -28($fp) +lw $t1, -16($fp) +# Moving local_c2i_A2I_internal_5 to local_c2i_A2I_internal_2 +move $t1, $t0 +sw $t1, -16($fp) +sw $t0, -28($fp) +sw $t1, -16($fp) +j end__340 +true__340: +lw $t0, -16($fp) +# Moving 0 to local_c2i_A2I_internal_2 +li $t0, 0 +sw $t0, -16($fp) +sw $t0, -16($fp) +end__340: +lw $t0, -16($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +# Removing all locals from stack +addiu $sp, $sp, 136 +jr $ra + + +function_i2c_A2I: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value i +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_i2c_A2I_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_15 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_16 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_17 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_18 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_19 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_20 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_21 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_22 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_23 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_24 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_25 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_26 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_27 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_28 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_29 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_30 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_31 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_32 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +# local_i2c_A2I_internal_0 <- i = 0 +li $t9, 0 +seq $t1, $t0, $t9 +# If local_i2c_A2I_internal_0 goto true__465 +sw $t0, -0($fp) +sw $t1, -8($fp) +bnez $t1, true__465 +lw $t0, -0($fp) +lw $t1, -16($fp) +# local_i2c_A2I_internal_2 <- i = 1 +li $t9, 1 +seq $t1, $t0, $t9 +# If local_i2c_A2I_internal_2 goto true__469 +sw $t0, -0($fp) +sw $t1, -16($fp) +bnez $t1, true__469 +lw $t0, -0($fp) +lw $t1, -24($fp) +# local_i2c_A2I_internal_4 <- i = 2 +li $t9, 2 +seq $t1, $t0, $t9 +# If local_i2c_A2I_internal_4 goto true__473 +sw $t0, -0($fp) +sw $t1, -24($fp) +bnez $t1, true__473 +lw $t0, -0($fp) +lw $t1, -32($fp) +# local_i2c_A2I_internal_6 <- i = 3 +li $t9, 3 +seq $t1, $t0, $t9 +# If local_i2c_A2I_internal_6 goto true__477 +sw $t0, -0($fp) +sw $t1, -32($fp) +bnez $t1, true__477 +lw $t0, -0($fp) +lw $t1, -40($fp) +# local_i2c_A2I_internal_8 <- i = 4 +li $t9, 4 +seq $t1, $t0, $t9 +# If local_i2c_A2I_internal_8 goto true__481 +sw $t0, -0($fp) +sw $t1, -40($fp) +bnez $t1, true__481 +lw $t0, -0($fp) +lw $t1, -48($fp) +# local_i2c_A2I_internal_10 <- i = 5 +li $t9, 5 +seq $t1, $t0, $t9 +# If local_i2c_A2I_internal_10 goto true__485 +sw $t0, -0($fp) +sw $t1, -48($fp) +bnez $t1, true__485 +lw $t0, -0($fp) +lw $t1, -56($fp) +# local_i2c_A2I_internal_12 <- i = 6 +li $t9, 6 +seq $t1, $t0, $t9 +# If local_i2c_A2I_internal_12 goto true__489 +sw $t0, -0($fp) +sw $t1, -56($fp) +bnez $t1, true__489 +lw $t0, -0($fp) +lw $t1, -64($fp) +# local_i2c_A2I_internal_14 <- i = 7 +li $t9, 7 +seq $t1, $t0, $t9 +# If local_i2c_A2I_internal_14 goto true__493 +sw $t0, -0($fp) +sw $t1, -64($fp) +bnez $t1, true__493 +lw $t0, -0($fp) +lw $t1, -72($fp) +# local_i2c_A2I_internal_16 <- i = 8 +li $t9, 8 +seq $t1, $t0, $t9 +# If local_i2c_A2I_internal_16 goto true__497 +sw $t0, -0($fp) +sw $t1, -72($fp) +bnez $t1, true__497 +lw $t0, -0($fp) +lw $t1, -80($fp) +# local_i2c_A2I_internal_18 <- i = 9 +li $t9, 9 +seq $t1, $t0, $t9 +# If local_i2c_A2I_internal_18 goto true__501 +sw $t0, -0($fp) +sw $t1, -80($fp) +bnez $t1, true__501 +lw $t0, -4($fp) +lw $t1, -88($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_abort_Object +lw $t8, 4($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -88($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -88($fp) +# saves the return value +move $t0, $v0 +lw $t1, -92($fp) +# Saves in local_i2c_A2I_internal_21 data_11 +la $t1, data_11 +lw $t2, -96($fp) +# Moving local_i2c_A2I_internal_21 to local_i2c_A2I_internal_22 +move $t2, $t1 +sw $t2, -96($fp) +lw $t3, -84($fp) +# Moving local_i2c_A2I_internal_22 to local_i2c_A2I_internal_19 +move $t3, $t2 +sw $t3, -84($fp) +sw $t0, -88($fp) +sw $t1, -92($fp) +sw $t2, -96($fp) +sw $t3, -84($fp) +j end__501 +true__501: +lw $t0, -100($fp) +# Saves in local_i2c_A2I_internal_23 data_12 +la $t0, data_12 +lw $t1, -84($fp) +# Moving local_i2c_A2I_internal_23 to local_i2c_A2I_internal_19 +move $t1, $t0 +sw $t1, -84($fp) +sw $t0, -100($fp) +sw $t1, -84($fp) +end__501: +lw $t0, -84($fp) +lw $t1, -76($fp) +# Moving local_i2c_A2I_internal_19 to local_i2c_A2I_internal_17 +move $t1, $t0 +sw $t1, -76($fp) +sw $t0, -84($fp) +sw $t1, -76($fp) +j end__497 +true__497: +lw $t0, -104($fp) +# Saves in local_i2c_A2I_internal_24 data_13 +la $t0, data_13 +lw $t1, -76($fp) +# Moving local_i2c_A2I_internal_24 to local_i2c_A2I_internal_17 +move $t1, $t0 +sw $t1, -76($fp) +sw $t0, -104($fp) +sw $t1, -76($fp) +end__497: +lw $t0, -76($fp) +lw $t1, -68($fp) +# Moving local_i2c_A2I_internal_17 to local_i2c_A2I_internal_15 +move $t1, $t0 +sw $t1, -68($fp) +sw $t0, -76($fp) +sw $t1, -68($fp) +j end__493 +true__493: +lw $t0, -108($fp) +# Saves in local_i2c_A2I_internal_25 data_14 +la $t0, data_14 +lw $t1, -68($fp) +# Moving local_i2c_A2I_internal_25 to local_i2c_A2I_internal_15 +move $t1, $t0 +sw $t1, -68($fp) +sw $t0, -108($fp) +sw $t1, -68($fp) +end__493: +lw $t0, -68($fp) +lw $t1, -60($fp) +# Moving local_i2c_A2I_internal_15 to local_i2c_A2I_internal_13 +move $t1, $t0 +sw $t1, -60($fp) +sw $t0, -68($fp) +sw $t1, -60($fp) +j end__489 +true__489: +lw $t0, -112($fp) +# Saves in local_i2c_A2I_internal_26 data_15 +la $t0, data_15 +lw $t1, -60($fp) +# Moving local_i2c_A2I_internal_26 to local_i2c_A2I_internal_13 +move $t1, $t0 +sw $t1, -60($fp) +sw $t0, -112($fp) +sw $t1, -60($fp) +end__489: +lw $t0, -60($fp) +lw $t1, -52($fp) +# Moving local_i2c_A2I_internal_13 to local_i2c_A2I_internal_11 +move $t1, $t0 +sw $t1, -52($fp) +sw $t0, -60($fp) +sw $t1, -52($fp) +j end__485 +true__485: +lw $t0, -116($fp) +# Saves in local_i2c_A2I_internal_27 data_16 +la $t0, data_16 +lw $t1, -52($fp) +# Moving local_i2c_A2I_internal_27 to local_i2c_A2I_internal_11 +move $t1, $t0 +sw $t1, -52($fp) +sw $t0, -116($fp) +sw $t1, -52($fp) +end__485: +lw $t0, -52($fp) +lw $t1, -44($fp) +# Moving local_i2c_A2I_internal_11 to local_i2c_A2I_internal_9 +move $t1, $t0 +sw $t1, -44($fp) +sw $t0, -52($fp) +sw $t1, -44($fp) +j end__481 +true__481: +lw $t0, -120($fp) +# Saves in local_i2c_A2I_internal_28 data_17 +la $t0, data_17 +lw $t1, -44($fp) +# Moving local_i2c_A2I_internal_28 to local_i2c_A2I_internal_9 +move $t1, $t0 +sw $t1, -44($fp) +sw $t0, -120($fp) +sw $t1, -44($fp) +end__481: +lw $t0, -44($fp) +lw $t1, -36($fp) +# Moving local_i2c_A2I_internal_9 to local_i2c_A2I_internal_7 +move $t1, $t0 +sw $t1, -36($fp) +sw $t0, -44($fp) +sw $t1, -36($fp) +j end__477 +true__477: +lw $t0, -124($fp) +# Saves in local_i2c_A2I_internal_29 data_18 +la $t0, data_18 +lw $t1, -36($fp) +# Moving local_i2c_A2I_internal_29 to local_i2c_A2I_internal_7 +move $t1, $t0 +sw $t1, -36($fp) +sw $t0, -124($fp) +sw $t1, -36($fp) +end__477: +lw $t0, -36($fp) +lw $t1, -28($fp) +# Moving local_i2c_A2I_internal_7 to local_i2c_A2I_internal_5 +move $t1, $t0 +sw $t1, -28($fp) +sw $t0, -36($fp) +sw $t1, -28($fp) +j end__473 +true__473: +lw $t0, -128($fp) +# Saves in local_i2c_A2I_internal_30 data_19 +la $t0, data_19 +lw $t1, -28($fp) +# Moving local_i2c_A2I_internal_30 to local_i2c_A2I_internal_5 +move $t1, $t0 +sw $t1, -28($fp) +sw $t0, -128($fp) +sw $t1, -28($fp) +end__473: +lw $t0, -28($fp) +lw $t1, -20($fp) +# Moving local_i2c_A2I_internal_5 to local_i2c_A2I_internal_3 +move $t1, $t0 +sw $t1, -20($fp) +sw $t0, -28($fp) +sw $t1, -20($fp) +j end__469 +true__469: +lw $t0, -132($fp) +# Saves in local_i2c_A2I_internal_31 data_20 +la $t0, data_20 +lw $t1, -20($fp) +# Moving local_i2c_A2I_internal_31 to local_i2c_A2I_internal_3 +move $t1, $t0 +sw $t1, -20($fp) +sw $t0, -132($fp) +sw $t1, -20($fp) +end__469: +lw $t0, -20($fp) +lw $t1, -12($fp) +# Moving local_i2c_A2I_internal_3 to local_i2c_A2I_internal_1 +move $t1, $t0 +sw $t1, -12($fp) +sw $t0, -20($fp) +sw $t1, -12($fp) +j end__465 +true__465: +lw $t0, -136($fp) +# Saves in local_i2c_A2I_internal_32 data_21 +la $t0, data_21 +lw $t1, -12($fp) +# Moving local_i2c_A2I_internal_32 to local_i2c_A2I_internal_1 +move $t1, $t0 +sw $t1, -12($fp) +sw $t0, -136($fp) +sw $t1, -12($fp) +end__465: +lw $t0, -12($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 140 +jr $ra + + +function_a2i_A2I: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value s +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_a2i_A2I_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_15 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_16 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_17 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_18 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_19 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_20 to the stack +addiu $sp, $sp, -4 +lw $t0, -12($fp) +# Static Dispatch of the method length +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_length_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# local_a2i_A2I_internal_0 <- local_a2i_A2I_internal_1 = 0 +li $t9, 0 +seq $t1, $t0, $t9 +# If local_a2i_A2I_internal_0 goto true__599 +sw $t0, -12($fp) +sw $t1, -8($fp) +bnez $t1, true__599 +lw $t0, -24($fp) +# Static Dispatch of the method substr +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +li $t9, 1 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +li $t9, 0 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -24($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_substr_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -24($fp) +# saves the return value +move $t0, $v0 +lw $t1, -28($fp) +# Saves in local_a2i_A2I_internal_5 data_22 +la $t1, data_22 +lw $t2, -20($fp) +# local_a2i_A2I_internal_3 <- local_a2i_A2I_internal_4 = local_a2i_A2I_internal_5 +move $t8, $t0 +move $t9, $t1 +loop_17: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_17 +beqz $a1, mismatch_17 +seq $v0, $a0, $a1 +beqz $v0, mismatch_17 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_17 +mismatch_17: +li $v0, 0 +j end_17 +check_17: +bnez $a1, mismatch_17 +li $v0, 1 +end_17: +move $t2, $v0 +# If local_a2i_A2I_internal_3 goto true__611 +sw $t0, -24($fp) +sw $t1, -28($fp) +sw $t2, -20($fp) +bnez $t2, true__611 +lw $t0, -40($fp) +# Static Dispatch of the method substr +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +li $t9, 1 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +li $t9, 0 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -40($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_substr_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +lw $t1, -44($fp) +# Saves in local_a2i_A2I_internal_9 data_23 +la $t1, data_23 +lw $t2, -36($fp) +# local_a2i_A2I_internal_7 <- local_a2i_A2I_internal_8 = local_a2i_A2I_internal_9 +move $t8, $t0 +move $t9, $t1 +loop_18: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_18 +beqz $a1, mismatch_18 +seq $v0, $a0, $a1 +beqz $v0, mismatch_18 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_18 +mismatch_18: +li $v0, 0 +j end_18 +check_18: +bnez $a1, mismatch_18 +li $v0, 1 +end_18: +move $t2, $v0 +# If local_a2i_A2I_internal_7 goto true__623 +sw $t0, -40($fp) +sw $t1, -44($fp) +sw $t2, -36($fp) +bnez $t2, true__623 +lw $t0, -4($fp) +lw $t1, -52($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_a2i_aux_A2I +lw $t8, 28($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -0($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -52($fp) +sw $t2, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -52($fp) +# saves the return value +move $t0, $v0 +lw $t1, -48($fp) +# Moving local_a2i_A2I_internal_11 to local_a2i_A2I_internal_10 +move $t1, $t0 +sw $t1, -48($fp) +sw $t0, -52($fp) +sw $t1, -48($fp) +j end__623 +true__623: +lw $t0, -60($fp) +# Static Dispatch of the method length +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -60($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_length_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -60($fp) +# saves the return value +move $t0, $v0 +lw $t1, -56($fp) +# local_a2i_A2I_internal_12 <- local_a2i_A2I_internal_13 - 1 +addi $t1, $t0, -1 +lw $t2, -64($fp) +# Static Dispatch of the method substr +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +li $t9, 1 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t3, -0($fp) +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -60($fp) +sw $t1, -56($fp) +sw $t2, -64($fp) +sw $t3, -0($fp) +# This function will consume the arguments +jal function_substr_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -64($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +lw $t2, -68($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_a2i_aux_A2I +lw $t8, 28($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -64($fp) +sw $t1, -4($fp) +sw $t2, -68($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -68($fp) +# saves the return value +move $t0, $v0 +lw $t1, -48($fp) +# Moving local_a2i_A2I_internal_15 to local_a2i_A2I_internal_10 +move $t1, $t0 +sw $t1, -48($fp) +sw $t0, -68($fp) +sw $t1, -48($fp) +end__623: +lw $t0, -48($fp) +lw $t1, -32($fp) +# Moving local_a2i_A2I_internal_10 to local_a2i_A2I_internal_6 +move $t1, $t0 +sw $t1, -32($fp) +sw $t0, -48($fp) +sw $t1, -32($fp) +j end__611 +true__611: +lw $t0, -80($fp) +# Static Dispatch of the method length +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -80($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_length_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -80($fp) +# saves the return value +move $t0, $v0 +lw $t1, -76($fp) +# local_a2i_A2I_internal_17 <- local_a2i_A2I_internal_18 - 1 +addi $t1, $t0, -1 +lw $t2, -84($fp) +# Static Dispatch of the method substr +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +li $t9, 1 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t3, -0($fp) +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -80($fp) +sw $t1, -76($fp) +sw $t2, -84($fp) +sw $t3, -0($fp) +# This function will consume the arguments +jal function_substr_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -84($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +lw $t2, -88($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_a2i_aux_A2I +lw $t8, 28($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -84($fp) +sw $t1, -4($fp) +sw $t2, -88($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -88($fp) +# saves the return value +move $t0, $v0 +lw $t1, -72($fp) +# local_a2i_A2I_internal_16 <- ~local_a2i_A2I_internal_20 +not $t1, $t0 +addi $t1, $t1, 1 +lw $t2, -32($fp) +# Moving local_a2i_A2I_internal_16 to local_a2i_A2I_internal_6 +move $t2, $t1 +sw $t2, -32($fp) +sw $t0, -88($fp) +sw $t1, -72($fp) +sw $t2, -32($fp) +end__611: +lw $t0, -32($fp) +lw $t1, -16($fp) +# Moving local_a2i_A2I_internal_6 to local_a2i_A2I_internal_2 +move $t1, $t0 +sw $t1, -16($fp) +sw $t0, -32($fp) +sw $t1, -16($fp) +j end__599 +true__599: +lw $t0, -16($fp) +# Moving 0 to local_a2i_A2I_internal_2 +li $t0, 0 +sw $t0, -16($fp) +sw $t0, -16($fp) +end__599: +lw $t0, -16($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +# Removing all locals from stack +addiu $sp, $sp, 92 +jr $ra + + +function_a2i_aux_A2I: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value s +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_a2i_aux_A2I_int_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_aux_A2I_j_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_aux_A2I_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_aux_A2I_i_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_aux_A2I_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_aux_A2I_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_aux_A2I_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_aux_A2I_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_aux_A2I_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_aux_A2I_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_aux_A2I_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_aux_A2I_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_aux_A2I_internal_12 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +# Moving 0 to local_a2i_aux_A2I_int_0 +li $t0, 0 +sw $t0, -8($fp) +lw $t1, -16($fp) +# Static Dispatch of the method length +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -0($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -16($fp) +sw $t2, -0($fp) +# This function will consume the arguments +jal function_length_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Moving local_a2i_aux_A2I_internal_2 to local_a2i_aux_A2I_j_1 +move $t1, $t0 +sw $t1, -12($fp) +lw $t2, -20($fp) +# Moving 0 to local_a2i_aux_A2I_i_3 +li $t2, 0 +sw $t2, -20($fp) +lw $t3, -24($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t3, $v0 +sw $t0, -16($fp) +sw $t1, -12($fp) +sw $t2, -20($fp) +sw $t3, -24($fp) +start__684: +lw $t0, -20($fp) +lw $t1, -12($fp) +lw $t2, -28($fp) +# local_a2i_aux_A2I_internal_5 <- local_a2i_aux_A2I_i_3 < local_a2i_aux_A2I_j_1 +slt $t2, $t0, $t1 +# If not local_a2i_aux_A2I_internal_5 goto end__684 +sw $t0, -20($fp) +sw $t1, -12($fp) +sw $t2, -28($fp) +beqz $t2, end__684 +lw $t0, -8($fp) +lw $t1, -36($fp) +# local_a2i_aux_A2I_internal_7 <- local_a2i_aux_A2I_int_0 * 10 +li $t9, 10 +mult $t0, $t9 +mflo $t1 +lw $t2, -40($fp) +# Static Dispatch of the method substr +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +li $t9, 1 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t3, -20($fp) +sw $t3, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t4, -0($fp) +sw $t4, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -36($fp) +sw $t2, -40($fp) +sw $t3, -20($fp) +sw $t4, -0($fp) +# This function will consume the arguments +jal function_substr_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +lw $t2, -44($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_c2i_A2I +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -40($fp) +sw $t1, -4($fp) +sw $t2, -44($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -44($fp) +# saves the return value +move $t0, $v0 +lw $t1, -36($fp) +lw $t2, -32($fp) +# local_a2i_aux_A2I_internal_6 <- local_a2i_aux_A2I_internal_7 + local_a2i_aux_A2I_internal_9 +add $t2, $t1, $t0 +lw $t3, -8($fp) +# Moving local_a2i_aux_A2I_internal_6 to local_a2i_aux_A2I_int_0 +move $t3, $t2 +sw $t3, -8($fp) +lw $t4, -20($fp) +lw $t5, -48($fp) +# local_a2i_aux_A2I_internal_10 <- local_a2i_aux_A2I_i_3 + 1 +addi $t5, $t4, 1 +# Moving local_a2i_aux_A2I_internal_10 to local_a2i_aux_A2I_i_3 +move $t4, $t5 +sw $t4, -20($fp) +lw $t6, -52($fp) +# Moving local_a2i_aux_A2I_internal_10 to local_a2i_aux_A2I_internal_11 +move $t6, $t5 +sw $t6, -52($fp) +lw $t7, -24($fp) +# Moving local_a2i_aux_A2I_internal_11 to local_a2i_aux_A2I_internal_4 +move $t7, $t6 +sw $t7, -24($fp) +sw $t0, -44($fp) +sw $t1, -36($fp) +sw $t2, -32($fp) +sw $t3, -8($fp) +sw $t4, -20($fp) +sw $t5, -48($fp) +sw $t6, -52($fp) +sw $t7, -24($fp) +j start__684 +end__684: +lw $t0, -8($fp) +lw $t1, -56($fp) +# Moving local_a2i_aux_A2I_int_0 to local_a2i_aux_A2I_internal_12 +move $t1, $t0 +sw $t1, -56($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -56($fp) +# Removing all locals from stack +addiu $sp, $sp, 60 +jr $ra + + +function_i2a_A2I: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value i +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_i2a_A2I_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_A2I_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_A2I_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_A2I_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_A2I_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_A2I_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_A2I_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_A2I_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_A2I_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_A2I_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_A2I_internal_10 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +# local_i2a_A2I_internal_0 <- i = 0 +li $t9, 0 +seq $t1, $t0, $t9 +# If local_i2a_A2I_internal_0 goto true__719 +sw $t0, -0($fp) +sw $t1, -8($fp) +bnez $t1, true__719 +lw $t0, -0($fp) +lw $t1, -16($fp) +# local_i2a_A2I_internal_2 <- 0 < i +li $t9, 0 +slt $t1, $t9, $t0 +# If local_i2a_A2I_internal_2 goto true__723 +sw $t0, -0($fp) +sw $t1, -16($fp) +bnez $t1, true__723 +lw $t0, -24($fp) +# Saves in local_i2a_A2I_internal_4 data_24 +la $t0, data_24 +lw $t1, -32($fp) +li $t9, 1 +# local_i2a_A2I_internal_6 <- ~1 +not $t1, $t9 +addi $t1, $t1, 1 +lw $t2, -0($fp) +lw $t3, -28($fp) +# local_i2a_A2I_internal_5 <- i * local_i2a_A2I_internal_6 +mult $t2, $t1 +mflo $t3 +lw $t4, -4($fp) +lw $t5, -36($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t4) +# Saves in t8 the direction of function_i2a_aux_A2I +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t4, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -24($fp) +sw $t1, -32($fp) +sw $t2, -0($fp) +sw $t3, -28($fp) +sw $t4, -4($fp) +sw $t5, -36($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -36($fp) +# saves the return value +move $t0, $v0 +lw $t1, -40($fp) +# Static Dispatch of the method concat +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t2, -24($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -36($fp) +sw $t1, -40($fp) +sw $t2, -24($fp) +# This function will consume the arguments +jal function_concat_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +lw $t1, -20($fp) +# Moving local_i2a_A2I_internal_8 to local_i2a_A2I_internal_3 +move $t1, $t0 +sw $t1, -20($fp) +sw $t0, -40($fp) +sw $t1, -20($fp) +j end__723 +true__723: +lw $t0, -4($fp) +lw $t1, -44($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_i2a_aux_A2I +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -0($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -44($fp) +sw $t2, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -44($fp) +# saves the return value +move $t0, $v0 +lw $t1, -20($fp) +# Moving local_i2a_A2I_internal_9 to local_i2a_A2I_internal_3 +move $t1, $t0 +sw $t1, -20($fp) +sw $t0, -44($fp) +sw $t1, -20($fp) +end__723: +lw $t0, -20($fp) +lw $t1, -12($fp) +# Moving local_i2a_A2I_internal_3 to local_i2a_A2I_internal_1 +move $t1, $t0 +sw $t1, -12($fp) +sw $t0, -20($fp) +sw $t1, -12($fp) +j end__719 +true__719: +lw $t0, -48($fp) +# Saves in local_i2a_A2I_internal_10 data_25 +la $t0, data_25 +lw $t1, -12($fp) +# Moving local_i2a_A2I_internal_10 to local_i2a_A2I_internal_1 +move $t1, $t0 +sw $t1, -12($fp) +sw $t0, -48($fp) +sw $t1, -12($fp) +end__719: +lw $t0, -12($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 52 +jr $ra + + +function_i2a_aux_A2I: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value i +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_i2a_aux_A2I_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_aux_A2I_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_aux_A2I_next_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_aux_A2I_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_aux_A2I_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_aux_A2I_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_aux_A2I_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_aux_A2I_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_aux_A2I_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_aux_A2I_internal_9 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +# local_i2a_aux_A2I_internal_0 <- i = 0 +li $t9, 0 +seq $t1, $t0, $t9 +# If local_i2a_aux_A2I_internal_0 goto true__761 +sw $t0, -0($fp) +sw $t1, -8($fp) +bnez $t1, true__761 +lw $t0, -0($fp) +lw $t1, -20($fp) +# local_i2a_aux_A2I_internal_3 <- i / 10 +li $t9, 10 +la $a0, zero_error +beqz $t9, .raise +div $t0, $t9 +mflo $t1 +lw $t2, -16($fp) +# Moving local_i2a_aux_A2I_internal_3 to local_i2a_aux_A2I_next_2 +move $t2, $t1 +sw $t2, -16($fp) +lw $t3, -4($fp) +lw $t4, -24($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_i2a_aux_A2I +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -20($fp) +sw $t2, -16($fp) +sw $t3, -4($fp) +sw $t4, -24($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -24($fp) +# saves the return value +move $t0, $v0 +lw $t1, -16($fp) +lw $t2, -32($fp) +# local_i2a_aux_A2I_internal_6 <- local_i2a_aux_A2I_next_2 * 10 +li $t9, 10 +mult $t1, $t9 +mflo $t2 +lw $t3, -0($fp) +lw $t4, -28($fp) +# local_i2a_aux_A2I_internal_5 <- i - local_i2a_aux_A2I_internal_6 +sub $t4, $t3, $t2 +lw $t5, -4($fp) +lw $t6, -36($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t5) +# Saves in t8 the direction of function_i2c_A2I +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t4, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t5, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -24($fp) +sw $t1, -16($fp) +sw $t2, -32($fp) +sw $t3, -0($fp) +sw $t4, -28($fp) +sw $t5, -4($fp) +sw $t6, -36($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -36($fp) +# saves the return value +move $t0, $v0 +lw $t1, -40($fp) +# Static Dispatch of the method concat +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t2, -24($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -36($fp) +sw $t1, -40($fp) +sw $t2, -24($fp) +# This function will consume the arguments +jal function_concat_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Moving local_i2a_aux_A2I_internal_8 to local_i2a_aux_A2I_internal_1 +move $t1, $t0 +sw $t1, -12($fp) +sw $t0, -40($fp) +sw $t1, -12($fp) +j end__761 +true__761: +lw $t0, -44($fp) +# Saves in local_i2a_aux_A2I_internal_9 data_26 +la $t0, data_26 +lw $t1, -12($fp) +# Moving local_i2a_aux_A2I_internal_9 to local_i2a_aux_A2I_internal_1 +move $t1, $t0 +sw $t1, -12($fp) +sw $t0, -44($fp) +sw $t1, -12($fp) +end__761: +lw $t0, -12($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 48 +jr $ra + + +function_Main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_Main_Main_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_avar_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_a_var_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_3 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_Main_Main_internal_0 data_27 +la $t0, data_27 +lw $t1, -0($fp) +# self . char <- SET local_Main_Main_internal_0 +sw $t0, 16($t1) +lw $t2, -8($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t2, $v0 +# self . avar <- SET local_Main_Main_avar_1 +sw $t2, 20($t1) +lw $t3, -12($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t3, $v0 +# self . a_var <- SET local_Main_Main_a_var_2 +sw $t3, 24($t1) +# self . flag <- SET 1 +li $t9, 1 +sw $t9, 28($t1) +lw $t4, -16($fp) +# Moving self to local_Main_Main_internal_3 +move $t4, $t1 +sw $t4, -16($fp) +move $v0, $t4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +sw $t3, -12($fp) +sw $t4, -16($fp) +# Removing all locals from stack +addiu $sp, $sp, 20 +jr $ra + + +function_menu_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_menu_Main_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_avar_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_avar_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_avar_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_15 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_16 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_17 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_18 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_19 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_avar_20 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_21 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_22 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_23 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_24 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_25 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_avar_26 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_27 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_28 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_29 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_30 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_31 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_avar_32 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_33 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_34 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_35 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_36 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_37 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_avar_38 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_39 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_40 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_41 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_42 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_43 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_avar_44 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_45 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_46 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_47 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_48 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_49 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_50 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_51 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_52 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_menu_Main_internal_53 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_menu_Main_internal_0 data_28 +la $t0, data_28 +lw $t1, -0($fp) +lw $t2, -8($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -12($fp) +# local_menu_Main_avar_2 <- GET self . avar +lw $t2, 20($t1) +lw $t3, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_print_Main +lw $t8, 52($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -16($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -20($fp) +# Saves in local_menu_Main_internal_4 data_29 +la $t1, data_29 +lw $t2, -0($fp) +lw $t3, -24($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -20($fp) +sw $t2, -0($fp) +sw $t3, -24($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -24($fp) +# saves the return value +move $t0, $v0 +lw $t1, -28($fp) +# Saves in local_menu_Main_internal_6 data_30 +la $t1, data_30 +lw $t2, -0($fp) +lw $t3, -32($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -24($fp) +sw $t1, -28($fp) +sw $t2, -0($fp) +sw $t3, -32($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -32($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -36($fp) +# local_menu_Main_avar_8 <- GET self . avar +lw $t2, 20($t1) +lw $t3, -40($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_print_Main +lw $t8, 52($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -32($fp) +sw $t1, -0($fp) +sw $t2, -36($fp) +sw $t3, -40($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +lw $t1, -44($fp) +# Saves in local_menu_Main_internal_10 data_31 +la $t1, data_31 +lw $t2, -0($fp) +lw $t3, -48($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -40($fp) +sw $t1, -44($fp) +sw $t2, -0($fp) +sw $t3, -48($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -48($fp) +# saves the return value +move $t0, $v0 +lw $t1, -52($fp) +# Saves in local_menu_Main_internal_12 data_32 +la $t1, data_32 +lw $t2, -0($fp) +lw $t3, -56($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -48($fp) +sw $t1, -52($fp) +sw $t2, -0($fp) +sw $t3, -56($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -56($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -60($fp) +# local_menu_Main_avar_14 <- GET self . avar +lw $t2, 20($t1) +lw $t3, -64($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_print_Main +lw $t8, 52($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -56($fp) +sw $t1, -0($fp) +sw $t2, -60($fp) +sw $t3, -64($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -64($fp) +# saves the return value +move $t0, $v0 +lw $t1, -68($fp) +# Saves in local_menu_Main_internal_16 data_33 +la $t1, data_33 +lw $t2, -0($fp) +lw $t3, -72($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -64($fp) +sw $t1, -68($fp) +sw $t2, -0($fp) +sw $t3, -72($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -72($fp) +# saves the return value +move $t0, $v0 +lw $t1, -76($fp) +# Saves in local_menu_Main_internal_18 data_34 +la $t1, data_34 +lw $t2, -0($fp) +lw $t3, -80($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -72($fp) +sw $t1, -76($fp) +sw $t2, -0($fp) +sw $t3, -80($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -80($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -84($fp) +# local_menu_Main_avar_20 <- GET self . avar +lw $t2, 20($t1) +lw $t3, -88($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_print_Main +lw $t8, 52($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -80($fp) +sw $t1, -0($fp) +sw $t2, -84($fp) +sw $t3, -88($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -88($fp) +# saves the return value +move $t0, $v0 +lw $t1, -92($fp) +# Saves in local_menu_Main_internal_22 data_35 +la $t1, data_35 +lw $t2, -0($fp) +lw $t3, -96($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -88($fp) +sw $t1, -92($fp) +sw $t2, -0($fp) +sw $t3, -96($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -96($fp) +# saves the return value +move $t0, $v0 +lw $t1, -100($fp) +# Saves in local_menu_Main_internal_24 data_36 +la $t1, data_36 +lw $t2, -0($fp) +lw $t3, -104($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -96($fp) +sw $t1, -100($fp) +sw $t2, -0($fp) +sw $t3, -104($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -104($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -108($fp) +# local_menu_Main_avar_26 <- GET self . avar +lw $t2, 20($t1) +lw $t3, -112($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_print_Main +lw $t8, 52($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -104($fp) +sw $t1, -0($fp) +sw $t2, -108($fp) +sw $t3, -112($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -112($fp) +# saves the return value +move $t0, $v0 +lw $t1, -116($fp) +# Saves in local_menu_Main_internal_28 data_37 +la $t1, data_37 +lw $t2, -0($fp) +lw $t3, -120($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -112($fp) +sw $t1, -116($fp) +sw $t2, -0($fp) +sw $t3, -120($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -120($fp) +# saves the return value +move $t0, $v0 +lw $t1, -124($fp) +# Saves in local_menu_Main_internal_30 data_38 +la $t1, data_38 +lw $t2, -0($fp) +lw $t3, -128($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -120($fp) +sw $t1, -124($fp) +sw $t2, -0($fp) +sw $t3, -128($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -128($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -132($fp) +# local_menu_Main_avar_32 <- GET self . avar +lw $t2, 20($t1) +lw $t3, -136($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_print_Main +lw $t8, 52($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -128($fp) +sw $t1, -0($fp) +sw $t2, -132($fp) +sw $t3, -136($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -136($fp) +# saves the return value +move $t0, $v0 +lw $t1, -140($fp) +# Saves in local_menu_Main_internal_34 data_39 +la $t1, data_39 +lw $t2, -0($fp) +lw $t3, -144($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -136($fp) +sw $t1, -140($fp) +sw $t2, -0($fp) +sw $t3, -144($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -144($fp) +# saves the return value +move $t0, $v0 +lw $t1, -148($fp) +# Saves in local_menu_Main_internal_36 data_40 +la $t1, data_40 +lw $t2, -0($fp) +lw $t3, -152($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -144($fp) +sw $t1, -148($fp) +sw $t2, -0($fp) +sw $t3, -152($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -152($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -156($fp) +# local_menu_Main_avar_38 <- GET self . avar +lw $t2, 20($t1) +lw $t3, -160($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_print_Main +lw $t8, 52($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -152($fp) +sw $t1, -0($fp) +sw $t2, -156($fp) +sw $t3, -160($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -160($fp) +# saves the return value +move $t0, $v0 +lw $t1, -164($fp) +# Saves in local_menu_Main_internal_40 data_41 +la $t1, data_41 +lw $t2, -0($fp) +lw $t3, -168($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -160($fp) +sw $t1, -164($fp) +sw $t2, -0($fp) +sw $t3, -168($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -168($fp) +# saves the return value +move $t0, $v0 +lw $t1, -172($fp) +# Saves in local_menu_Main_internal_42 data_42 +la $t1, data_42 +lw $t2, -0($fp) +lw $t3, -176($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -168($fp) +sw $t1, -172($fp) +sw $t2, -0($fp) +sw $t3, -176($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -176($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -180($fp) +# local_menu_Main_avar_44 <- GET self . avar +lw $t2, 20($t1) +lw $t3, -184($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_print_Main +lw $t8, 52($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -176($fp) +sw $t1, -0($fp) +sw $t2, -180($fp) +sw $t3, -184($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -184($fp) +# saves the return value +move $t0, $v0 +lw $t1, -188($fp) +# Saves in local_menu_Main_internal_46 data_43 +la $t1, data_43 +lw $t2, -0($fp) +lw $t3, -192($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -184($fp) +sw $t1, -188($fp) +sw $t2, -0($fp) +sw $t3, -192($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -192($fp) +# saves the return value +move $t0, $v0 +lw $t1, -196($fp) +# Saves in local_menu_Main_internal_48 data_44 +la $t1, data_44 +lw $t2, -0($fp) +lw $t3, -200($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -192($fp) +sw $t1, -196($fp) +sw $t2, -0($fp) +sw $t3, -200($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -200($fp) +# saves the return value +move $t0, $v0 +lw $t1, -204($fp) +# Saves in local_menu_Main_internal_50 data_45 +la $t1, data_45 +lw $t2, -0($fp) +lw $t3, -208($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -200($fp) +sw $t1, -204($fp) +sw $t2, -0($fp) +sw $t3, -208($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -208($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -212($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_in_string_IO +lw $t8, 24($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -208($fp) +sw $t1, -0($fp) +sw $t2, -212($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -212($fp) +# saves the return value +move $t0, $v0 +lw $t1, -216($fp) +# Moving local_menu_Main_internal_52 to local_menu_Main_internal_53 +move $t1, $t0 +sw $t1, -216($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -212($fp) +sw $t1, -216($fp) +# Removing all locals from stack +addiu $sp, $sp, 220 +jr $ra + + +function_prompt_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_prompt_Main_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt_Main_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt_Main_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt_Main_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt_Main_internal_5 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_prompt_Main_internal_0 data_46 +la $t0, data_46 +lw $t1, -0($fp) +lw $t2, -8($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Saves in local_prompt_Main_internal_2 data_47 +la $t1, data_47 +lw $t2, -0($fp) +lw $t3, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -12($fp) +sw $t2, -0($fp) +sw $t3, -16($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_in_string_IO +lw $t8, 24($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -0($fp) +sw $t2, -20($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# Moving local_prompt_Main_internal_4 to local_prompt_Main_internal_5 +move $t1, $t0 +sw $t1, -24($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -24($fp) +# Removing all locals from stack +addiu $sp, $sp, 28 +jr $ra + + +function_get_int_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_get_int_Main_z_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_get_int_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_get_int_Main_s_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_get_int_Main_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_get_int_Main_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_get_int_Main_internal_5 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 12 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_A2I +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 12 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 40 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_c2i_A2I in t9 +lw $t9, 148($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_i2c_A2I in t9 +lw $t9, 152($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_a2i_A2I in t9 +lw $t9, 156($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_a2i_aux_A2I in t9 +lw $t9, 160($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_i2a_A2I in t9 +lw $t9, 164($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_i2a_aux_A2I in t9 +lw $t9, 168($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 40($t8) +sw $v0, 12($t0) +lw $t1, -4($fp) +# Moving local_get_int_Main_internal_1 to local_get_int_Main_z_0 +move $t1, $t0 +sw $t1, -4($fp) +lw $t2, -0($fp) +lw $t3, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_prompt_Main +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -4($fp) +sw $t2, -0($fp) +sw $t3, -16($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Moving local_get_int_Main_internal_3 to local_get_int_Main_s_2 +move $t1, $t0 +sw $t1, -12($fp) +lw $t2, -4($fp) +lw $t3, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_a2i_A2I +lw $t8, 24($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -12($fp) +sw $t2, -4($fp) +sw $t3, -20($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# Moving local_get_int_Main_internal_4 to local_get_int_Main_internal_5 +move $t1, $t0 +sw $t1, -24($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -24($fp) +# Removing all locals from stack +addiu $sp, $sp, 28 +jr $ra + + +function_is_even_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value num +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_is_even_Main_x_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_is_even_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_is_even_Main_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_is_even_Main_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_is_even_Main_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_is_even_Main_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_is_even_Main_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_is_even_Main_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_is_even_Main_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_is_even_Main_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_is_even_Main_internal_10 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +# Moving num to local_is_even_Main_x_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -12($fp) +# local_is_even_Main_internal_1 <- local_is_even_Main_x_0 < 0 +li $t9, 0 +slt $t2, $t1, $t9 +# If local_is_even_Main_internal_1 goto true__1004 +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +bnez $t2, true__1004 +lw $t0, -8($fp) +lw $t1, -20($fp) +# local_is_even_Main_internal_3 <- 0 = local_is_even_Main_x_0 +li $t9, 0 +seq $t1, $t9, $t0 +# If local_is_even_Main_internal_3 goto true__1008 +sw $t0, -8($fp) +sw $t1, -20($fp) +bnez $t1, true__1008 +lw $t0, -8($fp) +lw $t1, -28($fp) +# local_is_even_Main_internal_5 <- 1 = local_is_even_Main_x_0 +li $t9, 1 +seq $t1, $t9, $t0 +# If local_is_even_Main_internal_5 goto true__1012 +sw $t0, -8($fp) +sw $t1, -28($fp) +bnez $t1, true__1012 +lw $t0, -8($fp) +lw $t1, -36($fp) +# local_is_even_Main_internal_7 <- local_is_even_Main_x_0 - 2 +addi $t1, $t0, -2 +lw $t2, -4($fp) +lw $t3, -40($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_is_even_Main +lw $t8, 44($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -36($fp) +sw $t2, -4($fp) +sw $t3, -40($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +lw $t1, -32($fp) +# Moving local_is_even_Main_internal_8 to local_is_even_Main_internal_6 +move $t1, $t0 +sw $t1, -32($fp) +sw $t0, -40($fp) +sw $t1, -32($fp) +j end__1012 +true__1012: +lw $t0, -32($fp) +# Moving 0 to local_is_even_Main_internal_6 +li $t0, 0 +sw $t0, -32($fp) +sw $t0, -32($fp) +end__1012: +lw $t0, -32($fp) +lw $t1, -24($fp) +# Moving local_is_even_Main_internal_6 to local_is_even_Main_internal_4 +move $t1, $t0 +sw $t1, -24($fp) +sw $t0, -32($fp) +sw $t1, -24($fp) +j end__1008 +true__1008: +lw $t0, -24($fp) +# Moving 1 to local_is_even_Main_internal_4 +li $t0, 1 +sw $t0, -24($fp) +sw $t0, -24($fp) +end__1008: +lw $t0, -24($fp) +lw $t1, -16($fp) +# Moving local_is_even_Main_internal_4 to local_is_even_Main_internal_2 +move $t1, $t0 +sw $t1, -16($fp) +sw $t0, -24($fp) +sw $t1, -16($fp) +j end__1004 +true__1004: +lw $t0, -8($fp) +lw $t1, -44($fp) +# local_is_even_Main_internal_9 <- ~local_is_even_Main_x_0 +not $t1, $t0 +addi $t1, $t1, 1 +lw $t2, -4($fp) +lw $t3, -48($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_is_even_Main +lw $t8, 44($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -44($fp) +sw $t2, -4($fp) +sw $t3, -48($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -48($fp) +# saves the return value +move $t0, $v0 +lw $t1, -16($fp) +# Moving local_is_even_Main_internal_10 to local_is_even_Main_internal_2 +move $t1, $t0 +sw $t1, -16($fp) +sw $t0, -48($fp) +sw $t1, -16($fp) +end__1004: +lw $t0, -16($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +# Removing all locals from stack +addiu $sp, $sp, 52 +jr $ra + + +function_class_type_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value var +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_class_type_Main_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_class_type_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_class_type_Main_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_class_type_Main_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_class_type_Main_e_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_class_type_Main_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_class_type_Main_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_class_type_Main_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_class_type_Main_c_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_class_type_Main_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_class_type_Main_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_class_type_Main_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_class_type_Main_d_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_class_type_Main_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_class_type_Main_internal_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_class_type_Main_internal_15 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_class_type_Main_b_16 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_class_type_Main_internal_17 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_class_type_Main_internal_18 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_class_type_Main_internal_19 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_class_type_Main_a_20 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_class_type_Main_internal_21 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_class_type_Main_internal_22 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_class_type_Main_internal_23 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_class_type_Main_o_24 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_class_type_Main_internal_25 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_class_type_Main_internal_26 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -12($fp) +# local_class_type_Main_internal_1 <- Type of var +lw $t1, 0($t0) +lw $t2, -16($fp) +# Saves in local_class_type_Main_internal_2 data_0 +la $t2, data_0 +# local_class_type_Main_internal_1 <- local_class_type_Main_internal_1 = local_class_type_Main_internal_2 +move $t8, $t1 +move $t9, $t2 +loop_19: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_19 +beqz $a1, mismatch_19 +seq $v0, $a0, $a1 +beqz $v0, mismatch_19 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_19 +mismatch_19: +li $v0, 0 +j end_19 +check_19: +bnez $a1, mismatch_19 +li $v0, 1 +end_19: +move $t1, $v0 +# If local_class_type_Main_internal_1 goto error__1044 +sw $t0, -0($fp) +sw $t1, -12($fp) +sw $t2, -16($fp) +bnez $t1, error__1044 +lw $t0, -0($fp) +lw $t1, -20($fp) +la $t9, type_E +lw $v0, 12($t0) +loop_20: +move $t8, $v0 +beqz $t8, false_20 +lw $v1, 0($t8) +beq $t9, $v1, true_20 +lw $v0, 4($t8) +j loop_20 +true_20: +li $t1, 1 +j end_20 +false_20: +li $t1, 0 +end_20: +# If not local_class_type_Main_internal_3 goto next__1050_0 +sw $t0, -0($fp) +sw $t1, -20($fp) +beqz $t1, next__1050_0 +lw $t0, -0($fp) +lw $t1, -24($fp) +# Moving var to local_class_type_Main_e_4 +move $t1, $t0 +sw $t1, -24($fp) +lw $t2, -28($fp) +# Saves in local_class_type_Main_internal_5 data_48 +la $t2, data_48 +lw $t3, -4($fp) +lw $t4, -32($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -24($fp) +sw $t2, -28($fp) +sw $t3, -4($fp) +sw $t4, -32($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -32($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# Moving local_class_type_Main_internal_6 to local_class_type_Main_internal_0 +move $t1, $t0 +sw $t1, -8($fp) +sw $t0, -32($fp) +sw $t1, -8($fp) +j end__1044 +next__1050_0: +lw $t0, -0($fp) +lw $t1, -36($fp) +la $t9, type_C +lw $v0, 12($t0) +loop_21: +move $t8, $v0 +beqz $t8, false_21 +lw $v1, 0($t8) +beq $t9, $v1, true_21 +lw $v0, 4($t8) +j loop_21 +true_21: +li $t1, 1 +j end_21 +false_21: +li $t1, 0 +end_21: +# If not local_class_type_Main_internal_7 goto next__1064_1 +sw $t0, -0($fp) +sw $t1, -36($fp) +beqz $t1, next__1064_1 +lw $t0, -0($fp) +lw $t1, -40($fp) +# Moving var to local_class_type_Main_c_8 +move $t1, $t0 +sw $t1, -40($fp) +lw $t2, -44($fp) +# Saves in local_class_type_Main_internal_9 data_49 +la $t2, data_49 +lw $t3, -4($fp) +lw $t4, -48($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -40($fp) +sw $t2, -44($fp) +sw $t3, -4($fp) +sw $t4, -48($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -48($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# Moving local_class_type_Main_internal_10 to local_class_type_Main_internal_0 +move $t1, $t0 +sw $t1, -8($fp) +sw $t0, -48($fp) +sw $t1, -8($fp) +j end__1044 +next__1064_1: +lw $t0, -0($fp) +lw $t1, -52($fp) +la $t9, type_D +lw $v0, 12($t0) +loop_22: +move $t8, $v0 +beqz $t8, false_22 +lw $v1, 0($t8) +beq $t9, $v1, true_22 +lw $v0, 4($t8) +j loop_22 +true_22: +li $t1, 1 +j end_22 +false_22: +li $t1, 0 +end_22: +# If not local_class_type_Main_internal_11 goto next__1078_2 +sw $t0, -0($fp) +sw $t1, -52($fp) +beqz $t1, next__1078_2 +lw $t0, -0($fp) +lw $t1, -56($fp) +# Moving var to local_class_type_Main_d_12 +move $t1, $t0 +sw $t1, -56($fp) +lw $t2, -60($fp) +# Saves in local_class_type_Main_internal_13 data_50 +la $t2, data_50 +lw $t3, -4($fp) +lw $t4, -64($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -56($fp) +sw $t2, -60($fp) +sw $t3, -4($fp) +sw $t4, -64($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -64($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# Moving local_class_type_Main_internal_14 to local_class_type_Main_internal_0 +move $t1, $t0 +sw $t1, -8($fp) +sw $t0, -64($fp) +sw $t1, -8($fp) +j end__1044 +next__1078_2: +lw $t0, -0($fp) +lw $t1, -68($fp) +la $t9, type_B +lw $v0, 12($t0) +loop_23: +move $t8, $v0 +beqz $t8, false_23 +lw $v1, 0($t8) +beq $t9, $v1, true_23 +lw $v0, 4($t8) +j loop_23 +true_23: +li $t1, 1 +j end_23 +false_23: +li $t1, 0 +end_23: +# If not local_class_type_Main_internal_15 goto next__1092_3 +sw $t0, -0($fp) +sw $t1, -68($fp) +beqz $t1, next__1092_3 +lw $t0, -0($fp) +lw $t1, -72($fp) +# Moving var to local_class_type_Main_b_16 +move $t1, $t0 +sw $t1, -72($fp) +lw $t2, -76($fp) +# Saves in local_class_type_Main_internal_17 data_51 +la $t2, data_51 +lw $t3, -4($fp) +lw $t4, -80($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -72($fp) +sw $t2, -76($fp) +sw $t3, -4($fp) +sw $t4, -80($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -80($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# Moving local_class_type_Main_internal_18 to local_class_type_Main_internal_0 +move $t1, $t0 +sw $t1, -8($fp) +sw $t0, -80($fp) +sw $t1, -8($fp) +j end__1044 +next__1092_3: +lw $t0, -0($fp) +lw $t1, -84($fp) +la $t9, type_A +lw $v0, 12($t0) +loop_24: +move $t8, $v0 +beqz $t8, false_24 +lw $v1, 0($t8) +beq $t9, $v1, true_24 +lw $v0, 4($t8) +j loop_24 +true_24: +li $t1, 1 +j end_24 +false_24: +li $t1, 0 +end_24: +# If not local_class_type_Main_internal_19 goto next__1106_4 +sw $t0, -0($fp) +sw $t1, -84($fp) +beqz $t1, next__1106_4 +lw $t0, -0($fp) +lw $t1, -88($fp) +# Moving var to local_class_type_Main_a_20 +move $t1, $t0 +sw $t1, -88($fp) +lw $t2, -92($fp) +# Saves in local_class_type_Main_internal_21 data_52 +la $t2, data_52 +lw $t3, -4($fp) +lw $t4, -96($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -88($fp) +sw $t2, -92($fp) +sw $t3, -4($fp) +sw $t4, -96($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -96($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# Moving local_class_type_Main_internal_22 to local_class_type_Main_internal_0 +move $t1, $t0 +sw $t1, -8($fp) +sw $t0, -96($fp) +sw $t1, -8($fp) +j end__1044 +next__1106_4: +lw $t0, -0($fp) +lw $t1, -100($fp) +la $t9, type_Object +lw $v0, 12($t0) +loop_25: +move $t8, $v0 +beqz $t8, false_25 +lw $v1, 0($t8) +beq $t9, $v1, true_25 +lw $v0, 4($t8) +j loop_25 +true_25: +li $t1, 1 +j end_25 +false_25: +li $t1, 0 +end_25: +# If not local_class_type_Main_internal_23 goto next__1120_5 +sw $t0, -0($fp) +sw $t1, -100($fp) +beqz $t1, next__1120_5 +lw $t0, -0($fp) +lw $t1, -104($fp) +# Moving var to local_class_type_Main_o_24 +move $t1, $t0 +sw $t1, -104($fp) +lw $t2, -108($fp) +# Saves in local_class_type_Main_internal_25 data_53 +la $t2, data_53 +lw $t3, -4($fp) +lw $t4, -112($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -104($fp) +sw $t2, -108($fp) +sw $t3, -4($fp) +sw $t4, -112($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -112($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# Moving local_class_type_Main_internal_26 to local_class_type_Main_internal_0 +move $t1, $t0 +sw $t1, -8($fp) +sw $t0, -112($fp) +sw $t1, -8($fp) +j end__1044 +next__1120_5: +la $a0, case_error +j .raise +error__1044: +la $a0, case_void_error +j .raise +end__1044: +lw $t0, -8($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 116 +jr $ra + + +function_print_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value var +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_print_Main_z_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Main_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Main_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Main_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Main_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Main_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Main_internal_7 to the stack +addiu $sp, $sp, -4 +lw $t0, -12($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 12 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_A2I +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 12 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 40 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_c2i_A2I in t9 +lw $t9, 148($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_i2c_A2I in t9 +lw $t9, 152($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_a2i_A2I in t9 +lw $t9, 156($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_a2i_aux_A2I in t9 +lw $t9, 160($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_i2a_A2I in t9 +lw $t9, 164($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_i2a_aux_A2I in t9 +lw $t9, 168($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 40($t8) +sw $v0, 12($t0) +lw $t1, -8($fp) +# Moving local_print_Main_internal_1 to local_print_Main_z_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +lw $t3, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_value_A +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +sw $t3, -16($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +lw $t2, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_i2a_A2I +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -8($fp) +sw $t2, -20($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +lw $t2, -24($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -4($fp) +sw $t2, -24($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -24($fp) +# saves the return value +move $t0, $v0 +lw $t1, -28($fp) +# Saves in local_print_Main_internal_5 data_54 +la $t1, data_54 +lw $t2, -4($fp) +lw $t3, -32($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -24($fp) +sw $t1, -28($fp) +sw $t2, -4($fp) +sw $t3, -32($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -32($fp) +# saves the return value +move $t0, $v0 +lw $t1, -36($fp) +# Moving local_print_Main_internal_6 to local_print_Main_internal_7 +move $t1, $t0 +sw $t1, -36($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -32($fp) +sw $t1, -36($fp) +# Removing all locals from stack +addiu $sp, $sp, 40 +jr $ra + + +function_main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_main_Main_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_flag_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_avar_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_avar_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_avar_15 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_16 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_17 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_18 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_char_19 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_20 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_21 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_22 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_char_23 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_24 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_25 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_26 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_char_27 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_28 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_29 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_30 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_char_31 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_32 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_33 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_34 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_char_35 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_36 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_37 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_38 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_char_39 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_40 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_41 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_42 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_char_43 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_44 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_45 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_46 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_char_47 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_48 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_49 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_50 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_char_51 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_52 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_53 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_54 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_char_55 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_56 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_57 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_58 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_avar_59 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_60 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_61 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_62 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_x_63 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_x_64 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_65 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_avar_66 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_67 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_68 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_r_69 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_70 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_avar_71 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_72 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_73 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_74 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_75 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_76 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_avar_77 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_78 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_79 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_80 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_81 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_82 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_83 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_a_84 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_85 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_86 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_87 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_88 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_89 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_90 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_91 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_92 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_93 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_avar_94 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_95 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_96 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_97 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_98 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_99 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_avar_100 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_101 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_102 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_103 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_104 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_105 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_106 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_avar_107 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_108 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_109 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_110 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_111 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_112 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_avar_113 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_114 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_115 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_116 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_avar_117 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_118 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_119 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_120 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_avar_121 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_122 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_123 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_124 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_125 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_126 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_127 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_avar_128 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_129 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_a_var_130 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_131 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_132 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_133 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_avar_134 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_135 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_136 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_137 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_138 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_c_139 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_140 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_141 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_142 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_a_143 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_144 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_145 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_146 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_o_147 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_148 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_149 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_150 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_151 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_152 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_153 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_154 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_155 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_avar_156 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_157 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_a_var_158 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_159 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_160 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_161 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_162 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_163 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_A +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 48 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_value_A in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_set_var_A in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_method1_A in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_method2_A in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_method3_A in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_method4_A in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_method5_A in t9 +lw $t9, 108($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_A_A in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t0) +# Static Dispatch of the method A +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# This function will consume the arguments +jal function_A_A +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . avar <- SET local_main_Main_internal_0 +sw $t0, 20($t1) +lw $t2, -8($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t2, $v0 +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +start__1171: +lw $t0, -0($fp) +lw $t1, -12($fp) +# local_main_Main_flag_2 <- GET self . flag +lw $t1, 28($t0) +# If not local_main_Main_flag_2 goto end__1171 +sw $t0, -0($fp) +sw $t1, -12($fp) +beqz $t1, end__1171 +lw $t0, -16($fp) +# Saves in local_main_Main_internal_3 data_55 +la $t0, data_55 +lw $t1, -0($fp) +lw $t2, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -0($fp) +sw $t2, -20($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -24($fp) +# local_main_Main_avar_5 <- GET self . avar +lw $t2, 20($t1) +lw $t3, -28($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_print_Main +lw $t8, 52($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -0($fp) +sw $t2, -24($fp) +sw $t3, -28($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -28($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -32($fp) +# local_main_Main_avar_7 <- GET self . avar +lw $t2, 20($t1) +lw $t3, -36($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_value_A +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -28($fp) +sw $t1, -0($fp) +sw $t2, -32($fp) +sw $t3, -36($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -36($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -40($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_is_even_Main +lw $t8, 44($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -36($fp) +sw $t1, -0($fp) +sw $t2, -40($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +# If local_main_Main_internal_9 goto true__1196 +sw $t0, -40($fp) +bnez $t0, true__1196 +lw $t0, -48($fp) +# Saves in local_main_Main_internal_11 data_56 +la $t0, data_56 +lw $t1, -0($fp) +lw $t2, -52($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -48($fp) +sw $t1, -0($fp) +sw $t2, -52($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -52($fp) +# saves the return value +move $t0, $v0 +lw $t1, -44($fp) +# Moving local_main_Main_internal_12 to local_main_Main_internal_10 +move $t1, $t0 +sw $t1, -44($fp) +sw $t0, -52($fp) +sw $t1, -44($fp) +j end__1196 +true__1196: +lw $t0, -56($fp) +# Saves in local_main_Main_internal_13 data_57 +la $t0, data_57 +lw $t1, -0($fp) +lw $t2, -60($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -56($fp) +sw $t1, -0($fp) +sw $t2, -60($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -60($fp) +# saves the return value +move $t0, $v0 +lw $t1, -44($fp) +# Moving local_main_Main_internal_14 to local_main_Main_internal_10 +move $t1, $t0 +sw $t1, -44($fp) +sw $t0, -60($fp) +sw $t1, -44($fp) +end__1196: +lw $t0, -0($fp) +lw $t1, -64($fp) +# local_main_Main_avar_15 <- GET self . avar +lw $t1, 20($t0) +lw $t2, -68($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_class_type_Main +lw $t8, 48($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -64($fp) +sw $t2, -68($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -68($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -72($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_menu_Main +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -68($fp) +sw $t1, -0($fp) +sw $t2, -72($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -72($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . char <- SET local_main_Main_internal_17 +sw $t0, 16($t1) +lw $t2, -80($fp) +# local_main_Main_char_19 <- GET self . char +lw $t2, 16($t1) +lw $t3, -84($fp) +# Saves in local_main_Main_internal_20 data_58 +la $t3, data_58 +lw $t4, -76($fp) +# local_main_Main_internal_18 <- local_main_Main_char_19 = local_main_Main_internal_20 +move $t8, $t2 +move $t9, $t3 +loop_26: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_26 +beqz $a1, mismatch_26 +seq $v0, $a0, $a1 +beqz $v0, mismatch_26 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_26 +mismatch_26: +li $v0, 0 +j end_26 +check_26: +bnez $a1, mismatch_26 +li $v0, 1 +end_26: +move $t4, $v0 +# If local_main_Main_internal_18 goto true__1230 +sw $t0, -72($fp) +sw $t1, -0($fp) +sw $t2, -80($fp) +sw $t3, -84($fp) +sw $t4, -76($fp) +bnez $t4, true__1230 +lw $t0, -0($fp) +lw $t1, -96($fp) +# local_main_Main_char_23 <- GET self . char +lw $t1, 16($t0) +lw $t2, -100($fp) +# Saves in local_main_Main_internal_24 data_59 +la $t2, data_59 +lw $t3, -92($fp) +# local_main_Main_internal_22 <- local_main_Main_char_23 = local_main_Main_internal_24 +move $t8, $t1 +move $t9, $t2 +loop_27: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_27 +beqz $a1, mismatch_27 +seq $v0, $a0, $a1 +beqz $v0, mismatch_27 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_27 +mismatch_27: +li $v0, 0 +j end_27 +check_27: +bnez $a1, mismatch_27 +li $v0, 1 +end_27: +move $t3, $v0 +# If local_main_Main_internal_22 goto true__1239 +sw $t0, -0($fp) +sw $t1, -96($fp) +sw $t2, -100($fp) +sw $t3, -92($fp) +bnez $t3, true__1239 +lw $t0, -0($fp) +lw $t1, -112($fp) +# local_main_Main_char_27 <- GET self . char +lw $t1, 16($t0) +lw $t2, -116($fp) +# Saves in local_main_Main_internal_28 data_60 +la $t2, data_60 +lw $t3, -108($fp) +# local_main_Main_internal_26 <- local_main_Main_char_27 = local_main_Main_internal_28 +move $t8, $t1 +move $t9, $t2 +loop_28: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_28 +beqz $a1, mismatch_28 +seq $v0, $a0, $a1 +beqz $v0, mismatch_28 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_28 +mismatch_28: +li $v0, 0 +j end_28 +check_28: +bnez $a1, mismatch_28 +li $v0, 1 +end_28: +move $t3, $v0 +# If local_main_Main_internal_26 goto true__1248 +sw $t0, -0($fp) +sw $t1, -112($fp) +sw $t2, -116($fp) +sw $t3, -108($fp) +bnez $t3, true__1248 +lw $t0, -0($fp) +lw $t1, -128($fp) +# local_main_Main_char_31 <- GET self . char +lw $t1, 16($t0) +lw $t2, -132($fp) +# Saves in local_main_Main_internal_32 data_61 +la $t2, data_61 +lw $t3, -124($fp) +# local_main_Main_internal_30 <- local_main_Main_char_31 = local_main_Main_internal_32 +move $t8, $t1 +move $t9, $t2 +loop_29: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_29 +beqz $a1, mismatch_29 +seq $v0, $a0, $a1 +beqz $v0, mismatch_29 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_29 +mismatch_29: +li $v0, 0 +j end_29 +check_29: +bnez $a1, mismatch_29 +li $v0, 1 +end_29: +move $t3, $v0 +# If local_main_Main_internal_30 goto true__1257 +sw $t0, -0($fp) +sw $t1, -128($fp) +sw $t2, -132($fp) +sw $t3, -124($fp) +bnez $t3, true__1257 +lw $t0, -0($fp) +lw $t1, -144($fp) +# local_main_Main_char_35 <- GET self . char +lw $t1, 16($t0) +lw $t2, -148($fp) +# Saves in local_main_Main_internal_36 data_62 +la $t2, data_62 +lw $t3, -140($fp) +# local_main_Main_internal_34 <- local_main_Main_char_35 = local_main_Main_internal_36 +move $t8, $t1 +move $t9, $t2 +loop_30: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_30 +beqz $a1, mismatch_30 +seq $v0, $a0, $a1 +beqz $v0, mismatch_30 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_30 +mismatch_30: +li $v0, 0 +j end_30 +check_30: +bnez $a1, mismatch_30 +li $v0, 1 +end_30: +move $t3, $v0 +# If local_main_Main_internal_34 goto true__1266 +sw $t0, -0($fp) +sw $t1, -144($fp) +sw $t2, -148($fp) +sw $t3, -140($fp) +bnez $t3, true__1266 +lw $t0, -0($fp) +lw $t1, -160($fp) +# local_main_Main_char_39 <- GET self . char +lw $t1, 16($t0) +lw $t2, -164($fp) +# Saves in local_main_Main_internal_40 data_63 +la $t2, data_63 +lw $t3, -156($fp) +# local_main_Main_internal_38 <- local_main_Main_char_39 = local_main_Main_internal_40 +move $t8, $t1 +move $t9, $t2 +loop_31: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_31 +beqz $a1, mismatch_31 +seq $v0, $a0, $a1 +beqz $v0, mismatch_31 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_31 +mismatch_31: +li $v0, 0 +j end_31 +check_31: +bnez $a1, mismatch_31 +li $v0, 1 +end_31: +move $t3, $v0 +# If local_main_Main_internal_38 goto true__1275 +sw $t0, -0($fp) +sw $t1, -160($fp) +sw $t2, -164($fp) +sw $t3, -156($fp) +bnez $t3, true__1275 +lw $t0, -0($fp) +lw $t1, -176($fp) +# local_main_Main_char_43 <- GET self . char +lw $t1, 16($t0) +lw $t2, -180($fp) +# Saves in local_main_Main_internal_44 data_64 +la $t2, data_64 +lw $t3, -172($fp) +# local_main_Main_internal_42 <- local_main_Main_char_43 = local_main_Main_internal_44 +move $t8, $t1 +move $t9, $t2 +loop_32: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_32 +beqz $a1, mismatch_32 +seq $v0, $a0, $a1 +beqz $v0, mismatch_32 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_32 +mismatch_32: +li $v0, 0 +j end_32 +check_32: +bnez $a1, mismatch_32 +li $v0, 1 +end_32: +move $t3, $v0 +# If local_main_Main_internal_42 goto true__1284 +sw $t0, -0($fp) +sw $t1, -176($fp) +sw $t2, -180($fp) +sw $t3, -172($fp) +bnez $t3, true__1284 +lw $t0, -0($fp) +lw $t1, -192($fp) +# local_main_Main_char_47 <- GET self . char +lw $t1, 16($t0) +lw $t2, -196($fp) +# Saves in local_main_Main_internal_48 data_65 +la $t2, data_65 +lw $t3, -188($fp) +# local_main_Main_internal_46 <- local_main_Main_char_47 = local_main_Main_internal_48 +move $t8, $t1 +move $t9, $t2 +loop_33: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_33 +beqz $a1, mismatch_33 +seq $v0, $a0, $a1 +beqz $v0, mismatch_33 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_33 +mismatch_33: +li $v0, 0 +j end_33 +check_33: +bnez $a1, mismatch_33 +li $v0, 1 +end_33: +move $t3, $v0 +# If local_main_Main_internal_46 goto true__1293 +sw $t0, -0($fp) +sw $t1, -192($fp) +sw $t2, -196($fp) +sw $t3, -188($fp) +bnez $t3, true__1293 +lw $t0, -0($fp) +lw $t1, -208($fp) +# local_main_Main_char_51 <- GET self . char +lw $t1, 16($t0) +lw $t2, -212($fp) +# Saves in local_main_Main_internal_52 data_66 +la $t2, data_66 +lw $t3, -204($fp) +# local_main_Main_internal_50 <- local_main_Main_char_51 = local_main_Main_internal_52 +move $t8, $t1 +move $t9, $t2 +loop_34: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_34 +beqz $a1, mismatch_34 +seq $v0, $a0, $a1 +beqz $v0, mismatch_34 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_34 +mismatch_34: +li $v0, 0 +j end_34 +check_34: +bnez $a1, mismatch_34 +li $v0, 1 +end_34: +move $t3, $v0 +# If local_main_Main_internal_50 goto true__1302 +sw $t0, -0($fp) +sw $t1, -208($fp) +sw $t2, -212($fp) +sw $t3, -204($fp) +bnez $t3, true__1302 +lw $t0, -0($fp) +lw $t1, -224($fp) +# local_main_Main_char_55 <- GET self . char +lw $t1, 16($t0) +lw $t2, -228($fp) +# Saves in local_main_Main_internal_56 data_67 +la $t2, data_67 +lw $t3, -220($fp) +# local_main_Main_internal_54 <- local_main_Main_char_55 = local_main_Main_internal_56 +move $t8, $t1 +move $t9, $t2 +loop_35: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_35 +beqz $a1, mismatch_35 +seq $v0, $a0, $a1 +beqz $v0, mismatch_35 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_35 +mismatch_35: +li $v0, 0 +j end_35 +check_35: +bnez $a1, mismatch_35 +li $v0, 1 +end_35: +move $t3, $v0 +# If local_main_Main_internal_54 goto true__1311 +sw $t0, -0($fp) +sw $t1, -224($fp) +sw $t2, -228($fp) +sw $t3, -220($fp) +bnez $t3, true__1311 +lw $t0, -236($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_A +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 48 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_value_A in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_set_var_A in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_method1_A in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_method2_A in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_method3_A in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_method4_A in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_method5_A in t9 +lw $t9, 108($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_A_A in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t0) +# Static Dispatch of the method A +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -236($fp) +# This function will consume the arguments +jal function_A_A +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -236($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -240($fp) +# local_main_Main_avar_59 <- GET self . avar +lw $t2, 20($t1) +lw $t3, -244($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_value_A +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -236($fp) +sw $t1, -0($fp) +sw $t2, -240($fp) +sw $t3, -244($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -244($fp) +# saves the return value +move $t0, $v0 +lw $t1, -236($fp) +lw $t2, -248($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_method1_A +lw $t8, 24($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -244($fp) +sw $t1, -236($fp) +sw $t2, -248($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -248($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . avar <- SET local_main_Main_internal_61 +sw $t0, 20($t1) +lw $t2, -232($fp) +# Moving local_main_Main_internal_61 to local_main_Main_internal_57 +move $t2, $t0 +sw $t2, -232($fp) +sw $t0, -248($fp) +sw $t1, -0($fp) +sw $t2, -232($fp) +j end__1311 +true__1311: +lw $t0, -0($fp) +# self . flag <- SET 0 +li $t9, 0 +sw $t9, 28($t0) +lw $t1, -232($fp) +# Moving 0 to local_main_Main_internal_57 +li $t1, 0 +sw $t1, -232($fp) +sw $t0, -0($fp) +sw $t1, -232($fp) +end__1311: +lw $t0, -232($fp) +lw $t1, -216($fp) +# Moving local_main_Main_internal_57 to local_main_Main_internal_53 +move $t1, $t0 +sw $t1, -216($fp) +sw $t0, -232($fp) +sw $t1, -216($fp) +j end__1302 +true__1302: +lw $t0, -252($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_A +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 48 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_value_A in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_set_var_A in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_method1_A in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_method2_A in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_method3_A in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_method4_A in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_method5_A in t9 +lw $t9, 108($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_A_A in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t0) +# Static Dispatch of the method A +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -252($fp) +# This function will consume the arguments +jal function_A_A +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -252($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . avar <- SET local_main_Main_internal_62 +sw $t0, 20($t1) +lw $t2, -216($fp) +# Moving local_main_Main_internal_62 to local_main_Main_internal_53 +move $t2, $t0 +sw $t2, -216($fp) +sw $t0, -252($fp) +sw $t1, -0($fp) +sw $t2, -216($fp) +end__1302: +lw $t0, -216($fp) +lw $t1, -200($fp) +# Moving local_main_Main_internal_53 to local_main_Main_internal_49 +move $t1, $t0 +sw $t1, -200($fp) +sw $t0, -216($fp) +sw $t1, -200($fp) +j end__1293 +true__1293: +lw $t0, -260($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t0, $v0 +lw $t1, -256($fp) +# Moving local_main_Main_x_64 to local_main_Main_x_63 +move $t1, $t0 +sw $t1, -256($fp) +lw $t2, -264($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_E +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 68 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_value_A in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_set_var_A in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_method1_A in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_method2_A in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_method3_A in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_method4_A in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_method5_B in t9 +lw $t9, 116($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_A_A in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_B_B in t9 +lw $t9, 112($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_method7_D in t9 +lw $t9, 136($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_D_D in t9 +lw $t9, 132($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +# Save the direction of the method function_method6_E in t9 +lw $t9, 144($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 60($v0) +# Save the direction of the method function_E_E in t9 +lw $t9, 140($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 64($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 36($t8) +sw $v0, 12($t2) +# Static Dispatch of the method E +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -260($fp) +sw $t1, -256($fp) +sw $t2, -264($fp) +# This function will consume the arguments +jal function_E_E +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -264($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -268($fp) +# local_main_Main_avar_66 <- GET self . avar +lw $t2, 20($t1) +lw $t3, -272($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_value_A +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -264($fp) +sw $t1, -0($fp) +sw $t2, -268($fp) +sw $t3, -272($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -272($fp) +# saves the return value +move $t0, $v0 +lw $t1, -264($fp) +lw $t2, -276($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_method6_E +lw $t8, 60($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -272($fp) +sw $t1, -264($fp) +sw $t2, -276($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -276($fp) +# saves the return value +move $t0, $v0 +lw $t1, -260($fp) +# Moving local_main_Main_internal_68 to local_main_Main_x_64 +move $t1, $t0 +sw $t1, -260($fp) +lw $t2, -0($fp) +lw $t3, -288($fp) +# local_main_Main_avar_71 <- GET self . avar +lw $t3, 20($t2) +lw $t4, -292($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_value_A +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -276($fp) +sw $t1, -260($fp) +sw $t2, -0($fp) +sw $t3, -288($fp) +sw $t4, -292($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -292($fp) +# saves the return value +move $t0, $v0 +lw $t1, -260($fp) +lw $t2, -300($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_value_A +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -292($fp) +sw $t1, -260($fp) +sw $t2, -300($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -300($fp) +# saves the return value +move $t0, $v0 +lw $t1, -296($fp) +# local_main_Main_internal_73 <- local_main_Main_internal_74 * 8 +li $t9, 8 +mult $t0, $t9 +mflo $t1 +lw $t2, -292($fp) +lw $t3, -284($fp) +# local_main_Main_internal_70 <- local_main_Main_internal_72 - local_main_Main_internal_73 +sub $t3, $t2, $t1 +lw $t4, -280($fp) +# Moving local_main_Main_internal_70 to local_main_Main_r_69 +move $t4, $t3 +sw $t4, -280($fp) +lw $t5, -304($fp) +# Saves in local_main_Main_internal_75 data_68 +la $t5, data_68 +lw $t6, -0($fp) +lw $t7, -308($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t6) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t5, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t6, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -300($fp) +sw $t1, -296($fp) +sw $t2, -292($fp) +sw $t3, -284($fp) +sw $t4, -280($fp) +sw $t5, -304($fp) +sw $t6, -0($fp) +sw $t7, -308($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -308($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -312($fp) +# local_main_Main_avar_77 <- GET self . avar +lw $t2, 20($t1) +lw $t3, -316($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_print_Main +lw $t8, 52($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -308($fp) +sw $t1, -0($fp) +sw $t2, -312($fp) +sw $t3, -316($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -316($fp) +# saves the return value +move $t0, $v0 +lw $t1, -320($fp) +# Saves in local_main_Main_internal_79 data_69 +la $t1, data_69 +lw $t2, -0($fp) +lw $t3, -324($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -316($fp) +sw $t1, -320($fp) +sw $t2, -0($fp) +sw $t3, -324($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -324($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -328($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_print_Main +lw $t8, 52($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t3, -260($fp) +sw $t3, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -324($fp) +sw $t1, -0($fp) +sw $t2, -328($fp) +sw $t3, -260($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -328($fp) +# saves the return value +move $t0, $v0 +lw $t1, -332($fp) +# Saves in local_main_Main_internal_82 data_70 +la $t1, data_70 +lw $t2, -0($fp) +lw $t3, -336($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -328($fp) +sw $t1, -332($fp) +sw $t2, -0($fp) +sw $t3, -336($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -336($fp) +# saves the return value +move $t0, $v0 +lw $t1, -344($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 12 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_A2I +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 12 +sw $t9, 4($v0) +move $t1, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 40 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_c2i_A2I in t9 +lw $t9, 148($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_i2c_A2I in t9 +lw $t9, 152($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_a2i_A2I in t9 +lw $t9, 156($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_a2i_aux_A2I in t9 +lw $t9, 160($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_i2a_A2I in t9 +lw $t9, 164($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_i2a_aux_A2I in t9 +lw $t9, 168($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +sw $v0, 8($t1) +# Adding Type Info addr +la $t8, types +lw $v0, 40($t8) +sw $v0, 12($t1) +lw $t2, -340($fp) +# Moving local_main_Main_internal_85 to local_main_Main_a_84 +move $t2, $t1 +sw $t2, -340($fp) +lw $t3, -348($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_i2a_A2I +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t4, -280($fp) +sw $t4, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -336($fp) +sw $t1, -344($fp) +sw $t2, -340($fp) +sw $t3, -348($fp) +sw $t4, -280($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -348($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -352($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -348($fp) +sw $t1, -0($fp) +sw $t2, -352($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -352($fp) +# saves the return value +move $t0, $v0 +lw $t1, -356($fp) +# Saves in local_main_Main_internal_88 data_71 +la $t1, data_71 +lw $t2, -0($fp) +lw $t3, -360($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -352($fp) +sw $t1, -356($fp) +sw $t2, -0($fp) +sw $t3, -360($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -360($fp) +# saves the return value +move $t0, $v0 +lw $t1, -364($fp) +# Moving local_main_Main_internal_89 to local_main_Main_internal_90 +move $t1, $t0 +sw $t1, -364($fp) +lw $t2, -368($fp) +# Moving local_main_Main_internal_90 to local_main_Main_internal_91 +move $t2, $t1 +sw $t2, -368($fp) +lw $t3, -260($fp) +lw $t4, -0($fp) +# self . avar <- SET local_main_Main_x_64 +sw $t3, 20($t4) +lw $t5, -372($fp) +# Moving local_main_Main_x_64 to local_main_Main_internal_92 +move $t5, $t3 +sw $t5, -372($fp) +lw $t6, -200($fp) +# Moving local_main_Main_internal_92 to local_main_Main_internal_49 +move $t6, $t5 +sw $t6, -200($fp) +sw $t0, -360($fp) +sw $t1, -364($fp) +sw $t2, -368($fp) +sw $t3, -260($fp) +sw $t4, -0($fp) +sw $t5, -372($fp) +sw $t6, -200($fp) +end__1293: +lw $t0, -200($fp) +lw $t1, -184($fp) +# Moving local_main_Main_internal_49 to local_main_Main_internal_45 +move $t1, $t0 +sw $t1, -184($fp) +sw $t0, -200($fp) +sw $t1, -184($fp) +j end__1284 +true__1284: +lw $t0, -376($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_D +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 60 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_value_A in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_set_var_A in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_method1_A in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_method2_A in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_method3_A in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_method4_A in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_method5_B in t9 +lw $t9, 116($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_A_A in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_B_B in t9 +lw $t9, 112($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_method7_D in t9 +lw $t9, 136($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_D_D in t9 +lw $t9, 132($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 32($t8) +sw $v0, 12($t0) +# Static Dispatch of the method D +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -376($fp) +# This function will consume the arguments +jal function_D_D +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -376($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -380($fp) +# local_main_Main_avar_94 <- GET self . avar +lw $t2, 20($t1) +lw $t3, -384($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_value_A +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -376($fp) +sw $t1, -0($fp) +sw $t2, -380($fp) +sw $t3, -384($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -384($fp) +# saves the return value +move $t0, $v0 +lw $t1, -376($fp) +lw $t2, -388($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_method7_D +lw $t8, 52($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -384($fp) +sw $t1, -376($fp) +sw $t2, -388($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -388($fp) +# saves the return value +move $t0, $v0 +# If local_main_Main_internal_96 goto true__1442 +sw $t0, -388($fp) +bnez $t0, true__1442 +lw $t0, -396($fp) +# Saves in local_main_Main_internal_98 data_72 +la $t0, data_72 +lw $t1, -0($fp) +lw $t2, -400($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -396($fp) +sw $t1, -0($fp) +sw $t2, -400($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -400($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -404($fp) +# local_main_Main_avar_100 <- GET self . avar +lw $t2, 20($t1) +lw $t3, -408($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_print_Main +lw $t8, 52($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -400($fp) +sw $t1, -0($fp) +sw $t2, -404($fp) +sw $t3, -408($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -408($fp) +# saves the return value +move $t0, $v0 +lw $t1, -412($fp) +# Saves in local_main_Main_internal_102 data_73 +la $t1, data_73 +lw $t2, -0($fp) +lw $t3, -416($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -408($fp) +sw $t1, -412($fp) +sw $t2, -0($fp) +sw $t3, -416($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -416($fp) +# saves the return value +move $t0, $v0 +lw $t1, -420($fp) +# Moving local_main_Main_internal_103 to local_main_Main_internal_104 +move $t1, $t0 +sw $t1, -420($fp) +lw $t2, -392($fp) +# Moving local_main_Main_internal_104 to local_main_Main_internal_97 +move $t2, $t1 +sw $t2, -392($fp) +sw $t0, -416($fp) +sw $t1, -420($fp) +sw $t2, -392($fp) +j end__1442 +true__1442: +lw $t0, -424($fp) +# Saves in local_main_Main_internal_105 data_74 +la $t0, data_74 +lw $t1, -0($fp) +lw $t2, -428($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -424($fp) +sw $t1, -0($fp) +sw $t2, -428($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -428($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -432($fp) +# local_main_Main_avar_107 <- GET self . avar +lw $t2, 20($t1) +lw $t3, -436($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_print_Main +lw $t8, 52($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -428($fp) +sw $t1, -0($fp) +sw $t2, -432($fp) +sw $t3, -436($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -436($fp) +# saves the return value +move $t0, $v0 +lw $t1, -440($fp) +# Saves in local_main_Main_internal_109 data_75 +la $t1, data_75 +lw $t2, -0($fp) +lw $t3, -444($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -436($fp) +sw $t1, -440($fp) +sw $t2, -0($fp) +sw $t3, -444($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -444($fp) +# saves the return value +move $t0, $v0 +lw $t1, -448($fp) +# Moving local_main_Main_internal_110 to local_main_Main_internal_111 +move $t1, $t0 +sw $t1, -448($fp) +lw $t2, -392($fp) +# Moving local_main_Main_internal_111 to local_main_Main_internal_97 +move $t2, $t1 +sw $t2, -392($fp) +sw $t0, -444($fp) +sw $t1, -448($fp) +sw $t2, -392($fp) +end__1442: +lw $t0, -392($fp) +lw $t1, -184($fp) +# Moving local_main_Main_internal_97 to local_main_Main_internal_45 +move $t1, $t0 +sw $t1, -184($fp) +sw $t0, -392($fp) +sw $t1, -184($fp) +end__1284: +lw $t0, -184($fp) +lw $t1, -168($fp) +# Moving local_main_Main_internal_45 to local_main_Main_internal_41 +move $t1, $t0 +sw $t1, -168($fp) +sw $t0, -184($fp) +sw $t1, -168($fp) +j end__1275 +true__1275: +lw $t0, -452($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_C +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 60 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_value_A in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_set_var_A in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_method1_A in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_method2_A in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_method3_A in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_method4_A in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_method5_C in t9 +lw $t9, 128($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_A_A in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_B_B in t9 +lw $t9, 112($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_method6_C in t9 +lw $t9, 124($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_C_C in t9 +lw $t9, 120($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 28($t8) +sw $v0, 12($t0) +# Static Dispatch of the method C +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -452($fp) +# This function will consume the arguments +jal function_C_C +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -452($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -456($fp) +# local_main_Main_avar_113 <- GET self . avar +lw $t2, 20($t1) +lw $t3, -460($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_value_A +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -452($fp) +sw $t1, -0($fp) +sw $t2, -456($fp) +sw $t3, -460($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -460($fp) +# saves the return value +move $t0, $v0 +lw $t1, -464($fp) +# Static Dispatch of the method method5 +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t2, -452($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -460($fp) +sw $t1, -464($fp) +sw $t2, -452($fp) +# This function will consume the arguments +jal function_method5_C +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -464($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . avar <- SET local_main_Main_internal_115 +sw $t0, 20($t1) +lw $t2, -168($fp) +# Moving local_main_Main_internal_115 to local_main_Main_internal_41 +move $t2, $t0 +sw $t2, -168($fp) +sw $t0, -464($fp) +sw $t1, -0($fp) +sw $t2, -168($fp) +end__1275: +lw $t0, -168($fp) +lw $t1, -152($fp) +# Moving local_main_Main_internal_41 to local_main_Main_internal_37 +move $t1, $t0 +sw $t1, -152($fp) +sw $t0, -168($fp) +sw $t1, -152($fp) +j end__1266 +true__1266: +lw $t0, -468($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_C +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 60 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_value_A in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_set_var_A in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_method1_A in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_method2_A in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_method3_A in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_method4_A in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_method5_C in t9 +lw $t9, 128($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_A_A in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_B_B in t9 +lw $t9, 112($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_method6_C in t9 +lw $t9, 124($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_C_C in t9 +lw $t9, 120($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 28($t8) +sw $v0, 12($t0) +# Static Dispatch of the method C +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -468($fp) +# This function will consume the arguments +jal function_C_C +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -468($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -472($fp) +# local_main_Main_avar_117 <- GET self . avar +lw $t2, 20($t1) +lw $t3, -476($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_value_A +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -468($fp) +sw $t1, -0($fp) +sw $t2, -472($fp) +sw $t3, -476($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -476($fp) +# saves the return value +move $t0, $v0 +lw $t1, -480($fp) +# Static Dispatch of the method method5 +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t2, -468($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -476($fp) +sw $t1, -480($fp) +sw $t2, -468($fp) +# This function will consume the arguments +jal function_method5_B +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -480($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . avar <- SET local_main_Main_internal_119 +sw $t0, 20($t1) +lw $t2, -152($fp) +# Moving local_main_Main_internal_119 to local_main_Main_internal_37 +move $t2, $t0 +sw $t2, -152($fp) +sw $t0, -480($fp) +sw $t1, -0($fp) +sw $t2, -152($fp) +end__1266: +lw $t0, -152($fp) +lw $t1, -136($fp) +# Moving local_main_Main_internal_37 to local_main_Main_internal_33 +move $t1, $t0 +sw $t1, -136($fp) +sw $t0, -152($fp) +sw $t1, -136($fp) +j end__1257 +true__1257: +lw $t0, -484($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_C +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 60 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_value_A in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_set_var_A in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_method1_A in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_method2_A in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_method3_A in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_method4_A in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_method5_C in t9 +lw $t9, 128($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_A_A in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_B_B in t9 +lw $t9, 112($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_method6_C in t9 +lw $t9, 124($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_C_C in t9 +lw $t9, 120($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 28($t8) +sw $v0, 12($t0) +# Static Dispatch of the method C +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -484($fp) +# This function will consume the arguments +jal function_C_C +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -484($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -488($fp) +# local_main_Main_avar_121 <- GET self . avar +lw $t2, 20($t1) +lw $t3, -492($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_value_A +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -484($fp) +sw $t1, -0($fp) +sw $t2, -488($fp) +sw $t3, -492($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -492($fp) +# saves the return value +move $t0, $v0 +lw $t1, -496($fp) +# Static Dispatch of the method method5 +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t2, -484($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -492($fp) +sw $t1, -496($fp) +sw $t2, -484($fp) +# This function will consume the arguments +jal function_method5_A +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -496($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . avar <- SET local_main_Main_internal_123 +sw $t0, 20($t1) +lw $t2, -136($fp) +# Moving local_main_Main_internal_123 to local_main_Main_internal_33 +move $t2, $t0 +sw $t2, -136($fp) +sw $t0, -496($fp) +sw $t1, -0($fp) +sw $t2, -136($fp) +end__1257: +lw $t0, -136($fp) +lw $t1, -120($fp) +# Moving local_main_Main_internal_33 to local_main_Main_internal_29 +move $t1, $t0 +sw $t1, -120($fp) +sw $t0, -136($fp) +sw $t1, -120($fp) +j end__1248 +true__1248: +lw $t0, -500($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_A +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 48 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_value_A in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_set_var_A in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_method1_A in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_method2_A in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_method3_A in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_method4_A in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_method5_A in t9 +lw $t9, 108($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_A_A in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t0) +# Static Dispatch of the method A +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -500($fp) +# This function will consume the arguments +jal function_A_A +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -500($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -504($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_get_int_Main +lw $t8, 40($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -500($fp) +sw $t1, -0($fp) +sw $t2, -504($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -504($fp) +# saves the return value +move $t0, $v0 +lw $t1, -500($fp) +lw $t2, -508($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_set_var_A +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -504($fp) +sw $t1, -500($fp) +sw $t2, -508($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -508($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . a_var <- SET local_main_Main_internal_126 +sw $t0, 24($t1) +lw $t2, -512($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_D +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 60 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_value_A in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_set_var_A in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_method1_A in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_method2_A in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_method3_A in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_method4_A in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_method5_B in t9 +lw $t9, 116($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_A_A in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_B_B in t9 +lw $t9, 112($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_method7_D in t9 +lw $t9, 136($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_D_D in t9 +lw $t9, 132($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 32($t8) +sw $v0, 12($t2) +# Static Dispatch of the method D +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -508($fp) +sw $t1, -0($fp) +sw $t2, -512($fp) +# This function will consume the arguments +jal function_D_D +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -512($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -516($fp) +# local_main_Main_avar_128 <- GET self . avar +lw $t2, 20($t1) +lw $t3, -520($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_value_A +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -512($fp) +sw $t1, -0($fp) +sw $t2, -516($fp) +sw $t3, -520($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -520($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -524($fp) +# local_main_Main_a_var_130 <- GET self . a_var +lw $t2, 24($t1) +lw $t3, -528($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_value_A +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -520($fp) +sw $t1, -0($fp) +sw $t2, -524($fp) +sw $t3, -528($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -528($fp) +# saves the return value +move $t0, $v0 +lw $t1, -512($fp) +lw $t2, -532($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_method4_A +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t3, -520($fp) +sw $t3, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -528($fp) +sw $t1, -512($fp) +sw $t2, -532($fp) +sw $t3, -520($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -532($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . avar <- SET local_main_Main_internal_132 +sw $t0, 20($t1) +lw $t2, -536($fp) +# Moving local_main_Main_internal_132 to local_main_Main_internal_133 +move $t2, $t0 +sw $t2, -536($fp) +lw $t3, -120($fp) +# Moving local_main_Main_internal_133 to local_main_Main_internal_29 +move $t3, $t2 +sw $t3, -120($fp) +sw $t0, -532($fp) +sw $t1, -0($fp) +sw $t2, -536($fp) +sw $t3, -120($fp) +end__1248: +lw $t0, -120($fp) +lw $t1, -104($fp) +# Moving local_main_Main_internal_29 to local_main_Main_internal_25 +move $t1, $t0 +sw $t1, -104($fp) +sw $t0, -120($fp) +sw $t1, -104($fp) +j end__1239 +true__1239: +lw $t0, -0($fp) +lw $t1, -540($fp) +# local_main_Main_avar_134 <- GET self . avar +lw $t1, 20($t0) +lw $t2, -548($fp) +# local_main_Main_internal_136 <- Type of local_main_Main_avar_134 +lw $t2, 0($t1) +lw $t3, -552($fp) +# Saves in local_main_Main_internal_137 data_0 +la $t3, data_0 +# local_main_Main_internal_136 <- local_main_Main_internal_136 = local_main_Main_internal_137 +move $t8, $t2 +move $t9, $t3 +loop_36: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_36 +beqz $a1, mismatch_36 +seq $v0, $a0, $a1 +beqz $v0, mismatch_36 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_36 +mismatch_36: +li $v0, 0 +j end_36 +check_36: +bnez $a1, mismatch_36 +li $v0, 1 +end_36: +move $t2, $v0 +# If local_main_Main_internal_136 goto error__1585 +sw $t0, -0($fp) +sw $t1, -540($fp) +sw $t2, -548($fp) +sw $t3, -552($fp) +bnez $t2, error__1585 +lw $t0, -540($fp) +lw $t1, -556($fp) +la $t9, type_C +lw $v0, 12($t0) +loop_37: +move $t8, $v0 +beqz $t8, false_37 +lw $v1, 0($t8) +beq $t9, $v1, true_37 +lw $v0, 4($t8) +j loop_37 +true_37: +li $t1, 1 +j end_37 +false_37: +li $t1, 0 +end_37: +# If not local_main_Main_internal_138 goto next__1591_0 +sw $t0, -540($fp) +sw $t1, -556($fp) +beqz $t1, next__1591_0 +lw $t0, -540($fp) +lw $t1, -560($fp) +# Moving local_main_Main_avar_134 to local_main_Main_c_139 +move $t1, $t0 +sw $t1, -560($fp) +lw $t2, -564($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_value_A +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -540($fp) +sw $t1, -560($fp) +sw $t2, -564($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -564($fp) +# saves the return value +move $t0, $v0 +lw $t1, -560($fp) +lw $t2, -568($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_method6_C +lw $t8, 52($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -564($fp) +sw $t1, -560($fp) +sw $t2, -568($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -568($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . avar <- SET local_main_Main_internal_141 +sw $t0, 20($t1) +lw $t2, -544($fp) +# Moving local_main_Main_internal_141 to local_main_Main_internal_135 +move $t2, $t0 +sw $t2, -544($fp) +sw $t0, -568($fp) +sw $t1, -0($fp) +sw $t2, -544($fp) +j end__1585 +next__1591_0: +lw $t0, -540($fp) +lw $t1, -572($fp) +la $t9, type_A +lw $v0, 12($t0) +loop_38: +move $t8, $v0 +beqz $t8, false_38 +lw $v1, 0($t8) +beq $t9, $v1, true_38 +lw $v0, 4($t8) +j loop_38 +true_38: +li $t1, 1 +j end_38 +false_38: +li $t1, 0 +end_38: +# If not local_main_Main_internal_142 goto next__1607_1 +sw $t0, -540($fp) +sw $t1, -572($fp) +beqz $t1, next__1607_1 +lw $t0, -540($fp) +lw $t1, -576($fp) +# Moving local_main_Main_avar_134 to local_main_Main_a_143 +move $t1, $t0 +sw $t1, -576($fp) +lw $t2, -580($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_value_A +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -540($fp) +sw $t1, -576($fp) +sw $t2, -580($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -580($fp) +# saves the return value +move $t0, $v0 +lw $t1, -576($fp) +lw $t2, -584($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_method3_A +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -580($fp) +sw $t1, -576($fp) +sw $t2, -584($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -584($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . avar <- SET local_main_Main_internal_145 +sw $t0, 20($t1) +lw $t2, -544($fp) +# Moving local_main_Main_internal_145 to local_main_Main_internal_135 +move $t2, $t0 +sw $t2, -544($fp) +sw $t0, -584($fp) +sw $t1, -0($fp) +sw $t2, -544($fp) +j end__1585 +next__1607_1: +lw $t0, -540($fp) +lw $t1, -588($fp) +la $t9, type_Object +lw $v0, 12($t0) +loop_39: +move $t8, $v0 +beqz $t8, false_39 +lw $v1, 0($t8) +beq $t9, $v1, true_39 +lw $v0, 4($t8) +j loop_39 +true_39: +li $t1, 1 +j end_39 +false_39: +li $t1, 0 +end_39: +# If not local_main_Main_internal_146 goto next__1623_2 +sw $t0, -540($fp) +sw $t1, -588($fp) +beqz $t1, next__1623_2 +lw $t0, -540($fp) +lw $t1, -592($fp) +# Moving local_main_Main_avar_134 to local_main_Main_o_147 +move $t1, $t0 +sw $t1, -592($fp) +lw $t2, -596($fp) +# Saves in local_main_Main_internal_148 data_76 +la $t2, data_76 +lw $t3, -0($fp) +lw $t4, -600($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -540($fp) +sw $t1, -592($fp) +sw $t2, -596($fp) +sw $t3, -0($fp) +sw $t4, -600($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -600($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -604($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_abort_Object +lw $t8, 4($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -600($fp) +sw $t1, -0($fp) +sw $t2, -604($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -604($fp) +# saves the return value +move $t0, $v0 +lw $t1, -608($fp) +# Moving 0 to local_main_Main_internal_151 +li $t1, 0 +sw $t1, -608($fp) +lw $t2, -544($fp) +# Moving local_main_Main_internal_151 to local_main_Main_internal_135 +move $t2, $t1 +sw $t2, -544($fp) +sw $t0, -604($fp) +sw $t1, -608($fp) +sw $t2, -544($fp) +j end__1585 +next__1623_2: +la $a0, case_error +j .raise +error__1585: +la $a0, case_void_error +j .raise +end__1585: +lw $t0, -544($fp) +lw $t1, -104($fp) +# Moving local_main_Main_internal_135 to local_main_Main_internal_25 +move $t1, $t0 +sw $t1, -104($fp) +sw $t0, -544($fp) +sw $t1, -104($fp) +end__1239: +lw $t0, -104($fp) +lw $t1, -88($fp) +# Moving local_main_Main_internal_25 to local_main_Main_internal_21 +move $t1, $t0 +sw $t1, -88($fp) +sw $t0, -104($fp) +sw $t1, -88($fp) +j end__1230 +true__1230: +lw $t0, -612($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_A +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 48 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_value_A in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_set_var_A in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_method1_A in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_method2_A in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_method3_A in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_method4_A in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_method5_A in t9 +lw $t9, 108($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_A_A in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t0) +# Static Dispatch of the method A +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -612($fp) +# This function will consume the arguments +jal function_A_A +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -612($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -616($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_get_int_Main +lw $t8, 40($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -612($fp) +sw $t1, -0($fp) +sw $t2, -616($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -616($fp) +# saves the return value +move $t0, $v0 +lw $t1, -612($fp) +lw $t2, -620($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_set_var_A +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -616($fp) +sw $t1, -612($fp) +sw $t2, -620($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -620($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . a_var <- SET local_main_Main_internal_154 +sw $t0, 24($t1) +lw $t2, -624($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_B +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 52 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_value_A in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_set_var_A in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_method1_A in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_method2_A in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_method3_A in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_method4_A in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_method5_B in t9 +lw $t9, 116($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_A_A in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_B_B in t9 +lw $t9, 112($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t2) +# Static Dispatch of the method B +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -620($fp) +sw $t1, -0($fp) +sw $t2, -624($fp) +# This function will consume the arguments +jal function_B_B +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -624($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -628($fp) +# local_main_Main_avar_156 <- GET self . avar +lw $t2, 20($t1) +lw $t3, -632($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_value_A +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -624($fp) +sw $t1, -0($fp) +sw $t2, -628($fp) +sw $t3, -632($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -632($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -636($fp) +# local_main_Main_a_var_158 <- GET self . a_var +lw $t2, 24($t1) +lw $t3, -640($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_value_A +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -632($fp) +sw $t1, -0($fp) +sw $t2, -636($fp) +sw $t3, -640($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -640($fp) +# saves the return value +move $t0, $v0 +lw $t1, -624($fp) +lw $t2, -644($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_method2_A +lw $t8, 28($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t3, -632($fp) +sw $t3, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -640($fp) +sw $t1, -624($fp) +sw $t2, -644($fp) +sw $t3, -632($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -644($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . avar <- SET local_main_Main_internal_160 +sw $t0, 20($t1) +lw $t2, -648($fp) +# Moving local_main_Main_internal_160 to local_main_Main_internal_161 +move $t2, $t0 +sw $t2, -648($fp) +lw $t3, -88($fp) +# Moving local_main_Main_internal_161 to local_main_Main_internal_21 +move $t3, $t2 +sw $t3, -88($fp) +sw $t0, -644($fp) +sw $t1, -0($fp) +sw $t2, -648($fp) +sw $t3, -88($fp) +end__1230: +lw $t0, -88($fp) +lw $t1, -652($fp) +# Moving local_main_Main_internal_21 to local_main_Main_internal_162 +move $t1, $t0 +sw $t1, -652($fp) +lw $t2, -8($fp) +# Moving local_main_Main_internal_162 to local_main_Main_internal_1 +move $t2, $t1 +sw $t2, -8($fp) +sw $t0, -88($fp) +sw $t1, -652($fp) +sw $t2, -8($fp) +j start__1171 +end__1171: +lw $t0, -8($fp) +lw $t1, -656($fp) +# Moving local_main_Main_internal_1 to local_main_Main_internal_163 +move $t1, $t0 +sw $t1, -656($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -656($fp) +# Removing all locals from stack +addiu $sp, $sp, 660 +jr $ra + +# Raise exception method +.raise: +li $v0, 4 +syscall +li $v0, 17 +li $a0, 1 +syscall + +.data +abort_msg: .asciiz "Abort called from class " +new_line: .asciiz " +" +string_abort: .asciiz "Abort called from class String +" +int_abort: .asciiz "Abort called from class Int +" +bool_abort: .asciiz "Abort called from class Bool +" +type_Object: .asciiz "Object" +type_IO: .asciiz "IO" +type_String: .asciiz "String" +type_Int: .asciiz "Int" +type_Bool: .asciiz "Bool" +type_A: .asciiz "A" +type_B: .asciiz "B" +type_C: .asciiz "C" +type_D: .asciiz "D" +type_E: .asciiz "E" +type_A2I: .asciiz "A2I" +type_Main: .asciiz "Main" +type_Void: .asciiz "Void" +types: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +data_0: .asciiz "Void" +data_1: .asciiz "0" +data_2: .asciiz "1" +data_3: .asciiz "2" +data_4: .asciiz "3" +data_5: .asciiz "4" +data_6: .asciiz "5" +data_7: .asciiz "6" +data_8: .asciiz "7" +data_9: .asciiz "8" +data_10: .asciiz "9" +data_11: .asciiz "" +data_12: .asciiz "9" +data_13: .asciiz "8" +data_14: .asciiz "7" +data_15: .asciiz "6" +data_16: .asciiz "5" +data_17: .asciiz "4" +data_18: .asciiz "3" +data_19: .asciiz "2" +data_20: .asciiz "1" +data_21: .asciiz "0" +data_22: .asciiz "-" +data_23: .asciiz "+" +data_24: .asciiz "-" +data_25: .asciiz "0" +data_26: .asciiz "" +data_27: .asciiz "" +data_28: .asciiz " + To add a number to " +data_29: .asciiz "...enter a: +" +data_30: .asciiz " To negate " +data_31: .asciiz "...enter b: +" +data_32: .asciiz " To find the difference between " +data_33: .asciiz "and another number...enter c: +" +data_34: .asciiz " To find the factorial of " +data_35: .asciiz "...enter d: +" +data_36: .asciiz " To square " +data_37: .asciiz "...enter e: +" +data_38: .asciiz " To cube " +data_39: .asciiz "...enter f: +" +data_40: .asciiz " To find out if " +data_41: .asciiz "is a multiple of 3...enter g: +" +data_42: .asciiz " To divide " +data_43: .asciiz "by 8...enter h: +" +data_44: .asciiz " To get a new number...enter j: +" +data_45: .asciiz " To quit...enter q: + +" +data_46: .asciiz " +" +data_47: .asciiz "Please enter a number... " +data_48: .asciiz "Class type is now E +" +data_49: .asciiz "Class type is now C +" +data_50: .asciiz "Class type is now D +" +data_51: .asciiz "Class type is now B +" +data_52: .asciiz "Class type is now A +" +data_53: .asciiz "Oooops +" +data_54: .asciiz " " +data_55: .asciiz "number " +data_56: .asciiz "is odd! +" +data_57: .asciiz "is even! +" +data_58: .asciiz "a" +data_59: .asciiz "b" +data_60: .asciiz "c" +data_61: .asciiz "d" +data_62: .asciiz "e" +data_63: .asciiz "f" +data_64: .asciiz "g" +data_65: .asciiz "h" +data_66: .asciiz "j" +data_67: .asciiz "q" +data_68: .asciiz "number " +data_69: .asciiz "is equal to " +data_70: .asciiz "times 8 with a remainder of " +data_71: .asciiz " +" +data_72: .asciiz "number " +data_73: .asciiz "is not divisible by 3. +" +data_74: .asciiz "number " +data_75: .asciiz "is divisible by 3. +" +data_76: .asciiz "Oooops +" +methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +zero_error: .asciiz "Division by zero error +" +case_void_error: .asciiz "Case on void error +" +dispatch_error: .asciiz "Dispatch on void error +" +case_error: .asciiz "Case statement without a matching branch error +" +index_error: .asciiz "Substring out of range error +" +heap_error: .asciiz "Heap overflow error +" \ No newline at end of file diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips new file mode 100644 index 00000000..5ed7b716 --- /dev/null +++ b/tests/codegen/atoi.mips @@ -0,0 +1,3396 @@ +.text +.globl main +main: +# Save types directions in the types array +la $t9, types +# Save space to locate the type info +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_String +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 0($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Int +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 4($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Object +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 8($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Bool +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 12($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_IO +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 16($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_A2I +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 20($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Main +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 24($t9) +# Copying parents +lw $v0, 0($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 4($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 8($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 12($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 16($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +lw $v0, 20($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +lw $v0, 24($t9) +lw $t8, 16($t9) +sw $t8, 4($v0) +# Save method directions in the methods array +la $v0, methods +la $t9, entry +sw $t9, 0($v0) +la $t9, function_abort_Object +sw $t9, 4($v0) +la $t9, function_type_name_Object +sw $t9, 8($v0) +la $t9, function_copy_Object +sw $t9, 12($v0) +la $t9, function_out_string_IO +sw $t9, 16($v0) +la $t9, function_out_int_IO +sw $t9, 20($v0) +la $t9, function_in_int_IO +sw $t9, 24($v0) +la $t9, function_in_string_IO +sw $t9, 28($v0) +la $t9, function_length_String +sw $t9, 32($v0) +la $t9, function_concat_String +sw $t9, 36($v0) +la $t9, function_substr_String +sw $t9, 40($v0) +la $t9, function_type_name_String +sw $t9, 44($v0) +la $t9, function_copy_String +sw $t9, 48($v0) +la $t9, function_type_name_Int +sw $t9, 52($v0) +la $t9, function_copy_Int +sw $t9, 56($v0) +la $t9, function_type_name_Bool +sw $t9, 60($v0) +la $t9, function_copy_Bool +sw $t9, 64($v0) +la $t9, function_abort_String +sw $t9, 68($v0) +la $t9, function_abort_Int +sw $t9, 72($v0) +la $t9, function_abort_Bool +sw $t9, 76($v0) +la $t9, function_c2i_A2I +sw $t9, 80($v0) +la $t9, function_i2c_A2I +sw $t9, 84($v0) +la $t9, function_a2i_A2I +sw $t9, 88($v0) +la $t9, function_a2i_aux_A2I +sw $t9, 92($v0) +la $t9, function_i2a_A2I +sw $t9, 96($v0) +la $t9, function_i2a_aux_A2I +sw $t9, 100($v0) +la $t9, function_main_Main +sw $t9, 104($v0) + +entry: +# Gets the params from the stack +move $fp, $sp +# Gets the frame pointer from the stack +# Updates stack pointer pushing local__internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local__internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 12 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Main +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 12 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 36 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_main_Main in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t0) +lw $t1, -4($fp) +# Static Dispatch of the method main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# This function will consume the arguments +jal function_main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +li $v0, 0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Object_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_abort_Object_self_0 +move $t1, $t0 +sw $t1, -4($fp) +# Exiting the program +li $t8, 0 +# Printing abort message +li $v0, 4 +la $a0, abort_msg +syscall +li $v0, 4 +lw $a0, 0($t0) +syscall +li $v0, 4 +la $a0, new_line +syscall +li $v0, 17 +move $a0, $t8 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_type_name_Object_result_0 <- Type of self +lw $t1, 0($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +lw $t9, 4($t0) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +move $a0, $t9 +syscall +move $t1, $v0 +# Loop to copy every field of the previous object +# t8 the register to loop +li $t8, 0 +loop_0: +# In t9 is stored the size of the object +bge $t8, $t9, exit_0 +lw $a0, ($t0) +sw $a0, ($v0) +addi $v0, $v0, 4 +addi $t0, $t0, 4 +# Increase loop counter +addi $t8, $t8, 4 +j loop_0 +exit_0: +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_out_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_string_String_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_string_String_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing a string +li $v0, 4 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_out_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value number +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_int_IO_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_int_IO_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing an int +li $v0, 1 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_in_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_int_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Reading a int +li $v0, 5 +syscall +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_in_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_string_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t0, $v0 +# Reading a string +# Putting buffer in a0 +move $a0, $t0 +# Putting length of string in a1 +li $a1, 356 +li $v0, 8 +syscall +# Walks to eliminate the newline +move $t9, $t0 +start_1: +lb $t8, 0($t9) +beqz $t8, end_1 +add $t9, $t9, 1 +j start_1 +end_1: +addiu $t9, $t9, -1 +sb $0, ($t9) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_length_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_length_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +move $t8, $t0 +# Determining the length of a string +loop_2: +lb $t9, 0($t8) +beq $t9, $zero, end_2 +addi $t8, $t8, 1 +j loop_2 +end_2: +sub $t1, $t8, $t0 +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_concat_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_concat_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -8($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +# Copy the first string to dest +move $a0, $t0 +move $a1, $t2 +sw $ra, ($sp) +addiu $sp, $sp, -4 +jal strcopier +# Concatenate second string on result buffer +move $a0, $t1 +move $a1, $v0 +jal strcopier +sb $0, 0($v0) +addiu $sp, $sp, 4 +lw $ra, ($sp) +j finish_3 +# Definition of strcopier +strcopier: +# In a0 is the source and in a1 is the destination +loop_3: +lb $t8, ($a0) +beq $t8, $zero, end_3 +addiu $a0, $a0, 1 +sb $t8, ($a1) +addiu $a1, $a1, 1 +b loop_3 +end_3: +move $v0, $a1 +jr $ra +finish_3: +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_substr_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value begin +addiu $fp, $fp, 4 +# Pops the register with the param value end +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_substr_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -12($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +lw $t3, -8($fp) +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t3 +start_4: +lb $t9, 0($t8) +beqz $t9, error_4 +addi $v0, 1 +bgt $v0, $t0, end_len_4 +addi $t8, 1 +j start_4 +end_len_4: +# Saving dest to iterate over him +move $v0, $t2 +loop_4: +sub $t9, $v0, $t2 +beq $t9, $t1, end_4 +lb $t9, 0($t8) +beqz $t9, error_4 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_4 +error_4: +la $a0, index_error +li $v0, 4 +move $a0, $t3 +syscall +li $v0, 1 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t1 +syscall +j .raise +end_4: +sb $0, 0($v0) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_String_result_0 type_String +la $t0, type_String +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_String_result_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +move $t8, $t0 +# Determining the length of a string +loop_5: +lb $t9, 0($t8) +beq $t9, $zero, end_5 +addi $t8, $t8, 1 +j loop_5 +end_5: +sub $t1, $t8, $t0 +lw $t2, -12($fp) +# local_copy_String_result_2 <- local_copy_String_result_1 - 1 +addi $t2, $t1, -1 +lw $t3, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t3, $v0 +li $t8, 0 +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t0 +start_6: +lb $t9, 0($t8) +beqz $t9, error_6 +addi $v0, 1 +bgt $v0, $t8, end_len_6 +addi $t8, 1 +j start_6 +end_len_6: +# Saving dest to iterate over him +move $v0, $t3 +loop_6: +sub $t9, $v0, $t3 +beq $t9, $t2, end_6 +lb $t9, 0($t8) +beqz $t9, error_6 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_6 +error_6: +la $a0, index_error +li $v0, 4 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t8 +syscall +li $v0, 1 +move $a0, $t2 +syscall +j .raise +end_6: +sb $0, 0($v0) +move $v0, $t3 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +sw $t3, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Int_result_0 type_Int +la $t0, type_Int +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_Int_result_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Bool_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Bool_result_0 type_Bool +la $t0, type_Bool +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_result_Bool_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_result_Bool_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_String_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self string_abort +la $t0, string_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Int_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self int_abort +la $t0, int_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Bool_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self bool_abort +la $t0, bool_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_c2i_A2I: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value char +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_c2i_A2I_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_15 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_16 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_17 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_18 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_19 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_20 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_21 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_22 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_23 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_24 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_25 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_26 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_27 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_28 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_29 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_30 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_c2i_A2I_internal_31 to the stack +addiu $sp, $sp, -4 +lw $t0, -12($fp) +# Saves in local_c2i_A2I_internal_1 data_1 +la $t0, data_1 +lw $t1, -0($fp) +lw $t2, -8($fp) +# local_c2i_A2I_internal_0 <- char = local_c2i_A2I_internal_1 +move $t8, $t1 +move $t9, $t0 +loop_7: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_7 +beqz $a1, mismatch_7 +seq $v0, $a0, $a1 +beqz $v0, mismatch_7 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_7 +mismatch_7: +li $v0, 0 +j end_7 +check_7: +bnez $a1, mismatch_7 +li $v0, 1 +end_7: +move $t2, $v0 +# If local_c2i_A2I_internal_0 goto true__54 +sw $t0, -12($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +bnez $t2, true__54 +lw $t0, -24($fp) +# Saves in local_c2i_A2I_internal_4 data_2 +la $t0, data_2 +lw $t1, -0($fp) +lw $t2, -20($fp) +# local_c2i_A2I_internal_3 <- char = local_c2i_A2I_internal_4 +move $t8, $t1 +move $t9, $t0 +loop_8: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_8 +beqz $a1, mismatch_8 +seq $v0, $a0, $a1 +beqz $v0, mismatch_8 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_8 +mismatch_8: +li $v0, 0 +j end_8 +check_8: +bnez $a1, mismatch_8 +li $v0, 1 +end_8: +move $t2, $v0 +# If local_c2i_A2I_internal_3 goto true__61 +sw $t0, -24($fp) +sw $t1, -0($fp) +sw $t2, -20($fp) +bnez $t2, true__61 +lw $t0, -36($fp) +# Saves in local_c2i_A2I_internal_7 data_3 +la $t0, data_3 +lw $t1, -0($fp) +lw $t2, -32($fp) +# local_c2i_A2I_internal_6 <- char = local_c2i_A2I_internal_7 +move $t8, $t1 +move $t9, $t0 +loop_9: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_9 +beqz $a1, mismatch_9 +seq $v0, $a0, $a1 +beqz $v0, mismatch_9 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_9 +mismatch_9: +li $v0, 0 +j end_9 +check_9: +bnez $a1, mismatch_9 +li $v0, 1 +end_9: +move $t2, $v0 +# If local_c2i_A2I_internal_6 goto true__68 +sw $t0, -36($fp) +sw $t1, -0($fp) +sw $t2, -32($fp) +bnez $t2, true__68 +lw $t0, -48($fp) +# Saves in local_c2i_A2I_internal_10 data_4 +la $t0, data_4 +lw $t1, -0($fp) +lw $t2, -44($fp) +# local_c2i_A2I_internal_9 <- char = local_c2i_A2I_internal_10 +move $t8, $t1 +move $t9, $t0 +loop_10: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_10 +beqz $a1, mismatch_10 +seq $v0, $a0, $a1 +beqz $v0, mismatch_10 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_10 +mismatch_10: +li $v0, 0 +j end_10 +check_10: +bnez $a1, mismatch_10 +li $v0, 1 +end_10: +move $t2, $v0 +# If local_c2i_A2I_internal_9 goto true__75 +sw $t0, -48($fp) +sw $t1, -0($fp) +sw $t2, -44($fp) +bnez $t2, true__75 +lw $t0, -60($fp) +# Saves in local_c2i_A2I_internal_13 data_5 +la $t0, data_5 +lw $t1, -0($fp) +lw $t2, -56($fp) +# local_c2i_A2I_internal_12 <- char = local_c2i_A2I_internal_13 +move $t8, $t1 +move $t9, $t0 +loop_11: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_11 +beqz $a1, mismatch_11 +seq $v0, $a0, $a1 +beqz $v0, mismatch_11 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_11 +mismatch_11: +li $v0, 0 +j end_11 +check_11: +bnez $a1, mismatch_11 +li $v0, 1 +end_11: +move $t2, $v0 +# If local_c2i_A2I_internal_12 goto true__82 +sw $t0, -60($fp) +sw $t1, -0($fp) +sw $t2, -56($fp) +bnez $t2, true__82 +lw $t0, -72($fp) +# Saves in local_c2i_A2I_internal_16 data_6 +la $t0, data_6 +lw $t1, -0($fp) +lw $t2, -68($fp) +# local_c2i_A2I_internal_15 <- char = local_c2i_A2I_internal_16 +move $t8, $t1 +move $t9, $t0 +loop_12: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_12 +beqz $a1, mismatch_12 +seq $v0, $a0, $a1 +beqz $v0, mismatch_12 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_12 +mismatch_12: +li $v0, 0 +j end_12 +check_12: +bnez $a1, mismatch_12 +li $v0, 1 +end_12: +move $t2, $v0 +# If local_c2i_A2I_internal_15 goto true__89 +sw $t0, -72($fp) +sw $t1, -0($fp) +sw $t2, -68($fp) +bnez $t2, true__89 +lw $t0, -84($fp) +# Saves in local_c2i_A2I_internal_19 data_7 +la $t0, data_7 +lw $t1, -0($fp) +lw $t2, -80($fp) +# local_c2i_A2I_internal_18 <- char = local_c2i_A2I_internal_19 +move $t8, $t1 +move $t9, $t0 +loop_13: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_13 +beqz $a1, mismatch_13 +seq $v0, $a0, $a1 +beqz $v0, mismatch_13 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_13 +mismatch_13: +li $v0, 0 +j end_13 +check_13: +bnez $a1, mismatch_13 +li $v0, 1 +end_13: +move $t2, $v0 +# If local_c2i_A2I_internal_18 goto true__96 +sw $t0, -84($fp) +sw $t1, -0($fp) +sw $t2, -80($fp) +bnez $t2, true__96 +lw $t0, -96($fp) +# Saves in local_c2i_A2I_internal_22 data_8 +la $t0, data_8 +lw $t1, -0($fp) +lw $t2, -92($fp) +# local_c2i_A2I_internal_21 <- char = local_c2i_A2I_internal_22 +move $t8, $t1 +move $t9, $t0 +loop_14: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_14 +beqz $a1, mismatch_14 +seq $v0, $a0, $a1 +beqz $v0, mismatch_14 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_14 +mismatch_14: +li $v0, 0 +j end_14 +check_14: +bnez $a1, mismatch_14 +li $v0, 1 +end_14: +move $t2, $v0 +# If local_c2i_A2I_internal_21 goto true__103 +sw $t0, -96($fp) +sw $t1, -0($fp) +sw $t2, -92($fp) +bnez $t2, true__103 +lw $t0, -108($fp) +# Saves in local_c2i_A2I_internal_25 data_9 +la $t0, data_9 +lw $t1, -0($fp) +lw $t2, -104($fp) +# local_c2i_A2I_internal_24 <- char = local_c2i_A2I_internal_25 +move $t8, $t1 +move $t9, $t0 +loop_15: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_15 +beqz $a1, mismatch_15 +seq $v0, $a0, $a1 +beqz $v0, mismatch_15 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_15 +mismatch_15: +li $v0, 0 +j end_15 +check_15: +bnez $a1, mismatch_15 +li $v0, 1 +end_15: +move $t2, $v0 +# If local_c2i_A2I_internal_24 goto true__110 +sw $t0, -108($fp) +sw $t1, -0($fp) +sw $t2, -104($fp) +bnez $t2, true__110 +lw $t0, -120($fp) +# Saves in local_c2i_A2I_internal_28 data_10 +la $t0, data_10 +lw $t1, -0($fp) +lw $t2, -116($fp) +# local_c2i_A2I_internal_27 <- char = local_c2i_A2I_internal_28 +move $t8, $t1 +move $t9, $t0 +loop_16: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_16 +beqz $a1, mismatch_16 +seq $v0, $a0, $a1 +beqz $v0, mismatch_16 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_16 +mismatch_16: +li $v0, 0 +j end_16 +check_16: +bnez $a1, mismatch_16 +li $v0, 1 +end_16: +move $t2, $v0 +# If local_c2i_A2I_internal_27 goto true__117 +sw $t0, -120($fp) +sw $t1, -0($fp) +sw $t2, -116($fp) +bnez $t2, true__117 +lw $t0, -4($fp) +lw $t1, -128($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_abort_Object +lw $t8, 4($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -128($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -128($fp) +# saves the return value +move $t0, $v0 +lw $t1, -132($fp) +# Moving 0 to local_c2i_A2I_internal_31 +li $t1, 0 +sw $t1, -132($fp) +lw $t2, -124($fp) +# Moving local_c2i_A2I_internal_31 to local_c2i_A2I_internal_29 +move $t2, $t1 +sw $t2, -124($fp) +sw $t0, -128($fp) +sw $t1, -132($fp) +sw $t2, -124($fp) +j end__117 +true__117: +lw $t0, -124($fp) +# Moving 9 to local_c2i_A2I_internal_29 +li $t0, 9 +sw $t0, -124($fp) +sw $t0, -124($fp) +end__117: +lw $t0, -124($fp) +lw $t1, -112($fp) +# Moving local_c2i_A2I_internal_29 to local_c2i_A2I_internal_26 +move $t1, $t0 +sw $t1, -112($fp) +sw $t0, -124($fp) +sw $t1, -112($fp) +j end__110 +true__110: +lw $t0, -112($fp) +# Moving 8 to local_c2i_A2I_internal_26 +li $t0, 8 +sw $t0, -112($fp) +sw $t0, -112($fp) +end__110: +lw $t0, -112($fp) +lw $t1, -100($fp) +# Moving local_c2i_A2I_internal_26 to local_c2i_A2I_internal_23 +move $t1, $t0 +sw $t1, -100($fp) +sw $t0, -112($fp) +sw $t1, -100($fp) +j end__103 +true__103: +lw $t0, -100($fp) +# Moving 7 to local_c2i_A2I_internal_23 +li $t0, 7 +sw $t0, -100($fp) +sw $t0, -100($fp) +end__103: +lw $t0, -100($fp) +lw $t1, -88($fp) +# Moving local_c2i_A2I_internal_23 to local_c2i_A2I_internal_20 +move $t1, $t0 +sw $t1, -88($fp) +sw $t0, -100($fp) +sw $t1, -88($fp) +j end__96 +true__96: +lw $t0, -88($fp) +# Moving 6 to local_c2i_A2I_internal_20 +li $t0, 6 +sw $t0, -88($fp) +sw $t0, -88($fp) +end__96: +lw $t0, -88($fp) +lw $t1, -76($fp) +# Moving local_c2i_A2I_internal_20 to local_c2i_A2I_internal_17 +move $t1, $t0 +sw $t1, -76($fp) +sw $t0, -88($fp) +sw $t1, -76($fp) +j end__89 +true__89: +lw $t0, -76($fp) +# Moving 5 to local_c2i_A2I_internal_17 +li $t0, 5 +sw $t0, -76($fp) +sw $t0, -76($fp) +end__89: +lw $t0, -76($fp) +lw $t1, -64($fp) +# Moving local_c2i_A2I_internal_17 to local_c2i_A2I_internal_14 +move $t1, $t0 +sw $t1, -64($fp) +sw $t0, -76($fp) +sw $t1, -64($fp) +j end__82 +true__82: +lw $t0, -64($fp) +# Moving 4 to local_c2i_A2I_internal_14 +li $t0, 4 +sw $t0, -64($fp) +sw $t0, -64($fp) +end__82: +lw $t0, -64($fp) +lw $t1, -52($fp) +# Moving local_c2i_A2I_internal_14 to local_c2i_A2I_internal_11 +move $t1, $t0 +sw $t1, -52($fp) +sw $t0, -64($fp) +sw $t1, -52($fp) +j end__75 +true__75: +lw $t0, -52($fp) +# Moving 3 to local_c2i_A2I_internal_11 +li $t0, 3 +sw $t0, -52($fp) +sw $t0, -52($fp) +end__75: +lw $t0, -52($fp) +lw $t1, -40($fp) +# Moving local_c2i_A2I_internal_11 to local_c2i_A2I_internal_8 +move $t1, $t0 +sw $t1, -40($fp) +sw $t0, -52($fp) +sw $t1, -40($fp) +j end__68 +true__68: +lw $t0, -40($fp) +# Moving 2 to local_c2i_A2I_internal_8 +li $t0, 2 +sw $t0, -40($fp) +sw $t0, -40($fp) +end__68: +lw $t0, -40($fp) +lw $t1, -28($fp) +# Moving local_c2i_A2I_internal_8 to local_c2i_A2I_internal_5 +move $t1, $t0 +sw $t1, -28($fp) +sw $t0, -40($fp) +sw $t1, -28($fp) +j end__61 +true__61: +lw $t0, -28($fp) +# Moving 1 to local_c2i_A2I_internal_5 +li $t0, 1 +sw $t0, -28($fp) +sw $t0, -28($fp) +end__61: +lw $t0, -28($fp) +lw $t1, -16($fp) +# Moving local_c2i_A2I_internal_5 to local_c2i_A2I_internal_2 +move $t1, $t0 +sw $t1, -16($fp) +sw $t0, -28($fp) +sw $t1, -16($fp) +j end__54 +true__54: +lw $t0, -16($fp) +# Moving 0 to local_c2i_A2I_internal_2 +li $t0, 0 +sw $t0, -16($fp) +sw $t0, -16($fp) +end__54: +lw $t0, -16($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +# Removing all locals from stack +addiu $sp, $sp, 136 +jr $ra + + +function_i2c_A2I: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value i +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_i2c_A2I_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_15 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_16 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_17 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_18 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_19 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_20 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_21 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_22 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_23 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_24 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_25 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_26 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_27 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_28 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_29 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_30 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_31 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2c_A2I_internal_32 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +# local_i2c_A2I_internal_0 <- i = 0 +li $t9, 0 +seq $t1, $t0, $t9 +# If local_i2c_A2I_internal_0 goto true__179 +sw $t0, -0($fp) +sw $t1, -8($fp) +bnez $t1, true__179 +lw $t0, -0($fp) +lw $t1, -16($fp) +# local_i2c_A2I_internal_2 <- i = 1 +li $t9, 1 +seq $t1, $t0, $t9 +# If local_i2c_A2I_internal_2 goto true__183 +sw $t0, -0($fp) +sw $t1, -16($fp) +bnez $t1, true__183 +lw $t0, -0($fp) +lw $t1, -24($fp) +# local_i2c_A2I_internal_4 <- i = 2 +li $t9, 2 +seq $t1, $t0, $t9 +# If local_i2c_A2I_internal_4 goto true__187 +sw $t0, -0($fp) +sw $t1, -24($fp) +bnez $t1, true__187 +lw $t0, -0($fp) +lw $t1, -32($fp) +# local_i2c_A2I_internal_6 <- i = 3 +li $t9, 3 +seq $t1, $t0, $t9 +# If local_i2c_A2I_internal_6 goto true__191 +sw $t0, -0($fp) +sw $t1, -32($fp) +bnez $t1, true__191 +lw $t0, -0($fp) +lw $t1, -40($fp) +# local_i2c_A2I_internal_8 <- i = 4 +li $t9, 4 +seq $t1, $t0, $t9 +# If local_i2c_A2I_internal_8 goto true__195 +sw $t0, -0($fp) +sw $t1, -40($fp) +bnez $t1, true__195 +lw $t0, -0($fp) +lw $t1, -48($fp) +# local_i2c_A2I_internal_10 <- i = 5 +li $t9, 5 +seq $t1, $t0, $t9 +# If local_i2c_A2I_internal_10 goto true__199 +sw $t0, -0($fp) +sw $t1, -48($fp) +bnez $t1, true__199 +lw $t0, -0($fp) +lw $t1, -56($fp) +# local_i2c_A2I_internal_12 <- i = 6 +li $t9, 6 +seq $t1, $t0, $t9 +# If local_i2c_A2I_internal_12 goto true__203 +sw $t0, -0($fp) +sw $t1, -56($fp) +bnez $t1, true__203 +lw $t0, -0($fp) +lw $t1, -64($fp) +# local_i2c_A2I_internal_14 <- i = 7 +li $t9, 7 +seq $t1, $t0, $t9 +# If local_i2c_A2I_internal_14 goto true__207 +sw $t0, -0($fp) +sw $t1, -64($fp) +bnez $t1, true__207 +lw $t0, -0($fp) +lw $t1, -72($fp) +# local_i2c_A2I_internal_16 <- i = 8 +li $t9, 8 +seq $t1, $t0, $t9 +# If local_i2c_A2I_internal_16 goto true__211 +sw $t0, -0($fp) +sw $t1, -72($fp) +bnez $t1, true__211 +lw $t0, -0($fp) +lw $t1, -80($fp) +# local_i2c_A2I_internal_18 <- i = 9 +li $t9, 9 +seq $t1, $t0, $t9 +# If local_i2c_A2I_internal_18 goto true__215 +sw $t0, -0($fp) +sw $t1, -80($fp) +bnez $t1, true__215 +lw $t0, -4($fp) +lw $t1, -88($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_abort_Object +lw $t8, 4($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -88($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -88($fp) +# saves the return value +move $t0, $v0 +lw $t1, -92($fp) +# Saves in local_i2c_A2I_internal_21 data_11 +la $t1, data_11 +lw $t2, -96($fp) +# Moving local_i2c_A2I_internal_21 to local_i2c_A2I_internal_22 +move $t2, $t1 +sw $t2, -96($fp) +lw $t3, -84($fp) +# Moving local_i2c_A2I_internal_22 to local_i2c_A2I_internal_19 +move $t3, $t2 +sw $t3, -84($fp) +sw $t0, -88($fp) +sw $t1, -92($fp) +sw $t2, -96($fp) +sw $t3, -84($fp) +j end__215 +true__215: +lw $t0, -100($fp) +# Saves in local_i2c_A2I_internal_23 data_12 +la $t0, data_12 +lw $t1, -84($fp) +# Moving local_i2c_A2I_internal_23 to local_i2c_A2I_internal_19 +move $t1, $t0 +sw $t1, -84($fp) +sw $t0, -100($fp) +sw $t1, -84($fp) +end__215: +lw $t0, -84($fp) +lw $t1, -76($fp) +# Moving local_i2c_A2I_internal_19 to local_i2c_A2I_internal_17 +move $t1, $t0 +sw $t1, -76($fp) +sw $t0, -84($fp) +sw $t1, -76($fp) +j end__211 +true__211: +lw $t0, -104($fp) +# Saves in local_i2c_A2I_internal_24 data_13 +la $t0, data_13 +lw $t1, -76($fp) +# Moving local_i2c_A2I_internal_24 to local_i2c_A2I_internal_17 +move $t1, $t0 +sw $t1, -76($fp) +sw $t0, -104($fp) +sw $t1, -76($fp) +end__211: +lw $t0, -76($fp) +lw $t1, -68($fp) +# Moving local_i2c_A2I_internal_17 to local_i2c_A2I_internal_15 +move $t1, $t0 +sw $t1, -68($fp) +sw $t0, -76($fp) +sw $t1, -68($fp) +j end__207 +true__207: +lw $t0, -108($fp) +# Saves in local_i2c_A2I_internal_25 data_14 +la $t0, data_14 +lw $t1, -68($fp) +# Moving local_i2c_A2I_internal_25 to local_i2c_A2I_internal_15 +move $t1, $t0 +sw $t1, -68($fp) +sw $t0, -108($fp) +sw $t1, -68($fp) +end__207: +lw $t0, -68($fp) +lw $t1, -60($fp) +# Moving local_i2c_A2I_internal_15 to local_i2c_A2I_internal_13 +move $t1, $t0 +sw $t1, -60($fp) +sw $t0, -68($fp) +sw $t1, -60($fp) +j end__203 +true__203: +lw $t0, -112($fp) +# Saves in local_i2c_A2I_internal_26 data_15 +la $t0, data_15 +lw $t1, -60($fp) +# Moving local_i2c_A2I_internal_26 to local_i2c_A2I_internal_13 +move $t1, $t0 +sw $t1, -60($fp) +sw $t0, -112($fp) +sw $t1, -60($fp) +end__203: +lw $t0, -60($fp) +lw $t1, -52($fp) +# Moving local_i2c_A2I_internal_13 to local_i2c_A2I_internal_11 +move $t1, $t0 +sw $t1, -52($fp) +sw $t0, -60($fp) +sw $t1, -52($fp) +j end__199 +true__199: +lw $t0, -116($fp) +# Saves in local_i2c_A2I_internal_27 data_16 +la $t0, data_16 +lw $t1, -52($fp) +# Moving local_i2c_A2I_internal_27 to local_i2c_A2I_internal_11 +move $t1, $t0 +sw $t1, -52($fp) +sw $t0, -116($fp) +sw $t1, -52($fp) +end__199: +lw $t0, -52($fp) +lw $t1, -44($fp) +# Moving local_i2c_A2I_internal_11 to local_i2c_A2I_internal_9 +move $t1, $t0 +sw $t1, -44($fp) +sw $t0, -52($fp) +sw $t1, -44($fp) +j end__195 +true__195: +lw $t0, -120($fp) +# Saves in local_i2c_A2I_internal_28 data_17 +la $t0, data_17 +lw $t1, -44($fp) +# Moving local_i2c_A2I_internal_28 to local_i2c_A2I_internal_9 +move $t1, $t0 +sw $t1, -44($fp) +sw $t0, -120($fp) +sw $t1, -44($fp) +end__195: +lw $t0, -44($fp) +lw $t1, -36($fp) +# Moving local_i2c_A2I_internal_9 to local_i2c_A2I_internal_7 +move $t1, $t0 +sw $t1, -36($fp) +sw $t0, -44($fp) +sw $t1, -36($fp) +j end__191 +true__191: +lw $t0, -124($fp) +# Saves in local_i2c_A2I_internal_29 data_18 +la $t0, data_18 +lw $t1, -36($fp) +# Moving local_i2c_A2I_internal_29 to local_i2c_A2I_internal_7 +move $t1, $t0 +sw $t1, -36($fp) +sw $t0, -124($fp) +sw $t1, -36($fp) +end__191: +lw $t0, -36($fp) +lw $t1, -28($fp) +# Moving local_i2c_A2I_internal_7 to local_i2c_A2I_internal_5 +move $t1, $t0 +sw $t1, -28($fp) +sw $t0, -36($fp) +sw $t1, -28($fp) +j end__187 +true__187: +lw $t0, -128($fp) +# Saves in local_i2c_A2I_internal_30 data_19 +la $t0, data_19 +lw $t1, -28($fp) +# Moving local_i2c_A2I_internal_30 to local_i2c_A2I_internal_5 +move $t1, $t0 +sw $t1, -28($fp) +sw $t0, -128($fp) +sw $t1, -28($fp) +end__187: +lw $t0, -28($fp) +lw $t1, -20($fp) +# Moving local_i2c_A2I_internal_5 to local_i2c_A2I_internal_3 +move $t1, $t0 +sw $t1, -20($fp) +sw $t0, -28($fp) +sw $t1, -20($fp) +j end__183 +true__183: +lw $t0, -132($fp) +# Saves in local_i2c_A2I_internal_31 data_20 +la $t0, data_20 +lw $t1, -20($fp) +# Moving local_i2c_A2I_internal_31 to local_i2c_A2I_internal_3 +move $t1, $t0 +sw $t1, -20($fp) +sw $t0, -132($fp) +sw $t1, -20($fp) +end__183: +lw $t0, -20($fp) +lw $t1, -12($fp) +# Moving local_i2c_A2I_internal_3 to local_i2c_A2I_internal_1 +move $t1, $t0 +sw $t1, -12($fp) +sw $t0, -20($fp) +sw $t1, -12($fp) +j end__179 +true__179: +lw $t0, -136($fp) +# Saves in local_i2c_A2I_internal_32 data_21 +la $t0, data_21 +lw $t1, -12($fp) +# Moving local_i2c_A2I_internal_32 to local_i2c_A2I_internal_1 +move $t1, $t0 +sw $t1, -12($fp) +sw $t0, -136($fp) +sw $t1, -12($fp) +end__179: +lw $t0, -12($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 140 +jr $ra + + +function_a2i_A2I: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value s +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_a2i_A2I_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_15 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_16 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_17 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_18 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_19 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_A2I_internal_20 to the stack +addiu $sp, $sp, -4 +lw $t0, -12($fp) +# Static Dispatch of the method length +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_length_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# local_a2i_A2I_internal_0 <- local_a2i_A2I_internal_1 = 0 +li $t9, 0 +seq $t1, $t0, $t9 +# If local_a2i_A2I_internal_0 goto true__313 +sw $t0, -12($fp) +sw $t1, -8($fp) +bnez $t1, true__313 +lw $t0, -24($fp) +# Static Dispatch of the method substr +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +li $t9, 1 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +li $t9, 0 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -24($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_substr_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -24($fp) +# saves the return value +move $t0, $v0 +lw $t1, -28($fp) +# Saves in local_a2i_A2I_internal_5 data_22 +la $t1, data_22 +lw $t2, -20($fp) +# local_a2i_A2I_internal_3 <- local_a2i_A2I_internal_4 = local_a2i_A2I_internal_5 +move $t8, $t0 +move $t9, $t1 +loop_17: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_17 +beqz $a1, mismatch_17 +seq $v0, $a0, $a1 +beqz $v0, mismatch_17 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_17 +mismatch_17: +li $v0, 0 +j end_17 +check_17: +bnez $a1, mismatch_17 +li $v0, 1 +end_17: +move $t2, $v0 +# If local_a2i_A2I_internal_3 goto true__325 +sw $t0, -24($fp) +sw $t1, -28($fp) +sw $t2, -20($fp) +bnez $t2, true__325 +lw $t0, -40($fp) +# Static Dispatch of the method substr +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +li $t9, 1 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +li $t9, 0 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -40($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_substr_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +lw $t1, -44($fp) +# Saves in local_a2i_A2I_internal_9 data_23 +la $t1, data_23 +lw $t2, -36($fp) +# local_a2i_A2I_internal_7 <- local_a2i_A2I_internal_8 = local_a2i_A2I_internal_9 +move $t8, $t0 +move $t9, $t1 +loop_18: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_18 +beqz $a1, mismatch_18 +seq $v0, $a0, $a1 +beqz $v0, mismatch_18 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_18 +mismatch_18: +li $v0, 0 +j end_18 +check_18: +bnez $a1, mismatch_18 +li $v0, 1 +end_18: +move $t2, $v0 +# If local_a2i_A2I_internal_7 goto true__337 +sw $t0, -40($fp) +sw $t1, -44($fp) +sw $t2, -36($fp) +bnez $t2, true__337 +lw $t0, -4($fp) +lw $t1, -52($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_a2i_aux_A2I +lw $t8, 28($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -0($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -52($fp) +sw $t2, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -52($fp) +# saves the return value +move $t0, $v0 +lw $t1, -48($fp) +# Moving local_a2i_A2I_internal_11 to local_a2i_A2I_internal_10 +move $t1, $t0 +sw $t1, -48($fp) +sw $t0, -52($fp) +sw $t1, -48($fp) +j end__337 +true__337: +lw $t0, -60($fp) +# Static Dispatch of the method length +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -60($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_length_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -60($fp) +# saves the return value +move $t0, $v0 +lw $t1, -56($fp) +# local_a2i_A2I_internal_12 <- local_a2i_A2I_internal_13 - 1 +addi $t1, $t0, -1 +lw $t2, -64($fp) +# Static Dispatch of the method substr +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +li $t9, 1 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t3, -0($fp) +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -60($fp) +sw $t1, -56($fp) +sw $t2, -64($fp) +sw $t3, -0($fp) +# This function will consume the arguments +jal function_substr_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -64($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +lw $t2, -68($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_a2i_aux_A2I +lw $t8, 28($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -64($fp) +sw $t1, -4($fp) +sw $t2, -68($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -68($fp) +# saves the return value +move $t0, $v0 +lw $t1, -48($fp) +# Moving local_a2i_A2I_internal_15 to local_a2i_A2I_internal_10 +move $t1, $t0 +sw $t1, -48($fp) +sw $t0, -68($fp) +sw $t1, -48($fp) +end__337: +lw $t0, -48($fp) +lw $t1, -32($fp) +# Moving local_a2i_A2I_internal_10 to local_a2i_A2I_internal_6 +move $t1, $t0 +sw $t1, -32($fp) +sw $t0, -48($fp) +sw $t1, -32($fp) +j end__325 +true__325: +lw $t0, -80($fp) +# Static Dispatch of the method length +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -80($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_length_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -80($fp) +# saves the return value +move $t0, $v0 +lw $t1, -76($fp) +# local_a2i_A2I_internal_17 <- local_a2i_A2I_internal_18 - 1 +addi $t1, $t0, -1 +lw $t2, -84($fp) +# Static Dispatch of the method substr +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +li $t9, 1 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t3, -0($fp) +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -80($fp) +sw $t1, -76($fp) +sw $t2, -84($fp) +sw $t3, -0($fp) +# This function will consume the arguments +jal function_substr_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -84($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +lw $t2, -88($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_a2i_aux_A2I +lw $t8, 28($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -84($fp) +sw $t1, -4($fp) +sw $t2, -88($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -88($fp) +# saves the return value +move $t0, $v0 +lw $t1, -72($fp) +# local_a2i_A2I_internal_16 <- ~local_a2i_A2I_internal_20 +not $t1, $t0 +addi $t1, $t1, 1 +lw $t2, -32($fp) +# Moving local_a2i_A2I_internal_16 to local_a2i_A2I_internal_6 +move $t2, $t1 +sw $t2, -32($fp) +sw $t0, -88($fp) +sw $t1, -72($fp) +sw $t2, -32($fp) +end__325: +lw $t0, -32($fp) +lw $t1, -16($fp) +# Moving local_a2i_A2I_internal_6 to local_a2i_A2I_internal_2 +move $t1, $t0 +sw $t1, -16($fp) +sw $t0, -32($fp) +sw $t1, -16($fp) +j end__313 +true__313: +lw $t0, -16($fp) +# Moving 0 to local_a2i_A2I_internal_2 +li $t0, 0 +sw $t0, -16($fp) +sw $t0, -16($fp) +end__313: +lw $t0, -16($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +# Removing all locals from stack +addiu $sp, $sp, 92 +jr $ra + + +function_a2i_aux_A2I: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value s +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_a2i_aux_A2I_int_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_aux_A2I_j_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_aux_A2I_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_aux_A2I_i_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_aux_A2I_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_aux_A2I_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_aux_A2I_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_aux_A2I_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_aux_A2I_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_aux_A2I_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_aux_A2I_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_aux_A2I_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_a2i_aux_A2I_internal_12 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +# Moving 0 to local_a2i_aux_A2I_int_0 +li $t0, 0 +sw $t0, -8($fp) +lw $t1, -16($fp) +# Static Dispatch of the method length +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -0($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -16($fp) +sw $t2, -0($fp) +# This function will consume the arguments +jal function_length_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Moving local_a2i_aux_A2I_internal_2 to local_a2i_aux_A2I_j_1 +move $t1, $t0 +sw $t1, -12($fp) +lw $t2, -20($fp) +# Moving 0 to local_a2i_aux_A2I_i_3 +li $t2, 0 +sw $t2, -20($fp) +lw $t3, -24($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t3, $v0 +sw $t0, -16($fp) +sw $t1, -12($fp) +sw $t2, -20($fp) +sw $t3, -24($fp) +start__398: +lw $t0, -20($fp) +lw $t1, -12($fp) +lw $t2, -28($fp) +# local_a2i_aux_A2I_internal_5 <- local_a2i_aux_A2I_i_3 < local_a2i_aux_A2I_j_1 +slt $t2, $t0, $t1 +# If not local_a2i_aux_A2I_internal_5 goto end__398 +sw $t0, -20($fp) +sw $t1, -12($fp) +sw $t2, -28($fp) +beqz $t2, end__398 +lw $t0, -8($fp) +lw $t1, -36($fp) +# local_a2i_aux_A2I_internal_7 <- local_a2i_aux_A2I_int_0 * 10 +li $t9, 10 +mult $t0, $t9 +mflo $t1 +lw $t2, -40($fp) +# Static Dispatch of the method substr +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +li $t9, 1 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t3, -20($fp) +sw $t3, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t4, -0($fp) +sw $t4, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -36($fp) +sw $t2, -40($fp) +sw $t3, -20($fp) +sw $t4, -0($fp) +# This function will consume the arguments +jal function_substr_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +lw $t2, -44($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_c2i_A2I +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -40($fp) +sw $t1, -4($fp) +sw $t2, -44($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -44($fp) +# saves the return value +move $t0, $v0 +lw $t1, -36($fp) +lw $t2, -32($fp) +# local_a2i_aux_A2I_internal_6 <- local_a2i_aux_A2I_internal_7 + local_a2i_aux_A2I_internal_9 +add $t2, $t1, $t0 +lw $t3, -8($fp) +# Moving local_a2i_aux_A2I_internal_6 to local_a2i_aux_A2I_int_0 +move $t3, $t2 +sw $t3, -8($fp) +lw $t4, -20($fp) +lw $t5, -48($fp) +# local_a2i_aux_A2I_internal_10 <- local_a2i_aux_A2I_i_3 + 1 +addi $t5, $t4, 1 +# Moving local_a2i_aux_A2I_internal_10 to local_a2i_aux_A2I_i_3 +move $t4, $t5 +sw $t4, -20($fp) +lw $t6, -52($fp) +# Moving local_a2i_aux_A2I_internal_10 to local_a2i_aux_A2I_internal_11 +move $t6, $t5 +sw $t6, -52($fp) +lw $t7, -24($fp) +# Moving local_a2i_aux_A2I_internal_11 to local_a2i_aux_A2I_internal_4 +move $t7, $t6 +sw $t7, -24($fp) +sw $t0, -44($fp) +sw $t1, -36($fp) +sw $t2, -32($fp) +sw $t3, -8($fp) +sw $t4, -20($fp) +sw $t5, -48($fp) +sw $t6, -52($fp) +sw $t7, -24($fp) +j start__398 +end__398: +lw $t0, -8($fp) +lw $t1, -56($fp) +# Moving local_a2i_aux_A2I_int_0 to local_a2i_aux_A2I_internal_12 +move $t1, $t0 +sw $t1, -56($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -56($fp) +# Removing all locals from stack +addiu $sp, $sp, 60 +jr $ra + + +function_i2a_A2I: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value i +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_i2a_A2I_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_A2I_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_A2I_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_A2I_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_A2I_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_A2I_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_A2I_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_A2I_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_A2I_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_A2I_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_A2I_internal_10 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +# local_i2a_A2I_internal_0 <- i = 0 +li $t9, 0 +seq $t1, $t0, $t9 +# If local_i2a_A2I_internal_0 goto true__433 +sw $t0, -0($fp) +sw $t1, -8($fp) +bnez $t1, true__433 +lw $t0, -0($fp) +lw $t1, -16($fp) +# local_i2a_A2I_internal_2 <- 0 < i +li $t9, 0 +slt $t1, $t9, $t0 +# If local_i2a_A2I_internal_2 goto true__437 +sw $t0, -0($fp) +sw $t1, -16($fp) +bnez $t1, true__437 +lw $t0, -24($fp) +# Saves in local_i2a_A2I_internal_4 data_24 +la $t0, data_24 +lw $t1, -32($fp) +li $t9, 1 +# local_i2a_A2I_internal_6 <- ~1 +not $t1, $t9 +addi $t1, $t1, 1 +lw $t2, -0($fp) +lw $t3, -28($fp) +# local_i2a_A2I_internal_5 <- i * local_i2a_A2I_internal_6 +mult $t2, $t1 +mflo $t3 +lw $t4, -4($fp) +lw $t5, -36($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t4) +# Saves in t8 the direction of function_i2a_aux_A2I +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t4, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -24($fp) +sw $t1, -32($fp) +sw $t2, -0($fp) +sw $t3, -28($fp) +sw $t4, -4($fp) +sw $t5, -36($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -36($fp) +# saves the return value +move $t0, $v0 +lw $t1, -40($fp) +# Static Dispatch of the method concat +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t2, -24($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -36($fp) +sw $t1, -40($fp) +sw $t2, -24($fp) +# This function will consume the arguments +jal function_concat_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +lw $t1, -20($fp) +# Moving local_i2a_A2I_internal_8 to local_i2a_A2I_internal_3 +move $t1, $t0 +sw $t1, -20($fp) +sw $t0, -40($fp) +sw $t1, -20($fp) +j end__437 +true__437: +lw $t0, -4($fp) +lw $t1, -44($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_i2a_aux_A2I +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -0($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -44($fp) +sw $t2, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -44($fp) +# saves the return value +move $t0, $v0 +lw $t1, -20($fp) +# Moving local_i2a_A2I_internal_9 to local_i2a_A2I_internal_3 +move $t1, $t0 +sw $t1, -20($fp) +sw $t0, -44($fp) +sw $t1, -20($fp) +end__437: +lw $t0, -20($fp) +lw $t1, -12($fp) +# Moving local_i2a_A2I_internal_3 to local_i2a_A2I_internal_1 +move $t1, $t0 +sw $t1, -12($fp) +sw $t0, -20($fp) +sw $t1, -12($fp) +j end__433 +true__433: +lw $t0, -48($fp) +# Saves in local_i2a_A2I_internal_10 data_25 +la $t0, data_25 +lw $t1, -12($fp) +# Moving local_i2a_A2I_internal_10 to local_i2a_A2I_internal_1 +move $t1, $t0 +sw $t1, -12($fp) +sw $t0, -48($fp) +sw $t1, -12($fp) +end__433: +lw $t0, -12($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 52 +jr $ra + + +function_i2a_aux_A2I: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value i +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_i2a_aux_A2I_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_aux_A2I_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_aux_A2I_next_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_aux_A2I_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_aux_A2I_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_aux_A2I_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_aux_A2I_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_aux_A2I_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_aux_A2I_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_i2a_aux_A2I_internal_9 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +# local_i2a_aux_A2I_internal_0 <- i = 0 +li $t9, 0 +seq $t1, $t0, $t9 +# If local_i2a_aux_A2I_internal_0 goto true__475 +sw $t0, -0($fp) +sw $t1, -8($fp) +bnez $t1, true__475 +lw $t0, -0($fp) +lw $t1, -20($fp) +# local_i2a_aux_A2I_internal_3 <- i / 10 +li $t9, 10 +la $a0, zero_error +beqz $t9, .raise +div $t0, $t9 +mflo $t1 +lw $t2, -16($fp) +# Moving local_i2a_aux_A2I_internal_3 to local_i2a_aux_A2I_next_2 +move $t2, $t1 +sw $t2, -16($fp) +lw $t3, -4($fp) +lw $t4, -24($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_i2a_aux_A2I +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -20($fp) +sw $t2, -16($fp) +sw $t3, -4($fp) +sw $t4, -24($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -24($fp) +# saves the return value +move $t0, $v0 +lw $t1, -16($fp) +lw $t2, -32($fp) +# local_i2a_aux_A2I_internal_6 <- local_i2a_aux_A2I_next_2 * 10 +li $t9, 10 +mult $t1, $t9 +mflo $t2 +lw $t3, -0($fp) +lw $t4, -28($fp) +# local_i2a_aux_A2I_internal_5 <- i - local_i2a_aux_A2I_internal_6 +sub $t4, $t3, $t2 +lw $t5, -4($fp) +lw $t6, -36($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t5) +# Saves in t8 the direction of function_i2c_A2I +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t4, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t5, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -24($fp) +sw $t1, -16($fp) +sw $t2, -32($fp) +sw $t3, -0($fp) +sw $t4, -28($fp) +sw $t5, -4($fp) +sw $t6, -36($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -36($fp) +# saves the return value +move $t0, $v0 +lw $t1, -40($fp) +# Static Dispatch of the method concat +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t2, -24($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -36($fp) +sw $t1, -40($fp) +sw $t2, -24($fp) +# This function will consume the arguments +jal function_concat_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Moving local_i2a_aux_A2I_internal_8 to local_i2a_aux_A2I_internal_1 +move $t1, $t0 +sw $t1, -12($fp) +sw $t0, -40($fp) +sw $t1, -12($fp) +j end__475 +true__475: +lw $t0, -44($fp) +# Saves in local_i2a_aux_A2I_internal_9 data_26 +la $t0, data_26 +lw $t1, -12($fp) +# Moving local_i2a_aux_A2I_internal_9 to local_i2a_aux_A2I_internal_1 +move $t1, $t0 +sw $t1, -12($fp) +sw $t0, -44($fp) +sw $t1, -12($fp) +end__475: +lw $t0, -12($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 48 +jr $ra + + +function_main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_main_Main_a_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_b_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_13 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 12 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_A2I +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 12 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 40 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_c2i_A2I in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_i2c_A2I in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_a2i_A2I in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_a2i_aux_A2I in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_i2a_A2I in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_i2a_aux_A2I in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t0) +lw $t1, -12($fp) +# Saves in local_main_Main_internal_2 data_27 +la $t1, data_27 +lw $t2, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_a2i_A2I +lw $t8, 24($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -12($fp) +sw $t2, -16($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +# Moving local_main_Main_internal_3 to local_main_Main_a_0 +move $t1, $t0 +sw $t1, -4($fp) +lw $t2, -24($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 12 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_A2I +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 12 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 40 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_c2i_A2I in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_i2c_A2I in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_a2i_A2I in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_a2i_aux_A2I in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_i2a_A2I in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_i2a_aux_A2I in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t2) +lw $t3, -28($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_i2a_A2I +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +li $t9, 678987 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -4($fp) +sw $t2, -24($fp) +sw $t3, -28($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -28($fp) +# saves the return value +move $t0, $v0 +lw $t1, -20($fp) +# Moving local_main_Main_internal_6 to local_main_Main_b_4 +move $t1, $t0 +sw $t1, -20($fp) +lw $t2, -0($fp) +lw $t3, -32($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_int_IO +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t4, -4($fp) +sw $t4, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -28($fp) +sw $t1, -20($fp) +sw $t2, -0($fp) +sw $t3, -32($fp) +sw $t4, -4($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -32($fp) +# saves the return value +move $t0, $v0 +lw $t1, -36($fp) +# Saves in local_main_Main_internal_8 data_28 +la $t1, data_28 +lw $t2, -0($fp) +lw $t3, -40($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -32($fp) +sw $t1, -36($fp) +sw $t2, -0($fp) +sw $t3, -40($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -44($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t3, -20($fp) +sw $t3, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -40($fp) +sw $t1, -0($fp) +sw $t2, -44($fp) +sw $t3, -20($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -44($fp) +# saves the return value +move $t0, $v0 +lw $t1, -48($fp) +# Saves in local_main_Main_internal_11 data_29 +la $t1, data_29 +lw $t2, -0($fp) +lw $t3, -52($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -44($fp) +sw $t1, -48($fp) +sw $t2, -0($fp) +sw $t3, -52($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -52($fp) +# saves the return value +move $t0, $v0 +lw $t1, -56($fp) +# Moving local_main_Main_internal_12 to local_main_Main_internal_13 +move $t1, $t0 +sw $t1, -56($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -52($fp) +sw $t1, -56($fp) +# Removing all locals from stack +addiu $sp, $sp, 60 +jr $ra + +# Raise exception method +.raise: +li $v0, 4 +syscall +li $v0, 17 +li $a0, 1 +syscall + +.data +abort_msg: .asciiz "Abort called from class " +new_line: .asciiz " +" +string_abort: .asciiz "Abort called from class String +" +int_abort: .asciiz "Abort called from class Int +" +bool_abort: .asciiz "Abort called from class Bool +" +type_Object: .asciiz "Object" +type_IO: .asciiz "IO" +type_String: .asciiz "String" +type_Int: .asciiz "Int" +type_Bool: .asciiz "Bool" +type_A2I: .asciiz "A2I" +type_Main: .asciiz "Main" +type_Void: .asciiz "Void" +types: .word 0, 0, 0, 0, 0, 0, 0 +data_0: .asciiz "Void" +data_1: .asciiz "0" +data_2: .asciiz "1" +data_3: .asciiz "2" +data_4: .asciiz "3" +data_5: .asciiz "4" +data_6: .asciiz "5" +data_7: .asciiz "6" +data_8: .asciiz "7" +data_9: .asciiz "8" +data_10: .asciiz "9" +data_11: .asciiz "" +data_12: .asciiz "9" +data_13: .asciiz "8" +data_14: .asciiz "7" +data_15: .asciiz "6" +data_16: .asciiz "5" +data_17: .asciiz "4" +data_18: .asciiz "3" +data_19: .asciiz "2" +data_20: .asciiz "1" +data_21: .asciiz "0" +data_22: .asciiz "-" +data_23: .asciiz "+" +data_24: .asciiz "-" +data_25: .asciiz "0" +data_26: .asciiz "" +data_27: .asciiz "678987" +data_28: .asciiz " == " +data_29: .asciiz " +" +methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +zero_error: .asciiz "Division by zero error +" +case_void_error: .asciiz "Case on void error +" +dispatch_error: .asciiz "Dispatch on void error +" +case_error: .asciiz "Case statement without a matching branch error +" +index_error: .asciiz "Substring out of range error +" +heap_error: .asciiz "Heap overflow error +" \ No newline at end of file diff --git a/tests/codegen/book_list.mips b/tests/codegen/book_list.mips new file mode 100644 index 00000000..cc06c6d9 --- /dev/null +++ b/tests/codegen/book_list.mips @@ -0,0 +1,3182 @@ +.text +.globl main +main: +# Save types directions in the types array +la $t9, types +# Save space to locate the type info +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_String +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 0($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Int +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 4($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Object +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 8($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Bool +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 12($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_IO +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 16($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Book +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 20($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Article +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 24($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_BookList +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 28($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Cons +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 32($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Nil +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 36($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Main +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 40($t9) +# Copying parents +lw $v0, 0($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 4($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 8($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 12($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 16($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +lw $v0, 20($t9) +lw $t8, 16($t9) +sw $t8, 4($v0) +lw $v0, 24($t9) +lw $t8, 20($t9) +sw $t8, 4($v0) +lw $v0, 28($t9) +lw $t8, 16($t9) +sw $t8, 4($v0) +lw $v0, 32($t9) +lw $t8, 28($t9) +sw $t8, 4($v0) +lw $v0, 36($t9) +lw $t8, 28($t9) +sw $t8, 4($v0) +lw $v0, 40($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +# Save method directions in the methods array +la $v0, methods +la $t9, entry +sw $t9, 0($v0) +la $t9, function_abort_Object +sw $t9, 4($v0) +la $t9, function_type_name_Object +sw $t9, 8($v0) +la $t9, function_copy_Object +sw $t9, 12($v0) +la $t9, function_out_string_IO +sw $t9, 16($v0) +la $t9, function_out_int_IO +sw $t9, 20($v0) +la $t9, function_in_int_IO +sw $t9, 24($v0) +la $t9, function_in_string_IO +sw $t9, 28($v0) +la $t9, function_length_String +sw $t9, 32($v0) +la $t9, function_concat_String +sw $t9, 36($v0) +la $t9, function_substr_String +sw $t9, 40($v0) +la $t9, function_type_name_String +sw $t9, 44($v0) +la $t9, function_copy_String +sw $t9, 48($v0) +la $t9, function_type_name_Int +sw $t9, 52($v0) +la $t9, function_copy_Int +sw $t9, 56($v0) +la $t9, function_type_name_Bool +sw $t9, 60($v0) +la $t9, function_copy_Bool +sw $t9, 64($v0) +la $t9, function_abort_String +sw $t9, 68($v0) +la $t9, function_abort_Int +sw $t9, 72($v0) +la $t9, function_abort_Bool +sw $t9, 76($v0) +la $t9, function_Book_Book +sw $t9, 80($v0) +la $t9, function_initBook_Book +sw $t9, 84($v0) +la $t9, function_print_Book +sw $t9, 88($v0) +la $t9, function_Article_Article +sw $t9, 92($v0) +la $t9, function_initArticle_Article +sw $t9, 96($v0) +la $t9, function_print_Article +sw $t9, 100($v0) +la $t9, function_isNil_BookList +sw $t9, 104($v0) +la $t9, function_cons_BookList +sw $t9, 108($v0) +la $t9, function_car_BookList +sw $t9, 112($v0) +la $t9, function_cdr_BookList +sw $t9, 116($v0) +la $t9, function_print_list_BookList +sw $t9, 120($v0) +la $t9, function_Cons_Cons +sw $t9, 124($v0) +la $t9, function_isNil_Cons +sw $t9, 128($v0) +la $t9, function_init_Cons +sw $t9, 132($v0) +la $t9, function_car_Cons +sw $t9, 136($v0) +la $t9, function_cdr_Cons +sw $t9, 140($v0) +la $t9, function_print_list_Cons +sw $t9, 144($v0) +la $t9, function_isNil_Nil +sw $t9, 148($v0) +la $t9, function_print_list_Nil +sw $t9, 152($v0) +la $t9, function_Main_Main +sw $t9, 156($v0) +la $t9, function_main_Main +sw $t9, 160($v0) + +entry: +# Gets the params from the stack +move $fp, $sp +# Gets the frame pointer from the stack +# Updates stack pointer pushing local__internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local__internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Main +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 24 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_main_Main in t9 +lw $t9, 160($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_Main_Main in t9 +lw $t9, 156($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 40($t8) +sw $v0, 12($t0) +# Static Dispatch of the method Main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +# This function will consume the arguments +jal function_Main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# Static Dispatch of the method main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +li $v0, 0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Object_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_abort_Object_self_0 +move $t1, $t0 +sw $t1, -4($fp) +# Exiting the program +li $t8, 0 +# Printing abort message +li $v0, 4 +la $a0, abort_msg +syscall +li $v0, 4 +lw $a0, 0($t0) +syscall +li $v0, 4 +la $a0, new_line +syscall +li $v0, 17 +move $a0, $t8 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_type_name_Object_result_0 <- Type of self +lw $t1, 0($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +lw $t9, 4($t0) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +move $a0, $t9 +syscall +move $t1, $v0 +# Loop to copy every field of the previous object +# t8 the register to loop +li $t8, 0 +loop_0: +# In t9 is stored the size of the object +bge $t8, $t9, exit_0 +lw $a0, ($t0) +sw $a0, ($v0) +addi $v0, $v0, 4 +addi $t0, $t0, 4 +# Increase loop counter +addi $t8, $t8, 4 +j loop_0 +exit_0: +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_out_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_string_String_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_string_String_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing a string +li $v0, 4 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_out_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value number +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_int_IO_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_int_IO_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing an int +li $v0, 1 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_in_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_int_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Reading a int +li $v0, 5 +syscall +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_in_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_string_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t0, $v0 +# Reading a string +# Putting buffer in a0 +move $a0, $t0 +# Putting length of string in a1 +li $a1, 356 +li $v0, 8 +syscall +# Walks to eliminate the newline +move $t9, $t0 +start_1: +lb $t8, 0($t9) +beqz $t8, end_1 +add $t9, $t9, 1 +j start_1 +end_1: +addiu $t9, $t9, -1 +sb $0, ($t9) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_length_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_length_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +move $t8, $t0 +# Determining the length of a string +loop_2: +lb $t9, 0($t8) +beq $t9, $zero, end_2 +addi $t8, $t8, 1 +j loop_2 +end_2: +sub $t1, $t8, $t0 +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_concat_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_concat_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -8($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +# Copy the first string to dest +move $a0, $t0 +move $a1, $t2 +sw $ra, ($sp) +addiu $sp, $sp, -4 +jal strcopier +# Concatenate second string on result buffer +move $a0, $t1 +move $a1, $v0 +jal strcopier +sb $0, 0($v0) +addiu $sp, $sp, 4 +lw $ra, ($sp) +j finish_3 +# Definition of strcopier +strcopier: +# In a0 is the source and in a1 is the destination +loop_3: +lb $t8, ($a0) +beq $t8, $zero, end_3 +addiu $a0, $a0, 1 +sb $t8, ($a1) +addiu $a1, $a1, 1 +b loop_3 +end_3: +move $v0, $a1 +jr $ra +finish_3: +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_substr_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value begin +addiu $fp, $fp, 4 +# Pops the register with the param value end +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_substr_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -12($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +lw $t3, -8($fp) +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t3 +start_4: +lb $t9, 0($t8) +beqz $t9, error_4 +addi $v0, 1 +bgt $v0, $t0, end_len_4 +addi $t8, 1 +j start_4 +end_len_4: +# Saving dest to iterate over him +move $v0, $t2 +loop_4: +sub $t9, $v0, $t2 +beq $t9, $t1, end_4 +lb $t9, 0($t8) +beqz $t9, error_4 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_4 +error_4: +la $a0, index_error +li $v0, 4 +move $a0, $t3 +syscall +li $v0, 1 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t1 +syscall +j .raise +end_4: +sb $0, 0($v0) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_String_result_0 type_String +la $t0, type_String +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_String_result_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +move $t8, $t0 +# Determining the length of a string +loop_5: +lb $t9, 0($t8) +beq $t9, $zero, end_5 +addi $t8, $t8, 1 +j loop_5 +end_5: +sub $t1, $t8, $t0 +lw $t2, -12($fp) +# local_copy_String_result_2 <- local_copy_String_result_1 - 1 +addi $t2, $t1, -1 +lw $t3, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t3, $v0 +li $t8, 0 +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t0 +start_6: +lb $t9, 0($t8) +beqz $t9, error_6 +addi $v0, 1 +bgt $v0, $t8, end_len_6 +addi $t8, 1 +j start_6 +end_len_6: +# Saving dest to iterate over him +move $v0, $t3 +loop_6: +sub $t9, $v0, $t3 +beq $t9, $t2, end_6 +lb $t9, 0($t8) +beqz $t9, error_6 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_6 +error_6: +la $a0, index_error +li $v0, 4 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t8 +syscall +li $v0, 1 +move $a0, $t2 +syscall +j .raise +end_6: +sb $0, 0($v0) +move $v0, $t3 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +sw $t3, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Int_result_0 type_Int +la $t0, type_Int +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_Int_result_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Bool_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Bool_result_0 type_Bool +la $t0, type_Bool +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_result_Bool_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_result_Bool_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_String_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self string_abort +la $t0, string_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Int_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self int_abort +la $t0, int_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Bool_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self bool_abort +la $t0, bool_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_Book_Book: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_Book_Book_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Book_Book_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Book_Book_internal_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_Book_Book_internal_0 data_1 +la $t0, data_1 +lw $t1, -0($fp) +# self . title <- SET local_Book_Book_internal_0 +sw $t0, 16($t1) +lw $t2, -8($fp) +# Saves in local_Book_Book_internal_1 data_2 +la $t2, data_2 +# self . author <- SET local_Book_Book_internal_1 +sw $t2, 20($t1) +lw $t3, -12($fp) +# Moving self to local_Book_Book_internal_2 +move $t3, $t1 +sw $t3, -12($fp) +move $v0, $t3 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +sw $t3, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_initBook_Book: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value title_p +addiu $fp, $fp, 4 +# Pops the register with the param value author_p +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_initBook_Book_internal_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# self . title <- SET title_p +sw $t0, 16($t1) +lw $t2, -0($fp) +# self . author <- SET author_p +sw $t2, 20($t1) +lw $t3, -12($fp) +# Moving self to local_initBook_Book_internal_0 +move $t3, $t1 +sw $t3, -12($fp) +move $v0, $t3 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +sw $t3, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_print_Book: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_print_Book_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Book_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Book_title_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Book_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Book_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Book_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Book_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Book_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Book_author_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Book_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Book_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Book_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Book_internal_12 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_print_Book_internal_0 data_3 +la $t0, data_3 +lw $t1, -0($fp) +lw $t2, -8($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -12($fp) +# local_print_Book_title_2 <- GET self . title +lw $t2, 16($t1) +lw $t3, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -16($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -20($fp) +# Saves in local_print_Book_internal_4 data_4 +la $t1, data_4 +lw $t2, -24($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -20($fp) +sw $t2, -24($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -24($fp) +# saves the return value +move $t0, $v0 +lw $t1, -28($fp) +# Saves in local_print_Book_internal_6 data_5 +la $t1, data_5 +lw $t2, -0($fp) +lw $t3, -32($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -24($fp) +sw $t1, -28($fp) +sw $t2, -0($fp) +sw $t3, -32($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -32($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -36($fp) +# local_print_Book_author_8 <- GET self . author +lw $t2, 20($t1) +lw $t3, -40($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -32($fp) +sw $t1, -0($fp) +sw $t2, -36($fp) +sw $t3, -40($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +lw $t1, -44($fp) +# Saves in local_print_Book_internal_10 data_6 +la $t1, data_6 +lw $t2, -48($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -40($fp) +sw $t1, -44($fp) +sw $t2, -48($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -48($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -52($fp) +# Moving self to local_print_Book_internal_12 +move $t2, $t1 +sw $t2, -52($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -48($fp) +sw $t1, -0($fp) +sw $t2, -52($fp) +# Removing all locals from stack +addiu $sp, $sp, 56 +jr $ra + + +function_Article_Article: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_Article_Article_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Article_Article_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Article_Article_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Article_Article_internal_3 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_Article_Article_internal_0 data_7 +la $t0, data_7 +lw $t1, -0($fp) +# self . title <- SET local_Article_Article_internal_0 +sw $t0, 16($t1) +lw $t2, -8($fp) +# Saves in local_Article_Article_internal_1 data_8 +la $t2, data_8 +# self . author <- SET local_Article_Article_internal_1 +sw $t2, 20($t1) +lw $t3, -12($fp) +# Saves in local_Article_Article_internal_2 data_9 +la $t3, data_9 +# self . per_title <- SET local_Article_Article_internal_2 +sw $t3, 24($t1) +lw $t4, -16($fp) +# Moving self to local_Article_Article_internal_3 +move $t4, $t1 +sw $t4, -16($fp) +move $v0, $t4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +sw $t3, -12($fp) +sw $t4, -16($fp) +# Removing all locals from stack +addiu $sp, $sp, 20 +jr $ra + + +function_initArticle_Article: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value title_p +addiu $fp, $fp, 4 +# Pops the register with the param value author_p +addiu $fp, $fp, 4 +# Pops the register with the param value per_title_p +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_initArticle_Article_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_initArticle_Article_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -12($fp) +lw $t1, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_initBook_Book +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -4($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t3, -8($fp) +sw $t3, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $t1, -16($fp) +sw $t2, -4($fp) +sw $t3, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -12($fp) +# self . per_title <- SET per_title_p +sw $t1, 24($t2) +lw $t3, -20($fp) +# Moving self to local_initArticle_Article_internal_1 +move $t3, $t2 +sw $t3, -20($fp) +move $v0, $t3 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -20($fp) +# Removing all locals from stack +addiu $sp, $sp, 24 +jr $ra + + +function_print_Article: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_print_Article_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Article_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Article_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Article_per_title_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Article_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Article_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Article_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Article_internal_7 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Static Dispatch of the method print +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_print_Book +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# Saves in local_print_Article_internal_1 data_10 +la $t1, data_10 +lw $t2, -0($fp) +lw $t3, -12($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +sw $t3, -12($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -16($fp) +# local_print_Article_per_title_3 <- GET self . per_title +lw $t2, 24($t1) +lw $t3, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $t1, -0($fp) +sw $t2, -16($fp) +sw $t3, -20($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# Saves in local_print_Article_internal_5 data_11 +la $t1, data_11 +lw $t2, -28($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -24($fp) +sw $t2, -28($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -28($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -32($fp) +# Moving self to local_print_Article_internal_7 +move $t2, $t1 +sw $t2, -32($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -28($fp) +sw $t1, -0($fp) +sw $t2, -32($fp) +# Removing all locals from stack +addiu $sp, $sp, 36 +jr $ra + + +function_isNil_BookList: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_isNil_BookList_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_isNil_BookList_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_abort_Object +lw $t8, 4($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# Moving 1 to local_isNil_BookList_internal_1 +li $t1, 1 +sw $t1, -8($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_cons_BookList: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value hd +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_cons_BookList_new_cell_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cons_BookList_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cons_BookList_internal_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -12($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 20 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Cons +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 20 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 60 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_isNil_Cons in t9 +lw $t9, 128($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_cons_BookList in t9 +lw $t9, 108($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_car_Cons in t9 +lw $t9, 136($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_cdr_Cons in t9 +lw $t9, 140($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_print_list_Cons in t9 +lw $t9, 144($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_init_Cons in t9 +lw $t9, 132($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_Cons_Cons in t9 +lw $t9, 124($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 32($t8) +sw $v0, 12($t0) +# Static Dispatch of the method Cons +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +# This function will consume the arguments +jal function_Cons_Cons +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# Moving local_cons_BookList_internal_1 to local_cons_BookList_new_cell_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_init_Cons +lw $t8, 52($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t3, -4($fp) +sw $t3, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t4, -0($fp) +sw $t4, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $t1, -8($fp) +sw $t2, -16($fp) +sw $t3, -4($fp) +sw $t4, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +# Removing all locals from stack +addiu $sp, $sp, 20 +jr $ra + + +function_car_BookList: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_car_BookList_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_car_BookList_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_car_BookList_internal_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_abort_Object +lw $t8, 4($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 20 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Book +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 20 +sw $t9, 4($v0) +move $t1, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 44 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_initBook_Book in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_print_Book in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Book_Book in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +sw $v0, 8($t1) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t1) +# Static Dispatch of the method Book +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +# This function will consume the arguments +jal function_Book_Book +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Moving local_car_BookList_internal_1 to local_car_BookList_internal_2 +move $t1, $t0 +sw $t1, -12($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_cdr_BookList: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_cdr_BookList_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cdr_BookList_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cdr_BookList_internal_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_abort_Object +lw $t8, 4($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 12 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_BookList +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 12 +sw $t9, 4($v0) +move $t1, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 52 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_isNil_BookList in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_cons_BookList in t9 +lw $t9, 108($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_car_BookList in t9 +lw $t9, 112($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_cdr_BookList in t9 +lw $t9, 116($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_print_list_BookList in t9 +lw $t9, 120($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +sw $v0, 8($t1) +# Adding Type Info addr +la $t8, types +lw $v0, 28($t8) +sw $v0, 12($t1) +lw $t2, -12($fp) +# Moving local_cdr_BookList_internal_1 to local_cdr_BookList_internal_2 +move $t2, $t1 +sw $t2, -12($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_print_list_BookList: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_print_list_BookList_internal_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_abort_Object +lw $t8, 4($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_Cons_Cons: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_Cons_Cons_xcar_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Cons_Cons_xcdr_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Cons_Cons_internal_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t0, $v0 +lw $t1, -0($fp) +# self . xcar <- SET local_Cons_Cons_xcar_0 +sw $t0, 16($t1) +lw $t2, -8($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t2, $v0 +# self . xcdr <- SET local_Cons_Cons_xcdr_1 +sw $t2, 20($t1) +lw $t3, -12($fp) +# Moving self to local_Cons_Cons_internal_2 +move $t3, $t1 +sw $t3, -12($fp) +move $v0, $t3 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +sw $t3, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_isNil_Cons: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +li $v0, 0 +# Empty all used registers and saves them to memory +# Removing all locals from stack +addiu $sp, $sp, 4 +jr $ra + + +function_init_Cons: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value hd +addiu $fp, $fp, 4 +# Pops the register with the param value tl +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_init_Cons_internal_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# self . xcar <- SET hd +sw $t0, 16($t1) +lw $t2, -0($fp) +# self . xcdr <- SET tl +sw $t2, 20($t1) +lw $t3, -12($fp) +# Moving self to local_init_Cons_internal_0 +move $t3, $t1 +sw $t3, -12($fp) +move $v0, $t3 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +sw $t3, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_car_Cons: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_car_Cons_xcar_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_car_Cons_xcar_0 <- GET self . xcar +lw $t1, 16($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_cdr_Cons: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_cdr_Cons_xcdr_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_cdr_Cons_xcdr_0 <- GET self . xcdr +lw $t1, 20($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_print_list_Cons: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_print_list_Cons_xcar_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Cons_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Cons_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Cons_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Cons_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Cons_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Cons_dummy_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Cons_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Cons_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Cons_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Cons_dummy_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Cons_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Cons_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Cons_xcdr_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Cons_internal_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Cons_internal_15 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_print_list_Cons_xcar_0 <- GET self . xcar +lw $t1, 16($t0) +lw $t2, -8($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_print_Book +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +lw $t1, -16($fp) +# local_print_list_Cons_internal_3 <- Type of local_print_list_Cons_internal_1 +lw $t1, 0($t0) +lw $t2, -20($fp) +# Saves in local_print_list_Cons_internal_4 data_0 +la $t2, data_0 +# local_print_list_Cons_internal_3 <- local_print_list_Cons_internal_3 = local_print_list_Cons_internal_4 +move $t8, $t1 +move $t9, $t2 +loop_7: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_7 +beqz $a1, mismatch_7 +seq $v0, $a0, $a1 +beqz $v0, mismatch_7 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_7 +mismatch_7: +li $v0, 0 +j end_7 +check_7: +bnez $a1, mismatch_7 +li $v0, 1 +end_7: +move $t1, $v0 +# If local_print_list_Cons_internal_3 goto error__255 +sw $t0, -8($fp) +sw $t1, -16($fp) +sw $t2, -20($fp) +bnez $t1, error__255 +lw $t0, -8($fp) +lw $t1, -24($fp) +la $t9, type_Article +lw $v0, 12($t0) +loop_8: +move $t8, $v0 +beqz $t8, false_8 +lw $v1, 0($t8) +beq $t9, $v1, true_8 +lw $v0, 4($t8) +j loop_8 +true_8: +li $t1, 1 +j end_8 +false_8: +li $t1, 0 +end_8: +# If not local_print_list_Cons_internal_5 goto next__261_0 +sw $t0, -8($fp) +sw $t1, -24($fp) +beqz $t1, next__261_0 +lw $t0, -8($fp) +lw $t1, -28($fp) +# Moving local_print_list_Cons_internal_1 to local_print_list_Cons_dummy_6 +move $t1, $t0 +sw $t1, -28($fp) +lw $t2, -32($fp) +# Saves in local_print_list_Cons_internal_7 data_12 +la $t2, data_12 +lw $t3, -0($fp) +lw $t4, -36($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -28($fp) +sw $t2, -32($fp) +sw $t3, -0($fp) +sw $t4, -36($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -36($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Moving local_print_list_Cons_internal_8 to local_print_list_Cons_internal_2 +move $t1, $t0 +sw $t1, -12($fp) +sw $t0, -36($fp) +sw $t1, -12($fp) +j end__255 +next__261_0: +lw $t0, -8($fp) +lw $t1, -40($fp) +la $t9, type_Book +lw $v0, 12($t0) +loop_9: +move $t8, $v0 +beqz $t8, false_9 +lw $v1, 0($t8) +beq $t9, $v1, true_9 +lw $v0, 4($t8) +j loop_9 +true_9: +li $t1, 1 +j end_9 +false_9: +li $t1, 0 +end_9: +# If not local_print_list_Cons_internal_9 goto next__275_1 +sw $t0, -8($fp) +sw $t1, -40($fp) +beqz $t1, next__275_1 +lw $t0, -8($fp) +lw $t1, -44($fp) +# Moving local_print_list_Cons_internal_1 to local_print_list_Cons_dummy_10 +move $t1, $t0 +sw $t1, -44($fp) +lw $t2, -48($fp) +# Saves in local_print_list_Cons_internal_11 data_13 +la $t2, data_13 +lw $t3, -0($fp) +lw $t4, -52($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -44($fp) +sw $t2, -48($fp) +sw $t3, -0($fp) +sw $t4, -52($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -52($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Moving local_print_list_Cons_internal_12 to local_print_list_Cons_internal_2 +move $t1, $t0 +sw $t1, -12($fp) +sw $t0, -52($fp) +sw $t1, -12($fp) +j end__255 +next__275_1: +la $a0, case_error +j .raise +error__255: +la $a0, case_void_error +j .raise +end__255: +lw $t0, -0($fp) +lw $t1, -56($fp) +# local_print_list_Cons_xcdr_13 <- GET self . xcdr +lw $t1, 20($t0) +lw $t2, -60($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_print_list_BookList +lw $t8, 48($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -56($fp) +sw $t2, -60($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -60($fp) +# saves the return value +move $t0, $v0 +lw $t1, -64($fp) +# Moving local_print_list_Cons_internal_14 to local_print_list_Cons_internal_15 +move $t1, $t0 +sw $t1, -64($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -60($fp) +sw $t1, -64($fp) +# Removing all locals from stack +addiu $sp, $sp, 68 +jr $ra + + +function_isNil_Nil: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +li $v0, 1 +# Empty all used registers and saves them to memory +# Removing all locals from stack +addiu $sp, $sp, 4 +jr $ra + + +function_print_list_Nil: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +li $v0, 1 +# Empty all used registers and saves them to memory +# Removing all locals from stack +addiu $sp, $sp, 4 +jr $ra + + +function_Main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_Main_Main_books_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t0, $v0 +lw $t1, -0($fp) +# self . books <- SET local_Main_Main_books_0 +sw $t0, 16($t1) +lw $t2, -8($fp) +# Moving self to local_Main_Main_internal_1 +move $t2, $t1 +sw $t2, -8($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_main_Main_a_book_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_an_article_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_books_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_15 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_16 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 20 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Book +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 20 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 44 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_initBook_Book in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_print_Book in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Book_Book in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t0) +# Static Dispatch of the method Book +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +# This function will consume the arguments +jal function_Book_Book +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Saves in local_main_Main_internal_2 data_14 +la $t1, data_14 +lw $t2, -16($fp) +# Saves in local_main_Main_internal_3 data_15 +la $t2, data_15 +lw $t3, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_initBook_Book +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -12($fp) +sw $t2, -16($fp) +sw $t3, -20($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +# Moving local_main_Main_internal_4 to local_main_Main_a_book_0 +move $t1, $t0 +sw $t1, -4($fp) +lw $t2, -28($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 24 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Article +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 24 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 52 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_initBook_Book in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_print_Article in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Book_Book in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_initArticle_Article in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_Article_Article in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t2) +# Static Dispatch of the method Article +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -4($fp) +sw $t2, -28($fp) +# This function will consume the arguments +jal function_Article_Article +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -28($fp) +# saves the return value +move $t0, $v0 +lw $t1, -32($fp) +# Saves in local_main_Main_internal_7 data_16 +la $t1, data_16 +lw $t2, -36($fp) +# Saves in local_main_Main_internal_8 data_17 +la $t2, data_17 +lw $t3, -40($fp) +# Saves in local_main_Main_internal_9 data_18 +la $t3, data_18 +lw $t4, -44($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_initArticle_Article +lw $t8, 44($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -28($fp) +sw $t1, -32($fp) +sw $t2, -36($fp) +sw $t3, -40($fp) +sw $t4, -44($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -44($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# Moving local_main_Main_internal_10 to local_main_Main_an_article_5 +move $t1, $t0 +sw $t1, -24($fp) +lw $t2, -48($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 12 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Nil +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 12 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 52 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_isNil_Nil in t9 +lw $t9, 148($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_cons_BookList in t9 +lw $t9, 108($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_car_BookList in t9 +lw $t9, 112($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_cdr_BookList in t9 +lw $t9, 116($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_print_list_Nil in t9 +lw $t9, 152($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 36($t8) +sw $v0, 12($t2) +lw $t3, -52($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_cons_BookList +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t4, -4($fp) +sw $t4, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -44($fp) +sw $t1, -24($fp) +sw $t2, -48($fp) +sw $t3, -52($fp) +sw $t4, -4($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -52($fp) +# saves the return value +move $t0, $v0 +lw $t1, -56($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_cons_BookList +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -24($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -52($fp) +sw $t1, -56($fp) +sw $t2, -24($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -56($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . books <- SET local_main_Main_internal_13 +sw $t0, 16($t1) +lw $t2, -60($fp) +# local_main_Main_books_14 <- GET self . books +lw $t2, 16($t1) +lw $t3, -64($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_print_list_BookList +lw $t8, 48($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -56($fp) +sw $t1, -0($fp) +sw $t2, -60($fp) +sw $t3, -64($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -64($fp) +# saves the return value +move $t0, $v0 +lw $t1, -68($fp) +# Moving local_main_Main_internal_15 to local_main_Main_internal_16 +move $t1, $t0 +sw $t1, -68($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -64($fp) +sw $t1, -68($fp) +# Removing all locals from stack +addiu $sp, $sp, 72 +jr $ra + +# Raise exception method +.raise: +li $v0, 4 +syscall +li $v0, 17 +li $a0, 1 +syscall + +.data +abort_msg: .asciiz "Abort called from class " +new_line: .asciiz " +" +string_abort: .asciiz "Abort called from class String +" +int_abort: .asciiz "Abort called from class Int +" +bool_abort: .asciiz "Abort called from class Bool +" +type_Object: .asciiz "Object" +type_IO: .asciiz "IO" +type_String: .asciiz "String" +type_Int: .asciiz "Int" +type_Bool: .asciiz "Bool" +type_Book: .asciiz "Book" +type_Article: .asciiz "Article" +type_BookList: .asciiz "BookList" +type_Cons: .asciiz "Cons" +type_Nil: .asciiz "Nil" +type_Main: .asciiz "Main" +type_Void: .asciiz "Void" +types: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +data_0: .asciiz "Void" +data_1: .asciiz "" +data_2: .asciiz "" +data_3: .asciiz "title: " +data_4: .asciiz " +" +data_5: .asciiz "author: " +data_6: .asciiz " +" +data_7: .asciiz "" +data_8: .asciiz "" +data_9: .asciiz "" +data_10: .asciiz "periodical: " +data_11: .asciiz " +" +data_12: .asciiz "- dynamic type was Article - +" +data_13: .asciiz "- dynamic type was Book - +" +data_14: .asciiz "Compilers, Principles, Techniques, and Tools" +data_15: .asciiz "Aho, Sethi, and Ullman" +data_16: .asciiz "The Top 100 CD_ROMs" +data_17: .asciiz "Ulanoff" +data_18: .asciiz "PC Magazine" +methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +zero_error: .asciiz "Division by zero error +" +case_void_error: .asciiz "Case on void error +" +dispatch_error: .asciiz "Dispatch on void error +" +case_error: .asciiz "Case statement without a matching branch error +" +index_error: .asciiz "Substring out of range error +" +heap_error: .asciiz "Heap overflow error +" \ No newline at end of file diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips new file mode 100644 index 00000000..f9354705 --- /dev/null +++ b/tests/codegen/cells.mips @@ -0,0 +1,2427 @@ +.text +.globl main +main: +# Save types directions in the types array +la $t9, types +# Save space to locate the type info +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_String +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 0($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Int +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 4($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Object +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 8($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Bool +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 12($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_IO +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 16($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_CellularAutomaton +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 20($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Main +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 24($t9) +# Copying parents +lw $v0, 0($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 4($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 8($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 12($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 16($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +lw $v0, 20($t9) +lw $t8, 16($t9) +sw $t8, 4($v0) +lw $v0, 24($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +# Save method directions in the methods array +la $v0, methods +la $t9, entry +sw $t9, 0($v0) +la $t9, function_abort_Object +sw $t9, 4($v0) +la $t9, function_type_name_Object +sw $t9, 8($v0) +la $t9, function_copy_Object +sw $t9, 12($v0) +la $t9, function_out_string_IO +sw $t9, 16($v0) +la $t9, function_out_int_IO +sw $t9, 20($v0) +la $t9, function_in_int_IO +sw $t9, 24($v0) +la $t9, function_in_string_IO +sw $t9, 28($v0) +la $t9, function_length_String +sw $t9, 32($v0) +la $t9, function_concat_String +sw $t9, 36($v0) +la $t9, function_substr_String +sw $t9, 40($v0) +la $t9, function_type_name_String +sw $t9, 44($v0) +la $t9, function_copy_String +sw $t9, 48($v0) +la $t9, function_type_name_Int +sw $t9, 52($v0) +la $t9, function_copy_Int +sw $t9, 56($v0) +la $t9, function_type_name_Bool +sw $t9, 60($v0) +la $t9, function_copy_Bool +sw $t9, 64($v0) +la $t9, function_abort_String +sw $t9, 68($v0) +la $t9, function_abort_Int +sw $t9, 72($v0) +la $t9, function_abort_Bool +sw $t9, 76($v0) +la $t9, function_CellularAutomaton_CellularAutomaton +sw $t9, 80($v0) +la $t9, function_init_CellularAutomaton +sw $t9, 84($v0) +la $t9, function_print_CellularAutomaton +sw $t9, 88($v0) +la $t9, function_num_cells_CellularAutomaton +sw $t9, 92($v0) +la $t9, function_cell_CellularAutomaton +sw $t9, 96($v0) +la $t9, function_cell_left_neighbor_CellularAutomaton +sw $t9, 100($v0) +la $t9, function_cell_right_neighbor_CellularAutomaton +sw $t9, 104($v0) +la $t9, function_cell_at_next_evolution_CellularAutomaton +sw $t9, 108($v0) +la $t9, function_evolve_CellularAutomaton +sw $t9, 112($v0) +la $t9, function_Main_Main +sw $t9, 116($v0) +la $t9, function_main_Main +sw $t9, 120($v0) + +entry: +# Gets the params from the stack +move $fp, $sp +# Gets the frame pointer from the stack +# Updates stack pointer pushing local__internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local__internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Main +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 24 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_main_Main in t9 +lw $t9, 120($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_Main_Main in t9 +lw $t9, 116($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t0) +# Static Dispatch of the method Main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +# This function will consume the arguments +jal function_Main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# Static Dispatch of the method main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +li $v0, 0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Object_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_abort_Object_self_0 +move $t1, $t0 +sw $t1, -4($fp) +# Exiting the program +li $t8, 0 +# Printing abort message +li $v0, 4 +la $a0, abort_msg +syscall +li $v0, 4 +lw $a0, 0($t0) +syscall +li $v0, 4 +la $a0, new_line +syscall +li $v0, 17 +move $a0, $t8 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_type_name_Object_result_0 <- Type of self +lw $t1, 0($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +lw $t9, 4($t0) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +move $a0, $t9 +syscall +move $t1, $v0 +# Loop to copy every field of the previous object +# t8 the register to loop +li $t8, 0 +loop_0: +# In t9 is stored the size of the object +bge $t8, $t9, exit_0 +lw $a0, ($t0) +sw $a0, ($v0) +addi $v0, $v0, 4 +addi $t0, $t0, 4 +# Increase loop counter +addi $t8, $t8, 4 +j loop_0 +exit_0: +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_out_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_string_String_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_string_String_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing a string +li $v0, 4 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_out_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value number +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_int_IO_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_int_IO_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing an int +li $v0, 1 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_in_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_int_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Reading a int +li $v0, 5 +syscall +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_in_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_string_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t0, $v0 +# Reading a string +# Putting buffer in a0 +move $a0, $t0 +# Putting length of string in a1 +li $a1, 356 +li $v0, 8 +syscall +# Walks to eliminate the newline +move $t9, $t0 +start_1: +lb $t8, 0($t9) +beqz $t8, end_1 +add $t9, $t9, 1 +j start_1 +end_1: +addiu $t9, $t9, -1 +sb $0, ($t9) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_length_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_length_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +move $t8, $t0 +# Determining the length of a string +loop_2: +lb $t9, 0($t8) +beq $t9, $zero, end_2 +addi $t8, $t8, 1 +j loop_2 +end_2: +sub $t1, $t8, $t0 +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_concat_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_concat_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -8($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +# Copy the first string to dest +move $a0, $t0 +move $a1, $t2 +sw $ra, ($sp) +addiu $sp, $sp, -4 +jal strcopier +# Concatenate second string on result buffer +move $a0, $t1 +move $a1, $v0 +jal strcopier +sb $0, 0($v0) +addiu $sp, $sp, 4 +lw $ra, ($sp) +j finish_3 +# Definition of strcopier +strcopier: +# In a0 is the source and in a1 is the destination +loop_3: +lb $t8, ($a0) +beq $t8, $zero, end_3 +addiu $a0, $a0, 1 +sb $t8, ($a1) +addiu $a1, $a1, 1 +b loop_3 +end_3: +move $v0, $a1 +jr $ra +finish_3: +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_substr_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value begin +addiu $fp, $fp, 4 +# Pops the register with the param value end +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_substr_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -12($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +lw $t3, -8($fp) +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t3 +start_4: +lb $t9, 0($t8) +beqz $t9, error_4 +addi $v0, 1 +bgt $v0, $t0, end_len_4 +addi $t8, 1 +j start_4 +end_len_4: +# Saving dest to iterate over him +move $v0, $t2 +loop_4: +sub $t9, $v0, $t2 +beq $t9, $t1, end_4 +lb $t9, 0($t8) +beqz $t9, error_4 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_4 +error_4: +la $a0, index_error +li $v0, 4 +move $a0, $t3 +syscall +li $v0, 1 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t1 +syscall +j .raise +end_4: +sb $0, 0($v0) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_String_result_0 type_String +la $t0, type_String +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_String_result_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +move $t8, $t0 +# Determining the length of a string +loop_5: +lb $t9, 0($t8) +beq $t9, $zero, end_5 +addi $t8, $t8, 1 +j loop_5 +end_5: +sub $t1, $t8, $t0 +lw $t2, -12($fp) +# local_copy_String_result_2 <- local_copy_String_result_1 - 1 +addi $t2, $t1, -1 +lw $t3, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t3, $v0 +li $t8, 0 +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t0 +start_6: +lb $t9, 0($t8) +beqz $t9, error_6 +addi $v0, 1 +bgt $v0, $t8, end_len_6 +addi $t8, 1 +j start_6 +end_len_6: +# Saving dest to iterate over him +move $v0, $t3 +loop_6: +sub $t9, $v0, $t3 +beq $t9, $t2, end_6 +lb $t9, 0($t8) +beqz $t9, error_6 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_6 +error_6: +la $a0, index_error +li $v0, 4 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t8 +syscall +li $v0, 1 +move $a0, $t2 +syscall +j .raise +end_6: +sb $0, 0($v0) +move $v0, $t3 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +sw $t3, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Int_result_0 type_Int +la $t0, type_Int +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_Int_result_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Bool_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Bool_result_0 type_Bool +la $t0, type_Bool +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_result_Bool_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_result_Bool_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_String_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self string_abort +la $t0, string_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Int_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self int_abort +la $t0, int_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Bool_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self bool_abort +la $t0, bool_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_CellularAutomaton_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_CellularAutomaton_CellularAutomaton_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_CellularAutomaton_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_CellularAutomaton_CellularAutomaton_internal_0 data_1 +la $t0, data_1 +lw $t1, -0($fp) +# self . population_map <- SET local_CellularAutomaton_CellularAutomaton_internal_0 +sw $t0, 16($t1) +lw $t2, -8($fp) +# Moving self to local_CellularAutomaton_CellularAutomaton_internal_1 +move $t2, $t1 +sw $t2, -8($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_init_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value map +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_init_CellularAutomaton_internal_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# self . population_map <- SET map +sw $t0, 16($t1) +lw $t2, -8($fp) +# Moving self to local_init_CellularAutomaton_internal_0 +move $t2, $t1 +sw $t2, -8($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_print_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_print_CellularAutomaton_population_map_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_CellularAutomaton_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_CellularAutomaton_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_CellularAutomaton_internal_4 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_print_CellularAutomaton_population_map_0 <- GET self . population_map +lw $t1, 16($t0) +lw $t2, -8($fp) +# Saves in local_print_CellularAutomaton_internal_1 data_2 +la $t2, data_2 +lw $t3, -12($fp) +# Static Dispatch of the method concat +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +sw $t2, -8($fp) +sw $t3, -12($fp) +# This function will consume the arguments +jal function_concat_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $t1, -0($fp) +sw $t2, -16($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -20($fp) +# Moving self to local_print_CellularAutomaton_internal_4 +move $t2, $t1 +sw $t2, -20($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -0($fp) +sw $t2, -20($fp) +# Removing all locals from stack +addiu $sp, $sp, 24 +jr $ra + + +function_num_cells_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_num_cells_CellularAutomaton_population_map_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_num_cells_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_num_cells_CellularAutomaton_population_map_0 <- GET self . population_map +lw $t1, 16($t0) +lw $t2, -8($fp) +# Static Dispatch of the method length +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal function_length_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_cell_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value position +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_cell_CellularAutomaton_population_map_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# local_cell_CellularAutomaton_population_map_0 <- GET self . population_map +lw $t1, 16($t0) +lw $t2, -12($fp) +# Static Dispatch of the method substr +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +li $t9, 1 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t3, -0($fp) +sw $t3, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +sw $t3, -0($fp) +# This function will consume the arguments +jal function_substr_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_cell_left_neighbor_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value position +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_cell_left_neighbor_CellularAutomaton_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_left_neighbor_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_left_neighbor_CellularAutomaton_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_left_neighbor_CellularAutomaton_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_left_neighbor_CellularAutomaton_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_left_neighbor_CellularAutomaton_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_left_neighbor_CellularAutomaton_internal_6 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +# local_cell_left_neighbor_CellularAutomaton_internal_0 <- position = 0 +li $t9, 0 +seq $t1, $t0, $t9 +# If local_cell_left_neighbor_CellularAutomaton_internal_0 goto true__104 +sw $t0, -0($fp) +sw $t1, -8($fp) +bnez $t1, true__104 +lw $t0, -0($fp) +lw $t1, -16($fp) +# local_cell_left_neighbor_CellularAutomaton_internal_2 <- position - 1 +addi $t1, $t0, -1 +lw $t2, -4($fp) +lw $t3, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_cell_CellularAutomaton +lw $t8, 44($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -16($fp) +sw $t2, -4($fp) +sw $t3, -20($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Moving local_cell_left_neighbor_CellularAutomaton_internal_3 to local_cell_left_neighbor_CellularAutomaton_internal_1 +move $t1, $t0 +sw $t1, -12($fp) +sw $t0, -20($fp) +sw $t1, -12($fp) +j end__104 +true__104: +lw $t0, -4($fp) +lw $t1, -28($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_num_cells_CellularAutomaton +lw $t8, 40($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -28($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -28($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# local_cell_left_neighbor_CellularAutomaton_internal_4 <- local_cell_left_neighbor_CellularAutomaton_internal_5 - 1 +addi $t1, $t0, -1 +lw $t2, -4($fp) +lw $t3, -32($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_cell_CellularAutomaton +lw $t8, 44($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -28($fp) +sw $t1, -24($fp) +sw $t2, -4($fp) +sw $t3, -32($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -32($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Moving local_cell_left_neighbor_CellularAutomaton_internal_6 to local_cell_left_neighbor_CellularAutomaton_internal_1 +move $t1, $t0 +sw $t1, -12($fp) +sw $t0, -32($fp) +sw $t1, -12($fp) +end__104: +lw $t0, -12($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 36 +jr $ra + + +function_cell_right_neighbor_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value position +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_cell_right_neighbor_CellularAutomaton_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_right_neighbor_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_right_neighbor_CellularAutomaton_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_right_neighbor_CellularAutomaton_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_right_neighbor_CellularAutomaton_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_right_neighbor_CellularAutomaton_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_right_neighbor_CellularAutomaton_internal_6 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_num_cells_CellularAutomaton +lw $t8, 40($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -16($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# local_cell_right_neighbor_CellularAutomaton_internal_1 <- local_cell_right_neighbor_CellularAutomaton_internal_2 - 1 +addi $t1, $t0, -1 +lw $t2, -0($fp) +lw $t3, -8($fp) +# local_cell_right_neighbor_CellularAutomaton_internal_0 <- position = local_cell_right_neighbor_CellularAutomaton_internal_1 +seq $t3, $t2, $t1 +# If local_cell_right_neighbor_CellularAutomaton_internal_0 goto true__133 +sw $t0, -16($fp) +sw $t1, -12($fp) +sw $t2, -0($fp) +sw $t3, -8($fp) +bnez $t3, true__133 +lw $t0, -0($fp) +lw $t1, -24($fp) +# local_cell_right_neighbor_CellularAutomaton_internal_4 <- position + 1 +addi $t1, $t0, 1 +lw $t2, -4($fp) +lw $t3, -28($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_cell_CellularAutomaton +lw $t8, 44($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -24($fp) +sw $t2, -4($fp) +sw $t3, -28($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -28($fp) +# saves the return value +move $t0, $v0 +lw $t1, -20($fp) +# Moving local_cell_right_neighbor_CellularAutomaton_internal_5 to local_cell_right_neighbor_CellularAutomaton_internal_3 +move $t1, $t0 +sw $t1, -20($fp) +sw $t0, -28($fp) +sw $t1, -20($fp) +j end__133 +true__133: +lw $t0, -4($fp) +lw $t1, -32($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_cell_CellularAutomaton +lw $t8, 44($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +li $t9, 0 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -32($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -32($fp) +# saves the return value +move $t0, $v0 +lw $t1, -20($fp) +# Moving local_cell_right_neighbor_CellularAutomaton_internal_6 to local_cell_right_neighbor_CellularAutomaton_internal_3 +move $t1, $t0 +sw $t1, -20($fp) +sw $t0, -32($fp) +sw $t1, -20($fp) +end__133: +lw $t0, -20($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +# Removing all locals from stack +addiu $sp, $sp, 36 +jr $ra + + +function_cell_at_next_evolution_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value position +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_15 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_16 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_17 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -24($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_cell_CellularAutomaton +lw $t8, 44($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -0($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -24($fp) +sw $t2, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -24($fp) +# saves the return value +move $t0, $v0 +lw $t1, -28($fp) +# Saves in local_cell_at_next_evolution_CellularAutomaton_internal_5 data_3 +la $t1, data_3 +lw $t2, -20($fp) +# local_cell_at_next_evolution_CellularAutomaton_internal_3 <- local_cell_at_next_evolution_CellularAutomaton_internal_4 = local_cell_at_next_evolution_CellularAutomaton_internal_5 +move $t8, $t0 +move $t9, $t1 +loop_7: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_7 +beqz $a1, mismatch_7 +seq $v0, $a0, $a1 +beqz $v0, mismatch_7 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_7 +mismatch_7: +li $v0, 0 +j end_7 +check_7: +bnez $a1, mismatch_7 +li $v0, 1 +end_7: +move $t2, $v0 +# If local_cell_at_next_evolution_CellularAutomaton_internal_3 goto true__163 +sw $t0, -24($fp) +sw $t1, -28($fp) +sw $t2, -20($fp) +bnez $t2, true__163 +lw $t0, -32($fp) +# Moving 0 to local_cell_at_next_evolution_CellularAutomaton_internal_6 +li $t0, 0 +sw $t0, -32($fp) +sw $t0, -32($fp) +j end__163 +true__163: +lw $t0, -32($fp) +# Moving 1 to local_cell_at_next_evolution_CellularAutomaton_internal_6 +li $t0, 1 +sw $t0, -32($fp) +sw $t0, -32($fp) +end__163: +lw $t0, -4($fp) +lw $t1, -40($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_cell_left_neighbor_CellularAutomaton +lw $t8, 48($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -0($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -40($fp) +sw $t2, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +lw $t1, -44($fp) +# Saves in local_cell_at_next_evolution_CellularAutomaton_internal_9 data_4 +la $t1, data_4 +lw $t2, -36($fp) +# local_cell_at_next_evolution_CellularAutomaton_internal_7 <- local_cell_at_next_evolution_CellularAutomaton_internal_8 = local_cell_at_next_evolution_CellularAutomaton_internal_9 +move $t8, $t0 +move $t9, $t1 +loop_8: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_8 +beqz $a1, mismatch_8 +seq $v0, $a0, $a1 +beqz $v0, mismatch_8 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_8 +mismatch_8: +li $v0, 0 +j end_8 +check_8: +bnez $a1, mismatch_8 +li $v0, 1 +end_8: +move $t2, $v0 +# If local_cell_at_next_evolution_CellularAutomaton_internal_7 goto true__178 +sw $t0, -40($fp) +sw $t1, -44($fp) +sw $t2, -36($fp) +bnez $t2, true__178 +lw $t0, -48($fp) +# Moving 0 to local_cell_at_next_evolution_CellularAutomaton_internal_10 +li $t0, 0 +sw $t0, -48($fp) +sw $t0, -48($fp) +j end__178 +true__178: +lw $t0, -48($fp) +# Moving 1 to local_cell_at_next_evolution_CellularAutomaton_internal_10 +li $t0, 1 +sw $t0, -48($fp) +sw $t0, -48($fp) +end__178: +lw $t0, -32($fp) +lw $t1, -48($fp) +lw $t2, -16($fp) +# local_cell_at_next_evolution_CellularAutomaton_internal_2 <- local_cell_at_next_evolution_CellularAutomaton_internal_6 + local_cell_at_next_evolution_CellularAutomaton_internal_10 +add $t2, $t0, $t1 +lw $t3, -4($fp) +lw $t4, -56($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_cell_right_neighbor_CellularAutomaton +lw $t8, 52($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t5, -0($fp) +sw $t5, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -32($fp) +sw $t1, -48($fp) +sw $t2, -16($fp) +sw $t3, -4($fp) +sw $t4, -56($fp) +sw $t5, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -56($fp) +# saves the return value +move $t0, $v0 +lw $t1, -60($fp) +# Saves in local_cell_at_next_evolution_CellularAutomaton_internal_13 data_5 +la $t1, data_5 +lw $t2, -52($fp) +# local_cell_at_next_evolution_CellularAutomaton_internal_11 <- local_cell_at_next_evolution_CellularAutomaton_internal_12 = local_cell_at_next_evolution_CellularAutomaton_internal_13 +move $t8, $t0 +move $t9, $t1 +loop_9: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_9 +beqz $a1, mismatch_9 +seq $v0, $a0, $a1 +beqz $v0, mismatch_9 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_9 +mismatch_9: +li $v0, 0 +j end_9 +check_9: +bnez $a1, mismatch_9 +li $v0, 1 +end_9: +move $t2, $v0 +# If local_cell_at_next_evolution_CellularAutomaton_internal_11 goto true__194 +sw $t0, -56($fp) +sw $t1, -60($fp) +sw $t2, -52($fp) +bnez $t2, true__194 +lw $t0, -64($fp) +# Moving 0 to local_cell_at_next_evolution_CellularAutomaton_internal_14 +li $t0, 0 +sw $t0, -64($fp) +sw $t0, -64($fp) +j end__194 +true__194: +lw $t0, -64($fp) +# Moving 1 to local_cell_at_next_evolution_CellularAutomaton_internal_14 +li $t0, 1 +sw $t0, -64($fp) +sw $t0, -64($fp) +end__194: +lw $t0, -16($fp) +lw $t1, -64($fp) +lw $t2, -12($fp) +# local_cell_at_next_evolution_CellularAutomaton_internal_1 <- local_cell_at_next_evolution_CellularAutomaton_internal_2 + local_cell_at_next_evolution_CellularAutomaton_internal_14 +add $t2, $t0, $t1 +lw $t3, -8($fp) +# local_cell_at_next_evolution_CellularAutomaton_internal_0 <- local_cell_at_next_evolution_CellularAutomaton_internal_1 = 1 +li $t9, 1 +seq $t3, $t2, $t9 +# If local_cell_at_next_evolution_CellularAutomaton_internal_0 goto true__203 +sw $t0, -16($fp) +sw $t1, -64($fp) +sw $t2, -12($fp) +sw $t3, -8($fp) +bnez $t3, true__203 +lw $t0, -72($fp) +# Saves in local_cell_at_next_evolution_CellularAutomaton_internal_16 data_6 +la $t0, data_6 +lw $t1, -68($fp) +# Moving local_cell_at_next_evolution_CellularAutomaton_internal_16 to local_cell_at_next_evolution_CellularAutomaton_internal_15 +move $t1, $t0 +sw $t1, -68($fp) +sw $t0, -72($fp) +sw $t1, -68($fp) +j end__203 +true__203: +lw $t0, -76($fp) +# Saves in local_cell_at_next_evolution_CellularAutomaton_internal_17 data_7 +la $t0, data_7 +lw $t1, -68($fp) +# Moving local_cell_at_next_evolution_CellularAutomaton_internal_17 to local_cell_at_next_evolution_CellularAutomaton_internal_15 +move $t1, $t0 +sw $t1, -68($fp) +sw $t0, -76($fp) +sw $t1, -68($fp) +end__203: +lw $t0, -68($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -68($fp) +# Removing all locals from stack +addiu $sp, $sp, 80 +jr $ra + + +function_evolve_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_evolve_CellularAutomaton_position_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_num_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_temp_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_11 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Moving 0 to local_evolve_CellularAutomaton_position_0 +li $t0, 0 +sw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -12($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_num_cells_CellularAutomaton +lw $t8, 40($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# Moving local_evolve_CellularAutomaton_internal_2 to local_evolve_CellularAutomaton_num_1 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -20($fp) +# Saves in local_evolve_CellularAutomaton_internal_4 data_8 +la $t2, data_8 +lw $t3, -16($fp) +# Moving local_evolve_CellularAutomaton_internal_4 to local_evolve_CellularAutomaton_temp_3 +move $t3, $t2 +sw $t3, -16($fp) +lw $t4, -24($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t4, $v0 +sw $t0, -12($fp) +sw $t1, -8($fp) +sw $t2, -20($fp) +sw $t3, -16($fp) +sw $t4, -24($fp) +start__230: +lw $t0, -4($fp) +lw $t1, -8($fp) +lw $t2, -28($fp) +# local_evolve_CellularAutomaton_internal_6 <- local_evolve_CellularAutomaton_position_0 < local_evolve_CellularAutomaton_num_1 +slt $t2, $t0, $t1 +# If not local_evolve_CellularAutomaton_internal_6 goto end__230 +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -28($fp) +beqz $t2, end__230 +lw $t0, -0($fp) +lw $t1, -32($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_cell_at_next_evolution_CellularAutomaton +lw $t8, 56($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -4($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -32($fp) +sw $t2, -4($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -32($fp) +# saves the return value +move $t0, $v0 +lw $t1, -36($fp) +# Static Dispatch of the method concat +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t2, -16($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -32($fp) +sw $t1, -36($fp) +sw $t2, -16($fp) +# This function will consume the arguments +jal function_concat_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -36($fp) +# saves the return value +move $t0, $v0 +lw $t1, -16($fp) +# Moving local_evolve_CellularAutomaton_internal_8 to local_evolve_CellularAutomaton_temp_3 +move $t1, $t0 +sw $t1, -16($fp) +lw $t2, -4($fp) +lw $t3, -40($fp) +# local_evolve_CellularAutomaton_internal_9 <- local_evolve_CellularAutomaton_position_0 + 1 +addi $t3, $t2, 1 +# Moving local_evolve_CellularAutomaton_internal_9 to local_evolve_CellularAutomaton_position_0 +move $t2, $t3 +sw $t2, -4($fp) +lw $t4, -44($fp) +# Moving local_evolve_CellularAutomaton_internal_9 to local_evolve_CellularAutomaton_internal_10 +move $t4, $t3 +sw $t4, -44($fp) +lw $t5, -24($fp) +# Moving local_evolve_CellularAutomaton_internal_10 to local_evolve_CellularAutomaton_internal_5 +move $t5, $t4 +sw $t5, -24($fp) +sw $t0, -36($fp) +sw $t1, -16($fp) +sw $t2, -4($fp) +sw $t3, -40($fp) +sw $t4, -44($fp) +sw $t5, -24($fp) +j start__230 +end__230: +lw $t0, -16($fp) +lw $t1, -0($fp) +# self . population_map <- SET local_evolve_CellularAutomaton_temp_3 +sw $t0, 16($t1) +lw $t2, -48($fp) +# Moving self to local_evolve_CellularAutomaton_internal_11 +move $t2, $t1 +sw $t2, -48($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -0($fp) +sw $t2, -48($fp) +# Removing all locals from stack +addiu $sp, $sp, 52 +jr $ra + + +function_Main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_Main_Main_cells_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t0, $v0 +lw $t1, -0($fp) +# self . cells <- SET local_Main_Main_cells_0 +sw $t0, 16($t1) +lw $t2, -8($fp) +# Moving self to local_Main_Main_internal_1 +move $t2, $t1 +sw $t2, -8($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_main_Main_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_cells_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_countdown_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_cells_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_cells_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_14 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_CellularAutomaton +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 68 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_init_CellularAutomaton in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_print_CellularAutomaton in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_num_cells_CellularAutomaton in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_cell_CellularAutomaton in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_cell_left_neighbor_CellularAutomaton in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_cell_right_neighbor_CellularAutomaton in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_cell_at_next_evolution_CellularAutomaton in t9 +lw $t9, 108($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +# Save the direction of the method function_evolve_CellularAutomaton in t9 +lw $t9, 112($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 60($v0) +# Save the direction of the method function_CellularAutomaton_CellularAutomaton in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 64($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t0) +# Static Dispatch of the method CellularAutomaton +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# This function will consume the arguments +jal function_CellularAutomaton_CellularAutomaton +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# Saves in local_main_Main_internal_1 data_9 +la $t1, data_9 +lw $t2, -12($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_init_CellularAutomaton +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . cells <- SET local_main_Main_internal_2 +sw $t0, 16($t1) +lw $t2, -16($fp) +# local_main_Main_cells_3 <- GET self . cells +lw $t2, 16($t1) +lw $t3, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_print_CellularAutomaton +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $t1, -0($fp) +sw $t2, -16($fp) +sw $t3, -20($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# Moving 20 to local_main_Main_countdown_5 +li $t1, 20 +sw $t1, -24($fp) +lw $t2, -28($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t2, $v0 +sw $t0, -20($fp) +sw $t1, -24($fp) +sw $t2, -28($fp) +start__284: +lw $t0, -24($fp) +lw $t1, -32($fp) +# local_main_Main_internal_7 <- 0 < local_main_Main_countdown_5 +li $t9, 0 +slt $t1, $t9, $t0 +# If not local_main_Main_internal_7 goto end__284 +sw $t0, -24($fp) +sw $t1, -32($fp) +beqz $t1, end__284 +lw $t0, -0($fp) +lw $t1, -36($fp) +# local_main_Main_cells_8 <- GET self . cells +lw $t1, 16($t0) +lw $t2, -40($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_evolve_CellularAutomaton +lw $t8, 60($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -36($fp) +sw $t2, -40($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -44($fp) +# local_main_Main_cells_10 <- GET self . cells +lw $t2, 16($t1) +lw $t3, -48($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_print_CellularAutomaton +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -40($fp) +sw $t1, -0($fp) +sw $t2, -44($fp) +sw $t3, -48($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -48($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +lw $t2, -52($fp) +# local_main_Main_internal_12 <- local_main_Main_countdown_5 - 1 +addi $t2, $t1, -1 +# Moving local_main_Main_internal_12 to local_main_Main_countdown_5 +move $t1, $t2 +sw $t1, -24($fp) +lw $t3, -56($fp) +# Moving local_main_Main_internal_12 to local_main_Main_internal_13 +move $t3, $t2 +sw $t3, -56($fp) +lw $t4, -28($fp) +# Moving local_main_Main_internal_13 to local_main_Main_internal_6 +move $t4, $t3 +sw $t4, -28($fp) +sw $t0, -48($fp) +sw $t1, -24($fp) +sw $t2, -52($fp) +sw $t3, -56($fp) +sw $t4, -28($fp) +j start__284 +end__284: +lw $t0, -0($fp) +lw $t1, -60($fp) +# Moving self to local_main_Main_internal_14 +move $t1, $t0 +sw $t1, -60($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -60($fp) +# Removing all locals from stack +addiu $sp, $sp, 64 +jr $ra + +# Raise exception method +.raise: +li $v0, 4 +syscall +li $v0, 17 +li $a0, 1 +syscall + +.data +abort_msg: .asciiz "Abort called from class " +new_line: .asciiz " +" +string_abort: .asciiz "Abort called from class String +" +int_abort: .asciiz "Abort called from class Int +" +bool_abort: .asciiz "Abort called from class Bool +" +type_Object: .asciiz "Object" +type_IO: .asciiz "IO" +type_String: .asciiz "String" +type_Int: .asciiz "Int" +type_Bool: .asciiz "Bool" +type_CellularAutomaton: .asciiz "CellularAutomaton" +type_Main: .asciiz "Main" +type_Void: .asciiz "Void" +types: .word 0, 0, 0, 0, 0, 0, 0 +data_0: .asciiz "Void" +data_1: .asciiz "" +data_2: .asciiz " +" +data_3: .asciiz "X" +data_4: .asciiz "X" +data_5: .asciiz "X" +data_6: .asciiz "." +data_7: .asciiz "X" +data_8: .asciiz "" +data_9: .asciiz " X " +methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +zero_error: .asciiz "Division by zero error +" +case_void_error: .asciiz "Case on void error +" +dispatch_error: .asciiz "Dispatch on void error +" +case_error: .asciiz "Case statement without a matching branch error +" +index_error: .asciiz "Substring out of range error +" +heap_error: .asciiz "Heap overflow error +" \ No newline at end of file diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips new file mode 100644 index 00000000..705626c8 --- /dev/null +++ b/tests/codegen/complex.mips @@ -0,0 +1,1764 @@ +.text +.globl main +main: +# Save types directions in the types array +la $t9, types +# Save space to locate the type info +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_String +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 0($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Int +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 4($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Object +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 8($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Bool +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 12($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_IO +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 16($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Main +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 20($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Complex +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 24($t9) +# Copying parents +lw $v0, 0($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 4($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 8($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 12($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 16($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +lw $v0, 20($t9) +lw $t8, 16($t9) +sw $t8, 4($v0) +lw $v0, 24($t9) +lw $t8, 16($t9) +sw $t8, 4($v0) +# Save method directions in the methods array +la $v0, methods +la $t9, entry +sw $t9, 0($v0) +la $t9, function_abort_Object +sw $t9, 4($v0) +la $t9, function_type_name_Object +sw $t9, 8($v0) +la $t9, function_copy_Object +sw $t9, 12($v0) +la $t9, function_out_string_IO +sw $t9, 16($v0) +la $t9, function_out_int_IO +sw $t9, 20($v0) +la $t9, function_in_int_IO +sw $t9, 24($v0) +la $t9, function_in_string_IO +sw $t9, 28($v0) +la $t9, function_length_String +sw $t9, 32($v0) +la $t9, function_concat_String +sw $t9, 36($v0) +la $t9, function_substr_String +sw $t9, 40($v0) +la $t9, function_type_name_String +sw $t9, 44($v0) +la $t9, function_copy_String +sw $t9, 48($v0) +la $t9, function_type_name_Int +sw $t9, 52($v0) +la $t9, function_copy_Int +sw $t9, 56($v0) +la $t9, function_type_name_Bool +sw $t9, 60($v0) +la $t9, function_copy_Bool +sw $t9, 64($v0) +la $t9, function_abort_String +sw $t9, 68($v0) +la $t9, function_abort_Int +sw $t9, 72($v0) +la $t9, function_abort_Bool +sw $t9, 76($v0) +la $t9, function_main_Main +sw $t9, 80($v0) +la $t9, function_Complex_Complex +sw $t9, 84($v0) +la $t9, function_init_Complex +sw $t9, 88($v0) +la $t9, function_print_Complex +sw $t9, 92($v0) +la $t9, function_reflect_0_Complex +sw $t9, 96($v0) +la $t9, function_reflect_X_Complex +sw $t9, 100($v0) +la $t9, function_reflect_Y_Complex +sw $t9, 104($v0) + +entry: +# Gets the params from the stack +move $fp, $sp +# Gets the frame pointer from the stack +# Updates stack pointer pushing local__internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local__internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 12 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Main +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 12 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 36 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_main_Main in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t0) +lw $t1, -4($fp) +# Static Dispatch of the method main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# This function will consume the arguments +jal function_main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +li $v0, 0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Object_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_abort_Object_self_0 +move $t1, $t0 +sw $t1, -4($fp) +# Exiting the program +li $t8, 0 +# Printing abort message +li $v0, 4 +la $a0, abort_msg +syscall +li $v0, 4 +lw $a0, 0($t0) +syscall +li $v0, 4 +la $a0, new_line +syscall +li $v0, 17 +move $a0, $t8 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_type_name_Object_result_0 <- Type of self +lw $t1, 0($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +lw $t9, 4($t0) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +move $a0, $t9 +syscall +move $t1, $v0 +# Loop to copy every field of the previous object +# t8 the register to loop +li $t8, 0 +loop_0: +# In t9 is stored the size of the object +bge $t8, $t9, exit_0 +lw $a0, ($t0) +sw $a0, ($v0) +addi $v0, $v0, 4 +addi $t0, $t0, 4 +# Increase loop counter +addi $t8, $t8, 4 +j loop_0 +exit_0: +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_out_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_string_String_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_string_String_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing a string +li $v0, 4 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_out_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value number +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_int_IO_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_int_IO_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing an int +li $v0, 1 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_in_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_int_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Reading a int +li $v0, 5 +syscall +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_in_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_string_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t0, $v0 +# Reading a string +# Putting buffer in a0 +move $a0, $t0 +# Putting length of string in a1 +li $a1, 356 +li $v0, 8 +syscall +# Walks to eliminate the newline +move $t9, $t0 +start_1: +lb $t8, 0($t9) +beqz $t8, end_1 +add $t9, $t9, 1 +j start_1 +end_1: +addiu $t9, $t9, -1 +sb $0, ($t9) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_length_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_length_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +move $t8, $t0 +# Determining the length of a string +loop_2: +lb $t9, 0($t8) +beq $t9, $zero, end_2 +addi $t8, $t8, 1 +j loop_2 +end_2: +sub $t1, $t8, $t0 +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_concat_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_concat_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -8($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +# Copy the first string to dest +move $a0, $t0 +move $a1, $t2 +sw $ra, ($sp) +addiu $sp, $sp, -4 +jal strcopier +# Concatenate second string on result buffer +move $a0, $t1 +move $a1, $v0 +jal strcopier +sb $0, 0($v0) +addiu $sp, $sp, 4 +lw $ra, ($sp) +j finish_3 +# Definition of strcopier +strcopier: +# In a0 is the source and in a1 is the destination +loop_3: +lb $t8, ($a0) +beq $t8, $zero, end_3 +addiu $a0, $a0, 1 +sb $t8, ($a1) +addiu $a1, $a1, 1 +b loop_3 +end_3: +move $v0, $a1 +jr $ra +finish_3: +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_substr_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value begin +addiu $fp, $fp, 4 +# Pops the register with the param value end +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_substr_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -12($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +lw $t3, -8($fp) +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t3 +start_4: +lb $t9, 0($t8) +beqz $t9, error_4 +addi $v0, 1 +bgt $v0, $t0, end_len_4 +addi $t8, 1 +j start_4 +end_len_4: +# Saving dest to iterate over him +move $v0, $t2 +loop_4: +sub $t9, $v0, $t2 +beq $t9, $t1, end_4 +lb $t9, 0($t8) +beqz $t9, error_4 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_4 +error_4: +la $a0, index_error +li $v0, 4 +move $a0, $t3 +syscall +li $v0, 1 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t1 +syscall +j .raise +end_4: +sb $0, 0($v0) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_String_result_0 type_String +la $t0, type_String +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_String_result_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +move $t8, $t0 +# Determining the length of a string +loop_5: +lb $t9, 0($t8) +beq $t9, $zero, end_5 +addi $t8, $t8, 1 +j loop_5 +end_5: +sub $t1, $t8, $t0 +lw $t2, -12($fp) +# local_copy_String_result_2 <- local_copy_String_result_1 - 1 +addi $t2, $t1, -1 +lw $t3, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t3, $v0 +li $t8, 0 +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t0 +start_6: +lb $t9, 0($t8) +beqz $t9, error_6 +addi $v0, 1 +bgt $v0, $t8, end_len_6 +addi $t8, 1 +j start_6 +end_len_6: +# Saving dest to iterate over him +move $v0, $t3 +loop_6: +sub $t9, $v0, $t3 +beq $t9, $t2, end_6 +lb $t9, 0($t8) +beqz $t9, error_6 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_6 +error_6: +la $a0, index_error +li $v0, 4 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t8 +syscall +li $v0, 1 +move $a0, $t2 +syscall +j .raise +end_6: +sb $0, 0($v0) +move $v0, $t3 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +sw $t3, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Int_result_0 type_Int +la $t0, type_Int +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_Int_result_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Bool_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Bool_result_0 type_Bool +la $t0, type_Bool +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_result_Bool_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_result_Bool_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_String_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self string_abort +la $t0, string_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Int_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self int_abort +la $t0, int_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Bool_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self bool_abort +la $t0, bool_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_main_Main_c_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_11 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 20 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Complex +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 20 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 56 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_init_Complex in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_print_Complex in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_reflect_0_Complex in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_reflect_X_Complex in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_reflect_Y_Complex in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_Complex_Complex in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t0) +# Static Dispatch of the method Complex +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +# This function will consume the arguments +jal function_Complex_Complex +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_init_Complex +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +li $t9, 1 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +li $t9, 1 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -12($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +# Moving local_main_Main_internal_2 to local_main_Main_c_0 +move $t1, $t0 +sw $t1, -4($fp) +lw $t2, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_reflect_X_Complex +lw $t8, 44($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $t1, -4($fp) +sw $t2, -20($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_reflect_Y_Complex +lw $t8, 48($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -24($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -24($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +lw $t2, -28($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_reflect_0_Complex +lw $t8, 40($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -24($fp) +sw $t1, -4($fp) +sw $t2, -28($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -28($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +lw $t2, -16($fp) +# local_main_Main_internal_3 <- local_main_Main_internal_5 = local_main_Main_internal_6 +seq $t2, $t1, $t0 +# If local_main_Main_internal_3 goto true__69 +sw $t0, -28($fp) +sw $t1, -24($fp) +sw $t2, -16($fp) +bnez $t2, true__69 +lw $t0, -36($fp) +# Saves in local_main_Main_internal_8 data_1 +la $t0, data_1 +lw $t1, -0($fp) +lw $t2, -40($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -36($fp) +sw $t1, -0($fp) +sw $t2, -40($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +lw $t1, -32($fp) +# Moving local_main_Main_internal_9 to local_main_Main_internal_7 +move $t1, $t0 +sw $t1, -32($fp) +sw $t0, -40($fp) +sw $t1, -32($fp) +j end__69 +true__69: +lw $t0, -44($fp) +# Saves in local_main_Main_internal_10 data_2 +la $t0, data_2 +lw $t1, -0($fp) +lw $t2, -48($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -44($fp) +sw $t1, -0($fp) +sw $t2, -48($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -48($fp) +# saves the return value +move $t0, $v0 +lw $t1, -32($fp) +# Moving local_main_Main_internal_11 to local_main_Main_internal_7 +move $t1, $t0 +sw $t1, -32($fp) +sw $t0, -48($fp) +sw $t1, -32($fp) +end__69: +lw $t0, -32($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -32($fp) +# Removing all locals from stack +addiu $sp, $sp, 52 +jr $ra + + +function_Complex_Complex: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_Complex_Complex_internal_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# self . x <- SET 0 +li $t9, 0 +sw $t9, 16($t0) +# self . y <- SET 0 +li $t9, 0 +sw $t9, 20($t0) +lw $t1, -4($fp) +# Moving self to local_Complex_Complex_internal_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_init_Complex: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value a +addiu $fp, $fp, 4 +# Pops the register with the param value b +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_init_Complex_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_init_Complex_x_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_init_Complex_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_init_Complex_y_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_init_Complex_internal_4 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +lw $t1, -16($fp) +# local_init_Complex_x_1 <- GET self . x +lw $t1, 16($t0) +lw $t2, -4($fp) +lw $t3, -12($fp) +# local_init_Complex_internal_0 <- local_init_Complex_x_1 = a +seq $t3, $t1, $t2 +lw $t4, -24($fp) +# local_init_Complex_y_3 <- GET self . y +lw $t4, 20($t0) +lw $t5, -0($fp) +lw $t6, -20($fp) +# local_init_Complex_internal_2 <- local_init_Complex_y_3 = b +seq $t6, $t4, $t5 +lw $t7, -28($fp) +# Moving self to local_init_Complex_internal_4 +move $t7, $t0 +sw $t7, -28($fp) +move $v0, $t7 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -16($fp) +sw $t2, -4($fp) +sw $t3, -12($fp) +sw $t4, -24($fp) +sw $t5, -0($fp) +sw $t6, -20($fp) +sw $t7, -28($fp) +# Removing all locals from stack +addiu $sp, $sp, 32 +jr $ra + + +function_print_Complex: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_print_Complex_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Complex_y_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Complex_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Complex_x_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Complex_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Complex_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Complex_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Complex_y_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Complex_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Complex_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Complex_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Complex_x_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Complex_internal_12 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +# local_print_Complex_y_1 <- GET self . y +lw $t1, 20($t0) +lw $t2, -4($fp) +# local_print_Complex_internal_0 <- local_print_Complex_y_1 = 0 +li $t9, 0 +seq $t2, $t1, $t9 +# If local_print_Complex_internal_0 goto true__117 +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -4($fp) +bnez $t2, true__117 +lw $t0, -0($fp) +lw $t1, -16($fp) +# local_print_Complex_x_3 <- GET self . x +lw $t1, 16($t0) +lw $t2, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_out_int_IO +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -16($fp) +sw $t2, -20($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# Saves in local_print_Complex_internal_5 data_3 +la $t1, data_3 +lw $t2, -28($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -24($fp) +sw $t2, -28($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -28($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -32($fp) +# local_print_Complex_y_7 <- GET self . y +lw $t2, 20($t1) +lw $t3, -36($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_out_int_IO +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -28($fp) +sw $t1, -0($fp) +sw $t2, -32($fp) +sw $t3, -36($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -36($fp) +# saves the return value +move $t0, $v0 +lw $t1, -40($fp) +# Saves in local_print_Complex_internal_9 data_4 +la $t1, data_4 +lw $t2, -44($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -36($fp) +sw $t1, -40($fp) +sw $t2, -44($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -44($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Moving local_print_Complex_internal_10 to local_print_Complex_internal_2 +move $t1, $t0 +sw $t1, -12($fp) +sw $t0, -44($fp) +sw $t1, -12($fp) +j end__117 +true__117: +lw $t0, -0($fp) +lw $t1, -48($fp) +# local_print_Complex_x_11 <- GET self . x +lw $t1, 16($t0) +lw $t2, -52($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_out_int_IO +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -48($fp) +sw $t2, -52($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -52($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Moving local_print_Complex_internal_12 to local_print_Complex_internal_2 +move $t1, $t0 +sw $t1, -12($fp) +sw $t0, -52($fp) +sw $t1, -12($fp) +end__117: +lw $t0, -12($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 56 +jr $ra + + +function_reflect_0_Complex: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_reflect_0_Complex_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_0_Complex_x_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_0_Complex_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_0_Complex_x_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_0_Complex_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_0_Complex_y_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_0_Complex_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_0_Complex_y_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_0_Complex_internal_8 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +# local_reflect_0_Complex_x_1 <- GET self . x +lw $t1, 16($t0) +lw $t2, -16($fp) +# local_reflect_0_Complex_x_3 <- GET self . x +lw $t2, 16($t0) +lw $t3, -12($fp) +# local_reflect_0_Complex_internal_2 <- ~local_reflect_0_Complex_x_3 +not $t3, $t2 +addi $t3, $t3, 1 +lw $t4, -4($fp) +# local_reflect_0_Complex_internal_0 <- local_reflect_0_Complex_x_1 = local_reflect_0_Complex_internal_2 +seq $t4, $t1, $t3 +lw $t5, -24($fp) +# local_reflect_0_Complex_y_5 <- GET self . y +lw $t5, 20($t0) +lw $t6, -32($fp) +# local_reflect_0_Complex_y_7 <- GET self . y +lw $t6, 20($t0) +lw $t7, -28($fp) +# local_reflect_0_Complex_internal_6 <- ~local_reflect_0_Complex_y_7 +not $t7, $t6 +addi $t7, $t7, 1 +lw $a0, -20($fp) +# local_reflect_0_Complex_internal_4 <- local_reflect_0_Complex_y_5 = local_reflect_0_Complex_internal_6 +seq $a0, $t5, $t7 +lw $a1, -36($fp) +# Moving self to local_reflect_0_Complex_internal_8 +move $a1, $t0 +sw $a1, -36($fp) +move $v0, $a1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -16($fp) +sw $t3, -12($fp) +sw $t4, -4($fp) +sw $t5, -24($fp) +sw $t6, -32($fp) +sw $t7, -28($fp) +sw $a0, -20($fp) +sw $a1, -36($fp) +# Removing all locals from stack +addiu $sp, $sp, 40 +jr $ra + + +function_reflect_X_Complex: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_reflect_X_Complex_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_X_Complex_y_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_X_Complex_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_X_Complex_y_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_X_Complex_internal_4 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +# local_reflect_X_Complex_y_1 <- GET self . y +lw $t1, 20($t0) +lw $t2, -16($fp) +# local_reflect_X_Complex_y_3 <- GET self . y +lw $t2, 20($t0) +lw $t3, -12($fp) +# local_reflect_X_Complex_internal_2 <- ~local_reflect_X_Complex_y_3 +not $t3, $t2 +addi $t3, $t3, 1 +lw $t4, -4($fp) +# local_reflect_X_Complex_internal_0 <- local_reflect_X_Complex_y_1 = local_reflect_X_Complex_internal_2 +seq $t4, $t1, $t3 +lw $t5, -20($fp) +# Moving self to local_reflect_X_Complex_internal_4 +move $t5, $t0 +sw $t5, -20($fp) +move $v0, $t5 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -16($fp) +sw $t3, -12($fp) +sw $t4, -4($fp) +sw $t5, -20($fp) +# Removing all locals from stack +addiu $sp, $sp, 24 +jr $ra + + +function_reflect_Y_Complex: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_reflect_Y_Complex_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_Y_Complex_x_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_Y_Complex_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_Y_Complex_x_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_Y_Complex_internal_4 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +# local_reflect_Y_Complex_x_1 <- GET self . x +lw $t1, 16($t0) +lw $t2, -16($fp) +# local_reflect_Y_Complex_x_3 <- GET self . x +lw $t2, 16($t0) +lw $t3, -12($fp) +# local_reflect_Y_Complex_internal_2 <- ~local_reflect_Y_Complex_x_3 +not $t3, $t2 +addi $t3, $t3, 1 +lw $t4, -4($fp) +# local_reflect_Y_Complex_internal_0 <- local_reflect_Y_Complex_x_1 = local_reflect_Y_Complex_internal_2 +seq $t4, $t1, $t3 +lw $t5, -20($fp) +# Moving self to local_reflect_Y_Complex_internal_4 +move $t5, $t0 +sw $t5, -20($fp) +move $v0, $t5 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -16($fp) +sw $t3, -12($fp) +sw $t4, -4($fp) +sw $t5, -20($fp) +# Removing all locals from stack +addiu $sp, $sp, 24 +jr $ra + +# Raise exception method +.raise: +li $v0, 4 +syscall +li $v0, 17 +li $a0, 1 +syscall + +.data +abort_msg: .asciiz "Abort called from class " +new_line: .asciiz " +" +string_abort: .asciiz "Abort called from class String +" +int_abort: .asciiz "Abort called from class Int +" +bool_abort: .asciiz "Abort called from class Bool +" +type_Object: .asciiz "Object" +type_IO: .asciiz "IO" +type_String: .asciiz "String" +type_Int: .asciiz "Int" +type_Bool: .asciiz "Bool" +type_Main: .asciiz "Main" +type_Complex: .asciiz "Complex" +type_Void: .asciiz "Void" +types: .word 0, 0, 0, 0, 0, 0, 0 +data_0: .asciiz "Void" +data_1: .asciiz "=( +" +data_2: .asciiz "=) +" +data_3: .asciiz "+" +data_4: .asciiz "I" +methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +zero_error: .asciiz "Division by zero error +" +case_void_error: .asciiz "Case on void error +" +dispatch_error: .asciiz "Dispatch on void error +" +case_error: .asciiz "Case statement without a matching branch error +" +index_error: .asciiz "Substring out of range error +" +heap_error: .asciiz "Heap overflow error +" \ No newline at end of file diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips new file mode 100644 index 00000000..ce93c114 --- /dev/null +++ b/tests/codegen/fib.mips @@ -0,0 +1,1217 @@ +.text +.globl main +main: +# Save types directions in the types array +la $t9, types +# Save space to locate the type info +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_String +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 0($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Int +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 4($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Object +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 8($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Bool +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 12($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_IO +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 16($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Main +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 20($t9) +# Copying parents +lw $v0, 0($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 4($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 8($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 12($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 16($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +lw $v0, 20($t9) +lw $t8, 16($t9) +sw $t8, 4($v0) +# Save method directions in the methods array +la $v0, methods +la $t9, entry +sw $t9, 0($v0) +la $t9, function_abort_Object +sw $t9, 4($v0) +la $t9, function_type_name_Object +sw $t9, 8($v0) +la $t9, function_copy_Object +sw $t9, 12($v0) +la $t9, function_out_string_IO +sw $t9, 16($v0) +la $t9, function_out_int_IO +sw $t9, 20($v0) +la $t9, function_in_int_IO +sw $t9, 24($v0) +la $t9, function_in_string_IO +sw $t9, 28($v0) +la $t9, function_length_String +sw $t9, 32($v0) +la $t9, function_concat_String +sw $t9, 36($v0) +la $t9, function_substr_String +sw $t9, 40($v0) +la $t9, function_type_name_String +sw $t9, 44($v0) +la $t9, function_copy_String +sw $t9, 48($v0) +la $t9, function_type_name_Int +sw $t9, 52($v0) +la $t9, function_copy_Int +sw $t9, 56($v0) +la $t9, function_type_name_Bool +sw $t9, 60($v0) +la $t9, function_copy_Bool +sw $t9, 64($v0) +la $t9, function_abort_String +sw $t9, 68($v0) +la $t9, function_abort_Int +sw $t9, 72($v0) +la $t9, function_abort_Bool +sw $t9, 76($v0) +la $t9, function_main_Main +sw $t9, 80($v0) +la $t9, function_fib_Main +sw $t9, 84($v0) + +entry: +# Gets the params from the stack +move $fp, $sp +# Gets the frame pointer from the stack +# Updates stack pointer pushing local__internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local__internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 12 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Main +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 12 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 40 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_main_Main in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_fib_Main in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t0) +lw $t1, -4($fp) +# Static Dispatch of the method main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# This function will consume the arguments +jal function_main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +li $v0, 0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Object_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_abort_Object_self_0 +move $t1, $t0 +sw $t1, -4($fp) +# Exiting the program +li $t8, 0 +# Printing abort message +li $v0, 4 +la $a0, abort_msg +syscall +li $v0, 4 +lw $a0, 0($t0) +syscall +li $v0, 4 +la $a0, new_line +syscall +li $v0, 17 +move $a0, $t8 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_type_name_Object_result_0 <- Type of self +lw $t1, 0($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +lw $t9, 4($t0) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +move $a0, $t9 +syscall +move $t1, $v0 +# Loop to copy every field of the previous object +# t8 the register to loop +li $t8, 0 +loop_0: +# In t9 is stored the size of the object +bge $t8, $t9, exit_0 +lw $a0, ($t0) +sw $a0, ($v0) +addi $v0, $v0, 4 +addi $t0, $t0, 4 +# Increase loop counter +addi $t8, $t8, 4 +j loop_0 +exit_0: +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_out_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_string_String_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_string_String_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing a string +li $v0, 4 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_out_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value number +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_int_IO_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_int_IO_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing an int +li $v0, 1 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_in_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_int_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Reading a int +li $v0, 5 +syscall +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_in_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_string_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t0, $v0 +# Reading a string +# Putting buffer in a0 +move $a0, $t0 +# Putting length of string in a1 +li $a1, 356 +li $v0, 8 +syscall +# Walks to eliminate the newline +move $t9, $t0 +start_1: +lb $t8, 0($t9) +beqz $t8, end_1 +add $t9, $t9, 1 +j start_1 +end_1: +addiu $t9, $t9, -1 +sb $0, ($t9) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_length_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_length_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +move $t8, $t0 +# Determining the length of a string +loop_2: +lb $t9, 0($t8) +beq $t9, $zero, end_2 +addi $t8, $t8, 1 +j loop_2 +end_2: +sub $t1, $t8, $t0 +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_concat_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_concat_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -8($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +# Copy the first string to dest +move $a0, $t0 +move $a1, $t2 +sw $ra, ($sp) +addiu $sp, $sp, -4 +jal strcopier +# Concatenate second string on result buffer +move $a0, $t1 +move $a1, $v0 +jal strcopier +sb $0, 0($v0) +addiu $sp, $sp, 4 +lw $ra, ($sp) +j finish_3 +# Definition of strcopier +strcopier: +# In a0 is the source and in a1 is the destination +loop_3: +lb $t8, ($a0) +beq $t8, $zero, end_3 +addiu $a0, $a0, 1 +sb $t8, ($a1) +addiu $a1, $a1, 1 +b loop_3 +end_3: +move $v0, $a1 +jr $ra +finish_3: +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_substr_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value begin +addiu $fp, $fp, 4 +# Pops the register with the param value end +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_substr_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -12($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +lw $t3, -8($fp) +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t3 +start_4: +lb $t9, 0($t8) +beqz $t9, error_4 +addi $v0, 1 +bgt $v0, $t0, end_len_4 +addi $t8, 1 +j start_4 +end_len_4: +# Saving dest to iterate over him +move $v0, $t2 +loop_4: +sub $t9, $v0, $t2 +beq $t9, $t1, end_4 +lb $t9, 0($t8) +beqz $t9, error_4 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_4 +error_4: +la $a0, index_error +li $v0, 4 +move $a0, $t3 +syscall +li $v0, 1 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t1 +syscall +j .raise +end_4: +sb $0, 0($v0) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_String_result_0 type_String +la $t0, type_String +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_String_result_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +move $t8, $t0 +# Determining the length of a string +loop_5: +lb $t9, 0($t8) +beq $t9, $zero, end_5 +addi $t8, $t8, 1 +j loop_5 +end_5: +sub $t1, $t8, $t0 +lw $t2, -12($fp) +# local_copy_String_result_2 <- local_copy_String_result_1 - 1 +addi $t2, $t1, -1 +lw $t3, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t3, $v0 +li $t8, 0 +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t0 +start_6: +lb $t9, 0($t8) +beqz $t9, error_6 +addi $v0, 1 +bgt $v0, $t8, end_len_6 +addi $t8, 1 +j start_6 +end_len_6: +# Saving dest to iterate over him +move $v0, $t3 +loop_6: +sub $t9, $v0, $t3 +beq $t9, $t2, end_6 +lb $t9, 0($t8) +beqz $t9, error_6 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_6 +error_6: +la $a0, index_error +li $v0, 4 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t8 +syscall +li $v0, 1 +move $a0, $t2 +syscall +j .raise +end_6: +sb $0, 0($v0) +move $v0, $t3 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +sw $t3, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Int_result_0 type_Int +la $t0, type_Int +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_Int_result_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Bool_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Bool_result_0 type_Bool +la $t0, type_Bool +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_result_Bool_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_result_Bool_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_String_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self string_abort +la $t0, string_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Int_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self int_abort +la $t0, int_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Bool_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self bool_abort +la $t0, bool_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_main_Main_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_7 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_main_Main_internal_0 data_1 +la $t0, data_1 +lw $t1, -0($fp) +lw $t2, -8($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -12($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_in_int_IO +lw $t8, 28($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_fib_Main +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $t1, -0($fp) +sw $t2, -16($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_int_IO +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -0($fp) +sw $t2, -20($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# Saves in local_main_Main_internal_5 data_2 +la $t1, data_2 +lw $t2, -0($fp) +lw $t3, -28($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -24($fp) +sw $t2, -0($fp) +sw $t3, -28($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -28($fp) +# saves the return value +move $t0, $v0 +lw $t1, -32($fp) +# Moving local_main_Main_internal_6 to local_main_Main_internal_7 +move $t1, $t0 +sw $t1, -32($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -28($fp) +sw $t1, -32($fp) +# Removing all locals from stack +addiu $sp, $sp, 36 +jr $ra + + +function_fib_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value i +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_fib_Main_a_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_fib_Main_b_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_fib_Main_c_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_fib_Main_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_fib_Main_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_fib_Main_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_fib_Main_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_fib_Main_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_fib_Main_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_fib_Main_internal_9 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +# Moving 1 to local_fib_Main_a_0 +li $t0, 1 +sw $t0, -8($fp) +lw $t1, -12($fp) +# Moving 0 to local_fib_Main_b_1 +li $t1, 0 +sw $t1, -12($fp) +lw $t2, -16($fp) +# Moving 0 to local_fib_Main_c_2 +li $t2, 0 +sw $t2, -16($fp) +lw $t3, -20($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t3, $v0 +sw $t0, -8($fp) +sw $t1, -12($fp) +sw $t2, -16($fp) +sw $t3, -20($fp) +start__80: +lw $t0, -0($fp) +lw $t1, -28($fp) +# local_fib_Main_internal_5 <- i = 0 +li $t9, 0 +seq $t1, $t0, $t9 +lw $t2, -24($fp) +# local_fib_Main_internal_4 <- not local_fib_Main_internal_5 +beqz $t1, false_7 +li $t2, 0 +j end_7 +false_7: +li $t2, 1 +end_7: +# If not local_fib_Main_internal_4 goto end__80 +sw $t0, -0($fp) +sw $t1, -28($fp) +sw $t2, -24($fp) +beqz $t2, end__80 +lw $t0, -8($fp) +lw $t1, -12($fp) +lw $t2, -32($fp) +# local_fib_Main_internal_6 <- local_fib_Main_a_0 + local_fib_Main_b_1 +add $t2, $t0, $t1 +lw $t3, -16($fp) +# Moving local_fib_Main_internal_6 to local_fib_Main_c_2 +move $t3, $t2 +sw $t3, -16($fp) +lw $t4, -0($fp) +lw $t5, -36($fp) +# local_fib_Main_internal_7 <- i - 1 +addi $t5, $t4, -1 +# Moving local_fib_Main_internal_7 to i +move $t4, $t5 +sw $t4, -0($fp) +# Moving local_fib_Main_a_0 to local_fib_Main_b_1 +move $t1, $t0 +sw $t1, -12($fp) +# Moving local_fib_Main_c_2 to local_fib_Main_a_0 +move $t0, $t3 +sw $t0, -8($fp) +lw $t6, -40($fp) +# Moving local_fib_Main_c_2 to local_fib_Main_internal_8 +move $t6, $t3 +sw $t6, -40($fp) +lw $t7, -20($fp) +# Moving local_fib_Main_internal_8 to local_fib_Main_internal_3 +move $t7, $t6 +sw $t7, -20($fp) +sw $t0, -8($fp) +sw $t1, -12($fp) +sw $t2, -32($fp) +sw $t3, -16($fp) +sw $t4, -0($fp) +sw $t5, -36($fp) +sw $t6, -40($fp) +sw $t7, -20($fp) +j start__80 +end__80: +lw $t0, -16($fp) +lw $t1, -44($fp) +# Moving local_fib_Main_c_2 to local_fib_Main_internal_9 +move $t1, $t0 +sw $t1, -44($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -44($fp) +# Removing all locals from stack +addiu $sp, $sp, 48 +jr $ra + +# Raise exception method +.raise: +li $v0, 4 +syscall +li $v0, 17 +li $a0, 1 +syscall + +.data +abort_msg: .asciiz "Abort called from class " +new_line: .asciiz " +" +string_abort: .asciiz "Abort called from class String +" +int_abort: .asciiz "Abort called from class Int +" +bool_abort: .asciiz "Abort called from class Bool +" +type_Object: .asciiz "Object" +type_IO: .asciiz "IO" +type_String: .asciiz "String" +type_Int: .asciiz "Int" +type_Bool: .asciiz "Bool" +type_Main: .asciiz "Main" +type_Void: .asciiz "Void" +types: .word 0, 0, 0, 0, 0, 0 +data_0: .asciiz "Void" +data_1: .asciiz "Enter n to find nth fibonacci number! +" +data_2: .asciiz " +" +methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +zero_error: .asciiz "Division by zero error +" +case_void_error: .asciiz "Case on void error +" +dispatch_error: .asciiz "Dispatch on void error +" +case_error: .asciiz "Case statement without a matching branch error +" +index_error: .asciiz "Substring out of range error +" +heap_error: .asciiz "Heap overflow error +" \ No newline at end of file diff --git a/src/test.asm b/tests/codegen/graph.mips similarity index 97% rename from src/test.asm rename to tests/codegen/graph.mips index da3e717e..b804027b 100644 --- a/src/test.asm +++ b/tests/codegen/graph.mips @@ -221,102 +221,108 @@ la $t9, function_type_name_Bool sw $t9, 60($v0) la $t9, function_copy_Bool sw $t9, 64($v0) -la $t9, function_Graph_Graph +la $t9, function_abort_String sw $t9, 68($v0) -la $t9, function_add_vertice_Graph +la $t9, function_abort_Int sw $t9, 72($v0) -la $t9, function_print_E_Graph +la $t9, function_abort_Bool sw $t9, 76($v0) -la $t9, function_print_V_Graph +la $t9, function_Graph_Graph sw $t9, 80($v0) -la $t9, function_Vertice_Vertice +la $t9, function_add_vertice_Graph sw $t9, 84($v0) -la $t9, function_outgoing_Vertice +la $t9, function_print_E_Graph sw $t9, 88($v0) -la $t9, function_number_Vertice +la $t9, function_print_V_Graph sw $t9, 92($v0) -la $t9, function_init_Vertice +la $t9, function_Vertice_Vertice sw $t9, 96($v0) -la $t9, function_add_out_Vertice +la $t9, function_outgoing_Vertice sw $t9, 100($v0) -la $t9, function_print_Vertice +la $t9, function_number_Vertice sw $t9, 104($v0) -la $t9, function_Edge_Edge +la $t9, function_init_Vertice sw $t9, 108($v0) -la $t9, function_init_Edge +la $t9, function_add_out_Vertice sw $t9, 112($v0) -la $t9, function_print_Edge +la $t9, function_print_Vertice sw $t9, 116($v0) -la $t9, function_EList_EList +la $t9, function_Edge_Edge sw $t9, 120($v0) -la $t9, function_isNil_EList +la $t9, function_init_Edge sw $t9, 124($v0) -la $t9, function_head_EList +la $t9, function_print_Edge sw $t9, 128($v0) -la $t9, function_tail_EList +la $t9, function_EList_EList sw $t9, 132($v0) -la $t9, function_cons_EList +la $t9, function_isNil_EList sw $t9, 136($v0) -la $t9, function_append_EList +la $t9, function_head_EList sw $t9, 140($v0) -la $t9, function_print_EList +la $t9, function_tail_EList sw $t9, 144($v0) -la $t9, function_ECons_ECons +la $t9, function_cons_EList sw $t9, 148($v0) -la $t9, function_isNil_ECons +la $t9, function_append_EList sw $t9, 152($v0) -la $t9, function_head_ECons +la $t9, function_print_EList sw $t9, 156($v0) -la $t9, function_tail_ECons +la $t9, function_ECons_ECons sw $t9, 160($v0) -la $t9, function_init_ECons +la $t9, function_isNil_ECons sw $t9, 164($v0) -la $t9, function_print_ECons +la $t9, function_head_ECons sw $t9, 168($v0) -la $t9, function_VList_VList +la $t9, function_tail_ECons sw $t9, 172($v0) -la $t9, function_isNil_VList +la $t9, function_init_ECons sw $t9, 176($v0) -la $t9, function_head_VList +la $t9, function_print_ECons sw $t9, 180($v0) -la $t9, function_tail_VList +la $t9, function_VList_VList sw $t9, 184($v0) -la $t9, function_cons_VList +la $t9, function_isNil_VList sw $t9, 188($v0) -la $t9, function_print_VList +la $t9, function_head_VList sw $t9, 192($v0) -la $t9, function_VCons_VCons +la $t9, function_tail_VList sw $t9, 196($v0) -la $t9, function_isNil_VCons +la $t9, function_cons_VList sw $t9, 200($v0) -la $t9, function_head_VCons +la $t9, function_print_VList sw $t9, 204($v0) -la $t9, function_tail_VCons +la $t9, function_VCons_VCons sw $t9, 208($v0) -la $t9, function_init_VCons +la $t9, function_isNil_VCons sw $t9, 212($v0) -la $t9, function_print_VCons +la $t9, function_head_VCons sw $t9, 216($v0) -la $t9, function_Parse_Parse +la $t9, function_tail_VCons sw $t9, 220($v0) -la $t9, function_read_input_Parse +la $t9, function_init_VCons sw $t9, 224($v0) -la $t9, function_parse_line_Parse +la $t9, function_print_VCons sw $t9, 228($v0) -la $t9, function_c2i_Parse +la $t9, function_Parse_Parse sw $t9, 232($v0) -la $t9, function_a2i_Parse +la $t9, function_read_input_Parse sw $t9, 236($v0) -la $t9, function_a2i_aux_Parse +la $t9, function_parse_line_Parse sw $t9, 240($v0) -la $t9, function_Main_Main +la $t9, function_c2i_Parse sw $t9, 244($v0) -la $t9, function_main_Main +la $t9, function_a2i_Parse sw $t9, 248($v0) -la $t9, function_and_BoolOp +la $t9, function_a2i_aux_Parse sw $t9, 252($v0) -la $t9, function_or_BoolOp +la $t9, function_Main_Main sw $t9, 256($v0) +la $t9, function_main_Main +sw $t9, 260($v0) +la $t9, function_and_BoolOp +sw $t9, 264($v0) +la $t9, function_or_BoolOp +sw $t9, 268($v0) entry: # Gets the params from the stack @@ -374,35 +380,35 @@ lw $t9, 24($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 28($v0) # Save the direction of the method function_read_input_Parse in t9 -lw $t9, 224($t8) +lw $t9, 236($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 32($v0) # Save the direction of the method function_parse_line_Parse in t9 -lw $t9, 228($t8) +lw $t9, 240($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 36($v0) # Save the direction of the method function_c2i_Parse in t9 -lw $t9, 232($t8) +lw $t9, 244($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 40($v0) # Save the direction of the method function_a2i_Parse in t9 -lw $t9, 236($t8) +lw $t9, 248($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 44($v0) # Save the direction of the method function_a2i_aux_Parse in t9 -lw $t9, 240($t8) +lw $t9, 252($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 48($v0) # Save the direction of the method function_Parse_Parse in t9 -lw $t9, 220($t8) +lw $t9, 232($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 52($v0) # Save the direction of the method function_main_Main in t9 -lw $t9, 248($t8) +lw $t9, 260($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 56($v0) # Save the direction of the method function_Main_Main in t9 -lw $t9, 244($t8) +lw $t9, 256($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 60($v0) sw $v0, 8($t0) @@ -477,6 +483,16 @@ move $t1, $t0 sw $t1, -4($fp) # Exiting the program li $t8, 0 +# Printing abort message +li $v0, 4 +la $a0, abort_msg +syscall +li $v0, 4 +lw $a0, 0($t0) +syscall +li $v0, 4 +la $a0, new_line +syscall li $v0, 17 move $a0, $t8 syscall @@ -1004,6 +1020,72 @@ addiu $sp, $sp, 8 jr $ra +function_abort_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_String_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self string_abort +la $t0, string_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Int_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self int_abort +la $t0, int_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Bool_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self bool_abort +la $t0, bool_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + function_Graph_Graph: # Gets the params from the stack move $fp, $sp @@ -1064,27 +1146,27 @@ lw $t9, 24($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 28($v0) # Save the direction of the method function_isNil_VList in t9 -lw $t9, 176($t8) +lw $t9, 188($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 32($v0) # Save the direction of the method function_head_VList in t9 -lw $t9, 180($t8) +lw $t9, 192($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 36($v0) # Save the direction of the method function_tail_VList in t9 -lw $t9, 184($t8) +lw $t9, 196($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 40($v0) # Save the direction of the method function_cons_VList in t9 -lw $t9, 188($t8) +lw $t9, 200($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 44($v0) # Save the direction of the method function_print_VList in t9 -lw $t9, 192($t8) +lw $t9, 204($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 48($v0) # Save the direction of the method function_VList_VList in t9 -lw $t9, 172($t8) +lw $t9, 184($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 52($v0) sw $v0, 8($t0) @@ -1165,31 +1247,31 @@ lw $t9, 24($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 28($v0) # Save the direction of the method function_isNil_EList in t9 -lw $t9, 124($t8) +lw $t9, 136($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 32($v0) # Save the direction of the method function_head_EList in t9 -lw $t9, 128($t8) +lw $t9, 140($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 36($v0) # Save the direction of the method function_tail_EList in t9 -lw $t9, 132($t8) +lw $t9, 144($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 40($v0) # Save the direction of the method function_cons_EList in t9 -lw $t9, 136($t8) +lw $t9, 148($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 44($v0) # Save the direction of the method function_append_EList in t9 -lw $t9, 140($t8) +lw $t9, 152($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 48($v0) # Save the direction of the method function_print_EList in t9 -lw $t9, 144($t8) +lw $t9, 156($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 52($v0) # Save the direction of the method function_EList_EList in t9 -lw $t9, 120($t8) +lw $t9, 132($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 56($v0) sw $v0, 8($t2) @@ -1546,31 +1628,31 @@ lw $t9, 24($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 28($v0) # Save the direction of the method function_isNil_EList in t9 -lw $t9, 124($t8) +lw $t9, 136($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 32($v0) # Save the direction of the method function_head_EList in t9 -lw $t9, 128($t8) +lw $t9, 140($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 36($v0) # Save the direction of the method function_tail_EList in t9 -lw $t9, 132($t8) +lw $t9, 144($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 40($v0) # Save the direction of the method function_cons_EList in t9 -lw $t9, 136($t8) +lw $t9, 148($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 44($v0) # Save the direction of the method function_append_EList in t9 -lw $t9, 140($t8) +lw $t9, 152($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 48($v0) # Save the direction of the method function_print_EList in t9 -lw $t9, 144($t8) +lw $t9, 156($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 52($v0) # Save the direction of the method function_EList_EList in t9 -lw $t9, 120($t8) +lw $t9, 132($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 56($v0) sw $v0, 8($t1) @@ -2416,39 +2498,39 @@ lw $t9, 24($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 28($v0) # Save the direction of the method function_isNil_ECons in t9 -lw $t9, 152($t8) +lw $t9, 164($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 32($v0) # Save the direction of the method function_head_ECons in t9 -lw $t9, 156($t8) +lw $t9, 168($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 36($v0) # Save the direction of the method function_tail_ECons in t9 -lw $t9, 160($t8) +lw $t9, 172($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 40($v0) # Save the direction of the method function_cons_EList in t9 -lw $t9, 136($t8) +lw $t9, 148($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 44($v0) # Save the direction of the method function_append_EList in t9 -lw $t9, 140($t8) +lw $t9, 152($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 48($v0) # Save the direction of the method function_print_ECons in t9 -lw $t9, 168($t8) +lw $t9, 180($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 52($v0) # Save the direction of the method function_EList_EList in t9 -lw $t9, 120($t8) +lw $t9, 132($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 56($v0) # Save the direction of the method function_init_ECons in t9 -lw $t9, 164($t8) +lw $t9, 176($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 60($v0) # Save the direction of the method function_ECons_ECons in t9 -lw $t9, 148($t8) +lw $t9, 160($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 64($v0) sw $v0, 8($t0) @@ -2573,9 +2655,9 @@ lw $fp, ($sp) lw $t0, -8($fp) # saves the return value move $t0, $v0 -# If local_append_EList_internal_0 goto true__250 +# If local_append_EList_internal_0 goto true__256 sw $t0, -8($fp) -bnez $t0, true__250 +bnez $t0, true__256 lw $t0, -4($fp) lw $t1, -16($fp) # Find the actual name in the dispatch table @@ -2707,8 +2789,8 @@ move $t1, $t0 sw $t1, -12($fp) sw $t0, -28($fp) sw $t1, -12($fp) -j end__250 -true__250: +j end__256 +true__256: lw $t0, -0($fp) lw $t1, -12($fp) # Moving l to local_append_EList_internal_1 @@ -2716,7 +2798,7 @@ move $t1, $t0 sw $t1, -12($fp) sw $t0, -0($fp) sw $t1, -12($fp) -end__250: +end__256: lw $t0, -12($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -3238,35 +3320,35 @@ lw $t9, 24($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 28($v0) # Save the direction of the method function_isNil_VCons in t9 -lw $t9, 200($t8) +lw $t9, 212($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 32($v0) # Save the direction of the method function_head_VCons in t9 -lw $t9, 204($t8) +lw $t9, 216($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 36($v0) # Save the direction of the method function_tail_VCons in t9 -lw $t9, 208($t8) +lw $t9, 220($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 40($v0) # Save the direction of the method function_cons_VList in t9 -lw $t9, 188($t8) +lw $t9, 200($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 44($v0) # Save the direction of the method function_print_VCons in t9 -lw $t9, 216($t8) +lw $t9, 228($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 48($v0) # Save the direction of the method function_VList_VList in t9 -lw $t9, 172($t8) +lw $t9, 184($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 52($v0) # Save the direction of the method function_init_VCons in t9 -lw $t9, 212($t8) +lw $t9, 224($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 56($v0) # Save the direction of the method function_VCons_VCons in t9 -lw $t9, 196($t8) +lw $t9, 208($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 60($v0) sw $v0, 8($t0) @@ -3675,11 +3757,11 @@ lw $t9, 12($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 12($v0) # Save the direction of the method function_and_BoolOp in t9 -lw $t9, 252($t8) +lw $t9, 264($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 16($v0) # Save the direction of the method function_or_BoolOp in t9 -lw $t9, 256($t8) +lw $t9, 268($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 20($v0) sw $v0, 8($t0) @@ -3784,19 +3866,19 @@ lw $t9, 12($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 12($v0) # Save the direction of the method function_add_vertice_Graph in t9 -lw $t9, 72($t8) +lw $t9, 84($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 16($v0) # Save the direction of the method function_print_E_Graph in t9 -lw $t9, 76($t8) +lw $t9, 88($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 20($v0) # Save the direction of the method function_print_V_Graph in t9 -lw $t9, 80($t8) +lw $t9, 92($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 24($v0) # Save the direction of the method function_Graph_Graph in t9 -lw $t9, 68($t8) +lw $t9, 80($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 28($v0) sw $v0, 8($t0) @@ -3877,7 +3959,7 @@ move $t2, $v0 sw $t0, -16($fp) sw $t1, -12($fp) sw $t2, -20($fp) -start__446: +start__452: lw $t0, -0($fp) lw $t1, -24($fp) # local_read_input_Parse_boolop_5 <- GET self . boolop @@ -3991,9 +4073,9 @@ lw $fp, ($sp) lw $t0, -52($fp) # saves the return value move $t0, $v0 -# If not local_read_input_Parse_internal_12 goto end__446 +# If not local_read_input_Parse_internal_12 goto end__452 sw $t0, -52($fp) -beqz $t0, end__446 +beqz $t0, end__452 lw $t0, -0($fp) lw $t1, -56($fp) # Find the actual name in the dispatch table @@ -4107,8 +4189,8 @@ sw $t0, -64($fp) sw $t1, -12($fp) sw $t2, -68($fp) sw $t3, -20($fp) -j start__446 -end__446: +j start__452 +end__452: lw $t0, -4($fp) lw $t1, -72($fp) # Moving local_read_input_Parse_g_0 to local_read_input_Parse_internal_17 @@ -4221,27 +4303,27 @@ lw $t9, 24($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 28($v0) # Save the direction of the method function_outgoing_Vertice in t9 -lw $t9, 88($t8) +lw $t9, 100($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 32($v0) # Save the direction of the method function_number_Vertice in t9 -lw $t9, 92($t8) +lw $t9, 104($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 36($v0) # Save the direction of the method function_init_Vertice in t9 -lw $t9, 96($t8) +lw $t9, 108($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 40($v0) # Save the direction of the method function_add_out_Vertice in t9 -lw $t9, 100($t8) +lw $t9, 112($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 44($v0) # Save the direction of the method function_print_Vertice in t9 -lw $t9, 104($t8) +lw $t9, 116($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 48($v0) # Save the direction of the method function_Vertice_Vertice in t9 -lw $t9, 84($t8) +lw $t9, 96($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 52($v0) sw $v0, 8($t0) @@ -4355,7 +4437,7 @@ move $t2, $v0 sw $t0, -20($fp) sw $t1, -8($fp) sw $t2, -24($fp) -start__504: +start__510: lw $t0, -4($fp) lw $t1, -36($fp) # local_parse_line_Parse_rest_7 <- GET self . rest @@ -4397,11 +4479,11 @@ j end_11 false_11: li $t2, 1 end_11: -# If not local_parse_line_Parse_internal_5 goto end__504 +# If not local_parse_line_Parse_internal_5 goto end__510 sw $t0, -40($fp) sw $t1, -32($fp) sw $t2, -28($fp) -beqz $t2, end__504 +beqz $t2, end__510 lw $t0, -4($fp) lw $t1, -48($fp) # local_parse_line_Parse_rest_10 <- GET self . rest @@ -4532,15 +4614,15 @@ lw $t9, 24($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 28($v0) # Save the direction of the method function_init_Edge in t9 -lw $t9, 112($t8) +lw $t9, 124($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 32($v0) # Save the direction of the method function_print_Edge in t9 -lw $t9, 116($t8) +lw $t9, 128($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 36($v0) # Save the direction of the method function_Edge_Edge in t9 -lw $t9, 108($t8) +lw $t9, 120($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 40($v0) sw $v0, 8($t2) @@ -4689,8 +4771,8 @@ sw $t2, -24($fp) sw $t0, -80($fp) sw $t1, -84($fp) sw $t2, -24($fp) -j start__504 -end__504: +j start__510 +end__510: lw $t0, -8($fp) lw $t1, -88($fp) # Moving local_parse_line_Parse_v_0 to local_parse_line_Parse_internal_20 @@ -4803,11 +4885,11 @@ bnez $a1, mismatch_12 li $v0, 1 end_12: move $t2, $v0 -# If local_c2i_Parse_internal_0 goto true__563 +# If local_c2i_Parse_internal_0 goto true__569 sw $t0, -12($fp) sw $t1, -0($fp) sw $t2, -8($fp) -bnez $t2, true__563 +bnez $t2, true__569 lw $t0, -24($fp) # Saves in local_c2i_Parse_internal_4 data_10 la $t0, data_10 @@ -4834,11 +4916,11 @@ bnez $a1, mismatch_13 li $v0, 1 end_13: move $t2, $v0 -# If local_c2i_Parse_internal_3 goto true__570 +# If local_c2i_Parse_internal_3 goto true__576 sw $t0, -24($fp) sw $t1, -0($fp) sw $t2, -20($fp) -bnez $t2, true__570 +bnez $t2, true__576 lw $t0, -36($fp) # Saves in local_c2i_Parse_internal_7 data_11 la $t0, data_11 @@ -4865,11 +4947,11 @@ bnez $a1, mismatch_14 li $v0, 1 end_14: move $t2, $v0 -# If local_c2i_Parse_internal_6 goto true__577 +# If local_c2i_Parse_internal_6 goto true__583 sw $t0, -36($fp) sw $t1, -0($fp) sw $t2, -32($fp) -bnez $t2, true__577 +bnez $t2, true__583 lw $t0, -48($fp) # Saves in local_c2i_Parse_internal_10 data_12 la $t0, data_12 @@ -4896,11 +4978,11 @@ bnez $a1, mismatch_15 li $v0, 1 end_15: move $t2, $v0 -# If local_c2i_Parse_internal_9 goto true__584 +# If local_c2i_Parse_internal_9 goto true__590 sw $t0, -48($fp) sw $t1, -0($fp) sw $t2, -44($fp) -bnez $t2, true__584 +bnez $t2, true__590 lw $t0, -60($fp) # Saves in local_c2i_Parse_internal_13 data_13 la $t0, data_13 @@ -4927,11 +5009,11 @@ bnez $a1, mismatch_16 li $v0, 1 end_16: move $t2, $v0 -# If local_c2i_Parse_internal_12 goto true__591 +# If local_c2i_Parse_internal_12 goto true__597 sw $t0, -60($fp) sw $t1, -0($fp) sw $t2, -56($fp) -bnez $t2, true__591 +bnez $t2, true__597 lw $t0, -72($fp) # Saves in local_c2i_Parse_internal_16 data_14 la $t0, data_14 @@ -4958,11 +5040,11 @@ bnez $a1, mismatch_17 li $v0, 1 end_17: move $t2, $v0 -# If local_c2i_Parse_internal_15 goto true__598 +# If local_c2i_Parse_internal_15 goto true__604 sw $t0, -72($fp) sw $t1, -0($fp) sw $t2, -68($fp) -bnez $t2, true__598 +bnez $t2, true__604 lw $t0, -84($fp) # Saves in local_c2i_Parse_internal_19 data_15 la $t0, data_15 @@ -4989,11 +5071,11 @@ bnez $a1, mismatch_18 li $v0, 1 end_18: move $t2, $v0 -# If local_c2i_Parse_internal_18 goto true__605 +# If local_c2i_Parse_internal_18 goto true__611 sw $t0, -84($fp) sw $t1, -0($fp) sw $t2, -80($fp) -bnez $t2, true__605 +bnez $t2, true__611 lw $t0, -96($fp) # Saves in local_c2i_Parse_internal_22 data_16 la $t0, data_16 @@ -5020,11 +5102,11 @@ bnez $a1, mismatch_19 li $v0, 1 end_19: move $t2, $v0 -# If local_c2i_Parse_internal_21 goto true__612 +# If local_c2i_Parse_internal_21 goto true__618 sw $t0, -96($fp) sw $t1, -0($fp) sw $t2, -92($fp) -bnez $t2, true__612 +bnez $t2, true__618 lw $t0, -108($fp) # Saves in local_c2i_Parse_internal_25 data_17 la $t0, data_17 @@ -5051,11 +5133,11 @@ bnez $a1, mismatch_20 li $v0, 1 end_20: move $t2, $v0 -# If local_c2i_Parse_internal_24 goto true__619 +# If local_c2i_Parse_internal_24 goto true__625 sw $t0, -108($fp) sw $t1, -0($fp) sw $t2, -104($fp) -bnez $t2, true__619 +bnez $t2, true__625 lw $t0, -120($fp) # Saves in local_c2i_Parse_internal_28 data_18 la $t0, data_18 @@ -5082,11 +5164,11 @@ bnez $a1, mismatch_21 li $v0, 1 end_21: move $t2, $v0 -# If local_c2i_Parse_internal_27 goto true__626 +# If local_c2i_Parse_internal_27 goto true__632 sw $t0, -120($fp) sw $t1, -0($fp) sw $t2, -116($fp) -bnez $t2, true__626 +bnez $t2, true__632 lw $t0, -4($fp) lw $t1, -128($fp) # Find the actual name in the dispatch table @@ -5127,14 +5209,14 @@ sw $t2, -124($fp) sw $t0, -128($fp) sw $t1, -132($fp) sw $t2, -124($fp) -j end__626 -true__626: +j end__632 +true__632: lw $t0, -124($fp) # Moving 9 to local_c2i_Parse_internal_29 li $t0, 9 sw $t0, -124($fp) sw $t0, -124($fp) -end__626: +end__632: lw $t0, -124($fp) lw $t1, -112($fp) # Moving local_c2i_Parse_internal_29 to local_c2i_Parse_internal_26 @@ -5142,14 +5224,14 @@ move $t1, $t0 sw $t1, -112($fp) sw $t0, -124($fp) sw $t1, -112($fp) -j end__619 -true__619: +j end__625 +true__625: lw $t0, -112($fp) # Moving 8 to local_c2i_Parse_internal_26 li $t0, 8 sw $t0, -112($fp) sw $t0, -112($fp) -end__619: +end__625: lw $t0, -112($fp) lw $t1, -100($fp) # Moving local_c2i_Parse_internal_26 to local_c2i_Parse_internal_23 @@ -5157,14 +5239,14 @@ move $t1, $t0 sw $t1, -100($fp) sw $t0, -112($fp) sw $t1, -100($fp) -j end__612 -true__612: +j end__618 +true__618: lw $t0, -100($fp) # Moving 7 to local_c2i_Parse_internal_23 li $t0, 7 sw $t0, -100($fp) sw $t0, -100($fp) -end__612: +end__618: lw $t0, -100($fp) lw $t1, -88($fp) # Moving local_c2i_Parse_internal_23 to local_c2i_Parse_internal_20 @@ -5172,14 +5254,14 @@ move $t1, $t0 sw $t1, -88($fp) sw $t0, -100($fp) sw $t1, -88($fp) -j end__605 -true__605: +j end__611 +true__611: lw $t0, -88($fp) # Moving 6 to local_c2i_Parse_internal_20 li $t0, 6 sw $t0, -88($fp) sw $t0, -88($fp) -end__605: +end__611: lw $t0, -88($fp) lw $t1, -76($fp) # Moving local_c2i_Parse_internal_20 to local_c2i_Parse_internal_17 @@ -5187,14 +5269,14 @@ move $t1, $t0 sw $t1, -76($fp) sw $t0, -88($fp) sw $t1, -76($fp) -j end__598 -true__598: +j end__604 +true__604: lw $t0, -76($fp) # Moving 5 to local_c2i_Parse_internal_17 li $t0, 5 sw $t0, -76($fp) sw $t0, -76($fp) -end__598: +end__604: lw $t0, -76($fp) lw $t1, -64($fp) # Moving local_c2i_Parse_internal_17 to local_c2i_Parse_internal_14 @@ -5202,14 +5284,14 @@ move $t1, $t0 sw $t1, -64($fp) sw $t0, -76($fp) sw $t1, -64($fp) -j end__591 -true__591: +j end__597 +true__597: lw $t0, -64($fp) # Moving 4 to local_c2i_Parse_internal_14 li $t0, 4 sw $t0, -64($fp) sw $t0, -64($fp) -end__591: +end__597: lw $t0, -64($fp) lw $t1, -52($fp) # Moving local_c2i_Parse_internal_14 to local_c2i_Parse_internal_11 @@ -5217,14 +5299,14 @@ move $t1, $t0 sw $t1, -52($fp) sw $t0, -64($fp) sw $t1, -52($fp) -j end__584 -true__584: +j end__590 +true__590: lw $t0, -52($fp) # Moving 3 to local_c2i_Parse_internal_11 li $t0, 3 sw $t0, -52($fp) sw $t0, -52($fp) -end__584: +end__590: lw $t0, -52($fp) lw $t1, -40($fp) # Moving local_c2i_Parse_internal_11 to local_c2i_Parse_internal_8 @@ -5232,14 +5314,14 @@ move $t1, $t0 sw $t1, -40($fp) sw $t0, -52($fp) sw $t1, -40($fp) -j end__577 -true__577: +j end__583 +true__583: lw $t0, -40($fp) # Moving 2 to local_c2i_Parse_internal_8 li $t0, 2 sw $t0, -40($fp) sw $t0, -40($fp) -end__577: +end__583: lw $t0, -40($fp) lw $t1, -28($fp) # Moving local_c2i_Parse_internal_8 to local_c2i_Parse_internal_5 @@ -5247,14 +5329,14 @@ move $t1, $t0 sw $t1, -28($fp) sw $t0, -40($fp) sw $t1, -28($fp) -j end__570 -true__570: +j end__576 +true__576: lw $t0, -28($fp) # Moving 1 to local_c2i_Parse_internal_5 li $t0, 1 sw $t0, -28($fp) sw $t0, -28($fp) -end__570: +end__576: lw $t0, -28($fp) lw $t1, -16($fp) # Moving local_c2i_Parse_internal_5 to local_c2i_Parse_internal_2 @@ -5262,14 +5344,14 @@ move $t1, $t0 sw $t1, -16($fp) sw $t0, -28($fp) sw $t1, -16($fp) -j end__563 -true__563: +j end__569 +true__569: lw $t0, -16($fp) # Moving 0 to local_c2i_Parse_internal_2 li $t0, 0 sw $t0, -16($fp) sw $t0, -16($fp) -end__563: +end__569: lw $t0, -16($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -5358,10 +5440,10 @@ lw $t1, -8($fp) # local_a2i_Parse_internal_0 <- local_a2i_Parse_internal_1 = 0 li $t9, 0 seq $t1, $t0, $t9 -# If local_a2i_Parse_internal_0 goto true__691 +# If local_a2i_Parse_internal_0 goto true__697 sw $t0, -12($fp) sw $t1, -8($fp) -bnez $t1, true__691 +bnez $t1, true__697 lw $t0, -24($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -5420,11 +5502,11 @@ bnez $a1, mismatch_22 li $v0, 1 end_22: move $t2, $v0 -# If local_a2i_Parse_internal_3 goto true__703 +# If local_a2i_Parse_internal_3 goto true__709 sw $t0, -24($fp) sw $t1, -28($fp) sw $t2, -20($fp) -bnez $t2, true__703 +bnez $t2, true__709 lw $t0, -40($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -5483,11 +5565,11 @@ bnez $a1, mismatch_23 li $v0, 1 end_23: move $t2, $v0 -# If local_a2i_Parse_internal_7 goto true__715 +# If local_a2i_Parse_internal_7 goto true__721 sw $t0, -40($fp) sw $t1, -44($fp) sw $t2, -36($fp) -bnez $t2, true__715 +bnez $t2, true__721 lw $t0, -4($fp) lw $t1, -52($fp) # Find the actual name in the dispatch table @@ -5528,8 +5610,8 @@ move $t1, $t0 sw $t1, -48($fp) sw $t0, -52($fp) sw $t1, -48($fp) -j end__715 -true__715: +j end__721 +true__721: lw $t0, -60($fp) # Static Dispatch of the method length sw $fp, ($sp) @@ -5631,7 +5713,7 @@ move $t1, $t0 sw $t1, -48($fp) sw $t0, -68($fp) sw $t1, -48($fp) -end__715: +end__721: lw $t0, -48($fp) lw $t1, -32($fp) # Moving local_a2i_Parse_internal_10 to local_a2i_Parse_internal_6 @@ -5639,8 +5721,8 @@ move $t1, $t0 sw $t1, -32($fp) sw $t0, -48($fp) sw $t1, -32($fp) -j end__703 -true__703: +j end__709 +true__709: lw $t0, -80($fp) # Static Dispatch of the method length sw $fp, ($sp) @@ -5747,7 +5829,7 @@ sw $t2, -32($fp) sw $t0, -88($fp) sw $t1, -72($fp) sw $t2, -32($fp) -end__703: +end__709: lw $t0, -32($fp) lw $t1, -16($fp) # Moving local_a2i_Parse_internal_6 to local_a2i_Parse_internal_2 @@ -5755,14 +5837,14 @@ move $t1, $t0 sw $t1, -16($fp) sw $t0, -32($fp) sw $t1, -16($fp) -j end__691 -true__691: +j end__697 +true__697: lw $t0, -16($fp) # Moving 0 to local_a2i_Parse_internal_2 li $t0, 0 sw $t0, -16($fp) sw $t0, -16($fp) -end__691: +end__697: lw $t0, -16($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -5905,17 +5987,17 @@ sw $t0, -16($fp) sw $t1, -12($fp) sw $t2, -20($fp) sw $t3, -24($fp) -start__776: +start__782: lw $t0, -20($fp) lw $t1, -12($fp) lw $t2, -28($fp) # local_a2i_aux_Parse_internal_5 <- local_a2i_aux_Parse_i_3 < local_a2i_aux_Parse_j_1 slt $t2, $t0, $t1 -# If not local_a2i_aux_Parse_internal_5 goto end__776 +# If not local_a2i_aux_Parse_internal_5 goto end__782 sw $t0, -20($fp) sw $t1, -12($fp) sw $t2, -28($fp) -beqz $t2, end__776 +beqz $t2, end__782 lw $t0, -36($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -5979,12 +6061,12 @@ bnez $a1, mismatch_24 li $v0, 1 end_24: move $t3, $v0 -# If local_a2i_aux_Parse_internal_8 goto true__794 +# If local_a2i_aux_Parse_internal_8 goto true__800 sw $t0, -36($fp) sw $t1, -32($fp) sw $t2, -44($fp) sw $t3, -40($fp) -bnez $t3, true__794 +bnez $t3, true__800 lw $t0, -56($fp) # Saves in local_a2i_aux_Parse_internal_12 data_22 la $t0, data_22 @@ -6011,11 +6093,11 @@ bnez $a1, mismatch_25 li $v0, 1 end_25: move $t2, $v0 -# If local_a2i_aux_Parse_internal_11 goto true__801 +# If local_a2i_aux_Parse_internal_11 goto true__807 sw $t0, -56($fp) sw $t1, -32($fp) sw $t2, -52($fp) -bnez $t2, true__801 +bnez $t2, true__807 lw $t0, -8($fp) lw $t1, -68($fp) # local_a2i_aux_Parse_internal_15 <- local_a2i_aux_Parse_int_0 * 10 @@ -6110,7 +6192,7 @@ lw $t6, -12($fp) lw $t7, -84($fp) # local_a2i_aux_Parse_internal_19 <- local_a2i_aux_Parse_i_3 = local_a2i_aux_Parse_j_1 seq $t7, $t4, $t6 -# If local_a2i_aux_Parse_internal_19 goto true__821 +# If local_a2i_aux_Parse_internal_19 goto true__827 sw $t0, -76($fp) sw $t1, -68($fp) sw $t2, -64($fp) @@ -6119,7 +6201,7 @@ sw $t4, -20($fp) sw $t5, -80($fp) sw $t6, -12($fp) sw $t7, -84($fp) -bnez $t7, true__821 +bnez $t7, true__827 lw $t0, -92($fp) # Saves in local_a2i_aux_Parse_internal_21 data_23 la $t0, data_23 @@ -6129,8 +6211,8 @@ move $t1, $t0 sw $t1, -88($fp) sw $t0, -92($fp) sw $t1, -88($fp) -j end__821 -true__821: +j end__827 +true__827: lw $t0, -96($fp) # Saves in local_a2i_aux_Parse_internal_22 data_24 la $t0, data_24 @@ -6144,7 +6226,7 @@ sw $t2, -88($fp) sw $t0, -96($fp) sw $t1, -4($fp) sw $t2, -88($fp) -end__821: +end__827: lw $t0, -88($fp) lw $t1, -100($fp) # Moving local_a2i_aux_Parse_internal_20 to local_a2i_aux_Parse_internal_23 @@ -6157,8 +6239,8 @@ sw $t2, -60($fp) sw $t0, -88($fp) sw $t1, -100($fp) sw $t2, -60($fp) -j end__801 -true__801: +j end__807 +true__807: lw $t0, -20($fp) lw $t1, -104($fp) # local_a2i_aux_Parse_internal_24 <- local_a2i_aux_Parse_i_3 + 1 @@ -6256,7 +6338,7 @@ sw $t2, -12($fp) sw $t3, -20($fp) sw $t4, -124($fp) sw $t5, -60($fp) -end__801: +end__807: lw $t0, -60($fp) lw $t1, -48($fp) # Moving local_a2i_aux_Parse_internal_13 to local_a2i_aux_Parse_internal_10 @@ -6264,8 +6346,8 @@ move $t1, $t0 sw $t1, -48($fp) sw $t0, -60($fp) sw $t1, -48($fp) -j end__794 -true__794: +j end__800 +true__800: lw $t0, -20($fp) lw $t1, -128($fp) # local_a2i_aux_Parse_internal_30 <- local_a2i_aux_Parse_i_3 + 1 @@ -6363,7 +6445,7 @@ sw $t2, -12($fp) sw $t3, -20($fp) sw $t4, -148($fp) sw $t5, -48($fp) -end__794: +end__800: lw $t0, -48($fp) lw $t1, -24($fp) # Moving local_a2i_aux_Parse_internal_10 to local_a2i_aux_Parse_internal_4 @@ -6371,8 +6453,8 @@ move $t1, $t0 sw $t1, -24($fp) sw $t0, -48($fp) sw $t1, -24($fp) -j start__776 -end__776: +j start__782 +end__782: lw $t0, -8($fp) lw $t1, -152($fp) # Moving local_a2i_aux_Parse_int_0 to local_a2i_aux_Parse_internal_36 @@ -6433,11 +6515,11 @@ lw $t9, 12($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 12($v0) # Save the direction of the method function_and_BoolOp in t9 -lw $t9, 252($t8) +lw $t9, 264($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 16($v0) # Save the direction of the method function_or_BoolOp in t9 -lw $t9, 256($t8) +lw $t9, 268($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 20($v0) sw $v0, 8($t0) @@ -6609,16 +6691,16 @@ addiu $fp, $fp, 4 # Updates stack pointer pushing local_and_BoolOp_internal_0 to the stack addiu $sp, $sp, -4 lw $t0, -4($fp) -# If b1 goto true__923 +# If b1 goto true__929 sw $t0, -4($fp) -bnez $t0, true__923 +bnez $t0, true__929 lw $t0, -12($fp) # Moving 0 to local_and_BoolOp_internal_0 li $t0, 0 sw $t0, -12($fp) sw $t0, -12($fp) -j end__923 -true__923: +j end__929 +true__929: lw $t0, -0($fp) lw $t1, -12($fp) # Moving b2 to local_and_BoolOp_internal_0 @@ -6626,7 +6708,7 @@ move $t1, $t0 sw $t1, -12($fp) sw $t0, -0($fp) sw $t1, -12($fp) -end__923: +end__929: lw $t0, -12($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -6649,9 +6731,9 @@ addiu $fp, $fp, 4 # Updates stack pointer pushing local_or_BoolOp_internal_0 to the stack addiu $sp, $sp, -4 lw $t0, -4($fp) -# If b1 goto true__935 +# If b1 goto true__941 sw $t0, -4($fp) -bnez $t0, true__935 +bnez $t0, true__941 lw $t0, -0($fp) lw $t1, -12($fp) # Moving b2 to local_or_BoolOp_internal_0 @@ -6659,14 +6741,14 @@ move $t1, $t0 sw $t1, -12($fp) sw $t0, -0($fp) sw $t1, -12($fp) -j end__935 -true__935: +j end__941 +true__941: lw $t0, -12($fp) # Moving 1 to local_or_BoolOp_internal_0 li $t0, 1 sw $t0, -12($fp) sw $t0, -12($fp) -end__935: +end__941: lw $t0, -12($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -6684,6 +6766,15 @@ li $a0, 1 syscall .data +abort_msg: .asciiz "Abort called from class " +new_line: .asciiz " +" +string_abort: .asciiz "Abort called from class String +" +int_abort: .asciiz "Abort called from class Int +" +bool_abort: .asciiz "Abort called from class Bool +" type_Object: .asciiz "Object" type_IO: .asciiz "IO" type_String: .asciiz "String" @@ -6730,7 +6821,7 @@ data_22: .asciiz "," data_23: .asciiz "" data_24: .asciiz "" data_25: .asciiz "" -methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 zero_error: .asciiz "Division by zero error " case_void_error: .asciiz "Case on void error diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips new file mode 100644 index 00000000..ae373a62 --- /dev/null +++ b/tests/codegen/hairyscary.mips @@ -0,0 +1,6178 @@ +.text +.globl main +main: +# Save types directions in the types array +la $t9, types +# Save space to locate the type info +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_String +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 0($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Int +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 4($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Object +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 8($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Bool +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 12($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_IO +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 16($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Foo +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 20($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Bar +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 24($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Razz +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 28($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Bazz +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 32($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Main +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 36($t9) +# Copying parents +lw $v0, 0($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 4($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 8($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 12($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 16($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +lw $v0, 20($t9) +lw $t8, 32($t9) +sw $t8, 4($v0) +lw $v0, 24($t9) +lw $t8, 28($t9) +sw $t8, 4($v0) +lw $v0, 28($t9) +lw $t8, 20($t9) +sw $t8, 4($v0) +lw $v0, 32($t9) +lw $t8, 16($t9) +sw $t8, 4($v0) +lw $v0, 36($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +# Save method directions in the methods array +la $v0, methods +la $t9, entry +sw $t9, 0($v0) +la $t9, function_abort_Object +sw $t9, 4($v0) +la $t9, function_type_name_Object +sw $t9, 8($v0) +la $t9, function_copy_Object +sw $t9, 12($v0) +la $t9, function_out_string_IO +sw $t9, 16($v0) +la $t9, function_out_int_IO +sw $t9, 20($v0) +la $t9, function_in_int_IO +sw $t9, 24($v0) +la $t9, function_in_string_IO +sw $t9, 28($v0) +la $t9, function_length_String +sw $t9, 32($v0) +la $t9, function_concat_String +sw $t9, 36($v0) +la $t9, function_substr_String +sw $t9, 40($v0) +la $t9, function_type_name_String +sw $t9, 44($v0) +la $t9, function_copy_String +sw $t9, 48($v0) +la $t9, function_type_name_Int +sw $t9, 52($v0) +la $t9, function_copy_Int +sw $t9, 56($v0) +la $t9, function_type_name_Bool +sw $t9, 60($v0) +la $t9, function_copy_Bool +sw $t9, 64($v0) +la $t9, function_abort_String +sw $t9, 68($v0) +la $t9, function_abort_Int +sw $t9, 72($v0) +la $t9, function_abort_Bool +sw $t9, 76($v0) +la $t9, function_Foo_Foo +sw $t9, 80($v0) +la $t9, function_doh_Foo +sw $t9, 84($v0) +la $t9, function_Bar_Bar +sw $t9, 88($v0) +la $t9, function_Razz_Razz +sw $t9, 92($v0) +la $t9, function_Bazz_Bazz +sw $t9, 96($v0) +la $t9, function_printh_Bazz +sw $t9, 100($v0) +la $t9, function_doh_Bazz +sw $t9, 104($v0) +la $t9, function_Main_Main +sw $t9, 108($v0) +la $t9, function_main_Main +sw $t9, 112($v0) + +entry: +# Gets the params from the stack +move $fp, $sp +# Gets the frame pointer from the stack +# Updates stack pointer pushing local__internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local__internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 28 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Main +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 28 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 24 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_main_Main in t9 +lw $t9, 112($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_Main_Main in t9 +lw $t9, 108($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 36($t8) +sw $v0, 12($t0) +# Static Dispatch of the method Main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +# This function will consume the arguments +jal function_Main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# Static Dispatch of the method main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +li $v0, 0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Object_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_abort_Object_self_0 +move $t1, $t0 +sw $t1, -4($fp) +# Exiting the program +li $t8, 0 +# Printing abort message +li $v0, 4 +la $a0, abort_msg +syscall +li $v0, 4 +lw $a0, 0($t0) +syscall +li $v0, 4 +la $a0, new_line +syscall +li $v0, 17 +move $a0, $t8 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_type_name_Object_result_0 <- Type of self +lw $t1, 0($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +lw $t9, 4($t0) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +move $a0, $t9 +syscall +move $t1, $v0 +# Loop to copy every field of the previous object +# t8 the register to loop +li $t8, 0 +loop_0: +# In t9 is stored the size of the object +bge $t8, $t9, exit_0 +lw $a0, ($t0) +sw $a0, ($v0) +addi $v0, $v0, 4 +addi $t0, $t0, 4 +# Increase loop counter +addi $t8, $t8, 4 +j loop_0 +exit_0: +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_out_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_string_String_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_string_String_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing a string +li $v0, 4 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_out_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value number +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_int_IO_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_int_IO_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing an int +li $v0, 1 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_in_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_int_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Reading a int +li $v0, 5 +syscall +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_in_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_string_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t0, $v0 +# Reading a string +# Putting buffer in a0 +move $a0, $t0 +# Putting length of string in a1 +li $a1, 356 +li $v0, 8 +syscall +# Walks to eliminate the newline +move $t9, $t0 +start_1: +lb $t8, 0($t9) +beqz $t8, end_1 +add $t9, $t9, 1 +j start_1 +end_1: +addiu $t9, $t9, -1 +sb $0, ($t9) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_length_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_length_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +move $t8, $t0 +# Determining the length of a string +loop_2: +lb $t9, 0($t8) +beq $t9, $zero, end_2 +addi $t8, $t8, 1 +j loop_2 +end_2: +sub $t1, $t8, $t0 +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_concat_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_concat_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -8($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +# Copy the first string to dest +move $a0, $t0 +move $a1, $t2 +sw $ra, ($sp) +addiu $sp, $sp, -4 +jal strcopier +# Concatenate second string on result buffer +move $a0, $t1 +move $a1, $v0 +jal strcopier +sb $0, 0($v0) +addiu $sp, $sp, 4 +lw $ra, ($sp) +j finish_3 +# Definition of strcopier +strcopier: +# In a0 is the source and in a1 is the destination +loop_3: +lb $t8, ($a0) +beq $t8, $zero, end_3 +addiu $a0, $a0, 1 +sb $t8, ($a1) +addiu $a1, $a1, 1 +b loop_3 +end_3: +move $v0, $a1 +jr $ra +finish_3: +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_substr_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value begin +addiu $fp, $fp, 4 +# Pops the register with the param value end +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_substr_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -12($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +lw $t3, -8($fp) +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t3 +start_4: +lb $t9, 0($t8) +beqz $t9, error_4 +addi $v0, 1 +bgt $v0, $t0, end_len_4 +addi $t8, 1 +j start_4 +end_len_4: +# Saving dest to iterate over him +move $v0, $t2 +loop_4: +sub $t9, $v0, $t2 +beq $t9, $t1, end_4 +lb $t9, 0($t8) +beqz $t9, error_4 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_4 +error_4: +la $a0, index_error +li $v0, 4 +move $a0, $t3 +syscall +li $v0, 1 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t1 +syscall +j .raise +end_4: +sb $0, 0($v0) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_String_result_0 type_String +la $t0, type_String +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_String_result_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +move $t8, $t0 +# Determining the length of a string +loop_5: +lb $t9, 0($t8) +beq $t9, $zero, end_5 +addi $t8, $t8, 1 +j loop_5 +end_5: +sub $t1, $t8, $t0 +lw $t2, -12($fp) +# local_copy_String_result_2 <- local_copy_String_result_1 - 1 +addi $t2, $t1, -1 +lw $t3, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t3, $v0 +li $t8, 0 +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t0 +start_6: +lb $t9, 0($t8) +beqz $t9, error_6 +addi $v0, 1 +bgt $v0, $t8, end_len_6 +addi $t8, 1 +j start_6 +end_len_6: +# Saving dest to iterate over him +move $v0, $t3 +loop_6: +sub $t9, $v0, $t3 +beq $t9, $t2, end_6 +lb $t9, 0($t8) +beqz $t9, error_6 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_6 +error_6: +la $a0, index_error +li $v0, 4 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t8 +syscall +li $v0, 1 +move $a0, $t2 +syscall +j .raise +end_6: +sb $0, 0($v0) +move $v0, $t3 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +sw $t3, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Int_result_0 type_Int +la $t0, type_Int +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_Int_result_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Bool_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Bool_result_0 type_Bool +la $t0, type_Bool +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_result_Bool_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_result_Bool_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_String_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self string_abort +la $t0, string_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Int_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self int_abort +la $t0, int_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Bool_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self bool_abort +la $t0, bool_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_Foo_Foo: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_Foo_Foo_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_n_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_n_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_n_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_n_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_15 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_16 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_17 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_18 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_n_19 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_20 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_n_21 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_22 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_23 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_n_24 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_25 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_26 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_27 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_28 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_a_29 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_30 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_g_31 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_32 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_33 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_34 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_35 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# self . h <- SET 1 +li $t9, 1 +sw $t9, 16($t0) +lw $t1, -8($fp) +# local_Foo_Foo_internal_1 <- Type of self +lw $t1, 0($t0) +lw $t2, -12($fp) +# Saves in local_Foo_Foo_internal_2 data_0 +la $t2, data_0 +# local_Foo_Foo_internal_1 <- local_Foo_Foo_internal_1 = local_Foo_Foo_internal_2 +move $t8, $t1 +move $t9, $t2 +loop_7: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_7 +beqz $a1, mismatch_7 +seq $v0, $a0, $a1 +beqz $v0, mismatch_7 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_7 +mismatch_7: +li $v0, 0 +j end_7 +check_7: +bnez $a1, mismatch_7 +li $v0, 1 +end_7: +move $t1, $v0 +# If local_Foo_Foo_internal_1 goto error__51 +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +bnez $t1, error__51 +lw $t0, -0($fp) +lw $t1, -16($fp) +la $t9, type_Bar +lw $v0, 12($t0) +loop_8: +move $t8, $v0 +beqz $t8, false_8 +lw $v1, 0($t8) +beq $t9, $v1, true_8 +lw $v0, 4($t8) +j loop_8 +true_8: +li $t1, 1 +j end_8 +false_8: +li $t1, 0 +end_8: +# If not local_Foo_Foo_internal_3 goto next__57_0 +sw $t0, -0($fp) +sw $t1, -16($fp) +beqz $t1, next__57_0 +lw $t0, -0($fp) +lw $t1, -20($fp) +# Moving self to local_Foo_Foo_n_4 +move $t1, $t0 +sw $t1, -20($fp) +lw $t2, -4($fp) +# Moving local_Foo_Foo_n_4 to local_Foo_Foo_internal_0 +move $t2, $t1 +sw $t2, -4($fp) +sw $t0, -0($fp) +sw $t1, -20($fp) +sw $t2, -4($fp) +j end__51 +next__57_0: +lw $t0, -0($fp) +lw $t1, -24($fp) +la $t9, type_Razz +lw $v0, 12($t0) +loop_9: +move $t8, $v0 +beqz $t8, false_9 +lw $v1, 0($t8) +beq $t9, $v1, true_9 +lw $v0, 4($t8) +j loop_9 +true_9: +li $t1, 1 +j end_9 +false_9: +li $t1, 0 +end_9: +# If not local_Foo_Foo_internal_5 goto next__65_1 +sw $t0, -0($fp) +sw $t1, -24($fp) +beqz $t1, next__65_1 +lw $t0, -0($fp) +lw $t1, -28($fp) +# Moving self to local_Foo_Foo_n_6 +move $t1, $t0 +sw $t1, -28($fp) +lw $t2, -32($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 48 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Bar +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 48 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 48 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_printh_Bazz in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_doh_Foo in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Foo_Foo in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_Bar_Bar in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t2) +# Static Dispatch of the method Bar +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -28($fp) +sw $t2, -32($fp) +# This function will consume the arguments +jal function_Bar_Bar +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -32($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +# Moving local_Foo_Foo_internal_7 to local_Foo_Foo_internal_0 +move $t1, $t0 +sw $t1, -4($fp) +sw $t0, -32($fp) +sw $t1, -4($fp) +j end__51 +next__65_1: +lw $t0, -0($fp) +lw $t1, -36($fp) +la $t9, type_Foo +lw $v0, 12($t0) +loop_10: +move $t8, $v0 +beqz $t8, false_10 +lw $v1, 0($t8) +beq $t9, $v1, true_10 +lw $v0, 4($t8) +j loop_10 +true_10: +li $t1, 1 +j end_10 +false_10: +li $t1, 0 +end_10: +# If not local_Foo_Foo_internal_8 goto next__76_2 +sw $t0, -0($fp) +sw $t1, -36($fp) +beqz $t1, next__76_2 +lw $t0, -0($fp) +lw $t1, -40($fp) +# Moving self to local_Foo_Foo_n_9 +move $t1, $t0 +sw $t1, -40($fp) +lw $t2, -44($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 40 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Razz +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 40 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 48 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_printh_Bazz in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_doh_Foo in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Foo_Foo in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_Razz_Razz in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 28($t8) +sw $v0, 12($t2) +# Static Dispatch of the method Razz +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -40($fp) +sw $t2, -44($fp) +# This function will consume the arguments +jal function_Razz_Razz +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -44($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +# Moving local_Foo_Foo_internal_10 to local_Foo_Foo_internal_0 +move $t1, $t0 +sw $t1, -4($fp) +sw $t0, -44($fp) +sw $t1, -4($fp) +j end__51 +next__76_2: +lw $t0, -0($fp) +lw $t1, -48($fp) +la $t9, type_Bazz +lw $v0, 12($t0) +loop_11: +move $t8, $v0 +beqz $t8, false_11 +lw $v1, 0($t8) +beq $t9, $v1, true_11 +lw $v0, 4($t8) +j loop_11 +true_11: +li $t1, 1 +j end_11 +false_11: +li $t1, 0 +end_11: +# If not local_Foo_Foo_internal_11 goto next__87_3 +sw $t0, -0($fp) +sw $t1, -48($fp) +beqz $t1, next__87_3 +lw $t0, -0($fp) +lw $t1, -52($fp) +# Moving self to local_Foo_Foo_n_12 +move $t1, $t0 +sw $t1, -52($fp) +lw $t2, -56($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 32 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Foo +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 32 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 44 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_printh_Bazz in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_doh_Foo in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Foo_Foo in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t2) +# Static Dispatch of the method Foo +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -52($fp) +sw $t2, -56($fp) +# This function will consume the arguments +jal function_Foo_Foo +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -56($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +# Moving local_Foo_Foo_internal_13 to local_Foo_Foo_internal_0 +move $t1, $t0 +sw $t1, -4($fp) +sw $t0, -56($fp) +sw $t1, -4($fp) +j end__51 +next__87_3: +la $a0, case_error +j .raise +error__51: +la $a0, case_void_error +j .raise +end__51: +lw $t0, -4($fp) +lw $t1, -0($fp) +# self . g <- SET local_Foo_Foo_internal_0 +sw $t0, 20($t1) +lw $t2, -60($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_printh_Bazz +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -60($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -60($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . i <- SET local_Foo_Foo_internal_14 +sw $t0, 24($t1) +lw $t2, -68($fp) +# local_Foo_Foo_internal_16 <- Type of self +lw $t2, 0($t1) +lw $t3, -72($fp) +# Saves in local_Foo_Foo_internal_17 data_0 +la $t3, data_0 +# local_Foo_Foo_internal_16 <- local_Foo_Foo_internal_16 = local_Foo_Foo_internal_17 +move $t8, $t2 +move $t9, $t3 +loop_12: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_12 +beqz $a1, mismatch_12 +seq $v0, $a0, $a1 +beqz $v0, mismatch_12 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_12 +mismatch_12: +li $v0, 0 +j end_12 +check_12: +bnez $a1, mismatch_12 +li $v0, 1 +end_12: +move $t2, $v0 +# If local_Foo_Foo_internal_16 goto error__107 +sw $t0, -60($fp) +sw $t1, -0($fp) +sw $t2, -68($fp) +sw $t3, -72($fp) +bnez $t2, error__107 +lw $t0, -0($fp) +lw $t1, -76($fp) +la $t9, type_Bar +lw $v0, 12($t0) +loop_13: +move $t8, $v0 +beqz $t8, false_13 +lw $v1, 0($t8) +beq $t9, $v1, true_13 +lw $v0, 4($t8) +j loop_13 +true_13: +li $t1, 1 +j end_13 +false_13: +li $t1, 0 +end_13: +# If not local_Foo_Foo_internal_18 goto next__113_0 +sw $t0, -0($fp) +sw $t1, -76($fp) +beqz $t1, next__113_0 +lw $t0, -0($fp) +lw $t1, -80($fp) +# Moving self to local_Foo_Foo_n_19 +move $t1, $t0 +sw $t1, -80($fp) +lw $t2, -64($fp) +# Moving local_Foo_Foo_n_19 to local_Foo_Foo_internal_15 +move $t2, $t1 +sw $t2, -64($fp) +sw $t0, -0($fp) +sw $t1, -80($fp) +sw $t2, -64($fp) +j end__107 +next__113_0: +lw $t0, -0($fp) +lw $t1, -84($fp) +la $t9, type_Razz +lw $v0, 12($t0) +loop_14: +move $t8, $v0 +beqz $t8, false_14 +lw $v1, 0($t8) +beq $t9, $v1, true_14 +lw $v0, 4($t8) +j loop_14 +true_14: +li $t1, 1 +j end_14 +false_14: +li $t1, 0 +end_14: +# If not local_Foo_Foo_internal_20 goto next__121_1 +sw $t0, -0($fp) +sw $t1, -84($fp) +beqz $t1, next__121_1 +lw $t0, -0($fp) +lw $t1, -88($fp) +# Moving self to local_Foo_Foo_n_21 +move $t1, $t0 +sw $t1, -88($fp) +lw $t2, -92($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 48 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Bar +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 48 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 48 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_printh_Bazz in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_doh_Foo in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Foo_Foo in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_Bar_Bar in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t2) +# Static Dispatch of the method Bar +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -88($fp) +sw $t2, -92($fp) +# This function will consume the arguments +jal function_Bar_Bar +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -92($fp) +# saves the return value +move $t0, $v0 +lw $t1, -64($fp) +# Moving local_Foo_Foo_internal_22 to local_Foo_Foo_internal_15 +move $t1, $t0 +sw $t1, -64($fp) +sw $t0, -92($fp) +sw $t1, -64($fp) +j end__107 +next__121_1: +lw $t0, -0($fp) +lw $t1, -96($fp) +la $t9, type_Foo +lw $v0, 12($t0) +loop_15: +move $t8, $v0 +beqz $t8, false_15 +lw $v1, 0($t8) +beq $t9, $v1, true_15 +lw $v0, 4($t8) +j loop_15 +true_15: +li $t1, 1 +j end_15 +false_15: +li $t1, 0 +end_15: +# If not local_Foo_Foo_internal_23 goto next__132_2 +sw $t0, -0($fp) +sw $t1, -96($fp) +beqz $t1, next__132_2 +lw $t0, -0($fp) +lw $t1, -100($fp) +# Moving self to local_Foo_Foo_n_24 +move $t1, $t0 +sw $t1, -100($fp) +lw $t2, -104($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 40 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Razz +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 40 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 48 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_printh_Bazz in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_doh_Foo in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Foo_Foo in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_Razz_Razz in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 28($t8) +sw $v0, 12($t2) +# Static Dispatch of the method Razz +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -100($fp) +sw $t2, -104($fp) +# This function will consume the arguments +jal function_Razz_Razz +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -104($fp) +# saves the return value +move $t0, $v0 +lw $t1, -64($fp) +# Moving local_Foo_Foo_internal_25 to local_Foo_Foo_internal_15 +move $t1, $t0 +sw $t1, -64($fp) +sw $t0, -104($fp) +sw $t1, -64($fp) +j end__107 +next__132_2: +la $a0, case_error +j .raise +error__107: +la $a0, case_void_error +j .raise +end__107: +lw $t0, -64($fp) +lw $t1, -0($fp) +# self . a <- SET local_Foo_Foo_internal_15 +sw $t0, 28($t1) +lw $t2, -120($fp) +# local_Foo_Foo_a_29 <- GET self . a +lw $t2, 28($t1) +lw $t3, -124($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_doh_Foo +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -64($fp) +sw $t1, -0($fp) +sw $t2, -120($fp) +sw $t3, -124($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -124($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -128($fp) +# local_Foo_Foo_g_31 <- GET self . g +lw $t2, 20($t1) +lw $t3, -132($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_doh_Foo +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -124($fp) +sw $t1, -0($fp) +sw $t2, -128($fp) +sw $t3, -132($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -132($fp) +# saves the return value +move $t0, $v0 +lw $t1, -124($fp) +lw $t2, -116($fp) +# local_Foo_Foo_internal_28 <- local_Foo_Foo_internal_30 + local_Foo_Foo_internal_32 +add $t2, $t1, $t0 +lw $t3, -0($fp) +lw $t4, -136($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_doh_Foo +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -132($fp) +sw $t1, -124($fp) +sw $t2, -116($fp) +sw $t3, -0($fp) +sw $t4, -136($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -136($fp) +# saves the return value +move $t0, $v0 +lw $t1, -116($fp) +lw $t2, -112($fp) +# local_Foo_Foo_internal_27 <- local_Foo_Foo_internal_28 + local_Foo_Foo_internal_33 +add $t2, $t1, $t0 +lw $t3, -0($fp) +lw $t4, -140($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_printh_Bazz +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -136($fp) +sw $t1, -116($fp) +sw $t2, -112($fp) +sw $t3, -0($fp) +sw $t4, -140($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -140($fp) +# saves the return value +move $t0, $v0 +lw $t1, -112($fp) +lw $t2, -108($fp) +# local_Foo_Foo_internal_26 <- local_Foo_Foo_internal_27 + local_Foo_Foo_internal_34 +add $t2, $t1, $t0 +lw $t3, -0($fp) +# self . b <- SET local_Foo_Foo_internal_26 +sw $t2, 32($t3) +lw $t4, -144($fp) +# Moving self to local_Foo_Foo_internal_35 +move $t4, $t3 +sw $t4, -144($fp) +move $v0, $t4 +# Empty all used registers and saves them to memory +sw $t0, -140($fp) +sw $t1, -112($fp) +sw $t2, -108($fp) +sw $t3, -0($fp) +sw $t4, -144($fp) +# Removing all locals from stack +addiu $sp, $sp, 148 +jr $ra + + +function_doh_Foo: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_doh_Foo_i_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_doh_Foo_h_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_doh_Foo_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_doh_Foo_h_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_doh_Foo_i_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_doh_Foo_internal_5 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +# local_doh_Foo_h_1 <- GET self . h +lw $t1, 16($t0) +lw $t2, -4($fp) +# Moving local_doh_Foo_h_1 to local_doh_Foo_i_0 +move $t2, $t1 +sw $t2, -4($fp) +lw $t3, -16($fp) +# local_doh_Foo_h_3 <- GET self . h +lw $t3, 16($t0) +lw $t4, -12($fp) +# local_doh_Foo_internal_2 <- local_doh_Foo_h_3 + 2 +addi $t4, $t3, 2 +# self . h <- SET local_doh_Foo_internal_2 +sw $t4, 16($t0) +lw $t5, -20($fp) +# local_doh_Foo_i_4 <- GET self . i +lw $t5, 24($t0) +lw $t6, -24($fp) +# Moving local_doh_Foo_i_4 to local_doh_Foo_internal_5 +move $t6, $t5 +sw $t6, -24($fp) +move $v0, $t6 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -4($fp) +sw $t3, -16($fp) +sw $t4, -12($fp) +sw $t5, -20($fp) +sw $t6, -24($fp) +# Removing all locals from stack +addiu $sp, $sp, 28 +jr $ra + + +function_Bar_Bar: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_Bar_Bar_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_n_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_n_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_n_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_n_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_15 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_16 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_17 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_18 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_n_19 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_20 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_n_21 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_22 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_23 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_n_24 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_25 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_26 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_27 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_28 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_a_29 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_30 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_g_31 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_32 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_33 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_34 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_35 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_36 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_37 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_38 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_n_39 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_40 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_n_41 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_42 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_43 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_44 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_45 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_46 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_a_47 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_48 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_g_49 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_50 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_e_51 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_52 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_53 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_54 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_55 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_56 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_57 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# self . h <- SET 1 +li $t9, 1 +sw $t9, 16($t0) +lw $t1, -8($fp) +# local_Bar_Bar_internal_1 <- Type of self +lw $t1, 0($t0) +lw $t2, -12($fp) +# Saves in local_Bar_Bar_internal_2 data_0 +la $t2, data_0 +# local_Bar_Bar_internal_1 <- local_Bar_Bar_internal_1 = local_Bar_Bar_internal_2 +move $t8, $t1 +move $t9, $t2 +loop_16: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_16 +beqz $a1, mismatch_16 +seq $v0, $a0, $a1 +beqz $v0, mismatch_16 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_16 +mismatch_16: +li $v0, 0 +j end_16 +check_16: +bnez $a1, mismatch_16 +li $v0, 1 +end_16: +move $t1, $v0 +# If local_Bar_Bar_internal_1 goto error__192 +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +bnez $t1, error__192 +lw $t0, -0($fp) +lw $t1, -16($fp) +la $t9, type_Bar +lw $v0, 12($t0) +loop_17: +move $t8, $v0 +beqz $t8, false_17 +lw $v1, 0($t8) +beq $t9, $v1, true_17 +lw $v0, 4($t8) +j loop_17 +true_17: +li $t1, 1 +j end_17 +false_17: +li $t1, 0 +end_17: +# If not local_Bar_Bar_internal_3 goto next__198_0 +sw $t0, -0($fp) +sw $t1, -16($fp) +beqz $t1, next__198_0 +lw $t0, -0($fp) +lw $t1, -20($fp) +# Moving self to local_Bar_Bar_n_4 +move $t1, $t0 +sw $t1, -20($fp) +lw $t2, -4($fp) +# Moving local_Bar_Bar_n_4 to local_Bar_Bar_internal_0 +move $t2, $t1 +sw $t2, -4($fp) +sw $t0, -0($fp) +sw $t1, -20($fp) +sw $t2, -4($fp) +j end__192 +next__198_0: +lw $t0, -0($fp) +lw $t1, -24($fp) +la $t9, type_Razz +lw $v0, 12($t0) +loop_18: +move $t8, $v0 +beqz $t8, false_18 +lw $v1, 0($t8) +beq $t9, $v1, true_18 +lw $v0, 4($t8) +j loop_18 +true_18: +li $t1, 1 +j end_18 +false_18: +li $t1, 0 +end_18: +# If not local_Bar_Bar_internal_5 goto next__206_1 +sw $t0, -0($fp) +sw $t1, -24($fp) +beqz $t1, next__206_1 +lw $t0, -0($fp) +lw $t1, -28($fp) +# Moving self to local_Bar_Bar_n_6 +move $t1, $t0 +sw $t1, -28($fp) +lw $t2, -32($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 48 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Bar +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 48 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 48 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_printh_Bazz in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_doh_Foo in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Foo_Foo in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_Bar_Bar in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t2) +# Static Dispatch of the method Bar +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -28($fp) +sw $t2, -32($fp) +# This function will consume the arguments +jal function_Bar_Bar +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -32($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +# Moving local_Bar_Bar_internal_7 to local_Bar_Bar_internal_0 +move $t1, $t0 +sw $t1, -4($fp) +sw $t0, -32($fp) +sw $t1, -4($fp) +j end__192 +next__206_1: +lw $t0, -0($fp) +lw $t1, -36($fp) +la $t9, type_Foo +lw $v0, 12($t0) +loop_19: +move $t8, $v0 +beqz $t8, false_19 +lw $v1, 0($t8) +beq $t9, $v1, true_19 +lw $v0, 4($t8) +j loop_19 +true_19: +li $t1, 1 +j end_19 +false_19: +li $t1, 0 +end_19: +# If not local_Bar_Bar_internal_8 goto next__217_2 +sw $t0, -0($fp) +sw $t1, -36($fp) +beqz $t1, next__217_2 +lw $t0, -0($fp) +lw $t1, -40($fp) +# Moving self to local_Bar_Bar_n_9 +move $t1, $t0 +sw $t1, -40($fp) +lw $t2, -44($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 40 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Razz +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 40 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 48 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_printh_Bazz in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_doh_Foo in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Foo_Foo in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_Razz_Razz in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 28($t8) +sw $v0, 12($t2) +# Static Dispatch of the method Razz +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -40($fp) +sw $t2, -44($fp) +# This function will consume the arguments +jal function_Razz_Razz +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -44($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +# Moving local_Bar_Bar_internal_10 to local_Bar_Bar_internal_0 +move $t1, $t0 +sw $t1, -4($fp) +sw $t0, -44($fp) +sw $t1, -4($fp) +j end__192 +next__217_2: +lw $t0, -0($fp) +lw $t1, -48($fp) +la $t9, type_Bazz +lw $v0, 12($t0) +loop_20: +move $t8, $v0 +beqz $t8, false_20 +lw $v1, 0($t8) +beq $t9, $v1, true_20 +lw $v0, 4($t8) +j loop_20 +true_20: +li $t1, 1 +j end_20 +false_20: +li $t1, 0 +end_20: +# If not local_Bar_Bar_internal_11 goto next__228_3 +sw $t0, -0($fp) +sw $t1, -48($fp) +beqz $t1, next__228_3 +lw $t0, -0($fp) +lw $t1, -52($fp) +# Moving self to local_Bar_Bar_n_12 +move $t1, $t0 +sw $t1, -52($fp) +lw $t2, -56($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 32 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Foo +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 32 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 44 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_printh_Bazz in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_doh_Foo in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Foo_Foo in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t2) +# Static Dispatch of the method Foo +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -52($fp) +sw $t2, -56($fp) +# This function will consume the arguments +jal function_Foo_Foo +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -56($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +# Moving local_Bar_Bar_internal_13 to local_Bar_Bar_internal_0 +move $t1, $t0 +sw $t1, -4($fp) +sw $t0, -56($fp) +sw $t1, -4($fp) +j end__192 +next__228_3: +la $a0, case_error +j .raise +error__192: +la $a0, case_void_error +j .raise +end__192: +lw $t0, -4($fp) +lw $t1, -0($fp) +# self . g <- SET local_Bar_Bar_internal_0 +sw $t0, 20($t1) +lw $t2, -60($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_printh_Bazz +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -60($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -60($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . i <- SET local_Bar_Bar_internal_14 +sw $t0, 24($t1) +lw $t2, -68($fp) +# local_Bar_Bar_internal_16 <- Type of self +lw $t2, 0($t1) +lw $t3, -72($fp) +# Saves in local_Bar_Bar_internal_17 data_0 +la $t3, data_0 +# local_Bar_Bar_internal_16 <- local_Bar_Bar_internal_16 = local_Bar_Bar_internal_17 +move $t8, $t2 +move $t9, $t3 +loop_21: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_21 +beqz $a1, mismatch_21 +seq $v0, $a0, $a1 +beqz $v0, mismatch_21 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_21 +mismatch_21: +li $v0, 0 +j end_21 +check_21: +bnez $a1, mismatch_21 +li $v0, 1 +end_21: +move $t2, $v0 +# If local_Bar_Bar_internal_16 goto error__248 +sw $t0, -60($fp) +sw $t1, -0($fp) +sw $t2, -68($fp) +sw $t3, -72($fp) +bnez $t2, error__248 +lw $t0, -0($fp) +lw $t1, -76($fp) +la $t9, type_Bar +lw $v0, 12($t0) +loop_22: +move $t8, $v0 +beqz $t8, false_22 +lw $v1, 0($t8) +beq $t9, $v1, true_22 +lw $v0, 4($t8) +j loop_22 +true_22: +li $t1, 1 +j end_22 +false_22: +li $t1, 0 +end_22: +# If not local_Bar_Bar_internal_18 goto next__254_0 +sw $t0, -0($fp) +sw $t1, -76($fp) +beqz $t1, next__254_0 +lw $t0, -0($fp) +lw $t1, -80($fp) +# Moving self to local_Bar_Bar_n_19 +move $t1, $t0 +sw $t1, -80($fp) +lw $t2, -64($fp) +# Moving local_Bar_Bar_n_19 to local_Bar_Bar_internal_15 +move $t2, $t1 +sw $t2, -64($fp) +sw $t0, -0($fp) +sw $t1, -80($fp) +sw $t2, -64($fp) +j end__248 +next__254_0: +lw $t0, -0($fp) +lw $t1, -84($fp) +la $t9, type_Razz +lw $v0, 12($t0) +loop_23: +move $t8, $v0 +beqz $t8, false_23 +lw $v1, 0($t8) +beq $t9, $v1, true_23 +lw $v0, 4($t8) +j loop_23 +true_23: +li $t1, 1 +j end_23 +false_23: +li $t1, 0 +end_23: +# If not local_Bar_Bar_internal_20 goto next__262_1 +sw $t0, -0($fp) +sw $t1, -84($fp) +beqz $t1, next__262_1 +lw $t0, -0($fp) +lw $t1, -88($fp) +# Moving self to local_Bar_Bar_n_21 +move $t1, $t0 +sw $t1, -88($fp) +lw $t2, -92($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 48 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Bar +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 48 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 48 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_printh_Bazz in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_doh_Foo in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Foo_Foo in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_Bar_Bar in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t2) +# Static Dispatch of the method Bar +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -88($fp) +sw $t2, -92($fp) +# This function will consume the arguments +jal function_Bar_Bar +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -92($fp) +# saves the return value +move $t0, $v0 +lw $t1, -64($fp) +# Moving local_Bar_Bar_internal_22 to local_Bar_Bar_internal_15 +move $t1, $t0 +sw $t1, -64($fp) +sw $t0, -92($fp) +sw $t1, -64($fp) +j end__248 +next__262_1: +lw $t0, -0($fp) +lw $t1, -96($fp) +la $t9, type_Foo +lw $v0, 12($t0) +loop_24: +move $t8, $v0 +beqz $t8, false_24 +lw $v1, 0($t8) +beq $t9, $v1, true_24 +lw $v0, 4($t8) +j loop_24 +true_24: +li $t1, 1 +j end_24 +false_24: +li $t1, 0 +end_24: +# If not local_Bar_Bar_internal_23 goto next__273_2 +sw $t0, -0($fp) +sw $t1, -96($fp) +beqz $t1, next__273_2 +lw $t0, -0($fp) +lw $t1, -100($fp) +# Moving self to local_Bar_Bar_n_24 +move $t1, $t0 +sw $t1, -100($fp) +lw $t2, -104($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 40 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Razz +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 40 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 48 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_printh_Bazz in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_doh_Foo in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Foo_Foo in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_Razz_Razz in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 28($t8) +sw $v0, 12($t2) +# Static Dispatch of the method Razz +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -100($fp) +sw $t2, -104($fp) +# This function will consume the arguments +jal function_Razz_Razz +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -104($fp) +# saves the return value +move $t0, $v0 +lw $t1, -64($fp) +# Moving local_Bar_Bar_internal_25 to local_Bar_Bar_internal_15 +move $t1, $t0 +sw $t1, -64($fp) +sw $t0, -104($fp) +sw $t1, -64($fp) +j end__248 +next__273_2: +la $a0, case_error +j .raise +error__248: +la $a0, case_void_error +j .raise +end__248: +lw $t0, -64($fp) +lw $t1, -0($fp) +# self . a <- SET local_Bar_Bar_internal_15 +sw $t0, 28($t1) +lw $t2, -120($fp) +# local_Bar_Bar_a_29 <- GET self . a +lw $t2, 28($t1) +lw $t3, -124($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_doh_Foo +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -64($fp) +sw $t1, -0($fp) +sw $t2, -120($fp) +sw $t3, -124($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -124($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -128($fp) +# local_Bar_Bar_g_31 <- GET self . g +lw $t2, 20($t1) +lw $t3, -132($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_doh_Foo +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -124($fp) +sw $t1, -0($fp) +sw $t2, -128($fp) +sw $t3, -132($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -132($fp) +# saves the return value +move $t0, $v0 +lw $t1, -124($fp) +lw $t2, -116($fp) +# local_Bar_Bar_internal_28 <- local_Bar_Bar_internal_30 + local_Bar_Bar_internal_32 +add $t2, $t1, $t0 +lw $t3, -0($fp) +lw $t4, -136($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_doh_Foo +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -132($fp) +sw $t1, -124($fp) +sw $t2, -116($fp) +sw $t3, -0($fp) +sw $t4, -136($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -136($fp) +# saves the return value +move $t0, $v0 +lw $t1, -116($fp) +lw $t2, -112($fp) +# local_Bar_Bar_internal_27 <- local_Bar_Bar_internal_28 + local_Bar_Bar_internal_33 +add $t2, $t1, $t0 +lw $t3, -0($fp) +lw $t4, -140($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_printh_Bazz +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -136($fp) +sw $t1, -116($fp) +sw $t2, -112($fp) +sw $t3, -0($fp) +sw $t4, -140($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -140($fp) +# saves the return value +move $t0, $v0 +lw $t1, -112($fp) +lw $t2, -108($fp) +# local_Bar_Bar_internal_26 <- local_Bar_Bar_internal_27 + local_Bar_Bar_internal_34 +add $t2, $t1, $t0 +lw $t3, -0($fp) +# self . b <- SET local_Bar_Bar_internal_26 +sw $t2, 32($t3) +lw $t4, -148($fp) +# local_Bar_Bar_internal_36 <- Type of self +lw $t4, 0($t3) +lw $t5, -152($fp) +# Saves in local_Bar_Bar_internal_37 data_0 +la $t5, data_0 +# local_Bar_Bar_internal_36 <- local_Bar_Bar_internal_36 = local_Bar_Bar_internal_37 +move $t8, $t4 +move $t9, $t5 +loop_25: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_25 +beqz $a1, mismatch_25 +seq $v0, $a0, $a1 +beqz $v0, mismatch_25 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_25 +mismatch_25: +li $v0, 0 +j end_25 +check_25: +bnez $a1, mismatch_25 +li $v0, 1 +end_25: +move $t4, $v0 +# If local_Bar_Bar_internal_36 goto error__311 +sw $t0, -140($fp) +sw $t1, -112($fp) +sw $t2, -108($fp) +sw $t3, -0($fp) +sw $t4, -148($fp) +sw $t5, -152($fp) +bnez $t4, error__311 +lw $t0, -0($fp) +lw $t1, -156($fp) +la $t9, type_Bar +lw $v0, 12($t0) +loop_26: +move $t8, $v0 +beqz $t8, false_26 +lw $v1, 0($t8) +beq $t9, $v1, true_26 +lw $v0, 4($t8) +j loop_26 +true_26: +li $t1, 1 +j end_26 +false_26: +li $t1, 0 +end_26: +# If not local_Bar_Bar_internal_38 goto next__317_0 +sw $t0, -0($fp) +sw $t1, -156($fp) +beqz $t1, next__317_0 +lw $t0, -0($fp) +lw $t1, -160($fp) +# Moving self to local_Bar_Bar_n_39 +move $t1, $t0 +sw $t1, -160($fp) +lw $t2, -144($fp) +# Moving local_Bar_Bar_n_39 to local_Bar_Bar_internal_35 +move $t2, $t1 +sw $t2, -144($fp) +sw $t0, -0($fp) +sw $t1, -160($fp) +sw $t2, -144($fp) +j end__311 +next__317_0: +lw $t0, -0($fp) +lw $t1, -164($fp) +la $t9, type_Razz +lw $v0, 12($t0) +loop_27: +move $t8, $v0 +beqz $t8, false_27 +lw $v1, 0($t8) +beq $t9, $v1, true_27 +lw $v0, 4($t8) +j loop_27 +true_27: +li $t1, 1 +j end_27 +false_27: +li $t1, 0 +end_27: +# If not local_Bar_Bar_internal_40 goto next__325_1 +sw $t0, -0($fp) +sw $t1, -164($fp) +beqz $t1, next__325_1 +lw $t0, -0($fp) +lw $t1, -168($fp) +# Moving self to local_Bar_Bar_n_41 +move $t1, $t0 +sw $t1, -168($fp) +lw $t2, -172($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 48 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Bar +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 48 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 48 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_printh_Bazz in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_doh_Foo in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Foo_Foo in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_Bar_Bar in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t2) +# Static Dispatch of the method Bar +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -168($fp) +sw $t2, -172($fp) +# This function will consume the arguments +jal function_Bar_Bar +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -172($fp) +# saves the return value +move $t0, $v0 +lw $t1, -144($fp) +# Moving local_Bar_Bar_internal_42 to local_Bar_Bar_internal_35 +move $t1, $t0 +sw $t1, -144($fp) +sw $t0, -172($fp) +sw $t1, -144($fp) +j end__311 +next__325_1: +la $a0, case_error +j .raise +error__311: +la $a0, case_void_error +j .raise +end__311: +lw $t0, -144($fp) +lw $t1, -0($fp) +# self . e <- SET local_Bar_Bar_internal_35 +sw $t0, 36($t1) +lw $t2, -192($fp) +# local_Bar_Bar_a_47 <- GET self . a +lw $t2, 28($t1) +lw $t3, -196($fp) +# Static Dispatch of the method doh +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -144($fp) +sw $t1, -0($fp) +sw $t2, -192($fp) +sw $t3, -196($fp) +# This function will consume the arguments +jal function_doh_Bazz +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -196($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -200($fp) +# local_Bar_Bar_g_49 <- GET self . g +lw $t2, 20($t1) +lw $t3, -204($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_doh_Foo +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -196($fp) +sw $t1, -0($fp) +sw $t2, -200($fp) +sw $t3, -204($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -204($fp) +# saves the return value +move $t0, $v0 +lw $t1, -196($fp) +lw $t2, -188($fp) +# local_Bar_Bar_internal_46 <- local_Bar_Bar_internal_48 + local_Bar_Bar_internal_50 +add $t2, $t1, $t0 +lw $t3, -0($fp) +lw $t4, -208($fp) +# local_Bar_Bar_e_51 <- GET self . e +lw $t4, 36($t3) +lw $t5, -212($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t4) +# Saves in t8 the direction of function_doh_Foo +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t4, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -204($fp) +sw $t1, -196($fp) +sw $t2, -188($fp) +sw $t3, -0($fp) +sw $t4, -208($fp) +sw $t5, -212($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -212($fp) +# saves the return value +move $t0, $v0 +lw $t1, -188($fp) +lw $t2, -184($fp) +# local_Bar_Bar_internal_45 <- local_Bar_Bar_internal_46 + local_Bar_Bar_internal_52 +add $t2, $t1, $t0 +lw $t3, -0($fp) +lw $t4, -216($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_doh_Foo +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -212($fp) +sw $t1, -188($fp) +sw $t2, -184($fp) +sw $t3, -0($fp) +sw $t4, -216($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -216($fp) +# saves the return value +move $t0, $v0 +lw $t1, -184($fp) +lw $t2, -180($fp) +# local_Bar_Bar_internal_44 <- local_Bar_Bar_internal_45 + local_Bar_Bar_internal_53 +add $t2, $t1, $t0 +lw $t3, -0($fp) +lw $t4, -220($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_printh_Bazz +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -216($fp) +sw $t1, -184($fp) +sw $t2, -180($fp) +sw $t3, -0($fp) +sw $t4, -220($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -220($fp) +# saves the return value +move $t0, $v0 +lw $t1, -180($fp) +lw $t2, -176($fp) +# local_Bar_Bar_internal_43 <- local_Bar_Bar_internal_44 + local_Bar_Bar_internal_54 +add $t2, $t1, $t0 +lw $t3, -0($fp) +# self . f <- SET local_Bar_Bar_internal_43 +sw $t2, 40($t3) +lw $t4, -224($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_doh_Foo +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -220($fp) +sw $t1, -180($fp) +sw $t2, -176($fp) +sw $t3, -0($fp) +sw $t4, -224($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -224($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . c <- SET local_Bar_Bar_internal_55 +sw $t0, 44($t1) +lw $t2, -228($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_printh_Bazz +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -224($fp) +sw $t1, -0($fp) +sw $t2, -228($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -228($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . d <- SET local_Bar_Bar_internal_56 +sw $t0, 48($t1) +lw $t2, -232($fp) +# Moving self to local_Bar_Bar_internal_57 +move $t2, $t1 +sw $t2, -232($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -228($fp) +sw $t1, -0($fp) +sw $t2, -232($fp) +# Removing all locals from stack +addiu $sp, $sp, 236 +jr $ra + + +function_Razz_Razz: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_Razz_Razz_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_n_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_n_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_n_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_n_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_15 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_16 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_17 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_18 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_n_19 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_20 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_n_21 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_22 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_23 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_n_24 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_25 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_26 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_27 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_28 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_a_29 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_30 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_g_31 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_32 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_33 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_34 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_35 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_36 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_37 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_38 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_n_39 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_40 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_n_41 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_42 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_43 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_44 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_45 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_46 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_a_47 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_48 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_g_49 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_50 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_e_51 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_52 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_53 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_54 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_55 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# self . h <- SET 1 +li $t9, 1 +sw $t9, 16($t0) +lw $t1, -8($fp) +# local_Razz_Razz_internal_1 <- Type of self +lw $t1, 0($t0) +lw $t2, -12($fp) +# Saves in local_Razz_Razz_internal_2 data_0 +la $t2, data_0 +# local_Razz_Razz_internal_1 <- local_Razz_Razz_internal_1 = local_Razz_Razz_internal_2 +move $t8, $t1 +move $t9, $t2 +loop_28: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_28 +beqz $a1, mismatch_28 +seq $v0, $a0, $a1 +beqz $v0, mismatch_28 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_28 +mismatch_28: +li $v0, 0 +j end_28 +check_28: +bnez $a1, mismatch_28 +li $v0, 1 +end_28: +move $t1, $v0 +# If local_Razz_Razz_internal_1 goto error__382 +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +bnez $t1, error__382 +lw $t0, -0($fp) +lw $t1, -16($fp) +la $t9, type_Bar +lw $v0, 12($t0) +loop_29: +move $t8, $v0 +beqz $t8, false_29 +lw $v1, 0($t8) +beq $t9, $v1, true_29 +lw $v0, 4($t8) +j loop_29 +true_29: +li $t1, 1 +j end_29 +false_29: +li $t1, 0 +end_29: +# If not local_Razz_Razz_internal_3 goto next__388_0 +sw $t0, -0($fp) +sw $t1, -16($fp) +beqz $t1, next__388_0 +lw $t0, -0($fp) +lw $t1, -20($fp) +# Moving self to local_Razz_Razz_n_4 +move $t1, $t0 +sw $t1, -20($fp) +lw $t2, -4($fp) +# Moving local_Razz_Razz_n_4 to local_Razz_Razz_internal_0 +move $t2, $t1 +sw $t2, -4($fp) +sw $t0, -0($fp) +sw $t1, -20($fp) +sw $t2, -4($fp) +j end__382 +next__388_0: +lw $t0, -0($fp) +lw $t1, -24($fp) +la $t9, type_Razz +lw $v0, 12($t0) +loop_30: +move $t8, $v0 +beqz $t8, false_30 +lw $v1, 0($t8) +beq $t9, $v1, true_30 +lw $v0, 4($t8) +j loop_30 +true_30: +li $t1, 1 +j end_30 +false_30: +li $t1, 0 +end_30: +# If not local_Razz_Razz_internal_5 goto next__396_1 +sw $t0, -0($fp) +sw $t1, -24($fp) +beqz $t1, next__396_1 +lw $t0, -0($fp) +lw $t1, -28($fp) +# Moving self to local_Razz_Razz_n_6 +move $t1, $t0 +sw $t1, -28($fp) +lw $t2, -32($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 48 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Bar +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 48 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 48 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_printh_Bazz in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_doh_Foo in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Foo_Foo in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_Bar_Bar in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t2) +# Static Dispatch of the method Bar +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -28($fp) +sw $t2, -32($fp) +# This function will consume the arguments +jal function_Bar_Bar +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -32($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +# Moving local_Razz_Razz_internal_7 to local_Razz_Razz_internal_0 +move $t1, $t0 +sw $t1, -4($fp) +sw $t0, -32($fp) +sw $t1, -4($fp) +j end__382 +next__396_1: +lw $t0, -0($fp) +lw $t1, -36($fp) +la $t9, type_Foo +lw $v0, 12($t0) +loop_31: +move $t8, $v0 +beqz $t8, false_31 +lw $v1, 0($t8) +beq $t9, $v1, true_31 +lw $v0, 4($t8) +j loop_31 +true_31: +li $t1, 1 +j end_31 +false_31: +li $t1, 0 +end_31: +# If not local_Razz_Razz_internal_8 goto next__407_2 +sw $t0, -0($fp) +sw $t1, -36($fp) +beqz $t1, next__407_2 +lw $t0, -0($fp) +lw $t1, -40($fp) +# Moving self to local_Razz_Razz_n_9 +move $t1, $t0 +sw $t1, -40($fp) +lw $t2, -44($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 40 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Razz +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 40 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 48 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_printh_Bazz in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_doh_Foo in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Foo_Foo in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_Razz_Razz in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 28($t8) +sw $v0, 12($t2) +# Static Dispatch of the method Razz +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -40($fp) +sw $t2, -44($fp) +# This function will consume the arguments +jal function_Razz_Razz +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -44($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +# Moving local_Razz_Razz_internal_10 to local_Razz_Razz_internal_0 +move $t1, $t0 +sw $t1, -4($fp) +sw $t0, -44($fp) +sw $t1, -4($fp) +j end__382 +next__407_2: +lw $t0, -0($fp) +lw $t1, -48($fp) +la $t9, type_Bazz +lw $v0, 12($t0) +loop_32: +move $t8, $v0 +beqz $t8, false_32 +lw $v1, 0($t8) +beq $t9, $v1, true_32 +lw $v0, 4($t8) +j loop_32 +true_32: +li $t1, 1 +j end_32 +false_32: +li $t1, 0 +end_32: +# If not local_Razz_Razz_internal_11 goto next__418_3 +sw $t0, -0($fp) +sw $t1, -48($fp) +beqz $t1, next__418_3 +lw $t0, -0($fp) +lw $t1, -52($fp) +# Moving self to local_Razz_Razz_n_12 +move $t1, $t0 +sw $t1, -52($fp) +lw $t2, -56($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 32 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Foo +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 32 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 44 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_printh_Bazz in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_doh_Foo in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Foo_Foo in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t2) +# Static Dispatch of the method Foo +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -52($fp) +sw $t2, -56($fp) +# This function will consume the arguments +jal function_Foo_Foo +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -56($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +# Moving local_Razz_Razz_internal_13 to local_Razz_Razz_internal_0 +move $t1, $t0 +sw $t1, -4($fp) +sw $t0, -56($fp) +sw $t1, -4($fp) +j end__382 +next__418_3: +la $a0, case_error +j .raise +error__382: +la $a0, case_void_error +j .raise +end__382: +lw $t0, -4($fp) +lw $t1, -0($fp) +# self . g <- SET local_Razz_Razz_internal_0 +sw $t0, 20($t1) +lw $t2, -60($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_printh_Bazz +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -60($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -60($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . i <- SET local_Razz_Razz_internal_14 +sw $t0, 24($t1) +lw $t2, -68($fp) +# local_Razz_Razz_internal_16 <- Type of self +lw $t2, 0($t1) +lw $t3, -72($fp) +# Saves in local_Razz_Razz_internal_17 data_0 +la $t3, data_0 +# local_Razz_Razz_internal_16 <- local_Razz_Razz_internal_16 = local_Razz_Razz_internal_17 +move $t8, $t2 +move $t9, $t3 +loop_33: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_33 +beqz $a1, mismatch_33 +seq $v0, $a0, $a1 +beqz $v0, mismatch_33 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_33 +mismatch_33: +li $v0, 0 +j end_33 +check_33: +bnez $a1, mismatch_33 +li $v0, 1 +end_33: +move $t2, $v0 +# If local_Razz_Razz_internal_16 goto error__438 +sw $t0, -60($fp) +sw $t1, -0($fp) +sw $t2, -68($fp) +sw $t3, -72($fp) +bnez $t2, error__438 +lw $t0, -0($fp) +lw $t1, -76($fp) +la $t9, type_Bar +lw $v0, 12($t0) +loop_34: +move $t8, $v0 +beqz $t8, false_34 +lw $v1, 0($t8) +beq $t9, $v1, true_34 +lw $v0, 4($t8) +j loop_34 +true_34: +li $t1, 1 +j end_34 +false_34: +li $t1, 0 +end_34: +# If not local_Razz_Razz_internal_18 goto next__444_0 +sw $t0, -0($fp) +sw $t1, -76($fp) +beqz $t1, next__444_0 +lw $t0, -0($fp) +lw $t1, -80($fp) +# Moving self to local_Razz_Razz_n_19 +move $t1, $t0 +sw $t1, -80($fp) +lw $t2, -64($fp) +# Moving local_Razz_Razz_n_19 to local_Razz_Razz_internal_15 +move $t2, $t1 +sw $t2, -64($fp) +sw $t0, -0($fp) +sw $t1, -80($fp) +sw $t2, -64($fp) +j end__438 +next__444_0: +lw $t0, -0($fp) +lw $t1, -84($fp) +la $t9, type_Razz +lw $v0, 12($t0) +loop_35: +move $t8, $v0 +beqz $t8, false_35 +lw $v1, 0($t8) +beq $t9, $v1, true_35 +lw $v0, 4($t8) +j loop_35 +true_35: +li $t1, 1 +j end_35 +false_35: +li $t1, 0 +end_35: +# If not local_Razz_Razz_internal_20 goto next__452_1 +sw $t0, -0($fp) +sw $t1, -84($fp) +beqz $t1, next__452_1 +lw $t0, -0($fp) +lw $t1, -88($fp) +# Moving self to local_Razz_Razz_n_21 +move $t1, $t0 +sw $t1, -88($fp) +lw $t2, -92($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 48 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Bar +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 48 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 48 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_printh_Bazz in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_doh_Foo in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Foo_Foo in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_Bar_Bar in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t2) +# Static Dispatch of the method Bar +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -88($fp) +sw $t2, -92($fp) +# This function will consume the arguments +jal function_Bar_Bar +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -92($fp) +# saves the return value +move $t0, $v0 +lw $t1, -64($fp) +# Moving local_Razz_Razz_internal_22 to local_Razz_Razz_internal_15 +move $t1, $t0 +sw $t1, -64($fp) +sw $t0, -92($fp) +sw $t1, -64($fp) +j end__438 +next__452_1: +lw $t0, -0($fp) +lw $t1, -96($fp) +la $t9, type_Foo +lw $v0, 12($t0) +loop_36: +move $t8, $v0 +beqz $t8, false_36 +lw $v1, 0($t8) +beq $t9, $v1, true_36 +lw $v0, 4($t8) +j loop_36 +true_36: +li $t1, 1 +j end_36 +false_36: +li $t1, 0 +end_36: +# If not local_Razz_Razz_internal_23 goto next__463_2 +sw $t0, -0($fp) +sw $t1, -96($fp) +beqz $t1, next__463_2 +lw $t0, -0($fp) +lw $t1, -100($fp) +# Moving self to local_Razz_Razz_n_24 +move $t1, $t0 +sw $t1, -100($fp) +lw $t2, -104($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 40 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Razz +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 40 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 48 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_printh_Bazz in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_doh_Foo in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Foo_Foo in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_Razz_Razz in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 28($t8) +sw $v0, 12($t2) +# Static Dispatch of the method Razz +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -100($fp) +sw $t2, -104($fp) +# This function will consume the arguments +jal function_Razz_Razz +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -104($fp) +# saves the return value +move $t0, $v0 +lw $t1, -64($fp) +# Moving local_Razz_Razz_internal_25 to local_Razz_Razz_internal_15 +move $t1, $t0 +sw $t1, -64($fp) +sw $t0, -104($fp) +sw $t1, -64($fp) +j end__438 +next__463_2: +la $a0, case_error +j .raise +error__438: +la $a0, case_void_error +j .raise +end__438: +lw $t0, -64($fp) +lw $t1, -0($fp) +# self . a <- SET local_Razz_Razz_internal_15 +sw $t0, 28($t1) +lw $t2, -120($fp) +# local_Razz_Razz_a_29 <- GET self . a +lw $t2, 28($t1) +lw $t3, -124($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_doh_Foo +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -64($fp) +sw $t1, -0($fp) +sw $t2, -120($fp) +sw $t3, -124($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -124($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -128($fp) +# local_Razz_Razz_g_31 <- GET self . g +lw $t2, 20($t1) +lw $t3, -132($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_doh_Foo +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -124($fp) +sw $t1, -0($fp) +sw $t2, -128($fp) +sw $t3, -132($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -132($fp) +# saves the return value +move $t0, $v0 +lw $t1, -124($fp) +lw $t2, -116($fp) +# local_Razz_Razz_internal_28 <- local_Razz_Razz_internal_30 + local_Razz_Razz_internal_32 +add $t2, $t1, $t0 +lw $t3, -0($fp) +lw $t4, -136($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_doh_Foo +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -132($fp) +sw $t1, -124($fp) +sw $t2, -116($fp) +sw $t3, -0($fp) +sw $t4, -136($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -136($fp) +# saves the return value +move $t0, $v0 +lw $t1, -116($fp) +lw $t2, -112($fp) +# local_Razz_Razz_internal_27 <- local_Razz_Razz_internal_28 + local_Razz_Razz_internal_33 +add $t2, $t1, $t0 +lw $t3, -0($fp) +lw $t4, -140($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_printh_Bazz +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -136($fp) +sw $t1, -116($fp) +sw $t2, -112($fp) +sw $t3, -0($fp) +sw $t4, -140($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -140($fp) +# saves the return value +move $t0, $v0 +lw $t1, -112($fp) +lw $t2, -108($fp) +# local_Razz_Razz_internal_26 <- local_Razz_Razz_internal_27 + local_Razz_Razz_internal_34 +add $t2, $t1, $t0 +lw $t3, -0($fp) +# self . b <- SET local_Razz_Razz_internal_26 +sw $t2, 32($t3) +lw $t4, -148($fp) +# local_Razz_Razz_internal_36 <- Type of self +lw $t4, 0($t3) +lw $t5, -152($fp) +# Saves in local_Razz_Razz_internal_37 data_0 +la $t5, data_0 +# local_Razz_Razz_internal_36 <- local_Razz_Razz_internal_36 = local_Razz_Razz_internal_37 +move $t8, $t4 +move $t9, $t5 +loop_37: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_37 +beqz $a1, mismatch_37 +seq $v0, $a0, $a1 +beqz $v0, mismatch_37 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_37 +mismatch_37: +li $v0, 0 +j end_37 +check_37: +bnez $a1, mismatch_37 +li $v0, 1 +end_37: +move $t4, $v0 +# If local_Razz_Razz_internal_36 goto error__501 +sw $t0, -140($fp) +sw $t1, -112($fp) +sw $t2, -108($fp) +sw $t3, -0($fp) +sw $t4, -148($fp) +sw $t5, -152($fp) +bnez $t4, error__501 +lw $t0, -0($fp) +lw $t1, -156($fp) +la $t9, type_Bar +lw $v0, 12($t0) +loop_38: +move $t8, $v0 +beqz $t8, false_38 +lw $v1, 0($t8) +beq $t9, $v1, true_38 +lw $v0, 4($t8) +j loop_38 +true_38: +li $t1, 1 +j end_38 +false_38: +li $t1, 0 +end_38: +# If not local_Razz_Razz_internal_38 goto next__507_0 +sw $t0, -0($fp) +sw $t1, -156($fp) +beqz $t1, next__507_0 +lw $t0, -0($fp) +lw $t1, -160($fp) +# Moving self to local_Razz_Razz_n_39 +move $t1, $t0 +sw $t1, -160($fp) +lw $t2, -144($fp) +# Moving local_Razz_Razz_n_39 to local_Razz_Razz_internal_35 +move $t2, $t1 +sw $t2, -144($fp) +sw $t0, -0($fp) +sw $t1, -160($fp) +sw $t2, -144($fp) +j end__501 +next__507_0: +lw $t0, -0($fp) +lw $t1, -164($fp) +la $t9, type_Razz +lw $v0, 12($t0) +loop_39: +move $t8, $v0 +beqz $t8, false_39 +lw $v1, 0($t8) +beq $t9, $v1, true_39 +lw $v0, 4($t8) +j loop_39 +true_39: +li $t1, 1 +j end_39 +false_39: +li $t1, 0 +end_39: +# If not local_Razz_Razz_internal_40 goto next__515_1 +sw $t0, -0($fp) +sw $t1, -164($fp) +beqz $t1, next__515_1 +lw $t0, -0($fp) +lw $t1, -168($fp) +# Moving self to local_Razz_Razz_n_41 +move $t1, $t0 +sw $t1, -168($fp) +lw $t2, -172($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 48 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Bar +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 48 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 48 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_printh_Bazz in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_doh_Foo in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Foo_Foo in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_Bar_Bar in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t2) +# Static Dispatch of the method Bar +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -168($fp) +sw $t2, -172($fp) +# This function will consume the arguments +jal function_Bar_Bar +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -172($fp) +# saves the return value +move $t0, $v0 +lw $t1, -144($fp) +# Moving local_Razz_Razz_internal_42 to local_Razz_Razz_internal_35 +move $t1, $t0 +sw $t1, -144($fp) +sw $t0, -172($fp) +sw $t1, -144($fp) +j end__501 +next__515_1: +la $a0, case_error +j .raise +error__501: +la $a0, case_void_error +j .raise +end__501: +lw $t0, -144($fp) +lw $t1, -0($fp) +# self . e <- SET local_Razz_Razz_internal_35 +sw $t0, 36($t1) +lw $t2, -192($fp) +# local_Razz_Razz_a_47 <- GET self . a +lw $t2, 28($t1) +lw $t3, -196($fp) +# Static Dispatch of the method doh +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -144($fp) +sw $t1, -0($fp) +sw $t2, -192($fp) +sw $t3, -196($fp) +# This function will consume the arguments +jal function_doh_Bazz +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -196($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -200($fp) +# local_Razz_Razz_g_49 <- GET self . g +lw $t2, 20($t1) +lw $t3, -204($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_doh_Foo +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -196($fp) +sw $t1, -0($fp) +sw $t2, -200($fp) +sw $t3, -204($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -204($fp) +# saves the return value +move $t0, $v0 +lw $t1, -196($fp) +lw $t2, -188($fp) +# local_Razz_Razz_internal_46 <- local_Razz_Razz_internal_48 + local_Razz_Razz_internal_50 +add $t2, $t1, $t0 +lw $t3, -0($fp) +lw $t4, -208($fp) +# local_Razz_Razz_e_51 <- GET self . e +lw $t4, 36($t3) +lw $t5, -212($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t4) +# Saves in t8 the direction of function_doh_Foo +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t4, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -204($fp) +sw $t1, -196($fp) +sw $t2, -188($fp) +sw $t3, -0($fp) +sw $t4, -208($fp) +sw $t5, -212($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -212($fp) +# saves the return value +move $t0, $v0 +lw $t1, -188($fp) +lw $t2, -184($fp) +# local_Razz_Razz_internal_45 <- local_Razz_Razz_internal_46 + local_Razz_Razz_internal_52 +add $t2, $t1, $t0 +lw $t3, -0($fp) +lw $t4, -216($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_doh_Foo +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -212($fp) +sw $t1, -188($fp) +sw $t2, -184($fp) +sw $t3, -0($fp) +sw $t4, -216($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -216($fp) +# saves the return value +move $t0, $v0 +lw $t1, -184($fp) +lw $t2, -180($fp) +# local_Razz_Razz_internal_44 <- local_Razz_Razz_internal_45 + local_Razz_Razz_internal_53 +add $t2, $t1, $t0 +lw $t3, -0($fp) +lw $t4, -220($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_printh_Bazz +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -216($fp) +sw $t1, -184($fp) +sw $t2, -180($fp) +sw $t3, -0($fp) +sw $t4, -220($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -220($fp) +# saves the return value +move $t0, $v0 +lw $t1, -180($fp) +lw $t2, -176($fp) +# local_Razz_Razz_internal_43 <- local_Razz_Razz_internal_44 + local_Razz_Razz_internal_54 +add $t2, $t1, $t0 +lw $t3, -0($fp) +# self . f <- SET local_Razz_Razz_internal_43 +sw $t2, 40($t3) +lw $t4, -224($fp) +# Moving self to local_Razz_Razz_internal_55 +move $t4, $t3 +sw $t4, -224($fp) +move $v0, $t4 +# Empty all used registers and saves them to memory +sw $t0, -220($fp) +sw $t1, -180($fp) +sw $t2, -176($fp) +sw $t3, -0($fp) +sw $t4, -224($fp) +# Removing all locals from stack +addiu $sp, $sp, 228 +jr $ra + + +function_Bazz_Bazz: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_Bazz_Bazz_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bazz_Bazz_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bazz_Bazz_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bazz_Bazz_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bazz_Bazz_n_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bazz_Bazz_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bazz_Bazz_n_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bazz_Bazz_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bazz_Bazz_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bazz_Bazz_n_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bazz_Bazz_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bazz_Bazz_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bazz_Bazz_n_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bazz_Bazz_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bazz_Bazz_internal_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bazz_Bazz_internal_15 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# self . h <- SET 1 +li $t9, 1 +sw $t9, 16($t0) +lw $t1, -8($fp) +# local_Bazz_Bazz_internal_1 <- Type of self +lw $t1, 0($t0) +lw $t2, -12($fp) +# Saves in local_Bazz_Bazz_internal_2 data_0 +la $t2, data_0 +# local_Bazz_Bazz_internal_1 <- local_Bazz_Bazz_internal_1 = local_Bazz_Bazz_internal_2 +move $t8, $t1 +move $t9, $t2 +loop_40: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_40 +beqz $a1, mismatch_40 +seq $v0, $a0, $a1 +beqz $v0, mismatch_40 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_40 +mismatch_40: +li $v0, 0 +j end_40 +check_40: +bnez $a1, mismatch_40 +li $v0, 1 +end_40: +move $t1, $v0 +# If local_Bazz_Bazz_internal_1 goto error__566 +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +bnez $t1, error__566 +lw $t0, -0($fp) +lw $t1, -16($fp) +la $t9, type_Bar +lw $v0, 12($t0) +loop_41: +move $t8, $v0 +beqz $t8, false_41 +lw $v1, 0($t8) +beq $t9, $v1, true_41 +lw $v0, 4($t8) +j loop_41 +true_41: +li $t1, 1 +j end_41 +false_41: +li $t1, 0 +end_41: +# If not local_Bazz_Bazz_internal_3 goto next__572_0 +sw $t0, -0($fp) +sw $t1, -16($fp) +beqz $t1, next__572_0 +lw $t0, -0($fp) +lw $t1, -20($fp) +# Moving self to local_Bazz_Bazz_n_4 +move $t1, $t0 +sw $t1, -20($fp) +lw $t2, -4($fp) +# Moving local_Bazz_Bazz_n_4 to local_Bazz_Bazz_internal_0 +move $t2, $t1 +sw $t2, -4($fp) +sw $t0, -0($fp) +sw $t1, -20($fp) +sw $t2, -4($fp) +j end__566 +next__572_0: +lw $t0, -0($fp) +lw $t1, -24($fp) +la $t9, type_Razz +lw $v0, 12($t0) +loop_42: +move $t8, $v0 +beqz $t8, false_42 +lw $v1, 0($t8) +beq $t9, $v1, true_42 +lw $v0, 4($t8) +j loop_42 +true_42: +li $t1, 1 +j end_42 +false_42: +li $t1, 0 +end_42: +# If not local_Bazz_Bazz_internal_5 goto next__580_1 +sw $t0, -0($fp) +sw $t1, -24($fp) +beqz $t1, next__580_1 +lw $t0, -0($fp) +lw $t1, -28($fp) +# Moving self to local_Bazz_Bazz_n_6 +move $t1, $t0 +sw $t1, -28($fp) +lw $t2, -32($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 48 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Bar +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 48 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 48 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_printh_Bazz in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_doh_Foo in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Foo_Foo in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_Bar_Bar in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t2) +# Static Dispatch of the method Bar +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -28($fp) +sw $t2, -32($fp) +# This function will consume the arguments +jal function_Bar_Bar +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -32($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +# Moving local_Bazz_Bazz_internal_7 to local_Bazz_Bazz_internal_0 +move $t1, $t0 +sw $t1, -4($fp) +sw $t0, -32($fp) +sw $t1, -4($fp) +j end__566 +next__580_1: +lw $t0, -0($fp) +lw $t1, -36($fp) +la $t9, type_Foo +lw $v0, 12($t0) +loop_43: +move $t8, $v0 +beqz $t8, false_43 +lw $v1, 0($t8) +beq $t9, $v1, true_43 +lw $v0, 4($t8) +j loop_43 +true_43: +li $t1, 1 +j end_43 +false_43: +li $t1, 0 +end_43: +# If not local_Bazz_Bazz_internal_8 goto next__591_2 +sw $t0, -0($fp) +sw $t1, -36($fp) +beqz $t1, next__591_2 +lw $t0, -0($fp) +lw $t1, -40($fp) +# Moving self to local_Bazz_Bazz_n_9 +move $t1, $t0 +sw $t1, -40($fp) +lw $t2, -44($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 40 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Razz +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 40 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 48 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_printh_Bazz in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_doh_Foo in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Foo_Foo in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_Razz_Razz in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 28($t8) +sw $v0, 12($t2) +# Static Dispatch of the method Razz +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -40($fp) +sw $t2, -44($fp) +# This function will consume the arguments +jal function_Razz_Razz +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -44($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +# Moving local_Bazz_Bazz_internal_10 to local_Bazz_Bazz_internal_0 +move $t1, $t0 +sw $t1, -4($fp) +sw $t0, -44($fp) +sw $t1, -4($fp) +j end__566 +next__591_2: +lw $t0, -0($fp) +lw $t1, -48($fp) +la $t9, type_Bazz +lw $v0, 12($t0) +loop_44: +move $t8, $v0 +beqz $t8, false_44 +lw $v1, 0($t8) +beq $t9, $v1, true_44 +lw $v0, 4($t8) +j loop_44 +true_44: +li $t1, 1 +j end_44 +false_44: +li $t1, 0 +end_44: +# If not local_Bazz_Bazz_internal_11 goto next__602_3 +sw $t0, -0($fp) +sw $t1, -48($fp) +beqz $t1, next__602_3 +lw $t0, -0($fp) +lw $t1, -52($fp) +# Moving self to local_Bazz_Bazz_n_12 +move $t1, $t0 +sw $t1, -52($fp) +lw $t2, -56($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 32 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Foo +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 32 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 44 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_printh_Bazz in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_doh_Foo in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Foo_Foo in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t2) +# Static Dispatch of the method Foo +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -52($fp) +sw $t2, -56($fp) +# This function will consume the arguments +jal function_Foo_Foo +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -56($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +# Moving local_Bazz_Bazz_internal_13 to local_Bazz_Bazz_internal_0 +move $t1, $t0 +sw $t1, -4($fp) +sw $t0, -56($fp) +sw $t1, -4($fp) +j end__566 +next__602_3: +la $a0, case_error +j .raise +error__566: +la $a0, case_void_error +j .raise +end__566: +lw $t0, -4($fp) +lw $t1, -0($fp) +# self . g <- SET local_Bazz_Bazz_internal_0 +sw $t0, 20($t1) +lw $t2, -60($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_printh_Bazz +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -60($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -60($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . i <- SET local_Bazz_Bazz_internal_14 +sw $t0, 24($t1) +lw $t2, -64($fp) +# Moving self to local_Bazz_Bazz_internal_15 +move $t2, $t1 +sw $t2, -64($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -60($fp) +sw $t1, -0($fp) +sw $t2, -64($fp) +# Removing all locals from stack +addiu $sp, $sp, 68 +jr $ra + + +function_printh_Bazz: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_printh_Bazz_h_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_printh_Bazz_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_printh_Bazz_internal_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_printh_Bazz_h_0 <- GET self . h +lw $t1, 16($t0) +lw $t2, -8($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_out_int_IO +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Moving 0 to local_printh_Bazz_internal_2 +li $t1, 0 +sw $t1, -12($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_doh_Bazz: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_doh_Bazz_i_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_doh_Bazz_h_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_doh_Bazz_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_doh_Bazz_h_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_doh_Bazz_i_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_doh_Bazz_internal_5 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +# local_doh_Bazz_h_1 <- GET self . h +lw $t1, 16($t0) +lw $t2, -4($fp) +# Moving local_doh_Bazz_h_1 to local_doh_Bazz_i_0 +move $t2, $t1 +sw $t2, -4($fp) +lw $t3, -16($fp) +# local_doh_Bazz_h_3 <- GET self . h +lw $t3, 16($t0) +lw $t4, -12($fp) +# local_doh_Bazz_internal_2 <- local_doh_Bazz_h_3 + 1 +addi $t4, $t3, 1 +# self . h <- SET local_doh_Bazz_internal_2 +sw $t4, 16($t0) +lw $t5, -20($fp) +# local_doh_Bazz_i_4 <- GET self . i +lw $t5, 24($t0) +lw $t6, -24($fp) +# Moving local_doh_Bazz_i_4 to local_doh_Bazz_internal_5 +move $t6, $t5 +sw $t6, -24($fp) +move $v0, $t6 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -4($fp) +sw $t3, -16($fp) +sw $t4, -12($fp) +sw $t5, -20($fp) +sw $t6, -24($fp) +# Removing all locals from stack +addiu $sp, $sp, 28 +jr $ra + + +function_Main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_Main_Main_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_4 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 24 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Bazz +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 24 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 44 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_printh_Bazz in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_doh_Bazz in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Bazz_Bazz in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 32($t8) +sw $v0, 12($t0) +# Static Dispatch of the method Bazz +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# This function will consume the arguments +jal function_Bazz_Bazz +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . a <- SET local_Main_Main_internal_0 +sw $t0, 16($t1) +lw $t2, -8($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 32 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Foo +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 32 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 44 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_printh_Bazz in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_doh_Foo in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Foo_Foo in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t2) +# Static Dispatch of the method Foo +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal function_Foo_Foo +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . b <- SET local_Main_Main_internal_1 +sw $t0, 20($t1) +lw $t2, -12($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 40 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Razz +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 40 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 48 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_printh_Bazz in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_doh_Foo in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Foo_Foo in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_Razz_Razz in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 28($t8) +sw $v0, 12($t2) +# Static Dispatch of the method Razz +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +# This function will consume the arguments +jal function_Razz_Razz +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . c <- SET local_Main_Main_internal_2 +sw $t0, 24($t1) +lw $t2, -16($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 48 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Bar +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 48 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 48 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_printh_Bazz in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_doh_Foo in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Foo_Foo in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_Bar_Bar in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t2) +# Static Dispatch of the method Bar +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $t1, -0($fp) +sw $t2, -16($fp) +# This function will consume the arguments +jal function_Bar_Bar +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . d <- SET local_Main_Main_internal_3 +sw $t0, 28($t1) +lw $t2, -20($fp) +# Moving self to local_Main_Main_internal_4 +move $t2, $t1 +sw $t2, -20($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -0($fp) +sw $t2, -20($fp) +# Removing all locals from stack +addiu $sp, $sp, 24 +jr $ra + + +function_main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_main_Main_internal_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_main_Main_internal_0 data_1 +la $t0, data_1 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + +# Raise exception method +.raise: +li $v0, 4 +syscall +li $v0, 17 +li $a0, 1 +syscall + +.data +abort_msg: .asciiz "Abort called from class " +new_line: .asciiz " +" +string_abort: .asciiz "Abort called from class String +" +int_abort: .asciiz "Abort called from class Int +" +bool_abort: .asciiz "Abort called from class Bool +" +type_Object: .asciiz "Object" +type_IO: .asciiz "IO" +type_String: .asciiz "String" +type_Int: .asciiz "Int" +type_Bool: .asciiz "Bool" +type_Foo: .asciiz "Foo" +type_Bar: .asciiz "Bar" +type_Razz: .asciiz "Razz" +type_Bazz: .asciiz "Bazz" +type_Main: .asciiz "Main" +type_Void: .asciiz "Void" +types: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +data_0: .asciiz "Void" +data_1: .asciiz "do nothing" +methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +zero_error: .asciiz "Division by zero error +" +case_void_error: .asciiz "Case on void error +" +dispatch_error: .asciiz "Dispatch on void error +" +case_error: .asciiz "Case statement without a matching branch error +" +index_error: .asciiz "Substring out of range error +" +heap_error: .asciiz "Heap overflow error +" \ No newline at end of file diff --git a/src/test1.mips b/tests/codegen/hello_world.mips similarity index 90% rename from src/test1.mips rename to tests/codegen/hello_world.mips index eddf7fb3..8ccae530 100644 --- a/src/test1.mips +++ b/tests/codegen/hello_world.mips @@ -113,8 +113,14 @@ la $t9, function_type_name_Bool sw $t9, 60($v0) la $t9, function_copy_Bool sw $t9, 64($v0) -la $t9, function_main_Main +la $t9, function_abort_String sw $t9, 68($v0) +la $t9, function_abort_Int +sw $t9, 72($v0) +la $t9, function_abort_Bool +sw $t9, 76($v0) +la $t9, function_main_Main +sw $t9, 80($v0) entry: # Gets the params from the stack @@ -172,7 +178,7 @@ lw $t9, 24($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 28($v0) # Save the direction of the method function_main_Main in t9 -lw $t9, 68($t8) +lw $t9, 80($t8) # Save the direction of the method in his position in the dispatch table sw $t9, 32($v0) sw $v0, 8($t0) @@ -227,8 +233,15 @@ move $t1, $t0 sw $t1, -4($fp) # Exiting the program li $t8, 0 -li $v0, 1 -li $a0, 1 +# Printing abort message +li $v0, 4 +la $a0, abort_msg +syscall +li $v0, 4 +lw $a0, 0($t0) +syscall +li $v0, 4 +la $a0, new_line syscall li $v0, 17 move $a0, $t8 @@ -401,7 +414,7 @@ move $t0, $v0 # Putting buffer in a0 move $a0, $t0 # Putting length of string in a1 -li $a1, 20 +li $a1, 356 li $v0, 8 syscall # Walks to eliminate the newline @@ -757,6 +770,72 @@ addiu $sp, $sp, 8 jr $ra +function_abort_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_String_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self string_abort +la $t0, string_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Int_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self int_abort +la $t0, int_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Bool_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self bool_abort +la $t0, bool_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + function_main_Main: # Gets the params from the stack move $fp, $sp @@ -767,18 +846,16 @@ addiu $fp, $fp, 4 addiu $sp, $sp, -4 # Updates stack pointer pushing local_main_Main_internal_1 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_2 to the stack -addiu $sp, $sp, -4 lw $t0, -4($fp) -# local_main_Main_internal_0 <- 34 / 10 -li $t0, 3 +# Saves in local_main_Main_internal_0 data_1 +la $t0, data_1 lw $t1, -0($fp) lw $t2, -8($fp) # Find the actual name in the dispatch table # Gets in t9 the actual direction of the dispatch table lw $t9, 8($t1) -# Saves in t8 the direction of function_out_int_IO -lw $t8, 20($t9) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) sw $fp, ($sp) addiu $sp, $sp, -4 sw $ra, ($sp) @@ -805,16 +882,11 @@ lw $fp, ($sp) lw $t0, -8($fp) # saves the return value move $t0, $v0 -lw $t1, -12($fp) -# Moving local_main_Main_internal_1 to local_main_Main_internal_2 -move $t1, $t0 -sw $t1, -12($fp) -move $v0, $t1 +move $v0, $t0 # Empty all used registers and saves them to memory sw $t0, -8($fp) -sw $t1, -12($fp) # Removing all locals from stack -addiu $sp, $sp, 16 +addiu $sp, $sp, 12 jr $ra # Raise exception method @@ -826,6 +898,15 @@ li $a0, 1 syscall .data +abort_msg: .asciiz "Abort called from class " +new_line: .asciiz " +" +string_abort: .asciiz "Abort called from class String +" +int_abort: .asciiz "Abort called from class Int +" +bool_abort: .asciiz "Abort called from class Bool +" type_Object: .asciiz "Object" type_IO: .asciiz "IO" type_String: .asciiz "String" @@ -835,7 +916,9 @@ type_Main: .asciiz "Main" type_Void: .asciiz "Void" types: .word 0, 0, 0, 0, 0, 0 data_0: .asciiz "Void" -methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +data_1: .asciiz "Hello, World. +" +methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 zero_error: .asciiz "Division by zero error " case_void_error: .asciiz "Case on void error diff --git a/tests/codegen/helloworld.cl b/tests/codegen/helloworld.cl deleted file mode 100644 index 41bc1d44..00000000 --- a/tests/codegen/helloworld.cl +++ /dev/null @@ -1,6 +0,0 @@ -class Main { - main():IO { - new IO.out_string("Hello world!\n") - }; -}; - diff --git a/tests/codegen/io.mips b/tests/codegen/io.mips new file mode 100644 index 00000000..7e1f05f0 --- /dev/null +++ b/tests/codegen/io.mips @@ -0,0 +1,1786 @@ +.text +.globl main +main: +# Save types directions in the types array +la $t9, types +# Save space to locate the type info +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_String +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 0($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Int +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 4($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Object +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 8($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Bool +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 12($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_IO +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 16($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_A +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 20($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_B +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 24($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_C +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 28($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_D +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 32($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Main +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 36($t9) +# Copying parents +lw $v0, 0($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 4($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 8($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 12($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 16($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +lw $v0, 20($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +lw $v0, 24($t9) +lw $t8, 20($t9) +sw $t8, 4($v0) +lw $v0, 28($t9) +lw $t8, 16($t9) +sw $t8, 4($v0) +lw $v0, 32($t9) +lw $t8, 28($t9) +sw $t8, 4($v0) +lw $v0, 36($t9) +lw $t8, 16($t9) +sw $t8, 4($v0) +# Save method directions in the methods array +la $v0, methods +la $t9, entry +sw $t9, 0($v0) +la $t9, function_abort_Object +sw $t9, 4($v0) +la $t9, function_type_name_Object +sw $t9, 8($v0) +la $t9, function_copy_Object +sw $t9, 12($v0) +la $t9, function_out_string_IO +sw $t9, 16($v0) +la $t9, function_out_int_IO +sw $t9, 20($v0) +la $t9, function_in_int_IO +sw $t9, 24($v0) +la $t9, function_in_string_IO +sw $t9, 28($v0) +la $t9, function_length_String +sw $t9, 32($v0) +la $t9, function_concat_String +sw $t9, 36($v0) +la $t9, function_substr_String +sw $t9, 40($v0) +la $t9, function_type_name_String +sw $t9, 44($v0) +la $t9, function_copy_String +sw $t9, 48($v0) +la $t9, function_type_name_Int +sw $t9, 52($v0) +la $t9, function_copy_Int +sw $t9, 56($v0) +la $t9, function_type_name_Bool +sw $t9, 60($v0) +la $t9, function_copy_Bool +sw $t9, 64($v0) +la $t9, function_abort_String +sw $t9, 68($v0) +la $t9, function_abort_Int +sw $t9, 72($v0) +la $t9, function_abort_Bool +sw $t9, 76($v0) +la $t9, function_A_A +sw $t9, 80($v0) +la $t9, function_out_a_A +sw $t9, 84($v0) +la $t9, function_B_B +sw $t9, 88($v0) +la $t9, function_out_b_B +sw $t9, 92($v0) +la $t9, function_out_c_C +sw $t9, 96($v0) +la $t9, function_out_d_D +sw $t9, 100($v0) +la $t9, function_main_Main +sw $t9, 104($v0) + +entry: +# Gets the params from the stack +move $fp, $sp +# Gets the frame pointer from the stack +# Updates stack pointer pushing local__internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local__internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 12 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Main +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 12 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 36 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_main_Main in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 36($t8) +sw $v0, 12($t0) +lw $t1, -4($fp) +# Static Dispatch of the method main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# This function will consume the arguments +jal function_main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +li $v0, 0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Object_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_abort_Object_self_0 +move $t1, $t0 +sw $t1, -4($fp) +# Exiting the program +li $t8, 0 +# Printing abort message +li $v0, 4 +la $a0, abort_msg +syscall +li $v0, 4 +lw $a0, 0($t0) +syscall +li $v0, 4 +la $a0, new_line +syscall +li $v0, 17 +move $a0, $t8 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_type_name_Object_result_0 <- Type of self +lw $t1, 0($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +lw $t9, 4($t0) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +move $a0, $t9 +syscall +move $t1, $v0 +# Loop to copy every field of the previous object +# t8 the register to loop +li $t8, 0 +loop_0: +# In t9 is stored the size of the object +bge $t8, $t9, exit_0 +lw $a0, ($t0) +sw $a0, ($v0) +addi $v0, $v0, 4 +addi $t0, $t0, 4 +# Increase loop counter +addi $t8, $t8, 4 +j loop_0 +exit_0: +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_out_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_string_String_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_string_String_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing a string +li $v0, 4 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_out_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value number +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_int_IO_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_int_IO_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing an int +li $v0, 1 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_in_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_int_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Reading a int +li $v0, 5 +syscall +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_in_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_string_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t0, $v0 +# Reading a string +# Putting buffer in a0 +move $a0, $t0 +# Putting length of string in a1 +li $a1, 356 +li $v0, 8 +syscall +# Walks to eliminate the newline +move $t9, $t0 +start_1: +lb $t8, 0($t9) +beqz $t8, end_1 +add $t9, $t9, 1 +j start_1 +end_1: +addiu $t9, $t9, -1 +sb $0, ($t9) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_length_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_length_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +move $t8, $t0 +# Determining the length of a string +loop_2: +lb $t9, 0($t8) +beq $t9, $zero, end_2 +addi $t8, $t8, 1 +j loop_2 +end_2: +sub $t1, $t8, $t0 +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_concat_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_concat_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -8($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +# Copy the first string to dest +move $a0, $t0 +move $a1, $t2 +sw $ra, ($sp) +addiu $sp, $sp, -4 +jal strcopier +# Concatenate second string on result buffer +move $a0, $t1 +move $a1, $v0 +jal strcopier +sb $0, 0($v0) +addiu $sp, $sp, 4 +lw $ra, ($sp) +j finish_3 +# Definition of strcopier +strcopier: +# In a0 is the source and in a1 is the destination +loop_3: +lb $t8, ($a0) +beq $t8, $zero, end_3 +addiu $a0, $a0, 1 +sb $t8, ($a1) +addiu $a1, $a1, 1 +b loop_3 +end_3: +move $v0, $a1 +jr $ra +finish_3: +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_substr_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value begin +addiu $fp, $fp, 4 +# Pops the register with the param value end +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_substr_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -12($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +lw $t3, -8($fp) +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t3 +start_4: +lb $t9, 0($t8) +beqz $t9, error_4 +addi $v0, 1 +bgt $v0, $t0, end_len_4 +addi $t8, 1 +j start_4 +end_len_4: +# Saving dest to iterate over him +move $v0, $t2 +loop_4: +sub $t9, $v0, $t2 +beq $t9, $t1, end_4 +lb $t9, 0($t8) +beqz $t9, error_4 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_4 +error_4: +la $a0, index_error +li $v0, 4 +move $a0, $t3 +syscall +li $v0, 1 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t1 +syscall +j .raise +end_4: +sb $0, 0($v0) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_String_result_0 type_String +la $t0, type_String +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_String_result_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +move $t8, $t0 +# Determining the length of a string +loop_5: +lb $t9, 0($t8) +beq $t9, $zero, end_5 +addi $t8, $t8, 1 +j loop_5 +end_5: +sub $t1, $t8, $t0 +lw $t2, -12($fp) +# local_copy_String_result_2 <- local_copy_String_result_1 - 1 +addi $t2, $t1, -1 +lw $t3, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t3, $v0 +li $t8, 0 +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t0 +start_6: +lb $t9, 0($t8) +beqz $t9, error_6 +addi $v0, 1 +bgt $v0, $t8, end_len_6 +addi $t8, 1 +j start_6 +end_len_6: +# Saving dest to iterate over him +move $v0, $t3 +loop_6: +sub $t9, $v0, $t3 +beq $t9, $t2, end_6 +lb $t9, 0($t8) +beqz $t9, error_6 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_6 +error_6: +la $a0, index_error +li $v0, 4 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t8 +syscall +li $v0, 1 +move $a0, $t2 +syscall +j .raise +end_6: +sb $0, 0($v0) +move $v0, $t3 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +sw $t3, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Int_result_0 type_Int +la $t0, type_Int +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_Int_result_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Bool_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Bool_result_0 type_Bool +la $t0, type_Bool +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_result_Bool_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_result_Bool_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_String_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self string_abort +la $t0, string_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Int_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self int_abort +la $t0, int_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Bool_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self bool_abort +la $t0, bool_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_A_A: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_A_A_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_A_A_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 12 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_IO +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 12 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 32 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 16($t8) +sw $v0, 12($t0) +lw $t1, -0($fp) +# self . io <- SET local_A_A_internal_0 +sw $t0, 16($t1) +lw $t2, -8($fp) +# Moving self to local_A_A_internal_1 +move $t2, $t1 +sw $t2, -8($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_out_a_A: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_a_A_io_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_out_a_A_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_out_a_A_internal_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_out_a_A_io_0 <- GET self . io +lw $t1, 16($t0) +lw $t2, -8($fp) +# Saves in local_out_a_A_internal_1 data_1 +la $t2, data_1 +lw $t3, -12($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +sw $t2, -8($fp) +sw $t3, -12($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_B_B: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_B_B_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_B_B_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 12 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_IO +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 12 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 32 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 16($t8) +sw $v0, 12($t0) +lw $t1, -0($fp) +# self . io <- SET local_B_B_internal_0 +sw $t0, 16($t1) +lw $t2, -8($fp) +# Moving self to local_B_B_internal_1 +move $t2, $t1 +sw $t2, -8($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_out_b_B: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_b_B_io_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_out_b_B_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_out_b_B_internal_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_out_b_B_io_0 <- GET self . io +lw $t1, 16($t0) +lw $t2, -8($fp) +# Saves in local_out_b_B_internal_1 data_2 +la $t2, data_2 +lw $t3, -12($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +sw $t2, -8($fp) +sw $t3, -12($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_out_c_C: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_c_C_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_out_c_C_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_out_c_C_internal_0 data_3 +la $t0, data_3 +lw $t1, -0($fp) +lw $t2, -8($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_out_d_D: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_d_D_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_out_d_D_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_out_d_D_internal_0 data_4 +la $t0, data_4 +lw $t1, -0($fp) +lw $t2, -8($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_main_Main_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_10 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_A +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 24 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_a_A in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_A_A in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t0) +# Static Dispatch of the method A +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# This function will consume the arguments +jal function_A_A +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_out_a_A +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_B +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t1, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 32 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_a_A in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_A_A in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_out_b_B in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_B_B in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +sw $v0, 8($t1) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t1) +# Static Dispatch of the method B +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -12($fp) +# This function will consume the arguments +jal function_B_B +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +lw $t1, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_out_b_B +lw $t8, 24($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $t1, -16($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -20($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 12 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_C +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 12 +sw $t9, 4($v0) +move $t1, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 36 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_out_c_C in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +sw $v0, 8($t1) +# Adding Type Info addr +la $t8, types +lw $v0, 28($t8) +sw $v0, 12($t1) +lw $t2, -24($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_c_C +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -20($fp) +sw $t2, -24($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -24($fp) +# saves the return value +move $t0, $v0 +lw $t1, -28($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 12 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_D +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 12 +sw $t9, 4($v0) +move $t1, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 40 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_out_c_C in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_out_d_D in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +sw $v0, 8($t1) +# Adding Type Info addr +la $t8, types +lw $v0, 32($t8) +sw $v0, 12($t1) +lw $t2, -32($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_d_D +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -24($fp) +sw $t1, -28($fp) +sw $t2, -32($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -32($fp) +# saves the return value +move $t0, $v0 +lw $t1, -36($fp) +# Saves in local_main_Main_internal_8 data_5 +la $t1, data_5 +lw $t2, -0($fp) +lw $t3, -40($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -32($fp) +sw $t1, -36($fp) +sw $t2, -0($fp) +sw $t3, -40($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +lw $t1, -44($fp) +# Moving local_main_Main_internal_9 to local_main_Main_internal_10 +move $t1, $t0 +sw $t1, -44($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -40($fp) +sw $t1, -44($fp) +# Removing all locals from stack +addiu $sp, $sp, 48 +jr $ra + +# Raise exception method +.raise: +li $v0, 4 +syscall +li $v0, 17 +li $a0, 1 +syscall + +.data +abort_msg: .asciiz "Abort called from class " +new_line: .asciiz " +" +string_abort: .asciiz "Abort called from class String +" +int_abort: .asciiz "Abort called from class Int +" +bool_abort: .asciiz "Abort called from class Bool +" +type_Object: .asciiz "Object" +type_IO: .asciiz "IO" +type_String: .asciiz "String" +type_Int: .asciiz "Int" +type_Bool: .asciiz "Bool" +type_A: .asciiz "A" +type_B: .asciiz "B" +type_C: .asciiz "C" +type_D: .asciiz "D" +type_Main: .asciiz "Main" +type_Void: .asciiz "Void" +types: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +data_0: .asciiz "Void" +data_1: .asciiz "A: Hello world +" +data_2: .asciiz "B: Hello world +" +data_3: .asciiz "C: Hello world +" +data_4: .asciiz "D: Hello world +" +data_5: .asciiz "Done. +" +methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +zero_error: .asciiz "Division by zero error +" +case_void_error: .asciiz "Case on void error +" +dispatch_error: .asciiz "Dispatch on void error +" +case_error: .asciiz "Case statement without a matching branch error +" +index_error: .asciiz "Substring out of range error +" +heap_error: .asciiz "Heap overflow error +" \ No newline at end of file diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips new file mode 100644 index 00000000..d384b498 --- /dev/null +++ b/tests/codegen/life.mips @@ -0,0 +1,7607 @@ +.text +.globl main +main: +# Save types directions in the types array +la $t9, types +# Save space to locate the type info +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_String +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 0($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Int +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 4($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Object +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 8($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Bool +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 12($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_IO +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 16($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Board +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 20($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_CellularAutomaton +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 24($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Main +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 28($t9) +# Copying parents +lw $v0, 0($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 4($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 8($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 12($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 16($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +lw $v0, 20($t9) +lw $t8, 16($t9) +sw $t8, 4($v0) +lw $v0, 24($t9) +lw $t8, 20($t9) +sw $t8, 4($v0) +lw $v0, 28($t9) +lw $t8, 24($t9) +sw $t8, 4($v0) +# Save method directions in the methods array +la $v0, methods +la $t9, entry +sw $t9, 0($v0) +la $t9, function_abort_Object +sw $t9, 4($v0) +la $t9, function_type_name_Object +sw $t9, 8($v0) +la $t9, function_copy_Object +sw $t9, 12($v0) +la $t9, function_out_string_IO +sw $t9, 16($v0) +la $t9, function_out_int_IO +sw $t9, 20($v0) +la $t9, function_in_int_IO +sw $t9, 24($v0) +la $t9, function_in_string_IO +sw $t9, 28($v0) +la $t9, function_length_String +sw $t9, 32($v0) +la $t9, function_concat_String +sw $t9, 36($v0) +la $t9, function_substr_String +sw $t9, 40($v0) +la $t9, function_type_name_String +sw $t9, 44($v0) +la $t9, function_copy_String +sw $t9, 48($v0) +la $t9, function_type_name_Int +sw $t9, 52($v0) +la $t9, function_copy_Int +sw $t9, 56($v0) +la $t9, function_type_name_Bool +sw $t9, 60($v0) +la $t9, function_copy_Bool +sw $t9, 64($v0) +la $t9, function_abort_String +sw $t9, 68($v0) +la $t9, function_abort_Int +sw $t9, 72($v0) +la $t9, function_abort_Bool +sw $t9, 76($v0) +la $t9, function_Board_Board +sw $t9, 80($v0) +la $t9, function_size_of_board_Board +sw $t9, 84($v0) +la $t9, function_board_init_Board +sw $t9, 88($v0) +la $t9, function_CellularAutomaton_CellularAutomaton +sw $t9, 92($v0) +la $t9, function_init_CellularAutomaton +sw $t9, 96($v0) +la $t9, function_print_CellularAutomaton +sw $t9, 100($v0) +la $t9, function_num_cells_CellularAutomaton +sw $t9, 104($v0) +la $t9, function_cell_CellularAutomaton +sw $t9, 108($v0) +la $t9, function_north_CellularAutomaton +sw $t9, 112($v0) +la $t9, function_south_CellularAutomaton +sw $t9, 116($v0) +la $t9, function_east_CellularAutomaton +sw $t9, 120($v0) +la $t9, function_west_CellularAutomaton +sw $t9, 124($v0) +la $t9, function_northwest_CellularAutomaton +sw $t9, 128($v0) +la $t9, function_northeast_CellularAutomaton +sw $t9, 132($v0) +la $t9, function_southeast_CellularAutomaton +sw $t9, 136($v0) +la $t9, function_southwest_CellularAutomaton +sw $t9, 140($v0) +la $t9, function_neighbors_CellularAutomaton +sw $t9, 144($v0) +la $t9, function_cell_at_next_evolution_CellularAutomaton +sw $t9, 148($v0) +la $t9, function_evolve_CellularAutomaton +sw $t9, 152($v0) +la $t9, function_option_CellularAutomaton +sw $t9, 156($v0) +la $t9, function_prompt_CellularAutomaton +sw $t9, 160($v0) +la $t9, function_prompt2_CellularAutomaton +sw $t9, 164($v0) +la $t9, function_Main_Main +sw $t9, 168($v0) +la $t9, function_main_Main +sw $t9, 172($v0) + +entry: +# Gets the params from the stack +move $fp, $sp +# Gets the frame pointer from the stack +# Updates stack pointer pushing local__internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local__internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 32 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Main +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 32 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 128 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_size_of_board_Board in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_board_init_Board in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Board_Board in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_init_CellularAutomaton in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_print_CellularAutomaton in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_num_cells_CellularAutomaton in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_cell_CellularAutomaton in t9 +lw $t9, 108($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +# Save the direction of the method function_north_CellularAutomaton in t9 +lw $t9, 112($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 60($v0) +# Save the direction of the method function_south_CellularAutomaton in t9 +lw $t9, 116($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 64($v0) +# Save the direction of the method function_east_CellularAutomaton in t9 +lw $t9, 120($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 68($v0) +# Save the direction of the method function_west_CellularAutomaton in t9 +lw $t9, 124($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 72($v0) +# Save the direction of the method function_northwest_CellularAutomaton in t9 +lw $t9, 128($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 76($v0) +# Save the direction of the method function_northeast_CellularAutomaton in t9 +lw $t9, 132($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 80($v0) +# Save the direction of the method function_southeast_CellularAutomaton in t9 +lw $t9, 136($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 84($v0) +# Save the direction of the method function_southwest_CellularAutomaton in t9 +lw $t9, 140($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 88($v0) +# Save the direction of the method function_neighbors_CellularAutomaton in t9 +lw $t9, 144($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 92($v0) +# Save the direction of the method function_cell_at_next_evolution_CellularAutomaton in t9 +lw $t9, 148($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 96($v0) +# Save the direction of the method function_evolve_CellularAutomaton in t9 +lw $t9, 152($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 100($v0) +# Save the direction of the method function_option_CellularAutomaton in t9 +lw $t9, 156($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 104($v0) +# Save the direction of the method function_prompt_CellularAutomaton in t9 +lw $t9, 160($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 108($v0) +# Save the direction of the method function_prompt2_CellularAutomaton in t9 +lw $t9, 164($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 112($v0) +# Save the direction of the method function_CellularAutomaton_CellularAutomaton in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 116($v0) +# Save the direction of the method function_main_Main in t9 +lw $t9, 172($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 120($v0) +# Save the direction of the method function_Main_Main in t9 +lw $t9, 168($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 124($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 28($t8) +sw $v0, 12($t0) +# Static Dispatch of the method Main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +# This function will consume the arguments +jal function_Main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# Static Dispatch of the method main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +li $v0, 0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Object_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_abort_Object_self_0 +move $t1, $t0 +sw $t1, -4($fp) +# Exiting the program +li $t8, 0 +# Printing abort message +li $v0, 4 +la $a0, abort_msg +syscall +li $v0, 4 +lw $a0, 0($t0) +syscall +li $v0, 4 +la $a0, new_line +syscall +li $v0, 17 +move $a0, $t8 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_type_name_Object_result_0 <- Type of self +lw $t1, 0($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +lw $t9, 4($t0) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +move $a0, $t9 +syscall +move $t1, $v0 +# Loop to copy every field of the previous object +# t8 the register to loop +li $t8, 0 +loop_0: +# In t9 is stored the size of the object +bge $t8, $t9, exit_0 +lw $a0, ($t0) +sw $a0, ($v0) +addi $v0, $v0, 4 +addi $t0, $t0, 4 +# Increase loop counter +addi $t8, $t8, 4 +j loop_0 +exit_0: +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_out_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_string_String_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_string_String_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing a string +li $v0, 4 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_out_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value number +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_int_IO_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_int_IO_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing an int +li $v0, 1 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_in_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_int_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Reading a int +li $v0, 5 +syscall +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_in_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_string_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t0, $v0 +# Reading a string +# Putting buffer in a0 +move $a0, $t0 +# Putting length of string in a1 +li $a1, 356 +li $v0, 8 +syscall +# Walks to eliminate the newline +move $t9, $t0 +start_1: +lb $t8, 0($t9) +beqz $t8, end_1 +add $t9, $t9, 1 +j start_1 +end_1: +addiu $t9, $t9, -1 +sb $0, ($t9) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_length_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_length_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +move $t8, $t0 +# Determining the length of a string +loop_2: +lb $t9, 0($t8) +beq $t9, $zero, end_2 +addi $t8, $t8, 1 +j loop_2 +end_2: +sub $t1, $t8, $t0 +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_concat_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_concat_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -8($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +# Copy the first string to dest +move $a0, $t0 +move $a1, $t2 +sw $ra, ($sp) +addiu $sp, $sp, -4 +jal strcopier +# Concatenate second string on result buffer +move $a0, $t1 +move $a1, $v0 +jal strcopier +sb $0, 0($v0) +addiu $sp, $sp, 4 +lw $ra, ($sp) +j finish_3 +# Definition of strcopier +strcopier: +# In a0 is the source and in a1 is the destination +loop_3: +lb $t8, ($a0) +beq $t8, $zero, end_3 +addiu $a0, $a0, 1 +sb $t8, ($a1) +addiu $a1, $a1, 1 +b loop_3 +end_3: +move $v0, $a1 +jr $ra +finish_3: +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_substr_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value begin +addiu $fp, $fp, 4 +# Pops the register with the param value end +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_substr_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -12($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +lw $t3, -8($fp) +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t3 +start_4: +lb $t9, 0($t8) +beqz $t9, error_4 +addi $v0, 1 +bgt $v0, $t0, end_len_4 +addi $t8, 1 +j start_4 +end_len_4: +# Saving dest to iterate over him +move $v0, $t2 +loop_4: +sub $t9, $v0, $t2 +beq $t9, $t1, end_4 +lb $t9, 0($t8) +beqz $t9, error_4 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_4 +error_4: +la $a0, index_error +li $v0, 4 +move $a0, $t3 +syscall +li $v0, 1 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t1 +syscall +j .raise +end_4: +sb $0, 0($v0) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_String_result_0 type_String +la $t0, type_String +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_String_result_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +move $t8, $t0 +# Determining the length of a string +loop_5: +lb $t9, 0($t8) +beq $t9, $zero, end_5 +addi $t8, $t8, 1 +j loop_5 +end_5: +sub $t1, $t8, $t0 +lw $t2, -12($fp) +# local_copy_String_result_2 <- local_copy_String_result_1 - 1 +addi $t2, $t1, -1 +lw $t3, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t3, $v0 +li $t8, 0 +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t0 +start_6: +lb $t9, 0($t8) +beqz $t9, error_6 +addi $v0, 1 +bgt $v0, $t8, end_len_6 +addi $t8, 1 +j start_6 +end_len_6: +# Saving dest to iterate over him +move $v0, $t3 +loop_6: +sub $t9, $v0, $t3 +beq $t9, $t2, end_6 +lb $t9, 0($t8) +beqz $t9, error_6 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_6 +error_6: +la $a0, index_error +li $v0, 4 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t8 +syscall +li $v0, 1 +move $a0, $t2 +syscall +j .raise +end_6: +sb $0, 0($v0) +move $v0, $t3 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +sw $t3, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Int_result_0 type_Int +la $t0, type_Int +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_Int_result_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Bool_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Bool_result_0 type_Bool +la $t0, type_Bool +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_result_Bool_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_result_Bool_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_String_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self string_abort +la $t0, string_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Int_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self int_abort +la $t0, int_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Bool_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self bool_abort +la $t0, bool_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_Board_Board: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_Board_Board_internal_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# self . rows <- SET 0 +li $t9, 0 +sw $t9, 16($t0) +# self . columns <- SET 0 +li $t9, 0 +sw $t9, 20($t0) +# self . board_size <- SET 0 +li $t9, 0 +sw $t9, 24($t0) +lw $t1, -4($fp) +# Moving self to local_Board_Board_internal_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_size_of_board_Board: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value initial +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_size_of_board_Board_internal_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +# Static Dispatch of the method length +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_length_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_board_init_Board: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value start +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_board_init_Board_size_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_board_init_Board_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_board_init_Board_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_board_init_Board_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_board_init_Board_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_board_init_Board_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_board_init_Board_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_board_init_Board_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_board_init_Board_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_board_init_Board_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_board_init_Board_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_board_init_Board_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_board_init_Board_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_board_init_Board_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_board_init_Board_internal_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_board_init_Board_internal_15 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_board_init_Board_internal_16 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_board_init_Board_internal_17 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_board_init_Board_internal_18 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_board_init_Board_internal_19 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_board_init_Board_internal_20 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_board_init_Board_internal_21 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -12($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_size_of_board_Board +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -0($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -12($fp) +sw $t2, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# Moving local_board_init_Board_internal_1 to local_board_init_Board_size_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -16($fp) +# local_board_init_Board_internal_2 <- local_board_init_Board_size_0 = 15 +li $t9, 15 +seq $t2, $t1, $t9 +# If local_board_init_Board_internal_2 goto true__72 +sw $t0, -12($fp) +sw $t1, -8($fp) +sw $t2, -16($fp) +bnez $t2, true__72 +lw $t0, -8($fp) +lw $t1, -24($fp) +# local_board_init_Board_internal_4 <- local_board_init_Board_size_0 = 16 +li $t9, 16 +seq $t1, $t0, $t9 +# If local_board_init_Board_internal_4 goto true__76 +sw $t0, -8($fp) +sw $t1, -24($fp) +bnez $t1, true__76 +lw $t0, -8($fp) +lw $t1, -32($fp) +# local_board_init_Board_internal_6 <- local_board_init_Board_size_0 = 20 +li $t9, 20 +seq $t1, $t0, $t9 +# If local_board_init_Board_internal_6 goto true__80 +sw $t0, -8($fp) +sw $t1, -32($fp) +bnez $t1, true__80 +lw $t0, -8($fp) +lw $t1, -40($fp) +# local_board_init_Board_internal_8 <- local_board_init_Board_size_0 = 21 +li $t9, 21 +seq $t1, $t0, $t9 +# If local_board_init_Board_internal_8 goto true__84 +sw $t0, -8($fp) +sw $t1, -40($fp) +bnez $t1, true__84 +lw $t0, -8($fp) +lw $t1, -48($fp) +# local_board_init_Board_internal_10 <- local_board_init_Board_size_0 = 25 +li $t9, 25 +seq $t1, $t0, $t9 +# If local_board_init_Board_internal_10 goto true__88 +sw $t0, -8($fp) +sw $t1, -48($fp) +bnez $t1, true__88 +lw $t0, -8($fp) +lw $t1, -56($fp) +# local_board_init_Board_internal_12 <- local_board_init_Board_size_0 = 28 +li $t9, 28 +seq $t1, $t0, $t9 +# If local_board_init_Board_internal_12 goto true__92 +sw $t0, -8($fp) +sw $t1, -56($fp) +bnez $t1, true__92 +lw $t0, -4($fp) +# self . rows <- SET 5 +li $t9, 5 +sw $t9, 16($t0) +# self . columns <- SET 5 +li $t9, 5 +sw $t9, 20($t0) +lw $t1, -8($fp) +# self . board_size <- SET local_board_init_Board_size_0 +sw $t1, 24($t0) +lw $t2, -64($fp) +# Moving local_board_init_Board_size_0 to local_board_init_Board_internal_14 +move $t2, $t1 +sw $t2, -64($fp) +lw $t3, -60($fp) +# Moving local_board_init_Board_internal_14 to local_board_init_Board_internal_13 +move $t3, $t2 +sw $t3, -60($fp) +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -64($fp) +sw $t3, -60($fp) +j end__92 +true__92: +lw $t0, -4($fp) +# self . rows <- SET 7 +li $t9, 7 +sw $t9, 16($t0) +# self . columns <- SET 4 +li $t9, 4 +sw $t9, 20($t0) +lw $t1, -8($fp) +# self . board_size <- SET local_board_init_Board_size_0 +sw $t1, 24($t0) +lw $t2, -68($fp) +# Moving local_board_init_Board_size_0 to local_board_init_Board_internal_15 +move $t2, $t1 +sw $t2, -68($fp) +lw $t3, -60($fp) +# Moving local_board_init_Board_internal_15 to local_board_init_Board_internal_13 +move $t3, $t2 +sw $t3, -60($fp) +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -68($fp) +sw $t3, -60($fp) +end__92: +lw $t0, -60($fp) +lw $t1, -52($fp) +# Moving local_board_init_Board_internal_13 to local_board_init_Board_internal_11 +move $t1, $t0 +sw $t1, -52($fp) +sw $t0, -60($fp) +sw $t1, -52($fp) +j end__88 +true__88: +lw $t0, -4($fp) +# self . rows <- SET 5 +li $t9, 5 +sw $t9, 16($t0) +# self . columns <- SET 5 +li $t9, 5 +sw $t9, 20($t0) +lw $t1, -8($fp) +# self . board_size <- SET local_board_init_Board_size_0 +sw $t1, 24($t0) +lw $t2, -72($fp) +# Moving local_board_init_Board_size_0 to local_board_init_Board_internal_16 +move $t2, $t1 +sw $t2, -72($fp) +lw $t3, -52($fp) +# Moving local_board_init_Board_internal_16 to local_board_init_Board_internal_11 +move $t3, $t2 +sw $t3, -52($fp) +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -72($fp) +sw $t3, -52($fp) +end__88: +lw $t0, -52($fp) +lw $t1, -44($fp) +# Moving local_board_init_Board_internal_11 to local_board_init_Board_internal_9 +move $t1, $t0 +sw $t1, -44($fp) +sw $t0, -52($fp) +sw $t1, -44($fp) +j end__84 +true__84: +lw $t0, -4($fp) +# self . rows <- SET 3 +li $t9, 3 +sw $t9, 16($t0) +# self . columns <- SET 7 +li $t9, 7 +sw $t9, 20($t0) +lw $t1, -8($fp) +# self . board_size <- SET local_board_init_Board_size_0 +sw $t1, 24($t0) +lw $t2, -76($fp) +# Moving local_board_init_Board_size_0 to local_board_init_Board_internal_17 +move $t2, $t1 +sw $t2, -76($fp) +lw $t3, -44($fp) +# Moving local_board_init_Board_internal_17 to local_board_init_Board_internal_9 +move $t3, $t2 +sw $t3, -44($fp) +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -76($fp) +sw $t3, -44($fp) +end__84: +lw $t0, -44($fp) +lw $t1, -36($fp) +# Moving local_board_init_Board_internal_9 to local_board_init_Board_internal_7 +move $t1, $t0 +sw $t1, -36($fp) +sw $t0, -44($fp) +sw $t1, -36($fp) +j end__80 +true__80: +lw $t0, -4($fp) +# self . rows <- SET 4 +li $t9, 4 +sw $t9, 16($t0) +# self . columns <- SET 5 +li $t9, 5 +sw $t9, 20($t0) +lw $t1, -8($fp) +# self . board_size <- SET local_board_init_Board_size_0 +sw $t1, 24($t0) +lw $t2, -80($fp) +# Moving local_board_init_Board_size_0 to local_board_init_Board_internal_18 +move $t2, $t1 +sw $t2, -80($fp) +lw $t3, -36($fp) +# Moving local_board_init_Board_internal_18 to local_board_init_Board_internal_7 +move $t3, $t2 +sw $t3, -36($fp) +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -80($fp) +sw $t3, -36($fp) +end__80: +lw $t0, -36($fp) +lw $t1, -28($fp) +# Moving local_board_init_Board_internal_7 to local_board_init_Board_internal_5 +move $t1, $t0 +sw $t1, -28($fp) +sw $t0, -36($fp) +sw $t1, -28($fp) +j end__76 +true__76: +lw $t0, -4($fp) +# self . rows <- SET 4 +li $t9, 4 +sw $t9, 16($t0) +# self . columns <- SET 4 +li $t9, 4 +sw $t9, 20($t0) +lw $t1, -8($fp) +# self . board_size <- SET local_board_init_Board_size_0 +sw $t1, 24($t0) +lw $t2, -84($fp) +# Moving local_board_init_Board_size_0 to local_board_init_Board_internal_19 +move $t2, $t1 +sw $t2, -84($fp) +lw $t3, -28($fp) +# Moving local_board_init_Board_internal_19 to local_board_init_Board_internal_5 +move $t3, $t2 +sw $t3, -28($fp) +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -84($fp) +sw $t3, -28($fp) +end__76: +lw $t0, -28($fp) +lw $t1, -20($fp) +# Moving local_board_init_Board_internal_5 to local_board_init_Board_internal_3 +move $t1, $t0 +sw $t1, -20($fp) +sw $t0, -28($fp) +sw $t1, -20($fp) +j end__72 +true__72: +lw $t0, -4($fp) +# self . rows <- SET 3 +li $t9, 3 +sw $t9, 16($t0) +# self . columns <- SET 5 +li $t9, 5 +sw $t9, 20($t0) +lw $t1, -8($fp) +# self . board_size <- SET local_board_init_Board_size_0 +sw $t1, 24($t0) +lw $t2, -88($fp) +# Moving local_board_init_Board_size_0 to local_board_init_Board_internal_20 +move $t2, $t1 +sw $t2, -88($fp) +lw $t3, -20($fp) +# Moving local_board_init_Board_internal_20 to local_board_init_Board_internal_3 +move $t3, $t2 +sw $t3, -20($fp) +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -88($fp) +sw $t3, -20($fp) +end__72: +lw $t0, -4($fp) +lw $t1, -92($fp) +# Moving self to local_board_init_Board_internal_21 +move $t1, $t0 +sw $t1, -92($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -92($fp) +# Removing all locals from stack +addiu $sp, $sp, 96 +jr $ra + + +function_CellularAutomaton_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_CellularAutomaton_CellularAutomaton_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_CellularAutomaton_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# self . rows <- SET 0 +li $t9, 0 +sw $t9, 16($t0) +# self . columns <- SET 0 +li $t9, 0 +sw $t9, 20($t0) +# self . board_size <- SET 0 +li $t9, 0 +sw $t9, 24($t0) +lw $t1, -4($fp) +# Saves in local_CellularAutomaton_CellularAutomaton_internal_0 data_1 +la $t1, data_1 +# self . population_map <- SET local_CellularAutomaton_CellularAutomaton_internal_0 +sw $t1, 28($t0) +lw $t2, -8($fp) +# Moving self to local_CellularAutomaton_CellularAutomaton_internal_1 +move $t2, $t0 +sw $t2, -8($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_init_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value map +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_init_CellularAutomaton_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_init_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# self . population_map <- SET map +sw $t0, 28($t1) +lw $t2, -8($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_board_init_Board +lw $t8, 36($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +lw $t2, -12($fp) +# Moving self to local_init_CellularAutomaton_internal_1 +move $t2, $t1 +sw $t2, -12($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -4($fp) +sw $t2, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_print_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_print_CellularAutomaton_i_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_CellularAutomaton_num_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_CellularAutomaton_board_size_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_CellularAutomaton_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_CellularAutomaton_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_CellularAutomaton_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_CellularAutomaton_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_CellularAutomaton_population_map_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_CellularAutomaton_columns_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_CellularAutomaton_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_CellularAutomaton_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_CellularAutomaton_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_CellularAutomaton_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_CellularAutomaton_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_CellularAutomaton_columns_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_CellularAutomaton_internal_15 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_CellularAutomaton_internal_16 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_CellularAutomaton_internal_17 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_CellularAutomaton_internal_18 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Moving 0 to local_print_CellularAutomaton_i_0 +li $t0, 0 +sw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -12($fp) +# local_print_CellularAutomaton_board_size_2 <- GET self . board_size +lw $t2, 24($t1) +lw $t3, -8($fp) +# Moving local_print_CellularAutomaton_board_size_2 to local_print_CellularAutomaton_num_1 +move $t3, $t2 +sw $t3, -8($fp) +lw $t4, -16($fp) +# Saves in local_print_CellularAutomaton_internal_3 data_2 +la $t4, data_2 +lw $t5, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t4, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -8($fp) +sw $t4, -16($fp) +sw $t5, -20($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t1, $v0 +sw $t0, -20($fp) +sw $t1, -24($fp) +start__198: +lw $t0, -4($fp) +lw $t1, -8($fp) +lw $t2, -28($fp) +# local_print_CellularAutomaton_internal_6 <- local_print_CellularAutomaton_i_0 < local_print_CellularAutomaton_num_1 +slt $t2, $t0, $t1 +# If not local_print_CellularAutomaton_internal_6 goto end__198 +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -28($fp) +beqz $t2, end__198 +lw $t0, -0($fp) +lw $t1, -32($fp) +# local_print_CellularAutomaton_population_map_7 <- GET self . population_map +lw $t1, 28($t0) +lw $t2, -36($fp) +# local_print_CellularAutomaton_columns_8 <- GET self . columns +lw $t2, 20($t0) +lw $t3, -40($fp) +# Static Dispatch of the method substr +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t4, -4($fp) +sw $t4, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -32($fp) +sw $t2, -36($fp) +sw $t3, -40($fp) +sw $t4, -4($fp) +# This function will consume the arguments +jal function_substr_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -44($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -40($fp) +sw $t1, -0($fp) +sw $t2, -44($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -44($fp) +# saves the return value +move $t0, $v0 +lw $t1, -48($fp) +# Saves in local_print_CellularAutomaton_internal_11 data_3 +la $t1, data_3 +lw $t2, -0($fp) +lw $t3, -52($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -44($fp) +sw $t1, -48($fp) +sw $t2, -0($fp) +sw $t3, -52($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -52($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -60($fp) +# local_print_CellularAutomaton_columns_14 <- GET self . columns +lw $t2, 20($t1) +lw $t3, -4($fp) +lw $t4, -56($fp) +# local_print_CellularAutomaton_internal_13 <- local_print_CellularAutomaton_i_0 + local_print_CellularAutomaton_columns_14 +add $t4, $t3, $t2 +# Moving local_print_CellularAutomaton_internal_13 to local_print_CellularAutomaton_i_0 +move $t3, $t4 +sw $t3, -4($fp) +lw $t5, -64($fp) +# Moving local_print_CellularAutomaton_internal_13 to local_print_CellularAutomaton_internal_15 +move $t5, $t4 +sw $t5, -64($fp) +lw $t6, -24($fp) +# Moving local_print_CellularAutomaton_internal_15 to local_print_CellularAutomaton_internal_5 +move $t6, $t5 +sw $t6, -24($fp) +sw $t0, -52($fp) +sw $t1, -0($fp) +sw $t2, -60($fp) +sw $t3, -4($fp) +sw $t4, -56($fp) +sw $t5, -64($fp) +sw $t6, -24($fp) +j start__198 +end__198: +lw $t0, -68($fp) +# Saves in local_print_CellularAutomaton_internal_16 data_4 +la $t0, data_4 +lw $t1, -0($fp) +lw $t2, -72($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -68($fp) +sw $t1, -0($fp) +sw $t2, -72($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -72($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -76($fp) +# Moving self to local_print_CellularAutomaton_internal_18 +move $t2, $t1 +sw $t2, -76($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -72($fp) +sw $t1, -0($fp) +sw $t2, -76($fp) +# Removing all locals from stack +addiu $sp, $sp, 80 +jr $ra + + +function_num_cells_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_num_cells_CellularAutomaton_population_map_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_num_cells_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_num_cells_CellularAutomaton_population_map_0 <- GET self . population_map +lw $t1, 28($t0) +lw $t2, -8($fp) +# Static Dispatch of the method length +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal function_length_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_cell_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value position +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_cell_CellularAutomaton_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_CellularAutomaton_board_size_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_CellularAutomaton_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_CellularAutomaton_population_map_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_CellularAutomaton_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_CellularAutomaton_internal_6 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -16($fp) +# local_cell_CellularAutomaton_board_size_2 <- GET self . board_size +lw $t1, 24($t0) +lw $t2, -12($fp) +# local_cell_CellularAutomaton_internal_1 <- local_cell_CellularAutomaton_board_size_2 - 1 +addi $t2, $t1, -1 +lw $t3, -0($fp) +lw $t4, -8($fp) +# local_cell_CellularAutomaton_internal_0 <- local_cell_CellularAutomaton_internal_1 < position +slt $t4, $t2, $t3 +# If local_cell_CellularAutomaton_internal_0 goto true__258 +sw $t0, -4($fp) +sw $t1, -16($fp) +sw $t2, -12($fp) +sw $t3, -0($fp) +sw $t4, -8($fp) +bnez $t4, true__258 +lw $t0, -4($fp) +lw $t1, -24($fp) +# local_cell_CellularAutomaton_population_map_4 <- GET self . population_map +lw $t1, 28($t0) +lw $t2, -28($fp) +# Static Dispatch of the method substr +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +li $t9, 1 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t3, -0($fp) +sw $t3, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -24($fp) +sw $t2, -28($fp) +sw $t3, -0($fp) +# This function will consume the arguments +jal function_substr_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -28($fp) +# saves the return value +move $t0, $v0 +lw $t1, -20($fp) +# Moving local_cell_CellularAutomaton_internal_5 to local_cell_CellularAutomaton_internal_3 +move $t1, $t0 +sw $t1, -20($fp) +sw $t0, -28($fp) +sw $t1, -20($fp) +j end__258 +true__258: +lw $t0, -32($fp) +# Saves in local_cell_CellularAutomaton_internal_6 data_5 +la $t0, data_5 +lw $t1, -20($fp) +# Moving local_cell_CellularAutomaton_internal_6 to local_cell_CellularAutomaton_internal_3 +move $t1, $t0 +sw $t1, -20($fp) +sw $t0, -32($fp) +sw $t1, -20($fp) +end__258: +lw $t0, -20($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +# Removing all locals from stack +addiu $sp, $sp, 36 +jr $ra + + +function_north_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value position +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_north_CellularAutomaton_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_north_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_north_CellularAutomaton_columns_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_north_CellularAutomaton_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_north_CellularAutomaton_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_north_CellularAutomaton_columns_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_north_CellularAutomaton_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_north_CellularAutomaton_internal_7 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -16($fp) +# local_north_CellularAutomaton_columns_2 <- GET self . columns +lw $t1, 20($t0) +lw $t2, -0($fp) +lw $t3, -12($fp) +# local_north_CellularAutomaton_internal_1 <- position - local_north_CellularAutomaton_columns_2 +sub $t3, $t2, $t1 +lw $t4, -8($fp) +# local_north_CellularAutomaton_internal_0 <- local_north_CellularAutomaton_internal_1 < 0 +li $t9, 0 +slt $t4, $t3, $t9 +# If local_north_CellularAutomaton_internal_0 goto true__285 +sw $t0, -4($fp) +sw $t1, -16($fp) +sw $t2, -0($fp) +sw $t3, -12($fp) +sw $t4, -8($fp) +bnez $t4, true__285 +lw $t0, -4($fp) +lw $t1, -28($fp) +# local_north_CellularAutomaton_columns_5 <- GET self . columns +lw $t1, 20($t0) +lw $t2, -0($fp) +lw $t3, -24($fp) +# local_north_CellularAutomaton_internal_4 <- position - local_north_CellularAutomaton_columns_5 +sub $t3, $t2, $t1 +lw $t4, -32($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_cell_CellularAutomaton +lw $t8, 56($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -28($fp) +sw $t2, -0($fp) +sw $t3, -24($fp) +sw $t4, -32($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -32($fp) +# saves the return value +move $t0, $v0 +lw $t1, -20($fp) +# Moving local_north_CellularAutomaton_internal_6 to local_north_CellularAutomaton_internal_3 +move $t1, $t0 +sw $t1, -20($fp) +sw $t0, -32($fp) +sw $t1, -20($fp) +j end__285 +true__285: +lw $t0, -36($fp) +# Saves in local_north_CellularAutomaton_internal_7 data_6 +la $t0, data_6 +lw $t1, -20($fp) +# Moving local_north_CellularAutomaton_internal_7 to local_north_CellularAutomaton_internal_3 +move $t1, $t0 +sw $t1, -20($fp) +sw $t0, -36($fp) +sw $t1, -20($fp) +end__285: +lw $t0, -20($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +# Removing all locals from stack +addiu $sp, $sp, 40 +jr $ra + + +function_south_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value position +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_south_CellularAutomaton_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_south_CellularAutomaton_board_size_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_south_CellularAutomaton_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_south_CellularAutomaton_columns_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_south_CellularAutomaton_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_south_CellularAutomaton_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_south_CellularAutomaton_columns_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_south_CellularAutomaton_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_south_CellularAutomaton_internal_8 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -12($fp) +# local_south_CellularAutomaton_board_size_1 <- GET self . board_size +lw $t1, 24($t0) +lw $t2, -20($fp) +# local_south_CellularAutomaton_columns_3 <- GET self . columns +lw $t2, 20($t0) +lw $t3, -0($fp) +lw $t4, -16($fp) +# local_south_CellularAutomaton_internal_2 <- position + local_south_CellularAutomaton_columns_3 +add $t4, $t3, $t2 +lw $t5, -8($fp) +# local_south_CellularAutomaton_internal_0 <- local_south_CellularAutomaton_board_size_1 < local_south_CellularAutomaton_internal_2 +slt $t5, $t1, $t4 +# If local_south_CellularAutomaton_internal_0 goto true__314 +sw $t0, -4($fp) +sw $t1, -12($fp) +sw $t2, -20($fp) +sw $t3, -0($fp) +sw $t4, -16($fp) +sw $t5, -8($fp) +bnez $t5, true__314 +lw $t0, -4($fp) +lw $t1, -32($fp) +# local_south_CellularAutomaton_columns_6 <- GET self . columns +lw $t1, 20($t0) +lw $t2, -0($fp) +lw $t3, -28($fp) +# local_south_CellularAutomaton_internal_5 <- position + local_south_CellularAutomaton_columns_6 +add $t3, $t2, $t1 +lw $t4, -36($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_cell_CellularAutomaton +lw $t8, 56($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -32($fp) +sw $t2, -0($fp) +sw $t3, -28($fp) +sw $t4, -36($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -36($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# Moving local_south_CellularAutomaton_internal_7 to local_south_CellularAutomaton_internal_4 +move $t1, $t0 +sw $t1, -24($fp) +sw $t0, -36($fp) +sw $t1, -24($fp) +j end__314 +true__314: +lw $t0, -40($fp) +# Saves in local_south_CellularAutomaton_internal_8 data_7 +la $t0, data_7 +lw $t1, -24($fp) +# Moving local_south_CellularAutomaton_internal_8 to local_south_CellularAutomaton_internal_4 +move $t1, $t0 +sw $t1, -24($fp) +sw $t0, -40($fp) +sw $t1, -24($fp) +end__314: +lw $t0, -24($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -24($fp) +# Removing all locals from stack +addiu $sp, $sp, 44 +jr $ra + + +function_east_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value position +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_east_CellularAutomaton_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_east_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_east_CellularAutomaton_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_east_CellularAutomaton_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_east_CellularAutomaton_columns_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_east_CellularAutomaton_columns_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_east_CellularAutomaton_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_east_CellularAutomaton_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_east_CellularAutomaton_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_east_CellularAutomaton_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_east_CellularAutomaton_internal_10 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -20($fp) +# local_east_CellularAutomaton_internal_3 <- position + 1 +addi $t1, $t0, 1 +lw $t2, -4($fp) +lw $t3, -24($fp) +# local_east_CellularAutomaton_columns_4 <- GET self . columns +lw $t3, 20($t2) +lw $t4, -16($fp) +# local_east_CellularAutomaton_internal_2 <- local_east_CellularAutomaton_internal_3 / local_east_CellularAutomaton_columns_4 +la $a0, zero_error +beqz $t3, .raise +div $t1, $t3 +mflo $t4 +lw $t5, -28($fp) +# local_east_CellularAutomaton_columns_5 <- GET self . columns +lw $t5, 20($t2) +lw $t6, -12($fp) +# local_east_CellularAutomaton_internal_1 <- local_east_CellularAutomaton_internal_2 * local_east_CellularAutomaton_columns_5 +mult $t4, $t5 +mflo $t6 +lw $t7, -32($fp) +# local_east_CellularAutomaton_internal_6 <- position + 1 +addi $t7, $t0, 1 +lw $a0, -8($fp) +# local_east_CellularAutomaton_internal_0 <- local_east_CellularAutomaton_internal_1 = local_east_CellularAutomaton_internal_6 +seq $a0, $t6, $t7 +# If local_east_CellularAutomaton_internal_0 goto true__349 +sw $t0, -0($fp) +sw $t1, -20($fp) +sw $t2, -4($fp) +sw $t3, -24($fp) +sw $t4, -16($fp) +sw $t5, -28($fp) +sw $t6, -12($fp) +sw $t7, -32($fp) +sw $a0, -8($fp) +bnez $a0, true__349 +lw $t0, -0($fp) +lw $t1, -40($fp) +# local_east_CellularAutomaton_internal_8 <- position + 1 +addi $t1, $t0, 1 +lw $t2, -4($fp) +lw $t3, -44($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_cell_CellularAutomaton +lw $t8, 56($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -40($fp) +sw $t2, -4($fp) +sw $t3, -44($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -44($fp) +# saves the return value +move $t0, $v0 +lw $t1, -36($fp) +# Moving local_east_CellularAutomaton_internal_9 to local_east_CellularAutomaton_internal_7 +move $t1, $t0 +sw $t1, -36($fp) +sw $t0, -44($fp) +sw $t1, -36($fp) +j end__349 +true__349: +lw $t0, -48($fp) +# Saves in local_east_CellularAutomaton_internal_10 data_8 +la $t0, data_8 +lw $t1, -36($fp) +# Moving local_east_CellularAutomaton_internal_10 to local_east_CellularAutomaton_internal_7 +move $t1, $t0 +sw $t1, -36($fp) +sw $t0, -48($fp) +sw $t1, -36($fp) +end__349: +lw $t0, -36($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -36($fp) +# Removing all locals from stack +addiu $sp, $sp, 52 +jr $ra + + +function_west_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value position +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_west_CellularAutomaton_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_west_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_west_CellularAutomaton_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_west_CellularAutomaton_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_west_CellularAutomaton_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_west_CellularAutomaton_columns_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_west_CellularAutomaton_columns_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_west_CellularAutomaton_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_west_CellularAutomaton_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_west_CellularAutomaton_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_west_CellularAutomaton_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_west_CellularAutomaton_internal_11 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +# local_west_CellularAutomaton_internal_0 <- position = 0 +li $t9, 0 +seq $t1, $t0, $t9 +# If local_west_CellularAutomaton_internal_0 goto true__370 +sw $t0, -0($fp) +sw $t1, -8($fp) +bnez $t1, true__370 +lw $t0, -4($fp) +lw $t1, -28($fp) +# local_west_CellularAutomaton_columns_5 <- GET self . columns +lw $t1, 20($t0) +lw $t2, -0($fp) +lw $t3, -24($fp) +# local_west_CellularAutomaton_internal_4 <- position / local_west_CellularAutomaton_columns_5 +la $a0, zero_error +beqz $t1, .raise +div $t2, $t1 +mflo $t3 +lw $t4, -32($fp) +# local_west_CellularAutomaton_columns_6 <- GET self . columns +lw $t4, 20($t0) +lw $t5, -20($fp) +# local_west_CellularAutomaton_internal_3 <- local_west_CellularAutomaton_internal_4 * local_west_CellularAutomaton_columns_6 +mult $t3, $t4 +mflo $t5 +lw $t6, -16($fp) +# local_west_CellularAutomaton_internal_2 <- local_west_CellularAutomaton_internal_3 = position +seq $t6, $t5, $t2 +# If local_west_CellularAutomaton_internal_2 goto true__382 +sw $t0, -4($fp) +sw $t1, -28($fp) +sw $t2, -0($fp) +sw $t3, -24($fp) +sw $t4, -32($fp) +sw $t5, -20($fp) +sw $t6, -16($fp) +bnez $t6, true__382 +lw $t0, -0($fp) +lw $t1, -40($fp) +# local_west_CellularAutomaton_internal_8 <- position - 1 +addi $t1, $t0, -1 +lw $t2, -4($fp) +lw $t3, -44($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_cell_CellularAutomaton +lw $t8, 56($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -40($fp) +sw $t2, -4($fp) +sw $t3, -44($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -44($fp) +# saves the return value +move $t0, $v0 +lw $t1, -36($fp) +# Moving local_west_CellularAutomaton_internal_9 to local_west_CellularAutomaton_internal_7 +move $t1, $t0 +sw $t1, -36($fp) +sw $t0, -44($fp) +sw $t1, -36($fp) +j end__382 +true__382: +lw $t0, -48($fp) +# Saves in local_west_CellularAutomaton_internal_10 data_9 +la $t0, data_9 +lw $t1, -36($fp) +# Moving local_west_CellularAutomaton_internal_10 to local_west_CellularAutomaton_internal_7 +move $t1, $t0 +sw $t1, -36($fp) +sw $t0, -48($fp) +sw $t1, -36($fp) +end__382: +lw $t0, -36($fp) +lw $t1, -12($fp) +# Moving local_west_CellularAutomaton_internal_7 to local_west_CellularAutomaton_internal_1 +move $t1, $t0 +sw $t1, -12($fp) +sw $t0, -36($fp) +sw $t1, -12($fp) +j end__370 +true__370: +lw $t0, -52($fp) +# Saves in local_west_CellularAutomaton_internal_11 data_10 +la $t0, data_10 +lw $t1, -12($fp) +# Moving local_west_CellularAutomaton_internal_11 to local_west_CellularAutomaton_internal_1 +move $t1, $t0 +sw $t1, -12($fp) +sw $t0, -52($fp) +sw $t1, -12($fp) +end__370: +lw $t0, -12($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 56 +jr $ra + + +function_northwest_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value position +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_northwest_CellularAutomaton_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northwest_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northwest_CellularAutomaton_columns_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northwest_CellularAutomaton_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northwest_CellularAutomaton_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northwest_CellularAutomaton_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northwest_CellularAutomaton_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northwest_CellularAutomaton_columns_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northwest_CellularAutomaton_columns_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northwest_CellularAutomaton_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northwest_CellularAutomaton_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northwest_CellularAutomaton_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northwest_CellularAutomaton_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northwest_CellularAutomaton_internal_13 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -16($fp) +# local_northwest_CellularAutomaton_columns_2 <- GET self . columns +lw $t1, 20($t0) +lw $t2, -0($fp) +lw $t3, -12($fp) +# local_northwest_CellularAutomaton_internal_1 <- position - local_northwest_CellularAutomaton_columns_2 +sub $t3, $t2, $t1 +lw $t4, -8($fp) +# local_northwest_CellularAutomaton_internal_0 <- local_northwest_CellularAutomaton_internal_1 < 0 +li $t9, 0 +slt $t4, $t3, $t9 +# If local_northwest_CellularAutomaton_internal_0 goto true__415 +sw $t0, -4($fp) +sw $t1, -16($fp) +sw $t2, -0($fp) +sw $t3, -12($fp) +sw $t4, -8($fp) +bnez $t4, true__415 +lw $t0, -4($fp) +lw $t1, -36($fp) +# local_northwest_CellularAutomaton_columns_7 <- GET self . columns +lw $t1, 20($t0) +lw $t2, -0($fp) +lw $t3, -32($fp) +# local_northwest_CellularAutomaton_internal_6 <- position / local_northwest_CellularAutomaton_columns_7 +la $a0, zero_error +beqz $t1, .raise +div $t2, $t1 +mflo $t3 +lw $t4, -40($fp) +# local_northwest_CellularAutomaton_columns_8 <- GET self . columns +lw $t4, 20($t0) +lw $t5, -28($fp) +# local_northwest_CellularAutomaton_internal_5 <- local_northwest_CellularAutomaton_internal_6 * local_northwest_CellularAutomaton_columns_8 +mult $t3, $t4 +mflo $t5 +lw $t6, -24($fp) +# local_northwest_CellularAutomaton_internal_4 <- local_northwest_CellularAutomaton_internal_5 = position +seq $t6, $t5, $t2 +# If local_northwest_CellularAutomaton_internal_4 goto true__427 +sw $t0, -4($fp) +sw $t1, -36($fp) +sw $t2, -0($fp) +sw $t3, -32($fp) +sw $t4, -40($fp) +sw $t5, -28($fp) +sw $t6, -24($fp) +bnez $t6, true__427 +lw $t0, -0($fp) +lw $t1, -48($fp) +# local_northwest_CellularAutomaton_internal_10 <- position - 1 +addi $t1, $t0, -1 +lw $t2, -4($fp) +lw $t3, -52($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_north_CellularAutomaton +lw $t8, 60($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -48($fp) +sw $t2, -4($fp) +sw $t3, -52($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -52($fp) +# saves the return value +move $t0, $v0 +lw $t1, -44($fp) +# Moving local_northwest_CellularAutomaton_internal_11 to local_northwest_CellularAutomaton_internal_9 +move $t1, $t0 +sw $t1, -44($fp) +sw $t0, -52($fp) +sw $t1, -44($fp) +j end__427 +true__427: +lw $t0, -56($fp) +# Saves in local_northwest_CellularAutomaton_internal_12 data_11 +la $t0, data_11 +lw $t1, -44($fp) +# Moving local_northwest_CellularAutomaton_internal_12 to local_northwest_CellularAutomaton_internal_9 +move $t1, $t0 +sw $t1, -44($fp) +sw $t0, -56($fp) +sw $t1, -44($fp) +end__427: +lw $t0, -44($fp) +lw $t1, -20($fp) +# Moving local_northwest_CellularAutomaton_internal_9 to local_northwest_CellularAutomaton_internal_3 +move $t1, $t0 +sw $t1, -20($fp) +sw $t0, -44($fp) +sw $t1, -20($fp) +j end__415 +true__415: +lw $t0, -60($fp) +# Saves in local_northwest_CellularAutomaton_internal_13 data_12 +la $t0, data_12 +lw $t1, -20($fp) +# Moving local_northwest_CellularAutomaton_internal_13 to local_northwest_CellularAutomaton_internal_3 +move $t1, $t0 +sw $t1, -20($fp) +sw $t0, -60($fp) +sw $t1, -20($fp) +end__415: +lw $t0, -20($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +# Removing all locals from stack +addiu $sp, $sp, 64 +jr $ra + + +function_northeast_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value position +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_northeast_CellularAutomaton_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northeast_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northeast_CellularAutomaton_columns_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northeast_CellularAutomaton_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northeast_CellularAutomaton_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northeast_CellularAutomaton_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northeast_CellularAutomaton_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northeast_CellularAutomaton_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northeast_CellularAutomaton_columns_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northeast_CellularAutomaton_columns_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northeast_CellularAutomaton_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northeast_CellularAutomaton_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northeast_CellularAutomaton_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northeast_CellularAutomaton_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northeast_CellularAutomaton_internal_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_northeast_CellularAutomaton_internal_15 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -16($fp) +# local_northeast_CellularAutomaton_columns_2 <- GET self . columns +lw $t1, 20($t0) +lw $t2, -0($fp) +lw $t3, -12($fp) +# local_northeast_CellularAutomaton_internal_1 <- position - local_northeast_CellularAutomaton_columns_2 +sub $t3, $t2, $t1 +lw $t4, -8($fp) +# local_northeast_CellularAutomaton_internal_0 <- local_northeast_CellularAutomaton_internal_1 < 0 +li $t9, 0 +slt $t4, $t3, $t9 +# If local_northeast_CellularAutomaton_internal_0 goto true__460 +sw $t0, -4($fp) +sw $t1, -16($fp) +sw $t2, -0($fp) +sw $t3, -12($fp) +sw $t4, -8($fp) +bnez $t4, true__460 +lw $t0, -0($fp) +lw $t1, -36($fp) +# local_northeast_CellularAutomaton_internal_7 <- position + 1 +addi $t1, $t0, 1 +lw $t2, -4($fp) +lw $t3, -40($fp) +# local_northeast_CellularAutomaton_columns_8 <- GET self . columns +lw $t3, 20($t2) +lw $t4, -32($fp) +# local_northeast_CellularAutomaton_internal_6 <- local_northeast_CellularAutomaton_internal_7 / local_northeast_CellularAutomaton_columns_8 +la $a0, zero_error +beqz $t3, .raise +div $t1, $t3 +mflo $t4 +lw $t5, -44($fp) +# local_northeast_CellularAutomaton_columns_9 <- GET self . columns +lw $t5, 20($t2) +lw $t6, -28($fp) +# local_northeast_CellularAutomaton_internal_5 <- local_northeast_CellularAutomaton_internal_6 * local_northeast_CellularAutomaton_columns_9 +mult $t4, $t5 +mflo $t6 +lw $t7, -48($fp) +# local_northeast_CellularAutomaton_internal_10 <- position + 1 +addi $t7, $t0, 1 +lw $a0, -24($fp) +# local_northeast_CellularAutomaton_internal_4 <- local_northeast_CellularAutomaton_internal_5 = local_northeast_CellularAutomaton_internal_10 +seq $a0, $t6, $t7 +# If local_northeast_CellularAutomaton_internal_4 goto true__476 +sw $t0, -0($fp) +sw $t1, -36($fp) +sw $t2, -4($fp) +sw $t3, -40($fp) +sw $t4, -32($fp) +sw $t5, -44($fp) +sw $t6, -28($fp) +sw $t7, -48($fp) +sw $a0, -24($fp) +bnez $a0, true__476 +lw $t0, -0($fp) +lw $t1, -56($fp) +# local_northeast_CellularAutomaton_internal_12 <- position + 1 +addi $t1, $t0, 1 +lw $t2, -4($fp) +lw $t3, -60($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_north_CellularAutomaton +lw $t8, 60($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -56($fp) +sw $t2, -4($fp) +sw $t3, -60($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -60($fp) +# saves the return value +move $t0, $v0 +lw $t1, -52($fp) +# Moving local_northeast_CellularAutomaton_internal_13 to local_northeast_CellularAutomaton_internal_11 +move $t1, $t0 +sw $t1, -52($fp) +sw $t0, -60($fp) +sw $t1, -52($fp) +j end__476 +true__476: +lw $t0, -64($fp) +# Saves in local_northeast_CellularAutomaton_internal_14 data_13 +la $t0, data_13 +lw $t1, -52($fp) +# Moving local_northeast_CellularAutomaton_internal_14 to local_northeast_CellularAutomaton_internal_11 +move $t1, $t0 +sw $t1, -52($fp) +sw $t0, -64($fp) +sw $t1, -52($fp) +end__476: +lw $t0, -52($fp) +lw $t1, -20($fp) +# Moving local_northeast_CellularAutomaton_internal_11 to local_northeast_CellularAutomaton_internal_3 +move $t1, $t0 +sw $t1, -20($fp) +sw $t0, -52($fp) +sw $t1, -20($fp) +j end__460 +true__460: +lw $t0, -68($fp) +# Saves in local_northeast_CellularAutomaton_internal_15 data_14 +la $t0, data_14 +lw $t1, -20($fp) +# Moving local_northeast_CellularAutomaton_internal_15 to local_northeast_CellularAutomaton_internal_3 +move $t1, $t0 +sw $t1, -20($fp) +sw $t0, -68($fp) +sw $t1, -20($fp) +end__460: +lw $t0, -20($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +# Removing all locals from stack +addiu $sp, $sp, 72 +jr $ra + + +function_southeast_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value position +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_southeast_CellularAutomaton_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southeast_CellularAutomaton_board_size_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southeast_CellularAutomaton_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southeast_CellularAutomaton_columns_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southeast_CellularAutomaton_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southeast_CellularAutomaton_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southeast_CellularAutomaton_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southeast_CellularAutomaton_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southeast_CellularAutomaton_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southeast_CellularAutomaton_columns_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southeast_CellularAutomaton_columns_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southeast_CellularAutomaton_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southeast_CellularAutomaton_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southeast_CellularAutomaton_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southeast_CellularAutomaton_internal_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southeast_CellularAutomaton_internal_15 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southeast_CellularAutomaton_internal_16 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -12($fp) +# local_southeast_CellularAutomaton_board_size_1 <- GET self . board_size +lw $t1, 24($t0) +lw $t2, -20($fp) +# local_southeast_CellularAutomaton_columns_3 <- GET self . columns +lw $t2, 20($t0) +lw $t3, -0($fp) +lw $t4, -16($fp) +# local_southeast_CellularAutomaton_internal_2 <- position + local_southeast_CellularAutomaton_columns_3 +add $t4, $t3, $t2 +lw $t5, -8($fp) +# local_southeast_CellularAutomaton_internal_0 <- local_southeast_CellularAutomaton_board_size_1 < local_southeast_CellularAutomaton_internal_2 +slt $t5, $t1, $t4 +# If local_southeast_CellularAutomaton_internal_0 goto true__511 +sw $t0, -4($fp) +sw $t1, -12($fp) +sw $t2, -20($fp) +sw $t3, -0($fp) +sw $t4, -16($fp) +sw $t5, -8($fp) +bnez $t5, true__511 +lw $t0, -0($fp) +lw $t1, -40($fp) +# local_southeast_CellularAutomaton_internal_8 <- position + 1 +addi $t1, $t0, 1 +lw $t2, -4($fp) +lw $t3, -44($fp) +# local_southeast_CellularAutomaton_columns_9 <- GET self . columns +lw $t3, 20($t2) +lw $t4, -36($fp) +# local_southeast_CellularAutomaton_internal_7 <- local_southeast_CellularAutomaton_internal_8 / local_southeast_CellularAutomaton_columns_9 +la $a0, zero_error +beqz $t3, .raise +div $t1, $t3 +mflo $t4 +lw $t5, -48($fp) +# local_southeast_CellularAutomaton_columns_10 <- GET self . columns +lw $t5, 20($t2) +lw $t6, -32($fp) +# local_southeast_CellularAutomaton_internal_6 <- local_southeast_CellularAutomaton_internal_7 * local_southeast_CellularAutomaton_columns_10 +mult $t4, $t5 +mflo $t6 +lw $t7, -52($fp) +# local_southeast_CellularAutomaton_internal_11 <- position + 1 +addi $t7, $t0, 1 +lw $a0, -28($fp) +# local_southeast_CellularAutomaton_internal_5 <- local_southeast_CellularAutomaton_internal_6 = local_southeast_CellularAutomaton_internal_11 +seq $a0, $t6, $t7 +# If local_southeast_CellularAutomaton_internal_5 goto true__527 +sw $t0, -0($fp) +sw $t1, -40($fp) +sw $t2, -4($fp) +sw $t3, -44($fp) +sw $t4, -36($fp) +sw $t5, -48($fp) +sw $t6, -32($fp) +sw $t7, -52($fp) +sw $a0, -28($fp) +bnez $a0, true__527 +lw $t0, -0($fp) +lw $t1, -60($fp) +# local_southeast_CellularAutomaton_internal_13 <- position + 1 +addi $t1, $t0, 1 +lw $t2, -4($fp) +lw $t3, -64($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_south_CellularAutomaton +lw $t8, 64($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -60($fp) +sw $t2, -4($fp) +sw $t3, -64($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -64($fp) +# saves the return value +move $t0, $v0 +lw $t1, -56($fp) +# Moving local_southeast_CellularAutomaton_internal_14 to local_southeast_CellularAutomaton_internal_12 +move $t1, $t0 +sw $t1, -56($fp) +sw $t0, -64($fp) +sw $t1, -56($fp) +j end__527 +true__527: +lw $t0, -68($fp) +# Saves in local_southeast_CellularAutomaton_internal_15 data_15 +la $t0, data_15 +lw $t1, -56($fp) +# Moving local_southeast_CellularAutomaton_internal_15 to local_southeast_CellularAutomaton_internal_12 +move $t1, $t0 +sw $t1, -56($fp) +sw $t0, -68($fp) +sw $t1, -56($fp) +end__527: +lw $t0, -56($fp) +lw $t1, -24($fp) +# Moving local_southeast_CellularAutomaton_internal_12 to local_southeast_CellularAutomaton_internal_4 +move $t1, $t0 +sw $t1, -24($fp) +sw $t0, -56($fp) +sw $t1, -24($fp) +j end__511 +true__511: +lw $t0, -72($fp) +# Saves in local_southeast_CellularAutomaton_internal_16 data_16 +la $t0, data_16 +lw $t1, -24($fp) +# Moving local_southeast_CellularAutomaton_internal_16 to local_southeast_CellularAutomaton_internal_4 +move $t1, $t0 +sw $t1, -24($fp) +sw $t0, -72($fp) +sw $t1, -24($fp) +end__511: +lw $t0, -24($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -24($fp) +# Removing all locals from stack +addiu $sp, $sp, 76 +jr $ra + + +function_southwest_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value position +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_southwest_CellularAutomaton_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southwest_CellularAutomaton_board_size_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southwest_CellularAutomaton_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southwest_CellularAutomaton_columns_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southwest_CellularAutomaton_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southwest_CellularAutomaton_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southwest_CellularAutomaton_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southwest_CellularAutomaton_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southwest_CellularAutomaton_columns_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southwest_CellularAutomaton_columns_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southwest_CellularAutomaton_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southwest_CellularAutomaton_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southwest_CellularAutomaton_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southwest_CellularAutomaton_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_southwest_CellularAutomaton_internal_14 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -12($fp) +# local_southwest_CellularAutomaton_board_size_1 <- GET self . board_size +lw $t1, 24($t0) +lw $t2, -20($fp) +# local_southwest_CellularAutomaton_columns_3 <- GET self . columns +lw $t2, 20($t0) +lw $t3, -0($fp) +lw $t4, -16($fp) +# local_southwest_CellularAutomaton_internal_2 <- position + local_southwest_CellularAutomaton_columns_3 +add $t4, $t3, $t2 +lw $t5, -8($fp) +# local_southwest_CellularAutomaton_internal_0 <- local_southwest_CellularAutomaton_board_size_1 < local_southwest_CellularAutomaton_internal_2 +slt $t5, $t1, $t4 +# If local_southwest_CellularAutomaton_internal_0 goto true__562 +sw $t0, -4($fp) +sw $t1, -12($fp) +sw $t2, -20($fp) +sw $t3, -0($fp) +sw $t4, -16($fp) +sw $t5, -8($fp) +bnez $t5, true__562 +lw $t0, -4($fp) +lw $t1, -40($fp) +# local_southwest_CellularAutomaton_columns_8 <- GET self . columns +lw $t1, 20($t0) +lw $t2, -0($fp) +lw $t3, -36($fp) +# local_southwest_CellularAutomaton_internal_7 <- position / local_southwest_CellularAutomaton_columns_8 +la $a0, zero_error +beqz $t1, .raise +div $t2, $t1 +mflo $t3 +lw $t4, -44($fp) +# local_southwest_CellularAutomaton_columns_9 <- GET self . columns +lw $t4, 20($t0) +lw $t5, -32($fp) +# local_southwest_CellularAutomaton_internal_6 <- local_southwest_CellularAutomaton_internal_7 * local_southwest_CellularAutomaton_columns_9 +mult $t3, $t4 +mflo $t5 +lw $t6, -28($fp) +# local_southwest_CellularAutomaton_internal_5 <- local_southwest_CellularAutomaton_internal_6 = position +seq $t6, $t5, $t2 +# If local_southwest_CellularAutomaton_internal_5 goto true__574 +sw $t0, -4($fp) +sw $t1, -40($fp) +sw $t2, -0($fp) +sw $t3, -36($fp) +sw $t4, -44($fp) +sw $t5, -32($fp) +sw $t6, -28($fp) +bnez $t6, true__574 +lw $t0, -0($fp) +lw $t1, -52($fp) +# local_southwest_CellularAutomaton_internal_11 <- position - 1 +addi $t1, $t0, -1 +lw $t2, -4($fp) +lw $t3, -56($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_south_CellularAutomaton +lw $t8, 64($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -52($fp) +sw $t2, -4($fp) +sw $t3, -56($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -56($fp) +# saves the return value +move $t0, $v0 +lw $t1, -48($fp) +# Moving local_southwest_CellularAutomaton_internal_12 to local_southwest_CellularAutomaton_internal_10 +move $t1, $t0 +sw $t1, -48($fp) +sw $t0, -56($fp) +sw $t1, -48($fp) +j end__574 +true__574: +lw $t0, -60($fp) +# Saves in local_southwest_CellularAutomaton_internal_13 data_17 +la $t0, data_17 +lw $t1, -48($fp) +# Moving local_southwest_CellularAutomaton_internal_13 to local_southwest_CellularAutomaton_internal_10 +move $t1, $t0 +sw $t1, -48($fp) +sw $t0, -60($fp) +sw $t1, -48($fp) +end__574: +lw $t0, -48($fp) +lw $t1, -24($fp) +# Moving local_southwest_CellularAutomaton_internal_10 to local_southwest_CellularAutomaton_internal_4 +move $t1, $t0 +sw $t1, -24($fp) +sw $t0, -48($fp) +sw $t1, -24($fp) +j end__562 +true__562: +lw $t0, -64($fp) +# Saves in local_southwest_CellularAutomaton_internal_14 data_18 +la $t0, data_18 +lw $t1, -24($fp) +# Moving local_southwest_CellularAutomaton_internal_14 to local_southwest_CellularAutomaton_internal_4 +move $t1, $t0 +sw $t1, -24($fp) +sw $t0, -64($fp) +sw $t1, -24($fp) +end__562: +lw $t0, -24($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -24($fp) +# Removing all locals from stack +addiu $sp, $sp, 68 +jr $ra + + +function_neighbors_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value position +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_15 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_16 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_17 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_18 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_19 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_20 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_21 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_22 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_23 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_24 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_25 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_26 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_27 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_28 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_29 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_30 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_31 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_32 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_33 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_34 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_35 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_36 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_37 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_38 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_neighbors_CellularAutomaton_internal_39 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -40($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_north_CellularAutomaton +lw $t8, 60($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -0($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -40($fp) +sw $t2, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +lw $t1, -44($fp) +# Saves in local_neighbors_CellularAutomaton_internal_9 data_19 +la $t1, data_19 +lw $t2, -36($fp) +# local_neighbors_CellularAutomaton_internal_7 <- local_neighbors_CellularAutomaton_internal_8 = local_neighbors_CellularAutomaton_internal_9 +move $t8, $t0 +move $t9, $t1 +loop_7: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_7 +beqz $a1, mismatch_7 +seq $v0, $a0, $a1 +beqz $v0, mismatch_7 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_7 +mismatch_7: +li $v0, 0 +j end_7 +check_7: +bnez $a1, mismatch_7 +li $v0, 1 +end_7: +move $t2, $v0 +# If local_neighbors_CellularAutomaton_internal_7 goto true__616 +sw $t0, -40($fp) +sw $t1, -44($fp) +sw $t2, -36($fp) +bnez $t2, true__616 +lw $t0, -48($fp) +# Moving 0 to local_neighbors_CellularAutomaton_internal_10 +li $t0, 0 +sw $t0, -48($fp) +sw $t0, -48($fp) +j end__616 +true__616: +lw $t0, -48($fp) +# Moving 1 to local_neighbors_CellularAutomaton_internal_10 +li $t0, 1 +sw $t0, -48($fp) +sw $t0, -48($fp) +end__616: +lw $t0, -4($fp) +lw $t1, -56($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_south_CellularAutomaton +lw $t8, 64($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -0($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -56($fp) +sw $t2, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -56($fp) +# saves the return value +move $t0, $v0 +lw $t1, -60($fp) +# Saves in local_neighbors_CellularAutomaton_internal_13 data_20 +la $t1, data_20 +lw $t2, -52($fp) +# local_neighbors_CellularAutomaton_internal_11 <- local_neighbors_CellularAutomaton_internal_12 = local_neighbors_CellularAutomaton_internal_13 +move $t8, $t0 +move $t9, $t1 +loop_8: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_8 +beqz $a1, mismatch_8 +seq $v0, $a0, $a1 +beqz $v0, mismatch_8 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_8 +mismatch_8: +li $v0, 0 +j end_8 +check_8: +bnez $a1, mismatch_8 +li $v0, 1 +end_8: +move $t2, $v0 +# If local_neighbors_CellularAutomaton_internal_11 goto true__631 +sw $t0, -56($fp) +sw $t1, -60($fp) +sw $t2, -52($fp) +bnez $t2, true__631 +lw $t0, -64($fp) +# Moving 0 to local_neighbors_CellularAutomaton_internal_14 +li $t0, 0 +sw $t0, -64($fp) +sw $t0, -64($fp) +j end__631 +true__631: +lw $t0, -64($fp) +# Moving 1 to local_neighbors_CellularAutomaton_internal_14 +li $t0, 1 +sw $t0, -64($fp) +sw $t0, -64($fp) +end__631: +lw $t0, -48($fp) +lw $t1, -64($fp) +lw $t2, -32($fp) +# local_neighbors_CellularAutomaton_internal_6 <- local_neighbors_CellularAutomaton_internal_10 + local_neighbors_CellularAutomaton_internal_14 +add $t2, $t0, $t1 +lw $t3, -4($fp) +lw $t4, -72($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_east_CellularAutomaton +lw $t8, 68($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t5, -0($fp) +sw $t5, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -48($fp) +sw $t1, -64($fp) +sw $t2, -32($fp) +sw $t3, -4($fp) +sw $t4, -72($fp) +sw $t5, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -72($fp) +# saves the return value +move $t0, $v0 +lw $t1, -76($fp) +# Saves in local_neighbors_CellularAutomaton_internal_17 data_21 +la $t1, data_21 +lw $t2, -68($fp) +# local_neighbors_CellularAutomaton_internal_15 <- local_neighbors_CellularAutomaton_internal_16 = local_neighbors_CellularAutomaton_internal_17 +move $t8, $t0 +move $t9, $t1 +loop_9: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_9 +beqz $a1, mismatch_9 +seq $v0, $a0, $a1 +beqz $v0, mismatch_9 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_9 +mismatch_9: +li $v0, 0 +j end_9 +check_9: +bnez $a1, mismatch_9 +li $v0, 1 +end_9: +move $t2, $v0 +# If local_neighbors_CellularAutomaton_internal_15 goto true__647 +sw $t0, -72($fp) +sw $t1, -76($fp) +sw $t2, -68($fp) +bnez $t2, true__647 +lw $t0, -80($fp) +# Moving 0 to local_neighbors_CellularAutomaton_internal_18 +li $t0, 0 +sw $t0, -80($fp) +sw $t0, -80($fp) +j end__647 +true__647: +lw $t0, -80($fp) +# Moving 1 to local_neighbors_CellularAutomaton_internal_18 +li $t0, 1 +sw $t0, -80($fp) +sw $t0, -80($fp) +end__647: +lw $t0, -32($fp) +lw $t1, -80($fp) +lw $t2, -28($fp) +# local_neighbors_CellularAutomaton_internal_5 <- local_neighbors_CellularAutomaton_internal_6 + local_neighbors_CellularAutomaton_internal_18 +add $t2, $t0, $t1 +lw $t3, -4($fp) +lw $t4, -88($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_west_CellularAutomaton +lw $t8, 72($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t5, -0($fp) +sw $t5, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -32($fp) +sw $t1, -80($fp) +sw $t2, -28($fp) +sw $t3, -4($fp) +sw $t4, -88($fp) +sw $t5, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -88($fp) +# saves the return value +move $t0, $v0 +lw $t1, -92($fp) +# Saves in local_neighbors_CellularAutomaton_internal_21 data_22 +la $t1, data_22 +lw $t2, -84($fp) +# local_neighbors_CellularAutomaton_internal_19 <- local_neighbors_CellularAutomaton_internal_20 = local_neighbors_CellularAutomaton_internal_21 +move $t8, $t0 +move $t9, $t1 +loop_10: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_10 +beqz $a1, mismatch_10 +seq $v0, $a0, $a1 +beqz $v0, mismatch_10 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_10 +mismatch_10: +li $v0, 0 +j end_10 +check_10: +bnez $a1, mismatch_10 +li $v0, 1 +end_10: +move $t2, $v0 +# If local_neighbors_CellularAutomaton_internal_19 goto true__663 +sw $t0, -88($fp) +sw $t1, -92($fp) +sw $t2, -84($fp) +bnez $t2, true__663 +lw $t0, -96($fp) +# Moving 0 to local_neighbors_CellularAutomaton_internal_22 +li $t0, 0 +sw $t0, -96($fp) +sw $t0, -96($fp) +j end__663 +true__663: +lw $t0, -96($fp) +# Moving 1 to local_neighbors_CellularAutomaton_internal_22 +li $t0, 1 +sw $t0, -96($fp) +sw $t0, -96($fp) +end__663: +lw $t0, -28($fp) +lw $t1, -96($fp) +lw $t2, -24($fp) +# local_neighbors_CellularAutomaton_internal_4 <- local_neighbors_CellularAutomaton_internal_5 + local_neighbors_CellularAutomaton_internal_22 +add $t2, $t0, $t1 +lw $t3, -4($fp) +lw $t4, -104($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_northeast_CellularAutomaton +lw $t8, 80($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t5, -0($fp) +sw $t5, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -28($fp) +sw $t1, -96($fp) +sw $t2, -24($fp) +sw $t3, -4($fp) +sw $t4, -104($fp) +sw $t5, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -104($fp) +# saves the return value +move $t0, $v0 +lw $t1, -108($fp) +# Saves in local_neighbors_CellularAutomaton_internal_25 data_23 +la $t1, data_23 +lw $t2, -100($fp) +# local_neighbors_CellularAutomaton_internal_23 <- local_neighbors_CellularAutomaton_internal_24 = local_neighbors_CellularAutomaton_internal_25 +move $t8, $t0 +move $t9, $t1 +loop_11: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_11 +beqz $a1, mismatch_11 +seq $v0, $a0, $a1 +beqz $v0, mismatch_11 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_11 +mismatch_11: +li $v0, 0 +j end_11 +check_11: +bnez $a1, mismatch_11 +li $v0, 1 +end_11: +move $t2, $v0 +# If local_neighbors_CellularAutomaton_internal_23 goto true__679 +sw $t0, -104($fp) +sw $t1, -108($fp) +sw $t2, -100($fp) +bnez $t2, true__679 +lw $t0, -112($fp) +# Moving 0 to local_neighbors_CellularAutomaton_internal_26 +li $t0, 0 +sw $t0, -112($fp) +sw $t0, -112($fp) +j end__679 +true__679: +lw $t0, -112($fp) +# Moving 1 to local_neighbors_CellularAutomaton_internal_26 +li $t0, 1 +sw $t0, -112($fp) +sw $t0, -112($fp) +end__679: +lw $t0, -24($fp) +lw $t1, -112($fp) +lw $t2, -20($fp) +# local_neighbors_CellularAutomaton_internal_3 <- local_neighbors_CellularAutomaton_internal_4 + local_neighbors_CellularAutomaton_internal_26 +add $t2, $t0, $t1 +lw $t3, -4($fp) +lw $t4, -120($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_northwest_CellularAutomaton +lw $t8, 76($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t5, -0($fp) +sw $t5, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -24($fp) +sw $t1, -112($fp) +sw $t2, -20($fp) +sw $t3, -4($fp) +sw $t4, -120($fp) +sw $t5, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -120($fp) +# saves the return value +move $t0, $v0 +lw $t1, -124($fp) +# Saves in local_neighbors_CellularAutomaton_internal_29 data_24 +la $t1, data_24 +lw $t2, -116($fp) +# local_neighbors_CellularAutomaton_internal_27 <- local_neighbors_CellularAutomaton_internal_28 = local_neighbors_CellularAutomaton_internal_29 +move $t8, $t0 +move $t9, $t1 +loop_12: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_12 +beqz $a1, mismatch_12 +seq $v0, $a0, $a1 +beqz $v0, mismatch_12 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_12 +mismatch_12: +li $v0, 0 +j end_12 +check_12: +bnez $a1, mismatch_12 +li $v0, 1 +end_12: +move $t2, $v0 +# If local_neighbors_CellularAutomaton_internal_27 goto true__695 +sw $t0, -120($fp) +sw $t1, -124($fp) +sw $t2, -116($fp) +bnez $t2, true__695 +lw $t0, -128($fp) +# Moving 0 to local_neighbors_CellularAutomaton_internal_30 +li $t0, 0 +sw $t0, -128($fp) +sw $t0, -128($fp) +j end__695 +true__695: +lw $t0, -128($fp) +# Moving 1 to local_neighbors_CellularAutomaton_internal_30 +li $t0, 1 +sw $t0, -128($fp) +sw $t0, -128($fp) +end__695: +lw $t0, -20($fp) +lw $t1, -128($fp) +lw $t2, -16($fp) +# local_neighbors_CellularAutomaton_internal_2 <- local_neighbors_CellularAutomaton_internal_3 + local_neighbors_CellularAutomaton_internal_30 +add $t2, $t0, $t1 +lw $t3, -4($fp) +lw $t4, -136($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_southeast_CellularAutomaton +lw $t8, 84($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t5, -0($fp) +sw $t5, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -128($fp) +sw $t2, -16($fp) +sw $t3, -4($fp) +sw $t4, -136($fp) +sw $t5, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -136($fp) +# saves the return value +move $t0, $v0 +lw $t1, -140($fp) +# Saves in local_neighbors_CellularAutomaton_internal_33 data_25 +la $t1, data_25 +lw $t2, -132($fp) +# local_neighbors_CellularAutomaton_internal_31 <- local_neighbors_CellularAutomaton_internal_32 = local_neighbors_CellularAutomaton_internal_33 +move $t8, $t0 +move $t9, $t1 +loop_13: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_13 +beqz $a1, mismatch_13 +seq $v0, $a0, $a1 +beqz $v0, mismatch_13 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_13 +mismatch_13: +li $v0, 0 +j end_13 +check_13: +bnez $a1, mismatch_13 +li $v0, 1 +end_13: +move $t2, $v0 +# If local_neighbors_CellularAutomaton_internal_31 goto true__711 +sw $t0, -136($fp) +sw $t1, -140($fp) +sw $t2, -132($fp) +bnez $t2, true__711 +lw $t0, -144($fp) +# Moving 0 to local_neighbors_CellularAutomaton_internal_34 +li $t0, 0 +sw $t0, -144($fp) +sw $t0, -144($fp) +j end__711 +true__711: +lw $t0, -144($fp) +# Moving 1 to local_neighbors_CellularAutomaton_internal_34 +li $t0, 1 +sw $t0, -144($fp) +sw $t0, -144($fp) +end__711: +lw $t0, -16($fp) +lw $t1, -144($fp) +lw $t2, -12($fp) +# local_neighbors_CellularAutomaton_internal_1 <- local_neighbors_CellularAutomaton_internal_2 + local_neighbors_CellularAutomaton_internal_34 +add $t2, $t0, $t1 +lw $t3, -4($fp) +lw $t4, -152($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_southwest_CellularAutomaton +lw $t8, 88($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t5, -0($fp) +sw $t5, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -144($fp) +sw $t2, -12($fp) +sw $t3, -4($fp) +sw $t4, -152($fp) +sw $t5, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -152($fp) +# saves the return value +move $t0, $v0 +lw $t1, -156($fp) +# Saves in local_neighbors_CellularAutomaton_internal_37 data_26 +la $t1, data_26 +lw $t2, -148($fp) +# local_neighbors_CellularAutomaton_internal_35 <- local_neighbors_CellularAutomaton_internal_36 = local_neighbors_CellularAutomaton_internal_37 +move $t8, $t0 +move $t9, $t1 +loop_14: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_14 +beqz $a1, mismatch_14 +seq $v0, $a0, $a1 +beqz $v0, mismatch_14 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_14 +mismatch_14: +li $v0, 0 +j end_14 +check_14: +bnez $a1, mismatch_14 +li $v0, 1 +end_14: +move $t2, $v0 +# If local_neighbors_CellularAutomaton_internal_35 goto true__727 +sw $t0, -152($fp) +sw $t1, -156($fp) +sw $t2, -148($fp) +bnez $t2, true__727 +lw $t0, -160($fp) +# Moving 0 to local_neighbors_CellularAutomaton_internal_38 +li $t0, 0 +sw $t0, -160($fp) +sw $t0, -160($fp) +j end__727 +true__727: +lw $t0, -160($fp) +# Moving 1 to local_neighbors_CellularAutomaton_internal_38 +li $t0, 1 +sw $t0, -160($fp) +sw $t0, -160($fp) +end__727: +lw $t0, -12($fp) +lw $t1, -160($fp) +lw $t2, -8($fp) +# local_neighbors_CellularAutomaton_internal_0 <- local_neighbors_CellularAutomaton_internal_1 + local_neighbors_CellularAutomaton_internal_38 +add $t2, $t0, $t1 +lw $t3, -164($fp) +# Moving local_neighbors_CellularAutomaton_internal_0 to local_neighbors_CellularAutomaton_internal_39 +move $t3, $t2 +sw $t3, -164($fp) +move $v0, $t3 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $t1, -160($fp) +sw $t2, -8($fp) +sw $t3, -164($fp) +# Removing all locals from stack +addiu $sp, $sp, 168 +jr $ra + + +function_cell_at_next_evolution_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value position +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cell_at_next_evolution_CellularAutomaton_internal_13 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -12($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_neighbors_CellularAutomaton +lw $t8, 92($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -0($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -12($fp) +sw $t2, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# local_cell_at_next_evolution_CellularAutomaton_internal_0 <- local_cell_at_next_evolution_CellularAutomaton_internal_1 = 3 +li $t9, 3 +seq $t1, $t0, $t9 +# If local_cell_at_next_evolution_CellularAutomaton_internal_0 goto true__746 +sw $t0, -12($fp) +sw $t1, -8($fp) +bnez $t1, true__746 +lw $t0, -4($fp) +lw $t1, -24($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_neighbors_CellularAutomaton +lw $t8, 92($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -0($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -24($fp) +sw $t2, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -24($fp) +# saves the return value +move $t0, $v0 +lw $t1, -20($fp) +# local_cell_at_next_evolution_CellularAutomaton_internal_3 <- local_cell_at_next_evolution_CellularAutomaton_internal_4 = 2 +li $t9, 2 +seq $t1, $t0, $t9 +# If local_cell_at_next_evolution_CellularAutomaton_internal_3 goto true__753 +sw $t0, -24($fp) +sw $t1, -20($fp) +bnez $t1, true__753 +lw $t0, -32($fp) +# Saves in local_cell_at_next_evolution_CellularAutomaton_internal_6 data_27 +la $t0, data_27 +lw $t1, -28($fp) +# Moving local_cell_at_next_evolution_CellularAutomaton_internal_6 to local_cell_at_next_evolution_CellularAutomaton_internal_5 +move $t1, $t0 +sw $t1, -28($fp) +sw $t0, -32($fp) +sw $t1, -28($fp) +j end__753 +true__753: +lw $t0, -4($fp) +lw $t1, -40($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_cell_CellularAutomaton +lw $t8, 56($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -0($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -40($fp) +sw $t2, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +lw $t1, -44($fp) +# Saves in local_cell_at_next_evolution_CellularAutomaton_internal_9 data_28 +la $t1, data_28 +lw $t2, -36($fp) +# local_cell_at_next_evolution_CellularAutomaton_internal_7 <- local_cell_at_next_evolution_CellularAutomaton_internal_8 = local_cell_at_next_evolution_CellularAutomaton_internal_9 +move $t8, $t0 +move $t9, $t1 +loop_15: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_15 +beqz $a1, mismatch_15 +seq $v0, $a0, $a1 +beqz $v0, mismatch_15 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_15 +mismatch_15: +li $v0, 0 +j end_15 +check_15: +bnez $a1, mismatch_15 +li $v0, 1 +end_15: +move $t2, $v0 +# If local_cell_at_next_evolution_CellularAutomaton_internal_7 goto true__769 +sw $t0, -40($fp) +sw $t1, -44($fp) +sw $t2, -36($fp) +bnez $t2, true__769 +lw $t0, -52($fp) +# Saves in local_cell_at_next_evolution_CellularAutomaton_internal_11 data_29 +la $t0, data_29 +lw $t1, -48($fp) +# Moving local_cell_at_next_evolution_CellularAutomaton_internal_11 to local_cell_at_next_evolution_CellularAutomaton_internal_10 +move $t1, $t0 +sw $t1, -48($fp) +sw $t0, -52($fp) +sw $t1, -48($fp) +j end__769 +true__769: +lw $t0, -56($fp) +# Saves in local_cell_at_next_evolution_CellularAutomaton_internal_12 data_30 +la $t0, data_30 +lw $t1, -48($fp) +# Moving local_cell_at_next_evolution_CellularAutomaton_internal_12 to local_cell_at_next_evolution_CellularAutomaton_internal_10 +move $t1, $t0 +sw $t1, -48($fp) +sw $t0, -56($fp) +sw $t1, -48($fp) +end__769: +lw $t0, -48($fp) +lw $t1, -28($fp) +# Moving local_cell_at_next_evolution_CellularAutomaton_internal_10 to local_cell_at_next_evolution_CellularAutomaton_internal_5 +move $t1, $t0 +sw $t1, -28($fp) +sw $t0, -48($fp) +sw $t1, -28($fp) +end__753: +lw $t0, -28($fp) +lw $t1, -16($fp) +# Moving local_cell_at_next_evolution_CellularAutomaton_internal_5 to local_cell_at_next_evolution_CellularAutomaton_internal_2 +move $t1, $t0 +sw $t1, -16($fp) +sw $t0, -28($fp) +sw $t1, -16($fp) +j end__746 +true__746: +lw $t0, -60($fp) +# Saves in local_cell_at_next_evolution_CellularAutomaton_internal_13 data_31 +la $t0, data_31 +lw $t1, -16($fp) +# Moving local_cell_at_next_evolution_CellularAutomaton_internal_13 to local_cell_at_next_evolution_CellularAutomaton_internal_2 +move $t1, $t0 +sw $t1, -16($fp) +sw $t0, -60($fp) +sw $t1, -16($fp) +end__746: +lw $t0, -16($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +# Removing all locals from stack +addiu $sp, $sp, 64 +jr $ra + + +function_evolve_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_evolve_CellularAutomaton_position_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_num_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_temp_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_evolve_CellularAutomaton_internal_11 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Moving 0 to local_evolve_CellularAutomaton_position_0 +li $t0, 0 +sw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -12($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_num_cells_CellularAutomaton +lw $t8, 52($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# Moving local_evolve_CellularAutomaton_internal_2 to local_evolve_CellularAutomaton_num_1 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -20($fp) +# Saves in local_evolve_CellularAutomaton_internal_4 data_32 +la $t2, data_32 +lw $t3, -16($fp) +# Moving local_evolve_CellularAutomaton_internal_4 to local_evolve_CellularAutomaton_temp_3 +move $t3, $t2 +sw $t3, -16($fp) +lw $t4, -24($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t4, $v0 +sw $t0, -12($fp) +sw $t1, -8($fp) +sw $t2, -20($fp) +sw $t3, -16($fp) +sw $t4, -24($fp) +start__806: +lw $t0, -4($fp) +lw $t1, -8($fp) +lw $t2, -28($fp) +# local_evolve_CellularAutomaton_internal_6 <- local_evolve_CellularAutomaton_position_0 < local_evolve_CellularAutomaton_num_1 +slt $t2, $t0, $t1 +# If not local_evolve_CellularAutomaton_internal_6 goto end__806 +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -28($fp) +beqz $t2, end__806 +lw $t0, -0($fp) +lw $t1, -32($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_cell_at_next_evolution_CellularAutomaton +lw $t8, 96($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -4($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -32($fp) +sw $t2, -4($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -32($fp) +# saves the return value +move $t0, $v0 +lw $t1, -36($fp) +# Static Dispatch of the method concat +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t2, -16($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -32($fp) +sw $t1, -36($fp) +sw $t2, -16($fp) +# This function will consume the arguments +jal function_concat_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -36($fp) +# saves the return value +move $t0, $v0 +lw $t1, -16($fp) +# Moving local_evolve_CellularAutomaton_internal_8 to local_evolve_CellularAutomaton_temp_3 +move $t1, $t0 +sw $t1, -16($fp) +lw $t2, -4($fp) +lw $t3, -40($fp) +# local_evolve_CellularAutomaton_internal_9 <- local_evolve_CellularAutomaton_position_0 + 1 +addi $t3, $t2, 1 +# Moving local_evolve_CellularAutomaton_internal_9 to local_evolve_CellularAutomaton_position_0 +move $t2, $t3 +sw $t2, -4($fp) +lw $t4, -44($fp) +# Moving local_evolve_CellularAutomaton_internal_9 to local_evolve_CellularAutomaton_internal_10 +move $t4, $t3 +sw $t4, -44($fp) +lw $t5, -24($fp) +# Moving local_evolve_CellularAutomaton_internal_10 to local_evolve_CellularAutomaton_internal_5 +move $t5, $t4 +sw $t5, -24($fp) +sw $t0, -36($fp) +sw $t1, -16($fp) +sw $t2, -4($fp) +sw $t3, -40($fp) +sw $t4, -44($fp) +sw $t5, -24($fp) +j start__806 +end__806: +lw $t0, -16($fp) +lw $t1, -0($fp) +# self . population_map <- SET local_evolve_CellularAutomaton_temp_3 +sw $t0, 28($t1) +lw $t2, -48($fp) +# Moving self to local_evolve_CellularAutomaton_internal_11 +move $t2, $t1 +sw $t2, -48($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -0($fp) +sw $t2, -48($fp) +# Removing all locals from stack +addiu $sp, $sp, 52 +jr $ra + + +function_option_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_option_CellularAutomaton_num_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_15 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_16 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_17 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_18 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_19 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_20 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_21 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_22 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_23 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_24 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_25 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_26 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_27 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_28 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_29 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_30 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_31 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_32 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_33 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_34 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_35 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_36 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_37 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_38 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_39 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_40 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_41 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_42 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_43 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_44 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_45 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_46 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_47 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_48 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_49 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_50 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_51 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_52 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_53 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_54 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_55 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_56 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_57 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_58 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_59 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_60 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_61 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_62 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_63 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_64 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_65 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_66 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_67 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_68 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_69 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_70 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_71 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_72 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_73 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_74 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_75 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_76 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_77 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_78 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_79 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_80 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_81 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_82 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_83 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_84 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_85 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_86 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_87 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_88 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_89 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_90 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_91 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_92 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_93 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_94 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_95 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_96 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_97 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_98 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_99 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_100 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_101 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_102 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_103 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_104 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_105 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_106 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_107 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_108 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_109 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_110 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_111 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_112 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_113 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_114 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_option_CellularAutomaton_internal_115 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Moving 0 to local_option_CellularAutomaton_num_0 +li $t0, 0 +sw $t0, -4($fp) +lw $t1, -8($fp) +# Saves in local_option_CellularAutomaton_internal_1 data_33 +la $t1, data_33 +lw $t2, -0($fp) +lw $t3, -12($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +sw $t3, -12($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +lw $t1, -16($fp) +# Saves in local_option_CellularAutomaton_internal_3 data_34 +la $t1, data_34 +lw $t2, -0($fp) +lw $t3, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $t1, -16($fp) +sw $t2, -0($fp) +sw $t3, -20($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# Saves in local_option_CellularAutomaton_internal_5 data_35 +la $t1, data_35 +lw $t2, -0($fp) +lw $t3, -28($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -24($fp) +sw $t2, -0($fp) +sw $t3, -28($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -28($fp) +# saves the return value +move $t0, $v0 +lw $t1, -32($fp) +# Saves in local_option_CellularAutomaton_internal_7 data_36 +la $t1, data_36 +lw $t2, -0($fp) +lw $t3, -36($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -28($fp) +sw $t1, -32($fp) +sw $t2, -0($fp) +sw $t3, -36($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -36($fp) +# saves the return value +move $t0, $v0 +lw $t1, -40($fp) +# Saves in local_option_CellularAutomaton_internal_9 data_37 +la $t1, data_37 +lw $t2, -0($fp) +lw $t3, -44($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -36($fp) +sw $t1, -40($fp) +sw $t2, -0($fp) +sw $t3, -44($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -44($fp) +# saves the return value +move $t0, $v0 +lw $t1, -48($fp) +# Saves in local_option_CellularAutomaton_internal_11 data_38 +la $t1, data_38 +lw $t2, -0($fp) +lw $t3, -52($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -44($fp) +sw $t1, -48($fp) +sw $t2, -0($fp) +sw $t3, -52($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -52($fp) +# saves the return value +move $t0, $v0 +lw $t1, -56($fp) +# Saves in local_option_CellularAutomaton_internal_13 data_39 +la $t1, data_39 +lw $t2, -0($fp) +lw $t3, -60($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -52($fp) +sw $t1, -56($fp) +sw $t2, -0($fp) +sw $t3, -60($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -60($fp) +# saves the return value +move $t0, $v0 +lw $t1, -64($fp) +# Saves in local_option_CellularAutomaton_internal_15 data_40 +la $t1, data_40 +lw $t2, -0($fp) +lw $t3, -68($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -60($fp) +sw $t1, -64($fp) +sw $t2, -0($fp) +sw $t3, -68($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -68($fp) +# saves the return value +move $t0, $v0 +lw $t1, -72($fp) +# Saves in local_option_CellularAutomaton_internal_17 data_41 +la $t1, data_41 +lw $t2, -0($fp) +lw $t3, -76($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -68($fp) +sw $t1, -72($fp) +sw $t2, -0($fp) +sw $t3, -76($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -76($fp) +# saves the return value +move $t0, $v0 +lw $t1, -80($fp) +# Saves in local_option_CellularAutomaton_internal_19 data_42 +la $t1, data_42 +lw $t2, -0($fp) +lw $t3, -84($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -76($fp) +sw $t1, -80($fp) +sw $t2, -0($fp) +sw $t3, -84($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -84($fp) +# saves the return value +move $t0, $v0 +lw $t1, -88($fp) +# Saves in local_option_CellularAutomaton_internal_21 data_43 +la $t1, data_43 +lw $t2, -0($fp) +lw $t3, -92($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -84($fp) +sw $t1, -88($fp) +sw $t2, -0($fp) +sw $t3, -92($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -92($fp) +# saves the return value +move $t0, $v0 +lw $t1, -96($fp) +# Saves in local_option_CellularAutomaton_internal_23 data_44 +la $t1, data_44 +lw $t2, -0($fp) +lw $t3, -100($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -92($fp) +sw $t1, -96($fp) +sw $t2, -0($fp) +sw $t3, -100($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -100($fp) +# saves the return value +move $t0, $v0 +lw $t1, -104($fp) +# Saves in local_option_CellularAutomaton_internal_25 data_45 +la $t1, data_45 +lw $t2, -0($fp) +lw $t3, -108($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -100($fp) +sw $t1, -104($fp) +sw $t2, -0($fp) +sw $t3, -108($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -108($fp) +# saves the return value +move $t0, $v0 +lw $t1, -112($fp) +# Saves in local_option_CellularAutomaton_internal_27 data_46 +la $t1, data_46 +lw $t2, -0($fp) +lw $t3, -116($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -108($fp) +sw $t1, -112($fp) +sw $t2, -0($fp) +sw $t3, -116($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -116($fp) +# saves the return value +move $t0, $v0 +lw $t1, -120($fp) +# Saves in local_option_CellularAutomaton_internal_29 data_47 +la $t1, data_47 +lw $t2, -0($fp) +lw $t3, -124($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -116($fp) +sw $t1, -120($fp) +sw $t2, -0($fp) +sw $t3, -124($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -124($fp) +# saves the return value +move $t0, $v0 +lw $t1, -128($fp) +# Saves in local_option_CellularAutomaton_internal_31 data_48 +la $t1, data_48 +lw $t2, -0($fp) +lw $t3, -132($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -124($fp) +sw $t1, -128($fp) +sw $t2, -0($fp) +sw $t3, -132($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -132($fp) +# saves the return value +move $t0, $v0 +lw $t1, -136($fp) +# Saves in local_option_CellularAutomaton_internal_33 data_49 +la $t1, data_49 +lw $t2, -0($fp) +lw $t3, -140($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -132($fp) +sw $t1, -136($fp) +sw $t2, -0($fp) +sw $t3, -140($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -140($fp) +# saves the return value +move $t0, $v0 +lw $t1, -144($fp) +# Saves in local_option_CellularAutomaton_internal_35 data_50 +la $t1, data_50 +lw $t2, -0($fp) +lw $t3, -148($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -140($fp) +sw $t1, -144($fp) +sw $t2, -0($fp) +sw $t3, -148($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -148($fp) +# saves the return value +move $t0, $v0 +lw $t1, -152($fp) +# Saves in local_option_CellularAutomaton_internal_37 data_51 +la $t1, data_51 +lw $t2, -0($fp) +lw $t3, -156($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -148($fp) +sw $t1, -152($fp) +sw $t2, -0($fp) +sw $t3, -156($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -156($fp) +# saves the return value +move $t0, $v0 +lw $t1, -160($fp) +# Saves in local_option_CellularAutomaton_internal_39 data_52 +la $t1, data_52 +lw $t2, -0($fp) +lw $t3, -164($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -156($fp) +sw $t1, -160($fp) +sw $t2, -0($fp) +sw $t3, -164($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -164($fp) +# saves the return value +move $t0, $v0 +lw $t1, -168($fp) +# Saves in local_option_CellularAutomaton_internal_41 data_53 +la $t1, data_53 +lw $t2, -0($fp) +lw $t3, -172($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -164($fp) +sw $t1, -168($fp) +sw $t2, -0($fp) +sw $t3, -172($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -172($fp) +# saves the return value +move $t0, $v0 +lw $t1, -176($fp) +# Saves in local_option_CellularAutomaton_internal_43 data_54 +la $t1, data_54 +lw $t2, -0($fp) +lw $t3, -180($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -172($fp) +sw $t1, -176($fp) +sw $t2, -0($fp) +sw $t3, -180($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -180($fp) +# saves the return value +move $t0, $v0 +lw $t1, -184($fp) +# Saves in local_option_CellularAutomaton_internal_45 data_55 +la $t1, data_55 +lw $t2, -0($fp) +lw $t3, -188($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -180($fp) +sw $t1, -184($fp) +sw $t2, -0($fp) +sw $t3, -188($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -188($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -192($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_in_int_IO +lw $t8, 28($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -188($fp) +sw $t1, -0($fp) +sw $t2, -192($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -192($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +# Moving local_option_CellularAutomaton_internal_47 to local_option_CellularAutomaton_num_0 +move $t1, $t0 +sw $t1, -4($fp) +lw $t2, -196($fp) +# Saves in local_option_CellularAutomaton_internal_48 data_56 +la $t2, data_56 +lw $t3, -0($fp) +lw $t4, -200($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -192($fp) +sw $t1, -4($fp) +sw $t2, -196($fp) +sw $t3, -0($fp) +sw $t4, -200($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -200($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +lw $t2, -204($fp) +# local_option_CellularAutomaton_internal_50 <- local_option_CellularAutomaton_num_0 = 1 +li $t9, 1 +seq $t2, $t1, $t9 +# If local_option_CellularAutomaton_internal_50 goto true__985 +sw $t0, -200($fp) +sw $t1, -4($fp) +sw $t2, -204($fp) +bnez $t2, true__985 +lw $t0, -4($fp) +lw $t1, -212($fp) +# local_option_CellularAutomaton_internal_52 <- local_option_CellularAutomaton_num_0 = 2 +li $t9, 2 +seq $t1, $t0, $t9 +# If local_option_CellularAutomaton_internal_52 goto true__989 +sw $t0, -4($fp) +sw $t1, -212($fp) +bnez $t1, true__989 +lw $t0, -4($fp) +lw $t1, -220($fp) +# local_option_CellularAutomaton_internal_54 <- local_option_CellularAutomaton_num_0 = 3 +li $t9, 3 +seq $t1, $t0, $t9 +# If local_option_CellularAutomaton_internal_54 goto true__993 +sw $t0, -4($fp) +sw $t1, -220($fp) +bnez $t1, true__993 +lw $t0, -4($fp) +lw $t1, -228($fp) +# local_option_CellularAutomaton_internal_56 <- local_option_CellularAutomaton_num_0 = 4 +li $t9, 4 +seq $t1, $t0, $t9 +# If local_option_CellularAutomaton_internal_56 goto true__997 +sw $t0, -4($fp) +sw $t1, -228($fp) +bnez $t1, true__997 +lw $t0, -4($fp) +lw $t1, -236($fp) +# local_option_CellularAutomaton_internal_58 <- local_option_CellularAutomaton_num_0 = 5 +li $t9, 5 +seq $t1, $t0, $t9 +# If local_option_CellularAutomaton_internal_58 goto true__1001 +sw $t0, -4($fp) +sw $t1, -236($fp) +bnez $t1, true__1001 +lw $t0, -4($fp) +lw $t1, -244($fp) +# local_option_CellularAutomaton_internal_60 <- local_option_CellularAutomaton_num_0 = 6 +li $t9, 6 +seq $t1, $t0, $t9 +# If local_option_CellularAutomaton_internal_60 goto true__1005 +sw $t0, -4($fp) +sw $t1, -244($fp) +bnez $t1, true__1005 +lw $t0, -4($fp) +lw $t1, -252($fp) +# local_option_CellularAutomaton_internal_62 <- local_option_CellularAutomaton_num_0 = 7 +li $t9, 7 +seq $t1, $t0, $t9 +# If local_option_CellularAutomaton_internal_62 goto true__1009 +sw $t0, -4($fp) +sw $t1, -252($fp) +bnez $t1, true__1009 +lw $t0, -4($fp) +lw $t1, -260($fp) +# local_option_CellularAutomaton_internal_64 <- local_option_CellularAutomaton_num_0 = 8 +li $t9, 8 +seq $t1, $t0, $t9 +# If local_option_CellularAutomaton_internal_64 goto true__1013 +sw $t0, -4($fp) +sw $t1, -260($fp) +bnez $t1, true__1013 +lw $t0, -4($fp) +lw $t1, -268($fp) +# local_option_CellularAutomaton_internal_66 <- local_option_CellularAutomaton_num_0 = 9 +li $t9, 9 +seq $t1, $t0, $t9 +# If local_option_CellularAutomaton_internal_66 goto true__1017 +sw $t0, -4($fp) +sw $t1, -268($fp) +bnez $t1, true__1017 +lw $t0, -4($fp) +lw $t1, -276($fp) +# local_option_CellularAutomaton_internal_68 <- local_option_CellularAutomaton_num_0 = 10 +li $t9, 10 +seq $t1, $t0, $t9 +# If local_option_CellularAutomaton_internal_68 goto true__1021 +sw $t0, -4($fp) +sw $t1, -276($fp) +bnez $t1, true__1021 +lw $t0, -4($fp) +lw $t1, -284($fp) +# local_option_CellularAutomaton_internal_70 <- local_option_CellularAutomaton_num_0 = 11 +li $t9, 11 +seq $t1, $t0, $t9 +# If local_option_CellularAutomaton_internal_70 goto true__1025 +sw $t0, -4($fp) +sw $t1, -284($fp) +bnez $t1, true__1025 +lw $t0, -4($fp) +lw $t1, -292($fp) +# local_option_CellularAutomaton_internal_72 <- local_option_CellularAutomaton_num_0 = 12 +li $t9, 12 +seq $t1, $t0, $t9 +# If local_option_CellularAutomaton_internal_72 goto true__1029 +sw $t0, -4($fp) +sw $t1, -292($fp) +bnez $t1, true__1029 +lw $t0, -4($fp) +lw $t1, -300($fp) +# local_option_CellularAutomaton_internal_74 <- local_option_CellularAutomaton_num_0 = 13 +li $t9, 13 +seq $t1, $t0, $t9 +# If local_option_CellularAutomaton_internal_74 goto true__1033 +sw $t0, -4($fp) +sw $t1, -300($fp) +bnez $t1, true__1033 +lw $t0, -4($fp) +lw $t1, -308($fp) +# local_option_CellularAutomaton_internal_76 <- local_option_CellularAutomaton_num_0 = 14 +li $t9, 14 +seq $t1, $t0, $t9 +# If local_option_CellularAutomaton_internal_76 goto true__1037 +sw $t0, -4($fp) +sw $t1, -308($fp) +bnez $t1, true__1037 +lw $t0, -4($fp) +lw $t1, -316($fp) +# local_option_CellularAutomaton_internal_78 <- local_option_CellularAutomaton_num_0 = 15 +li $t9, 15 +seq $t1, $t0, $t9 +# If local_option_CellularAutomaton_internal_78 goto true__1041 +sw $t0, -4($fp) +sw $t1, -316($fp) +bnez $t1, true__1041 +lw $t0, -4($fp) +lw $t1, -324($fp) +# local_option_CellularAutomaton_internal_80 <- local_option_CellularAutomaton_num_0 = 16 +li $t9, 16 +seq $t1, $t0, $t9 +# If local_option_CellularAutomaton_internal_80 goto true__1045 +sw $t0, -4($fp) +sw $t1, -324($fp) +bnez $t1, true__1045 +lw $t0, -4($fp) +lw $t1, -332($fp) +# local_option_CellularAutomaton_internal_82 <- local_option_CellularAutomaton_num_0 = 17 +li $t9, 17 +seq $t1, $t0, $t9 +# If local_option_CellularAutomaton_internal_82 goto true__1049 +sw $t0, -4($fp) +sw $t1, -332($fp) +bnez $t1, true__1049 +lw $t0, -4($fp) +lw $t1, -340($fp) +# local_option_CellularAutomaton_internal_84 <- local_option_CellularAutomaton_num_0 = 18 +li $t9, 18 +seq $t1, $t0, $t9 +# If local_option_CellularAutomaton_internal_84 goto true__1053 +sw $t0, -4($fp) +sw $t1, -340($fp) +bnez $t1, true__1053 +lw $t0, -4($fp) +lw $t1, -348($fp) +# local_option_CellularAutomaton_internal_86 <- local_option_CellularAutomaton_num_0 = 19 +li $t9, 19 +seq $t1, $t0, $t9 +# If local_option_CellularAutomaton_internal_86 goto true__1057 +sw $t0, -4($fp) +sw $t1, -348($fp) +bnez $t1, true__1057 +lw $t0, -4($fp) +lw $t1, -356($fp) +# local_option_CellularAutomaton_internal_88 <- local_option_CellularAutomaton_num_0 = 20 +li $t9, 20 +seq $t1, $t0, $t9 +# If local_option_CellularAutomaton_internal_88 goto true__1061 +sw $t0, -4($fp) +sw $t1, -356($fp) +bnez $t1, true__1061 +lw $t0, -4($fp) +lw $t1, -364($fp) +# local_option_CellularAutomaton_internal_90 <- local_option_CellularAutomaton_num_0 = 21 +li $t9, 21 +seq $t1, $t0, $t9 +# If local_option_CellularAutomaton_internal_90 goto true__1065 +sw $t0, -4($fp) +sw $t1, -364($fp) +bnez $t1, true__1065 +lw $t0, -372($fp) +# Saves in local_option_CellularAutomaton_internal_92 data_57 +la $t0, data_57 +lw $t1, -368($fp) +# Moving local_option_CellularAutomaton_internal_92 to local_option_CellularAutomaton_internal_91 +move $t1, $t0 +sw $t1, -368($fp) +sw $t0, -372($fp) +sw $t1, -368($fp) +j end__1065 +true__1065: +lw $t0, -376($fp) +# Saves in local_option_CellularAutomaton_internal_93 data_58 +la $t0, data_58 +lw $t1, -368($fp) +# Moving local_option_CellularAutomaton_internal_93 to local_option_CellularAutomaton_internal_91 +move $t1, $t0 +sw $t1, -368($fp) +sw $t0, -376($fp) +sw $t1, -368($fp) +end__1065: +lw $t0, -368($fp) +lw $t1, -360($fp) +# Moving local_option_CellularAutomaton_internal_91 to local_option_CellularAutomaton_internal_89 +move $t1, $t0 +sw $t1, -360($fp) +sw $t0, -368($fp) +sw $t1, -360($fp) +j end__1061 +true__1061: +lw $t0, -380($fp) +# Saves in local_option_CellularAutomaton_internal_94 data_59 +la $t0, data_59 +lw $t1, -360($fp) +# Moving local_option_CellularAutomaton_internal_94 to local_option_CellularAutomaton_internal_89 +move $t1, $t0 +sw $t1, -360($fp) +sw $t0, -380($fp) +sw $t1, -360($fp) +end__1061: +lw $t0, -360($fp) +lw $t1, -352($fp) +# Moving local_option_CellularAutomaton_internal_89 to local_option_CellularAutomaton_internal_87 +move $t1, $t0 +sw $t1, -352($fp) +sw $t0, -360($fp) +sw $t1, -352($fp) +j end__1057 +true__1057: +lw $t0, -384($fp) +# Saves in local_option_CellularAutomaton_internal_95 data_60 +la $t0, data_60 +lw $t1, -352($fp) +# Moving local_option_CellularAutomaton_internal_95 to local_option_CellularAutomaton_internal_87 +move $t1, $t0 +sw $t1, -352($fp) +sw $t0, -384($fp) +sw $t1, -352($fp) +end__1057: +lw $t0, -352($fp) +lw $t1, -344($fp) +# Moving local_option_CellularAutomaton_internal_87 to local_option_CellularAutomaton_internal_85 +move $t1, $t0 +sw $t1, -344($fp) +sw $t0, -352($fp) +sw $t1, -344($fp) +j end__1053 +true__1053: +lw $t0, -388($fp) +# Saves in local_option_CellularAutomaton_internal_96 data_61 +la $t0, data_61 +lw $t1, -344($fp) +# Moving local_option_CellularAutomaton_internal_96 to local_option_CellularAutomaton_internal_85 +move $t1, $t0 +sw $t1, -344($fp) +sw $t0, -388($fp) +sw $t1, -344($fp) +end__1053: +lw $t0, -344($fp) +lw $t1, -336($fp) +# Moving local_option_CellularAutomaton_internal_85 to local_option_CellularAutomaton_internal_83 +move $t1, $t0 +sw $t1, -336($fp) +sw $t0, -344($fp) +sw $t1, -336($fp) +j end__1049 +true__1049: +lw $t0, -392($fp) +# Saves in local_option_CellularAutomaton_internal_97 data_62 +la $t0, data_62 +lw $t1, -336($fp) +# Moving local_option_CellularAutomaton_internal_97 to local_option_CellularAutomaton_internal_83 +move $t1, $t0 +sw $t1, -336($fp) +sw $t0, -392($fp) +sw $t1, -336($fp) +end__1049: +lw $t0, -336($fp) +lw $t1, -328($fp) +# Moving local_option_CellularAutomaton_internal_83 to local_option_CellularAutomaton_internal_81 +move $t1, $t0 +sw $t1, -328($fp) +sw $t0, -336($fp) +sw $t1, -328($fp) +j end__1045 +true__1045: +lw $t0, -396($fp) +# Saves in local_option_CellularAutomaton_internal_98 data_63 +la $t0, data_63 +lw $t1, -328($fp) +# Moving local_option_CellularAutomaton_internal_98 to local_option_CellularAutomaton_internal_81 +move $t1, $t0 +sw $t1, -328($fp) +sw $t0, -396($fp) +sw $t1, -328($fp) +end__1045: +lw $t0, -328($fp) +lw $t1, -320($fp) +# Moving local_option_CellularAutomaton_internal_81 to local_option_CellularAutomaton_internal_79 +move $t1, $t0 +sw $t1, -320($fp) +sw $t0, -328($fp) +sw $t1, -320($fp) +j end__1041 +true__1041: +lw $t0, -400($fp) +# Saves in local_option_CellularAutomaton_internal_99 data_64 +la $t0, data_64 +lw $t1, -320($fp) +# Moving local_option_CellularAutomaton_internal_99 to local_option_CellularAutomaton_internal_79 +move $t1, $t0 +sw $t1, -320($fp) +sw $t0, -400($fp) +sw $t1, -320($fp) +end__1041: +lw $t0, -320($fp) +lw $t1, -312($fp) +# Moving local_option_CellularAutomaton_internal_79 to local_option_CellularAutomaton_internal_77 +move $t1, $t0 +sw $t1, -312($fp) +sw $t0, -320($fp) +sw $t1, -312($fp) +j end__1037 +true__1037: +lw $t0, -404($fp) +# Saves in local_option_CellularAutomaton_internal_100 data_65 +la $t0, data_65 +lw $t1, -312($fp) +# Moving local_option_CellularAutomaton_internal_100 to local_option_CellularAutomaton_internal_77 +move $t1, $t0 +sw $t1, -312($fp) +sw $t0, -404($fp) +sw $t1, -312($fp) +end__1037: +lw $t0, -312($fp) +lw $t1, -304($fp) +# Moving local_option_CellularAutomaton_internal_77 to local_option_CellularAutomaton_internal_75 +move $t1, $t0 +sw $t1, -304($fp) +sw $t0, -312($fp) +sw $t1, -304($fp) +j end__1033 +true__1033: +lw $t0, -408($fp) +# Saves in local_option_CellularAutomaton_internal_101 data_66 +la $t0, data_66 +lw $t1, -304($fp) +# Moving local_option_CellularAutomaton_internal_101 to local_option_CellularAutomaton_internal_75 +move $t1, $t0 +sw $t1, -304($fp) +sw $t0, -408($fp) +sw $t1, -304($fp) +end__1033: +lw $t0, -304($fp) +lw $t1, -296($fp) +# Moving local_option_CellularAutomaton_internal_75 to local_option_CellularAutomaton_internal_73 +move $t1, $t0 +sw $t1, -296($fp) +sw $t0, -304($fp) +sw $t1, -296($fp) +j end__1029 +true__1029: +lw $t0, -412($fp) +# Saves in local_option_CellularAutomaton_internal_102 data_67 +la $t0, data_67 +lw $t1, -296($fp) +# Moving local_option_CellularAutomaton_internal_102 to local_option_CellularAutomaton_internal_73 +move $t1, $t0 +sw $t1, -296($fp) +sw $t0, -412($fp) +sw $t1, -296($fp) +end__1029: +lw $t0, -296($fp) +lw $t1, -288($fp) +# Moving local_option_CellularAutomaton_internal_73 to local_option_CellularAutomaton_internal_71 +move $t1, $t0 +sw $t1, -288($fp) +sw $t0, -296($fp) +sw $t1, -288($fp) +j end__1025 +true__1025: +lw $t0, -416($fp) +# Saves in local_option_CellularAutomaton_internal_103 data_68 +la $t0, data_68 +lw $t1, -288($fp) +# Moving local_option_CellularAutomaton_internal_103 to local_option_CellularAutomaton_internal_71 +move $t1, $t0 +sw $t1, -288($fp) +sw $t0, -416($fp) +sw $t1, -288($fp) +end__1025: +lw $t0, -288($fp) +lw $t1, -280($fp) +# Moving local_option_CellularAutomaton_internal_71 to local_option_CellularAutomaton_internal_69 +move $t1, $t0 +sw $t1, -280($fp) +sw $t0, -288($fp) +sw $t1, -280($fp) +j end__1021 +true__1021: +lw $t0, -420($fp) +# Saves in local_option_CellularAutomaton_internal_104 data_69 +la $t0, data_69 +lw $t1, -280($fp) +# Moving local_option_CellularAutomaton_internal_104 to local_option_CellularAutomaton_internal_69 +move $t1, $t0 +sw $t1, -280($fp) +sw $t0, -420($fp) +sw $t1, -280($fp) +end__1021: +lw $t0, -280($fp) +lw $t1, -272($fp) +# Moving local_option_CellularAutomaton_internal_69 to local_option_CellularAutomaton_internal_67 +move $t1, $t0 +sw $t1, -272($fp) +sw $t0, -280($fp) +sw $t1, -272($fp) +j end__1017 +true__1017: +lw $t0, -424($fp) +# Saves in local_option_CellularAutomaton_internal_105 data_70 +la $t0, data_70 +lw $t1, -272($fp) +# Moving local_option_CellularAutomaton_internal_105 to local_option_CellularAutomaton_internal_67 +move $t1, $t0 +sw $t1, -272($fp) +sw $t0, -424($fp) +sw $t1, -272($fp) +end__1017: +lw $t0, -272($fp) +lw $t1, -264($fp) +# Moving local_option_CellularAutomaton_internal_67 to local_option_CellularAutomaton_internal_65 +move $t1, $t0 +sw $t1, -264($fp) +sw $t0, -272($fp) +sw $t1, -264($fp) +j end__1013 +true__1013: +lw $t0, -428($fp) +# Saves in local_option_CellularAutomaton_internal_106 data_71 +la $t0, data_71 +lw $t1, -264($fp) +# Moving local_option_CellularAutomaton_internal_106 to local_option_CellularAutomaton_internal_65 +move $t1, $t0 +sw $t1, -264($fp) +sw $t0, -428($fp) +sw $t1, -264($fp) +end__1013: +lw $t0, -264($fp) +lw $t1, -256($fp) +# Moving local_option_CellularAutomaton_internal_65 to local_option_CellularAutomaton_internal_63 +move $t1, $t0 +sw $t1, -256($fp) +sw $t0, -264($fp) +sw $t1, -256($fp) +j end__1009 +true__1009: +lw $t0, -432($fp) +# Saves in local_option_CellularAutomaton_internal_107 data_72 +la $t0, data_72 +lw $t1, -256($fp) +# Moving local_option_CellularAutomaton_internal_107 to local_option_CellularAutomaton_internal_63 +move $t1, $t0 +sw $t1, -256($fp) +sw $t0, -432($fp) +sw $t1, -256($fp) +end__1009: +lw $t0, -256($fp) +lw $t1, -248($fp) +# Moving local_option_CellularAutomaton_internal_63 to local_option_CellularAutomaton_internal_61 +move $t1, $t0 +sw $t1, -248($fp) +sw $t0, -256($fp) +sw $t1, -248($fp) +j end__1005 +true__1005: +lw $t0, -436($fp) +# Saves in local_option_CellularAutomaton_internal_108 data_73 +la $t0, data_73 +lw $t1, -248($fp) +# Moving local_option_CellularAutomaton_internal_108 to local_option_CellularAutomaton_internal_61 +move $t1, $t0 +sw $t1, -248($fp) +sw $t0, -436($fp) +sw $t1, -248($fp) +end__1005: +lw $t0, -248($fp) +lw $t1, -240($fp) +# Moving local_option_CellularAutomaton_internal_61 to local_option_CellularAutomaton_internal_59 +move $t1, $t0 +sw $t1, -240($fp) +sw $t0, -248($fp) +sw $t1, -240($fp) +j end__1001 +true__1001: +lw $t0, -440($fp) +# Saves in local_option_CellularAutomaton_internal_109 data_74 +la $t0, data_74 +lw $t1, -240($fp) +# Moving local_option_CellularAutomaton_internal_109 to local_option_CellularAutomaton_internal_59 +move $t1, $t0 +sw $t1, -240($fp) +sw $t0, -440($fp) +sw $t1, -240($fp) +end__1001: +lw $t0, -240($fp) +lw $t1, -232($fp) +# Moving local_option_CellularAutomaton_internal_59 to local_option_CellularAutomaton_internal_57 +move $t1, $t0 +sw $t1, -232($fp) +sw $t0, -240($fp) +sw $t1, -232($fp) +j end__997 +true__997: +lw $t0, -444($fp) +# Saves in local_option_CellularAutomaton_internal_110 data_75 +la $t0, data_75 +lw $t1, -232($fp) +# Moving local_option_CellularAutomaton_internal_110 to local_option_CellularAutomaton_internal_57 +move $t1, $t0 +sw $t1, -232($fp) +sw $t0, -444($fp) +sw $t1, -232($fp) +end__997: +lw $t0, -232($fp) +lw $t1, -224($fp) +# Moving local_option_CellularAutomaton_internal_57 to local_option_CellularAutomaton_internal_55 +move $t1, $t0 +sw $t1, -224($fp) +sw $t0, -232($fp) +sw $t1, -224($fp) +j end__993 +true__993: +lw $t0, -448($fp) +# Saves in local_option_CellularAutomaton_internal_111 data_76 +la $t0, data_76 +lw $t1, -224($fp) +# Moving local_option_CellularAutomaton_internal_111 to local_option_CellularAutomaton_internal_55 +move $t1, $t0 +sw $t1, -224($fp) +sw $t0, -448($fp) +sw $t1, -224($fp) +end__993: +lw $t0, -224($fp) +lw $t1, -216($fp) +# Moving local_option_CellularAutomaton_internal_55 to local_option_CellularAutomaton_internal_53 +move $t1, $t0 +sw $t1, -216($fp) +sw $t0, -224($fp) +sw $t1, -216($fp) +j end__989 +true__989: +lw $t0, -452($fp) +# Saves in local_option_CellularAutomaton_internal_112 data_77 +la $t0, data_77 +lw $t1, -216($fp) +# Moving local_option_CellularAutomaton_internal_112 to local_option_CellularAutomaton_internal_53 +move $t1, $t0 +sw $t1, -216($fp) +sw $t0, -452($fp) +sw $t1, -216($fp) +end__989: +lw $t0, -216($fp) +lw $t1, -208($fp) +# Moving local_option_CellularAutomaton_internal_53 to local_option_CellularAutomaton_internal_51 +move $t1, $t0 +sw $t1, -208($fp) +sw $t0, -216($fp) +sw $t1, -208($fp) +j end__985 +true__985: +lw $t0, -456($fp) +# Saves in local_option_CellularAutomaton_internal_113 data_78 +la $t0, data_78 +lw $t1, -208($fp) +# Moving local_option_CellularAutomaton_internal_113 to local_option_CellularAutomaton_internal_51 +move $t1, $t0 +sw $t1, -208($fp) +sw $t0, -456($fp) +sw $t1, -208($fp) +end__985: +lw $t0, -208($fp) +lw $t1, -460($fp) +# Moving local_option_CellularAutomaton_internal_51 to local_option_CellularAutomaton_internal_114 +move $t1, $t0 +sw $t1, -460($fp) +lw $t2, -464($fp) +# Moving local_option_CellularAutomaton_internal_114 to local_option_CellularAutomaton_internal_115 +move $t2, $t1 +sw $t2, -464($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -208($fp) +sw $t1, -460($fp) +sw $t2, -464($fp) +# Removing all locals from stack +addiu $sp, $sp, 468 +jr $ra + + +function_prompt_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_prompt_CellularAutomaton_ans_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt_CellularAutomaton_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt_CellularAutomaton_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt_CellularAutomaton_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt_CellularAutomaton_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt_CellularAutomaton_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt_CellularAutomaton_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt_CellularAutomaton_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt_CellularAutomaton_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt_CellularAutomaton_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt_CellularAutomaton_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt_CellularAutomaton_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt_CellularAutomaton_internal_13 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +# Saves in local_prompt_CellularAutomaton_internal_1 data_79 +la $t0, data_79 +lw $t1, -4($fp) +# Moving local_prompt_CellularAutomaton_internal_1 to local_prompt_CellularAutomaton_ans_0 +move $t1, $t0 +sw $t1, -4($fp) +lw $t2, -12($fp) +# Saves in local_prompt_CellularAutomaton_internal_2 data_80 +la $t2, data_80 +lw $t3, -0($fp) +lw $t4, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -4($fp) +sw $t2, -12($fp) +sw $t3, -0($fp) +sw $t4, -16($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -20($fp) +# Saves in local_prompt_CellularAutomaton_internal_4 data_81 +la $t1, data_81 +lw $t2, -0($fp) +lw $t3, -24($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -20($fp) +sw $t2, -0($fp) +sw $t3, -24($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -24($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -28($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_in_string_IO +lw $t8, 24($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -24($fp) +sw $t1, -0($fp) +sw $t2, -28($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -28($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +# Moving local_prompt_CellularAutomaton_internal_6 to local_prompt_CellularAutomaton_ans_0 +move $t1, $t0 +sw $t1, -4($fp) +lw $t2, -32($fp) +# Saves in local_prompt_CellularAutomaton_internal_7 data_82 +la $t2, data_82 +lw $t3, -0($fp) +lw $t4, -36($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -28($fp) +sw $t1, -4($fp) +sw $t2, -32($fp) +sw $t3, -0($fp) +sw $t4, -36($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -36($fp) +# saves the return value +move $t0, $v0 +lw $t1, -44($fp) +# Saves in local_prompt_CellularAutomaton_internal_10 data_83 +la $t1, data_83 +lw $t2, -4($fp) +lw $t3, -40($fp) +# local_prompt_CellularAutomaton_internal_9 <- local_prompt_CellularAutomaton_ans_0 = local_prompt_CellularAutomaton_internal_10 +move $t8, $t2 +move $t9, $t1 +loop_16: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_16 +beqz $a1, mismatch_16 +seq $v0, $a0, $a1 +beqz $v0, mismatch_16 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_16 +mismatch_16: +li $v0, 0 +j end_16 +check_16: +bnez $a1, mismatch_16 +li $v0, 1 +end_16: +move $t3, $v0 +# If local_prompt_CellularAutomaton_internal_9 goto true__1276 +sw $t0, -36($fp) +sw $t1, -44($fp) +sw $t2, -4($fp) +sw $t3, -40($fp) +bnez $t3, true__1276 +lw $t0, -48($fp) +# Moving 1 to local_prompt_CellularAutomaton_internal_11 +li $t0, 1 +sw $t0, -48($fp) +sw $t0, -48($fp) +j end__1276 +true__1276: +lw $t0, -48($fp) +# Moving 0 to local_prompt_CellularAutomaton_internal_11 +li $t0, 0 +sw $t0, -48($fp) +sw $t0, -48($fp) +end__1276: +lw $t0, -48($fp) +lw $t1, -52($fp) +# Moving local_prompt_CellularAutomaton_internal_11 to local_prompt_CellularAutomaton_internal_12 +move $t1, $t0 +sw $t1, -52($fp) +lw $t2, -56($fp) +# Moving local_prompt_CellularAutomaton_internal_12 to local_prompt_CellularAutomaton_internal_13 +move $t2, $t1 +sw $t2, -56($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -48($fp) +sw $t1, -52($fp) +sw $t2, -56($fp) +# Removing all locals from stack +addiu $sp, $sp, 60 +jr $ra + + +function_prompt2_CellularAutomaton: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_prompt2_CellularAutomaton_ans_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt2_CellularAutomaton_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt2_CellularAutomaton_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt2_CellularAutomaton_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt2_CellularAutomaton_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt2_CellularAutomaton_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt2_CellularAutomaton_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt2_CellularAutomaton_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt2_CellularAutomaton_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt2_CellularAutomaton_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt2_CellularAutomaton_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt2_CellularAutomaton_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_prompt2_CellularAutomaton_internal_12 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +# Saves in local_prompt2_CellularAutomaton_internal_1 data_84 +la $t0, data_84 +lw $t1, -4($fp) +# Moving local_prompt2_CellularAutomaton_internal_1 to local_prompt2_CellularAutomaton_ans_0 +move $t1, $t0 +sw $t1, -4($fp) +lw $t2, -12($fp) +# Saves in local_prompt2_CellularAutomaton_internal_2 data_85 +la $t2, data_85 +lw $t3, -0($fp) +lw $t4, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -4($fp) +sw $t2, -12($fp) +sw $t3, -0($fp) +sw $t4, -16($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -20($fp) +# Saves in local_prompt2_CellularAutomaton_internal_4 data_86 +la $t1, data_86 +lw $t2, -0($fp) +lw $t3, -24($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -20($fp) +sw $t2, -0($fp) +sw $t3, -24($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -24($fp) +# saves the return value +move $t0, $v0 +lw $t1, -28($fp) +# Saves in local_prompt2_CellularAutomaton_internal_6 data_87 +la $t1, data_87 +lw $t2, -0($fp) +lw $t3, -32($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -24($fp) +sw $t1, -28($fp) +sw $t2, -0($fp) +sw $t3, -32($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -32($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -36($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_in_string_IO +lw $t8, 24($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -32($fp) +sw $t1, -0($fp) +sw $t2, -36($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -36($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +# Moving local_prompt2_CellularAutomaton_internal_8 to local_prompt2_CellularAutomaton_ans_0 +move $t1, $t0 +sw $t1, -4($fp) +lw $t2, -44($fp) +# Saves in local_prompt2_CellularAutomaton_internal_10 data_88 +la $t2, data_88 +lw $t3, -40($fp) +# local_prompt2_CellularAutomaton_internal_9 <- local_prompt2_CellularAutomaton_ans_0 = local_prompt2_CellularAutomaton_internal_10 +move $t8, $t1 +move $t9, $t2 +loop_17: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_17 +beqz $a1, mismatch_17 +seq $v0, $a0, $a1 +beqz $v0, mismatch_17 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_17 +mismatch_17: +li $v0, 0 +j end_17 +check_17: +bnez $a1, mismatch_17 +li $v0, 1 +end_17: +move $t3, $v0 +# If local_prompt2_CellularAutomaton_internal_9 goto true__1321 +sw $t0, -36($fp) +sw $t1, -4($fp) +sw $t2, -44($fp) +sw $t3, -40($fp) +bnez $t3, true__1321 +lw $t0, -48($fp) +# Moving 0 to local_prompt2_CellularAutomaton_internal_11 +li $t0, 0 +sw $t0, -48($fp) +sw $t0, -48($fp) +j end__1321 +true__1321: +lw $t0, -48($fp) +# Moving 1 to local_prompt2_CellularAutomaton_internal_11 +li $t0, 1 +sw $t0, -48($fp) +sw $t0, -48($fp) +end__1321: +lw $t0, -48($fp) +lw $t1, -52($fp) +# Moving local_prompt2_CellularAutomaton_internal_11 to local_prompt2_CellularAutomaton_internal_12 +move $t1, $t0 +sw $t1, -52($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -48($fp) +sw $t1, -52($fp) +# Removing all locals from stack +addiu $sp, $sp, 56 +jr $ra + + +function_Main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_Main_Main_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_cells_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# self . rows <- SET 0 +li $t9, 0 +sw $t9, 16($t0) +# self . columns <- SET 0 +li $t9, 0 +sw $t9, 20($t0) +# self . board_size <- SET 0 +li $t9, 0 +sw $t9, 24($t0) +lw $t1, -4($fp) +# Saves in local_Main_Main_internal_0 data_89 +la $t1, data_89 +# self . population_map <- SET local_Main_Main_internal_0 +sw $t1, 28($t0) +lw $t2, -8($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t2, $v0 +# self . cells <- SET local_Main_Main_cells_1 +sw $t2, 32($t0) +lw $t3, -12($fp) +# Moving self to local_Main_Main_internal_2 +move $t3, $t0 +sw $t3, -12($fp) +move $v0, $t3 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +sw $t2, -8($fp) +sw $t3, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_main_Main_continue_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_choice_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_cells_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_15 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_16 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_cells_17 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_18 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_cells_19 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_20 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_21 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_22 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_23 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_24 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Moving 0 to local_main_Main_continue_0 +li $t0, 0 +sw $t0, -4($fp) +lw $t1, -12($fp) +# Saves in local_main_Main_internal_2 data_90 +la $t1, data_90 +lw $t2, -8($fp) +# Moving local_main_Main_internal_2 to local_main_Main_choice_1 +move $t2, $t1 +sw $t2, -8($fp) +lw $t3, -16($fp) +# Saves in local_main_Main_internal_3 data_91 +la $t3, data_91 +lw $t4, -0($fp) +lw $t5, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t4) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t4, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -12($fp) +sw $t2, -8($fp) +sw $t3, -16($fp) +sw $t4, -0($fp) +sw $t5, -20($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# Saves in local_main_Main_internal_5 data_92 +la $t1, data_92 +lw $t2, -0($fp) +lw $t3, -28($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -24($fp) +sw $t2, -0($fp) +sw $t3, -28($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -28($fp) +# saves the return value +move $t0, $v0 +lw $t1, -32($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t1, $v0 +sw $t0, -28($fp) +sw $t1, -32($fp) +start__1367: +lw $t0, -0($fp) +lw $t1, -36($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_prompt2_CellularAutomaton +lw $t8, 112($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -36($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -36($fp) +# saves the return value +move $t0, $v0 +# If not local_main_Main_internal_8 goto end__1367 +sw $t0, -36($fp) +beqz $t0, end__1367 +lw $t0, -4($fp) +# Moving 1 to local_main_Main_continue_0 +li $t0, 1 +sw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -40($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_option_CellularAutomaton +lw $t8, 104($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -40($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# Moving local_main_Main_internal_9 to local_main_Main_choice_1 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -44($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 28 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_CellularAutomaton +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 28 +sw $t9, 4($v0) +move $t2, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 120 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_size_of_board_Board in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_board_init_Board in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Board_Board in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_init_CellularAutomaton in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_print_CellularAutomaton in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_num_cells_CellularAutomaton in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_cell_CellularAutomaton in t9 +lw $t9, 108($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +# Save the direction of the method function_north_CellularAutomaton in t9 +lw $t9, 112($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 60($v0) +# Save the direction of the method function_south_CellularAutomaton in t9 +lw $t9, 116($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 64($v0) +# Save the direction of the method function_east_CellularAutomaton in t9 +lw $t9, 120($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 68($v0) +# Save the direction of the method function_west_CellularAutomaton in t9 +lw $t9, 124($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 72($v0) +# Save the direction of the method function_northwest_CellularAutomaton in t9 +lw $t9, 128($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 76($v0) +# Save the direction of the method function_northeast_CellularAutomaton in t9 +lw $t9, 132($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 80($v0) +# Save the direction of the method function_southeast_CellularAutomaton in t9 +lw $t9, 136($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 84($v0) +# Save the direction of the method function_southwest_CellularAutomaton in t9 +lw $t9, 140($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 88($v0) +# Save the direction of the method function_neighbors_CellularAutomaton in t9 +lw $t9, 144($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 92($v0) +# Save the direction of the method function_cell_at_next_evolution_CellularAutomaton in t9 +lw $t9, 148($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 96($v0) +# Save the direction of the method function_evolve_CellularAutomaton in t9 +lw $t9, 152($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 100($v0) +# Save the direction of the method function_option_CellularAutomaton in t9 +lw $t9, 156($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 104($v0) +# Save the direction of the method function_prompt_CellularAutomaton in t9 +lw $t9, 160($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 108($v0) +# Save the direction of the method function_prompt2_CellularAutomaton in t9 +lw $t9, 164($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 112($v0) +# Save the direction of the method function_CellularAutomaton_CellularAutomaton in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 116($v0) +sw $v0, 8($t2) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t2) +# Static Dispatch of the method CellularAutomaton +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -40($fp) +sw $t1, -8($fp) +sw $t2, -44($fp) +# This function will consume the arguments +jal function_CellularAutomaton_CellularAutomaton +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -44($fp) +# saves the return value +move $t0, $v0 +lw $t1, -48($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_init_CellularAutomaton +lw $t8, 44($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -8($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -44($fp) +sw $t1, -48($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -48($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . cells <- SET local_main_Main_internal_11 +sw $t0, 32($t1) +lw $t2, -52($fp) +# local_main_Main_cells_12 <- GET self . cells +lw $t2, 32($t1) +lw $t3, -56($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_print_CellularAutomaton +lw $t8, 48($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -48($fp) +sw $t1, -0($fp) +sw $t2, -52($fp) +sw $t3, -56($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -56($fp) +# saves the return value +move $t0, $v0 +lw $t1, -60($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t1, $v0 +sw $t0, -56($fp) +sw $t1, -60($fp) +start__1390: +lw $t0, -4($fp) +# If not local_main_Main_continue_0 goto end__1390 +sw $t0, -4($fp) +beqz $t0, end__1390 +lw $t0, -0($fp) +lw $t1, -64($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_prompt_CellularAutomaton +lw $t8, 108($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -64($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -64($fp) +# saves the return value +move $t0, $v0 +# If local_main_Main_internal_15 goto true__1396 +sw $t0, -64($fp) +bnez $t0, true__1396 +lw $t0, -4($fp) +# Moving 0 to local_main_Main_continue_0 +li $t0, 0 +sw $t0, -4($fp) +lw $t1, -68($fp) +# Moving 0 to local_main_Main_internal_16 +li $t1, 0 +sw $t1, -68($fp) +sw $t0, -4($fp) +sw $t1, -68($fp) +j end__1396 +true__1396: +lw $t0, -0($fp) +lw $t1, -72($fp) +# local_main_Main_cells_17 <- GET self . cells +lw $t1, 32($t0) +lw $t2, -76($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_evolve_CellularAutomaton +lw $t8, 100($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -72($fp) +sw $t2, -76($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -76($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -80($fp) +# local_main_Main_cells_19 <- GET self . cells +lw $t2, 32($t1) +lw $t3, -84($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_print_CellularAutomaton +lw $t8, 48($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -76($fp) +sw $t1, -0($fp) +sw $t2, -80($fp) +sw $t3, -84($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -84($fp) +# saves the return value +move $t0, $v0 +lw $t1, -88($fp) +# Moving local_main_Main_internal_20 to local_main_Main_internal_21 +move $t1, $t0 +sw $t1, -88($fp) +lw $t2, -68($fp) +# Moving local_main_Main_internal_21 to local_main_Main_internal_16 +move $t2, $t1 +sw $t2, -68($fp) +sw $t0, -84($fp) +sw $t1, -88($fp) +sw $t2, -68($fp) +end__1396: +lw $t0, -68($fp) +lw $t1, -60($fp) +# Moving local_main_Main_internal_16 to local_main_Main_internal_14 +move $t1, $t0 +sw $t1, -60($fp) +sw $t0, -68($fp) +sw $t1, -60($fp) +j start__1390 +end__1390: +lw $t0, -60($fp) +lw $t1, -92($fp) +# Moving local_main_Main_internal_14 to local_main_Main_internal_22 +move $t1, $t0 +sw $t1, -92($fp) +lw $t2, -32($fp) +# Moving local_main_Main_internal_22 to local_main_Main_internal_7 +move $t2, $t1 +sw $t2, -32($fp) +sw $t0, -60($fp) +sw $t1, -92($fp) +sw $t2, -32($fp) +j start__1367 +end__1367: +lw $t0, -0($fp) +lw $t1, -96($fp) +# Moving self to local_main_Main_internal_23 +move $t1, $t0 +sw $t1, -96($fp) +lw $t2, -100($fp) +# Moving local_main_Main_internal_23 to local_main_Main_internal_24 +move $t2, $t1 +sw $t2, -100($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -96($fp) +sw $t2, -100($fp) +# Removing all locals from stack +addiu $sp, $sp, 104 +jr $ra + +# Raise exception method +.raise: +li $v0, 4 +syscall +li $v0, 17 +li $a0, 1 +syscall + +.data +abort_msg: .asciiz "Abort called from class " +new_line: .asciiz " +" +string_abort: .asciiz "Abort called from class String +" +int_abort: .asciiz "Abort called from class Int +" +bool_abort: .asciiz "Abort called from class Bool +" +type_Object: .asciiz "Object" +type_IO: .asciiz "IO" +type_String: .asciiz "String" +type_Int: .asciiz "Int" +type_Bool: .asciiz "Bool" +type_Board: .asciiz "Board" +type_CellularAutomaton: .asciiz "CellularAutomaton" +type_Main: .asciiz "Main" +type_Void: .asciiz "Void" +types: .word 0, 0, 0, 0, 0, 0, 0, 0 +data_0: .asciiz "Void" +data_1: .asciiz "" +data_2: .asciiz " +" +data_3: .asciiz " +" +data_4: .asciiz " +" +data_5: .asciiz " " +data_6: .asciiz " " +data_7: .asciiz " " +data_8: .asciiz " " +data_9: .asciiz " " +data_10: .asciiz " " +data_11: .asciiz " " +data_12: .asciiz " " +data_13: .asciiz " " +data_14: .asciiz " " +data_15: .asciiz " " +data_16: .asciiz " " +data_17: .asciiz " " +data_18: .asciiz " " +data_19: .asciiz "X" +data_20: .asciiz "X" +data_21: .asciiz "X" +data_22: .asciiz "X" +data_23: .asciiz "X" +data_24: .asciiz "X" +data_25: .asciiz "X" +data_26: .asciiz "X" +data_27: .asciiz "-" +data_28: .asciiz "X" +data_29: .asciiz "-" +data_30: .asciiz "X" +data_31: .asciiz "X" +data_32: .asciiz "" +data_33: .asciiz " +Please chose a number: +" +data_34: .asciiz " 1: A cross +" +data_35: .asciiz " 2: A slash from the upper left to lower right +" +data_36: .asciiz " 3: A slash from the upper right to lower left +" +data_37: .asciiz " 4: An X +" +data_38: .asciiz " 5: A greater than sign +" +data_39: .asciiz " 6: A less than sign +" +data_40: .asciiz " 7: Two greater than signs +" +data_41: .asciiz " 8: Two less than signs +" +data_42: .asciiz " 9: A 'V' +" +data_43: .asciiz " 10: An inverse 'V' +" +data_44: .asciiz " 11: Numbers 9 and 10 combined +" +data_45: .asciiz " 12: A full grid +" +data_46: .asciiz " 13: A 'T' +" +data_47: .asciiz " 14: A plus '+' +" +data_48: .asciiz " 15: A 'W' +" +data_49: .asciiz " 16: An 'M' +" +data_50: .asciiz " 17: An 'E' +" +data_51: .asciiz " 18: A '3' +" +data_52: .asciiz " 19: An 'O' +" +data_53: .asciiz " 20: An '8' +" +data_54: .asciiz " 21: An 'S' +" +data_55: .asciiz "Your choice => " +data_56: .asciiz " +" +data_57: .asciiz " " +data_58: .asciiz " XXXX X XX X XXXX " +data_59: .asciiz " XX X XX X XX X XX X XX " +data_60: .asciiz " XX X XX X XX " +data_61: .asciiz "XXX X X X X XXXX " +data_62: .asciiz "XXXXX X XXXXX X XXXX" +data_63: .asciiz " X X X X X X X" +data_64: .asciiz "X X X X X X X " +data_65: .asciiz " X X XXXXX X X " +data_66: .asciiz "XXXXX X X X X " +data_67: .asciiz "XXXXXXXXXXXXXXXXXXXXXXXXX" +data_68: .asciiz "X X X X X X X X" +data_69: .asciiz " X X X X X" +data_70: .asciiz "X X X X X " +data_71: .asciiz " X XX X X X " +data_72: .asciiz "X X X XX X " +data_73: .asciiz " X X X X X" +data_74: .asciiz "X X X X X " +data_75: .asciiz "X X X X X X X X X" +data_76: .asciiz "X X X X X" +data_77: .asciiz " X X X X X " +data_78: .asciiz " XX XXXX XXXX XX " +data_79: .asciiz "" +data_80: .asciiz "Would you like to continue with the next generation? +" +data_81: .asciiz "Please use lowercase y or n for your answer [y]: " +data_82: .asciiz " +" +data_83: .asciiz "n" +data_84: .asciiz "" +data_85: .asciiz " + +" +data_86: .asciiz "Would you like to choose a background pattern? +" +data_87: .asciiz "Please use lowercase y or n for your answer [n]: " +data_88: .asciiz "y" +data_89: .asciiz "" +data_90: .asciiz "" +data_91: .asciiz "Welcome to the Game of Life. +" +data_92: .asciiz "There are many initial states to choose from. +" +methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +zero_error: .asciiz "Division by zero error +" +case_void_error: .asciiz "Case on void error +" +dispatch_error: .asciiz "Dispatch on void error +" +case_error: .asciiz "Case statement without a matching branch error +" +index_error: .asciiz "Substring out of range error +" +heap_error: .asciiz "Heap overflow error +" \ No newline at end of file diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips new file mode 100644 index 00000000..b6950b8f --- /dev/null +++ b/tests/codegen/list.mips @@ -0,0 +1,2080 @@ +.text +.globl main +main: +# Save types directions in the types array +la $t9, types +# Save space to locate the type info +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_String +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 0($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Int +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 4($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Object +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 8($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Bool +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 12($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_IO +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 16($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_List +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 20($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Cons +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 24($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Main +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 28($t9) +# Copying parents +lw $v0, 0($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 4($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 8($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 12($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 16($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +lw $v0, 20($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +lw $v0, 24($t9) +lw $t8, 20($t9) +sw $t8, 4($v0) +lw $v0, 28($t9) +lw $t8, 16($t9) +sw $t8, 4($v0) +# Save method directions in the methods array +la $v0, methods +la $t9, entry +sw $t9, 0($v0) +la $t9, function_abort_Object +sw $t9, 4($v0) +la $t9, function_type_name_Object +sw $t9, 8($v0) +la $t9, function_copy_Object +sw $t9, 12($v0) +la $t9, function_out_string_IO +sw $t9, 16($v0) +la $t9, function_out_int_IO +sw $t9, 20($v0) +la $t9, function_in_int_IO +sw $t9, 24($v0) +la $t9, function_in_string_IO +sw $t9, 28($v0) +la $t9, function_length_String +sw $t9, 32($v0) +la $t9, function_concat_String +sw $t9, 36($v0) +la $t9, function_substr_String +sw $t9, 40($v0) +la $t9, function_type_name_String +sw $t9, 44($v0) +la $t9, function_copy_String +sw $t9, 48($v0) +la $t9, function_type_name_Int +sw $t9, 52($v0) +la $t9, function_copy_Int +sw $t9, 56($v0) +la $t9, function_type_name_Bool +sw $t9, 60($v0) +la $t9, function_copy_Bool +sw $t9, 64($v0) +la $t9, function_abort_String +sw $t9, 68($v0) +la $t9, function_abort_Int +sw $t9, 72($v0) +la $t9, function_abort_Bool +sw $t9, 76($v0) +la $t9, function_isNil_List +sw $t9, 80($v0) +la $t9, function_head_List +sw $t9, 84($v0) +la $t9, function_tail_List +sw $t9, 88($v0) +la $t9, function_cons_List +sw $t9, 92($v0) +la $t9, function_Cons_Cons +sw $t9, 96($v0) +la $t9, function_isNil_Cons +sw $t9, 100($v0) +la $t9, function_head_Cons +sw $t9, 104($v0) +la $t9, function_tail_Cons +sw $t9, 108($v0) +la $t9, function_init_Cons +sw $t9, 112($v0) +la $t9, function_Main_Main +sw $t9, 116($v0) +la $t9, function_print_list_Main +sw $t9, 120($v0) +la $t9, function_main_Main +sw $t9, 124($v0) + +entry: +# Gets the params from the stack +move $fp, $sp +# Gets the frame pointer from the stack +# Updates stack pointer pushing local__internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local__internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Main +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 44 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_print_list_Main in t9 +lw $t9, 120($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_main_Main in t9 +lw $t9, 124($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Main_Main in t9 +lw $t9, 116($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 28($t8) +sw $v0, 12($t0) +# Static Dispatch of the method Main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +# This function will consume the arguments +jal function_Main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# Static Dispatch of the method main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +li $v0, 0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Object_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_abort_Object_self_0 +move $t1, $t0 +sw $t1, -4($fp) +# Exiting the program +li $t8, 0 +# Printing abort message +li $v0, 4 +la $a0, abort_msg +syscall +li $v0, 4 +lw $a0, 0($t0) +syscall +li $v0, 4 +la $a0, new_line +syscall +li $v0, 17 +move $a0, $t8 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_type_name_Object_result_0 <- Type of self +lw $t1, 0($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +lw $t9, 4($t0) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +move $a0, $t9 +syscall +move $t1, $v0 +# Loop to copy every field of the previous object +# t8 the register to loop +li $t8, 0 +loop_0: +# In t9 is stored the size of the object +bge $t8, $t9, exit_0 +lw $a0, ($t0) +sw $a0, ($v0) +addi $v0, $v0, 4 +addi $t0, $t0, 4 +# Increase loop counter +addi $t8, $t8, 4 +j loop_0 +exit_0: +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_out_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_string_String_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_string_String_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing a string +li $v0, 4 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_out_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value number +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_int_IO_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_int_IO_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing an int +li $v0, 1 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_in_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_int_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Reading a int +li $v0, 5 +syscall +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_in_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_string_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t0, $v0 +# Reading a string +# Putting buffer in a0 +move $a0, $t0 +# Putting length of string in a1 +li $a1, 356 +li $v0, 8 +syscall +# Walks to eliminate the newline +move $t9, $t0 +start_1: +lb $t8, 0($t9) +beqz $t8, end_1 +add $t9, $t9, 1 +j start_1 +end_1: +addiu $t9, $t9, -1 +sb $0, ($t9) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_length_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_length_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +move $t8, $t0 +# Determining the length of a string +loop_2: +lb $t9, 0($t8) +beq $t9, $zero, end_2 +addi $t8, $t8, 1 +j loop_2 +end_2: +sub $t1, $t8, $t0 +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_concat_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_concat_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -8($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +# Copy the first string to dest +move $a0, $t0 +move $a1, $t2 +sw $ra, ($sp) +addiu $sp, $sp, -4 +jal strcopier +# Concatenate second string on result buffer +move $a0, $t1 +move $a1, $v0 +jal strcopier +sb $0, 0($v0) +addiu $sp, $sp, 4 +lw $ra, ($sp) +j finish_3 +# Definition of strcopier +strcopier: +# In a0 is the source and in a1 is the destination +loop_3: +lb $t8, ($a0) +beq $t8, $zero, end_3 +addiu $a0, $a0, 1 +sb $t8, ($a1) +addiu $a1, $a1, 1 +b loop_3 +end_3: +move $v0, $a1 +jr $ra +finish_3: +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_substr_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value begin +addiu $fp, $fp, 4 +# Pops the register with the param value end +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_substr_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -12($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +lw $t3, -8($fp) +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t3 +start_4: +lb $t9, 0($t8) +beqz $t9, error_4 +addi $v0, 1 +bgt $v0, $t0, end_len_4 +addi $t8, 1 +j start_4 +end_len_4: +# Saving dest to iterate over him +move $v0, $t2 +loop_4: +sub $t9, $v0, $t2 +beq $t9, $t1, end_4 +lb $t9, 0($t8) +beqz $t9, error_4 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_4 +error_4: +la $a0, index_error +li $v0, 4 +move $a0, $t3 +syscall +li $v0, 1 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t1 +syscall +j .raise +end_4: +sb $0, 0($v0) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_String_result_0 type_String +la $t0, type_String +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_String_result_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +move $t8, $t0 +# Determining the length of a string +loop_5: +lb $t9, 0($t8) +beq $t9, $zero, end_5 +addi $t8, $t8, 1 +j loop_5 +end_5: +sub $t1, $t8, $t0 +lw $t2, -12($fp) +# local_copy_String_result_2 <- local_copy_String_result_1 - 1 +addi $t2, $t1, -1 +lw $t3, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t3, $v0 +li $t8, 0 +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t0 +start_6: +lb $t9, 0($t8) +beqz $t9, error_6 +addi $v0, 1 +bgt $v0, $t8, end_len_6 +addi $t8, 1 +j start_6 +end_len_6: +# Saving dest to iterate over him +move $v0, $t3 +loop_6: +sub $t9, $v0, $t3 +beq $t9, $t2, end_6 +lb $t9, 0($t8) +beqz $t9, error_6 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_6 +error_6: +la $a0, index_error +li $v0, 4 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t8 +syscall +li $v0, 1 +move $a0, $t2 +syscall +j .raise +end_6: +sb $0, 0($v0) +move $v0, $t3 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +sw $t3, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Int_result_0 type_Int +la $t0, type_Int +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_Int_result_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Bool_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Bool_result_0 type_Bool +la $t0, type_Bool +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_result_Bool_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_result_Bool_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_String_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self string_abort +la $t0, string_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Int_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self int_abort +la $t0, int_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Bool_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self bool_abort +la $t0, bool_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_isNil_List: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +li $v0, 1 +# Empty all used registers and saves them to memory +# Removing all locals from stack +addiu $sp, $sp, 4 +jr $ra + + +function_head_List: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_head_List_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_head_List_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_abort_Object +lw $t8, 4($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# Moving 0 to local_head_List_internal_1 +li $t1, 0 +sw $t1, -8($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_tail_List: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_tail_List_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_tail_List_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_abort_Object +lw $t8, 4($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -8($fp) +# Moving self to local_tail_List_internal_1 +move $t2, $t1 +sw $t2, -8($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_cons_List: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value i +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_cons_List_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cons_List_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 20 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Cons +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 20 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 40 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_isNil_Cons in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_head_Cons in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_tail_Cons in t9 +lw $t9, 108($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_cons_List in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_init_Cons in t9 +lw $t9, 112($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_Cons_Cons in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t0) +# Static Dispatch of the method Cons +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +# This function will consume the arguments +jal function_Cons_Cons +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_init_Cons +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -4($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t3, -0($fp) +sw $t3, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -12($fp) +sw $t2, -4($fp) +sw $t3, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_Cons_Cons: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_Cons_Cons_cdr_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Cons_Cons_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# self . car <- SET 0 +li $t9, 0 +sw $t9, 16($t0) +lw $t1, -4($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t1, $v0 +# self . cdr <- SET local_Cons_Cons_cdr_0 +sw $t1, 20($t0) +lw $t2, -8($fp) +# Moving self to local_Cons_Cons_internal_1 +move $t2, $t0 +sw $t2, -8($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_isNil_Cons: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +li $v0, 0 +# Empty all used registers and saves them to memory +# Removing all locals from stack +addiu $sp, $sp, 4 +jr $ra + + +function_head_Cons: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_head_Cons_car_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_head_Cons_car_0 <- GET self . car +lw $t1, 16($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_tail_Cons: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_tail_Cons_cdr_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_tail_Cons_cdr_0 <- GET self . cdr +lw $t1, 20($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_init_Cons: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value i +addiu $fp, $fp, 4 +# Pops the register with the param value rest +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_init_Cons_internal_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# self . car <- SET i +sw $t0, 16($t1) +lw $t2, -0($fp) +# self . cdr <- SET rest +sw $t2, 20($t1) +lw $t3, -12($fp) +# Moving self to local_init_Cons_internal_0 +move $t3, $t1 +sw $t3, -12($fp) +move $v0, $t3 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +sw $t3, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_Main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_Main_Main_mylist_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t0, $v0 +lw $t1, -0($fp) +# self . mylist <- SET local_Main_Main_mylist_0 +sw $t0, 16($t1) +lw $t2, -8($fp) +# Moving self to local_Main_Main_internal_1 +move $t2, $t1 +sw $t2, -8($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_print_list_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value l +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_print_list_Main_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Main_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Main_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Main_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Main_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Main_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Main_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Main_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Main_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Main_internal_10 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_isNil_List +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +# If local_print_list_Main_internal_0 goto true__121 +sw $t0, -8($fp) +bnez $t0, true__121 +lw $t0, -0($fp) +lw $t1, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_head_List +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -16($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +lw $t2, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_int_IO +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -4($fp) +sw $t2, -20($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# Saves in local_print_list_Main_internal_4 data_1 +la $t1, data_1 +lw $t2, -4($fp) +lw $t3, -28($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -24($fp) +sw $t2, -4($fp) +sw $t3, -28($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -28($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -32($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_tail_List +lw $t8, 24($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -28($fp) +sw $t1, -0($fp) +sw $t2, -32($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -32($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +lw $t2, -36($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_print_list_Main +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -32($fp) +sw $t1, -4($fp) +sw $t2, -36($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -36($fp) +# saves the return value +move $t0, $v0 +lw $t1, -40($fp) +# Moving local_print_list_Main_internal_7 to local_print_list_Main_internal_8 +move $t1, $t0 +sw $t1, -40($fp) +lw $t2, -12($fp) +# Moving local_print_list_Main_internal_8 to local_print_list_Main_internal_1 +move $t2, $t1 +sw $t2, -12($fp) +sw $t0, -36($fp) +sw $t1, -40($fp) +sw $t2, -12($fp) +j end__121 +true__121: +lw $t0, -44($fp) +# Saves in local_print_list_Main_internal_9 data_2 +la $t0, data_2 +lw $t1, -4($fp) +lw $t2, -48($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -44($fp) +sw $t1, -4($fp) +sw $t2, -48($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -48($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Moving local_print_list_Main_internal_10 to local_print_list_Main_internal_1 +move $t1, $t0 +sw $t1, -12($fp) +sw $t0, -48($fp) +sw $t1, -12($fp) +end__121: +lw $t0, -12($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 52 +jr $ra + + +function_main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_main_Main_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_mylist_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_mylist_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_mylist_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_15 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 12 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_List +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 12 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 32 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_isNil_List in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_head_List in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_tail_List in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_cons_List in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t0) +lw $t1, -8($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_cons_List +lw $t8, 28($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +li $t9, 1 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_cons_List +lw $t8, 28($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +li $t9, 2 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -12($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +lw $t1, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_cons_List +lw $t8, 28($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +li $t9, 3 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $t1, -16($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_cons_List +lw $t8, 28($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +li $t9, 4 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -20($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_cons_List +lw $t8, 28($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +li $t9, 5 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -24($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -24($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . mylist <- SET local_main_Main_internal_5 +sw $t0, 16($t1) +lw $t2, -28($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t2, $v0 +sw $t0, -24($fp) +sw $t1, -0($fp) +sw $t2, -28($fp) +start__180: +lw $t0, -0($fp) +lw $t1, -36($fp) +# local_main_Main_mylist_8 <- GET self . mylist +lw $t1, 16($t0) +lw $t2, -40($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_isNil_List +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -36($fp) +sw $t2, -40($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +lw $t1, -32($fp) +# local_main_Main_internal_7 <- not local_main_Main_internal_9 +beqz $t0, false_7 +li $t1, 0 +j end_7 +false_7: +li $t1, 1 +end_7: +# If not local_main_Main_internal_7 goto end__180 +sw $t0, -40($fp) +sw $t1, -32($fp) +beqz $t1, end__180 +lw $t0, -0($fp) +lw $t1, -44($fp) +# local_main_Main_mylist_10 <- GET self . mylist +lw $t1, 16($t0) +lw $t2, -48($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_print_list_Main +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -44($fp) +sw $t2, -48($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -48($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -52($fp) +# local_main_Main_mylist_12 <- GET self . mylist +lw $t2, 16($t1) +lw $t3, -56($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_tail_List +lw $t8, 24($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -48($fp) +sw $t1, -0($fp) +sw $t2, -52($fp) +sw $t3, -56($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -56($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +# self . mylist <- SET local_main_Main_internal_13 +sw $t0, 16($t1) +lw $t2, -60($fp) +# Moving local_main_Main_internal_13 to local_main_Main_internal_14 +move $t2, $t0 +sw $t2, -60($fp) +lw $t3, -28($fp) +# Moving local_main_Main_internal_14 to local_main_Main_internal_6 +move $t3, $t2 +sw $t3, -28($fp) +sw $t0, -56($fp) +sw $t1, -0($fp) +sw $t2, -60($fp) +sw $t3, -28($fp) +j start__180 +end__180: +lw $t0, -28($fp) +lw $t1, -64($fp) +# Moving local_main_Main_internal_6 to local_main_Main_internal_15 +move $t1, $t0 +sw $t1, -64($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -28($fp) +sw $t1, -64($fp) +# Removing all locals from stack +addiu $sp, $sp, 68 +jr $ra + +# Raise exception method +.raise: +li $v0, 4 +syscall +li $v0, 17 +li $a0, 1 +syscall + +.data +abort_msg: .asciiz "Abort called from class " +new_line: .asciiz " +" +string_abort: .asciiz "Abort called from class String +" +int_abort: .asciiz "Abort called from class Int +" +bool_abort: .asciiz "Abort called from class Bool +" +type_Object: .asciiz "Object" +type_IO: .asciiz "IO" +type_String: .asciiz "String" +type_Int: .asciiz "Int" +type_Bool: .asciiz "Bool" +type_List: .asciiz "List" +type_Cons: .asciiz "Cons" +type_Main: .asciiz "Main" +type_Void: .asciiz "Void" +types: .word 0, 0, 0, 0, 0, 0, 0, 0 +data_0: .asciiz "Void" +data_1: .asciiz " " +data_2: .asciiz " +" +methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +zero_error: .asciiz "Division by zero error +" +case_void_error: .asciiz "Case on void error +" +dispatch_error: .asciiz "Dispatch on void error +" +case_error: .asciiz "Case statement without a matching branch error +" +index_error: .asciiz "Substring out of range error +" +heap_error: .asciiz "Heap overflow error +" \ No newline at end of file diff --git a/tests/codegen/new_complex.mips b/tests/codegen/new_complex.mips new file mode 100644 index 00000000..c085320d --- /dev/null +++ b/tests/codegen/new_complex.mips @@ -0,0 +1,2182 @@ +.text +.globl main +main: +# Save types directions in the types array +la $t9, types +# Save space to locate the type info +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_String +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 0($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Int +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 4($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Object +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 8($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Bool +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 12($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_IO +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 16($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Main +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 20($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Complex +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 24($t9) +# Copying parents +lw $v0, 0($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 4($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 8($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 12($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 16($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +lw $v0, 20($t9) +lw $t8, 16($t9) +sw $t8, 4($v0) +lw $v0, 24($t9) +lw $t8, 16($t9) +sw $t8, 4($v0) +# Save method directions in the methods array +la $v0, methods +la $t9, entry +sw $t9, 0($v0) +la $t9, function_abort_Object +sw $t9, 4($v0) +la $t9, function_type_name_Object +sw $t9, 8($v0) +la $t9, function_copy_Object +sw $t9, 12($v0) +la $t9, function_out_string_IO +sw $t9, 16($v0) +la $t9, function_out_int_IO +sw $t9, 20($v0) +la $t9, function_in_int_IO +sw $t9, 24($v0) +la $t9, function_in_string_IO +sw $t9, 28($v0) +la $t9, function_length_String +sw $t9, 32($v0) +la $t9, function_concat_String +sw $t9, 36($v0) +la $t9, function_substr_String +sw $t9, 40($v0) +la $t9, function_type_name_String +sw $t9, 44($v0) +la $t9, function_copy_String +sw $t9, 48($v0) +la $t9, function_type_name_Int +sw $t9, 52($v0) +la $t9, function_copy_Int +sw $t9, 56($v0) +la $t9, function_type_name_Bool +sw $t9, 60($v0) +la $t9, function_copy_Bool +sw $t9, 64($v0) +la $t9, function_abort_String +sw $t9, 68($v0) +la $t9, function_abort_Int +sw $t9, 72($v0) +la $t9, function_abort_Bool +sw $t9, 76($v0) +la $t9, function_main_Main +sw $t9, 80($v0) +la $t9, function_Complex_Complex +sw $t9, 84($v0) +la $t9, function_init_Complex +sw $t9, 88($v0) +la $t9, function_print_Complex +sw $t9, 92($v0) +la $t9, function_reflect_0_Complex +sw $t9, 96($v0) +la $t9, function_reflect_X_Complex +sw $t9, 100($v0) +la $t9, function_reflect_Y_Complex +sw $t9, 104($v0) +la $t9, function_equal_Complex +sw $t9, 108($v0) +la $t9, function_x_value_Complex +sw $t9, 112($v0) +la $t9, function_y_value_Complex +sw $t9, 116($v0) + +entry: +# Gets the params from the stack +move $fp, $sp +# Gets the frame pointer from the stack +# Updates stack pointer pushing local__internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local__internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 12 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Main +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 12 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 36 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_main_Main in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t0) +lw $t1, -4($fp) +# Static Dispatch of the method main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# This function will consume the arguments +jal function_main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +li $v0, 0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Object_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_abort_Object_self_0 +move $t1, $t0 +sw $t1, -4($fp) +# Exiting the program +li $t8, 0 +# Printing abort message +li $v0, 4 +la $a0, abort_msg +syscall +li $v0, 4 +lw $a0, 0($t0) +syscall +li $v0, 4 +la $a0, new_line +syscall +li $v0, 17 +move $a0, $t8 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_type_name_Object_result_0 <- Type of self +lw $t1, 0($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +lw $t9, 4($t0) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +move $a0, $t9 +syscall +move $t1, $v0 +# Loop to copy every field of the previous object +# t8 the register to loop +li $t8, 0 +loop_0: +# In t9 is stored the size of the object +bge $t8, $t9, exit_0 +lw $a0, ($t0) +sw $a0, ($v0) +addi $v0, $v0, 4 +addi $t0, $t0, 4 +# Increase loop counter +addi $t8, $t8, 4 +j loop_0 +exit_0: +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_out_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_string_String_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_string_String_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing a string +li $v0, 4 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_out_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value number +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_int_IO_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_int_IO_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing an int +li $v0, 1 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_in_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_int_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Reading a int +li $v0, 5 +syscall +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_in_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_string_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t0, $v0 +# Reading a string +# Putting buffer in a0 +move $a0, $t0 +# Putting length of string in a1 +li $a1, 356 +li $v0, 8 +syscall +# Walks to eliminate the newline +move $t9, $t0 +start_1: +lb $t8, 0($t9) +beqz $t8, end_1 +add $t9, $t9, 1 +j start_1 +end_1: +addiu $t9, $t9, -1 +sb $0, ($t9) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_length_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_length_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +move $t8, $t0 +# Determining the length of a string +loop_2: +lb $t9, 0($t8) +beq $t9, $zero, end_2 +addi $t8, $t8, 1 +j loop_2 +end_2: +sub $t1, $t8, $t0 +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_concat_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_concat_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -8($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +# Copy the first string to dest +move $a0, $t0 +move $a1, $t2 +sw $ra, ($sp) +addiu $sp, $sp, -4 +jal strcopier +# Concatenate second string on result buffer +move $a0, $t1 +move $a1, $v0 +jal strcopier +sb $0, 0($v0) +addiu $sp, $sp, 4 +lw $ra, ($sp) +j finish_3 +# Definition of strcopier +strcopier: +# In a0 is the source and in a1 is the destination +loop_3: +lb $t8, ($a0) +beq $t8, $zero, end_3 +addiu $a0, $a0, 1 +sb $t8, ($a1) +addiu $a1, $a1, 1 +b loop_3 +end_3: +move $v0, $a1 +jr $ra +finish_3: +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_substr_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value begin +addiu $fp, $fp, 4 +# Pops the register with the param value end +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_substr_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -12($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +lw $t3, -8($fp) +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t3 +start_4: +lb $t9, 0($t8) +beqz $t9, error_4 +addi $v0, 1 +bgt $v0, $t0, end_len_4 +addi $t8, 1 +j start_4 +end_len_4: +# Saving dest to iterate over him +move $v0, $t2 +loop_4: +sub $t9, $v0, $t2 +beq $t9, $t1, end_4 +lb $t9, 0($t8) +beqz $t9, error_4 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_4 +error_4: +la $a0, index_error +li $v0, 4 +move $a0, $t3 +syscall +li $v0, 1 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t1 +syscall +j .raise +end_4: +sb $0, 0($v0) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_String_result_0 type_String +la $t0, type_String +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_String_result_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +move $t8, $t0 +# Determining the length of a string +loop_5: +lb $t9, 0($t8) +beq $t9, $zero, end_5 +addi $t8, $t8, 1 +j loop_5 +end_5: +sub $t1, $t8, $t0 +lw $t2, -12($fp) +# local_copy_String_result_2 <- local_copy_String_result_1 - 1 +addi $t2, $t1, -1 +lw $t3, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t3, $v0 +li $t8, 0 +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t0 +start_6: +lb $t9, 0($t8) +beqz $t9, error_6 +addi $v0, 1 +bgt $v0, $t8, end_len_6 +addi $t8, 1 +j start_6 +end_len_6: +# Saving dest to iterate over him +move $v0, $t3 +loop_6: +sub $t9, $v0, $t3 +beq $t9, $t2, end_6 +lb $t9, 0($t8) +beqz $t9, error_6 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_6 +error_6: +la $a0, index_error +li $v0, 4 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t8 +syscall +li $v0, 1 +move $a0, $t2 +syscall +j .raise +end_6: +sb $0, 0($v0) +move $v0, $t3 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +sw $t3, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Int_result_0 type_Int +la $t0, type_Int +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_Int_result_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Bool_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Bool_result_0 type_Bool +la $t0, type_Bool +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_result_Bool_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_result_Bool_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_String_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self string_abort +la $t0, string_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Int_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self int_abort +la $t0, int_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Bool_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self bool_abort +la $t0, bool_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_main_Main_c_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_15 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_16 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_17 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_18 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_19 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_20 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 20 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Complex +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 20 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 68 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_init_Complex in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_print_Complex in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_reflect_0_Complex in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_reflect_X_Complex in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_reflect_Y_Complex in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_equal_Complex in t9 +lw $t9, 108($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_x_value_Complex in t9 +lw $t9, 112($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +# Save the direction of the method function_y_value_Complex in t9 +lw $t9, 116($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 60($v0) +# Save the direction of the method function_Complex_Complex in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 64($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t0) +# Static Dispatch of the method Complex +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +# This function will consume the arguments +jal function_Complex_Complex +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_init_Complex +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +li $t9, 1 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +li $t9, 1 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -12($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +# Moving local_main_Main_internal_2 to local_main_Main_c_0 +move $t1, $t0 +sw $t1, -4($fp) +lw $t2, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_reflect_X_Complex +lw $t8, 44($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $t1, -4($fp) +sw $t2, -20($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +lw $t2, -24($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_reflect_0_Complex +lw $t8, 40($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -4($fp) +sw $t2, -24($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -24($fp) +# saves the return value +move $t0, $v0 +lw $t1, -20($fp) +lw $t2, -16($fp) +# local_main_Main_internal_3 <- local_main_Main_internal_4 = local_main_Main_internal_5 +seq $t2, $t1, $t0 +# If local_main_Main_internal_3 goto true__66 +sw $t0, -24($fp) +sw $t1, -20($fp) +sw $t2, -16($fp) +bnez $t2, true__66 +lw $t0, -32($fp) +# Saves in local_main_Main_internal_7 data_1 +la $t0, data_1 +lw $t1, -0($fp) +lw $t2, -36($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -32($fp) +sw $t1, -0($fp) +sw $t2, -36($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -36($fp) +# saves the return value +move $t0, $v0 +lw $t1, -28($fp) +# Moving local_main_Main_internal_8 to local_main_Main_internal_6 +move $t1, $t0 +sw $t1, -28($fp) +sw $t0, -36($fp) +sw $t1, -28($fp) +j end__66 +true__66: +lw $t0, -40($fp) +# Saves in local_main_Main_internal_9 data_2 +la $t0, data_2 +lw $t1, -0($fp) +lw $t2, -44($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -40($fp) +sw $t1, -0($fp) +sw $t2, -44($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -44($fp) +# saves the return value +move $t0, $v0 +lw $t1, -28($fp) +# Moving local_main_Main_internal_10 to local_main_Main_internal_6 +move $t1, $t0 +sw $t1, -28($fp) +sw $t0, -44($fp) +sw $t1, -28($fp) +end__66: +lw $t0, -4($fp) +lw $t1, -48($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_reflect_X_Complex +lw $t8, 44($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -48($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -48($fp) +# saves the return value +move $t0, $v0 +lw $t1, -52($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_reflect_Y_Complex +lw $t8, 48($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -48($fp) +sw $t1, -52($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -52($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +lw $t2, -56($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_reflect_0_Complex +lw $t8, 40($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -52($fp) +sw $t1, -4($fp) +sw $t2, -56($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -56($fp) +# saves the return value +move $t0, $v0 +lw $t1, -52($fp) +lw $t2, -60($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_equal_Complex +lw $t8, 52($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -56($fp) +sw $t1, -52($fp) +sw $t2, -60($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -60($fp) +# saves the return value +move $t0, $v0 +# If local_main_Main_internal_14 goto true__98 +sw $t0, -60($fp) +bnez $t0, true__98 +lw $t0, -68($fp) +# Saves in local_main_Main_internal_16 data_3 +la $t0, data_3 +lw $t1, -0($fp) +lw $t2, -72($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -68($fp) +sw $t1, -0($fp) +sw $t2, -72($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -72($fp) +# saves the return value +move $t0, $v0 +lw $t1, -64($fp) +# Moving local_main_Main_internal_17 to local_main_Main_internal_15 +move $t1, $t0 +sw $t1, -64($fp) +sw $t0, -72($fp) +sw $t1, -64($fp) +j end__98 +true__98: +lw $t0, -76($fp) +# Saves in local_main_Main_internal_18 data_4 +la $t0, data_4 +lw $t1, -0($fp) +lw $t2, -80($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -76($fp) +sw $t1, -0($fp) +sw $t2, -80($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -80($fp) +# saves the return value +move $t0, $v0 +lw $t1, -64($fp) +# Moving local_main_Main_internal_19 to local_main_Main_internal_15 +move $t1, $t0 +sw $t1, -64($fp) +sw $t0, -80($fp) +sw $t1, -64($fp) +end__98: +lw $t0, -64($fp) +lw $t1, -84($fp) +# Moving local_main_Main_internal_15 to local_main_Main_internal_20 +move $t1, $t0 +sw $t1, -84($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -64($fp) +sw $t1, -84($fp) +# Removing all locals from stack +addiu $sp, $sp, 88 +jr $ra + + +function_Complex_Complex: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_Complex_Complex_internal_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# self . x <- SET 0 +li $t9, 0 +sw $t9, 16($t0) +# self . y <- SET 0 +li $t9, 0 +sw $t9, 20($t0) +lw $t1, -4($fp) +# Moving self to local_Complex_Complex_internal_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_init_Complex: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value a +addiu $fp, $fp, 4 +# Pops the register with the param value b +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_init_Complex_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_init_Complex_x_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_init_Complex_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_init_Complex_y_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_init_Complex_internal_4 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +lw $t1, -16($fp) +# local_init_Complex_x_1 <- GET self . x +lw $t1, 16($t0) +lw $t2, -4($fp) +lw $t3, -12($fp) +# local_init_Complex_internal_0 <- local_init_Complex_x_1 = a +seq $t3, $t1, $t2 +lw $t4, -24($fp) +# local_init_Complex_y_3 <- GET self . y +lw $t4, 20($t0) +lw $t5, -0($fp) +lw $t6, -20($fp) +# local_init_Complex_internal_2 <- local_init_Complex_y_3 = b +seq $t6, $t4, $t5 +lw $t7, -28($fp) +# Moving self to local_init_Complex_internal_4 +move $t7, $t0 +sw $t7, -28($fp) +move $v0, $t7 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -16($fp) +sw $t2, -4($fp) +sw $t3, -12($fp) +sw $t4, -24($fp) +sw $t5, -0($fp) +sw $t6, -20($fp) +sw $t7, -28($fp) +# Removing all locals from stack +addiu $sp, $sp, 32 +jr $ra + + +function_print_Complex: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_print_Complex_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Complex_y_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Complex_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Complex_x_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Complex_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Complex_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Complex_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Complex_y_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Complex_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Complex_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Complex_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Complex_x_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_Complex_internal_12 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +# local_print_Complex_y_1 <- GET self . y +lw $t1, 20($t0) +lw $t2, -4($fp) +# local_print_Complex_internal_0 <- local_print_Complex_y_1 = 0 +li $t9, 0 +seq $t2, $t1, $t9 +# If local_print_Complex_internal_0 goto true__148 +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -4($fp) +bnez $t2, true__148 +lw $t0, -0($fp) +lw $t1, -16($fp) +# local_print_Complex_x_3 <- GET self . x +lw $t1, 16($t0) +lw $t2, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_out_int_IO +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -16($fp) +sw $t2, -20($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# Saves in local_print_Complex_internal_5 data_5 +la $t1, data_5 +lw $t2, -28($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -24($fp) +sw $t2, -28($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -28($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -32($fp) +# local_print_Complex_y_7 <- GET self . y +lw $t2, 20($t1) +lw $t3, -36($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_out_int_IO +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -28($fp) +sw $t1, -0($fp) +sw $t2, -32($fp) +sw $t3, -36($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -36($fp) +# saves the return value +move $t0, $v0 +lw $t1, -40($fp) +# Saves in local_print_Complex_internal_9 data_6 +la $t1, data_6 +lw $t2, -44($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -36($fp) +sw $t1, -40($fp) +sw $t2, -44($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -44($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Moving local_print_Complex_internal_10 to local_print_Complex_internal_2 +move $t1, $t0 +sw $t1, -12($fp) +sw $t0, -44($fp) +sw $t1, -12($fp) +j end__148 +true__148: +lw $t0, -0($fp) +lw $t1, -48($fp) +# local_print_Complex_x_11 <- GET self . x +lw $t1, 16($t0) +lw $t2, -52($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_out_int_IO +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -48($fp) +sw $t2, -52($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -52($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Moving local_print_Complex_internal_12 to local_print_Complex_internal_2 +move $t1, $t0 +sw $t1, -12($fp) +sw $t0, -52($fp) +sw $t1, -12($fp) +end__148: +lw $t0, -12($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 56 +jr $ra + + +function_reflect_0_Complex: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_reflect_0_Complex_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_0_Complex_x_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_0_Complex_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_0_Complex_x_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_0_Complex_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_0_Complex_y_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_0_Complex_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_0_Complex_y_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_0_Complex_internal_8 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +# local_reflect_0_Complex_x_1 <- GET self . x +lw $t1, 16($t0) +lw $t2, -16($fp) +# local_reflect_0_Complex_x_3 <- GET self . x +lw $t2, 16($t0) +lw $t3, -12($fp) +# local_reflect_0_Complex_internal_2 <- ~local_reflect_0_Complex_x_3 +not $t3, $t2 +addi $t3, $t3, 1 +lw $t4, -4($fp) +# local_reflect_0_Complex_internal_0 <- local_reflect_0_Complex_x_1 = local_reflect_0_Complex_internal_2 +seq $t4, $t1, $t3 +lw $t5, -24($fp) +# local_reflect_0_Complex_y_5 <- GET self . y +lw $t5, 20($t0) +lw $t6, -32($fp) +# local_reflect_0_Complex_y_7 <- GET self . y +lw $t6, 20($t0) +lw $t7, -28($fp) +# local_reflect_0_Complex_internal_6 <- ~local_reflect_0_Complex_y_7 +not $t7, $t6 +addi $t7, $t7, 1 +lw $a0, -20($fp) +# local_reflect_0_Complex_internal_4 <- local_reflect_0_Complex_y_5 = local_reflect_0_Complex_internal_6 +seq $a0, $t5, $t7 +lw $a1, -36($fp) +# Moving self to local_reflect_0_Complex_internal_8 +move $a1, $t0 +sw $a1, -36($fp) +move $v0, $a1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -16($fp) +sw $t3, -12($fp) +sw $t4, -4($fp) +sw $t5, -24($fp) +sw $t6, -32($fp) +sw $t7, -28($fp) +sw $a0, -20($fp) +sw $a1, -36($fp) +# Removing all locals from stack +addiu $sp, $sp, 40 +jr $ra + + +function_reflect_X_Complex: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_reflect_X_Complex_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_X_Complex_y_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_X_Complex_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_X_Complex_y_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_X_Complex_internal_4 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +# local_reflect_X_Complex_y_1 <- GET self . y +lw $t1, 20($t0) +lw $t2, -16($fp) +# local_reflect_X_Complex_y_3 <- GET self . y +lw $t2, 20($t0) +lw $t3, -12($fp) +# local_reflect_X_Complex_internal_2 <- ~local_reflect_X_Complex_y_3 +not $t3, $t2 +addi $t3, $t3, 1 +lw $t4, -4($fp) +# local_reflect_X_Complex_internal_0 <- local_reflect_X_Complex_y_1 = local_reflect_X_Complex_internal_2 +seq $t4, $t1, $t3 +lw $t5, -20($fp) +# Moving self to local_reflect_X_Complex_internal_4 +move $t5, $t0 +sw $t5, -20($fp) +move $v0, $t5 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -16($fp) +sw $t3, -12($fp) +sw $t4, -4($fp) +sw $t5, -20($fp) +# Removing all locals from stack +addiu $sp, $sp, 24 +jr $ra + + +function_reflect_Y_Complex: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_reflect_Y_Complex_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_Y_Complex_x_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_Y_Complex_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_Y_Complex_x_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_reflect_Y_Complex_internal_4 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +# local_reflect_Y_Complex_x_1 <- GET self . x +lw $t1, 16($t0) +lw $t2, -16($fp) +# local_reflect_Y_Complex_x_3 <- GET self . x +lw $t2, 16($t0) +lw $t3, -12($fp) +# local_reflect_Y_Complex_internal_2 <- ~local_reflect_Y_Complex_x_3 +not $t3, $t2 +addi $t3, $t3, 1 +lw $t4, -4($fp) +# local_reflect_Y_Complex_internal_0 <- local_reflect_Y_Complex_x_1 = local_reflect_Y_Complex_internal_2 +seq $t4, $t1, $t3 +lw $t5, -20($fp) +# Moving self to local_reflect_Y_Complex_internal_4 +move $t5, $t0 +sw $t5, -20($fp) +move $v0, $t5 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -16($fp) +sw $t3, -12($fp) +sw $t4, -4($fp) +sw $t5, -20($fp) +# Removing all locals from stack +addiu $sp, $sp, 24 +jr $ra + + +function_equal_Complex: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value d +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_equal_Complex_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_equal_Complex_x_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_equal_Complex_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_equal_Complex_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_equal_Complex_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_equal_Complex_y_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_equal_Complex_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_equal_Complex_internal_7 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -12($fp) +# local_equal_Complex_x_1 <- GET self . x +lw $t1, 16($t0) +lw $t2, -0($fp) +lw $t3, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_x_value_Complex +lw $t8, 56($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -12($fp) +sw $t2, -0($fp) +sw $t3, -16($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +lw $t2, -8($fp) +# local_equal_Complex_internal_0 <- local_equal_Complex_x_1 = local_equal_Complex_internal_2 +seq $t2, $t1, $t0 +# If local_equal_Complex_internal_0 goto true__243 +sw $t0, -16($fp) +sw $t1, -12($fp) +sw $t2, -8($fp) +bnez $t2, true__243 +lw $t0, -20($fp) +# Moving 0 to local_equal_Complex_internal_3 +li $t0, 0 +sw $t0, -20($fp) +sw $t0, -20($fp) +j end__243 +true__243: +lw $t0, -4($fp) +lw $t1, -28($fp) +# local_equal_Complex_y_5 <- GET self . y +lw $t1, 20($t0) +lw $t2, -0($fp) +lw $t3, -32($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_y_value_Complex +lw $t8, 60($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -28($fp) +sw $t2, -0($fp) +sw $t3, -32($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -32($fp) +# saves the return value +move $t0, $v0 +lw $t1, -28($fp) +lw $t2, -24($fp) +# local_equal_Complex_internal_4 <- local_equal_Complex_y_5 = local_equal_Complex_internal_6 +seq $t2, $t1, $t0 +# If local_equal_Complex_internal_4 goto true__255 +sw $t0, -32($fp) +sw $t1, -28($fp) +sw $t2, -24($fp) +bnez $t2, true__255 +lw $t0, -36($fp) +# Moving 0 to local_equal_Complex_internal_7 +li $t0, 0 +sw $t0, -36($fp) +sw $t0, -36($fp) +j end__255 +true__255: +lw $t0, -36($fp) +# Moving 1 to local_equal_Complex_internal_7 +li $t0, 1 +sw $t0, -36($fp) +sw $t0, -36($fp) +end__255: +lw $t0, -36($fp) +lw $t1, -20($fp) +# Moving local_equal_Complex_internal_7 to local_equal_Complex_internal_3 +move $t1, $t0 +sw $t1, -20($fp) +sw $t0, -36($fp) +sw $t1, -20($fp) +end__243: +lw $t0, -20($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +# Removing all locals from stack +addiu $sp, $sp, 40 +jr $ra + + +function_x_value_Complex: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_x_value_Complex_x_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_x_value_Complex_x_0 <- GET self . x +lw $t1, 16($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_y_value_Complex: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_y_value_Complex_y_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_y_value_Complex_y_0 <- GET self . y +lw $t1, 20($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + +# Raise exception method +.raise: +li $v0, 4 +syscall +li $v0, 17 +li $a0, 1 +syscall + +.data +abort_msg: .asciiz "Abort called from class " +new_line: .asciiz " +" +string_abort: .asciiz "Abort called from class String +" +int_abort: .asciiz "Abort called from class Int +" +bool_abort: .asciiz "Abort called from class Bool +" +type_Object: .asciiz "Object" +type_IO: .asciiz "IO" +type_String: .asciiz "String" +type_Int: .asciiz "Int" +type_Bool: .asciiz "Bool" +type_Main: .asciiz "Main" +type_Complex: .asciiz "Complex" +type_Void: .asciiz "Void" +types: .word 0, 0, 0, 0, 0, 0, 0 +data_0: .asciiz "Void" +data_1: .asciiz "=( +" +data_2: .asciiz "=) +" +data_3: .asciiz "=( +" +data_4: .asciiz "=) +" +data_5: .asciiz "+" +data_6: .asciiz "I" +methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +zero_error: .asciiz "Division by zero error +" +case_void_error: .asciiz "Case on void error +" +dispatch_error: .asciiz "Dispatch on void error +" +case_error: .asciiz "Case statement without a matching branch error +" +index_error: .asciiz "Substring out of range error +" +heap_error: .asciiz "Heap overflow error +" \ No newline at end of file diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips new file mode 100644 index 00000000..f57aaf89 --- /dev/null +++ b/tests/codegen/palindrome.mips @@ -0,0 +1,1557 @@ +.text +.globl main +main: +# Save types directions in the types array +la $t9, types +# Save space to locate the type info +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_String +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 0($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Int +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 4($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Object +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 8($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Bool +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 12($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_IO +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 16($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Main +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 20($t9) +# Copying parents +lw $v0, 0($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 4($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 8($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 12($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 16($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +lw $v0, 20($t9) +lw $t8, 16($t9) +sw $t8, 4($v0) +# Save method directions in the methods array +la $v0, methods +la $t9, entry +sw $t9, 0($v0) +la $t9, function_abort_Object +sw $t9, 4($v0) +la $t9, function_type_name_Object +sw $t9, 8($v0) +la $t9, function_copy_Object +sw $t9, 12($v0) +la $t9, function_out_string_IO +sw $t9, 16($v0) +la $t9, function_out_int_IO +sw $t9, 20($v0) +la $t9, function_in_int_IO +sw $t9, 24($v0) +la $t9, function_in_string_IO +sw $t9, 28($v0) +la $t9, function_length_String +sw $t9, 32($v0) +la $t9, function_concat_String +sw $t9, 36($v0) +la $t9, function_substr_String +sw $t9, 40($v0) +la $t9, function_type_name_String +sw $t9, 44($v0) +la $t9, function_copy_String +sw $t9, 48($v0) +la $t9, function_type_name_Int +sw $t9, 52($v0) +la $t9, function_copy_Int +sw $t9, 56($v0) +la $t9, function_type_name_Bool +sw $t9, 60($v0) +la $t9, function_copy_Bool +sw $t9, 64($v0) +la $t9, function_abort_String +sw $t9, 68($v0) +la $t9, function_abort_Int +sw $t9, 72($v0) +la $t9, function_abort_Bool +sw $t9, 76($v0) +la $t9, function_Main_Main +sw $t9, 80($v0) +la $t9, function_pal_Main +sw $t9, 84($v0) +la $t9, function_main_Main +sw $t9, 88($v0) + +entry: +# Gets the params from the stack +move $fp, $sp +# Gets the frame pointer from the stack +# Updates stack pointer pushing local__internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local__internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Main +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 44 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_pal_Main in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_main_Main in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Main_Main in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t0) +# Static Dispatch of the method Main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +# This function will consume the arguments +jal function_Main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# Static Dispatch of the method main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +li $v0, 0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Object_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_abort_Object_self_0 +move $t1, $t0 +sw $t1, -4($fp) +# Exiting the program +li $t8, 0 +# Printing abort message +li $v0, 4 +la $a0, abort_msg +syscall +li $v0, 4 +lw $a0, 0($t0) +syscall +li $v0, 4 +la $a0, new_line +syscall +li $v0, 17 +move $a0, $t8 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_type_name_Object_result_0 <- Type of self +lw $t1, 0($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +lw $t9, 4($t0) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +move $a0, $t9 +syscall +move $t1, $v0 +# Loop to copy every field of the previous object +# t8 the register to loop +li $t8, 0 +loop_0: +# In t9 is stored the size of the object +bge $t8, $t9, exit_0 +lw $a0, ($t0) +sw $a0, ($v0) +addi $v0, $v0, 4 +addi $t0, $t0, 4 +# Increase loop counter +addi $t8, $t8, 4 +j loop_0 +exit_0: +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_out_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_string_String_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_string_String_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing a string +li $v0, 4 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_out_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value number +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_int_IO_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_int_IO_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing an int +li $v0, 1 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_in_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_int_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Reading a int +li $v0, 5 +syscall +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_in_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_string_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t0, $v0 +# Reading a string +# Putting buffer in a0 +move $a0, $t0 +# Putting length of string in a1 +li $a1, 356 +li $v0, 8 +syscall +# Walks to eliminate the newline +move $t9, $t0 +start_1: +lb $t8, 0($t9) +beqz $t8, end_1 +add $t9, $t9, 1 +j start_1 +end_1: +addiu $t9, $t9, -1 +sb $0, ($t9) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_length_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_length_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +move $t8, $t0 +# Determining the length of a string +loop_2: +lb $t9, 0($t8) +beq $t9, $zero, end_2 +addi $t8, $t8, 1 +j loop_2 +end_2: +sub $t1, $t8, $t0 +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_concat_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_concat_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -8($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +# Copy the first string to dest +move $a0, $t0 +move $a1, $t2 +sw $ra, ($sp) +addiu $sp, $sp, -4 +jal strcopier +# Concatenate second string on result buffer +move $a0, $t1 +move $a1, $v0 +jal strcopier +sb $0, 0($v0) +addiu $sp, $sp, 4 +lw $ra, ($sp) +j finish_3 +# Definition of strcopier +strcopier: +# In a0 is the source and in a1 is the destination +loop_3: +lb $t8, ($a0) +beq $t8, $zero, end_3 +addiu $a0, $a0, 1 +sb $t8, ($a1) +addiu $a1, $a1, 1 +b loop_3 +end_3: +move $v0, $a1 +jr $ra +finish_3: +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_substr_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value begin +addiu $fp, $fp, 4 +# Pops the register with the param value end +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_substr_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -12($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +lw $t3, -8($fp) +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t3 +start_4: +lb $t9, 0($t8) +beqz $t9, error_4 +addi $v0, 1 +bgt $v0, $t0, end_len_4 +addi $t8, 1 +j start_4 +end_len_4: +# Saving dest to iterate over him +move $v0, $t2 +loop_4: +sub $t9, $v0, $t2 +beq $t9, $t1, end_4 +lb $t9, 0($t8) +beqz $t9, error_4 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_4 +error_4: +la $a0, index_error +li $v0, 4 +move $a0, $t3 +syscall +li $v0, 1 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t1 +syscall +j .raise +end_4: +sb $0, 0($v0) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_String_result_0 type_String +la $t0, type_String +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_String_result_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +move $t8, $t0 +# Determining the length of a string +loop_5: +lb $t9, 0($t8) +beq $t9, $zero, end_5 +addi $t8, $t8, 1 +j loop_5 +end_5: +sub $t1, $t8, $t0 +lw $t2, -12($fp) +# local_copy_String_result_2 <- local_copy_String_result_1 - 1 +addi $t2, $t1, -1 +lw $t3, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t3, $v0 +li $t8, 0 +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t0 +start_6: +lb $t9, 0($t8) +beqz $t9, error_6 +addi $v0, 1 +bgt $v0, $t8, end_len_6 +addi $t8, 1 +j start_6 +end_len_6: +# Saving dest to iterate over him +move $v0, $t3 +loop_6: +sub $t9, $v0, $t3 +beq $t9, $t2, end_6 +lb $t9, 0($t8) +beqz $t9, error_6 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_6 +error_6: +la $a0, index_error +li $v0, 4 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t8 +syscall +li $v0, 1 +move $a0, $t2 +syscall +j .raise +end_6: +sb $0, 0($v0) +move $v0, $t3 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +sw $t3, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Int_result_0 type_Int +la $t0, type_Int +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_Int_result_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Bool_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Bool_result_0 type_Bool +la $t0, type_Bool +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_result_Bool_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_result_Bool_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_String_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self string_abort +la $t0, string_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Int_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self int_abort +la $t0, int_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Bool_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self bool_abort +la $t0, bool_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_Main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_Main_Main_internal_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# self . i <- SET 0 +li $t9, 0 +sw $t9, 16($t0) +lw $t1, -4($fp) +# Moving self to local_Main_Main_internal_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_pal_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value s +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_pal_Main_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_pal_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_pal_Main_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_pal_Main_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_pal_Main_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_pal_Main_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_pal_Main_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_pal_Main_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_pal_Main_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_pal_Main_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_pal_Main_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_pal_Main_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_pal_Main_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_pal_Main_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_pal_Main_internal_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_pal_Main_internal_15 to the stack +addiu $sp, $sp, -4 +lw $t0, -12($fp) +# Static Dispatch of the method length +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_length_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# local_pal_Main_internal_0 <- local_pal_Main_internal_1 = 0 +li $t9, 0 +seq $t1, $t0, $t9 +# If local_pal_Main_internal_0 goto true__61 +sw $t0, -12($fp) +sw $t1, -8($fp) +bnez $t1, true__61 +lw $t0, -24($fp) +# Static Dispatch of the method length +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -24($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_length_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -24($fp) +# saves the return value +move $t0, $v0 +lw $t1, -20($fp) +# local_pal_Main_internal_3 <- local_pal_Main_internal_4 = 1 +li $t9, 1 +seq $t1, $t0, $t9 +# If local_pal_Main_internal_3 goto true__68 +sw $t0, -24($fp) +sw $t1, -20($fp) +bnez $t1, true__68 +lw $t0, -36($fp) +# Static Dispatch of the method substr +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +li $t9, 1 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +li $t9, 0 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -36($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_substr_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -36($fp) +# saves the return value +move $t0, $v0 +lw $t1, -44($fp) +# Static Dispatch of the method length +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -0($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -36($fp) +sw $t1, -44($fp) +sw $t2, -0($fp) +# This function will consume the arguments +jal function_length_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -44($fp) +# saves the return value +move $t0, $v0 +lw $t1, -40($fp) +# local_pal_Main_internal_8 <- local_pal_Main_internal_9 - 1 +addi $t1, $t0, -1 +lw $t2, -48($fp) +# Static Dispatch of the method substr +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +li $t9, 1 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t3, -0($fp) +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -44($fp) +sw $t1, -40($fp) +sw $t2, -48($fp) +sw $t3, -0($fp) +# This function will consume the arguments +jal function_substr_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -48($fp) +# saves the return value +move $t0, $v0 +lw $t1, -36($fp) +lw $t2, -32($fp) +# local_pal_Main_internal_6 <- local_pal_Main_internal_7 = local_pal_Main_internal_10 +move $t8, $t1 +move $t9, $t0 +loop_7: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_7 +beqz $a1, mismatch_7 +seq $v0, $a0, $a1 +beqz $v0, mismatch_7 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_7 +mismatch_7: +li $v0, 0 +j end_7 +check_7: +bnez $a1, mismatch_7 +li $v0, 1 +end_7: +move $t2, $v0 +# If local_pal_Main_internal_6 goto true__87 +sw $t0, -48($fp) +sw $t1, -36($fp) +sw $t2, -32($fp) +bnez $t2, true__87 +lw $t0, -52($fp) +# Moving 0 to local_pal_Main_internal_11 +li $t0, 0 +sw $t0, -52($fp) +sw $t0, -52($fp) +j end__87 +true__87: +lw $t0, -60($fp) +# Static Dispatch of the method length +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -60($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_length_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -60($fp) +# saves the return value +move $t0, $v0 +lw $t1, -56($fp) +# local_pal_Main_internal_12 <- local_pal_Main_internal_13 - 2 +addi $t1, $t0, -2 +lw $t2, -64($fp) +# Static Dispatch of the method substr +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +li $t9, 1 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t3, -0($fp) +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -60($fp) +sw $t1, -56($fp) +sw $t2, -64($fp) +sw $t3, -0($fp) +# This function will consume the arguments +jal function_substr_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -64($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +lw $t2, -68($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_pal_Main +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -64($fp) +sw $t1, -4($fp) +sw $t2, -68($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -68($fp) +# saves the return value +move $t0, $v0 +lw $t1, -52($fp) +# Moving local_pal_Main_internal_15 to local_pal_Main_internal_11 +move $t1, $t0 +sw $t1, -52($fp) +sw $t0, -68($fp) +sw $t1, -52($fp) +end__87: +lw $t0, -52($fp) +lw $t1, -28($fp) +# Moving local_pal_Main_internal_11 to local_pal_Main_internal_5 +move $t1, $t0 +sw $t1, -28($fp) +sw $t0, -52($fp) +sw $t1, -28($fp) +j end__68 +true__68: +lw $t0, -28($fp) +# Moving 1 to local_pal_Main_internal_5 +li $t0, 1 +sw $t0, -28($fp) +sw $t0, -28($fp) +end__68: +lw $t0, -28($fp) +lw $t1, -16($fp) +# Moving local_pal_Main_internal_5 to local_pal_Main_internal_2 +move $t1, $t0 +sw $t1, -16($fp) +sw $t0, -28($fp) +sw $t1, -16($fp) +j end__61 +true__61: +lw $t0, -16($fp) +# Moving 1 to local_pal_Main_internal_2 +li $t0, 1 +sw $t0, -16($fp) +sw $t0, -16($fp) +end__61: +lw $t0, -16($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +# Removing all locals from stack +addiu $sp, $sp, 72 +jr $ra + + +function_main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_main_Main_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_10 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +li $t9, 1 +# local_main_Main_internal_0 <- ~1 +not $t0, $t9 +addi $t0, $t0, 1 +lw $t1, -0($fp) +# self . i <- SET local_main_Main_internal_0 +sw $t0, 16($t1) +lw $t2, -8($fp) +# Saves in local_main_Main_internal_1 data_1 +la $t2, data_1 +lw $t3, -12($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +sw $t3, -12($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_in_string_IO +lw $t8, 24($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $t1, -0($fp) +sw $t2, -16($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_pal_Main +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -0($fp) +sw $t2, -20($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +# If local_main_Main_internal_4 goto true__134 +sw $t0, -20($fp) +bnez $t0, true__134 +lw $t0, -28($fp) +# Saves in local_main_Main_internal_6 data_2 +la $t0, data_2 +lw $t1, -0($fp) +lw $t2, -32($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -28($fp) +sw $t1, -0($fp) +sw $t2, -32($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -32($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# Moving local_main_Main_internal_7 to local_main_Main_internal_5 +move $t1, $t0 +sw $t1, -24($fp) +sw $t0, -32($fp) +sw $t1, -24($fp) +j end__134 +true__134: +lw $t0, -36($fp) +# Saves in local_main_Main_internal_8 data_3 +la $t0, data_3 +lw $t1, -0($fp) +lw $t2, -40($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -36($fp) +sw $t1, -0($fp) +sw $t2, -40($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# Moving local_main_Main_internal_9 to local_main_Main_internal_5 +move $t1, $t0 +sw $t1, -24($fp) +sw $t0, -40($fp) +sw $t1, -24($fp) +end__134: +lw $t0, -24($fp) +lw $t1, -44($fp) +# Moving local_main_Main_internal_5 to local_main_Main_internal_10 +move $t1, $t0 +sw $t1, -44($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -24($fp) +sw $t1, -44($fp) +# Removing all locals from stack +addiu $sp, $sp, 48 +jr $ra + +# Raise exception method +.raise: +li $v0, 4 +syscall +li $v0, 17 +li $a0, 1 +syscall + +.data +abort_msg: .asciiz "Abort called from class " +new_line: .asciiz " +" +string_abort: .asciiz "Abort called from class String +" +int_abort: .asciiz "Abort called from class Int +" +bool_abort: .asciiz "Abort called from class Bool +" +type_Object: .asciiz "Object" +type_IO: .asciiz "IO" +type_String: .asciiz "String" +type_Int: .asciiz "Int" +type_Bool: .asciiz "Bool" +type_Main: .asciiz "Main" +type_Void: .asciiz "Void" +types: .word 0, 0, 0, 0, 0, 0 +data_0: .asciiz "Void" +data_1: .asciiz "enter a string +" +data_2: .asciiz "that was not a palindrome +" +data_3: .asciiz "that was a palindrome +" +methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +zero_error: .asciiz "Division by zero error +" +case_void_error: .asciiz "Case on void error +" +dispatch_error: .asciiz "Dispatch on void error +" +case_error: .asciiz "Case statement without a matching branch error +" +index_error: .asciiz "Substring out of range error +" +heap_error: .asciiz "Heap overflow error +" \ No newline at end of file diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips new file mode 100644 index 00000000..f07a6aea --- /dev/null +++ b/tests/codegen/primes.mips @@ -0,0 +1,1451 @@ +.text +.globl main +main: +# Save types directions in the types array +la $t9, types +# Save space to locate the type info +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_String +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 0($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Int +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 4($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Object +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 8($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Bool +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 12($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_IO +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 16($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Main +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 20($t9) +# Copying parents +lw $v0, 0($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 4($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 8($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 12($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 16($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +lw $v0, 20($t9) +lw $t8, 16($t9) +sw $t8, 4($v0) +# Save method directions in the methods array +la $v0, methods +la $t9, entry +sw $t9, 0($v0) +la $t9, function_abort_Object +sw $t9, 4($v0) +la $t9, function_type_name_Object +sw $t9, 8($v0) +la $t9, function_copy_Object +sw $t9, 12($v0) +la $t9, function_out_string_IO +sw $t9, 16($v0) +la $t9, function_out_int_IO +sw $t9, 20($v0) +la $t9, function_in_int_IO +sw $t9, 24($v0) +la $t9, function_in_string_IO +sw $t9, 28($v0) +la $t9, function_length_String +sw $t9, 32($v0) +la $t9, function_concat_String +sw $t9, 36($v0) +la $t9, function_substr_String +sw $t9, 40($v0) +la $t9, function_type_name_String +sw $t9, 44($v0) +la $t9, function_copy_String +sw $t9, 48($v0) +la $t9, function_type_name_Int +sw $t9, 52($v0) +la $t9, function_copy_Int +sw $t9, 56($v0) +la $t9, function_type_name_Bool +sw $t9, 60($v0) +la $t9, function_copy_Bool +sw $t9, 64($v0) +la $t9, function_abort_String +sw $t9, 68($v0) +la $t9, function_abort_Int +sw $t9, 72($v0) +la $t9, function_abort_Bool +sw $t9, 76($v0) +la $t9, function_Main_Main +sw $t9, 80($v0) +la $t9, function_main_Main +sw $t9, 84($v0) + +entry: +# Gets the params from the stack +move $fp, $sp +# Gets the frame pointer from the stack +# Updates stack pointer pushing local__internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local__internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 32 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Main +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 32 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 40 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_main_Main in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_Main_Main in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t0) +# Static Dispatch of the method Main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +# This function will consume the arguments +jal function_Main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# Static Dispatch of the method main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +li $v0, 0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Object_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_abort_Object_self_0 +move $t1, $t0 +sw $t1, -4($fp) +# Exiting the program +li $t8, 0 +# Printing abort message +li $v0, 4 +la $a0, abort_msg +syscall +li $v0, 4 +lw $a0, 0($t0) +syscall +li $v0, 4 +la $a0, new_line +syscall +li $v0, 17 +move $a0, $t8 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_type_name_Object_result_0 <- Type of self +lw $t1, 0($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +lw $t9, 4($t0) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +move $a0, $t9 +syscall +move $t1, $v0 +# Loop to copy every field of the previous object +# t8 the register to loop +li $t8, 0 +loop_0: +# In t9 is stored the size of the object +bge $t8, $t9, exit_0 +lw $a0, ($t0) +sw $a0, ($v0) +addi $v0, $v0, 4 +addi $t0, $t0, 4 +# Increase loop counter +addi $t8, $t8, 4 +j loop_0 +exit_0: +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_out_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_string_String_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_string_String_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing a string +li $v0, 4 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_out_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value number +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_int_IO_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_int_IO_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing an int +li $v0, 1 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_in_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_int_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Reading a int +li $v0, 5 +syscall +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_in_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_string_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t0, $v0 +# Reading a string +# Putting buffer in a0 +move $a0, $t0 +# Putting length of string in a1 +li $a1, 356 +li $v0, 8 +syscall +# Walks to eliminate the newline +move $t9, $t0 +start_1: +lb $t8, 0($t9) +beqz $t8, end_1 +add $t9, $t9, 1 +j start_1 +end_1: +addiu $t9, $t9, -1 +sb $0, ($t9) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_length_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_length_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +move $t8, $t0 +# Determining the length of a string +loop_2: +lb $t9, 0($t8) +beq $t9, $zero, end_2 +addi $t8, $t8, 1 +j loop_2 +end_2: +sub $t1, $t8, $t0 +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_concat_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_concat_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -8($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +# Copy the first string to dest +move $a0, $t0 +move $a1, $t2 +sw $ra, ($sp) +addiu $sp, $sp, -4 +jal strcopier +# Concatenate second string on result buffer +move $a0, $t1 +move $a1, $v0 +jal strcopier +sb $0, 0($v0) +addiu $sp, $sp, 4 +lw $ra, ($sp) +j finish_3 +# Definition of strcopier +strcopier: +# In a0 is the source and in a1 is the destination +loop_3: +lb $t8, ($a0) +beq $t8, $zero, end_3 +addiu $a0, $a0, 1 +sb $t8, ($a1) +addiu $a1, $a1, 1 +b loop_3 +end_3: +move $v0, $a1 +jr $ra +finish_3: +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_substr_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value begin +addiu $fp, $fp, 4 +# Pops the register with the param value end +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_substr_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -12($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +lw $t3, -8($fp) +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t3 +start_4: +lb $t9, 0($t8) +beqz $t9, error_4 +addi $v0, 1 +bgt $v0, $t0, end_len_4 +addi $t8, 1 +j start_4 +end_len_4: +# Saving dest to iterate over him +move $v0, $t2 +loop_4: +sub $t9, $v0, $t2 +beq $t9, $t1, end_4 +lb $t9, 0($t8) +beqz $t9, error_4 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_4 +error_4: +la $a0, index_error +li $v0, 4 +move $a0, $t3 +syscall +li $v0, 1 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t1 +syscall +j .raise +end_4: +sb $0, 0($v0) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_String_result_0 type_String +la $t0, type_String +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_String_result_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +move $t8, $t0 +# Determining the length of a string +loop_5: +lb $t9, 0($t8) +beq $t9, $zero, end_5 +addi $t8, $t8, 1 +j loop_5 +end_5: +sub $t1, $t8, $t0 +lw $t2, -12($fp) +# local_copy_String_result_2 <- local_copy_String_result_1 - 1 +addi $t2, $t1, -1 +lw $t3, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t3, $v0 +li $t8, 0 +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t0 +start_6: +lb $t9, 0($t8) +beqz $t9, error_6 +addi $v0, 1 +bgt $v0, $t8, end_len_6 +addi $t8, 1 +j start_6 +end_len_6: +# Saving dest to iterate over him +move $v0, $t3 +loop_6: +sub $t9, $v0, $t3 +beq $t9, $t2, end_6 +lb $t9, 0($t8) +beqz $t9, error_6 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_6 +error_6: +la $a0, index_error +li $v0, 4 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t8 +syscall +li $v0, 1 +move $a0, $t2 +syscall +j .raise +end_6: +sb $0, 0($v0) +move $v0, $t3 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +sw $t3, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Int_result_0 type_Int +la $t0, type_Int +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_Int_result_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Bool_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Bool_result_0 type_Bool +la $t0, type_Bool +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_result_Bool_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_result_Bool_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_String_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self string_abort +la $t0, string_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Int_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self int_abort +la $t0, int_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Bool_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self bool_abort +la $t0, bool_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_Main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_Main_Main_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_out_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_testee_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_testee_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_divisor_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_divisor_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_13 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_14 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_15 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_testee_16 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_17 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_divisor_18 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_19 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_testee_20 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_divisor_21 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_22 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_23 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_divisor_24 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_25 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_testee_26 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_27 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_divisor_28 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_divisor_29 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_30 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_testee_31 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_out_32 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_33 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_34 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_35 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_36 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_37 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_stop_38 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_testee_39 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_40 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_41 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_42 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_43 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_44 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_45 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_Main_Main_internal_0 data_1 +la $t0, data_1 +lw $t1, -0($fp) +lw $t2, -8($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Moving 2 to local_Main_Main_internal_2 +li $t1, 2 +sw $t1, -12($fp) +lw $t2, -0($fp) +# self . out <- SET local_Main_Main_internal_2 +sw $t1, 16($t2) +lw $t3, -16($fp) +# local_Main_Main_out_3 <- GET self . out +lw $t3, 16($t2) +# self . testee <- SET local_Main_Main_out_3 +sw $t3, 20($t2) +# self . divisor <- SET 0 +li $t9, 0 +sw $t9, 24($t2) +# self . stop <- SET 500 +li $t9, 500 +sw $t9, 28($t2) +lw $t4, -20($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t4, $v0 +sw $t0, -8($fp) +sw $t1, -12($fp) +sw $t2, -0($fp) +sw $t3, -16($fp) +sw $t4, -20($fp) +start__63: +li $t9, 1 +# If not 1 goto end__63 +beqz $t9, end__63 +lw $t0, -0($fp) +lw $t1, -28($fp) +# local_Main_Main_testee_6 <- GET self . testee +lw $t1, 20($t0) +lw $t2, -24($fp) +# local_Main_Main_internal_5 <- local_Main_Main_testee_6 + 1 +addi $t2, $t1, 1 +# self . testee <- SET local_Main_Main_internal_5 +sw $t2, 20($t0) +# self . divisor <- SET 2 +li $t9, 2 +sw $t9, 24($t0) +lw $t3, -32($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t3, $v0 +sw $t0, -0($fp) +sw $t1, -28($fp) +sw $t2, -24($fp) +sw $t3, -32($fp) +start__73: +lw $t0, -0($fp) +lw $t1, -40($fp) +# local_Main_Main_testee_9 <- GET self . testee +lw $t1, 20($t0) +lw $t2, -48($fp) +# local_Main_Main_divisor_11 <- GET self . divisor +lw $t2, 24($t0) +lw $t3, -52($fp) +# local_Main_Main_divisor_12 <- GET self . divisor +lw $t3, 24($t0) +lw $t4, -44($fp) +# local_Main_Main_internal_10 <- local_Main_Main_divisor_11 * local_Main_Main_divisor_12 +mult $t2, $t3 +mflo $t4 +lw $t5, -36($fp) +# local_Main_Main_internal_8 <- local_Main_Main_testee_9 < local_Main_Main_internal_10 +slt $t5, $t1, $t4 +# If local_Main_Main_internal_8 goto true__86 +sw $t0, -0($fp) +sw $t1, -40($fp) +sw $t2, -48($fp) +sw $t3, -52($fp) +sw $t4, -44($fp) +sw $t5, -36($fp) +bnez $t5, true__86 +lw $t0, -0($fp) +lw $t1, -68($fp) +# local_Main_Main_testee_16 <- GET self . testee +lw $t1, 20($t0) +lw $t2, -76($fp) +# local_Main_Main_divisor_18 <- GET self . divisor +lw $t2, 24($t0) +lw $t3, -84($fp) +# local_Main_Main_testee_20 <- GET self . testee +lw $t3, 20($t0) +lw $t4, -88($fp) +# local_Main_Main_divisor_21 <- GET self . divisor +lw $t4, 24($t0) +lw $t5, -80($fp) +# local_Main_Main_internal_19 <- local_Main_Main_testee_20 / local_Main_Main_divisor_21 +la $a0, zero_error +beqz $t4, .raise +div $t3, $t4 +mflo $t5 +lw $t6, -72($fp) +# local_Main_Main_internal_17 <- local_Main_Main_divisor_18 * local_Main_Main_internal_19 +mult $t2, $t5 +mflo $t6 +lw $t7, -64($fp) +# local_Main_Main_internal_15 <- local_Main_Main_testee_16 - local_Main_Main_internal_17 +sub $t7, $t1, $t6 +lw $a0, -60($fp) +# local_Main_Main_internal_14 <- local_Main_Main_internal_15 = 0 +li $t9, 0 +seq $a0, $t7, $t9 +# If local_Main_Main_internal_14 goto true__104 +sw $t0, -0($fp) +sw $t1, -68($fp) +sw $t2, -76($fp) +sw $t3, -84($fp) +sw $t4, -88($fp) +sw $t5, -80($fp) +sw $t6, -72($fp) +sw $t7, -64($fp) +sw $a0, -60($fp) +bnez $a0, true__104 +lw $t0, -92($fp) +# Moving 1 to local_Main_Main_internal_22 +li $t0, 1 +sw $t0, -92($fp) +sw $t0, -92($fp) +j end__104 +true__104: +lw $t0, -92($fp) +# Moving 0 to local_Main_Main_internal_22 +li $t0, 0 +sw $t0, -92($fp) +sw $t0, -92($fp) +end__104: +lw $t0, -92($fp) +lw $t1, -56($fp) +# Moving local_Main_Main_internal_22 to local_Main_Main_internal_13 +move $t1, $t0 +sw $t1, -56($fp) +sw $t0, -92($fp) +sw $t1, -56($fp) +j end__86 +true__86: +lw $t0, -56($fp) +# Moving 0 to local_Main_Main_internal_13 +li $t0, 0 +sw $t0, -56($fp) +sw $t0, -56($fp) +end__86: +lw $t0, -56($fp) +# If not local_Main_Main_internal_13 goto end__73 +sw $t0, -56($fp) +beqz $t0, end__73 +lw $t0, -0($fp) +lw $t1, -100($fp) +# local_Main_Main_divisor_24 <- GET self . divisor +lw $t1, 24($t0) +lw $t2, -96($fp) +# local_Main_Main_internal_23 <- local_Main_Main_divisor_24 + 1 +addi $t2, $t1, 1 +# self . divisor <- SET local_Main_Main_internal_23 +sw $t2, 24($t0) +lw $t3, -32($fp) +# Moving local_Main_Main_internal_23 to local_Main_Main_internal_7 +move $t3, $t2 +sw $t3, -32($fp) +sw $t0, -0($fp) +sw $t1, -100($fp) +sw $t2, -96($fp) +sw $t3, -32($fp) +j start__73 +end__73: +lw $t0, -0($fp) +lw $t1, -108($fp) +# local_Main_Main_testee_26 <- GET self . testee +lw $t1, 20($t0) +lw $t2, -116($fp) +# local_Main_Main_divisor_28 <- GET self . divisor +lw $t2, 24($t0) +lw $t3, -120($fp) +# local_Main_Main_divisor_29 <- GET self . divisor +lw $t3, 24($t0) +lw $t4, -112($fp) +# local_Main_Main_internal_27 <- local_Main_Main_divisor_28 * local_Main_Main_divisor_29 +mult $t2, $t3 +mflo $t4 +lw $t5, -104($fp) +# local_Main_Main_internal_25 <- local_Main_Main_testee_26 < local_Main_Main_internal_27 +slt $t5, $t1, $t4 +# If local_Main_Main_internal_25 goto true__135 +sw $t0, -0($fp) +sw $t1, -108($fp) +sw $t2, -116($fp) +sw $t3, -120($fp) +sw $t4, -112($fp) +sw $t5, -104($fp) +bnez $t5, true__135 +lw $t0, -124($fp) +# Moving 0 to local_Main_Main_internal_30 +li $t0, 0 +sw $t0, -124($fp) +sw $t0, -124($fp) +j end__135 +true__135: +lw $t0, -0($fp) +lw $t1, -128($fp) +# local_Main_Main_testee_31 <- GET self . testee +lw $t1, 20($t0) +# self . out <- SET local_Main_Main_testee_31 +sw $t1, 16($t0) +lw $t2, -132($fp) +# local_Main_Main_out_32 <- GET self . out +lw $t2, 16($t0) +lw $t3, -136($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_out_int_IO +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -128($fp) +sw $t2, -132($fp) +sw $t3, -136($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -136($fp) +# saves the return value +move $t0, $v0 +lw $t1, -140($fp) +# Saves in local_Main_Main_internal_34 data_2 +la $t1, data_2 +lw $t2, -0($fp) +lw $t3, -144($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -136($fp) +sw $t1, -140($fp) +sw $t2, -0($fp) +sw $t3, -144($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -144($fp) +# saves the return value +move $t0, $v0 +lw $t1, -148($fp) +# Moving local_Main_Main_internal_35 to local_Main_Main_internal_36 +move $t1, $t0 +sw $t1, -148($fp) +lw $t2, -124($fp) +# Moving local_Main_Main_internal_36 to local_Main_Main_internal_30 +move $t2, $t1 +sw $t2, -124($fp) +sw $t0, -144($fp) +sw $t1, -148($fp) +sw $t2, -124($fp) +end__135: +lw $t0, -0($fp) +lw $t1, -156($fp) +# local_Main_Main_stop_38 <- GET self . stop +lw $t1, 28($t0) +lw $t2, -160($fp) +# local_Main_Main_testee_39 <- GET self . testee +lw $t2, 20($t0) +lw $t3, -152($fp) +# local_Main_Main_internal_37 <- local_Main_Main_stop_38 <= local_Main_Main_testee_39 +sle $t3, $t1, $t2 +# If local_Main_Main_internal_37 goto true__164 +sw $t0, -0($fp) +sw $t1, -156($fp) +sw $t2, -160($fp) +sw $t3, -152($fp) +bnez $t3, true__164 +lw $t0, -168($fp) +# Saves in local_Main_Main_internal_41 data_3 +la $t0, data_3 +lw $t1, -164($fp) +# Moving local_Main_Main_internal_41 to local_Main_Main_internal_40 +move $t1, $t0 +sw $t1, -164($fp) +sw $t0, -168($fp) +sw $t1, -164($fp) +j end__164 +true__164: +lw $t0, -172($fp) +# Saves in local_Main_Main_internal_42 data_4 +la $t0, data_4 +lw $t1, -176($fp) +# Static Dispatch of the method abort +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -172($fp) +sw $t1, -176($fp) +# This function will consume the arguments +jal function_abort_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -176($fp) +# saves the return value +move $t0, $v0 +lw $t1, -164($fp) +# Moving local_Main_Main_internal_43 to local_Main_Main_internal_40 +move $t1, $t0 +sw $t1, -164($fp) +sw $t0, -176($fp) +sw $t1, -164($fp) +end__164: +lw $t0, -164($fp) +lw $t1, -180($fp) +# Moving local_Main_Main_internal_40 to local_Main_Main_internal_44 +move $t1, $t0 +sw $t1, -180($fp) +lw $t2, -20($fp) +# Moving local_Main_Main_internal_44 to local_Main_Main_internal_4 +move $t2, $t1 +sw $t2, -20($fp) +sw $t0, -164($fp) +sw $t1, -180($fp) +sw $t2, -20($fp) +j start__63 +end__63: +lw $t0, -20($fp) +lw $t1, -0($fp) +# self . m <- SET local_Main_Main_internal_4 +sw $t0, 32($t1) +lw $t2, -184($fp) +# Moving self to local_Main_Main_internal_45 +move $t2, $t1 +sw $t2, -184($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -0($fp) +sw $t2, -184($fp) +# Removing all locals from stack +addiu $sp, $sp, 188 +jr $ra + + +function_main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +li $v0, 0 +# Empty all used registers and saves them to memory +# Removing all locals from stack +addiu $sp, $sp, 4 +jr $ra + +# Raise exception method +.raise: +li $v0, 4 +syscall +li $v0, 17 +li $a0, 1 +syscall + +.data +abort_msg: .asciiz "Abort called from class " +new_line: .asciiz " +" +string_abort: .asciiz "Abort called from class String +" +int_abort: .asciiz "Abort called from class Int +" +bool_abort: .asciiz "Abort called from class Bool +" +type_Object: .asciiz "Object" +type_IO: .asciiz "IO" +type_String: .asciiz "String" +type_Int: .asciiz "Int" +type_Bool: .asciiz "Bool" +type_Main: .asciiz "Main" +type_Void: .asciiz "Void" +types: .word 0, 0, 0, 0, 0, 0 +data_0: .asciiz "Void" +data_1: .asciiz "2 is trivially prime. +" +data_2: .asciiz " is prime. +" +data_3: .asciiz "continue" +data_4: .asciiz "halt" +methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +zero_error: .asciiz "Division by zero error +" +case_void_error: .asciiz "Case on void error +" +dispatch_error: .asciiz "Dispatch on void error +" +case_error: .asciiz "Case statement without a matching branch error +" +index_error: .asciiz "Substring out of range error +" +heap_error: .asciiz "Heap overflow error +" \ No newline at end of file diff --git a/tests/codegen/print-cool.mips b/tests/codegen/print-cool.mips new file mode 100644 index 00000000..0dfa87c7 --- /dev/null +++ b/tests/codegen/print-cool.mips @@ -0,0 +1,1208 @@ +.text +.globl main +main: +# Save types directions in the types array +la $t9, types +# Save space to locate the type info +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_String +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 0($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Int +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 4($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Object +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 8($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Bool +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 12($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_IO +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 16($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Main +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 20($t9) +# Copying parents +lw $v0, 0($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 4($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 8($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 12($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 16($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +lw $v0, 20($t9) +lw $t8, 16($t9) +sw $t8, 4($v0) +# Save method directions in the methods array +la $v0, methods +la $t9, entry +sw $t9, 0($v0) +la $t9, function_abort_Object +sw $t9, 4($v0) +la $t9, function_type_name_Object +sw $t9, 8($v0) +la $t9, function_copy_Object +sw $t9, 12($v0) +la $t9, function_out_string_IO +sw $t9, 16($v0) +la $t9, function_out_int_IO +sw $t9, 20($v0) +la $t9, function_in_int_IO +sw $t9, 24($v0) +la $t9, function_in_string_IO +sw $t9, 28($v0) +la $t9, function_length_String +sw $t9, 32($v0) +la $t9, function_concat_String +sw $t9, 36($v0) +la $t9, function_substr_String +sw $t9, 40($v0) +la $t9, function_type_name_String +sw $t9, 44($v0) +la $t9, function_copy_String +sw $t9, 48($v0) +la $t9, function_type_name_Int +sw $t9, 52($v0) +la $t9, function_copy_Int +sw $t9, 56($v0) +la $t9, function_type_name_Bool +sw $t9, 60($v0) +la $t9, function_copy_Bool +sw $t9, 64($v0) +la $t9, function_abort_String +sw $t9, 68($v0) +la $t9, function_abort_Int +sw $t9, 72($v0) +la $t9, function_abort_Bool +sw $t9, 76($v0) +la $t9, function_main_Main +sw $t9, 80($v0) + +entry: +# Gets the params from the stack +move $fp, $sp +# Gets the frame pointer from the stack +# Updates stack pointer pushing local__internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local__internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 12 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Main +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 12 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 36 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_main_Main in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t0) +lw $t1, -4($fp) +# Static Dispatch of the method main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# This function will consume the arguments +jal function_main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +li $v0, 0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Object_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_abort_Object_self_0 +move $t1, $t0 +sw $t1, -4($fp) +# Exiting the program +li $t8, 0 +# Printing abort message +li $v0, 4 +la $a0, abort_msg +syscall +li $v0, 4 +lw $a0, 0($t0) +syscall +li $v0, 4 +la $a0, new_line +syscall +li $v0, 17 +move $a0, $t8 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_type_name_Object_result_0 <- Type of self +lw $t1, 0($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +lw $t9, 4($t0) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +move $a0, $t9 +syscall +move $t1, $v0 +# Loop to copy every field of the previous object +# t8 the register to loop +li $t8, 0 +loop_0: +# In t9 is stored the size of the object +bge $t8, $t9, exit_0 +lw $a0, ($t0) +sw $a0, ($v0) +addi $v0, $v0, 4 +addi $t0, $t0, 4 +# Increase loop counter +addi $t8, $t8, 4 +j loop_0 +exit_0: +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_out_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_string_String_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_string_String_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing a string +li $v0, 4 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_out_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value number +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_int_IO_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_int_IO_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing an int +li $v0, 1 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_in_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_int_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Reading a int +li $v0, 5 +syscall +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_in_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_string_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t0, $v0 +# Reading a string +# Putting buffer in a0 +move $a0, $t0 +# Putting length of string in a1 +li $a1, 356 +li $v0, 8 +syscall +# Walks to eliminate the newline +move $t9, $t0 +start_1: +lb $t8, 0($t9) +beqz $t8, end_1 +add $t9, $t9, 1 +j start_1 +end_1: +addiu $t9, $t9, -1 +sb $0, ($t9) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_length_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_length_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +move $t8, $t0 +# Determining the length of a string +loop_2: +lb $t9, 0($t8) +beq $t9, $zero, end_2 +addi $t8, $t8, 1 +j loop_2 +end_2: +sub $t1, $t8, $t0 +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_concat_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_concat_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -8($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +# Copy the first string to dest +move $a0, $t0 +move $a1, $t2 +sw $ra, ($sp) +addiu $sp, $sp, -4 +jal strcopier +# Concatenate second string on result buffer +move $a0, $t1 +move $a1, $v0 +jal strcopier +sb $0, 0($v0) +addiu $sp, $sp, 4 +lw $ra, ($sp) +j finish_3 +# Definition of strcopier +strcopier: +# In a0 is the source and in a1 is the destination +loop_3: +lb $t8, ($a0) +beq $t8, $zero, end_3 +addiu $a0, $a0, 1 +sb $t8, ($a1) +addiu $a1, $a1, 1 +b loop_3 +end_3: +move $v0, $a1 +jr $ra +finish_3: +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_substr_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value begin +addiu $fp, $fp, 4 +# Pops the register with the param value end +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_substr_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -12($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +lw $t3, -8($fp) +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t3 +start_4: +lb $t9, 0($t8) +beqz $t9, error_4 +addi $v0, 1 +bgt $v0, $t0, end_len_4 +addi $t8, 1 +j start_4 +end_len_4: +# Saving dest to iterate over him +move $v0, $t2 +loop_4: +sub $t9, $v0, $t2 +beq $t9, $t1, end_4 +lb $t9, 0($t8) +beqz $t9, error_4 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_4 +error_4: +la $a0, index_error +li $v0, 4 +move $a0, $t3 +syscall +li $v0, 1 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t1 +syscall +j .raise +end_4: +sb $0, 0($v0) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_String_result_0 type_String +la $t0, type_String +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_String_result_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +move $t8, $t0 +# Determining the length of a string +loop_5: +lb $t9, 0($t8) +beq $t9, $zero, end_5 +addi $t8, $t8, 1 +j loop_5 +end_5: +sub $t1, $t8, $t0 +lw $t2, -12($fp) +# local_copy_String_result_2 <- local_copy_String_result_1 - 1 +addi $t2, $t1, -1 +lw $t3, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t3, $v0 +li $t8, 0 +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t0 +start_6: +lb $t9, 0($t8) +beqz $t9, error_6 +addi $v0, 1 +bgt $v0, $t8, end_len_6 +addi $t8, 1 +j start_6 +end_len_6: +# Saving dest to iterate over him +move $v0, $t3 +loop_6: +sub $t9, $v0, $t3 +beq $t9, $t2, end_6 +lb $t9, 0($t8) +beqz $t9, error_6 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_6 +error_6: +la $a0, index_error +li $v0, 4 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t8 +syscall +li $v0, 1 +move $a0, $t2 +syscall +j .raise +end_6: +sb $0, 0($v0) +move $v0, $t3 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +sw $t3, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Int_result_0 type_Int +la $t0, type_Int +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_Int_result_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Bool_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Bool_result_0 type_Bool +la $t0, type_Bool +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_result_Bool_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_result_Bool_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_String_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self string_abort +la $t0, string_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Int_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self int_abort +la $t0, int_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Bool_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self bool_abort +la $t0, bool_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_main_Main_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_11 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 12 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Object +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 12 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 16 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 8($t8) +sw $v0, 12($t0) +lw $t1, -8($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_type_name_Object +lw $t8, 8($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Static Dispatch of the method substr +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +li $t9, 1 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +li $t9, 4 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -12($fp) +# This function will consume the arguments +jal function_substr_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $t1, -0($fp) +sw $t2, -16($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -20($fp) +# local_main_Main_internal_4 <- Type of self +lw $t2, 0($t1) +lw $t3, -24($fp) +# Saves in local_main_Main_internal_5 data_0 +la $t3, data_0 +# local_main_Main_internal_4 <- local_main_Main_internal_4 = local_main_Main_internal_5 +move $t8, $t2 +move $t9, $t3 +loop_7: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_7 +beqz $a1, mismatch_7 +seq $v0, $a0, $a1 +beqz $v0, mismatch_7 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_7 +mismatch_7: +li $v0, 0 +j end_7 +check_7: +bnez $a1, mismatch_7 +li $v0, 1 +end_7: +move $t2, $v0 +lw $t4, -28($fp) +# Static Dispatch of the method type_name +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -0($fp) +sw $t2, -20($fp) +sw $t3, -24($fp) +sw $t4, -28($fp) +# This function will consume the arguments +jal function_type_name_Bool +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -28($fp) +# saves the return value +move $t0, $v0 +lw $t1, -32($fp) +# Static Dispatch of the method substr +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +li $t9, 3 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +li $t9, 1 +sw $t9, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -28($fp) +sw $t1, -32($fp) +# This function will consume the arguments +jal function_substr_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -32($fp) +# saves the return value +move $t0, $v0 +lw $t1, -16($fp) +lw $t2, -36($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -32($fp) +sw $t1, -16($fp) +sw $t2, -36($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -36($fp) +# saves the return value +move $t0, $v0 +lw $t1, -40($fp) +# Saves in local_main_Main_internal_9 data_1 +la $t1, data_1 +lw $t2, -0($fp) +lw $t3, -44($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -36($fp) +sw $t1, -40($fp) +sw $t2, -0($fp) +sw $t3, -44($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -44($fp) +# saves the return value +move $t0, $v0 +lw $t1, -48($fp) +# Moving local_main_Main_internal_10 to local_main_Main_internal_11 +move $t1, $t0 +sw $t1, -48($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -44($fp) +sw $t1, -48($fp) +# Removing all locals from stack +addiu $sp, $sp, 52 +jr $ra + +# Raise exception method +.raise: +li $v0, 4 +syscall +li $v0, 17 +li $a0, 1 +syscall + +.data +abort_msg: .asciiz "Abort called from class " +new_line: .asciiz " +" +string_abort: .asciiz "Abort called from class String +" +int_abort: .asciiz "Abort called from class Int +" +bool_abort: .asciiz "Abort called from class Bool +" +type_Object: .asciiz "Object" +type_IO: .asciiz "IO" +type_String: .asciiz "String" +type_Int: .asciiz "Int" +type_Bool: .asciiz "Bool" +type_Main: .asciiz "Main" +type_Void: .asciiz "Void" +types: .word 0, 0, 0, 0, 0, 0 +data_0: .asciiz "Void" +data_1: .asciiz " +" +methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +zero_error: .asciiz "Division by zero error +" +case_void_error: .asciiz "Case on void error +" +dispatch_error: .asciiz "Dispatch on void error +" +case_error: .asciiz "Case statement without a matching branch error +" +index_error: .asciiz "Substring out of range error +" +heap_error: .asciiz "Heap overflow error +" \ No newline at end of file diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips new file mode 100644 index 00000000..bc85f12c --- /dev/null +++ b/tests/codegen/sort-list.mips @@ -0,0 +1,3688 @@ +.text +.globl main +main: +# Save types directions in the types array +la $t9, types +# Save space to locate the type info +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_String +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 0($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Int +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 4($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Object +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 8($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Bool +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 12($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_IO +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 16($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_List +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 20($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Cons +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 24($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Nil +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 28($t9) +# Allocating memory +li $v0, 9 +li $a0, 8 +syscall +# Filling table methods +la $t8, type_Main +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 32($t9) +# Copying parents +lw $v0, 0($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 4($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 8($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 12($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 16($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +lw $v0, 20($t9) +lw $t8, 16($t9) +sw $t8, 4($v0) +lw $v0, 24($t9) +lw $t8, 20($t9) +sw $t8, 4($v0) +lw $v0, 28($t9) +lw $t8, 20($t9) +sw $t8, 4($v0) +lw $v0, 32($t9) +lw $t8, 16($t9) +sw $t8, 4($v0) +# Save method directions in the methods array +la $v0, methods +la $t9, entry +sw $t9, 0($v0) +la $t9, function_abort_Object +sw $t9, 4($v0) +la $t9, function_type_name_Object +sw $t9, 8($v0) +la $t9, function_copy_Object +sw $t9, 12($v0) +la $t9, function_out_string_IO +sw $t9, 16($v0) +la $t9, function_out_int_IO +sw $t9, 20($v0) +la $t9, function_in_int_IO +sw $t9, 24($v0) +la $t9, function_in_string_IO +sw $t9, 28($v0) +la $t9, function_length_String +sw $t9, 32($v0) +la $t9, function_concat_String +sw $t9, 36($v0) +la $t9, function_substr_String +sw $t9, 40($v0) +la $t9, function_type_name_String +sw $t9, 44($v0) +la $t9, function_copy_String +sw $t9, 48($v0) +la $t9, function_type_name_Int +sw $t9, 52($v0) +la $t9, function_copy_Int +sw $t9, 56($v0) +la $t9, function_type_name_Bool +sw $t9, 60($v0) +la $t9, function_copy_Bool +sw $t9, 64($v0) +la $t9, function_abort_String +sw $t9, 68($v0) +la $t9, function_abort_Int +sw $t9, 72($v0) +la $t9, function_abort_Bool +sw $t9, 76($v0) +la $t9, function_isNil_List +sw $t9, 80($v0) +la $t9, function_cons_List +sw $t9, 84($v0) +la $t9, function_car_List +sw $t9, 88($v0) +la $t9, function_cdr_List +sw $t9, 92($v0) +la $t9, function_rev_List +sw $t9, 96($v0) +la $t9, function_sort_List +sw $t9, 100($v0) +la $t9, function_insert_List +sw $t9, 104($v0) +la $t9, function_rcons_List +sw $t9, 108($v0) +la $t9, function_print_list_List +sw $t9, 112($v0) +la $t9, function_Cons_Cons +sw $t9, 116($v0) +la $t9, function_isNil_Cons +sw $t9, 120($v0) +la $t9, function_init_Cons +sw $t9, 124($v0) +la $t9, function_car_Cons +sw $t9, 128($v0) +la $t9, function_cdr_Cons +sw $t9, 132($v0) +la $t9, function_rev_Cons +sw $t9, 136($v0) +la $t9, function_sort_Cons +sw $t9, 140($v0) +la $t9, function_insert_Cons +sw $t9, 144($v0) +la $t9, function_rcons_Cons +sw $t9, 148($v0) +la $t9, function_print_list_Cons +sw $t9, 152($v0) +la $t9, function_isNil_Nil +sw $t9, 156($v0) +la $t9, function_rev_Nil +sw $t9, 160($v0) +la $t9, function_sort_Nil +sw $t9, 164($v0) +la $t9, function_insert_Nil +sw $t9, 168($v0) +la $t9, function_rcons_Nil +sw $t9, 172($v0) +la $t9, function_print_list_Nil +sw $t9, 176($v0) +la $t9, function_Main_Main +sw $t9, 180($v0) +la $t9, function_iota_Main +sw $t9, 184($v0) +la $t9, function_main_Main +sw $t9, 188($v0) + +entry: +# Gets the params from the stack +move $fp, $sp +# Gets the frame pointer from the stack +# Updates stack pointer pushing local__internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local__internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Main +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 44 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_iota_Main in t9 +lw $t9, 184($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_main_Main in t9 +lw $t9, 188($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_Main_Main in t9 +lw $t9, 180($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 32($t8) +sw $v0, 12($t0) +# Static Dispatch of the method Main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +# This function will consume the arguments +jal function_Main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# Static Dispatch of the method main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +li $v0, 0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Object_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_abort_Object_self_0 +move $t1, $t0 +sw $t1, -4($fp) +# Exiting the program +li $t8, 0 +# Printing abort message +li $v0, 4 +la $a0, abort_msg +syscall +li $v0, 4 +lw $a0, 0($t0) +syscall +li $v0, 4 +la $a0, new_line +syscall +li $v0, 17 +move $a0, $t8 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_type_name_Object_result_0 <- Type of self +lw $t1, 0($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +lw $t9, 4($t0) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +move $a0, $t9 +syscall +move $t1, $v0 +# Loop to copy every field of the previous object +# t8 the register to loop +li $t8, 0 +loop_0: +# In t9 is stored the size of the object +bge $t8, $t9, exit_0 +lw $a0, ($t0) +sw $a0, ($v0) +addi $v0, $v0, 4 +addi $t0, $t0, 4 +# Increase loop counter +addi $t8, $t8, 4 +j loop_0 +exit_0: +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_out_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_string_String_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_string_String_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing a string +li $v0, 4 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_out_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value number +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_int_IO_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_int_IO_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing an int +li $v0, 1 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_in_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_int_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Reading a int +li $v0, 5 +syscall +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_in_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_string_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t0, $v0 +# Reading a string +# Putting buffer in a0 +move $a0, $t0 +# Putting length of string in a1 +li $a1, 356 +li $v0, 8 +syscall +# Walks to eliminate the newline +move $t9, $t0 +start_1: +lb $t8, 0($t9) +beqz $t8, end_1 +add $t9, $t9, 1 +j start_1 +end_1: +addiu $t9, $t9, -1 +sb $0, ($t9) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_length_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_length_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +move $t8, $t0 +# Determining the length of a string +loop_2: +lb $t9, 0($t8) +beq $t9, $zero, end_2 +addi $t8, $t8, 1 +j loop_2 +end_2: +sub $t1, $t8, $t0 +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_concat_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_concat_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -8($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +# Copy the first string to dest +move $a0, $t0 +move $a1, $t2 +sw $ra, ($sp) +addiu $sp, $sp, -4 +jal strcopier +# Concatenate second string on result buffer +move $a0, $t1 +move $a1, $v0 +jal strcopier +sb $0, 0($v0) +addiu $sp, $sp, 4 +lw $ra, ($sp) +j finish_3 +# Definition of strcopier +strcopier: +# In a0 is the source and in a1 is the destination +loop_3: +lb $t8, ($a0) +beq $t8, $zero, end_3 +addiu $a0, $a0, 1 +sb $t8, ($a1) +addiu $a1, $a1, 1 +b loop_3 +end_3: +move $v0, $a1 +jr $ra +finish_3: +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_substr_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value begin +addiu $fp, $fp, 4 +# Pops the register with the param value end +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_substr_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -12($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +lw $t3, -8($fp) +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t3 +start_4: +lb $t9, 0($t8) +beqz $t9, error_4 +addi $v0, 1 +bgt $v0, $t0, end_len_4 +addi $t8, 1 +j start_4 +end_len_4: +# Saving dest to iterate over him +move $v0, $t2 +loop_4: +sub $t9, $v0, $t2 +beq $t9, $t1, end_4 +lb $t9, 0($t8) +beqz $t9, error_4 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_4 +error_4: +la $a0, index_error +li $v0, 4 +move $a0, $t3 +syscall +li $v0, 1 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t1 +syscall +j .raise +end_4: +sb $0, 0($v0) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_String_result_0 type_String +la $t0, type_String +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_String_result_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_copy_String_result_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -8($fp) +move $t8, $t0 +# Determining the length of a string +loop_5: +lb $t9, 0($t8) +beq $t9, $zero, end_5 +addi $t8, $t8, 1 +j loop_5 +end_5: +sub $t1, $t8, $t0 +lw $t2, -12($fp) +# local_copy_String_result_2 <- local_copy_String_result_1 - 1 +addi $t2, $t1, -1 +lw $t3, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t3, $v0 +li $t8, 0 +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t0 +start_6: +lb $t9, 0($t8) +beqz $t9, error_6 +addi $v0, 1 +bgt $v0, $t8, end_len_6 +addi $t8, 1 +j start_6 +end_len_6: +# Saving dest to iterate over him +move $v0, $t3 +loop_6: +sub $t9, $v0, $t3 +beq $t9, $t2, end_6 +lb $t9, 0($t8) +beqz $t9, error_6 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_6 +error_6: +la $a0, index_error +li $v0, 4 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t8 +syscall +li $v0, 1 +move $a0, $t2 +syscall +j .raise +end_6: +sb $0, 0($v0) +move $v0, $t3 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +sw $t3, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Int_result_0 type_Int +la $t0, type_Int +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_Int_result_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Bool_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Bool_result_0 type_Bool +la $t0, type_Bool +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_result_Bool_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_result_Bool_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_String_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self string_abort +la $t0, string_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Int_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self int_abort +la $t0, int_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Bool_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self bool_abort +la $t0, bool_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_isNil_List: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_isNil_List_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_isNil_List_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_abort_Object +lw $t8, 4($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# Moving 1 to local_isNil_List_internal_1 +li $t1, 1 +sw $t1, -8($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_cons_List: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value hd +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_cons_List_new_cell_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cons_List_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cons_List_internal_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -12($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 20 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Cons +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 20 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 76 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_isNil_Cons in t9 +lw $t9, 120($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_cons_List in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_car_Cons in t9 +lw $t9, 128($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_cdr_Cons in t9 +lw $t9, 132($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_rev_Cons in t9 +lw $t9, 136($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_sort_Cons in t9 +lw $t9, 140($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_insert_Cons in t9 +lw $t9, 144($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +# Save the direction of the method function_rcons_Cons in t9 +lw $t9, 148($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 60($v0) +# Save the direction of the method function_print_list_Cons in t9 +lw $t9, 152($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 64($v0) +# Save the direction of the method function_init_Cons in t9 +lw $t9, 124($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 68($v0) +# Save the direction of the method function_Cons_Cons in t9 +lw $t9, 116($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 72($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t0) +# Static Dispatch of the method Cons +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +# This function will consume the arguments +jal function_Cons_Cons +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# Moving local_cons_List_internal_1 to local_cons_List_new_cell_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_init_Cons +lw $t8, 68($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t3, -4($fp) +sw $t3, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t4, -0($fp) +sw $t4, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $t1, -8($fp) +sw $t2, -16($fp) +sw $t3, -4($fp) +sw $t4, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +# Removing all locals from stack +addiu $sp, $sp, 20 +jr $ra + + +function_car_List: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_car_List_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_car_List_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_car_List_internal_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_abort_Object +lw $t8, 4($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 12 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Int +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 12 +sw $t9, 4($v0) +move $t1, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 16 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Int in t9 +lw $t9, 72($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Int in t9 +lw $t9, 52($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Int in t9 +lw $t9, 56($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +sw $v0, 8($t1) +# Adding Type Info addr +la $t8, types +lw $v0, 4($t8) +sw $v0, 12($t1) +lw $t2, -12($fp) +# Moving local_car_List_internal_1 to local_car_List_internal_2 +move $t2, $t1 +sw $t2, -12($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_cdr_List: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_cdr_List_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cdr_List_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_cdr_List_internal_2 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_abort_Object +lw $t8, 4($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 12 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_List +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 12 +sw $t9, 4($v0) +move $t1, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 68 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_isNil_List in t9 +lw $t9, 80($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_cons_List in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_car_List in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_cdr_List in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_rev_List in t9 +lw $t9, 96($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_sort_List in t9 +lw $t9, 100($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_insert_List in t9 +lw $t9, 104($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +# Save the direction of the method function_rcons_List in t9 +lw $t9, 108($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 60($v0) +# Save the direction of the method function_print_list_List in t9 +lw $t9, 112($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 64($v0) +sw $v0, 8($t1) +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 12($t1) +lw $t2, -12($fp) +# Moving local_cdr_List_internal_1 to local_cdr_List_internal_2 +move $t2, $t1 +sw $t2, -12($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_rev_List: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_rev_List_internal_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_cdr_List +lw $t8, 44($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_sort_List: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_sort_List_internal_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_cdr_List +lw $t8, 44($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_insert_List: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value i +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_insert_List_internal_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_cdr_List +lw $t8, 44($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_rcons_List: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value i +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_rcons_List_internal_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_cdr_List +lw $t8, 44($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_print_list_List: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_print_list_List_internal_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_abort_Object +lw $t8, 4($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_Cons_Cons: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_Cons_Cons_xcdr_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Cons_Cons_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# self . xcar <- SET 0 +li $t9, 0 +sw $t9, 16($t0) +lw $t1, -4($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t1, $v0 +# self . xcdr <- SET local_Cons_Cons_xcdr_0 +sw $t1, 20($t0) +lw $t2, -8($fp) +# Moving self to local_Cons_Cons_internal_1 +move $t2, $t0 +sw $t2, -8($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_isNil_Cons: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +li $v0, 0 +# Empty all used registers and saves them to memory +# Removing all locals from stack +addiu $sp, $sp, 4 +jr $ra + + +function_init_Cons: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value hd +addiu $fp, $fp, 4 +# Pops the register with the param value tl +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_init_Cons_internal_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# self . xcar <- SET hd +sw $t0, 16($t1) +lw $t2, -0($fp) +# self . xcdr <- SET tl +sw $t2, 20($t1) +lw $t3, -12($fp) +# Moving self to local_init_Cons_internal_0 +move $t3, $t1 +sw $t3, -12($fp) +move $v0, $t3 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +sw $t3, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_car_Cons: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_car_Cons_xcar_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_car_Cons_xcar_0 <- GET self . xcar +lw $t1, 16($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_cdr_Cons: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_cdr_Cons_xcdr_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_cdr_Cons_xcdr_0 <- GET self . xcdr +lw $t1, 20($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_rev_Cons: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_rev_Cons_xcdr_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_rev_Cons_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_rev_Cons_xcar_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_rev_Cons_internal_3 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_rev_Cons_xcdr_0 <- GET self . xcdr +lw $t1, 20($t0) +lw $t2, -8($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_rev_List +lw $t8, 48($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -12($fp) +# local_rev_Cons_xcar_2 <- GET self . xcar +lw $t2, 16($t1) +lw $t3, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_rcons_List +lw $t8, 60($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -16($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +# Removing all locals from stack +addiu $sp, $sp, 20 +jr $ra + + +function_sort_Cons: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_sort_Cons_xcdr_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_sort_Cons_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_sort_Cons_xcar_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_sort_Cons_internal_3 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_sort_Cons_xcdr_0 <- GET self . xcdr +lw $t1, 20($t0) +lw $t2, -8($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_sort_List +lw $t8, 52($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -12($fp) +# local_sort_Cons_xcar_2 <- GET self . xcar +lw $t2, 16($t1) +lw $t3, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_insert_List +lw $t8, 56($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -16($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +# Removing all locals from stack +addiu $sp, $sp, 20 +jr $ra + + +function_insert_Cons: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value i +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_insert_Cons_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_insert_Cons_xcar_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_insert_Cons_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_insert_Cons_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_insert_Cons_xcar_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_insert_Cons_xcdr_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_insert_Cons_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_insert_Cons_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_insert_Cons_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_insert_Cons_internal_9 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -12($fp) +# local_insert_Cons_xcar_1 <- GET self . xcar +lw $t1, 16($t0) +lw $t2, -0($fp) +lw $t3, -8($fp) +# local_insert_Cons_internal_0 <- i < local_insert_Cons_xcar_1 +slt $t3, $t2, $t1 +# If local_insert_Cons_internal_0 goto true__179 +sw $t0, -4($fp) +sw $t1, -12($fp) +sw $t2, -0($fp) +sw $t3, -8($fp) +bnez $t3, true__179 +lw $t0, -20($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 20 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Cons +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 20 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 76 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_isNil_Cons in t9 +lw $t9, 120($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_cons_List in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_car_Cons in t9 +lw $t9, 128($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_cdr_Cons in t9 +lw $t9, 132($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_rev_Cons in t9 +lw $t9, 136($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_sort_Cons in t9 +lw $t9, 140($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_insert_Cons in t9 +lw $t9, 144($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +# Save the direction of the method function_rcons_Cons in t9 +lw $t9, 148($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 60($v0) +# Save the direction of the method function_print_list_Cons in t9 +lw $t9, 152($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 64($v0) +# Save the direction of the method function_init_Cons in t9 +lw $t9, 124($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 68($v0) +# Save the direction of the method function_Cons_Cons in t9 +lw $t9, 116($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 72($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t0) +# Static Dispatch of the method Cons +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +# This function will consume the arguments +jal function_Cons_Cons +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +lw $t2, -24($fp) +# local_insert_Cons_xcar_4 <- GET self . xcar +lw $t2, 16($t1) +lw $t3, -28($fp) +# local_insert_Cons_xcdr_5 <- GET self . xcdr +lw $t3, 20($t1) +lw $t4, -32($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_insert_List +lw $t8, 56($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t5, -0($fp) +sw $t5, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -4($fp) +sw $t2, -24($fp) +sw $t3, -28($fp) +sw $t4, -32($fp) +sw $t5, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -32($fp) +# saves the return value +move $t0, $v0 +lw $t1, -20($fp) +lw $t2, -36($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_init_Cons +lw $t8, 68($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t3, -24($fp) +sw $t3, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -32($fp) +sw $t1, -20($fp) +sw $t2, -36($fp) +sw $t3, -24($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -36($fp) +# saves the return value +move $t0, $v0 +lw $t1, -16($fp) +# Moving local_insert_Cons_internal_7 to local_insert_Cons_internal_2 +move $t1, $t0 +sw $t1, -16($fp) +sw $t0, -36($fp) +sw $t1, -16($fp) +j end__179 +true__179: +lw $t0, -40($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 20 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Cons +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 20 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 76 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_isNil_Cons in t9 +lw $t9, 120($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_cons_List in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_car_Cons in t9 +lw $t9, 128($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_cdr_Cons in t9 +lw $t9, 132($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_rev_Cons in t9 +lw $t9, 136($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_sort_Cons in t9 +lw $t9, 140($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_insert_Cons in t9 +lw $t9, 144($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +# Save the direction of the method function_rcons_Cons in t9 +lw $t9, 148($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 60($v0) +# Save the direction of the method function_print_list_Cons in t9 +lw $t9, 152($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 64($v0) +# Save the direction of the method function_init_Cons in t9 +lw $t9, 124($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 68($v0) +# Save the direction of the method function_Cons_Cons in t9 +lw $t9, 116($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 72($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t0) +# Static Dispatch of the method Cons +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -40($fp) +# This function will consume the arguments +jal function_Cons_Cons +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -40($fp) +# saves the return value +move $t0, $v0 +lw $t1, -44($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_init_Cons +lw $t8, 68($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -4($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t3, -0($fp) +sw $t3, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -40($fp) +sw $t1, -44($fp) +sw $t2, -4($fp) +sw $t3, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -44($fp) +# saves the return value +move $t0, $v0 +lw $t1, -16($fp) +# Moving local_insert_Cons_internal_9 to local_insert_Cons_internal_2 +move $t1, $t0 +sw $t1, -16($fp) +sw $t0, -44($fp) +sw $t1, -16($fp) +end__179: +lw $t0, -16($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +# Removing all locals from stack +addiu $sp, $sp, 48 +jr $ra + + +function_rcons_Cons: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value i +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_rcons_Cons_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_rcons_Cons_xcar_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_rcons_Cons_xcdr_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_rcons_Cons_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_rcons_Cons_internal_4 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 20 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Cons +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 20 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 76 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_isNil_Cons in t9 +lw $t9, 120($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_cons_List in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_car_Cons in t9 +lw $t9, 128($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_cdr_Cons in t9 +lw $t9, 132($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_rev_Cons in t9 +lw $t9, 136($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_sort_Cons in t9 +lw $t9, 140($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_insert_Cons in t9 +lw $t9, 144($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +# Save the direction of the method function_rcons_Cons in t9 +lw $t9, 148($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 60($v0) +# Save the direction of the method function_print_list_Cons in t9 +lw $t9, 152($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 64($v0) +# Save the direction of the method function_init_Cons in t9 +lw $t9, 124($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 68($v0) +# Save the direction of the method function_Cons_Cons in t9 +lw $t9, 116($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 72($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t0) +# Static Dispatch of the method Cons +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +# This function will consume the arguments +jal function_Cons_Cons +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +lw $t2, -12($fp) +# local_rcons_Cons_xcar_1 <- GET self . xcar +lw $t2, 16($t1) +lw $t3, -16($fp) +# local_rcons_Cons_xcdr_2 <- GET self . xcdr +lw $t3, 20($t1) +lw $t4, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t3) +# Saves in t8 the direction of function_rcons_List +lw $t8, 60($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t5, -0($fp) +sw $t5, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t3, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -4($fp) +sw $t2, -12($fp) +sw $t3, -16($fp) +sw $t4, -20($fp) +sw $t5, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -8($fp) +lw $t2, -24($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_init_Cons +lw $t8, 68($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t3, -12($fp) +sw $t3, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -8($fp) +sw $t2, -24($fp) +sw $t3, -12($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -24($fp) +# saves the return value +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -24($fp) +# Removing all locals from stack +addiu $sp, $sp, 28 +jr $ra + + +function_print_list_Cons: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_print_list_Cons_xcar_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Cons_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Cons_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Cons_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Cons_xcdr_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Cons_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_print_list_Cons_internal_6 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_print_list_Cons_xcar_0 <- GET self . xcar +lw $t1, 16($t0) +lw $t2, -8($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_out_int_IO +lw $t8, 20($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Saves in local_print_list_Cons_internal_2 data_1 +la $t1, data_1 +lw $t2, -0($fp) +lw $t3, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -12($fp) +sw $t2, -0($fp) +sw $t3, -16($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -20($fp) +# local_print_list_Cons_xcdr_4 <- GET self . xcdr +lw $t2, 20($t1) +lw $t3, -24($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t2) +# Saves in t8 the direction of function_print_list_List +lw $t8, 64($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -0($fp) +sw $t2, -20($fp) +sw $t3, -24($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -24($fp) +# saves the return value +move $t0, $v0 +lw $t1, -28($fp) +# Moving local_print_list_Cons_internal_5 to local_print_list_Cons_internal_6 +move $t1, $t0 +sw $t1, -28($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -24($fp) +sw $t1, -28($fp) +# Removing all locals from stack +addiu $sp, $sp, 32 +jr $ra + + +function_isNil_Nil: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +li $v0, 1 +# Empty all used registers and saves them to memory +# Removing all locals from stack +addiu $sp, $sp, 4 +jr $ra + + +function_rev_Nil: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +lw $t0, -0($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 4 +jr $ra + + +function_sort_Nil: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +lw $t0, -0($fp) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 4 +jr $ra + + +function_insert_Nil: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value i +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_insert_Nil_internal_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_rcons_Nil +lw $t8, 60($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -0($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_rcons_Nil: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value i +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_rcons_Nil_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_rcons_Nil_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 20 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Cons +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 20 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 76 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_isNil_Cons in t9 +lw $t9, 120($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_cons_List in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_car_Cons in t9 +lw $t9, 128($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_cdr_Cons in t9 +lw $t9, 132($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_rev_Cons in t9 +lw $t9, 136($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_sort_Cons in t9 +lw $t9, 140($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_insert_Cons in t9 +lw $t9, 144($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +# Save the direction of the method function_rcons_Cons in t9 +lw $t9, 148($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 60($v0) +# Save the direction of the method function_print_list_Cons in t9 +lw $t9, 152($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 64($v0) +# Save the direction of the method function_init_Cons in t9 +lw $t9, 124($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 68($v0) +# Save the direction of the method function_Cons_Cons in t9 +lw $t9, 116($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 72($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t0) +# Static Dispatch of the method Cons +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +# This function will consume the arguments +jal function_Cons_Cons +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +lw $t1, -12($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_init_Cons +lw $t8, 68($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t2, -4($fp) +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t3, -0($fp) +sw $t3, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -12($fp) +sw $t2, -4($fp) +sw $t3, -0($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_print_list_Nil: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +li $v0, 1 +# Empty all used registers and saves them to memory +# Removing all locals from stack +addiu $sp, $sp, 4 +jr $ra + + +function_Main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_Main_Main_l_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t0, $v0 +lw $t1, -0($fp) +# self . l <- SET local_Main_Main_l_0 +sw $t0, 16($t1) +lw $t2, -8($fp) +# Moving self to local_Main_Main_internal_1 +move $t2, $t1 +sw $t2, -8($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_iota_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value i +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_iota_Main_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_iota_Main_j_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_iota_Main_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_iota_Main_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_iota_Main_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_iota_Main_l_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_iota_Main_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_iota_Main_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_iota_Main_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_iota_Main_l_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_iota_Main_internal_10 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 12 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Nil +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 12 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 68 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_isNil_Nil in t9 +lw $t9, 156($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_cons_List in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_car_List in t9 +lw $t9, 88($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_cdr_List in t9 +lw $t9, 92($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_rev_Nil in t9 +lw $t9, 160($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_sort_Nil in t9 +lw $t9, 164($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_insert_Nil in t9 +lw $t9, 168($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +# Save the direction of the method function_rcons_Nil in t9 +lw $t9, 172($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 60($v0) +# Save the direction of the method function_print_list_Nil in t9 +lw $t9, 176($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 64($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 28($t8) +sw $v0, 12($t0) +lw $t1, -4($fp) +# self . l <- SET local_iota_Main_internal_0 +sw $t0, 16($t1) +lw $t2, -12($fp) +# Moving 0 to local_iota_Main_j_1 +li $t2, 0 +sw $t2, -12($fp) +lw $t3, -16($fp) +# Initialize void node +li $a0, 4 +li $v0, 9 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Void +sw $t9, 0($v0) +move $t3, $v0 +sw $t0, -8($fp) +sw $t1, -4($fp) +sw $t2, -12($fp) +sw $t3, -16($fp) +start__299: +lw $t0, -12($fp) +lw $t1, -0($fp) +lw $t2, -20($fp) +# local_iota_Main_internal_3 <- local_iota_Main_j_1 < i +slt $t2, $t0, $t1 +# If not local_iota_Main_internal_3 goto end__299 +sw $t0, -12($fp) +sw $t1, -0($fp) +sw $t2, -20($fp) +beqz $t2, end__299 +lw $t0, -24($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 20 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Cons +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 20 +sw $t9, 4($v0) +move $t0, $v0 +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 76 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $t8, methods +# Save the direction of the method function_abort_Object in t9 +lw $t9, 4($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 4($v0) +# Save the direction of the method function_type_name_Object in t9 +lw $t9, 8($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 8($v0) +# Save the direction of the method function_copy_Object in t9 +lw $t9, 12($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 12($v0) +# Save the direction of the method function_out_string_IO in t9 +lw $t9, 16($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 16($v0) +# Save the direction of the method function_out_int_IO in t9 +lw $t9, 20($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 20($v0) +# Save the direction of the method function_in_string_IO in t9 +lw $t9, 28($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 24($v0) +# Save the direction of the method function_in_int_IO in t9 +lw $t9, 24($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 28($v0) +# Save the direction of the method function_isNil_Cons in t9 +lw $t9, 120($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 32($v0) +# Save the direction of the method function_cons_List in t9 +lw $t9, 84($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 36($v0) +# Save the direction of the method function_car_Cons in t9 +lw $t9, 128($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 40($v0) +# Save the direction of the method function_cdr_Cons in t9 +lw $t9, 132($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 44($v0) +# Save the direction of the method function_rev_Cons in t9 +lw $t9, 136($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 48($v0) +# Save the direction of the method function_sort_Cons in t9 +lw $t9, 140($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 52($v0) +# Save the direction of the method function_insert_Cons in t9 +lw $t9, 144($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 56($v0) +# Save the direction of the method function_rcons_Cons in t9 +lw $t9, 148($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 60($v0) +# Save the direction of the method function_print_list_Cons in t9 +lw $t9, 152($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 64($v0) +# Save the direction of the method function_init_Cons in t9 +lw $t9, 124($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 68($v0) +# Save the direction of the method function_Cons_Cons in t9 +lw $t9, 116($t8) +# Save the direction of the method in his position in the dispatch table +sw $t9, 72($v0) +sw $v0, 8($t0) +# Adding Type Info addr +la $t8, types +lw $v0, 24($t8) +sw $v0, 12($t0) +# Static Dispatch of the method Cons +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -24($fp) +# This function will consume the arguments +jal function_Cons_Cons +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -24($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +lw $t2, -28($fp) +# local_iota_Main_l_5 <- GET self . l +lw $t2, 16($t1) +lw $t3, -32($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_init_Cons +lw $t8, 68($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t2, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +lw $t4, -12($fp) +sw $t4, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -24($fp) +sw $t1, -4($fp) +sw $t2, -28($fp) +sw $t3, -32($fp) +sw $t4, -12($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -32($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +# self . l <- SET local_iota_Main_internal_6 +sw $t0, 16($t1) +lw $t2, -12($fp) +lw $t3, -36($fp) +# local_iota_Main_internal_7 <- local_iota_Main_j_1 + 1 +addi $t3, $t2, 1 +# Moving local_iota_Main_internal_7 to local_iota_Main_j_1 +move $t2, $t3 +sw $t2, -12($fp) +lw $t4, -40($fp) +# Moving local_iota_Main_internal_7 to local_iota_Main_internal_8 +move $t4, $t3 +sw $t4, -40($fp) +lw $t5, -16($fp) +# Moving local_iota_Main_internal_8 to local_iota_Main_internal_2 +move $t5, $t4 +sw $t5, -16($fp) +sw $t0, -32($fp) +sw $t1, -4($fp) +sw $t2, -12($fp) +sw $t3, -36($fp) +sw $t4, -40($fp) +sw $t5, -16($fp) +j start__299 +end__299: +lw $t0, -4($fp) +lw $t1, -44($fp) +# local_iota_Main_l_9 <- GET self . l +lw $t1, 16($t0) +lw $t2, -48($fp) +# Moving local_iota_Main_l_9 to local_iota_Main_internal_10 +move $t2, $t1 +sw $t2, -48($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -44($fp) +sw $t2, -48($fp) +# Removing all locals from stack +addiu $sp, $sp, 52 +jr $ra + + +function_main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_main_Main_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_7 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_main_Main_internal_0 data_2 +la $t0, data_2 +lw $t1, -0($fp) +lw $t2, -8($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -12($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_in_int_IO +lw $t8, 28($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -12($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -16($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t1) +# Saves in t8 the direction of function_iota_Main +lw $t8, 32($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -12($fp) +sw $t1, -0($fp) +sw $t2, -16($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -16($fp) +# saves the return value +move $t0, $v0 +lw $t1, -20($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_rev_List +lw $t8, 48($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -16($fp) +sw $t1, -20($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -20($fp) +# saves the return value +move $t0, $v0 +lw $t1, -24($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_sort_List +lw $t8, 52($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -24($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -24($fp) +# saves the return value +move $t0, $v0 +lw $t1, -28($fp) +# Find the actual name in the dispatch table +# Gets in t9 the actual direction of the dispatch table +lw $t9, 8($t0) +# Saves in t8 the direction of function_print_list_List +lw $t8, 64($t9) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -24($fp) +sw $t1, -28($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -28($fp) +# saves the return value +move $t0, $v0 +lw $t1, -32($fp) +# Moving local_main_Main_internal_6 to local_main_Main_internal_7 +move $t1, $t0 +sw $t1, -32($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -28($fp) +sw $t1, -32($fp) +# Removing all locals from stack +addiu $sp, $sp, 36 +jr $ra + +# Raise exception method +.raise: +li $v0, 4 +syscall +li $v0, 17 +li $a0, 1 +syscall + +.data +abort_msg: .asciiz "Abort called from class " +new_line: .asciiz " +" +string_abort: .asciiz "Abort called from class String +" +int_abort: .asciiz "Abort called from class Int +" +bool_abort: .asciiz "Abort called from class Bool +" +type_Object: .asciiz "Object" +type_IO: .asciiz "IO" +type_String: .asciiz "String" +type_Int: .asciiz "Int" +type_Bool: .asciiz "Bool" +type_List: .asciiz "List" +type_Cons: .asciiz "Cons" +type_Nil: .asciiz "Nil" +type_Main: .asciiz "Main" +type_Void: .asciiz "Void" +types: .word 0, 0, 0, 0, 0, 0, 0, 0, 0 +data_0: .asciiz "Void" +data_1: .asciiz " +" +data_2: .asciiz "How many numbers to sort? " +methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +zero_error: .asciiz "Division by zero error +" +case_void_error: .asciiz "Case on void error +" +dispatch_error: .asciiz "Dispatch on void error +" +case_error: .asciiz "Case statement without a matching branch error +" +index_error: .asciiz "Substring out of range error +" +heap_error: .asciiz "Heap overflow error +" \ No newline at end of file diff --git a/tests/codegen/test.cl b/tests/codegen/test.cl deleted file mode 100644 index 9c2e0fd8..00000000 --- a/tests/codegen/test.cl +++ /dev/null @@ -1,19 +0,0 @@ -class Main inherits IO { - - main () : Object { - { - let x:A <- new B in out_string( x.f().m() ); - let x:A <- new A in out_string( x.f().m() ); - } - - }; -}; - -class A { - m () : String { "A" }; - f () : A { new A }; -}; - -class B inherits A { - m () : String { "B" }; -}; diff --git a/tests/lexer_test.py b/tests/lexer_test.py index f492b195..013193af 100644 --- a/tests/lexer_test.py +++ b/tests/lexer_test.py @@ -3,7 +3,8 @@ from utils import compare_errors tests_dir = __file__.rpartition('/')[0] + '/lexer/' -tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] +# tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] +tests = [] @pytest.mark.lexer @pytest.mark.error diff --git a/tests/parser_test.py b/tests/parser_test.py index dc1205c3..b987ebb2 100644 --- a/tests/parser_test.py +++ b/tests/parser_test.py @@ -3,7 +3,8 @@ from utils import compare_errors tests_dir = __file__.rpartition('/')[0] + '/parser/' -tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] +# tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] +tests = [] @pytest.mark.parser @pytest.mark.error diff --git a/tests/semantic_test.py b/tests/semantic_test.py index 5e8a203a..bf8cd7bb 100644 --- a/tests/semantic_test.py +++ b/tests/semantic_test.py @@ -3,7 +3,8 @@ from utils import compare_errors, first_error_only_line tests_dir = __file__.rpartition('/')[0] + '/semantic/' -tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] +# tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] +tests = [] @pytest.mark.semantic @pytest.mark.error diff --git a/tests/utils/utils.py b/tests/utils/utils.py index ad6c8a7c..7a4c5db3 100644 --- a/tests/utils/utils.py +++ b/tests/utils/utils.py @@ -67,9 +67,8 @@ def compare_errors(compiler_path: str, cool_file_path: str, error_file_path: str (?:Loaded: .+\n)*''' def compare_outputs(compiler_path: str, cool_file_path: str, input_file_path: str, output_file_path: str, timeout=100): try: - print(compiler_path) - print(cool_file_path) sp = subprocess.run(['bash', compiler_path, cool_file_path], capture_output=True, timeout=timeout) + print(sp.stdout.decode()) assert sp.returncode == 0, TEST_MUST_COMPILE % get_file_name(cool_file_path) except subprocess.TimeoutExpired: assert False, COMPILER_TIMEOUT From 13ebdb4de1fc6cefb97435841f514ccfb987f9e2 Mon Sep 17 00:00:00 2001 From: Noly Fernandez Date: Sat, 28 Nov 2020 20:41:54 -0700 Subject: [PATCH 54/60] Getting ready to push. All tests passed :))) --- .../__pycache__/__init__.cpython-37.pyc | Bin 1140 -> 1140 bytes .../__pycache__/cil_ast.cpython-37.pyc | Bin 14939 -> 14939 bytes .../base_cil_visitor.cpython-37.pyc | Bin 10906 -> 10906 bytes .../cil_format_visitor.cpython-37.pyc | Bin 9397 -> 9397 bytes .../__pycache__/cil_visitor.cpython-37.pyc | Bin 12850 -> 12850 bytes src/cool_parser/output_parser/parselog.txt | 1658 ++++++++--------- src/semantic/visitors/type_checker.py | 3 +- tests/lexer_test.py | 3 +- tests/parser_test.py | 3 +- tests/semantic_test.py | 3 +- 10 files changed, 834 insertions(+), 836 deletions(-) diff --git a/src/codegen/__pycache__/__init__.cpython-37.pyc b/src/codegen/__pycache__/__init__.cpython-37.pyc index 7a39a2c28eb5b0171107f27d29de1aec7f324066..5e35dceefcee0f0e856ce9820e54d1cbe09f296a 100644 GIT binary patch delta 20 acmeyu@r8riiI ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',29,1046) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',29,1046) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',29,1046) @@ -6183,37 +6183,37 @@ yacc.py: 411:State : 91 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur true . LexToken(ccur,'}',29,1062) yacc.py: 471:Action : Reduce rule [atom -> true] with ['true'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur def_func semi id opar epsilon . LexToken(cpar,')',35,1254) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur def_func semi id opar param_list_empty . LexToken(cpar,')',35,1254) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur def_func semi id opar formals . LexToken(cpar,')',35,1254) @@ -6285,19 +6285,19 @@ yacc.py: 411:State : 113 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar . LexToken(cpar,')',35,1273) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar epsilon . LexToken(cpar,')',35,1273) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar arg_list_empty . LexToken(cpar,')',35,1273) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar args . LexToken(cpar,')',35,1273) @@ -6306,37 +6306,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar args cpar . LexToken(semi,';',35,1274) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['abort','(',[],')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'abort',35,1267), [])) + yacc.py: 506:Result : ((LexToken(id,'abort',35,1267), [])) yacc.py: 410: yacc.py: 411:State : 78 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur func_call . LexToken(semi,';',35,1274) - yacc.py: 471:Action : Reduce rule [factor -> func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar epsilon . LexToken(cpar,')',40,1389) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',40,1389) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals . LexToken(cpar,')',40,1389) @@ -6504,19 +6504,19 @@ yacc.py: 411:State : 113 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar . LexToken(cpar,')',40,1409) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar epsilon . LexToken(cpar,')',40,1409) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar arg_list_empty . LexToken(cpar,')',40,1409) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar args . LexToken(cpar,')',40,1409) @@ -6525,37 +6525,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar args cpar . LexToken(semi,';',40,1410) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['abort','(',[],')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'abort',40,1403), [])) + yacc.py: 506:Result : ((LexToken(id,'abort',40,1403), [])) yacc.py: 410: yacc.py: 411:State : 78 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur func_call . LexToken(semi,';',40,1410) - yacc.py: 471:Action : Reduce rule [factor -> func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['i',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'i',49,1777), LexToken(type ...) + yacc.py: 506:Result : ((LexToken(id,'i',49,1777), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar param . LexToken(cpar,')',49,1784) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',49,1784) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',49,1784) @@ -6734,37 +6734,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',50,1810) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Cons'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( id] with ['i'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['init','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'init',50,1812), [ id opar args cpar] with ['init','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'init',50,1812), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['cons','(',,')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['cons','(',,')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',53,1833) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',53,1833) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','List','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','List','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['car',':','Int'] and goto state 17 - yacc.py: 506:Result : ( ( id colon type] with ['cdr',':','List'] and goto state 17 - yacc.py: 506:Result : ( ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',76,2482) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',76,2482) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',76,2482) @@ -7097,37 +7097,37 @@ yacc.py: 411:State : 92 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur false . LexToken(ccur,'}',76,2499) yacc.py: 471:Action : Reduce rule [atom -> false] with ['false'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',78,2511) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',78,2511) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',78,2511) @@ -7191,37 +7191,37 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',78,2526) yacc.py: 471:Action : Reduce rule [atom -> id] with ['car'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',80,2538) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',80,2538) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',80,2538) @@ -7285,37 +7285,37 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',80,2554) yacc.py: 471:Action : Reduce rule [atom -> id] with ['cdr'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['i',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'i',82,2566), LexToken(type ...) + yacc.py: 506:Result : ((LexToken(id,'i',82,2566), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param . LexToken(comma,',',82,2573) @@ -7375,24 +7375,24 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma id colon type . LexToken(cpar,')',82,2586) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['rest',':','List'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'rest',82,2575), LexToken(t ...) + yacc.py: 506:Result : ((LexToken(id,'rest',82,2575), LexToken(t ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 - yacc.py: 506:Result : ([(LexToken(id,'rest',82,2575), LexToken( ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 + yacc.py: 506:Result : ([(LexToken(id,'rest',82,2575), LexToken( ...) yacc.py: 410: yacc.py: 411:State : 95 yacc.py: 430:Defaulted state 95: Reduce using 33 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param_list . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',82,2586) @@ -7429,42 +7429,42 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur ocur id larrow id . LexToken(semi,';',84,2615) yacc.py: 471:Action : Reduce rule [atom -> id] with ['i'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['car','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['car','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['rest'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['cdr','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['cdr','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['init','(',,')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['init','(',,')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',90,2655) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',90,2655) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Cons','inherits','List','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Cons','inherits','List','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['mylist',':','List'] and goto state 17 - yacc.py: 506:Result : ( ( id colon type] with ['l',':','List'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'l',107,3036), LexToken(typ ...) + yacc.py: 506:Result : ((LexToken(id,'l',107,3036), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param . LexToken(cpar,')',107,3044) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list . LexToken(cpar,')',107,3044) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',107,3044) @@ -7801,12 +7801,12 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if id . LexToken(dot,'.',108,3067) yacc.py: 471:Action : Reduce rule [atom -> id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar epsilon . LexToken(cpar,')',108,3074) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar arg_list_empty . LexToken(cpar,')',108,3074) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar args . LexToken(cpar,')',108,3074) @@ -7844,37 +7844,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar args cpar . LexToken(then,'then',108,3076) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['isNil','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'isNil',108,3068), [])) + yacc.py: 506:Result : ((LexToken(id,'isNil',108,3068), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot func_call . LexToken(then,'then',108,3076) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( string] with ['\n'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',108,3081), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',108,3081), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar epsilon . LexToken(cpar,')',110,3145) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar arg_list_empty . LexToken(cpar,')',110,3145) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar args . LexToken(cpar,')',110,3145) @@ -8043,48 +8043,48 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar args cpar . LexToken(cpar,')',110,3146) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['head','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'head',110,3140), [])) + yacc.py: 506:Result : ((LexToken(id,'head',110,3140), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot func_call . LexToken(cpar,')',110,3146) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_int','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_int',110,3130), [ id opar args cpar] with ['out_int','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_int',110,3130), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( string] with [' '] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',111,3155), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',111,3155), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar epsilon . LexToken(cpar,')',112,3196) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar arg_list_empty . LexToken(cpar,')',112,3196) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar args . LexToken(cpar,')',112,3196) @@ -8288,48 +8288,48 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar args cpar . LexToken(cpar,')',112,3197) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['tail','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'tail',112,3191), [])) + yacc.py: 506:Result : ((LexToken(id,'tail',112,3191), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot func_call . LexToken(cpar,')',112,3197) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['print_list','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'print_list',112,3178), [ id opar args cpar] with ['print_list','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'print_list',112,3178), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print_list','(',,')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print_list','(',,')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',126,3742) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',126,3742) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals . LexToken(cpar,')',126,3742) @@ -8540,12 +8540,12 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow new type . LexToken(dot,'.',128,3783) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','List'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3784), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3784), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3792), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3792), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3800), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3800), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3808), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3808), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3816), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3816), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar epsilon . LexToken(cpar,')',129,3851) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar arg_list_empty . LexToken(cpar,')',129,3851) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar args . LexToken(cpar,')',129,3851) @@ -9023,67 +9023,67 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar args cpar . LexToken(cpar,')',129,3852) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['isNil','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'isNil',129,3845), [])) + yacc.py: 506:Result : ((LexToken(id,'isNil',129,3845), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot func_call . LexToken(cpar,')',129,3852) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 124 - yacc.py: 506:Result : ( comp] with [] and goto state 124 + yacc.py: 506:Result : ( not expr] with ['not',] and goto state 77 - yacc.py: 506:Result : ( not expr] with ['not',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 133 - yacc.py: 506:Result : ( comp] with [] and goto state 133 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['print_list','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'print_list',131,3874), [ id opar args cpar] with ['print_list','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'print_list',131,3874), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar epsilon . LexToken(cpar,')',132,3924) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar arg_list_empty . LexToken(cpar,')',132,3924) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar args . LexToken(cpar,')',132,3924) @@ -9286,42 +9286,42 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar args cpar . LexToken(semi,';',132,3925) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['tail','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'tail',132,3919), [])) + yacc.py: 506:Result : ((LexToken(id,'tail',132,3919), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot func_call . LexToken(semi,';',132,3925) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 204 - yacc.py: 506:Result : ( comp] with [] and goto state 204 + yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 - yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi def_func semi epsilon . LexToken(ccur,'}',138,3957) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi def_func semi feature_list . LexToken(ccur,'}',138,3957) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( ( Date: Sun, 29 Nov 2020 11:32:38 -0700 Subject: [PATCH 55/60] Changing object representation a bi --- doc/report/report.aux | 36 +- doc/report/report.log | 2159 ++++---- doc/report/report.pdf | Bin 96857 -> 92388 bytes doc/report/report.synctex.gz | Bin 36066 -> 36200 bytes src/codegen/tools.py | 4 +- .../base_cil_visitor.cpython-37.pyc | Bin 10906 -> 10773 bytes src/codegen/visitors/base_cil_visitor.py | 8 +- src/codegen/visitors/base_mips_visitor.py | 44 +- src/codegen/visitors/mips_visitor.py | 86 +- src/cool_parser/output_parser/parselog.txt | 1658 +++---- src/semantic/types.py | 7 +- src/test.cl | 121 + src/test.mips | 3471 +++++++++++++ tests/codegen/arith.mips | 4380 +++++++---------- tests/codegen/atoi.mips | 1133 +++-- tests/codegen/book_list.mips | 1353 ++--- tests/codegen/cells.mips | 813 +-- tests/codegen/complex.mips | 678 +-- tests/codegen/fib.mips | 459 +- tests/codegen/graph.mips | 2726 +++++----- tests/codegen/hairyscary.mips | 3235 +++++------- tests/codegen/hello_world.mips | 409 +- tests/codegen/io.mips | 881 ++-- tests/codegen/life.mips | 2265 +++++---- tests/codegen/list.mips | 780 +-- tests/codegen/new_complex.mips | 787 +-- tests/codegen/palindrome.mips | 522 +- tests/codegen/primes.mips | 549 ++- tests/codegen/print-cool.mips | 466 +- tests/codegen/sort-list.mips | 1701 +++---- tests/semantic/arithmetic1.mips | 1689 +++++++ tests/semantic/arithmetic10.mips | 1707 +++++++ tests/semantic/arithmetic11.mips | 1717 +++++++ tests/semantic/arithmetic12.mips | 1718 +++++++ tests/semantic/arithmetic2.mips | 1689 +++++++ tests/semantic/arithmetic3.mips | 1693 +++++++ tests/semantic/arithmetic4.mips | 1688 +++++++ tests/semantic/arithmetic5.mips | 1714 +++++++ tests/semantic/arithmetic7.mips | 1681 +++++++ tests/semantic/arithmetic8.mips | 1707 +++++++ tests/semantic/arithmetic9.mips | 1687 +++++++ tests/semantic/assignment1.mips | 1090 ++++ tests/semantic/assignment2.mips | 1267 +++++ tests/semantic/assignment3.mips | 1285 +++++ tests/semantic/attributes1.mips | 1289 +++++ 45 files changed, 40654 insertions(+), 13698 deletions(-) create mode 100644 src/test.cl create mode 100644 src/test.mips create mode 100644 tests/semantic/arithmetic1.mips create mode 100644 tests/semantic/arithmetic10.mips create mode 100644 tests/semantic/arithmetic11.mips create mode 100644 tests/semantic/arithmetic12.mips create mode 100644 tests/semantic/arithmetic2.mips create mode 100644 tests/semantic/arithmetic3.mips create mode 100644 tests/semantic/arithmetic4.mips create mode 100644 tests/semantic/arithmetic5.mips create mode 100644 tests/semantic/arithmetic7.mips create mode 100644 tests/semantic/arithmetic8.mips create mode 100644 tests/semantic/arithmetic9.mips create mode 100644 tests/semantic/assignment1.mips create mode 100644 tests/semantic/assignment2.mips create mode 100644 tests/semantic/assignment3.mips create mode 100644 tests/semantic/attributes1.mips diff --git a/doc/report/report.aux b/doc/report/report.aux index 67a09bbc..9496583a 100644 --- a/doc/report/report.aux +++ b/doc/report/report.aux @@ -1,19 +1,17 @@ -\relax -\select@language{english} -\@writefile{toc}{\select@language{english}} -\@writefile{lof}{\select@language{english}} -\@writefile{lot}{\select@language{english}} -\@writefile{toc}{\contentsline {section}{\numberline {1}Uso del compilador}{1}} -\@writefile{toc}{\contentsline {section}{\numberline {2}Arquitectura del compilador}{1}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}An\IeC {\'a}lisis sint\IeC {\'a}ctico}{1}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.1}An\IeC {\'a}lisis l\IeC {\'e}xico}{2}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.2}Parsing}{2}} -\newlabel{lst:parser}{{1}{3}} -\@writefile{lol}{\contentsline {lstlisting}{\numberline {1}Funci\IeC {\'o}n de una regla gramatical en PLY}{3}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}An\IeC {\'a}lisis sem\IeC {\'a}ntico}{3}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Generaci\IeC {\'o}n de c\IeC {\'o}digo}{4}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.3.1}C\IeC {\'o}digo Intermedio}{4}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.3.2}C\IeC {\'o}digo de M\IeC {\'a}quina}{4}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}Optimizaci\IeC {\'o}n}{4}} -\@writefile{toc}{\contentsline {section}{\numberline {3}Problemas t\IeC {\'e}cnicos}{4}} -\@writefile{toc}{\contentsline {paragraph}{Detalles sobre cualquier problema te\IeC {\'o}rico o t\IeC {\'e}cnico interesante que haya necesitado resolver de forma particular.}{4}} +\relax +\providecommand*\new@tpo@label[2]{} +\babel@aux{english}{} +\@writefile{toc}{\contentsline {section}{\numberline {1}Uso del compilador}{1}} +\@writefile{toc}{\contentsline {section}{\numberline {2}Arquitectura del compilador}{1}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}An\IeC {\'a}lisis sint\IeC {\'a}ctico}{1}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.1}An\IeC {\'a}lisis l\IeC {\'e}xico}{2}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.2}Parsing}{2}} +\newlabel{lst:parser}{{1}{3}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {1}Funci\IeC {\'o}n de una regla gramatical en PLY}{3}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}An\IeC {\'a}lisis sem\IeC {\'a}ntico}{3}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Generaci\IeC {\'o}n de c\IeC {\'o}digo}{4}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.3.1}C\IeC {\'o}digo Intermedio}{4}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.3.2}C\IeC {\'o}digo de M\IeC {\'a}quina}{4}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}Optimizaci\IeC {\'o}n}{4}} +\@writefile{toc}{\contentsline {section}{\numberline {3}Problemas t\IeC {\'e}cnicos}{4}} +\@writefile{toc}{\contentsline {paragraph}{\nonumberline Detalles sobre cualquier problema te\IeC {\'o}rico o t\IeC {\'e}cnico interesante que haya necesitado resolver de forma particular.}{4}} diff --git a/doc/report/report.log b/doc/report/report.log index 5a73323f..5cf1d860 100644 --- a/doc/report/report.log +++ b/doc/report/report.log @@ -1,1002 +1,1157 @@ -This is pdfTeX, Version 3.1415926-2.3-1.40.12 (MiKTeX 2.9) (preloaded format=pdflatex 2020.8.28) 26 SEP 2020 22:33 -entering extended mode -**report.tex -(C:\Lo&Lo\__UH\__VER\CC\Compiler\cool-compiler-2020\doc\report\report.tex -LaTeX2e <2011/06/27> -Babel and hyphenation patterns for english, afrikaans, ancientgreek, ar -abic, armenian, assamese, basque, bengali, bokmal, bulgarian, catalan, coptic, -croatian, czech, danish, dutch, esperanto, estonian, farsi, finnish, french, ga -lician, german, german-x-2009-06-19, greek, gujarati, hindi, hungarian, iceland -ic, indonesian, interlingua, irish, italian, kannada, kurmanji, lao, latin, lat -vian, lithuanian, malayalam, marathi, mongolian, mongolianlmc, monogreek, ngerm -an, ngerman-x-2009-06-19, nynorsk, oriya, panjabi, pinyin, polish, portuguese, -romanian, russian, sanskrit, serbian, slovak, slovenian, spanish, swedish, swis -sgerman, tamil, telugu, turkish, turkmen, ukenglish, ukrainian, uppersorbian, u -senglishmax, welsh, loaded. -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\koma-script\scrartcl.cls" -Document Class: scrartcl 2011/06/16 v3.09a KOMA-Script document class (article) - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\koma-script\scrkbase.sty" -Package: scrkbase 2011/06/16 v3.09a KOMA-Script package (KOMA-Script-dependent -basics and keyval usage) - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\koma-script\scrbase.sty" -Package: scrbase 2011/06/16 v3.09a KOMA-Script package (KOMA-Script-independent - basics and keyval usage) - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\graphics\keyval.sty" -Package: keyval 1999/03/16 v1.13 key=value parser (DPC) -\KV@toks@=\toks14 -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\koma-script\scrlfile.sty" -Package: scrlfile 2011/03/09 v3.09 KOMA-Script package (loading files) - -Package scrlfile, 2011/03/09 v3.09 KOMA-Script package (loading files) - Copyright (C) Markus Kohm - -))) ("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\koma-script\tocbasic.sty" -Package: tocbasic 2011/05/30 v3.09a KOMA-Script package (handling toc-files) -) -Package tocbasic Info: omitting babel extension for `toc' -(tocbasic) because of feature `nobabel' available -(tocbasic) for `toc' on input line 115. -Package tocbasic Info: omitting babel extension for `lof' -(tocbasic) because of feature `nobabel' available -(tocbasic) for `lof' on input line 116. -Package tocbasic Info: omitting babel extension for `lot' -(tocbasic) because of feature `nobabel' available -(tocbasic) for `lot' on input line 117. -Package scrartcl Info: You've used obsolete option `11pt'. -(scrartcl) \KOMAExecuteOptions{fontsize=11pt} will be -(scrartcl) used instead. -(scrartcl) You may simply replace `11pt' -(scrartcl) by `fontsize=11pt'. -Class scrartcl Info: File `scrsize11pt.clo' used to setup font sizes on input l -ine 1247. - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\koma-script\scrsize11pt.clo" -File: scrsize11pt.clo 2011/06/16 v3.09a KOMA-Script font size class option (11p -t) -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\koma-script\typearea.sty" -Package: typearea 2011/06/16 v3.09a KOMA-Script package (type area) - -Package typearea, 2011/06/16 v3.09a KOMA-Script package (type area) - Copyright (C) Frank Neukam, 1992-1994 - Copyright (C) Markus Kohm, 1994- - -\ta@bcor=\skip41 -\ta@div=\count79 -\ta@hblk=\skip42 -\ta@vblk=\skip43 -\ta@temp=\skip44 -Package typearea Info: These are the values describing the layout: -(typearea) DIV = 10 -(typearea) BCOR = 0.0pt -(typearea) \paperwidth = 597.50793pt -(typearea) \textwidth = 418.25555pt -(typearea) DIV departure = -6% -(typearea) \evensidemargin = 17.3562pt -(typearea) \oddsidemargin = 17.3562pt -(typearea) \paperheight = 845.04694pt -(typearea) \textheight = 595.80026pt -(typearea) \topmargin = -25.16531pt -(typearea) \headheight = 17.0pt -(typearea) \headsep = 20.40001pt -(typearea) \topskip = 11.0pt -(typearea) \footskip = 47.60002pt -(typearea) \baselineskip = 13.6pt -(typearea) on input line 1139. -) -\c@part=\count80 -\c@section=\count81 -\c@subsection=\count82 -\c@subsubsection=\count83 -\c@paragraph=\count84 -\c@subparagraph=\count85 -\abovecaptionskip=\skip45 -\belowcaptionskip=\skip46 -\c@pti@nb@sid@b@x=\box26 -\c@figure=\count86 -\c@table=\count87 -\bibindent=\dimen102 -) (C:\Lo&Lo\__UH\__VER\CC\Compiler\cool-compiler-2020\doc\report\structure.tex -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\ams\math\amsmath.sty" -Package: amsmath 2000/07/18 v2.13 AMS math features -\@mathmargin=\skip47 - -For additional information on amsmath, use the `?' option. -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\ams\math\amstext.sty" -Package: amstext 2000/06/29 v2.01 - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\ams\math\amsgen.sty" -File: amsgen.sty 1999/11/30 v2.0 -\@emptytoks=\toks15 -\ex@=\dimen103 -)) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\ams\math\amsbsy.sty" -Package: amsbsy 1999/11/29 v1.2d -\pmbraise@=\dimen104 -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\ams\math\amsopn.sty" -Package: amsopn 1999/12/14 v2.01 operator names -) -\inf@bad=\count88 -LaTeX Info: Redefining \frac on input line 211. -\uproot@=\count89 -\leftroot@=\count90 -LaTeX Info: Redefining \overline on input line 307. -\classnum@=\count91 -\DOTSCASE@=\count92 -LaTeX Info: Redefining \ldots on input line 379. -LaTeX Info: Redefining \dots on input line 382. -LaTeX Info: Redefining \cdots on input line 467. -\Mathstrutbox@=\box27 -\strutbox@=\box28 -\big@size=\dimen105 -LaTeX Font Info: Redeclaring font encoding OML on input line 567. -LaTeX Font Info: Redeclaring font encoding OMS on input line 568. -\macc@depth=\count93 -\c@MaxMatrixCols=\count94 -\dotsspace@=\muskip10 -\c@parentequation=\count95 -\dspbrk@lvl=\count96 -\tag@help=\toks16 -\row@=\count97 -\column@=\count98 -\maxfields@=\count99 -\andhelp@=\toks17 -\eqnshift@=\dimen106 -\alignsep@=\dimen107 -\tagshift@=\dimen108 -\tagwidth@=\dimen109 -\totwidth@=\dimen110 -\lineht@=\dimen111 -\@envbody=\toks18 -\multlinegap=\skip48 -\multlinetaggap=\skip49 -\mathdisplay@stack=\toks19 -LaTeX Info: Redefining \[ on input line 2666. -LaTeX Info: Redefining \] on input line 2667. -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\amsfonts\amsfonts.sty" -Package: amsfonts 2009/06/22 v3.00 Basic AMSFonts support -\symAMSa=\mathgroup4 -\symAMSb=\mathgroup5 -LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' -(Font) U/euf/m/n --> U/euf/b/n on input line 96. -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\ams\classes\amsthm.sty" -Package: amsthm 2004/08/06 v2.20 -\thm@style=\toks20 -\thm@bodyfont=\toks21 -\thm@headfont=\toks22 -\thm@notefont=\toks23 -\thm@headpunct=\toks24 -\thm@preskip=\skip50 -\thm@postskip=\skip51 -\thm@headsep=\skip52 -\dth@everypar=\toks25 -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\listings\listings.sty" -\lst@mode=\count100 -\lst@gtempboxa=\box29 -\lst@token=\toks26 -\lst@length=\count101 -\lst@currlwidth=\dimen112 -\lst@column=\count102 -\lst@pos=\count103 -\lst@lostspace=\dimen113 -\lst@width=\dimen114 -\lst@newlines=\count104 -\lst@lineno=\count105 -\lst@maxwidth=\dimen115 - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\listings\lstmisc.sty" -File: lstmisc.sty 2007/02/22 1.4 (Carsten Heinz) -\c@lstnumber=\count106 -\lst@skipnumbers=\count107 -\lst@framebox=\box30 -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\listings\listings.cfg" -File: listings.cfg 2007/02/22 1.4 listings configuration -)) -Package: listings 2007/02/22 1.4 (Carsten Heinz) - -("C:\Program Files (x86)\MiKTeX 2.9\tex\generic\babel\babel.sty" -Package: babel 2008/07/08 v3.8m The Babel package - -************************************* -* Local config file bblopts.cfg used -* -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\00miktex\bblopts.cfg" -File: bblopts.cfg 2006/07/31 v1.0 MiKTeX 'babel' configuration -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\generic\babel\english.ldf" -Language: english 2005/03/30 v3.3o English support from the babel system - -("C:\Program Files (x86)\MiKTeX 2.9\tex\generic\babel\babel.def" -File: babel.def 2008/07/08 v3.8m Babel common definitions -\babel@savecnt=\count108 -\U@D=\dimen116 -) -\l@canadian = a dialect from \language\l@american -\l@australian = a dialect from \language\l@british -\l@newzealand = a dialect from \language\l@british -)) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\graphics\graphicx.sty" -Package: graphicx 1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR) - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\graphics\graphics.sty" -Package: graphics 2009/02/05 v1.0o Standard LaTeX Graphics (DPC,SPQR) - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\graphics\trig.sty" -Package: trig 1999/03/16 v1.09 sin cos tan (DPC) -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\00miktex\graphics.cfg" -File: graphics.cfg 2007/01/18 v1.5 graphics configuration of teTeX/TeXLive -) -Package graphics Info: Driver file: pdftex.def on input line 91. - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\pdftex-def\pdftex.def" -File: pdftex.def 2011/05/27 v0.06d Graphics/color for pdfTeX - -("C:\Program Files (x86)\MiKTeX 2.9\tex\generic\oberdiek\infwarerr.sty" -Package: infwarerr 2010/04/08 v1.3 Providing info/warning/message (HO) -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\generic\oberdiek\ltxcmds.sty" -Package: ltxcmds 2011/04/18 v1.20 LaTeX kernel commands for general use (HO) -) -\Gread@gobject=\count109 -)) -\Gin@req@height=\dimen117 -\Gin@req@width=\dimen118 -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\booktabs\booktabs.sty" -Package: booktabs 2005/04/14 v1.61803 publication quality tables -\heavyrulewidth=\dimen119 -\lightrulewidth=\dimen120 -\cmidrulewidth=\dimen121 -\belowrulesep=\dimen122 -\belowbottomsep=\dimen123 -\aboverulesep=\dimen124 -\abovetopsep=\dimen125 -\cmidrulesep=\dimen126 -\cmidrulekern=\dimen127 -\defaultaddspace=\dimen128 -\@cmidla=\count110 -\@cmidlb=\count111 -\@aboverulesep=\dimen129 -\@belowrulesep=\dimen130 -\@thisruleclass=\count112 -\@lastruleclass=\count113 -\@thisrulewidth=\dimen131 -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\enumitem\enumitem.sty" -Package: enumitem 2011/09/05 v3.5.1 Customized lists -\labelindent=\skip53 -\enit@outerparindent=\dimen132 -\enit@toks=\toks27 -\enit@inbox=\box31 -\enitdp@description=\count114 -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\geometry\geometry.sty" -Package: geometry 2010/09/12 v5.6 Page Geometry - -("C:\Program Files (x86)\MiKTeX 2.9\tex\generic\oberdiek\ifpdf.sty" -Package: ifpdf 2011/01/30 v2.3 Provides the ifpdf switch (HO) -Package ifpdf Info: pdfTeX in PDF mode is detected. -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\generic\oberdiek\ifvtex.sty" -Package: ifvtex 2010/03/01 v1.5 Switches for detecting VTeX and its modes (HO) -Package ifvtex Info: VTeX not detected. -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\generic\ifxetex\ifxetex.sty" -Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional -) -\Gm@cnth=\count115 -\Gm@cntv=\count116 -\c@Gm@tempcnt=\count117 -\Gm@bindingoffset=\dimen133 -\Gm@wd@mp=\dimen134 -\Gm@odd@mp=\dimen135 -\Gm@even@mp=\dimen136 -\Gm@layoutwidth=\dimen137 -\Gm@layoutheight=\dimen138 -\Gm@layouthoffset=\dimen139 -\Gm@layoutvoffset=\dimen140 -\Gm@dimlist=\toks28 - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\geometry\geometry.cfg")) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base\inputenc.sty" -Package: inputenc 2008/03/30 v1.1d Input encoding file -\inpenc@prehook=\toks29 -\inpenc@posthook=\toks30 - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base\utf8.def" -File: utf8.def 2008/04/05 v1.1m UTF-8 support for inputenc -Now handling font encoding OML ... -... no UTF-8 mapping file for font encoding OML -Now handling font encoding T1 ... -... processing UTF-8 mapping file for font encoding T1 - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base\t1enc.dfu" -File: t1enc.dfu 2008/04/05 v1.1m UTF-8 support for inputenc - defining Unicode char U+00A1 (decimal 161) - defining Unicode char U+00A3 (decimal 163) - defining Unicode char U+00AB (decimal 171) - defining Unicode char U+00BB (decimal 187) - defining Unicode char U+00BF (decimal 191) - defining Unicode char U+00C0 (decimal 192) - defining Unicode char U+00C1 (decimal 193) - defining Unicode char U+00C2 (decimal 194) - defining Unicode char U+00C3 (decimal 195) - defining Unicode char U+00C4 (decimal 196) - defining Unicode char U+00C5 (decimal 197) - defining Unicode char U+00C6 (decimal 198) - defining Unicode char U+00C7 (decimal 199) - defining Unicode char U+00C8 (decimal 200) - defining Unicode char U+00C9 (decimal 201) - defining Unicode char U+00CA (decimal 202) - defining Unicode char U+00CB (decimal 203) - defining Unicode char U+00CC (decimal 204) - defining Unicode char U+00CD (decimal 205) - defining Unicode char U+00CE (decimal 206) - defining Unicode char U+00CF (decimal 207) - defining Unicode char U+00D0 (decimal 208) - defining Unicode char U+00D1 (decimal 209) - defining Unicode char U+00D2 (decimal 210) - defining Unicode char U+00D3 (decimal 211) - defining Unicode char U+00D4 (decimal 212) - defining Unicode char U+00D5 (decimal 213) - defining Unicode char U+00D6 (decimal 214) - defining Unicode char U+00D8 (decimal 216) - defining Unicode char U+00D9 (decimal 217) - defining Unicode char U+00DA (decimal 218) - defining Unicode char U+00DB (decimal 219) - defining Unicode char U+00DC (decimal 220) - defining Unicode char U+00DD (decimal 221) - defining Unicode char U+00DE (decimal 222) - defining Unicode char U+00DF (decimal 223) - defining Unicode char U+00E0 (decimal 224) - defining Unicode char U+00E1 (decimal 225) - defining Unicode char U+00E2 (decimal 226) - defining Unicode char U+00E3 (decimal 227) - defining Unicode char U+00E4 (decimal 228) - defining Unicode char U+00E5 (decimal 229) - defining Unicode char U+00E6 (decimal 230) - defining Unicode char U+00E7 (decimal 231) - defining Unicode char U+00E8 (decimal 232) - defining Unicode char U+00E9 (decimal 233) - defining Unicode char U+00EA (decimal 234) - defining Unicode char U+00EB (decimal 235) - defining Unicode char U+00EC (decimal 236) - defining Unicode char U+00ED (decimal 237) - defining Unicode char U+00EE (decimal 238) - defining Unicode char U+00EF (decimal 239) - defining Unicode char U+00F0 (decimal 240) - defining Unicode char U+00F1 (decimal 241) - defining Unicode char U+00F2 (decimal 242) - defining Unicode char U+00F3 (decimal 243) - defining Unicode char U+00F4 (decimal 244) - defining Unicode char U+00F5 (decimal 245) - defining Unicode char U+00F6 (decimal 246) - defining Unicode char U+00F8 (decimal 248) - defining Unicode char U+00F9 (decimal 249) - defining Unicode char U+00FA (decimal 250) - defining Unicode char U+00FB (decimal 251) - defining Unicode char U+00FC (decimal 252) - defining Unicode char U+00FD (decimal 253) - defining Unicode char U+00FE (decimal 254) - defining Unicode char U+00FF (decimal 255) - defining Unicode char U+0102 (decimal 258) - defining Unicode char U+0103 (decimal 259) - defining Unicode char U+0104 (decimal 260) - defining Unicode char U+0105 (decimal 261) - defining Unicode char U+0106 (decimal 262) - defining Unicode char U+0107 (decimal 263) - defining Unicode char U+010C (decimal 268) - defining Unicode char U+010D (decimal 269) - defining Unicode char U+010E (decimal 270) - defining Unicode char U+010F (decimal 271) - defining Unicode char U+0110 (decimal 272) - defining Unicode char U+0111 (decimal 273) - defining Unicode char U+0118 (decimal 280) - defining Unicode char U+0119 (decimal 281) - defining Unicode char U+011A (decimal 282) - defining Unicode char U+011B (decimal 283) - defining Unicode char U+011E (decimal 286) - defining Unicode char U+011F (decimal 287) - defining Unicode char U+0130 (decimal 304) - defining Unicode char U+0131 (decimal 305) - defining Unicode char U+0132 (decimal 306) - defining Unicode char U+0133 (decimal 307) - defining Unicode char U+0139 (decimal 313) - defining Unicode char U+013A (decimal 314) - defining Unicode char U+013D (decimal 317) - defining Unicode char U+013E (decimal 318) - defining Unicode char U+0141 (decimal 321) - defining Unicode char U+0142 (decimal 322) - defining Unicode char U+0143 (decimal 323) - defining Unicode char U+0144 (decimal 324) - defining Unicode char U+0147 (decimal 327) - defining Unicode char U+0148 (decimal 328) - defining Unicode char U+014A (decimal 330) - defining Unicode char U+014B (decimal 331) - defining Unicode char U+0150 (decimal 336) - defining Unicode char U+0151 (decimal 337) - defining Unicode char U+0152 (decimal 338) - defining Unicode char U+0153 (decimal 339) - defining Unicode char U+0154 (decimal 340) - defining Unicode char U+0155 (decimal 341) - defining Unicode char U+0158 (decimal 344) - defining Unicode char U+0159 (decimal 345) - defining Unicode char U+015A (decimal 346) - defining Unicode char U+015B (decimal 347) - defining Unicode char U+015E (decimal 350) - defining Unicode char U+015F (decimal 351) - defining Unicode char U+0160 (decimal 352) - defining Unicode char U+0161 (decimal 353) - defining Unicode char U+0162 (decimal 354) - defining Unicode char U+0163 (decimal 355) - defining Unicode char U+0164 (decimal 356) - defining Unicode char U+0165 (decimal 357) - defining Unicode char U+016E (decimal 366) - defining Unicode char U+016F (decimal 367) - defining Unicode char U+0170 (decimal 368) - defining Unicode char U+0171 (decimal 369) - defining Unicode char U+0178 (decimal 376) - defining Unicode char U+0179 (decimal 377) - defining Unicode char U+017A (decimal 378) - defining Unicode char U+017B (decimal 379) - defining Unicode char U+017C (decimal 380) - defining Unicode char U+017D (decimal 381) - defining Unicode char U+017E (decimal 382) - defining Unicode char U+200C (decimal 8204) - defining Unicode char U+2013 (decimal 8211) - defining Unicode char U+2014 (decimal 8212) - defining Unicode char U+2018 (decimal 8216) - defining Unicode char U+2019 (decimal 8217) - defining Unicode char U+201A (decimal 8218) - defining Unicode char U+201C (decimal 8220) - defining Unicode char U+201D (decimal 8221) - defining Unicode char U+201E (decimal 8222) - defining Unicode char U+2030 (decimal 8240) - defining Unicode char U+2031 (decimal 8241) - defining Unicode char U+2039 (decimal 8249) - defining Unicode char U+203A (decimal 8250) - defining Unicode char U+2423 (decimal 9251) -) -Now handling font encoding OT1 ... -... processing UTF-8 mapping file for font encoding OT1 - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base\ot1enc.dfu" -File: ot1enc.dfu 2008/04/05 v1.1m UTF-8 support for inputenc - defining Unicode char U+00A1 (decimal 161) - defining Unicode char U+00A3 (decimal 163) - defining Unicode char U+00B8 (decimal 184) - defining Unicode char U+00BF (decimal 191) - defining Unicode char U+00C5 (decimal 197) - defining Unicode char U+00C6 (decimal 198) - defining Unicode char U+00D8 (decimal 216) - defining Unicode char U+00DF (decimal 223) - defining Unicode char U+00E6 (decimal 230) - defining Unicode char U+00EC (decimal 236) - defining Unicode char U+00ED (decimal 237) - defining Unicode char U+00EE (decimal 238) - defining Unicode char U+00EF (decimal 239) - defining Unicode char U+00F8 (decimal 248) - defining Unicode char U+0131 (decimal 305) - defining Unicode char U+0141 (decimal 321) - defining Unicode char U+0142 (decimal 322) - defining Unicode char U+0152 (decimal 338) - defining Unicode char U+0153 (decimal 339) - defining Unicode char U+2013 (decimal 8211) - defining Unicode char U+2014 (decimal 8212) - defining Unicode char U+2018 (decimal 8216) - defining Unicode char U+2019 (decimal 8217) - defining Unicode char U+201C (decimal 8220) - defining Unicode char U+201D (decimal 8221) -) -Now handling font encoding OMS ... -... processing UTF-8 mapping file for font encoding OMS - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base\omsenc.dfu" -File: omsenc.dfu 2008/04/05 v1.1m UTF-8 support for inputenc - defining Unicode char U+00A7 (decimal 167) - defining Unicode char U+00B6 (decimal 182) - defining Unicode char U+00B7 (decimal 183) - defining Unicode char U+2020 (decimal 8224) - defining Unicode char U+2021 (decimal 8225) - defining Unicode char U+2022 (decimal 8226) -) -Now handling font encoding OMX ... -... no UTF-8 mapping file for font encoding OMX -Now handling font encoding U ... -... no UTF-8 mapping file for font encoding U - defining Unicode char U+00A9 (decimal 169) - defining Unicode char U+00AA (decimal 170) - defining Unicode char U+00AE (decimal 174) - defining Unicode char U+00BA (decimal 186) - defining Unicode char U+02C6 (decimal 710) - defining Unicode char U+02DC (decimal 732) - defining Unicode char U+200C (decimal 8204) - defining Unicode char U+2026 (decimal 8230) - defining Unicode char U+2122 (decimal 8482) - defining Unicode char U+2423 (decimal 9251) -)) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base\fontenc.sty" -Package: fontenc 2005/09/27 v1.99g Standard LaTeX package - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base\t1enc.def" -File: t1enc.def 2005/09/27 v1.99g Standard LaTeX file -LaTeX Font Info: Redeclaring font encoding T1 on input line 43. -)) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\fourier\fourier.sty" -Package: fourier 2005/01/01 1.4 fourier-GUTenberg package -Now handling font encoding FML ... -... no UTF-8 mapping file for font encoding FML -Now handling font encoding FMS ... -... no UTF-8 mapping file for font encoding FMS -Now handling font encoding FMX ... -... no UTF-8 mapping file for font encoding FMX - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base\fontenc.sty" -Package: fontenc 2005/09/27 v1.99g Standard LaTeX package - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base\t1enc.def" -File: t1enc.def 2005/09/27 v1.99g Standard LaTeX file -LaTeX Font Info: Redeclaring font encoding T1 on input line 43. -)) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base\textcomp.sty" -Package: textcomp 2005/09/27 v1.99g Standard LaTeX package -Package textcomp Info: Sub-encoding information: -(textcomp) 5 = only ISO-Adobe without \textcurrency -(textcomp) 4 = 5 + \texteuro -(textcomp) 3 = 4 + \textohm -(textcomp) 2 = 3 + \textestimated + \textcurrency -(textcomp) 1 = TS1 - \textcircled - \t -(textcomp) 0 = TS1 (full) -(textcomp) Font families with sub-encoding setting implement -(textcomp) only a restricted character set as indicated. -(textcomp) Family '?' is the default used for unknown fonts. -(textcomp) See the documentation for details. -Package textcomp Info: Setting ? sub-encoding to TS1/1 on input line 71. - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base\ts1enc.def" -File: ts1enc.def 2001/06/05 v3.0e (jk/car/fm) Standard LaTeX file -Now handling font encoding TS1 ... -... processing UTF-8 mapping file for font encoding TS1 - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base\ts1enc.dfu" -File: ts1enc.dfu 2008/04/05 v1.1m UTF-8 support for inputenc - defining Unicode char U+00A2 (decimal 162) - defining Unicode char U+00A3 (decimal 163) - defining Unicode char U+00A4 (decimal 164) - defining Unicode char U+00A5 (decimal 165) - defining Unicode char U+00A6 (decimal 166) - defining Unicode char U+00A7 (decimal 167) - defining Unicode char U+00A8 (decimal 168) - defining Unicode char U+00A9 (decimal 169) - defining Unicode char U+00AA (decimal 170) - defining Unicode char U+00AC (decimal 172) - defining Unicode char U+00AE (decimal 174) - defining Unicode char U+00AF (decimal 175) - defining Unicode char U+00B0 (decimal 176) - defining Unicode char U+00B1 (decimal 177) - defining Unicode char U+00B2 (decimal 178) - defining Unicode char U+00B3 (decimal 179) - defining Unicode char U+00B4 (decimal 180) - defining Unicode char U+00B5 (decimal 181) - defining Unicode char U+00B6 (decimal 182) - defining Unicode char U+00B7 (decimal 183) - defining Unicode char U+00B9 (decimal 185) - defining Unicode char U+00BA (decimal 186) - defining Unicode char U+00BC (decimal 188) - defining Unicode char U+00BD (decimal 189) - defining Unicode char U+00BE (decimal 190) - defining Unicode char U+00D7 (decimal 215) - defining Unicode char U+00F7 (decimal 247) - defining Unicode char U+0192 (decimal 402) - defining Unicode char U+02C7 (decimal 711) - defining Unicode char U+02D8 (decimal 728) - defining Unicode char U+02DD (decimal 733) - defining Unicode char U+0E3F (decimal 3647) - defining Unicode char U+2016 (decimal 8214) - defining Unicode char U+2020 (decimal 8224) - defining Unicode char U+2021 (decimal 8225) - defining Unicode char U+2022 (decimal 8226) - defining Unicode char U+2030 (decimal 8240) - defining Unicode char U+2031 (decimal 8241) - defining Unicode char U+203B (decimal 8251) - defining Unicode char U+203D (decimal 8253) - defining Unicode char U+2044 (decimal 8260) - defining Unicode char U+204E (decimal 8270) - defining Unicode char U+2052 (decimal 8274) - defining Unicode char U+20A1 (decimal 8353) - defining Unicode char U+20A4 (decimal 8356) - defining Unicode char U+20A6 (decimal 8358) - defining Unicode char U+20A9 (decimal 8361) - defining Unicode char U+20AB (decimal 8363) - defining Unicode char U+20AC (decimal 8364) - defining Unicode char U+20B1 (decimal 8369) - defining Unicode char U+2103 (decimal 8451) - defining Unicode char U+2116 (decimal 8470) - defining Unicode char U+2117 (decimal 8471) - defining Unicode char U+211E (decimal 8478) - defining Unicode char U+2120 (decimal 8480) - defining Unicode char U+2122 (decimal 8482) - defining Unicode char U+2126 (decimal 8486) - defining Unicode char U+2127 (decimal 8487) - defining Unicode char U+212E (decimal 8494) - defining Unicode char U+2190 (decimal 8592) - defining Unicode char U+2191 (decimal 8593) - defining Unicode char U+2192 (decimal 8594) - defining Unicode char U+2193 (decimal 8595) - defining Unicode char U+2329 (decimal 9001) - defining Unicode char U+232A (decimal 9002) - defining Unicode char U+2422 (decimal 9250) - defining Unicode char U+25E6 (decimal 9702) - defining Unicode char U+25EF (decimal 9711) - defining Unicode char U+266A (decimal 9834) -)) -LaTeX Info: Redefining \oldstylenums on input line 266. -Package textcomp Info: Setting cmr sub-encoding to TS1/0 on input line 281. -Package textcomp Info: Setting cmss sub-encoding to TS1/0 on input line 282. -Package textcomp Info: Setting cmtt sub-encoding to TS1/0 on input line 283. -Package textcomp Info: Setting cmvtt sub-encoding to TS1/0 on input line 284. -Package textcomp Info: Setting cmbr sub-encoding to TS1/0 on input line 285. -Package textcomp Info: Setting cmtl sub-encoding to TS1/0 on input line 286. -Package textcomp Info: Setting ccr sub-encoding to TS1/0 on input line 287. -Package textcomp Info: Setting ptm sub-encoding to TS1/4 on input line 288. -Package textcomp Info: Setting pcr sub-encoding to TS1/4 on input line 289. -Package textcomp Info: Setting phv sub-encoding to TS1/4 on input line 290. -Package textcomp Info: Setting ppl sub-encoding to TS1/3 on input line 291. -Package textcomp Info: Setting pag sub-encoding to TS1/4 on input line 292. -Package textcomp Info: Setting pbk sub-encoding to TS1/4 on input line 293. -Package textcomp Info: Setting pnc sub-encoding to TS1/4 on input line 294. -Package textcomp Info: Setting pzc sub-encoding to TS1/4 on input line 295. -Package textcomp Info: Setting bch sub-encoding to TS1/4 on input line 296. -Package textcomp Info: Setting put sub-encoding to TS1/5 on input line 297. -Package textcomp Info: Setting uag sub-encoding to TS1/5 on input line 298. -Package textcomp Info: Setting ugq sub-encoding to TS1/5 on input line 299. -Package textcomp Info: Setting ul8 sub-encoding to TS1/4 on input line 300. -Package textcomp Info: Setting ul9 sub-encoding to TS1/4 on input line 301. -Package textcomp Info: Setting augie sub-encoding to TS1/5 on input line 302. -Package textcomp Info: Setting dayrom sub-encoding to TS1/3 on input line 303. -Package textcomp Info: Setting dayroms sub-encoding to TS1/3 on input line 304. - -Package textcomp Info: Setting pxr sub-encoding to TS1/0 on input line 305. -Package textcomp Info: Setting pxss sub-encoding to TS1/0 on input line 306. -Package textcomp Info: Setting pxtt sub-encoding to TS1/0 on input line 307. -Package textcomp Info: Setting txr sub-encoding to TS1/0 on input line 308. -Package textcomp Info: Setting txss sub-encoding to TS1/0 on input line 309. -Package textcomp Info: Setting txtt sub-encoding to TS1/0 on input line 310. -Package textcomp Info: Setting lmr sub-encoding to TS1/0 on input line 311. -Package textcomp Info: Setting lmdh sub-encoding to TS1/0 on input line 312. -Package textcomp Info: Setting lmss sub-encoding to TS1/0 on input line 313. -Package textcomp Info: Setting lmssq sub-encoding to TS1/0 on input line 314. -Package textcomp Info: Setting lmvtt sub-encoding to TS1/0 on input line 315. -Package textcomp Info: Setting qhv sub-encoding to TS1/0 on input line 316. -Package textcomp Info: Setting qag sub-encoding to TS1/0 on input line 317. -Package textcomp Info: Setting qbk sub-encoding to TS1/0 on input line 318. -Package textcomp Info: Setting qcr sub-encoding to TS1/0 on input line 319. -Package textcomp Info: Setting qcs sub-encoding to TS1/0 on input line 320. -Package textcomp Info: Setting qpl sub-encoding to TS1/0 on input line 321. -Package textcomp Info: Setting qtm sub-encoding to TS1/0 on input line 322. -Package textcomp Info: Setting qzc sub-encoding to TS1/0 on input line 323. -Package textcomp Info: Setting qhvc sub-encoding to TS1/0 on input line 324. -Package textcomp Info: Setting futs sub-encoding to TS1/4 on input line 325. -Package textcomp Info: Setting futx sub-encoding to TS1/4 on input line 326. -Package textcomp Info: Setting futj sub-encoding to TS1/4 on input line 327. -Package textcomp Info: Setting hlh sub-encoding to TS1/3 on input line 328. -Package textcomp Info: Setting hls sub-encoding to TS1/3 on input line 329. -Package textcomp Info: Setting hlst sub-encoding to TS1/3 on input line 330. -Package textcomp Info: Setting hlct sub-encoding to TS1/5 on input line 331. -Package textcomp Info: Setting hlx sub-encoding to TS1/5 on input line 332. -Package textcomp Info: Setting hlce sub-encoding to TS1/5 on input line 333. -Package textcomp Info: Setting hlcn sub-encoding to TS1/5 on input line 334. -Package textcomp Info: Setting hlcw sub-encoding to TS1/5 on input line 335. -Package textcomp Info: Setting hlcf sub-encoding to TS1/5 on input line 336. -Package textcomp Info: Setting pplx sub-encoding to TS1/3 on input line 337. -Package textcomp Info: Setting pplj sub-encoding to TS1/3 on input line 338. -Package textcomp Info: Setting ptmx sub-encoding to TS1/4 on input line 339. -Package textcomp Info: Setting ptmj sub-encoding to TS1/4 on input line 340. -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\fourier\fourier-orns.sty" -Package: fourier-orns 2004/01/30 1.1 fourier-ornaments package -) -LaTeX Font Info: Redeclaring symbol font `operators' on input line 50. -LaTeX Font Info: Encoding `OT1' has changed to `T1' for symbol font -(Font) `operators' in the math version `normal' on input line 50. -LaTeX Font Info: Overwriting symbol font `operators' in version `normal' -(Font) OT1/cmr/m/n --> T1/futs/m/n on input line 50. -LaTeX Font Info: Encoding `OT1' has changed to `T1' for symbol font -(Font) `operators' in the math version `bold' on input line 50. -LaTeX Font Info: Overwriting symbol font `operators' in version `bold' -(Font) OT1/cmr/bx/n --> T1/futs/m/n on input line 50. -LaTeX Font Info: Overwriting symbol font `operators' in version `bold' -(Font) T1/futs/m/n --> T1/futs/b/n on input line 51. -LaTeX Font Info: Redeclaring symbol font `letters' on input line 59. -LaTeX Font Info: Encoding `OML' has changed to `FML' for symbol font -(Font) `letters' in the math version `normal' on input line 59. -LaTeX Font Info: Overwriting symbol font `letters' in version `normal' -(Font) OML/cmm/m/it --> FML/futmi/m/it on input line 59. -LaTeX Font Info: Encoding `OML' has changed to `FML' for symbol font -(Font) `letters' in the math version `bold' on input line 59. -LaTeX Font Info: Overwriting symbol font `letters' in version `bold' -(Font) OML/cmm/b/it --> FML/futmi/m/it on input line 59. -\symotherletters=\mathgroup6 -LaTeX Font Info: Overwriting symbol font `letters' in version `bold' -(Font) FML/futmi/m/it --> FML/futmi/b/it on input line 61. -LaTeX Font Info: Overwriting symbol font `otherletters' in version `bold' -(Font) FML/futm/m/it --> FML/futm/b/it on input line 62. -LaTeX Font Info: Redeclaring math symbol \Gamma on input line 63. -LaTeX Font Info: Redeclaring math symbol \Delta on input line 64. -LaTeX Font Info: Redeclaring math symbol \Theta on input line 65. -LaTeX Font Info: Redeclaring math symbol \Lambda on input line 66. -LaTeX Font Info: Redeclaring math symbol \Xi on input line 67. -LaTeX Font Info: Redeclaring math symbol \Pi on input line 68. -LaTeX Font Info: Redeclaring math symbol \Sigma on input line 69. -LaTeX Font Info: Redeclaring math symbol \Upsilon on input line 70. -LaTeX Font Info: Redeclaring math symbol \Phi on input line 71. -LaTeX Font Info: Redeclaring math symbol \Psi on input line 72. -LaTeX Font Info: Redeclaring math symbol \Omega on input line 73. -LaTeX Font Info: Redeclaring symbol font `symbols' on input line 113. -LaTeX Font Info: Encoding `OMS' has changed to `FMS' for symbol font -(Font) `symbols' in the math version `normal' on input line 113. -LaTeX Font Info: Overwriting symbol font `symbols' in version `normal' -(Font) OMS/cmsy/m/n --> FMS/futm/m/n on input line 113. -LaTeX Font Info: Encoding `OMS' has changed to `FMS' for symbol font -(Font) `symbols' in the math version `bold' on input line 113. -LaTeX Font Info: Overwriting symbol font `symbols' in version `bold' -(Font) OMS/cmsy/b/n --> FMS/futm/m/n on input line 113. -LaTeX Font Info: Redeclaring symbol font `largesymbols' on input line 114. -LaTeX Font Info: Encoding `OMX' has changed to `FMX' for symbol font -(Font) `largesymbols' in the math version `normal' on input line 1 -14. -LaTeX Font Info: Overwriting symbol font `largesymbols' in version `normal' -(Font) OMX/cmex/m/n --> FMX/futm/m/n on input line 114. -LaTeX Font Info: Encoding `OMX' has changed to `FMX' for symbol font -(Font) `largesymbols' in the math version `bold' on input line 114 -. -LaTeX Font Info: Overwriting symbol font `largesymbols' in version `bold' -(Font) OMX/cmex/m/n --> FMX/futm/m/n on input line 114. -LaTeX Font Info: Redeclaring math alphabet \mathbf on input line 115. -LaTeX Font Info: Overwriting math alphabet `\mathbf' in version `normal' -(Font) OT1/cmr/bx/n --> T1/futs/bx/n on input line 115. -LaTeX Font Info: Overwriting math alphabet `\mathbf' in version `bold' -(Font) OT1/cmr/bx/n --> T1/futs/bx/n on input line 115. -LaTeX Font Info: Redeclaring math alphabet \mathrm on input line 116. -LaTeX Font Info: Redeclaring math alphabet \mathit on input line 117. -LaTeX Font Info: Overwriting math alphabet `\mathit' in version `normal' -(Font) OT1/cmr/m/it --> T1/futs/m/it on input line 117. -LaTeX Font Info: Overwriting math alphabet `\mathit' in version `bold' -(Font) OT1/cmr/bx/it --> T1/futs/m/it on input line 117. -LaTeX Font Info: Redeclaring math alphabet \mathcal on input line 118. -LaTeX Font Info: Redeclaring math symbol \parallel on input line 134. -LaTeX Font Info: Redeclaring math symbol \hbar on input line 148. -LaTeX Font Info: Redeclaring math symbol \square on input line 153. -LaTeX Font Info: Redeclaring math symbol \varkappa on input line 186. -LaTeX Font Info: Redeclaring math symbol \varvarrho on input line 187. -LaTeX Font Info: Redeclaring math delimiter \Vert on input line 210. -LaTeX Font Info: Redeclaring math delimiter \vert on input line 215. -LaTeX Font Info: Redeclaring math delimiter \lvert on input line 217. -LaTeX Font Info: Redeclaring math delimiter \rvert on input line 219. -LaTeX Font Info: Redeclaring math delimiter \lVert on input line 221. -LaTeX Font Info: Redeclaring math delimiter \rVert on input line 223. -LaTeX Font Info: Redeclaring math delimiter \Downarrow on input line 225. -LaTeX Font Info: Redeclaring math delimiter \backslash on input line 227. -LaTeX Font Info: Redeclaring math delimiter \rangle on input line 229. -LaTeX Font Info: Redeclaring math delimiter \langle on input line 231. -LaTeX Font Info: Redeclaring math delimiter \rbrace on input line 233. -LaTeX Font Info: Redeclaring math delimiter \lbrace on input line 235. -LaTeX Font Info: Redeclaring math delimiter \rceil on input line 237. -LaTeX Font Info: Redeclaring math delimiter \lceil on input line 239. -LaTeX Font Info: Redeclaring math delimiter \rfloor on input line 241. -LaTeX Font Info: Redeclaring math delimiter \lfloor on input line 243. -LaTeX Font Info: Redeclaring math accent \acute on input line 247. -LaTeX Font Info: Redeclaring math accent \grave on input line 248. -LaTeX Font Info: Redeclaring math accent \ddot on input line 249. -LaTeX Font Info: Redeclaring math accent \tilde on input line 250. -LaTeX Font Info: Redeclaring math accent \bar on input line 251. -LaTeX Font Info: Redeclaring math accent \breve on input line 252. -LaTeX Font Info: Redeclaring math accent \check on input line 253. -LaTeX Font Info: Redeclaring math accent \hat on input line 254. -LaTeX Font Info: Redeclaring math accent \dot on input line 255. -LaTeX Font Info: Redeclaring math accent \mathring on input line 256. -\symUfutm=\mathgroup7 -) -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\sectsty\sectsty.sty" -Package: sectsty 2002/02/25 v2.0.2 Commands to change all sectional heading sty -les -)) -(C:\Lo&Lo\__UH\__VER\CC\Compiler\cool-compiler-2020\doc\report\report.aux) -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 46. -LaTeX Font Info: ... okay on input line 46. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 46. -LaTeX Font Info: ... okay on input line 46. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 46. -LaTeX Font Info: ... okay on input line 46. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 46. -LaTeX Font Info: ... okay on input line 46. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 46. -LaTeX Font Info: ... okay on input line 46. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 46. -LaTeX Font Info: ... okay on input line 46. -LaTeX Font Info: Checking defaults for FML/futm/m/it on input line 46. -LaTeX Font Info: Try loading font information for FML+futm on input line 46. - - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\fourier\fmlfutm.fd" -File: fmlfutm.fd 2004/10/30 Fontinst v1.926 font definitions for FML/futm. -) -LaTeX Font Info: ... okay on input line 46. -LaTeX Font Info: Checking defaults for FMS/futm/m/n on input line 46. -LaTeX Font Info: Try loading font information for FMS+futm on input line 46. - - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\fourier\fmsfutm.fd" -File: fmsfutm.fd 2004/10/30 Fontinst v1.926 font definitions for FMS/futm. -) -LaTeX Font Info: ... okay on input line 46. -LaTeX Font Info: Checking defaults for FMX/futm/m/n on input line 46. -LaTeX Font Info: Try loading font information for FMX+futm on input line 46. - - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\fourier\fmxfutm.fd" -File: fmxfutm.fd futm-extension -) -LaTeX Font Info: ... okay on input line 46. -LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 46. -LaTeX Font Info: Try loading font information for TS1+cmr on input line 46. - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base\ts1cmr.fd" -File: ts1cmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions -) -LaTeX Font Info: ... okay on input line 46. -LaTeX Font Info: Try loading font information for T1+futs on input line 46. - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\fourier\t1futs.fd" -File: t1futs.fd 2004/03/02 Fontinst v1.926 font definitions for T1/futs. -) -\c@lstlisting=\count118 - -("C:\Program Files (x86)\MiKTeX 2.9\tex\context\base\supp-pdf.mkii" -[Loading MPS to PDF converter (version 2006.09.02).] -\scratchcounter=\count119 -\scratchdimen=\dimen141 -\scratchbox=\box32 -\nofMPsegments=\count120 -\nofMParguments=\count121 -\everyMPshowfont=\toks31 -\MPscratchCnt=\count122 -\MPscratchDim=\dimen142 -\MPnumerator=\count123 -\makeMPintoPDFobject=\count124 -\everyMPtoPDFconversion=\toks32 -) -*geometry* driver: auto-detecting -*geometry* detected driver: pdftex -*geometry* verbose mode - [ preamble ] result: -* driver: pdftex -* paper: a4paper -* layout: -* layoutoffset:(h,v)=(0.0pt,0.0pt) -* modes: -* h-part:(L,W,R)=(85.35826pt, 426.79135pt, 85.35826pt) -* v-part:(T,H,B)=(71.13188pt, 688.5567pt, 85.35826pt) -* \paperwidth=597.50787pt -* \paperheight=845.04684pt -* \textwidth=426.79135pt -* \textheight=688.5567pt -* \oddsidemargin=13.08827pt -* \evensidemargin=13.08827pt -* \topmargin=-43.81721pt -* \headheight=21.33955pt -* \headsep=21.33955pt -* \topskip=11.0pt -* \footskip=42.67912pt -* \marginparwidth=59.7508pt -* \marginparsep=12.8401pt -* \columnsep=10.0pt -* \skip\footins=10.0pt plus 4.0pt minus 2.0pt -* \hoffset=0.0pt -* \voffset=0.0pt -* \mag=1000 -* \@twocolumnfalse -* \@twosidefalse -* \@mparswitchfalse -* \@reversemarginfalse -* (1in=72.27pt=25.4mm, 1cm=28.453pt) - -LaTeX Font Info: Try loading font information for T1+cmss on input line 49. -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base\t1cmss.fd" -File: t1cmss.fd 1999/05/25 v2.5h Standard LaTeX font definitions -) -LaTeX Font Info: Try loading font information for FML+futmi on input line 49 -. - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\fourier\fmlfutmi.fd" -File: fmlfutmi.fd 2004/10/30 Fontinst v1.926 font definitions for FML/futmi. -) -LaTeX Font Info: Font shape `FMX/futm/m/n' will be -(Font) scaled to size 13.24796pt on input line 49. -LaTeX Font Info: Font shape `FMX/futm/m/n' will be -(Font) scaled to size 9.19998pt on input line 49. -LaTeX Font Info: Font shape `FMX/futm/m/n' will be -(Font) scaled to size 7.35999pt on input line 49. -LaTeX Font Info: Try loading font information for U+msa on input line 49. - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\amsfonts\umsa.fd" -File: umsa.fd 2009/06/22 v3.00 AMS symbols A -) -LaTeX Font Info: Try loading font information for U+msb on input line 49. - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\amsfonts\umsb.fd" -File: umsb.fd 2009/06/22 v3.00 AMS symbols B -) -LaTeX Font Info: Font shape `U/futm/m/n' will be -(Font) scaled to size 13.24796pt on input line 49. -LaTeX Font Info: Font shape `U/futm/m/n' will be -(Font) scaled to size 9.19998pt on input line 49. -LaTeX Font Info: Font shape `U/futm/m/n' will be -(Font) scaled to size 7.35999pt on input line 49. - -Overfull \hbox (10.97055pt too wide) in paragraph at lines 67--68 - \T1/futs/m/sc/10.95 Una ex-pli-cación gen-eral de la ar-qui-tec-tura, en cuán- -tos mó-du-los se di-vide el proyecto, - [] - -LaTeX Font Info: Try loading font information for T1+cmtt on input line 78. -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base\t1cmtt.fd" -File: t1cmtt.fd 1999/05/25 v2.5h Standard LaTeX font definitions -) -LaTeX Font Info: Font shape `T1/futs/bx/n' in size <12> not available -(Font) Font shape `T1/futs/b/n' tried instead on input line 81. - [1 - - -{C:/ProgramData/MiKTeX/2.9/pdftex/config/pdftex.map}] -LaTeX Font Info: Try loading font information for TS1+futs on input line 96. - - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\fourier\ts1futs.fd" -File: ts1futs.fd 2004/03/26 Fontinst v1.926 font definitions for TS1/futs. -) -LaTeX Font Info: Font shape `T1/futs/bx/n' in size <10.95> not available -(Font) Font shape `T1/futs/b/n' tried instead on input line 105. - -("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\listings\lstlang1.sty" -File: lstlang1.sty 2004/09/05 1.3 listings language file -) -(C:\Lo&Lo\__UH\__VER\CC\Compiler\cool-compiler-2020\doc\report\resources/parser -.py [2]) -Overfull \hbox (29.69118pt too wide) in paragraph at lines 138--139 -[]\T1/futs/m/n/10.95 En la primera pasada so-la-mente recolec-ta-mos to-dos los - tipos definidos. A este vis-i-tor, \T1/cmtt/m/n/10.95 TypeCollector - [] - -[3] [4] -(C:\Lo&Lo\__UH\__VER\CC\Compiler\cool-compiler-2020\doc\report\report.aux) ) -Here is how much of TeX's memory you used: - 7230 strings out of 494045 - 100846 string characters out of 3145966 - 201534 words of memory out of 3000000 - 10356 multiletter control sequences out of 15000+200000 - 79687 words of font info for 77 fonts, out of 3000000 for 9000 - 715 hyphenation exceptions out of 8191 - 37i,7n,43p,731b,1668s stack positions out of 5000i,500n,10000p,200000b,50000s -{C: -/Program Files (x86)/MiKTeX 2.9/fonts/enc/dvips/fontname/8r.enc}{C:/Program Fil -es (x86)/MiKTeX 2.9/fonts/enc/dvips/cm-super/cm-super-t1.enc} -Output written on report.pdf (4 pages, 96857 bytes). -PDF statistics: - 33 PDF objects out of 1000 (max. 8388607) - 0 named destinations out of 1000 (max. 500000) - 1 words of extra memory for PDF output out of 10000 (max. 10000000) - +This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=pdflatex 2018.11.1) 29 NOV 2020 11:20 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**report.tex +(./report.tex +LaTeX2e <2017-04-15> +Babel <3.18> and hyphenation patterns for 84 language(s) loaded. +(/usr/share/texlive/texmf-dist/tex/latex/koma-script/scrartcl.cls +Document Class: scrartcl 2017/09/07 v3.24 KOMA-Script document class (article) +(/usr/share/texlive/texmf-dist/tex/latex/koma-script/scrkbase.sty +Package: scrkbase 2017/09/07 v3.24 KOMA-Script package (KOMA-Script-dependent b +asics and keyval usage) + +(/usr/share/texlive/texmf-dist/tex/latex/koma-script/scrbase.sty +Package: scrbase 2017/09/07 v3.24 KOMA-Script package (KOMA-Script-independent +basics and keyval usage) + +(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty +Package: keyval 2014/10/28 v1.15 key=value parser (DPC) +\KV@toks@=\toks14 +) +(/usr/share/texlive/texmf-dist/tex/latex/koma-script/scrlfile.sty +Package: scrlfile 2017/09/07 v3.24 KOMA-Script package (loading files) +))) +(/usr/share/texlive/texmf-dist/tex/latex/koma-script/tocbasic.sty +Package: tocbasic 2017/09/07 v3.24 KOMA-Script package (handling toc-files) +\scr@dte@tocline@numberwidth=\skip41 +\scr@dte@tocline@numbox=\box26 +) +Package tocbasic Info: omitting babel extension for `toc' +(tocbasic) because of feature `nobabel' available +(tocbasic) for `toc' on input line 133. +Package tocbasic Info: omitting babel extension for `lof' +(tocbasic) because of feature `nobabel' available +(tocbasic) for `lof' on input line 135. +Package tocbasic Info: omitting babel extension for `lot' +(tocbasic) because of feature `nobabel' available +(tocbasic) for `lot' on input line 136. +Package scrartcl Info: You've used standard option `11pt'. +(scrartcl) This is correct! +(scrartcl) Internally I'm using `fontsize=11pt'. +(scrartcl) If you'd like to set the option with \KOMAoptions, +(scrartcl) you'd have to use `fontsize=11pt' there +(scrartcl) instead of `11pt', too. +Class scrartcl Info: File `scrsize11pt.clo' used to setup font sizes on input l +ine 2080. + +(/usr/share/texlive/texmf-dist/tex/latex/koma-script/scrsize11pt.clo +File: scrsize11pt.clo 2017/09/07 v3.24 KOMA-Script font size class option (11pt +) +) +(/usr/share/texlive/texmf-dist/tex/latex/koma-script/typearea.sty +Package: typearea 2017/09/07 v3.24 KOMA-Script package (type area) +\ta@bcor=\skip42 +\ta@div=\count79 +\ta@hblk=\skip43 +\ta@vblk=\skip44 +\ta@temp=\skip45 +\footheight=\skip46 +Package typearea Info: These are the values describing the layout: +(typearea) DIV = 10 +(typearea) BCOR = 0.0pt +(typearea) \paperwidth = 597.50793pt +(typearea) \textwidth = 418.25555pt +(typearea) DIV departure = -6% +(typearea) \evensidemargin = 17.3562pt +(typearea) \oddsidemargin = 17.3562pt +(typearea) \paperheight = 845.04694pt +(typearea) \textheight = 595.80026pt +(typearea) \topmargin = -25.16531pt +(typearea) \headheight = 17.0pt +(typearea) \headsep = 20.40001pt +(typearea) \topskip = 11.0pt +(typearea) \footskip = 47.6pt +(typearea) \baselineskip = 13.6pt +(typearea) on input line 1686. +) +\c@part=\count80 +\c@section=\count81 +\c@subsection=\count82 +\c@subsubsection=\count83 +\c@paragraph=\count84 +\c@subparagraph=\count85 +\scr@dte@part@maxnumwidth=\skip47 +\scr@dte@section@maxnumwidth=\skip48 +\scr@dte@subsection@maxnumwidth=\skip49 +\scr@dte@subsubsection@maxnumwidth=\skip50 +\scr@dte@paragraph@maxnumwidth=\skip51 +\scr@dte@subparagraph@maxnumwidth=\skip52 +LaTeX Info: Redefining \textsubscript on input line 4161. +\abovecaptionskip=\skip53 +\belowcaptionskip=\skip54 +\c@pti@nb@sid@b@x=\box27 +\c@figure=\count86 +\c@table=\count87 +Class scrartcl Info: Redefining `\numberline' on input line 5319. +\bibindent=\dimen102 +) +(./structure.tex (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty +Package: amsmath 2017/09/02 v2.17a AMS math features +\@mathmargin=\skip55 + +For additional information on amsmath, use the `?' option. +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty +Package: amstext 2000/06/29 v2.01 AMS text + +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty +File: amsgen.sty 1999/11/30 v2.0 generic functions +\@emptytoks=\toks15 +\ex@=\dimen103 +)) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty +Package: amsbsy 1999/11/29 v1.2d Bold Symbols +\pmbraise@=\dimen104 +) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty +Package: amsopn 2016/03/08 v2.02 operator names +) +\inf@bad=\count88 +LaTeX Info: Redefining \frac on input line 213. +\uproot@=\count89 +\leftroot@=\count90 +LaTeX Info: Redefining \overline on input line 375. +\classnum@=\count91 +\DOTSCASE@=\count92 +LaTeX Info: Redefining \ldots on input line 472. +LaTeX Info: Redefining \dots on input line 475. +LaTeX Info: Redefining \cdots on input line 596. +\Mathstrutbox@=\box28 +\strutbox@=\box29 +\big@size=\dimen105 +LaTeX Font Info: Redeclaring font encoding OML on input line 712. +LaTeX Font Info: Redeclaring font encoding OMS on input line 713. +\macc@depth=\count93 +\c@MaxMatrixCols=\count94 +\dotsspace@=\muskip10 +\c@parentequation=\count95 +\dspbrk@lvl=\count96 +\tag@help=\toks16 +\row@=\count97 +\column@=\count98 +\maxfields@=\count99 +\andhelp@=\toks17 +\eqnshift@=\dimen106 +\alignsep@=\dimen107 +\tagshift@=\dimen108 +\tagwidth@=\dimen109 +\totwidth@=\dimen110 +\lineht@=\dimen111 +\@envbody=\toks18 +\multlinegap=\skip56 +\multlinetaggap=\skip57 +\mathdisplay@stack=\toks19 +LaTeX Info: Redefining \[ on input line 2817. +LaTeX Info: Redefining \] on input line 2818. +) +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty +Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support +\symAMSa=\mathgroup4 +\symAMSb=\mathgroup5 +LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' +(Font) U/euf/m/n --> U/euf/b/n on input line 106. +) +(/usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty +Package: amsthm 2017/10/31 v2.20.4 +\thm@style=\toks20 +\thm@bodyfont=\toks21 +\thm@headfont=\toks22 +\thm@notefont=\toks23 +\thm@headpunct=\toks24 +\thm@preskip=\skip58 +\thm@postskip=\skip59 +\thm@headsep=\skip60 +\dth@everypar=\toks25 +) +(/usr/share/texlive/texmf-dist/tex/latex/listings/listings.sty +\lst@mode=\count100 +\lst@gtempboxa=\box30 +\lst@token=\toks26 +\lst@length=\count101 +\lst@currlwidth=\dimen112 +\lst@column=\count102 +\lst@pos=\count103 +\lst@lostspace=\dimen113 +\lst@width=\dimen114 +\lst@newlines=\count104 +\lst@lineno=\count105 +\lst@maxwidth=\dimen115 + +(/usr/share/texlive/texmf-dist/tex/latex/listings/lstmisc.sty +File: lstmisc.sty 2015/06/04 1.6 (Carsten Heinz) +\c@lstnumber=\count106 +\lst@skipnumbers=\count107 +\lst@framebox=\box31 +) +(/usr/share/texlive/texmf-dist/tex/latex/listings/listings.cfg +File: listings.cfg 2015/06/04 1.6 listings configuration +)) +Package: listings 2015/06/04 1.6 (Carsten Heinz) + +(/usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty +Package: babel 2018/02/14 3.18 The Babel package + +(/usr/share/texlive/texmf-dist/tex/generic/babel/switch.def +File: switch.def 2018/02/14 3.18 Babel switching mechanism +) +(/usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf +Language: english 2017/06/06 v3.3r English support from the babel system + +(/usr/share/texlive/texmf-dist/tex/generic/babel/babel.def +File: babel.def 2018/02/14 3.18 Babel common definitions +\babel@savecnt=\count108 +\U@D=\dimen116 + +(/usr/share/texlive/texmf-dist/tex/generic/babel/txtbabel.def) +\bbl@dirlevel=\count109 +) +\l@canadian = a dialect from \language\l@american +\l@australian = a dialect from \language\l@british +\l@newzealand = a dialect from \language\l@british +)) +(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty +Package: graphicx 2017/06/01 v1.1a Enhanced LaTeX Graphics (DPC,SPQR) + +(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty +Package: graphics 2017/06/25 v1.2c Standard LaTeX Graphics (DPC,SPQR) + +(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty +Package: trig 2016/01/03 v1.10 sin cos tan (DPC) +) +(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg +File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration +) +Package graphics Info: Driver file: pdftex.def on input line 99. + +(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def +File: pdftex.def 2018/01/08 v1.0l Graphics/color driver for pdftex +)) +\Gin@req@height=\dimen117 +\Gin@req@width=\dimen118 +) +(/usr/share/texlive/texmf-dist/tex/latex/booktabs/booktabs.sty +Package: booktabs 2016/04/27 v1.618033 publication quality tables +\heavyrulewidth=\dimen119 +\lightrulewidth=\dimen120 +\cmidrulewidth=\dimen121 +\belowrulesep=\dimen122 +\belowbottomsep=\dimen123 +\aboverulesep=\dimen124 +\abovetopsep=\dimen125 +\cmidrulesep=\dimen126 +\cmidrulekern=\dimen127 +\defaultaddspace=\dimen128 +\@cmidla=\count110 +\@cmidlb=\count111 +\@aboverulesep=\dimen129 +\@belowrulesep=\dimen130 +\@thisruleclass=\count112 +\@lastruleclass=\count113 +\@thisrulewidth=\dimen131 +) +(/usr/share/texlive/texmf-dist/tex/latex/enumitem/enumitem.sty +Package: enumitem 2011/09/28 v3.5.2 Customized lists +\labelindent=\skip61 +\enit@outerparindent=\dimen132 +\enit@toks=\toks27 +\enit@inbox=\box32 +\enitdp@description=\count114 +) +(/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty +Package: geometry 2010/09/12 v5.6 Page Geometry + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty +Package: ifpdf 2017/03/15 v3.2 Provides the ifpdf switch +) +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty +Package: ifvtex 2016/05/16 v1.6 Detect VTeX and its facilities (HO) +Package ifvtex Info: VTeX not detected. +) +(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty +Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional +) +\Gm@cnth=\count115 +\Gm@cntv=\count116 +\c@Gm@tempcnt=\count117 +\Gm@bindingoffset=\dimen133 +\Gm@wd@mp=\dimen134 +\Gm@odd@mp=\dimen135 +\Gm@even@mp=\dimen136 +\Gm@layoutwidth=\dimen137 +\Gm@layoutheight=\dimen138 +\Gm@layouthoffset=\dimen139 +\Gm@layoutvoffset=\dimen140 +\Gm@dimlist=\toks28 +) +(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty +Package: inputenc 2015/03/17 v1.2c Input encoding file +\inpenc@prehook=\toks29 +\inpenc@posthook=\toks30 + +(/usr/share/texlive/texmf-dist/tex/latex/base/utf8.def +File: utf8.def 2017/01/28 v1.1t UTF-8 support for inputenc +Now handling font encoding OML ... +... no UTF-8 mapping file for font encoding OML +Now handling font encoding T1 ... +... processing UTF-8 mapping file for font encoding T1 + +(/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.dfu +File: t1enc.dfu 2017/01/28 v1.1t UTF-8 support for inputenc + defining Unicode char U+00A0 (decimal 160) + defining Unicode char U+00A1 (decimal 161) + defining Unicode char U+00A3 (decimal 163) + defining Unicode char U+00AB (decimal 171) + defining Unicode char U+00AD (decimal 173) + defining Unicode char U+00BB (decimal 187) + defining Unicode char U+00BF (decimal 191) + defining Unicode char U+00C0 (decimal 192) + defining Unicode char U+00C1 (decimal 193) + defining Unicode char U+00C2 (decimal 194) + defining Unicode char U+00C3 (decimal 195) + defining Unicode char U+00C4 (decimal 196) + defining Unicode char U+00C5 (decimal 197) + defining Unicode char U+00C6 (decimal 198) + defining Unicode char U+00C7 (decimal 199) + defining Unicode char U+00C8 (decimal 200) + defining Unicode char U+00C9 (decimal 201) + defining Unicode char U+00CA (decimal 202) + defining Unicode char U+00CB (decimal 203) + defining Unicode char U+00CC (decimal 204) + defining Unicode char U+00CD (decimal 205) + defining Unicode char U+00CE (decimal 206) + defining Unicode char U+00CF (decimal 207) + defining Unicode char U+00D0 (decimal 208) + defining Unicode char U+00D1 (decimal 209) + defining Unicode char U+00D2 (decimal 210) + defining Unicode char U+00D3 (decimal 211) + defining Unicode char U+00D4 (decimal 212) + defining Unicode char U+00D5 (decimal 213) + defining Unicode char U+00D6 (decimal 214) + defining Unicode char U+00D8 (decimal 216) + defining Unicode char U+00D9 (decimal 217) + defining Unicode char U+00DA (decimal 218) + defining Unicode char U+00DB (decimal 219) + defining Unicode char U+00DC (decimal 220) + defining Unicode char U+00DD (decimal 221) + defining Unicode char U+00DE (decimal 222) + defining Unicode char U+00DF (decimal 223) + defining Unicode char U+00E0 (decimal 224) + defining Unicode char U+00E1 (decimal 225) + defining Unicode char U+00E2 (decimal 226) + defining Unicode char U+00E3 (decimal 227) + defining Unicode char U+00E4 (decimal 228) + defining Unicode char U+00E5 (decimal 229) + defining Unicode char U+00E6 (decimal 230) + defining Unicode char U+00E7 (decimal 231) + defining Unicode char U+00E8 (decimal 232) + defining Unicode char U+00E9 (decimal 233) + defining Unicode char U+00EA (decimal 234) + defining Unicode char U+00EB (decimal 235) + defining Unicode char U+00EC (decimal 236) + defining Unicode char U+00ED (decimal 237) + defining Unicode char U+00EE (decimal 238) + defining Unicode char U+00EF (decimal 239) + defining Unicode char U+00F0 (decimal 240) + defining Unicode char U+00F1 (decimal 241) + defining Unicode char U+00F2 (decimal 242) + defining Unicode char U+00F3 (decimal 243) + defining Unicode char U+00F4 (decimal 244) + defining Unicode char U+00F5 (decimal 245) + defining Unicode char U+00F6 (decimal 246) + defining Unicode char U+00F8 (decimal 248) + defining Unicode char U+00F9 (decimal 249) + defining Unicode char U+00FA (decimal 250) + defining Unicode char U+00FB (decimal 251) + defining Unicode char U+00FC (decimal 252) + defining Unicode char U+00FD (decimal 253) + defining Unicode char U+00FE (decimal 254) + defining Unicode char U+00FF (decimal 255) + defining Unicode char U+0100 (decimal 256) + defining Unicode char U+0101 (decimal 257) + defining Unicode char U+0102 (decimal 258) + defining Unicode char U+0103 (decimal 259) + defining Unicode char U+0104 (decimal 260) + defining Unicode char U+0105 (decimal 261) + defining Unicode char U+0106 (decimal 262) + defining Unicode char U+0107 (decimal 263) + defining Unicode char U+0108 (decimal 264) + defining Unicode char U+0109 (decimal 265) + defining Unicode char U+010A (decimal 266) + defining Unicode char U+010B (decimal 267) + defining Unicode char U+010C (decimal 268) + defining Unicode char U+010D (decimal 269) + defining Unicode char U+010E (decimal 270) + defining Unicode char U+010F (decimal 271) + defining Unicode char U+0110 (decimal 272) + defining Unicode char U+0111 (decimal 273) + defining Unicode char U+0112 (decimal 274) + defining Unicode char U+0113 (decimal 275) + defining Unicode char U+0114 (decimal 276) + defining Unicode char U+0115 (decimal 277) + defining Unicode char U+0116 (decimal 278) + defining Unicode char U+0117 (decimal 279) + defining Unicode char U+0118 (decimal 280) + defining Unicode char U+0119 (decimal 281) + defining Unicode char U+011A (decimal 282) + defining Unicode char U+011B (decimal 283) + defining Unicode char U+011C (decimal 284) + defining Unicode char U+011D (decimal 285) + defining Unicode char U+011E (decimal 286) + defining Unicode char U+011F (decimal 287) + defining Unicode char U+0120 (decimal 288) + defining Unicode char U+0121 (decimal 289) + defining Unicode char U+0122 (decimal 290) + defining Unicode char U+0123 (decimal 291) + defining Unicode char U+0124 (decimal 292) + defining Unicode char U+0125 (decimal 293) + defining Unicode char U+0128 (decimal 296) + defining Unicode char U+0129 (decimal 297) + defining Unicode char U+012A (decimal 298) + defining Unicode char U+012B (decimal 299) + defining Unicode char U+012C (decimal 300) + defining Unicode char U+012D (decimal 301) + defining Unicode char U+012E (decimal 302) + defining Unicode char U+012F (decimal 303) + defining Unicode char U+0130 (decimal 304) + defining Unicode char U+0131 (decimal 305) + defining Unicode char U+0132 (decimal 306) + defining Unicode char U+0133 (decimal 307) + defining Unicode char U+0134 (decimal 308) + defining Unicode char U+0135 (decimal 309) + defining Unicode char U+0136 (decimal 310) + defining Unicode char U+0137 (decimal 311) + defining Unicode char U+0139 (decimal 313) + defining Unicode char U+013A (decimal 314) + defining Unicode char U+013B (decimal 315) + defining Unicode char U+013C (decimal 316) + defining Unicode char U+013D (decimal 317) + defining Unicode char U+013E (decimal 318) + defining Unicode char U+0141 (decimal 321) + defining Unicode char U+0142 (decimal 322) + defining Unicode char U+0143 (decimal 323) + defining Unicode char U+0144 (decimal 324) + defining Unicode char U+0145 (decimal 325) + defining Unicode char U+0146 (decimal 326) + defining Unicode char U+0147 (decimal 327) + defining Unicode char U+0148 (decimal 328) + defining Unicode char U+014A (decimal 330) + defining Unicode char U+014B (decimal 331) + defining Unicode char U+014C (decimal 332) + defining Unicode char U+014D (decimal 333) + defining Unicode char U+014E (decimal 334) + defining Unicode char U+014F (decimal 335) + defining Unicode char U+0150 (decimal 336) + defining Unicode char U+0151 (decimal 337) + defining Unicode char U+0152 (decimal 338) + defining Unicode char U+0153 (decimal 339) + defining Unicode char U+0154 (decimal 340) + defining Unicode char U+0155 (decimal 341) + defining Unicode char U+0156 (decimal 342) + defining Unicode char U+0157 (decimal 343) + defining Unicode char U+0158 (decimal 344) + defining Unicode char U+0159 (decimal 345) + defining Unicode char U+015A (decimal 346) + defining Unicode char U+015B (decimal 347) + defining Unicode char U+015C (decimal 348) + defining Unicode char U+015D (decimal 349) + defining Unicode char U+015E (decimal 350) + defining Unicode char U+015F (decimal 351) + defining Unicode char U+0160 (decimal 352) + defining Unicode char U+0161 (decimal 353) + defining Unicode char U+0162 (decimal 354) + defining Unicode char U+0163 (decimal 355) + defining Unicode char U+0164 (decimal 356) + defining Unicode char U+0165 (decimal 357) + defining Unicode char U+0168 (decimal 360) + defining Unicode char U+0169 (decimal 361) + defining Unicode char U+016A (decimal 362) + defining Unicode char U+016B (decimal 363) + defining Unicode char U+016C (decimal 364) + defining Unicode char U+016D (decimal 365) + defining Unicode char U+016E (decimal 366) + defining Unicode char U+016F (decimal 367) + defining Unicode char U+0170 (decimal 368) + defining Unicode char U+0171 (decimal 369) + defining Unicode char U+0172 (decimal 370) + defining Unicode char U+0173 (decimal 371) + defining Unicode char U+0174 (decimal 372) + defining Unicode char U+0175 (decimal 373) + defining Unicode char U+0176 (decimal 374) + defining Unicode char U+0177 (decimal 375) + defining Unicode char U+0178 (decimal 376) + defining Unicode char U+0179 (decimal 377) + defining Unicode char U+017A (decimal 378) + defining Unicode char U+017B (decimal 379) + defining Unicode char U+017C (decimal 380) + defining Unicode char U+017D (decimal 381) + defining Unicode char U+017E (decimal 382) + defining Unicode char U+01CD (decimal 461) + defining Unicode char U+01CE (decimal 462) + defining Unicode char U+01CF (decimal 463) + defining Unicode char U+01D0 (decimal 464) + defining Unicode char U+01D1 (decimal 465) + defining Unicode char U+01D2 (decimal 466) + defining Unicode char U+01D3 (decimal 467) + defining Unicode char U+01D4 (decimal 468) + defining Unicode char U+01E2 (decimal 482) + defining Unicode char U+01E3 (decimal 483) + defining Unicode char U+01E6 (decimal 486) + defining Unicode char U+01E7 (decimal 487) + defining Unicode char U+01E8 (decimal 488) + defining Unicode char U+01E9 (decimal 489) + defining Unicode char U+01EA (decimal 490) + defining Unicode char U+01EB (decimal 491) + defining Unicode char U+01F0 (decimal 496) + defining Unicode char U+01F4 (decimal 500) + defining Unicode char U+01F5 (decimal 501) + defining Unicode char U+0218 (decimal 536) + defining Unicode char U+0219 (decimal 537) + defining Unicode char U+021A (decimal 538) + defining Unicode char U+021B (decimal 539) + defining Unicode char U+0232 (decimal 562) + defining Unicode char U+0233 (decimal 563) + defining Unicode char U+1E02 (decimal 7682) + defining Unicode char U+1E03 (decimal 7683) + defining Unicode char U+200C (decimal 8204) + defining Unicode char U+2010 (decimal 8208) + defining Unicode char U+2011 (decimal 8209) + defining Unicode char U+2012 (decimal 8210) + defining Unicode char U+2013 (decimal 8211) + defining Unicode char U+2014 (decimal 8212) + defining Unicode char U+2015 (decimal 8213) + defining Unicode char U+2018 (decimal 8216) + defining Unicode char U+2019 (decimal 8217) + defining Unicode char U+201A (decimal 8218) + defining Unicode char U+201C (decimal 8220) + defining Unicode char U+201D (decimal 8221) + defining Unicode char U+201E (decimal 8222) + defining Unicode char U+2030 (decimal 8240) + defining Unicode char U+2031 (decimal 8241) + defining Unicode char U+2039 (decimal 8249) + defining Unicode char U+203A (decimal 8250) + defining Unicode char U+2423 (decimal 9251) + defining Unicode char U+1E20 (decimal 7712) + defining Unicode char U+1E21 (decimal 7713) +) +Now handling font encoding OT1 ... +... processing UTF-8 mapping file for font encoding OT1 + +(/usr/share/texlive/texmf-dist/tex/latex/base/ot1enc.dfu +File: ot1enc.dfu 2017/01/28 v1.1t UTF-8 support for inputenc + defining Unicode char U+00A0 (decimal 160) + defining Unicode char U+00A1 (decimal 161) + defining Unicode char U+00A3 (decimal 163) + defining Unicode char U+00AD (decimal 173) + defining Unicode char U+00B8 (decimal 184) + defining Unicode char U+00BF (decimal 191) + defining Unicode char U+00C5 (decimal 197) + defining Unicode char U+00C6 (decimal 198) + defining Unicode char U+00D8 (decimal 216) + defining Unicode char U+00DF (decimal 223) + defining Unicode char U+00E6 (decimal 230) + defining Unicode char U+00EC (decimal 236) + defining Unicode char U+00ED (decimal 237) + defining Unicode char U+00EE (decimal 238) + defining Unicode char U+00EF (decimal 239) + defining Unicode char U+00F8 (decimal 248) + defining Unicode char U+0131 (decimal 305) + defining Unicode char U+0141 (decimal 321) + defining Unicode char U+0142 (decimal 322) + defining Unicode char U+0152 (decimal 338) + defining Unicode char U+0153 (decimal 339) + defining Unicode char U+0174 (decimal 372) + defining Unicode char U+0175 (decimal 373) + defining Unicode char U+0176 (decimal 374) + defining Unicode char U+0177 (decimal 375) + defining Unicode char U+0218 (decimal 536) + defining Unicode char U+0219 (decimal 537) + defining Unicode char U+021A (decimal 538) + defining Unicode char U+021B (decimal 539) + defining Unicode char U+2013 (decimal 8211) + defining Unicode char U+2014 (decimal 8212) + defining Unicode char U+2018 (decimal 8216) + defining Unicode char U+2019 (decimal 8217) + defining Unicode char U+201C (decimal 8220) + defining Unicode char U+201D (decimal 8221) +) +Now handling font encoding OMS ... +... processing UTF-8 mapping file for font encoding OMS + +(/usr/share/texlive/texmf-dist/tex/latex/base/omsenc.dfu +File: omsenc.dfu 2017/01/28 v1.1t UTF-8 support for inputenc + defining Unicode char U+00A7 (decimal 167) + defining Unicode char U+00B6 (decimal 182) + defining Unicode char U+00B7 (decimal 183) + defining Unicode char U+2020 (decimal 8224) + defining Unicode char U+2021 (decimal 8225) + defining Unicode char U+2022 (decimal 8226) +) +Now handling font encoding OMX ... +... no UTF-8 mapping file for font encoding OMX +Now handling font encoding U ... +... no UTF-8 mapping file for font encoding U + defining Unicode char U+00A9 (decimal 169) + defining Unicode char U+00AA (decimal 170) + defining Unicode char U+00AE (decimal 174) + defining Unicode char U+00BA (decimal 186) + defining Unicode char U+02C6 (decimal 710) + defining Unicode char U+02DC (decimal 732) + defining Unicode char U+200C (decimal 8204) + defining Unicode char U+2026 (decimal 8230) + defining Unicode char U+2122 (decimal 8482) + defining Unicode char U+2423 (decimal 9251) +)) +(/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty +Package: fontenc 2017/04/05 v2.0i Standard LaTeX package + +(/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.def +File: t1enc.def 2017/04/05 v2.0i Standard LaTeX file +LaTeX Font Info: Redeclaring font encoding T1 on input line 48. +)) +(/usr/share/texlive/texmf-dist/tex/latex/fourier/fourier.sty +Package: fourier 2005/01/01 1.4 fourier-GUTenberg package +Now handling font encoding FML ... +... no UTF-8 mapping file for font encoding FML +Now handling font encoding FMS ... +... no UTF-8 mapping file for font encoding FMS +Now handling font encoding FMX ... +... no UTF-8 mapping file for font encoding FMX + +(/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty +Package: fontenc 2017/04/05 v2.0i Standard LaTeX package + +(/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.def +File: t1enc.def 2017/04/05 v2.0i Standard LaTeX file +LaTeX Font Info: Redeclaring font encoding T1 on input line 48. +)) +(/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty +Package: textcomp 2017/04/05 v2.0i Standard LaTeX package +Package textcomp Info: Sub-encoding information: +(textcomp) 5 = only ISO-Adobe without \textcurrency +(textcomp) 4 = 5 + \texteuro +(textcomp) 3 = 4 + \textohm +(textcomp) 2 = 3 + \textestimated + \textcurrency +(textcomp) 1 = TS1 - \textcircled - \t +(textcomp) 0 = TS1 (full) +(textcomp) Font families with sub-encoding setting implement +(textcomp) only a restricted character set as indicated. +(textcomp) Family '?' is the default used for unknown fonts. +(textcomp) See the documentation for details. +Package textcomp Info: Setting ? sub-encoding to TS1/1 on input line 79. + +(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def +File: ts1enc.def 2001/06/05 v3.0e (jk/car/fm) Standard LaTeX file +Now handling font encoding TS1 ... +... processing UTF-8 mapping file for font encoding TS1 + +(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu +File: ts1enc.dfu 2017/01/28 v1.1t UTF-8 support for inputenc + defining Unicode char U+00A2 (decimal 162) + defining Unicode char U+00A3 (decimal 163) + defining Unicode char U+00A4 (decimal 164) + defining Unicode char U+00A5 (decimal 165) + defining Unicode char U+00A6 (decimal 166) + defining Unicode char U+00A7 (decimal 167) + defining Unicode char U+00A8 (decimal 168) + defining Unicode char U+00A9 (decimal 169) + defining Unicode char U+00AA (decimal 170) + defining Unicode char U+00AC (decimal 172) + defining Unicode char U+00AE (decimal 174) + defining Unicode char U+00AF (decimal 175) + defining Unicode char U+00B0 (decimal 176) + defining Unicode char U+00B1 (decimal 177) + defining Unicode char U+00B2 (decimal 178) + defining Unicode char U+00B3 (decimal 179) + defining Unicode char U+00B4 (decimal 180) + defining Unicode char U+00B5 (decimal 181) + defining Unicode char U+00B6 (decimal 182) + defining Unicode char U+00B7 (decimal 183) + defining Unicode char U+00B9 (decimal 185) + defining Unicode char U+00BA (decimal 186) + defining Unicode char U+00BC (decimal 188) + defining Unicode char U+00BD (decimal 189) + defining Unicode char U+00BE (decimal 190) + defining Unicode char U+00D7 (decimal 215) + defining Unicode char U+00F7 (decimal 247) + defining Unicode char U+0192 (decimal 402) + defining Unicode char U+02C7 (decimal 711) + defining Unicode char U+02D8 (decimal 728) + defining Unicode char U+02DD (decimal 733) + defining Unicode char U+0E3F (decimal 3647) + defining Unicode char U+2016 (decimal 8214) + defining Unicode char U+2020 (decimal 8224) + defining Unicode char U+2021 (decimal 8225) + defining Unicode char U+2022 (decimal 8226) + defining Unicode char U+2030 (decimal 8240) + defining Unicode char U+2031 (decimal 8241) + defining Unicode char U+203B (decimal 8251) + defining Unicode char U+203D (decimal 8253) + defining Unicode char U+2044 (decimal 8260) + defining Unicode char U+204E (decimal 8270) + defining Unicode char U+2052 (decimal 8274) + defining Unicode char U+20A1 (decimal 8353) + defining Unicode char U+20A4 (decimal 8356) + defining Unicode char U+20A6 (decimal 8358) + defining Unicode char U+20A9 (decimal 8361) + defining Unicode char U+20AB (decimal 8363) + defining Unicode char U+20AC (decimal 8364) + defining Unicode char U+20B1 (decimal 8369) + defining Unicode char U+2103 (decimal 8451) + defining Unicode char U+2116 (decimal 8470) + defining Unicode char U+2117 (decimal 8471) + defining Unicode char U+211E (decimal 8478) + defining Unicode char U+2120 (decimal 8480) + defining Unicode char U+2122 (decimal 8482) + defining Unicode char U+2126 (decimal 8486) + defining Unicode char U+2127 (decimal 8487) + defining Unicode char U+212E (decimal 8494) + defining Unicode char U+2190 (decimal 8592) + defining Unicode char U+2191 (decimal 8593) + defining Unicode char U+2192 (decimal 8594) + defining Unicode char U+2193 (decimal 8595) + defining Unicode char U+2329 (decimal 9001) + defining Unicode char U+232A (decimal 9002) + defining Unicode char U+2422 (decimal 9250) + defining Unicode char U+25E6 (decimal 9702) + defining Unicode char U+25EF (decimal 9711) + defining Unicode char U+266A (decimal 9834) +)) +LaTeX Info: Redefining \oldstylenums on input line 334. +Package textcomp Info: Setting cmr sub-encoding to TS1/0 on input line 349. +Package textcomp Info: Setting cmss sub-encoding to TS1/0 on input line 350. +Package textcomp Info: Setting cmtt sub-encoding to TS1/0 on input line 351. +Package textcomp Info: Setting cmvtt sub-encoding to TS1/0 on input line 352. +Package textcomp Info: Setting cmbr sub-encoding to TS1/0 on input line 353. +Package textcomp Info: Setting cmtl sub-encoding to TS1/0 on input line 354. +Package textcomp Info: Setting ccr sub-encoding to TS1/0 on input line 355. +Package textcomp Info: Setting ptm sub-encoding to TS1/4 on input line 356. +Package textcomp Info: Setting pcr sub-encoding to TS1/4 on input line 357. +Package textcomp Info: Setting phv sub-encoding to TS1/4 on input line 358. +Package textcomp Info: Setting ppl sub-encoding to TS1/3 on input line 359. +Package textcomp Info: Setting pag sub-encoding to TS1/4 on input line 360. +Package textcomp Info: Setting pbk sub-encoding to TS1/4 on input line 361. +Package textcomp Info: Setting pnc sub-encoding to TS1/4 on input line 362. +Package textcomp Info: Setting pzc sub-encoding to TS1/4 on input line 363. +Package textcomp Info: Setting bch sub-encoding to TS1/4 on input line 364. +Package textcomp Info: Setting put sub-encoding to TS1/5 on input line 365. +Package textcomp Info: Setting uag sub-encoding to TS1/5 on input line 366. +Package textcomp Info: Setting ugq sub-encoding to TS1/5 on input line 367. +Package textcomp Info: Setting ul8 sub-encoding to TS1/4 on input line 368. +Package textcomp Info: Setting ul9 sub-encoding to TS1/4 on input line 369. +Package textcomp Info: Setting augie sub-encoding to TS1/5 on input line 370. +Package textcomp Info: Setting dayrom sub-encoding to TS1/3 on input line 371. +Package textcomp Info: Setting dayroms sub-encoding to TS1/3 on input line 372. + +Package textcomp Info: Setting pxr sub-encoding to TS1/0 on input line 373. +Package textcomp Info: Setting pxss sub-encoding to TS1/0 on input line 374. +Package textcomp Info: Setting pxtt sub-encoding to TS1/0 on input line 375. +Package textcomp Info: Setting txr sub-encoding to TS1/0 on input line 376. +Package textcomp Info: Setting txss sub-encoding to TS1/0 on input line 377. +Package textcomp Info: Setting txtt sub-encoding to TS1/0 on input line 378. +Package textcomp Info: Setting lmr sub-encoding to TS1/0 on input line 379. +Package textcomp Info: Setting lmdh sub-encoding to TS1/0 on input line 380. +Package textcomp Info: Setting lmss sub-encoding to TS1/0 on input line 381. +Package textcomp Info: Setting lmssq sub-encoding to TS1/0 on input line 382. +Package textcomp Info: Setting lmvtt sub-encoding to TS1/0 on input line 383. +Package textcomp Info: Setting lmtt sub-encoding to TS1/0 on input line 384. +Package textcomp Info: Setting qhv sub-encoding to TS1/0 on input line 385. +Package textcomp Info: Setting qag sub-encoding to TS1/0 on input line 386. +Package textcomp Info: Setting qbk sub-encoding to TS1/0 on input line 387. +Package textcomp Info: Setting qcr sub-encoding to TS1/0 on input line 388. +Package textcomp Info: Setting qcs sub-encoding to TS1/0 on input line 389. +Package textcomp Info: Setting qpl sub-encoding to TS1/0 on input line 390. +Package textcomp Info: Setting qtm sub-encoding to TS1/0 on input line 391. +Package textcomp Info: Setting qzc sub-encoding to TS1/0 on input line 392. +Package textcomp Info: Setting qhvc sub-encoding to TS1/0 on input line 393. +Package textcomp Info: Setting futs sub-encoding to TS1/4 on input line 394. +Package textcomp Info: Setting futx sub-encoding to TS1/4 on input line 395. +Package textcomp Info: Setting futj sub-encoding to TS1/4 on input line 396. +Package textcomp Info: Setting hlh sub-encoding to TS1/3 on input line 397. +Package textcomp Info: Setting hls sub-encoding to TS1/3 on input line 398. +Package textcomp Info: Setting hlst sub-encoding to TS1/3 on input line 399. +Package textcomp Info: Setting hlct sub-encoding to TS1/5 on input line 400. +Package textcomp Info: Setting hlx sub-encoding to TS1/5 on input line 401. +Package textcomp Info: Setting hlce sub-encoding to TS1/5 on input line 402. +Package textcomp Info: Setting hlcn sub-encoding to TS1/5 on input line 403. +Package textcomp Info: Setting hlcw sub-encoding to TS1/5 on input line 404. +Package textcomp Info: Setting hlcf sub-encoding to TS1/5 on input line 405. +Package textcomp Info: Setting pplx sub-encoding to TS1/3 on input line 406. +Package textcomp Info: Setting pplj sub-encoding to TS1/3 on input line 407. +Package textcomp Info: Setting ptmx sub-encoding to TS1/4 on input line 408. +Package textcomp Info: Setting ptmj sub-encoding to TS1/4 on input line 409. +) +(/usr/share/texlive/texmf-dist/tex/latex/fourier/fourier-orns.sty +Package: fourier-orns 2004/01/30 1.1 fourier-ornaments package +) +LaTeX Font Info: Redeclaring symbol font `operators' on input line 50. +LaTeX Font Info: Encoding `OT1' has changed to `T1' for symbol font +(Font) `operators' in the math version `normal' on input line 50. +LaTeX Font Info: Overwriting symbol font `operators' in version `normal' +(Font) OT1/cmr/m/n --> T1/futs/m/n on input line 50. +LaTeX Font Info: Encoding `OT1' has changed to `T1' for symbol font +(Font) `operators' in the math version `bold' on input line 50. +LaTeX Font Info: Overwriting symbol font `operators' in version `bold' +(Font) OT1/cmr/bx/n --> T1/futs/m/n on input line 50. +LaTeX Font Info: Overwriting symbol font `operators' in version `bold' +(Font) T1/futs/m/n --> T1/futs/b/n on input line 51. +LaTeX Font Info: Redeclaring symbol font `letters' on input line 59. +LaTeX Font Info: Encoding `OML' has changed to `FML' for symbol font +(Font) `letters' in the math version `normal' on input line 59. +LaTeX Font Info: Overwriting symbol font `letters' in version `normal' +(Font) OML/cmm/m/it --> FML/futmi/m/it on input line 59. +LaTeX Font Info: Encoding `OML' has changed to `FML' for symbol font +(Font) `letters' in the math version `bold' on input line 59. +LaTeX Font Info: Overwriting symbol font `letters' in version `bold' +(Font) OML/cmm/b/it --> FML/futmi/m/it on input line 59. +\symotherletters=\mathgroup6 +LaTeX Font Info: Overwriting symbol font `letters' in version `bold' +(Font) FML/futmi/m/it --> FML/futmi/b/it on input line 61. +LaTeX Font Info: Overwriting symbol font `otherletters' in version `bold' +(Font) FML/futm/m/it --> FML/futm/b/it on input line 62. +LaTeX Font Info: Redeclaring math symbol \Gamma on input line 63. +LaTeX Font Info: Redeclaring math symbol \Delta on input line 64. +LaTeX Font Info: Redeclaring math symbol \Theta on input line 65. +LaTeX Font Info: Redeclaring math symbol \Lambda on input line 66. +LaTeX Font Info: Redeclaring math symbol \Xi on input line 67. +LaTeX Font Info: Redeclaring math symbol \Pi on input line 68. +LaTeX Font Info: Redeclaring math symbol \Sigma on input line 69. +LaTeX Font Info: Redeclaring math symbol \Upsilon on input line 70. +LaTeX Font Info: Redeclaring math symbol \Phi on input line 71. +LaTeX Font Info: Redeclaring math symbol \Psi on input line 72. +LaTeX Font Info: Redeclaring math symbol \Omega on input line 73. +LaTeX Font Info: Redeclaring symbol font `symbols' on input line 113. +LaTeX Font Info: Encoding `OMS' has changed to `FMS' for symbol font +(Font) `symbols' in the math version `normal' on input line 113. +LaTeX Font Info: Overwriting symbol font `symbols' in version `normal' +(Font) OMS/cmsy/m/n --> FMS/futm/m/n on input line 113. +LaTeX Font Info: Encoding `OMS' has changed to `FMS' for symbol font +(Font) `symbols' in the math version `bold' on input line 113. +LaTeX Font Info: Overwriting symbol font `symbols' in version `bold' +(Font) OMS/cmsy/b/n --> FMS/futm/m/n on input line 113. +LaTeX Font Info: Redeclaring symbol font `largesymbols' on input line 114. +LaTeX Font Info: Encoding `OMX' has changed to `FMX' for symbol font +(Font) `largesymbols' in the math version `normal' on input line 1 +14. +LaTeX Font Info: Overwriting symbol font `largesymbols' in version `normal' +(Font) OMX/cmex/m/n --> FMX/futm/m/n on input line 114. +LaTeX Font Info: Encoding `OMX' has changed to `FMX' for symbol font +(Font) `largesymbols' in the math version `bold' on input line 114 +. +LaTeX Font Info: Overwriting symbol font `largesymbols' in version `bold' +(Font) OMX/cmex/m/n --> FMX/futm/m/n on input line 114. +LaTeX Font Info: Redeclaring math alphabet \mathbf on input line 115. +LaTeX Font Info: Overwriting math alphabet `\mathbf' in version `normal' +(Font) OT1/cmr/bx/n --> T1/futs/bx/n on input line 115. +LaTeX Font Info: Overwriting math alphabet `\mathbf' in version `bold' +(Font) OT1/cmr/bx/n --> T1/futs/bx/n on input line 115. +LaTeX Font Info: Redeclaring math alphabet \mathrm on input line 116. +LaTeX Font Info: Redeclaring math alphabet \mathit on input line 117. +LaTeX Font Info: Overwriting math alphabet `\mathit' in version `normal' +(Font) OT1/cmr/m/it --> T1/futs/m/it on input line 117. +LaTeX Font Info: Overwriting math alphabet `\mathit' in version `bold' +(Font) OT1/cmr/bx/it --> T1/futs/m/it on input line 117. +LaTeX Font Info: Redeclaring math alphabet \mathcal on input line 118. +LaTeX Font Info: Redeclaring math symbol \parallel on input line 134. +LaTeX Font Info: Redeclaring math symbol \hbar on input line 148. +LaTeX Font Info: Redeclaring math symbol \square on input line 153. +LaTeX Font Info: Redeclaring math symbol \varkappa on input line 186. +LaTeX Font Info: Redeclaring math symbol \varvarrho on input line 187. +LaTeX Font Info: Redeclaring math delimiter \Vert on input line 210. +LaTeX Font Info: Redeclaring math delimiter \vert on input line 215. +LaTeX Font Info: Redeclaring math delimiter \lvert on input line 217. +LaTeX Font Info: Redeclaring math delimiter \rvert on input line 219. +LaTeX Font Info: Redeclaring math delimiter \lVert on input line 221. +LaTeX Font Info: Redeclaring math delimiter \rVert on input line 223. +LaTeX Font Info: Redeclaring math delimiter \Downarrow on input line 225. +LaTeX Font Info: Redeclaring math delimiter \backslash on input line 227. +LaTeX Font Info: Redeclaring math delimiter \rangle on input line 229. +LaTeX Font Info: Redeclaring math delimiter \langle on input line 231. +LaTeX Font Info: Redeclaring math delimiter \rbrace on input line 233. +LaTeX Font Info: Redeclaring math delimiter \lbrace on input line 235. +LaTeX Font Info: Redeclaring math delimiter \rceil on input line 237. +LaTeX Font Info: Redeclaring math delimiter \lceil on input line 239. +LaTeX Font Info: Redeclaring math delimiter \rfloor on input line 241. +LaTeX Font Info: Redeclaring math delimiter \lfloor on input line 243. +LaTeX Font Info: Redeclaring math accent \acute on input line 247. +LaTeX Font Info: Redeclaring math accent \grave on input line 248. +LaTeX Font Info: Redeclaring math accent \ddot on input line 249. +LaTeX Font Info: Redeclaring math accent \tilde on input line 250. +LaTeX Font Info: Redeclaring math accent \bar on input line 251. +LaTeX Font Info: Redeclaring math accent \breve on input line 252. +LaTeX Font Info: Redeclaring math accent \check on input line 253. +LaTeX Font Info: Redeclaring math accent \hat on input line 254. +LaTeX Font Info: Redeclaring math accent \dot on input line 255. +LaTeX Font Info: Redeclaring math accent \mathring on input line 256. +\symUfutm=\mathgroup7 +) +(/usr/share/texlive/texmf-dist/tex/latex/sectsty/sectsty.sty +Package: sectsty 2002/02/25 v2.0.2 Commands to change all sectional heading sty +les +)) (./report.aux) +\openout1 = `report.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 46. +LaTeX Font Info: ... okay on input line 46. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 46. +LaTeX Font Info: ... okay on input line 46. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 46. +LaTeX Font Info: ... okay on input line 46. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 46. +LaTeX Font Info: ... okay on input line 46. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 46. +LaTeX Font Info: ... okay on input line 46. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 46. +LaTeX Font Info: ... okay on input line 46. +LaTeX Font Info: Checking defaults for FML/futm/m/it on input line 46. +LaTeX Font Info: Try loading font information for FML+futm on input line 46. + + +(/usr/share/texlive/texmf-dist/tex/latex/fourier/fmlfutm.fd +File: fmlfutm.fd 2004/10/30 Fontinst v1.926 font definitions for FML/futm. +) +LaTeX Font Info: ... okay on input line 46. +LaTeX Font Info: Checking defaults for FMS/futm/m/n on input line 46. +LaTeX Font Info: Try loading font information for FMS+futm on input line 46. + + +(/usr/share/texlive/texmf-dist/tex/latex/fourier/fmsfutm.fd +File: fmsfutm.fd 2004/10/30 Fontinst v1.926 font definitions for FMS/futm. +) +LaTeX Font Info: ... okay on input line 46. +LaTeX Font Info: Checking defaults for FMX/futm/m/n on input line 46. +LaTeX Font Info: Try loading font information for FMX+futm on input line 46. + + +(/usr/share/texlive/texmf-dist/tex/latex/fourier/fmxfutm.fd +File: fmxfutm.fd futm-extension +) +LaTeX Font Info: ... okay on input line 46. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 46. +LaTeX Font Info: Try loading font information for TS1+cmr on input line 46. + +(/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd +File: ts1cmr.fd 2014/09/29 v2.5h Standard LaTeX font definitions +) +LaTeX Font Info: ... okay on input line 46. +LaTeX Font Info: Try loading font information for T1+futs on input line 46. + +(/usr/share/texlive/texmf-dist/tex/latex/fourier/t1futs.fd +File: t1futs.fd 2004/03/02 Fontinst v1.926 font definitions for T1/futs. +) +\c@lstlisting=\count118 + +(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii +[Loading MPS to PDF converter (version 2006.09.02).] +\scratchcounter=\count119 +\scratchdimen=\dimen141 +\scratchbox=\box33 +\nofMPsegments=\count120 +\nofMParguments=\count121 +\everyMPshowfont=\toks31 +\MPscratchCnt=\count122 +\MPscratchDim=\dimen142 +\MPnumerator=\count123 +\makeMPintoPDFobject=\count124 +\everyMPtoPDFconversion=\toks32 +) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty +Package: epstopdf-base 2016/05/15 v2.6 Base part for package epstopdf + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty +Package: infwarerr 2016/05/16 v1.4 Providing info/warning/error messages (HO) +) +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty +Package: grfext 2016/05/16 v1.2 Manage graphics extensions (HO) + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvdefinekeys.sty +Package: kvdefinekeys 2016/05/16 v1.4 Define keys (HO) + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty +Package: ltxcmds 2016/05/16 v1.23 LaTeX kernel commands for general use (HO) +))) +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty +Package: kvoptions 2016/05/16 v3.12 Key value format for package options (HO) + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty +Package: kvsetkeys 2016/05/16 v1.17 Key value parser (HO) + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/etexcmds.sty +Package: etexcmds 2016/05/16 v1.6 Avoid name clashes with e-TeX commands (HO) + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifluatex.sty +Package: ifluatex 2016/05/16 v1.4 Provides the ifluatex switch (HO) +Package ifluatex Info: LuaTeX not detected. +) +Package etexcmds Info: Could not find \expanded. +(etexcmds) That can mean that you are not using pdfTeX 1.50 or +(etexcmds) that some package has redefined \expanded. +(etexcmds) In the latter case, load this package earlier. +))) +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty +Package: pdftexcmds 2018/01/21 v0.26 Utility functions of pdfTeX for LuaTeX (HO +) +Package pdftexcmds Info: LuaTeX not detected. +Package pdftexcmds Info: \pdf@primitive is available. +Package pdftexcmds Info: \pdf@ifprimitive is available. +Package pdftexcmds Info: \pdfdraftmode found. +) +Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 +38. +Package grfext Info: Graphics extension search list: +(grfext) [.pdf,.png,.jpg,.mps,.jpeg,.jbig2,.jb2,.PDF,.PNG,.JPG,.JPE +G,.JBIG2,.JB2,.eps] +(grfext) \AppendGraphicsExtensions on input line 456. + +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv +e +)) +*geometry* driver: auto-detecting +*geometry* detected driver: pdftex +*geometry* verbose mode - [ preamble ] result: +* driver: pdftex +* paper: a4paper +* layout: +* layoutoffset:(h,v)=(0.0pt,0.0pt) +* modes: +* h-part:(L,W,R)=(85.35826pt, 426.79135pt, 85.35826pt) +* v-part:(T,H,B)=(71.13188pt, 688.5567pt, 85.35826pt) +* \paperwidth=597.50787pt +* \paperheight=845.04684pt +* \textwidth=426.79135pt +* \textheight=688.5567pt +* \oddsidemargin=13.08827pt +* \evensidemargin=13.08827pt +* \topmargin=-43.81721pt +* \headheight=21.33955pt +* \headsep=21.33955pt +* \topskip=11.0pt +* \footskip=42.67912pt +* \marginparwidth=59.7508pt +* \marginparsep=12.8401pt +* \columnsep=10.0pt +* \skip\footins=10.0pt plus 4.0pt minus 2.0pt +* \hoffset=0.0pt +* \voffset=0.0pt +* \mag=1000 +* \@twocolumnfalse +* \@twosidefalse +* \@mparswitchfalse +* \@reversemarginfalse +* (1in=72.27pt=25.4mm, 1cm=28.453pt) + +LaTeX Font Info: Try loading font information for T1+cmss on input line 49. +(/usr/share/texlive/texmf-dist/tex/latex/base/t1cmss.fd +File: t1cmss.fd 2014/09/29 v2.5h Standard LaTeX font definitions +) +LaTeX Font Info: Try loading font information for FML+futmi on input line 49 +. + +(/usr/share/texlive/texmf-dist/tex/latex/fourier/fmlfutmi.fd +File: fmlfutmi.fd 2004/10/30 Fontinst v1.926 font definitions for FML/futmi. +) +LaTeX Font Info: Font shape `FMX/futm/m/n' will be +(Font) scaled to size 13.24796pt on input line 49. +LaTeX Font Info: Font shape `FMX/futm/m/n' will be +(Font) scaled to size 9.19998pt on input line 49. +LaTeX Font Info: Font shape `FMX/futm/m/n' will be +(Font) scaled to size 7.35999pt on input line 49. +LaTeX Font Info: Try loading font information for U+msa on input line 49. + +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd +File: umsa.fd 2013/01/14 v3.01 AMS symbols A +) +LaTeX Font Info: Try loading font information for U+msb on input line 49. + +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd +File: umsb.fd 2013/01/14 v3.01 AMS symbols B +) +LaTeX Font Info: Font shape `U/futm/m/n' will be +(Font) scaled to size 13.24796pt on input line 49. +LaTeX Font Info: Font shape `U/futm/m/n' will be +(Font) scaled to size 9.19998pt on input line 49. +LaTeX Font Info: Font shape `U/futm/m/n' will be +(Font) scaled to size 7.35999pt on input line 49. + + +Class scrartcl Warning: incompatible usage of \@ssect detected. +(scrartcl) You've used the KOMA-Script implementation of \@ssect +(scrartcl) from within a non compatible caller, that does not +(scrartcl) \scr@s@ct@@nn@m@ locally. +(scrartcl) This could result in several error messages on input li +ne 56. + + +Class scrartcl Warning: incompatible usage of \@ssect detected. +(scrartcl) You've used the KOMA-Script implementation of \@ssect +(scrartcl) from within a non compatible caller, that does not +(scrartcl) \scr@s@ct@@nn@m@ locally. +(scrartcl) This could result in several error messages on input li +ne 64. + + +Overfull \hbox (10.97055pt too wide) in paragraph at lines 67--68 + \T1/futs/m/sc/10.95 Una ex-pli-cación gen-eral de la ar-qui-tec-tura, en cuán- +tos mó-du-los se di-vide el proyecto, + [] + +LaTeX Font Info: Try loading font information for T1+cmtt on input line 78. +(/usr/share/texlive/texmf-dist/tex/latex/base/t1cmtt.fd +File: t1cmtt.fd 2014/09/29 v2.5h Standard LaTeX font definitions +) +LaTeX Font Info: Font shape `T1/futs/bx/n' in size <12> not available +(Font) Font shape `T1/futs/b/n' tried instead on input line 81. + [1 + + +{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] +LaTeX Font Info: Try loading font information for TS1+futs on input line 96. + + +(/usr/share/texlive/texmf-dist/tex/latex/fourier/ts1futs.fd +File: ts1futs.fd 2004/03/26 Fontinst v1.926 font definitions for TS1/futs. +) +LaTeX Font Info: Font shape `T1/futs/bx/n' in size <10.95> not available +(Font) Font shape `T1/futs/b/n' tried instead on input line 105. + +(/usr/share/texlive/texmf-dist/tex/latex/listings/lstlang1.sty +File: lstlang1.sty 2015/06/04 1.6 listings language file +) +(./resources/parser.py [2]) +Overfull \hbox (29.69118pt too wide) in paragraph at lines 138--139 +[]\T1/futs/m/n/10.95 En la primera pasada so-la-mente recolec-ta-mos to-dos los + tipos definidos. A este vis-i-tor, \T1/cmtt/m/n/10.95 TypeCollector + [] + +[3] [4] (./report.aux) ) +Here is how much of TeX's memory you used: + 8839 strings out of 492982 + 131683 string characters out of 6134896 + 309764 words of memory out of 5000000 + 12208 multiletter control sequences out of 15000+600000 + 79687 words of font info for 77 fonts, out of 8000000 for 9000 + 1141 hyphenation exceptions out of 8191 + 51i,7n,51p,8817b,1775s stack positions out of 5000i,500n,10000p,200000b,80000s +{/usr/share/texlive/texmf-dist/fonts/enc/dvips/base/8r. +enc}{/usr/share/texmf/fonts/enc/dvips/cm-super/cm-super-t1.enc} +Output written on report.pdf (4 pages, 92388 bytes). +PDF statistics: + 35 PDF objects out of 1000 (max. 8388607) + 24 compressed objects within 1 object stream + 0 named destinations out of 1000 (max. 500000) + 1 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/doc/report/report.pdf b/doc/report/report.pdf index 6c94409f5b4fdf9d249ed05e6ef400763404d772..08bdc018d94af87f0da36316e2cf157b8a69c480 100644 GIT binary patch delta 48461 zcmYhCQ*fXSu%=_%wryu(+qNgR^Cc5=VskRFZQHi(WMU`#pRGMrd)Hlk*Iiv*_4fO$ zJwP7LLB?Z&!qs8F!@{z%k+6_Bn*M}qxPkLVhT;6*OcMV98HVS7voCsg2pqQmEeZ(0 zG0R&xSh-oVlJN3!B{2$8f^%_kCCznH1OBb9UKUpkjG1nBdh{|Q&Gs9oJUVq#NPPcA zTXpvQXRFN)-8U`IZ6}w$x$l#JrABNy9_M!EOtx(TDt-AZY{n{XM%2a{-va9#y9@YY z_SI!jm|MTcG8KsAFf%qeIsHQ^p0*4?r)_N& zR9;{Idw20jKO14HhlGJ4hCm+#i-{?YnOhjk+V1CtIUGwfmm5STXwQ5G56GQIbupJ@ zaU6)Hq@)K?U{?le@6h&PMW0sPH@h_Q#2^F?xuzx^B= zlX$+hv4PCO z8pF9YzwFz+EX@M3%)C6k_&H-vZo|UjQCxU~^!NEC|45qpYJ>N#7uAX&afAl=ZQ+p{uhz;a?4 zK`g_Tjj|qUjIQ!Bs)Cw}qdXLQfn{{zk-^ayA=7d!VKaI?HEL>*4M4QGnd&>~-^%Fs zyoIt_B6<>P@#_xpF96llDBKLJk@Ne6#!dl&P~j`>V5jyEDKNXNvo!Dpuzr>7_i!zI z+fLvHoBZI?G`DS0H(}R=akh`X)&#yx9!%T5; z#m&>-KfsM#KU?gfKG0?s7q=F1JS^s>)2T<T1Ge`O) z+e%ao9c8~_0qVFHx&|;q%jc0scCv@saY~Sy3pk6U)m8AapZx+#i00R0X#@=x_YW!2 zOXK~zt4+{UaxNBk#aC{t9~ZN_vK9L(y(H(Rb}Sia-e zUZ1Eh8e15Xa?_*)2VYHoI!r!{hj8F6z9-~KHc>ao0X|J@@hzl7!G?bCfA8BmA`YrA zS@b%5hb;rRLc<8GAg*Xd2qly%6KY=!@C-@0GFLJV{w4DtyurRA&CD(hp6~S9di{CK zkla}NV&b|xKnx3wb%dZvccqX0vnr%=u6=row75~S(q;c4J=2#9k88OrpjyB{&?~Pb z_x(pb45$ltPGgk-w^R$miH;r%n3DdnVQ}UrMGft2*p-Ze^oWj%DP%`zoQgwPu zKaX9PS8RUccy?lyKkRnKDrMdeLv%i9d3i~ry(1W9>8n53tpXjsiPp*6k1@Q~pZ=Up zmYfbxNW-_OF$aVCHPh@;LlU7?3wuCQ%XxCe2#i$RxUZ=zE*JgMt_l5AIY!oQgN;)c zcDLZ3=iz~kdw4W+)JGdBY#>(>Cn$&rBt6?iBUhj~LF4+bk!c+m^r#Ygw~8UI3Or_Yd19^(7wZJ9b<1te41*3BKj3P=JD@3w zf6^zdUoSW8!w$paWcX)i^vEJl!`yXVD&ELj2>ZUYoncJY91Bqece%Q|=$h?gJ^P`H zSN*cMH%Obl_hO@|MI!HkDE?i)qQ2FxIoUDQ<-k)KHVDs4&@CAaCwHEN^^V!H0r-F8 z-IrixW?|L(-G_|-cvj!}+CXNPyRvchD3}TsBCPtGmx^zz0 zl{W}2vS+f`?f5Kh<k60AQFVhY}@CYlw5wZrtH;Dz-U(mL#aO(%VYTsMOHv zub%{K9AQ@4ZSs}gzDgzj%OjftES;I$l8LItTG)cDnbbixK_`X*h@XFa>q!KoVVj~q)fqRCM#?G_IF*~>~B-xSPx?_O8 zKP5A7%T=*doaJpr$cG3f1e_WsH6f;@i7LakH0fW#n!@Q2e6}eUZUxCW znX8D)4#6n{VMP<~73{`&zs9*EuLef_aO1VF^l3L|?WjOIqpcm3;r_++kRRTaupZH! zHX~De9upO!Xl5s*wgpvqY8|qK6pVWM5_egm*XLW>lQ5=*zh#Kx0J*bfLyOHtWA3w` z2!}*YguHG^gtrTe;tp6_u2br7Z!DDB`9H~pFsDKv)>K*8HfZ+LI(j|Vi!A)y5zm}p z_%aHU zqprw{exFElD4EA^5oLsLM#`gc=qtuSRr|K#Zl=71{JUy$w|8kPQGb>%PE(}d1%XLPg~xLL3RK$}nCEXec?;Q$_Fk7pE#8)2 zE7Y?Os}F048gfMUw+6ZFrdx$Uzvc?1ZnhV&Vtsq#OA*CxS|S2Roiek?UgF%E7U>}~ z`CR5=qH}K@)~C1mz{#f6KU$hQ=1JK@@)*76kG8WJ1@1isYpNJf5(y&Pkw*P1@B=pZ zsmCn^mkjBcL^tg*>o4U>Q(C=;#(LAmImUWKe7Yk!2RSo=62IRci2*NS%1lq9tE9=v z`=pJ~`Cp3nj}34Bq%8}&ADd|Y{XWci+IPW3E=>G2rKJ@zc#azT_~6E`bZe&H$-RtI%I-v&D`@0>M)tg&!PHE?>k??Y9^F4PlA$D5 z7g@IRZAAxB-aB*&_K_&H4z|-=>+iILz+|xqe8?wQeH{4#8(zt;KU!G~jxIt%gY-@* z1#ynT)stI32s=lHcf^B1AQx)H|xe37SKEgi{pQspG#i zKi+9&=kprulDAiVq3uiu>t#>=@$7ebrl&mo5^tQoB*vInWYY9Nn-y}8;tZJrG(JOu z0ite-;!M`gQ3u(%UgLwC{+`cKwz(h_Do>Vsb50J z`Bn45Rt!n2{doP+>;`z0m6#(9Fb)o0118_zt_SxTCpR6Wc^%a-hrcqTg3i3!e+j9D z2pKX5q{?f>c0HGhcRWNe9VI(1HoUlL3%$zJ#Y=D!=2KbUhuglI@CFm%gk1Yl`SQJT z;g-0vhsAlYtE@dBjVDtaCE9pfS12o{q^dy>MG9o?F#Y?k{X^VDQz`SqYn(lv8gMpv z1Odsr`Tcm#nDo|5;6zZ)%pZ%rSE}uJ17-;BES}UAk=j~whe~_h)h5l!aMmm?ju8E@ zk}3aO21~8KZe=x;yKH2mC2J$I=f1sNp=C#fAmHGhwk^`byK~gg_%Kh`T5kLqL6yRT z4xIH5$50XRqxIYHeKU^Oc=Hd;` zO?=;pqL~QW(N&f9!mcn&+ua1Kw^;tc`H@XX52ou8$neMOoGyZ&giLfdZc2W&?)7nK zKEP1*S@|I-TAxRjt>*LX(Sx)55k7U!#&>u?Yq-^CgAMuNq-l0(1E>-`Lxf_U$)U2) z5dxiu_4YQTIETx7vtBS9eG;J*+(Z|njjfPOMVCZ=5T;heEK&Lbm*CEt!lOd!*VAXh zZJ9>za(%NnpiW6YV?Gy|;CU-sx<`LVg+7&1j9T-osLn~yGC^n=z`uBX7+(&&0k#PU4#_!uvQrsmp1n8Y9ve++ynQ->q# zNtzCFAvEUH!CQ{1QAyS!0JC8cB5}E~19nSanvM`X z-`&dci{XN$zrWs_;{PCQ)u>ZI*uFIwZo?YrUv9~72kC?Eb_D#i5@hsEK1-9+D{-J) zr`hf#reFAlG_vAX>W0kPQb#)VB(2gyczlx(hUzF5FkwF? z{PRw}*ed(rDj96|-5Ir=%Y(ve?#!$KJDqHD_XGEZdc*X3yT!U=q0G8MWTU)Alfs!N zYQi!rkuB_#(bL;lF6=?#Vz!YP10uBXk>F?T8?RhXTq5JETB!R8*u_L*v##&YM>{)w zKW6dr0VTZiTHX=^XqllN_l^6-*Ec<@*2~447nRtJvV%x@U zygToL@PgA$--^AO=rN0;Wrl~37}vOMYLLzzP$s~Z3tQm}XM!qXbqd6Kp0#0^M^T!b z+9I{%u##`xacD;=r|y#HmkC5D%50h$oj)$8BJh{a@*cK#P@rp^t-K>H2~0#{&cTX0 zpfzTrn9vItnRDMrAm36P6+4XGstWsLv|D+J6>93zub)MQn2DUmoY@4yqt(X#E%5^c zNWsqdTf4+v+5QW_n^QxP;)b{L>o=XJjm~HH>;*}|&o)pRfM?GkppU&NJ$kUB??|e# zPeO)}Z(XM7lwK5XXB-v&&s6Z`$B0hn;Gu@CVGYPESb70Ml~CvwpTbT5Lr74 zkMHqO7IVWV=2Uy;IfuGv_D^a zhXMO=iHJZQKId2lG)NbAHT0z%AQgE(&^ZeGo1Y3YFqxh6+(NGjy=@VSAMabKiL0B7 zK9_ytW1!pbPS37VKj=T3oCxaJ_59b8^uF^<-}w$@^1sD8mt*gTI!k_ts|`+ z8uJ*b4DM{}`cQ%m7oboVq3Q1tN?7bglX-kcHVpo{)+b) z+gr2MP-KKZ4X!raJAbeSAPKq_6X-rrvfea&xaFQoCx>6cdId7tH)4t5RNcD3QH)Ul zCypi!mYl1EC+lmjV2TfIb7`u4u1jk3HC&iwEhfSu&c>1<{f6_)+KFFwZ9{hJdweDb%obbTs)p%Fegx66Jig4c?Mha_kCa3^o+k9mLdx2{ zT6cz#JT@EWA?exx6QXxgYh%4(+3)AZjmP>nJYiP*Jr4WC_Qm%t6~EGQcCt?DI* ztXlR(eUOR9*waSQq`bs&FOh_e+-~&^@1iI4A1y!{HLiRFAh(?NNUZCkaf4#CE#Xln z5Oxi(RIa-6rx*5?^3!$w-*oY+hA-VR0x}zIg$wM;^RJW7aWyO22w>%gWv<_*txi4v zUJp3%wTd{o(6EQlEbJ27%M#+kd#q(^V92^X299q(@Bt!v29q-3A*oSE5i5RKkOb=NM`XM4yN$= zQ|8^w!_c0v&6m3`L`n#(ZW#FNG?oc(C~YJae=zLWVh;HrOH z?fI}#&~v`V>yRy7T!I(0N=AMyw(jD{5&VPjQ|dA;iVjoY4yL;h```jPhc)j@TuMOn zb~OnTke|%c@Z+nsQN>~aY1ufI+F{b-oq7sfP+zgF5)Y(FlIhX0+6n-x$jTJ{t=)jW zn`ht89d)Io+&=NKCVGRIG=BE9Zbs=S_5eRUDs^B0tZVsSd`lq9p=c07RI>5U>(JQ~u!grn^ zbFg$Pkb6(T;`<1Hh;wupd9U0K<=t4LbqC&nXMPR0Wp*B(DETD3b4FmPlTFoSxzbw= ztm83jB^qF!S`}%nB3WUqTev?sbDxbel~4+yTlg6qf)JfS@01f%$g#L#qf;O*5BH@y zGaZBO&8kL~Tv+mTXVaf-{k3qb8R;tlsyr%B);tSp^>m4I`%^;ex?5$HWP84h6l*)a z7#$Ul&$2PUFp|$;5pk@rZpD=(Hro|}m+F2JzyYu5#hOWTRqnUvrZWaJTL$4RaaXIc z$vj%7U5ut>j0D`;^RLNAO~%OLJ~yR!EFUTM%tSQLojf;#!{l_xx|Ob()?y#(rEjM@ zUYbAidEy!K1nrYjroVXmC{*ZKFdowwbGz2v_{L zapODRY8HP?)P{t(8=4j4-h_3~VTt0n+AX!H7O^SEdAaAx5>$f_HH2QixSbE}E*xhb z1->$)t{@7HL~b=29b&S~G2|l`x?iT|(R5Wu<@Tklbnu>jOV>9#&FCZufVW3rpvBBx zAz>gUZWXI%_E1RPsy4PbFi1(YNy%FVjgyl_pFD_0K?G7yX+f>^bZxiMmV|44)qRj= z+I+rOE8?D#X7VgLXWsWwov;Vqrb#GKj~3~Es}qWkMuFv%K1zLdM5J-`&)4KTrxH;6 z3Cixvlu>p55(g22l@)CV8s?I;G3htWRm!e*rsoeQF|X?_R8emlsL4s{9gsJJj%=v} zet48G_dn>(PMPi>rpun9N;5zw zgZxwNE_9&dD*5q&wTN5AC_S?#YdV6{^3=KawZBx7NMSia3PIumSl94^<$MB zt9boQti`S&aJrBmuNY<-95<~*5gxj87tY%a=*kVnw^w`x>!y3RmbT zoh(p{elu|=Wpe5PXq8CL*=@M%jXnPvr>XN>f_3!KbG*>R2dI3A(S~AIIXsPfIHfjs z3#B6NXbQ}cin^*bPW07jCjn=wz^)qY z%~4Z5OSm=Lr~ioqfs~{H^Q1T>Oco;X?7_e^Lxy>B0ouC(%z&?uZ#@1ap7rs^BPG09 zuk=zp|DBH4mYuzSbd0zTk$#8$C?PiF+#4k@CD`0!UbyM@3MHYT^CiBT=YjHy zi?iY&5&+RjXr8C^ta_XmTancd!U#86eHtZ8Io|xSC#o`FI5FvXodujSdukmwFm^4EuBd94h(B_j>Jm3rQ2J`RSAY7-{UFl!|Zf^QYhyH$APHlnhL zGgkEj>>9E)9WDh|Um>)gfpv90t0$CKd<(U#*$7H$2i;KTEs2xk+*r$}ufct8%M7D{ zxMDMzE>XR}Fww}NVcy;%yWh8=uKsJCL@W`L#Pe>Goq<(&MmhHMb3S)iW=W{wwJDs9 z_Plm?y?iFQWq*p}U;jxJ;#BIf<(qBTIs)x42^sar&L6%V@f?4?(TEc){8n+K(JBvP-RW z`WV4&uHyE1f2$t%ijPgY{vjdV+E&i_4dvH+XS8E>Rll~aPMTX2Lg{#4!0dJgx{T!l zncNw3+5hA)TmEV%zq!tkh$uepD@L_&;|#Jio3s$2ND{s4o%O;qgN_t8if)CDdmnlq zE?Vv1S!P3w1SUTulhSH4_HHC7#)qUld!PZP$eLOEi!`&`6eD}gzf9cyuHKIhhSrDW zHNs-U2anK`$Srab@f-3?6Aq5@g2I{sM?x5sAi0Rj@%O6$Bha225s@+Y*kKnV@|+~w~ujGV1xs0dP23~qDcBU7=EuY<@1<1MDEUY`N<&~&!s z?>~|SR}>t$HmFAoaoE+HYIM6F6|9Jg?D&*)NOi+8x9H^No>?x4L~W)2&KQOH8H;@9 z5!?4zHIxcPOU1?Cxbrl^Z?@ALB+ARZ_+p@7==dfwxU`TX=i8;I+~3#ewfdIO*9{v) z+Sn8;b&aQnr5@=!Y36G6XppE%=Qb)2w-M0pc2S-6*ftoo zy@3?Yrs1IXDqs;c%0~thtp%{Jn)uQSsZ?QqK=N&2Br1bFgQDxOmh_+Vt7< zg3kxsiMpx$4%X;Uu|arB30Lxoxl^56QkEv^B7XXKp3oiv{J-a|A}@FA50lbXUTItL z(pi3!26e@4RF!m8$`Sy1+cc$~?gKNhQ{SLU7~LUHp1$XO;9@0<#Gnbk9=^C+7u-}G zN^aJWe?RJ_i^xehFhBJ-EVuzLGnf^*yxhM|q<5sbe#{LAEIx|#8bG{h<6z;&L_&eX|VJMZwzEi3%fGZf&L-&L7S<&E=~x60!K z5q4SEL+nu5pVPRe5b5%Jh^rvnt`?VcI7ZDhc1O`=_BrUGEGG<|Rc ze#%+Q;0E1hv9-wq>f9A?FQ=`W9#*LkVx!HwBYq9o#>|WBi-z;EFE@dg%#_2fr?(qa z7Kn#?xfUDBGDeJQn2kj%@gU;4t?Iq&@=)VW@ioq%?;F#>iCorpU!HL%47j~xZL&g| zSO$H^2+w-@2Y$Tr#mYrbh&_=;fPN^oMOidYDCKwwcKbV<#m198NW0i8oto}qj;~6= z_2)4#aR*;H>W%8xbx|BRpKHx3a^*nh6!{y}?RSJbfk(LBH@Yw$r~Nkb5rk~Vj(L5A zf;E|bn3{aBm?VavM60!{Zdvwa%ZfqF8NGj}Tv;V5F5HHcAefMGDD^rU684ydjzV)O zC9Eh?Tsb@>*5-%ulXejxBrb3BTWmAm3pxqNF=-}}M~*Jn%!Z)rSQ71Ntjma^Bb8Gf(X zamv|9u0Ba>KAY&ogD767`%TJ!-msru6F0IWyoDJBY16Tevdbf)vR9N0-(U>#eH6qR0^_@5yh1wZ=bsN->V(B_4mB>eJD;q1QluN_bdd!W6Jum$^Q=fXIh#_*l)#i+%sYc5fL z#3@}hpMT7;`#dfeQT!eDN$emdGe}g$v#S9Z+D}uYSo5 z*Yx=NQiMgxu*w)tuJkZg+O5G-n-vRNLjq#*r|IiU@E??D@{2a+UgbnP%3^pbFot>w z<&UW0volOq+D$1^^9b6mht_n?8EXZC&AktHH0VMw3Sm|&LZX~Km!h-aMwC`1d0Z0p z`Ds3DT9-@j`OjY+^y~hB%&&`+=isZ==J`hRH$|P*I_X-TaL|n>G(9M z_$0gD$@M9rHusb14a-KvymITaBQD$~C2s`cG2eN?(?i4(gsx9NJGl&s(E^T%jIlbhLOLSi z6G0T?Ho>6vNK$G>CkRn5TH>`HD4@Hh+&m^dDSSNC)|KN_4 zE(yFFUFL1Smc2mpc(iwDz%>{s%)9Q;*QDl=?&sz`4=S+R%Rkh)A?!!8Q&8J`PsgcW zSn5gPoSUsQIK2G;s4lePp>?*NPhQ8hw%iPhS8!jcCva2vbzO;s)-Ng~+F)#01FVx6 zNEopbj$ha{@T=}vm;^mKs*OhAUPkSZ;K{=Umtd)q5cuH`H{`*Lc9;<{8^O;qnFUz% zh+#f!ycn6`e#e8pSq+L-6FO2P>_K!xYMfT)(nk@fz*|ZJHj5Uim63*I;CivUcEXwz zzo%8He`mFkGSuIyi-D_Z%kP~G@y8?O{tyw{c#k-8j;u%FBx(~l<;}oX9P$-Lv@_aM z;3X_JgySFn7YCVLt%tRMF1yE@B}Ir_Qlt6TanUWm$Zpr~2CZnK_9ketRAJel3DP|u zo}}5vQ`)})C=2?u&%y7vrW4OW+fmrany@1lHJy)fVmnn9q;7)5QghRGvY%i!=mCQQlY;xDciG*22@TfhcBeXP7tM9| z&ygM_5IRqh#2RwBZ#A2Ib!(?>80r&uMpK0#J{HL?OPLxNNCxUCaLMxtnO)hmTXp9w)M zfl3~xoM4z6f;^dvWt_2|-o=iQGT3v`jgW!{04wpX0-@pTPc)`IJlmFOuo_J{=Jnl_ zA~B}qB?>7}x}{8>mke$E?$#LYUL0RFGAW!+&=b=VyWb5fZ?|bM%S`t1$lJ_%#^Jj4 zNJVr{9RAag?6?6ne+5N*Zh= z^pS>LroK0VF*CoxMT$1_O6G0|;IAtI z0&^68JYZ=YlB;5hDb0pIi4p~hQ@k5dJifE~uu?-b;n&QVSAYab-}I}MkY)^9D?FSH zR0t$Ah7OSk_+)?|OH^nE55}@P3X0bg{}od_&9mvV(gih>5o6l($ff8tiH6(rJyf(; zM}E=uH-wL8bN_;>yZQ=d$iE5#_^&V1B8n#Qeo5HD{KOo(D_JqvH*nja_XAxu9{6>=Ep%Ggq``k-!1_FE&v>=H zW|g^EL0RXqaq9Was#H}=n~gBd70vDt5f^+ z=2g0?M5*tnsM*VNyavz#M;_1ujm)>8ywyL0yuOG>q|4VE@0!s7SI?8+9oIM~zGwye zYw4;i&6y*J!)LC-Xi8jHFd4K*ZELU+1mB&cUM`6-Q?eZx;F4;b^&O+B{yYW7&6Kfz znmNrEr)DYH38DCSn@jb(fnr|O;Xe4=JTX(f76O_}B^MM7ez7b}J&BM|QnkeXwq+1= zGxT(|bsAyp`MMkkQNqO36yT|=S}g@HCJ+DRcGYHGjl7u~%}i)T@5Q}aMUwC{G&$r- zHA*W$Bqt^2v$zX%Asnm)8k6N)5e;-JuCR-`ja+O>-7ERj`du@OL@OmhhoQXk)SZ%I zYQP;WU)?e6L65eEoQYN?ujC5rsb2jLV=+BsKp>cpL$ekj`DzvaN=GjKQF9mwr32aY zw~cDAM3J%MiZDRmxH)ZiFT&_;&MZE zY=t>DeI`7>@S%!+zx>@TvOk2Z=!_jCRKc|12r^Mp*Nu=0pN=@s`JrA9kx7=6Ur_kd z&oo5PSKVc%Xa)6c%w-^xhg5uXc`dYcbwZ=$?0WbvK*|o{IWB_NuO=qdT^T?h|CR(BY|=tS9{S&lADs2Ayc~Cc~7Rsb&rw6 z4U3nNewqDW^3!Y+@7yLzExU_6rkRZBZjB^+xyj2~zfa=~1?qJPkQG28XS$-k1 zc9d)Y#8yx0pL!@6L`BGXy1=(|0+u$lQ%*sM4MBQSDC(+{ir9G5;qh{awz z`#-)hyFpoQ2gnQ%QstVQB=#CidpMJ8jT6(ri3OO$r%BJyW&e*~%cw#E3F@kC+EL9_ zqctck4(Nn9x>)ztXviWiwa9+C!?jWeM~P{99ChhleW{E#uhu`Hqf-r-+G<9zsqMf= zrbiB#H6xKC6}2ZED@mbe)c=HJb#1dVl+WSc{FLkpkp0&>`}F8votPNQoNADL7#tJ_ zWc3e>z7rejJO2$y0Gd@x3@jb8#F4E;HbxBoQHU8Vr_)I`kw~zvQFlSe#esKDe!R1! z|8D3MkAg?1z;kKEcS*AiK-R+BGmP<0$q3%EU8Pn2L-=j&^J_woy&cV#^I%LS&dA|s zYO1Z}fzI_N$eUM!kRjSD4N{Xh8@b#IQyU({8H(`auRuT2P13ye|R_( z5z)8gB1{(~?;S+7hx~0lne&fXG%~WrEAAH!^!5!@z{29kcP(o_aRhmR6omZxil09Pf)2<%ExLnE;%2S{= zxIH%X`qf*{X&NqBZH-&Nm$Qm!TQ=Yx6it*+vhpQm+u&Y0M?3s|eu}m#9|pGc3}N3T zC=o@`q%(D-K7&#+ijdh=_lLY2V6Opv!bA2}xEBYIl`>vxnCkXXX!?Y{dL5sTlx5gA zth&&?MC(SAwyK(GJCO)oo9kj&xQ?$Oy57(mgdqebirg3`|J&=hw`wOl8ebY{TNpN7 z*+JOCH)6JG`Og464!?xQ2E)JXYd)< z)`_pI$I zzAbZoW~_|7PpmfL12;C)j83t?eF){z^aVPIgkR!w+Z#mKcQ^ zqgQx!H{^onB;G;9^y!iXT_Zm@-t&Hka$@1S;JL|ro#paI2opa7s$NXlgTEhYm1&U; zA2+5Q%8!+Jt;Ab-7(?Dby4?E?^okZ4o*fP$S^rQ?+7t*m%ANv^2dzZpUG2iC8Ej{a zI{~(?B40uSoRJoA77pgFZY~xk_Wu+84l<%~NsqdP;U1gdJx5Ie*PIn)xnQk9Tg~b6mfDXMWd>teR;o zRhH|xR&fq*V^GMJBam4Nqr1xF2h)SYle04mZ(*KV+fU}3I-FTrT_PA;eqC5t1{LO` zxN>oOG(qu2;CE!+gKJCHL%Jc!=h*k%(wC|sIE4on~$ zJJ`qskiygJi<^Bz1jcVIZMjnvOaG~Kz0z+Sg0@%4nzT?`m_&Yu<;PStipEv@0Hm86< zBo9Lnc2{^FD#-i`BQB7itoem$4NXNU^nvTi$BuFiL~lR|$VUaN@Y2N4(&jcK$-#f5 zmj?vj_mRag3`$)Ccp638+Wh^wtuMNf9@cXMOoSJuskr>d5f z8M~{mnUx;M>?^>{@INqEB_Rkv4}dNbR({v18+`K_fD9v9$^*6_-&ZDZZmv%5&0LOcUt?d$%+Wojp9&sa(Aqp%S>Gvrt6Qt<)2oBi*~q)54oI~w z?(T;crY`Oc<`8^(Y@hH}F7MoFw?Gv2e?uuTw)@uV{-*mfk~;bhVsCB%n(yCs628$3 zY`%!EzJ=gMTk*bgBnJEDrwMvLh|`*)|2CDhWh6FLlwtPvuU_AHzpd1K%^Z3xBOS{M zV_yJBw1GjP8LzjH*J_x}#YzBY&r_wY4{hh{|)H%DfSUe;=Z;@uytwQ645Ya>LGd5Qn>~2bZVQ=QG;};Z=`4{6)`OMwV}8 zR(};ExWcQbJzG7y!A0GD81<05uR>9GHrlSFknL;srN&!1<^y1bvHglBQ|(%g(tU+L z-A>jQQ*H?Q&$n8oMMl0W-nN(leo+J~_mj3xw|QpUYxTl4SGS`!Co>O57$mUZ7&{;@P~k@w1HkM_8enR|ThEThXHU9O0BhENQUToqnQ zGbW?+&WkjP3BGo{7T`M=>-3gwo8Wd4Z0g2#2^Q|;T{&bCS{)Gat{-Y_gp`bkYN}nP zh(nKA@BQyl_;-%C=6CI!^~2*M#ivl|H4B^<&X((6M*PFEr}VPY)$ zAeiBl-~8OlmdQ}@c;4LlnI^ar!5$REts^p2$+YvfOQ_Hvic&UU9u$V|2@b`E{AD>& zj6|WcbNqBw4Vs+f4fNHC;|6RJGhh>Gv1e>Uz)|ZN%?E;dJR60H9>e0 z23H_Bp%pkJ*U`}w7D<09hF7Zpv%Q{KcCp75086SB8#e9tkml^bE_&0qt^hOkCGsMQ zZ)S#I5(;;-AtwAoV#g_wZSA|tT1u@cCBLCAwD+N+FI?$d+;Y@8^%)L@kKD8Gg+ zkQ*I*Vkf6hi9{WmE0Y_6Cd*dd`_Ralvx~k*jlNSEH~!l1r1;AGd)rQaslVmd-E@F2 zc#j+q;K$^#-)Q)GhoJ^i){xScd4XqRVN`$Brg(*(c6kj)Rs^BD`gcEvQ=RI`0K?K@ zH*IN1HP_q5ZCkE54lhS&0xK(pbsQM8fB0j@TZh)8n`APZ^M=b7{}#=kRaMa?ROg{$ z#Q8=j7=wZhz1=`uPk|lGMlXN3{_Dy*yM6>ks&R6hF;}?cj0Fb*eR_x!R;A~!UWnL( zP0RI>+!g?0MR4L1 zx_axB7@3JoIP#} zI8ZtL$&>9fOr_Z=s{#}1y?PK|J(BcNGaB-X9_TGpJ7YspkcM8|zTRxkdU7z^BNJ~$ zzgan}P3yHzjb9;GP`^w|9RhZ#m|z-};I^Gg893bRaiNR*yODkoJv%3m%?w095Eb#E zwNHq<{H}THhfSNh5yu*>^YeO&lB*R8;)PNX@J0E1zY5f5Er29Wh4%V4 ziB;aKs&MSAUB~w2SL^f@o{|N8V46!;&WY_J^vp78r{%%f-NjGjIY#8TOQpN{#Y#~8 zECG6{&d$Y<(3G5uh#wrD3n6m%xbb{d3TB6)$?o5G+GwNxt`XEUf)L#J^fTh-sV61u zP!ayj5II0RcmwX}u>k=(TYioxjkJCRD-^0=tO33Z2$(ko+OYLIB47Q7^G_Zviys_V zP2jgHFgBK$>xzxblgu@Sep5Wv*XEp-STI~cV2+aK)ykPld*fWOu%G$i@xm|5r`q-6 zV~4+7OPJ>{eMN(NY80iuryaNgB~^7%1wu@x&%uN(Aq`&|*#Icj+W<388IT`SStGr? zGaOxhcLhr7JH@mXo|!Lk``SNVlwRx*2c7m8lWgZ34^bRxWbKbY;7MM=qg05&Fd%W7 z-<=Uk3j_xB3=dH_sDG7-jYari?ZO)x?aFBQaOFen@gB$oe;GWX$Jj1sRf%h|^g@aSF19`tf!k$~EBQ_#Evkgn3I4xf zZ0F_=&BR(@e?kblGNZ;`-ga3&E&xQw^u1;xRF=nmJ zyxez`qc+hLe&JSZBR_n#!=Y`$WW_x?(4#v^=WbiGYi|j#^Fv==Oh0o;+|_0rB<4B0 z#QX-}y5qyS^23zp%Y>zmMIQU`(?AX%?@_tjr@hCzO|3i+Jin*u_ z+r9wN?L-^p*pcr-tmn0UmIxRa4iTa(3;y8bQr_MP1%EacBB?I0)TnOIML1E$y5M$} zO^$-H1+jn)RVz^v<*-N?Fa2T1!01~08l$^};tdOMe^M=LV+XF0yKiYyz-htDe&;@o*tjM+%TnaB%C2V<1^ZTcxrd66vf2QX$X5~}ZayfAkPRlItw-!EF- zFwRa#KTYrTnz}2La|Frz?q~f*R&l{Lx64>FfBn6YjslXBr7s!?C?f>&G!(BLUYMkh zH8r$SqDkskuCO1eTI@cRUWIuO{YuqV80s`S5jR_|cnuv2I>?asB$7STcJ~id!mboo zGx<3hFKg64K~M80$58ACim~91buDXkC$~NW}e_S z7xpV#mFPo4sw7IcYskMI2y`g$=Ejo?9QU{j78>Jt7acc_y&)ShHb!}2e%GP$S6+7y z4uMqTaYK3B;5dTvoW&L>7l z2*pc>(Dn8lt+F#jd*E&^BRe<`1=Iy1n)754AGx`>GEiu1Tc5F#(TF21BAOasf3Z*u zNOPBwV&(|!!B<=WX@vrmzTt%8Y^1l~Wa=Q(ueGuaedZ(4o65tZhtH^{Itv+PaI7tZ z?6iGu5hUZ-8kg*tV*$p8$UZgV8C3K#EN+KXmLz3meGS9P&`7{aviCWK9l91Ah6GYj zuc!9(p?rVIF2`4k(Uyj@!xkT)e^+Qgw(^O270o!6?ql8rr=gCiCKB#h`*`>m&FKf( zOB-77FqWCJ+&6~B zaBP?Iq_Kw@#2tT(G-*Tg3twMQF^Oe1IvGC{BkOfYr%wA_VtWju@4la1e*p039bYoe50w^r&rgA;jax; zp-~4B0s>3rI}l^FxvP~~s6P|e>GwQ?XD%pU*~Z`cCmzfV>1bT7e+MI6;PwMs-d!xS zxT^xGsI!tAiD>E_rABakIXbb|<0%~Eb~$J|5e&zInvJ9-&8&4otiaGEuK+=$3!}TT zM0jdNKk>mFD2aP;UxbX?WG&FVfsC_% ze^VQ2n{Dz@a|^P*qJ$|#55;<7?G_7VOYx){N}>%+j1qAoe=-bjB&3*;UqkXH&7i&} zTh>!ku(Y$5r^s?Dv#BYY&&7v?bOfXweG&%EW$s!BLubwI3rCW;??eDl#0q@)y*a*X zY%E{Q;Cj^&?*XB*khH=gh=qKFfdiKU+nmP2tJ=bIlEBsn@X}Ej6*i-b@Q(o-_>A$bEreqw=cv#o#u5yb2j^W)ZwL6648X%#5>2nX)Qf>$-@)6R z1+G*v9lhB>d!r(qt8hZ9#e@h$uzos!v@P;?)oM@%ewb$lxkTHGyM5bJI~d4`f__7~ zFlHiiR`?m_Oxj|69{aO%7;-ChJ*gtF)VF56b~+({e_uqK>SGePfWSJEgAe{FwuzS> zpmfcS?+$vu{b#q!#&phiS+_80jsX*~KWS>uOO@?3DgkVKL8xIU`Bp~AVUtLG9_VrS zW_n~jq?wOikkn``*K|@lYq4mIUHMd|6V1ABPrxNoim!msof-@Y3vlYgdfLdHsBT{M zvJ_l)e^aM4aVE%fOKF8}|7|!(q+6|2+D;@4j{uS)yg#fj_4?x7ZS5YxtV9LC4UE|D$=zK~}+K1ao+f(uOX2A)%(A{f^f?&`X7 zE2e=kKvrtnTqT&U2Hauqi-J!HRBr^4-13DEe}$BsS!*r!NJ{58CW_|3o~oKD_edkj zYk-p~?Y;~YbXFO$9>>A(p@LS@Fv73OPv=xE(O#oBX*$Xc@9`|4T@SU^{iY!+O%YjV zvTvkJGuxUtV(TUi2~sEILOce+9|Gy?W*#abPnQC-k! ziiw(HG26qmCN(wh(*0_qaz&v$MiR#APUFim?QHV#$P|+YCA?THfe|`>Z6jx4#QJ-+ygk?P<5Y8=L(<}?_@OSg` zqTTQ9b_?ZX`Y}#@;*37`cbDEESP0y&2UVtKKP(YtlYeP6Df4=vfT4le>13`TFpCyr zB^sd1N);zRwHZEdxM+8zYZ~+hrC*a?tRc*UZfO+;=H&?}@?bJ02gI)*o7Uj+g+TH^uSrIg;dcKG>V8($o5&OzTDI#cFq^mJch5*zxZ<4WQn z(v*8fBbmtd|9B(^x|>Q&|s*eAzF4TWxvx3d(_PQ)-KP< z^duA#3|lAzXm0nd4+{^K6Y?@`SZkdGVqZWs8fV z@3hX8)dXr}F{a7(-mu8@x|t#x&=kSZHm*}y{YX(3f^~36wvVe%Qc38ie|q>cWa5v2 zs);`NE2b6SwhoCjLL?4rTvR0^TK{=uNGS)Ry5pcb6UyAjsc%o@TK%{=)b+TjdPyKH z0niY`b~KQDAL736@dYYm&JCbdDi>OKePxT(%g!rcfJeE68jH4MU|HvXO$>Az^UAzC z-WaanMSrCxk}rA6AYczre>aOe!=k z1iWo_#?_|abyI}XermFiWc_u3Bl9QGgpDB>;o5h2XAIm=eBzHRe>hzBeK8O9tfb4Y zIlVlNOsl=N;;d#g{L8K_{BUtzPRpi+o8SII9`iC3qnbR1`|`Hr15crY?_a$8xsi8G zXNKdq+GAxIztW@g_cW)+*qD=t1Q|Jz2eeK#<8AMlM%Wj%u8b81R-%5Aq5eX*+^PMz zwonmWn4sY2%vx0%e{yQ6Jgl|URjsym*vm@A180?hCb*p)?;KcMdMZPE>3PW*imH81 zl{qqP63i0gcV=HYM0H`x-0bmntJecUBl?HX-G>N2m4nhoxdJG-V#kjP%VMD1S-_uY zkl+eCYY{H`Z!jUUeI-VJr!butwT5I>MYbeX4q=(Xk=ef-e|Fv2Wt7byT(s!XJVK(q zb654ay!xy%s?CQh_~p!mq7a=q zDLh=R*~uS*@KyWyzI}kuej6ZT%5gxiXup~7bO@q`THv8ry4I9!VLGTyayqsF<>|)W zupv6v%v!6%e_J0Ln(RSQS4jWLvB~It@eL1Ex)2-c=6IMJkhg*O>H5&HFU_?dFhQp zMj=-Dim-qfft*vo8p{8?P%Xvm=P>B>lFiZ`OlIfHf451Ap87M^`9pR?O`<%w=!|q< zl(99h<7wsamP0TJ_XVaA^OSdXgpsJe1y5oEwt4c1`V}Upt)rD3UM$A4GiHr#QgpeZ zw#EF`wBZBiUZ1A4QI1emCEh`GyxM0hUzuLLlJ4`TqM{m+my@E%FbmAZNOFv5UGeG5mmTy zdaas&oU!0W0GP7!Cp@-NJaSWNAs}IWLnjge^s7>(mbSg| zpYb443eoAHUP)#vkQVic^lB^8RDQ;Xh|=X=`FAPvPA@Klm2d7ar_gU_o%5SgC7_qf ze;7Os)#SY@Bh4iyb}*SJO)Z08v3BEdJXllA9>Kqa0EeqO5Bw~x2sDtys#4O~FJepX z8ioRl59+n#sNYF5bUir|YF^&a5gnqnGS?SGyO?BX6B;TH#ReNsfS#(VMr^pA?y0V` zYN)hrSyOKE&bp3F3ngV*v|2)cG&~YTf2@p4w;hc&zMeVA2Vmy8Wfd3s>_ogF4^`G$ zDk4`-LsY_Z(;~S&h^Q zo27kRT6pDpDG(%(F1=B0ZhstoCs@ypvf`_1(X+M@u#e@OAVr!(x49>TWZpJY(c@o5 ztrj)Bfouf2zJeA`t{tcxMm(X*@P!fP%SE6}@KCGrAgz{$tV@mBWG;P3@FTf4L}Zy!ZvBh zBt&Unn;;)E^{}5!)$4jq=wKvfY|&>(r;&&Ai{Y3PJBs%-a}4S`rhR@af0tjMPBu~b zy?Y=W8XG)Uivy@Rr=(~bmW@a%c|&QPYsq)Gd`%5H)CwN4V9LeAitW2! zy_BO%NibB48Qjh5bN%T7ppbM!!y%^OCnGxOUfm8&H69r?T6e`Q|vbc&OBLjoM_rjE{9j?!5>rA~W!1~tCBE>}{(uP}7= zu7yH5@K`|m_grK5y4`>^Q9oS;r|vLYG9WE-?+Of3!eZqa9c^%De_POi^#BdlN9pmku<3&{7- zzA?3Nn-bFZ;F>C9tzY|%Mi9DF6SdBb+pr3fUKua#8bL~EE1~DAA}tk$#<@fZeo&Ou z9s2p1&vz9l*%^{f4J+5ZW$(sd=+E-N06YEYy7BNb-P(%z!K#{3GHh4-ukk&l|`F#bl zHVxdE0V#JNe=cpitfbyw;9xib6qSJRcp%Mgo9NFsg;W>PpMAu9h6p|Nnj?=kK{3jj zu3YLG(B^#j3ULK8*`qriZ<6SZum)FlKWt6}Ci7dt5jhze`@9v$1sC}Ss&&W zJ9+6X%iAn6Tv(uNXZCl`hgl3!jjHdDIuQ7-HdfV39jdXatzQNIJQNsPTDJ{+$wQbQ z8uo@A!MWKb?D55jY+##X^wfs3OetJPbZ+nT2voTAkPtfIwhX=b^6?Q_qRR?eE53rj zN{}5af5=CC%L}%o2(;nRCl;-yxMr^z&z(YI5gLN2ho1OMD-ge!2>c21itAjuT76K7 z$$*CWd|qruKH(S>*K=bjZR~UEcA;Z zQA1Endtj;b$m@P61Oo8JWcjt4@Q&W!A>Fq2e@fW^7Ouc(RoBEu4GNNiTI66aRL9dJ zudv^KsF~LP%%G5ZbQMg&`^9+Rr1OSn_Lc1ZJ$)%VU3+J=Gv|ype}@6O#RgvgH{3@G zMeRvFx^WxT30go~IRE&}ZZAyWj~4%DF;_16wEoB+T>JMbFUqQbBhMWR>(|;}LEdO~ zf0E_m1;x4%>j4R6s?G$DYc2>p&z9MJd>+!3J>Lnh@TpulualHMF>stmt)7qNXOee-T>ETg=H$X$u-v`3NuV@2=OBT-3=uLZ=-N z`Qj$8eV9_z%Sv?6u#Qu2Hz}I8;icAMMU&vAr5b@vr&;JTScuC}&6xe(Yw)f7%lb7ywYDc$H~xuc!L;#ugL<79)X!&2&~5*jd>| z6f{D8PQFTsqbn5KuqDwVYQ#5rvB=tBAe5<*eG6LQuL@s-n8ML!2-d$nNb5*X`3u(h zt%{Vdn;j;ro9gtr(vYflKrPr{s*o^F%piZWoYg;DCW$|G2!7qjCWSJ5f9>%O#!KNf zjcX$?!xt`Cr_G|d`AhKX?NuAcCh=7@J~o1M;z54cHx-Ah3izJPu>D|T(}R4m=6v&D z<~yOU%9z2!>Yh>T>wNw!vi@u>Z|(QQt&<`BF=Vlwo>BK&vDxY`17MYp3-5(pU^)!1 ziD8x{Gc=srkbu@E4uj-pe-8f4=u77FOR(qr`tu8Nih(AKSgljdLWLi8t4hF2JajN? z0y@MBB_|OsMwdDq+|tcPSLOnNn#fOK$P5)2&p!nnl6`hbNY9HJ4Eq^wA6S^6@|^Zk zpKGO3ugs8dvAl(nxx_NzwlU=*xcKA6-fq+0Zb2|y)v3zJg1ND-f0?bHj2ZU+db`~u zrAN-LbpSpLX*N7a`{NBx)zF!o@`03)nREmaTe74|{&f3yEaF3M=XLl69)9R}1L;l}#c3o7+*bMNql3!8fq1FsN)ht}__??&MonzJ{Z zS@~_gq0sUQN)fIndY*!>Pdzf7DP_gMNqGZ5e#A?7Wxcw=fA(w9ov?bIEV5wtD|HEc z7Qkhylm$G4xEs~d)Rt1&oVkBbRT}f70r4nF;$L&$t5oyC@Fm$LpO`J0Q^4-%NZybNRcCd0Ef51Wj$PJy8%p z(gK z`cCsfQ~h)T3G`fA1u?QKSDxbF?H<7CS3{agUAP;GC8^@mbOKQ{)Xe2F?u9NZW=2%V zt!ZOEar>baVeuGPmEczJ-guKRBR@=DfVwPDm0A7mN+^#}jJ^o*Z*w zkkV8}0WqM_fL^q#03;;#}Jc!_q!|*!^way$!|Nt?QkC*M{q#^C`4L zS4*3GZ6-t{Z4!DbYM2*8S|#N9V~7NV$~AT^jA%+c1{ zBJ|L1VsQEDGiS(AF0-cxZpiuw0fp2cC-m%ge~_{R3Zkmt9vMMY z&7|S(u$E$TBxlHm;u;@~eh=9df)`k5s~+JwF_uPck@H~thGl3^oR>9y#gBP$rmR1% z5FVLBfd@p+KZz2KnQ#lXZv^V6mKrpbkfh(23g>tck$h;WR0eyrKqpk1o4P@xIx{%I zfBn69CoIPsEo@NrdlZ;CnNd#!xs0#F?$lwtO`zj2-`h^u?`}*o$5XMQ{g}skWT~cJ zWxm$X1Ait!%6Xxam|B1l55C9dOj-$_y!}aOk;yx7#fM=n*WG;yE3f2?Br<8FiQ({w`xUD=k5pMh|CP?WjktOhmM zJ3(|B?&Q0-KK4+D{)A2p=s8e|jA2E0bARU?7x`F!EY4f00j6 z(U%lGUKDPu$Cl5r)RcSx+8U}j17O)`QoO>NwNrvpcoWvIIMS(`M;1#R)Z5H}_3}JI zySlyTWpV6vyI@Sk2Ib;(*+C$3EO@K54GMB?2rc2-43+PRNGoL&Ofrpt(M*Fcd_8c0 z4y2WY=hjYDy`@|Fri`RSZa|5!e`~&G9Iunl+q(FE$PE6wS>#-EBz<$xWtBi_N)~>? z+32y%P#@*-Sfc>--z5Gk*Np3e|a1(ANe}o zvUFp9F?o*^Gs$$ri6d4Ab!ngyt3~KvGcQHYn=lL6W)tp4$~EzBqP^|Z@g6~m&})3W zS*NG=0vYSEIxPN{Wnkb#1V0==S6MTVfK18g4jCHtT6pLv*fa}?!S-u{P%bAX=~+-4 zJe~TQ8v5p{N7wP>$E*MUmcd0BEV5&tj_t_VyGN#vTm_Fp+LN2;dW)f zDGzsO?K0^R$M9^bKCAhMWZV_eHR#SnO?~phgeWZas2-!w> zu{E0#O8Lf>>XeF@hXcyZf|3~2t`Pm@bl4p>mS*oaugAz znV^_j8+z$QoboQ=s`_t;K7hk$Am!!#_v7b79NRk8(`Q`v@?WSUA<%<%qt#l3S=56u z9aVw)u$cl&az+-kwIDNAftiqP&Y=g%(Z+nZF|5dpXQc)L2&_ZyYt@tzK9Y^F33!g3 zI}H^`GWf{FHx==%e<7$eS7RCyijg-o$)w+*v_OIjx~@k&t#CVmeQ0vYut*aya&QHoY5iaL_tvl zxY5ddEP>S$Xj`(RlW40)Imu;hTreiFZ$bemti2}vGre9uf49Nw89k9BVAK3-q6p)s z6#%%)`Z?B`1!a#NAqyo#+%Z9FBBroF^d0z?(=+JJ{Gez8(l`=Dyo8EnzKc`6=)`s_ zVng;C7XG8_y~N`hZ`xXAQ25;rOUPRyH2$m6=kYEm8JVYzX~{^C>bA^{=!%Pf0{w#pQp3;%J=fwTt+)}D3g1W6dxXLObmgJ)jt`=eLjDE@PO6b5jvUe z6p)bh(7+f;3J240%-_TaA5?7bYTG*K`L%vt2sBkw*B5;43W?Ki-XDNc?|Uy&*!LaE zZAJUQs;EzQ$Je^;4sAHzH~0h~t%*Y(2YK9D9^z1*f7_!d=tNOd>$;CfLHKjV{i?+H z#DN`M2V9V~q4Op?k52k~9FX&ag zIliw$lM=2CW7b80S>sSfrs?x_(hewG8NRd#3*2xBOFT-QQT#PyIIydhZu-4*E{Gfu zHk{@Pe<4J+0XDY5mv>dJxpkHWQbHReeJ21W;LHWP6;NjsQw$AwOo*d-LFi5|H;1sO zW9;{+Isk=!Hz+^D@Txm-4(^Kk4N3m1iPeRf<5e~8POwHErv^1-)l+3(lM}PJO)F2T zI0e_|y9!%W{7S|ptn-Jt?{1&X?V`~PPQDJ@e>OD?G3h{952cptdk?{cp%{-fveXN$ zl|`SJ`zV!#oN^Hu>(EsfXc{EC^Q?u-*ti%fber7`>?KAdVJiRbKGdn#W3L=xdy}7O z+(omaB1DzA9TL&E9rUrN5PaC@bECU{CCyzy`9zP`F_wjJdkNu#Rf_!6#3 ze{gflU1Qq=3FT*Tvs29iL+-Dm5M3u~s5`hPo2K6S0ai6S=6Tbzm2mWA4@~(uA)26U z%2io|vFV;To(Q;=zBc6d_*hv7JvewYL+hnQ;PU=XQq&Q5nb4 zDQ@Sy;u&T}`P^*0T?ESyAvhJN^Djh=%YVDQ94M-vGLH5nJqrGohiQ2YCo5~{f87Q0 zSG38-al@{evob{I4|NEi<6yDyXx|EOurs}w(GI{`yH4ria}kDaAG&fgIF)Ip5@ZHw z5gOI3{*v4B-e*ER)GeIIH{hc?8X4;P87>kLieNKbuzyT%v7ygBrVFCJUF=4g)>{%Y zHT0@doWDg}`e=-w65BoYaZ5qae=0#ha6WiE%wIAnVs0|hX(O*Cxvch*V^%E>^RqmX zR=_b_wqv9PFeDP(G%u-)Xp!B&h>+{h;JM9f=M=ke@{;c)J)2+n;}yk*G@qLvFQw&K z!vWmZM9V7X+adrJw{%%tuy#wR8E1+27u(yqV8gL^bD!x=S)>2-zU`Rzf7Y`yPUl_8 z_{`nQNx;NAB?YvvMmG0GKue@~VR3U0u8N$fP0kMW_kQ(Hh|-?MOu>K!>nX5*;wSNv!Y#rCc;&Xw~(6{5Igb&PUGu+HMs-||K zR!3h++@R5~%6yBGmF}V9CX32nF}RW(?=;2yM!)F#P@ITKUa>NLedv34-Gp zgTJ`MFW8)WFpnxW{W+Md@{-It*G%chU-}(-{E7zQ?YcjSFI!1vVCJsaG^J00L`L%6 z^E@8O^rzYpAazXuf3!|AdAs~Ry*{x`YFL{Bj332tC}W>k;TFcC)P!@Py8x{m>TuBv zKp^$|)>~X98AEw;>Xrbs(|r`a168)cnwoZxxr;g86vh*m=lXlZty!h_e#EdXE{B_! zBx2DkIP*?k$GPd(NQX~6+wn=!RX(z&#oin^t)(AphgnB6`ZG3H z3)|6CJLKOWhi==}+T6BNXY{^7AYAOqABtMcw9K;{#ACr)AP;-S`9jODiVngG!aJh- z(niFK8(_HcfAnlBZwD2iHyYDm=DuQMrFa$^eeEvw?4UW&%)cBck-6twed(N6Hp03o zCA36IF22B7AtYQPlv`H(grdt_?4&(BBM12V;mfB+?%$YuUT*&a5~LK>=xOs0^|6p) zkV10dmj4d=!%`R5o_*p3ZtES{{e?h-{pf5P7o?Snf27hwQ7=Mq`bsR3{8RA?t9Igf zE*0nu32p5sFsYgS1Rje_8K;Fa@0+ypJrFCd^jCBNz6@tre{&pKncI){ACBU)nil*{ zJJ;q*Pv?QZeecK=JkDu6QHaCy!ccv{4RR*+a+HJE6**QNC_ZtL^|!cbQNb=pP~FXu zhPGDlf08n2Gloz=9TzG%piZE-APVnZ%|?hhXBy({)>@sOba<|s-hK`NO*$N@=okt; zYPhEY&!Pp=o%d-^2*_H_is~Rj!UVi)lZGpPEUI`&T7lV^kq3gn$U+E2BnN6}QKI%A z^0!XfREA~nQ)*mc)2ronrT2|0q;q)N^f*fRf7mW}fWCs5naP?c>NhUX#2#=0bP}!j zJ%iXWDs$-3m6TJr+Wpxk(y+5B^+!cP4#f7zj8G4dw|TL&URymxVSrA{cy@ogwM=T) zLxWjF>UZ{Xnf*XM1cps{GnHgE(RYSz8Z^qtpBG8~oC_%kWI$Gjd&cIP)+N7s&o-dm^$j8hJ`1@ZoluQHCkXxh zrW*ecY#KG@W>_9RRh+Us=Kht5!0t}G?dVlR4Z7$@e~R4r zeEqGO?mismp^ew#q}#AvT>Q!5LB~ar{SklfEMFfWNa1jOk^Ks*!mVf!ylvGEjaJ9O zn?>O%!* z6So>5mB|26ea-{H*3sf*V{~=QfBD;^kXP2^Yyv^1nLiDq6}K^(_^p>e^(sef;*Vk3 zZ5uYk>)iRc*TCi6vt{Yyzywe6j6V*7s`0@JjtDw)smlk;c#+w=z@Os|J>Sd{zK5s0 zggE)safs!0_)=l=NO9Zl@DOXpiyW-52~s!G_S| z6Z{{SCGO8FimR;#9Z*Ie8rb|jRh*IXpl8Xbrkom*2RIn*BGtWQn3QQ?8Z?08$6UHx zHY^xTHXDPefa(UKP1Cw9f2}U#99hQ_B#%QRl3IyHDWkR|GaJhpEWq zrU`{HM3qwl$xe7_TC;RLy&X7tz&tA3dKf7GmRQW~Db4sVw5~iK&ayu2=)6%5m`vw&heCxgp`*0yH%Ct2LuAz1mP9 z81NskAijwGLZ6=X0*Su+c)UtuC&3E9z-1wJURXZ9ZyDcd?yI%$6pqAgZgapzYPdf5DK*c>J~)((O@!DO{nD5&8UOcY*#Kb5hxr!?ho?XfD^p>Zaj3{5BpOQx&w>4+e|Ds&ph5rSgXu%#uuVfx zu>y^w1I3v-d_utKLOO2W%so%lf709HJ0cD?s-~0xVz9Nm#%*09@p5Ou_WO3|G{=o` zPQl6wNk$_&QtX$7-#H_{gcJ&#eI>Rr<^wGRo#A8YR#h?_Cm-ir9OjW~a`8A*69hEz z^xI6$!o*$$j^^C~%7zw;ddNwQXy(3?8OEtfYOP6Sn>;Bx)KSm!)7HFFR`e?a zX~|BUtFU?0=x1)zk06)_*v6m8_o+7kS%%A!WBH#;e`#I1UFqt+mjqff3vG>f{mTRO z&%d*4^yGu_yssLh2?bP3$f82@cHRmdp-vJE3iVANO0P~m5c(3uK-SJ=-PYeY0#PYH zTZRJNATr!nx4v8UuG8T=?196V-3E-M{cxi9PPAE!@wTdo!5-2onbECPpmsiJLJ*$2 z)M&gCf9eWWNU0KxLO(-Ziij8>*@`{>wV=^Xo$DPp9*u2KdVNEF4b~F-qpx~r+`Xbd zlFa?J@x+6PME52p!M4jsFbwW-1pUNC1X0o&(p&VMOa==mFTt^91uF1G*7aqqjG#Tg z2djz{vdMVu%Bo4I>fS;jKxUl*UJ7~6t&nAQe*vX3WjJD9^7{6ZV(Fq;rj$fA8zBDsChbdh?`Rqlq240Q4D z^d)rbx9xdO(+}hlR;i6CwiZ)uw03XvjVaqy}fGpSa1Lo~mNlJsq`a*#s zkxjC{NgSk|4vj#bKON*_?6=RieB)mR? zW}M*%-=<4B?e5!oO43PW8WK9!LD==z1M)NYW97uh-879`WSY^P4Y#zw1M?=I)LviT z+StVJJ4`u+gNR`~U9^ZsX+ri-i9l`a<|3$kn~I*}sC)bx(O00k&#@F#{13D^e+ij5 zXrJUutbCp9e#8wHB|vH+x^CStQ=668qfoa}8Vv6H22Y$!BEENTg zRPBIS68Mn#`z~P-W(h^OwEVilJ-X`VEL=sbC&BfaQx8^M`PRlRFVZ2tW$Oc$6pY3P z=)oXtQ)MS(97vG?q4+Q}FhUretlk~+5ATdDK+l>Z$k8HcR@_^K_$!)be>2*mb+S?9 z^raR)Ho?2l^;<*vlE)CWfJM8dY9 zCD|P+3*_rLOn7nA(41U#8J;quge;Tk>Kg)y(+cYv9 zW#TIA2!hYZ=`wqTBqQLmTv%{x)QNnM(J6%uEEth(^rS8kc(4&~8nP!IC12&3)Tr=*%Z#yLfAW-rOK3Ntm!z_obWS4` z7A^1*IncDM)=Zv8inVT`6cjTf>2o4?OWgflcaIHIxfo-ROpPZh>M3Tz1D7N{U7-T$ z$0CKybh?n6T_@ELXIDOy-W_q9p8Gs(3B0lyGA_*M`)P0bGc=QxphJv}bMz0dex%M8 z4$oMP0#Olif0B6O=+=W4ERjJHx|SkGgxWNN-nGOT8WZ}@hA)Qf`_G)(cezqYBkH3T z4dybXsOY}pHH6p!Y+a+`dPiqoS+1xB|QEqTV)p1GT7xx zlL9xddtGEF+JFh%WXZ4~?7`tP;YFA-+Qznb*k%Ggr22XSTxk6R)-i;j9 zhvfFw=XqM6W*>1Hra}i%(^`0}zHATmO^^G(0$2#A_k=3T@hOlI0pa8*b`vpDQ0bq@ zue!q^Sb>l@nH4FMGG9sJhNjFe;fVjXol8$TQdvtT$t6WqboisW%z_K`lEP?&HasCa z4cB01%G!f=Y0Wy;X#qzNWl_T8o zi=W-Ityg}ti?r7VFR?xGuL@;uWOHe|@)QR9#!MEsDFlvw-04?(PsA5`5v#!rk2^1b26L zclY3~L4!Lldw=)5d(XMAy*B^Ms_IqMtB)FOwn<5*qQ)p{YHtjbvbO^r8D*`2@xD(I_WNB|FVFUv50knXo0A&*pfDORPf5XSg!^g@4 zVCCig2dAm%;%sF87sAfL%EkuZU}a(DK%fLDSegLsoPhun8zU!6Gt0l}tlR)4dsm>X zG0+LX#=^qI4{$Iu2Dmtw{%!EL*nbZ)A+WLnOfCO*GzOYm+95FiLs-_%%pSnX@*lsc zi^G4#T!Bu`f0+Vk{ug^%f52bvruKF=9spCI83MDCJ?JkR0FAi4gNKu)xdjM7V?z74 zB@Zvdzf%DIl?0&X;S2)WIs;_wOzfQ;?4ADdGGzjY+SmZT{*&Yk_zH9eI=TMi{Euh= zOJ@Mk5@hk0v(ev{=9Yi+o&HV=axyXn+8Q}o1MHptPs8m0rxC!?e-7}s5(Z?Y2* zVCDn_{*}SV)yUGu$k+zR4{!zo0Tv*T10ORp$igb8yh7f z+rRStuj2pNl>ZB6e`ITEpSj=%{Op$CS`vi;@G%ErP8 z;NfNQ`EN)Q7bhp69q8Z7@OQHRvdt|23J3(c15FTCm+ejXgRRmseu8RobA~4+^mTV10SJ4p(YMGnAX zk?X0oy`Voxq#JXMcJqThoK&Z40l=zzt)B(7XObc(=+9UvUsD?rit!;k;alvyW>Q~B z^64hZe=bs)GKNw+$PbFJiiT9tyhh|Jdk%Hmx9UJdfG+>M(1Wa%%pLY|gmGkK(eT#d zSCM{TX*iSwpKk&Hy0~W!r9+(6z%%=#Uz`k+c(WSl)NQ^cHk6tgUPrlRnoJLLtye8 znR%9n|1>x$9zeF6@8wvAIJ=SDIA}rX9F5(y3qBlQjWBU7P8M#XA*OV*({g*+S@jclBrf9WG|Mx95buH|F#s_OhqRdLtL4tp!lG)L+3 zo~q4&SXs=A+&k_8qQ{$?=%Y!05%ip`OGg++6l2PJJmz-1JJ^SI(MIQuyzc9&HXG>P z1b(X$6t?IOM)}(ng}}>!){^XUNofO`; zc4G6cNcaLVKjAr8!$Cx+QVURfCx#|?$;o2|eXjM?MD=xk73W_$If7$Z10J1!I$l)T zcn8VxJtp!;WoNZTKel>RW^(_If2(&TUYke1A7N(2cDKw3Cw=Fm{Edq3WJzta+fa%KEYA#z-zi`Ucxrm914 z!`gs{uernql3kNlSq|;5f4e^W2GuM?n75c^FO=(tZ{81Y!EHUL(G$wcy-qf4V)$tm z=G4Ia+JVk#$Q!&2M;vBK3r1E;1QEGP0{oF(6CN!2E2A7r;tR8GK))mP09uF1EwvoU zEdBh|hQ#_vzsL)T+7OxibUv`-aCSJE3;1cZi^e-r{5Cqy8MQUC72 zj4ggDbI*slEX!T?h4eCM(E3w}nsCHAD&X;Dy`a4S8_ENRIEvYJgX`cEwpg`&onwq9 z(YNlWZQHhOThq2}oA0!3+qUg#+qP|EZvXE&CppPY?uSaMYOlRlWmhU$l|1YBWJnV2 zMUIELx(6eIzJ6~)F5ngkIldRqL-FmQfx;ygT;-ytzrHDB# z78xOHh9IqE-zwb93IPz{nynXP}fQqw%?GoxJ z$ts91|1$5o5uMvco3(WJBMDFhyF%~=z+UoN@-9N#59mx&V}kDHV4@*cG1$FS12+2l z(Y+3-l4Qq`u*{wEQ@X3hmE_^INWRFP|L23)AWxzDeqV!ban&axwzSoU0cvG%Yv zx6TGuC<8W~EFXZ%B9Jce;%>Sh{) z<1={rTmeT^VFBV1uSF+=S7)L86$OIrg*9K-f~!x}{Fa^`%Y6J){`s>(m#p4kC-jcX zf4BAuor!H-w=2xypc|}tvABe7oY`Kxt#PKMbV1Tb$R7Uaw@P<6Z%~zHm%?@aAZb%u zPPC~nHx!T7mC39sTbqYwIUGA{Rl(8V^1#yDqTLOODg*9_L%OWiSeO5rc4{a+)sW_7 z4`WWRoqyaUF|YT({>fnpWlito==z=2;)a9$gNki7G_Cc^RsN1i&h0!6h(~jJoRiQC zG@OR~__1J`K0f0``(9){lY&cgi0S_JunpT4IlsZHM|pyCQvyP|9uO%_8LvWt$<0)K zgtf;l0RdpDc#7Q(1gzCMS9PWoo}080QGI zoD7diNFLR8K13w;#8m(%vy)5(RRia^81?r$9Y~vqaTLPmfTZY8Wzo|ubu=Jq1S6$p zge2l?{<<)6+C7&)(?u|<>;wz<`MCGj9eV9haRy|Go=d3wN&QAVh;*=y`H)N)I%CVc z_~Q%{dQyR-*my^#kPfqwW?OJ5O_J21DPFXd`NQs3efkFe}ZqQMEAVe#@}B3mLE=xno0G`a1cJ2*bZZS73Jmh)}k z^!;j9>T7J%vGTqP!n+CV&K`b0e%;m^*8V8Ig=&|0yP#Z_x;u7*KNaDCpS*eOX=u!V zMvp(DgEiZy(k3J66v8#pWtC>bMQ)k8fefH70{+5=MeT6ngi36o7FocwWt-{6z%)LO zF$=4iQLr}2G4ND-&=9np!t%?%<7ZgEk&X*K3)X>NNaciiXpv#iw5DZltO_|h_AW@C zAtmEVf*!;ZmiP{^!%c0Xf-;Ai62gyYmp|UX-sW9&U5hX1shp$8otHR9-P=d|xCc}K z8doN0e|IE}D2Q#w2ey-F#YNx+%8{Tx8h}?eN{7PJteurC*MV^C$%3rNORQEUHViDoP>U8N8avh4R%!{3yUrGayct0BDiH4=2uNU0c)`dtKBMs=-v~y!N&x23?%l^V_88nR&4T)HBh@uWQthMh3D@{C6deFP znj!^L8j*7z?ezsB_hJnb_MbDbICtb9w;0&91vC+=TNGB>jCiP1wDRN?8$J6F*r@AQ z;IYiv>`-*Fc#Bc7&J#q+qu9jZ)~;-5G~@=%af z=;PY#25EhtlUGN#zcG@yr2y8H*TX3uTM1t3$(>y1@I2B>>auQ;=Z|79Ve)AlD3&wHFdlV(c)&KUzn7$I-)B)L?&7N*7>DqWiUI!S8*ymyyBS>pQj8rq7k;(8i^@sNLSYM4bn zt@WiQ?H~=uosm^lrjgtxzXnP*w?l?*NT`UIw0`r$%AfpNLub$xNP)M}3Wm=8$YUKd zSyO#hrdxl*N$g~X_XQC9|0TrT9y>Z(K{ir+gi>rbT`03Ht6>pFe`}i5-9`_8MfPK&CTr!>2&ony2 za@W$KCLx^+HIUcdms<%XHdGb>jOBT8Jd4;cBbmEUW|7zvzxf8?xSj|GAL0#6B)>Ug~zM zwt@9V5dAz>LoEagbrShiX2ifrWZ799b12tPhj**t5CB+j)Ju=>?noy)@(~{M;#yYw zP=dQDTsD&ncZmK9m)<$wJAc04+PYP?bdWZ#l@Pu4v6_M_ew8aVf5AwXiRy+4S)#@ zmR3&}M;~5k6(m53I{lJFe`_9*E6lS)5DFc=<`Ii+=@wxIDH!EmxVAxzM>G+0Yh;TU zBm-!hR>fS)?!CyH8IorXzZ`CWt@88gCUFG|lBnrJ3Wf9%_^q|4c3F{Ug1;ncXan^N zkTy~&NvhnU5LVC|WZH}^(nULQ>w)S(vSnv@rFllWyyozX8LAx1PamYz2?b%!af$RZ zw9;pGN7`a>t%XVJ?Ea>_{?0NCs2j;v>;UZX+k$|IER-Ee3=a*)Ch#y0zr)K`S3J6` z`|&0q)i7U+WE~mC{c7`Nrt`|>`2j^^fhjYT5|jNQM!KupWB0Q7g`LH+ivSVV7Vl#p z5_;LiOE3rr#&AD&f2ck{8bf?JrOQFI^6!i0?!K|X{u6=Xm(-kNXcmPLBpfcj&@{lD zk3$#c%H2ym4#9m9_M}|xc@{pwj`1eTzsdcaWF1q}IEW6TVS8g^;!;n*3@Dr~U(0HJ z?^e}Hx220s_6?-8z9FXfJ`LB8u-%*w{V`W>cAucJ*7l$|6G8$h!MEuwm&lBrUXD~6 zYeh%|fd)v)uC_MZ!^h(o+;;)<&Ggn(isNr6UY)kI!=loObv#-CF_!$pBgw)7}`Ox~j4j{pM8K5i!7VOYtR* z9Z5*9PEJ6E?Va=mjZK5;SP+uP@Pc9zi6?dvlQ9FoMuxriL|2vePuM(F_|UD(rvm-^ z^k?z?K!0bbDs}-3))EropPt<~`1D-HYV0S2G! zndm;gQspZ;($p=Z`&)X|RSe*RYpqZ92O-rf5Q26Am3!{F#qFgOh=)VpnaosqoTkqz zK0Tm?CcIHri_{ua>Os9EXGH{HApk5qcVCX{?3IhV z=SQrgm+@A8{n!D+>0Ggo40_QmFDCw+SQjw@DY5fJ(wVe}wHf27lmegSsw*QX2&bAe zP@B5)m_(1n;=1^&^<80|!4nw1t{L&qb{*1HgM}iJ^nT8PSj4m||3+1`cv-$2ImuWU zxtSoNCii^ujQb+Q-T`cg2<8PN_#O5>*IT-G<=-)z`?(E$1W8)D>_75<(viSEDDK)k zS2@#0+|^HIT6iIScGm|VvQqFNTzE@ps7jKlw8bgJ%P1sTBWAZh(aNo0+BBBSDMU^M z#8O56PME?92Bgf)*GSjpxaT%@nIK7`xq|RrsWw;3k5sEdGJviZa;;IE`&Xf_Vy?%5 zx$17u#4hQmVW(POL3hM$Z6FS4Z5mm@6g;1GT=vG!c8@y`n};NcahF#GaR4L^OM$h6C!JB;e_M2Cy-!K#mYh{>@c(T^p0OP6g5;vpRy#I9W@^>k1?f~}Jy+UFVs=R1_Re$N7hcvKLL${zR zLexCQ7yFQjtz5h$G^cYs3-P;{#HyrcBMK3YKy!=h3zLm+#}}?^=AF6C30aB=W43~p z*4ZU7HqiUGgR_8EbTFs4Q^D6B^uuop>!mBVh6RQBYwIvDBp*@OlM!_Fe+oe9=uyj+EA!is| z`gxpd({Y(Gkx7GnaEgbsI~xby+-^PswfCeCef1CGC`!F6Nk4tIv=U^Nvtac7VjQ_( z@f=~Ap(Bc`z^yoF+Kb?sPY9nr2jEmqztvN7rvL;@#W$xkLT5!^#f9|mxrTg-&K|GVDzYTa3}byoGCh+6p}cyOA)>GIHIq)r^(jgoa#%&rr}0OiHG0di z2mr8f_Ezn|>H){NVT}X%F5}NA6|&l_k^K{D>ObEF5aL*8TA?G>N9j}+lWp1N$crp| z=~QV?OAyK=zblj<|Fo?%8Pus^vmA5Ry4Er5OtAe$)^B2Lswj4Ogh6}rF~$waioayO zGfAWN^$rZdPbL>z8Rzz2O7p;|g4p1n00p#na}fdun^|x__d&@GPf(0;qBk(Fo*<)1 z2KlqTtSkA{#HfnlD=}5m;zd&FOURSf$2&Q*wF33r3;KQg>m2k=ZW8+hrkCQ(@NOWL zO@fBAt4O&w(VItoL(mbIXZT0~;|ryZz3v(5>mf{`IApehlws{HzugYblTAhwmLM>+`$% zpAZbF>M=Y6y+v^#UR`&opl5oAew36SLDik-QE~`%(0}Zre*V(-A$Ut<+f1u72ha9Ko+by!1fAt}?!<_U54BHpVIABPa;KplK z1+fiWRZuDp!}XU@D=L8pQS|KGZLJqYlA(h1SnA9| zK_yTbM8Xv*PhVEW^s;Aq-Ca$|Ex^FoIYvK%79XptB)K{s>e(a`nn(Ir@&npb*Ad9h z12_x;PPUAq8@CyBtrjtmWCiHoK+|aSJP>|XO6or}N6zE==bBbg!*la~IXq#J)#-`) zR}^dv=tT~{J0~FMR;71XhsT`TLHlisQ16Q1L(00?++%9kSvb@?B3Rs-pbdwjh~G~b z{uLe;Gs>F}=ixg6&PU5#k${=n_xKHNQuh+R0%@(Wr$LpCj$$$cPGCcB?Es{nIKQ-A z68DbmpUw?yGa(RS!w$6SK>5s;RC%t87`Gg+26a0MIE_k23f(ckZ2`zW5OYPtDK}*Z zA$AlzQfEo+%!@RAGPu&Ewjyfb+yHZUclE(6%<*NDG_#1fD4y~%DF8k!g&rZnA%4DU z^Q13k46$1oL;-kIQJ|DLb#s*NRlRgW&e3|&AcRssAgh?x$7nU+BpF5a#w+`rhLTUr z(f1&RSh7zOavwpaMk#v7r>f2;$F^t`Lna%aq^Rm7hlT5w=5^D{9%82}p}BQyE$O=+ zrWnm40X8`y$kNbs7BEKvRme_ZgpqO3Xo7kwqia!-I(jC14_A{dqNmOLiiN^tqDUT> zxiLnJ1{f*%wNs#jQjDT%N67V_QxOnzVl8`XgZ^2HH_h~ZzZPSB`ZwV%zsjALE*~O3 zCsb#HFlKwOVrWzN+sTVu--8&HdBrKC5g&uq%J8#8%$<^%2e2UX-S%2{(w7jG-eUEn zd>r`L`uq%3mlSSS@_|SNyN`5n*RWblUX=R`dagR~feueJ!NXjnc?TQJ92nML$XVRm z!o8Jt2`W*#a5moq+qLS`E3f4pGIhcI`j|wVm?*D;*Qzz5U%$Ol_MIZf7+WEgDj#{= zs^<(sZiqUh2*_1CF|MicLRGZoKl=wHR2>p`FxRkT#RO&DCIGO+x(uZ`btc%i5r{i( z{^nv613>gFx?I1P1U!rrGB~hy=}5`AxO`SOLPPNzQI@1yMU}d-@o{8UQ+V;RHqyTa z`$>?&YWXJ9L}z*H9na0McaYX?pmb~IH|g;S4)<5=06y{!OcBFeomqu`4Y>;=R@0IF zX!>JN+6&2L?e!e16^#6>wkX4oC@Gm@p1wBWClh^o7G*8fs43ce*E#r{5(~(MO6Y9Oo z?&CrcfZQ!EHYRJ3kIw<#FCx8DP!;`a2u&5SSd!V2<}5pEBHIJwrojdkMI;XyR{2Mx z!>Q7TGWyM+W#@+$Hj4o3w{A_-=cW-u0Vc~}owvHglzP4OJ~~JXu@sWSBsHVLv^!$s zTcts3^YMUfxZ$lNgScDJI!ekGMUkaFKigX}Kz>+%_DPhVPzHb#Q1L}lL>7t9Y9;u)eOUjkI!9&J}DI7zJO?dW}+d6dmr!pI2n zu6D}N>V(T6AU2!dKMem+30sEh)vy#&x_sMOZgcFZMPheY5JXn38z-?;mfv}Kj_qKY?8XUN^-IXj!J|@ygs4rH zhNWJ29mg!2CR21x!YZR{{rZUd*UsyxndAXx>;e%(B`pkQ(XCkAjp-=tSR~gMz#X#- zxdJvpZ!xvZ)~dRm;cz+!xE$l|n|b;oD=I)I7~;F%mac@|%NIh)x2u~Uq7z#aBkQ(R!oj85vqk|`R~D30adeEkx(H+<3bC#1GW z7}zpWiF5Z@Pv#_Hk-wI2U2f0{qki@S_8vi9aguoiY3$fVc_8YrD$S$ zW9wSvvZ($h6g;7soYR-=htzL0@BwZVcqR}?;OVChtO~{!Q@zKTejD$53n}#U^Eq{s zOVCazr)0kvS*$<+H=u#0ILAIj$-ae`=Rcl z(8yx;b_}qHNRXruW*4W&VnE6;jM(~&9w*?+Go}kJbexn-6bP;Ecfbvx7Rc$P?m%*k z5i1l@l(jc;P~Y!g%_b*+Nmf0~Lu17Cis*eTmOLRi+A zNu^jMg0J}JgUb{z%FcM)?wTp zc(=N@xo#T?m`LB*!`(E)v4PLQ)vL}k%@K4C2xL~GGd!{-&2eMujuw`-&v#VLyB`Q0dy`c=ib!(BV%TPE-^+Q))}i4I~FqAw9d zLD2m5+E<$foE*vMs@ulb8|hnEwp4y5$wB+tAp1EF(0vBtGFR5UN7iL8u8&x3Gts-* z)e9FXvmuZnJTA<;-VE0VF!;&@alyn8L)`TAYwzi{lU+PkI2-WK9XtP~%yt}}yn>o@ zP0|A{X_93kC$i})k4z0eG)*Y&;PnOGAl4`{?&R4P_WxvTiYNeGL@XPEQ>k6dhGuNH z_h#S(G%Cz6HS!5^GpLH?TK0xf9r>rXg&!hwF_vX05u=Vku~eW-Rf5ytbd_3)OfUQ! z3r9&j_i%Mq=HN2G4;zH_xi~uQmT9O6q%`COKVyUy4v~VLUE+njJZgXSmBw_oOgIdN zMGBS}SCf#)@jLAiD8CYh3Jg_7t({#K;*r0aj+ACKu*Gq>6S zn3=#~7nU#LF{bSC?Ns{@Kg8wx{b;hZrhltR!Lt8&b`gbaIUYe@) zywdi%hzw}*>mrN;V$Ob1Qi5y5d&e*sAn}^G2>p($g8MWh`{fn0B(^v-j6ueD+9)Jh zZ^FG;z!$USvz$I)gyZAYq-R1A5P9I$S zj3d-kKejshMM6Q+5-{QQfdTSxLhu_xjFmh#`C8q_YMmak~xx<%cnTt|ReY$<5vf=_j5TS^a;OU10|1X<{) zjuYz*>sV?g{QS_qLv?Jm5<+CWj4Jdv&B!klQ!eT$vrxO)=FEBlY-Ri?{2w%&Bd65? z20}HZr^Co-`6FS_BtrW4Y7F{@z|gAcbDbsotlD-$Nw6j75W2yjc#@DDG~?J-mBV+N z4p}CoiXt#b9NW<105(>uWZDO>Kd{%-++a@oO{cu_MOwph@}%v&e|Nlm!=z_a@#0%} zXxw?(ZL&qcfU>Uux~+J;fSRQuq3j^k689~*5Ugtq3f1wftoBiQCE1FH5e&O3uJR0^ zOahm+c_8~M0fSNL%9y42qpC^h>oXUz_Dm(tuQZUk=BOwDV1|Br9lM4kj>!rhdw28u zRZN6Q+(nCN+Z1Kn(HaP~Mu+Z=*;!N`UUUQN2?PYGa_3G{K7E=7K#p6&?#pJeG8Z7Zz zNzQL&tfQNHzJs}iNOfW|-oHsPU`CjVcYZsjZDzlVn}jRe95(DSFuyEKY)Gd8sxodW z!UT0X0~#6(t%cp!N94V?)HCg_W)PP&F1n=V(h7%DR_!%%5Kx>hj+&u!eQY*U3 zyt*d_&v?Uj9!*U-E*F}*at-sdQvq%oLgTH)xEder{QN1DGW2q<6J*HLORY3_b zi(Pnhmk)^vH2R_}@)q1&-I*AWEqi+;(z&Qs z3-Kh<+X;6(zw3a=QQ0auVmcX>xvL~#HJ|p6gr6BhI9Dn5@QZA0wK?YCj^l_n zH$vu=uLadru_u(lKZDa3~S5Zz$+vr})dkzGj%rEXrLl=$lWnDB_`b$KoibzgMI3 z5lkqIEG0!UudUXRtr7Kw8!yNp0ozQn4K)O@b(cuw?L(-|d^yTgtC7dT$Hs#crdsA8 z2J`&w702z?2YQ*rbn9DDSy~>7dphU%(z93fed6ZaJBx`bTJxrgJm3P*u+Su{G8>zf1vT$f%hkN zRvNd0_BC_O8Sih8(4^@okT}Giy}Y3l){~&H1YT$dds|hv!z6FJEp)ak$zmxgNH-k3 zdvScsSYxu3(~{wUIXVNN!VUlpMonK!i~RAqdM$%D*;B5K_xCv^#NPXr!mYWV!FOg8 zQUL}9V2voge8E@EQRb_E7MdGM)speofdU<&;YxwLbH64Sj{!sqqa2EQg0fOaGdNW`!lHTzSYX+U~GF+I>*Sv`flW} zWeR$%BB|rieMjdqi<=^%mS;Gp{`V-Kgp$@*#*x?>gfhz;#vCddeYh2B7&{#w72long2?-LkuANZp3tr}#CO1a>upIVM>T!8PD zuICPLHkroOt*DFwRhJJl2HY$LxmEO15nmN+QYZ_I65)bHE55r9F?GKA8A*a2>1IST zIYHG*)k9K(c8Jaf!J|ySDl&cnpI_3waK{rIQ)5>&+&}|#0w7@P;!1)_a*Gz^zKWvb z?b)g}4>mDBjCKeAfJ!(&Rifb{+m`~hN!_@~U6=h!a`uoBoW(4HFZs9B9}YGbddNqV zh&WiuS#jPo-uforV^iQnwk%2>ILnVEMtL%Sg^@x@s85Nn2RPlfRDafF9YT>M++cF) zvkd>HU26a=1;KD?E>(oyQ9xHxanh1M{Hjm<!$(BjgkaGIymct1lK7p%`8X5wx9mlkd$%dZ$VjM{Dpct+#I>q)0BC7ibnQ4HN}7 z$6|oER5)~?7qv-=6xxyIf`xDM%&8b&>c8u)MtcNcD2G2q3==*SZHQ7Z2HE=wS9w(P zS1T4Bk}Wp2s8A4;UJ&6bkz1SJV+Q{}$ue~9HYdU9?-d6KwLw;!X|Xk9P?M3f?%A8E zhK*Au{{zEZWR438HjE#R;edkYoIEu1t~_8R4fJ=OhCy!^j?aRAGd2bLFO_5m(=)`c zL;SC%gpT#Xa=~h1pWo^ne7z!_w)__vv~a|kCP)#S-}Ps$JJx}MNk&yVCf4t z3hlpHycNfgbKH#(U6~ANYM}fstV{$%#flJFch=ITL;J>74|pEz>6##8$>{6hE6 z&ci=H0^et%9*H-obh<-i$=17h^>oGcJeu;6zWOd3R)CF1)+%lR9)kcOn%Kt3%HVuur+?7wFZ{*Gt7T+TLxGEAsBy1t8InOBuPuUj=3+|O7UA- zcF557AI3!oedaUdX{n%K!de2NZDI}^-!ADAk%IU?@iMLBy5Mbp1pJ8QR~BIO!Z$>c z7Zu1^{6iYzabc0KP#kipt@1wS-^tu3^dEx@V;2p6lM&WhIj1P{fAb05GHYbxZWiS^ zpsjXenu66C}szO0USbI$SM#*hc?w}5iq2jxy8!FLz_ zBJ1zjRgVI?-JF6iaM?@F6HVlo?Et#ya|*r)ni-3hmX+^m^y_jxYu3VyP)26&`cL)} zomh$1aiJ?eFrsC094l2YNnmrmH#0O@r$38`jXCDH?-cz2uFre-@4)jbBi4m*^s*{x zv|Qtw@3wb&WlNnHPOFfXTytsyX4nchgcNi`o=1W~49I>$b{n0$QY#hG@O*(sn&f-O z%_>DzC6W&Ef-vhvnER9zCHMO{uP3H6`TE)6AY3egNbouJfaxpt4^CvhAD@AK)=`nlZLPQ*5&?R0MD$2CY4Pv3O{i*c5c;icXT>M~PvF!Gp4Yj!rkh5cy0W z`|p1oA4 zlTrRgz%P0XB3g;kDP(jxghC+D{7b(Pw`oSVtRme5wAO4Ko!QO8bj&)eEp;0xihp^*-dT-92EPzKeJt65=a&?<{( zGMQrlY&jU@1;ervT?M<2y(@|aF0S#P#A;Hxi&qKNunPAIMN&_tKc{25-imR!pFC0) zX^YCIt%F!kid9Wq!^oHLHd#f*ehgMx1e zb5p%udPpk0frxRSn1jr!Y<4sGhMnC&Tu}%D&X#S~s3kLstmNtuzXi!nVr31GWc3qR zuH_^rmv8)*Qvc{4cR(jC$VIqrKf8XYLMM$oSj(_3(@kO8+cE_w*fI~OP1B(?jkL@W4_g;%EDm#;|pkuDO=!oeh zFBKsia_z4$Muaa14UucBECMvGF^1HSlmMHhuO^T0%`~K z;(9BS+4nF~Uck}9GxVJG%V`N!@vY?_I^^mN8jar|&QYkW&kj}(b8GA&s4BcU97lZq z2hxx(|1Xus9tax%}h{*!O>t|QUg>f^U|Cr z(YFI&xu7AE6ebzGqFIpj&YN{BPY4=mX@>8u^$PjYafJk|VahQu~5)M|nDJ2r-T z2kcw-THmJqTJhaJzwNW5ai-sIc5PM$={x{iYt9L2P>P(;PY{?(6c0o5Re_CFuomR| z(9vM0)7Fr*SV(#G8lZ;6O}O2Vl%1!dz{EgS@M!@6cd?#=mZ2)pX&ilDmiLWIPVoOsk&fAbFbYcwCQ{M20>;rpbu=zRO$y0H2 z6T_K1%(@{)w{z(yNzmcHfB&}r8O)RZWgJ5R+`Aqd4nG;jth1UmqxjE5lHSzo-^SVX zq4$%mlji9tM2KJudoj<#6*GkLBNxLg!c03<>{rq`K@0mh<*v4qUbO39vND3tBV9D? z(tHR~MH?+GY?Bf}>_XFNJ({Byb6P|yQM(A0PsS6R3K){TNLEhI(wB_d=9`La;6L^Q zZsJmbhxp%HXR*`k!HmV#v3sQ~4}}upoTLj;1*yUllIZWdT=J4iBA1euNikNM#;KyA zDeHL_qewGTdDqD;JA<=AB(1Qc&5dZufZP&tS@9N77BIISRD4TPuix;7ic2*A>Mtz_OX_R1Ffe$-;4=&C7`(p;0F9Vdl3L(!=+?QA!9I7!tMO^4P=R^t(!2JbW z@81%Rj>ULmWTGP(clZ#&XnD4j1WSk?1Br}=&XN2ALn=EEkFGotigd}wN*46j=7X5| z12;OPV9e|v5?s^kTuJ|&5qcwGbIip6ES9HH9um2&oDt3B=)-(W@R^#FC<^;HHqHR4 zdzoewHw=q7ddW5^#BZ)t5bBCiz}m!mFr(^oFy&~Isj=a_O13t1;xp!v`EnVrQ>QvpEH0gjy6k2g8Vg%_C_yO&bfQQKFR#$NZHTLiJ-ABh)^ zRJZp{^!7U>g=IOPv#bLPgPGq+@E8K4zMh1+<0NkcZ{pv?9}PPMlNU{BerD3(Fp|)ts@D zd(R$UBK@(Ir~`(#{(2u8`NMMF#G6C!HzB{IUOJ+lq|}A)-B>^aeyX~wcFz3ny%Rrv zDw`yx%7InDzl{xk6s6;mqf$?R>}8ZzfZgHL*OnX?kaD5UiTm3K{QRlOxUmye>?-4% zlwXFrD_0lpiLhV$^o`E6bLhifSyoEpoa{8kpc6Na%7W52mB57eo0uO}>5?>IkUdmT zEWr#vZkG)R(E^~E1m3~JYB8X2!3uXZne(>aj}HDhNmEp~o&^~`{pm#ZiK*@Cmh05X zrMrLBjbCe*L+HDUyy%hcHM_^_VgA~#}$iJAiHn5zR472!geA5|CiCh!uJ0ZHyTQ&X3z{$b|$7CgxZXREbO|_49b>Xrax!U z4C;j1OoS|iOh5OO?Co6$Sy+DNEBz6hJQ@&XyCP# zGlYxC-9%UrKj??+vBC#ghKtK(ZOO^g%Q^iHOv!6*%GytF6k+bT#7r9#rxA*@CkWWa nV6Oky#^IUTnb;dyK|8w`I=Of_{p=Ojf9g_bGBPoFap?a8{U22! delta 53025 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 PfVv?v>5uPz`f?KTe=DJfKfnF*{*PZC|9TP% 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%0DDp zxewNLGFV&QgsRbKiRZE#W1twGLkcb&CmGM%WjVzl(_X4_>^FQRC8}rGBM$$jdPlwK zHkF1h*rxdojUk_MP%{Lpk{YDyQ|zC7VXfg|3R^l6%j%hYv*x<1J~DqnLDpRJ>NUkJ z*YpjtMRUPL!y8*kuJ9<>?v^LS2{wAGxxk_=$4<4HC@{dXDa9+aN_VSCu-t27uG1FZ zLZI=6B{X$JE*9z^16sJnt`P2(8gD61M5v0*!wutyA1G86w4tQEg5R zD(qZ-lH&%?7$+NYwIxJI3av6&HJ8*9jkm#>(Ov}_1I)Q5{MKl^e57xbV4hJEeA_q# zIr^&DX+#9M$V}BqO&Z8XSlxCvYaAz4iJA-MmTeZTEN8UgYE?DaF=TPtRg`Rl#X~jYcC;)rHSn%iVDZUHX-3|R z7V8iX^lG6AdgsCVrU@iP&eOTTryUn9*GJS`V4ti_PgsAWMGBRm(f9_`nJrr4^D*8G z28n-O6& z`P`HffrgzOVj=Eo3rrtoG#YcPr?f?5qz#7Al4!A7X06_#F;5y3SV}Yo2W%G*YqY}K zE?$EPw8DSD*~xCYq&+dHdUbh5pQ_vC&43hKz>1H}Kox)F_`ZrBRvRuT$rxutqA}DCpX6`Q zXt`h;RA`mCFHPB?(RYlUBGF)zhSIJ_mThJ(@U>L}%5yocO++=mGUR^P zaTn-9%>7%Sg_s#nY=;(^O2evo!FMk0fvhCQjD$?&u_1?L%Ltzutwv^Q*z^(o;yojy z2sD4n`oy<}>)NnzvGwSca4p<5+E}0hO_r|~E=)T*rzgCd>y z?&P{?;nPGzS6GRLDhi`YZn!`n<+kVr7nOh4JVEsyV_4Nm#Xt`;N zaz4>ud<#|1cau@I#zFV|nu z8#NzF4Cubl4c};_i-@Jj9MjuyS#aR*Se9?t+P&u*jsA?xx2({3I9l@#jd7(IG;pBx zr4HH1IJA-+gR?lQ5o>Z(uzb+WLvVlC<_5J!%XBkzMsY#gAy2h+a+v`#xpr>kx`1WW zVcSk(1zKU8Nb5FSz^pg^#(WnnykkvOl5@>>+4vnfo-Q$gmqhc0v+~v#E)1Kbg`9K? zG{#6`hNDew=#SKVtOOc!yfEeI1`R4mA`ZS$~GTAJDo8hSYgXBAot`0TP60IfAhG*P~i3l%D9dfF#4 zjQ8ywx}87rY=GOLzlu*Q0CSm93DX3>Dz14(B>P8I`qVG`mG_(;-0%*7Wa%az4#By;*o#5eN^^vRCZ=n zmvEh1`PoPU>}AH{8xY^}{PIX2vmns3wy)axy5rD^)%okgQ4CcE-B_;Tg8`l#^Nrut z0^Vho6Up+uFeZt_;wzXycmE9aRMI`epzN1jq!tH?z@R}Xc^ z1rsDt_Di(Hr%AAOHfVn>Ud%jIdO1U?MAfmDuNHaXAgjroxGwLish(L`G#X>2^O$^% zMn6_wD@!g~yZ{~iHZ-Xe+C0we^t89^v+kTgMcIqWnGyLZ>+ zj8l>6r!CQnOAK?fL!(n8v)YI@d-es-js!V+gzy@0Lyr3?9esZkxh}gTIaxk7(n+c@ zoOH@tsrGw=K63xX0X>#1wAY-k;=W|D0~UAD=9#vMW646z%h-Me7Ng0w+@KpYY_<$W zCwX89naXn&Ne&i4VF;Ov96h`JkN}?HEwdu$3av$}$kBtANh&tn(cg@>Es|Wz_F+{Q zS>}R`bN@4t!I6Kr{I*^6^DQ!CCCudP z=`NOdNmq=kYQXR-jg#GgU1DTL%ewqK^Td}!@RUpNF!maZy{FWvtf7TEr6JDZp-ze7 zE5YAU{D)=nTAj+5x+CB^xAL=*1co}*A!c<-6Bz2$qMffhPFJV;hog9?Q}+(2F?+sw z7SKGuDU5%+Ccx?Ykdmg(BpeW+M!~~`a?vLRk4}nw@h!`Pr=OZt#`NL682NJ4;6PwT|u`$;U zarF*}fGE9du2T~qE1z21CzF{vd;+G=lNUQxe*o=df!Oa^cZg%LOGNphYh1VG&l5r@ z=1=%Y5FB=JH0c5#>)67YDMghRK1ro2(98RR#N4N=!Kjw5%x+r8mM%+*9Mce*WU8Xa znZ`J9Q#-ILACYL=ci!A26EtGGe3>~Bh~U1u8L@xho2_OHN{SdLh|D-qWOl`HAyzCX ze;TC{G0<@)Nml$ogid1PqVr+-l@>HwQRKAdgO^?7m}sai3yH`ew~P_CL#*wsJN?9hbJh?Q1j*&;@Bq%Bd1 zkzokTzD8#53f8D`f|M~e+XX9h3u!y~f2Q#zGVoK@hy{IFy+m|cCJ03JVJQ=!gw=Zz z^OZ`Fm~@*$`2-(pzoh~RSNVst+%-d5!84c_pQ0!PPJ8<4EHF~>p30QMV5|~XHHM`Q z9JBsFcXPgtP^3Jg>u~-^j8K@cG;0i41CH5c6$ZUWcwwhMU^iq~lkwr<=-O+TfBH}` z9U2|aj>;AgeHf>EfR?f&Y=`kjf=3NLeCFHNuJ@f^d->4&dildy&dkx=wA#@s-Kp7F!3Bjo50(@?h=A>mM zbVhdwWP3|*s6WJzu#ps96`vS2f5U&nV~Ttsv1m2aFU*>vKkyu?&2m{)iF|@5tGZgn zr{$R^=aM4duF(@se<<{gkGiT_Q>fhL)~#y(`!-rd(J>IIE4o#5(S;r9^oPI{p3x{C zc(7m?g=EuQ$4E&{?^lStI7$-nVm|V$wdx^Z+?POiDn$_+hUXiu9V>+re=h13L0^4( zT5MT?ni&`nLLt(5kXPB88tI;q@?rpZ1HlY@isE$zv1aAEgOC)5kdhSThie;}<1ikJOLB6GRf729O9`drNiurY!l}J^E9%O9hU0eB%l~Lw2BDSCAgTF%z zj+v~ZW+eumi3d$FVq~)kTZ)NS>3-4bbUFa357^*BT#N|%hyha;7=?u)c72>Db3>eD8|HNB*n0TXUgQf@@ITx!Zs-v3Byz#0k=7_4dHF2-1FgL_J z07KeQ{fW9N22Bbk=;aT45py?h*FUczU~ubo>v^J5ZQLTV5h>}h9vK2Q3x1>sP;D5} zP*Rj1R$`K&>6jhze;F~!s1A%_+rfwU3|wAWmGj{vm5)*0H8n;;!?rW3wTxPkhnRHS z&NLc$Wv)trHnxyj`IJ$k@gWt%ukEU9j+yj{y0hOhQPQV-L6PC@ecp0HsqA>=s3^iP zV-^ohF+#JVgUF7@*uvK@Scxrx=$;koWF;+F$xNo_f~J@Ye?1uOmX*SnM1FxtKMc;z z9b%=<JQLdVl`3m&~AmSn&P@Jq=jKPFfR2MZe zR2fs=>=1o{a7c?9J#<6*-`o++Br*eI_2|YYY}tHKtSB;aIPaWytfXAqk*7wiDbn}r zLQD*pd5KJhH}+ApQoO<5x}aDBbt$`Lg|FY3drwiUxiXKr`T$uNqxZTy9J90W9k=9x z7t$p;x8s4AP=CcaJu*<&Y%FCv7hJO#tnLojdDZY?oTA96YkWYzqu4Ctc|MO16%x_w z4tAUb^xoM~WEug!>C=cXd{dH$mll~B@-*p*eq0Bs`8tVAW(%7Z!liyX4A_l<|7 zKP<&MeZGQuR;<(O7KUU8AL1K5$EP!c3}e+eKg2h-lj7oq*30SXO>r#Bq0pB+adnyX zk=dqHxuqus-KivB_&?7$hUwZRB6C_YG~$kx7FpiStPDhk!SH@tBNbEnOv^U7_Kw$E{lPN_ z-aHqEFb&Lz}9O>H{->(MD3tF`gUe&8}4tt(DJ=G$J%+W^>!MibtA!T%uVS zqD@kiAC@w&1@W!V$~<3qYB|7%EuJhxm|o={PN7CG<5C4Y&nlU9)#!4lfsC{z=|BPE zVSkQ-r^?Bb7lpvXO_)wuV=##xV+1J-de&Oiwx)ds+K?IpeMLWSjp3QyIxN_YT!uMo zQn9@}@){$x9$B;_7luC7T}4ZX@97ilX!ftFl=*}(Zh;~1WRM?l7YeW z@Z1sP2Sz{PDYX6&nM6dl+|lL0&!l?go_`sO{el!l8E-2U2IH-otfwKhSe6`S%3a; zmL~?-bW`Qn0Bq@Kr6pU{Xobmn{T_`WyGl`9So(r9t&*f?DcKkq{7x_rLKRwxLM;S)i67v-4uATY(t~-B zfq2b!NE$v$=dI;H`*B@OgE;EiIxWp8pQ@Z4j8SeebQZdrk@z+h1tkw#rE zZi~nSmdwne5V;Q98N`NFSbtH4o=ysp=Q%m1ZH)}!o5G@vFz6kFt!-+g4+x*|Dn#05 zj6Jrik@h#%JYVmWO#GAK;#pgSoSqCOJfQ~x1kmu{1-)$>CsCQ zn4Kbzwx*@e_mJLsMUldS;h!``%cwHd>>B4V?^}Qgh3FafG5THOT#PA|RU7CR&@BE< zjfq+DlAgL$t4*`aH#NerL|-gwqA1tHr488@ z&r?rp-p+b@{B2laYOUg3)QFC^MA2<)95O{B$`4CnlQ4(N-OIV%rQC%LA3o4)rh^X+ zgv*0f$a3t`?J&KUcWGi;?6Rv`*!a_2QBO&9&mIrbYciY9waDc^miL*!@#L@XHn#MIM$AWZ{++ygT~2Zj}pyN z6x5P;Y=2mjm@d375DVX6_$?yspTzw|B6>ryUU!_r$OEF&Ewr4W43oI4k&dT)CZ!R% zzt}yid<)gqp+scH`gU-zVYLKilP?QI+5oiS)-^(<@rn5+B_iJmhZqHZF?26q<`?0lA4Inb&klMiels=zT~#7@Wn=S zdPVRiss-QMvBG!KCFv=}h;X)P;_Gp0Aw=3`kZ1!RYjTHC6e&MT2xZ60B_JfC{IHZ9 z%oP$=j_r5NgT4i9?g>65M~24B{_A8IS1nFUwq<%V3XkV7^kcpd8GG1Vo2?6xmg|Lh znSU3a>A^L{7D%2KdN+!bCSiD&P&8uXp~Lh+vXU^Q?W{>6(%G&|9|WSK(>;@zNJN-b zj@ci#h=C6NLD$%x1GX3d>ozv^tc5C3h@4u}2U#Pp0GWG8Au_t4n?5MSLLaE05sQhm zzqW|jpAN@AiHO~yWQ92Gps8(R3h_FxTz}ViEr%Oo(I1xUq|$TLJ-5R$mH;0PbnxSf z1!g~FH}kWO@{=iS67;Rn@JtvKs)Dyn;?oY#1%l;@YUZHCi1Z?+PnpDE02&5s)))!h zmRA^=?@JaKP_=El!Ra4V*Y@sX09d}}KWHu>(Di?M^#|+@S6GYan4&wIsqX_5sDFNA zUJm##e|L%x4UjRa?~un;G3VV0&~mTl0dOLYhHFIj!0T5Z)?n@HpI-eFo$%wU|K(o& zlQpmY&A<8=^e2?Vz>vZa-xuShFgG+e)xuCe;mA>Rg74cIVFWfG*A+ND+H9Sm`JxB5 z={Lts;8T!1Z~v2|7noE1{>nF6`hPdOZ(5`!EclC6UtFy50!@5H%}Db33@t}!%bd4N z64}8MZ@@x%^?CE%d;`sk?LF!Ie!>O5QG-r$!nJwZ%0s9$4SM;2XQ&Y<4iY}nX0b-W z!@zBCA!IqTAb?{y$o_3j2ajEQI{IjxHxDf#ur^LHgSgR z80F{uxz^on{+wY~Z}YLFd^;z0uDLeqiF*Q?zXJsJI_d}uKv*TrP?{(Xze)8n9b1z#U)puQYCneP zvs_o}t{GjZ0L`*7n%<(}qwdVGrdu`#NuG0u_)G^))Sl|0*IJ^85r2H)1paY1`Hn^K zVflH@fRI=nR|0U=Fy-bTni!E~7IpWnSIp-QZT>c}hx>`Fh1Z*G&TKm}TqsNrId9EeK9iP;q^J|G&l0x0bIv+-A^@ z>h6TTVrVvCn+g5-W`7Gj*NzR%i@CABUNBh|?55TY&AHN3nmyAc3T{8J3z8e&RwQSE zB)-eJ_V?szfE_~nsrmFE1pMgQV`3_4eX)NjN08T>$zzm}Iq1VuZ}+D)GE^n=7<~og zVOGYLA_k>iBKXRaW>y6N!-b~f3~ywz{tD1uEz@|~Oa9Omu77q``Gh;?ELpYf-CLe<>Nq~5 zlMZ8|NgQ4wmAa{?GV*|`2ePcjdEL!8u4T0?3a3RHFM_xJF))v176hk0mH_7%m&6#F z)nQ3|1!S+3=jw6NPoZQmvg7%cArYhME+`|Or^7d-+su^^N(4Uz(QB#Lg1wTchY)74 z%2acetbcjSG}KihO{__Xv*IpVkKmwR13PL?*7#ZTJVKy|R$C7``t?5r-&-IS>-b!JQD>ru%py=$N!-jRlkQT)GWzn z4lZ=gb_08iwEli}jUQ?Z^XcViUT8;l=x22K9epIxRj_jYes<~63&)AW7iYsH~ zSh)_BcJOg0k%`6-GbngcH51hwj(dD*LLJTjGx(#)PwdyJMt^%-V=7DThM&c zj+8VPcH|2ttAc&bj#SfC+G5XiiGte??1JRecI0NNsqb4m^6$XY06T2Mr{fwaSfjRg(6w_PA{tbP~oYnKU z)HWP^<3kKHzIBWMi!oI}?e)dE`0f(p;<<$t_EOkhZ)KG80h@iSol%C-$XPN9H7oeE zLSXb^hPk{W6k15I%~lA^dmCj9CDKQDU4H{+s`Uz?8a87_C?^76VT7yl69F~=Zx&ZI zFaQ?AD++|zvRhF$$V!oOcbzI}Az6(wBX^38ji%daxP5DdH2ZE+8a-y!kk z=QYzh5}#|-+nCKr=oQ9`Q%JGp3*R9X&zpXQR6U;^ZjiiVU?No$Y|=_!&>6{$W$9C_ zeDEfbm`*X3T}?G4y44A!(0sAe27f6qxUo~~42EpXvnp{%N{|{#F!5amtRA;Rs>##0 zOCWJ`VK54TG|fc`vEKKd1?%b@mngXXz%EEWZEJ0&n)<%Awf+t~4Y0$0dTKsNTWfUf#@4#nm$uew z@^r0Af77;>A68U{*`8Ov5P$U83Nmz(7-pe5PAff)nMyCV^J7Oj&7m90byleX#=W9E zt9&8oS#5-g;Vw=~hLzA6Wz_AQC8LE=J?j#qIL}Ag0)x3#_-bW|!3V59N{qy)<5^%_ zeIdUKh5AW=vxZE&V_MdiI*pG7(AEp4m|+g{Poi90Nr1Cb$7FhOuz&U()ToTE-B)G7 z=d;Udd$HprcP(IKy(3J#iO;IXo&Y#2pc8$r>mI8qB!*QKJVA{`JD%t<0T5c8R+YZ> zD`0!Y5vI!3$KO)>J-e@E2f_#oUTMhIGz&}M_2YIupCl?R>Ug0nVf^+M7 zC?@!nM&RI2=97 zd7)hV9m(F<6%ga@deOBng6%c))pxyy0sF5ho!iLh%0cc~Ajd%4>4sAW4lF^wOP4s2 z;V+Y$R5*YC1cI^Scn18OtNaD{jH`SHeA-pMbM}O*{8uplgsc1#=JOh6>neY7yLFZS zy9~zHw|M7MzZeB+m7Wkg4-gOH%9`B15?m#wexXhq6 zdt0!3TNi6zbnOdg)Q|hwu<%_!Kd*(45FuLl3}k=ynKOeblf+?neky{ctqS@I5XX;a z0L$}ZFYfsVd-20r?3sR{3{uR>cP3-tSH26(LDD+jdRs}W7AE5I8(NmJ{F&8WVA&P~ zHq|?tA7~CL5tE2YGzYUZU*u$MK7hqo6`F@Z#%MhowBY#$PW2wQcF(jrk{pAcF-Pr8 z?o5BA!p{+1&L@YG9A7M#q{(IK7j@exs3MtZ$rKtkUw?5e(O?tvX|LqMF-{M)YeCLg z!vGMwfn=(L#FyU+jiK#x+6*LPia?W!iVM$o-_|H{jO7A5e8&ZY^d;RFF2G(%+rHov zJH~}mXenjhsP531eBB0(mMhf9yhQ^=KD>WXXbi9Bi`jKmO+GSinL=Yv<=w#0cNK<; z8fWkLY_&K^ZY0Xykn7S)qKWeH5`B_mEjp8P3qf{e$p$!p3{B4tKFXP34OZu^oD#+{ zTYS38yX5gLc-K`e<5Qjiv-p{!f)9WNIZK}~TB?#Bc!({w+C>oZ*Iq)2A-MQJR3U$2 z6~bWNazeu>m$_v_kQm0!Gh4*SB<7G?3K2pzRVNWI5yUHK7?2tf+o)l_w_S}G8rTk1 zBW4H(8V)-|sHZW9pb@d{LBDZ3M6BoF+@f=spTIJz{icnMv7(dLtU5HZy0m4L4}A+0 zhABjcVd86vA!&-9k0}`6bkm)l5vu5kt`M0bh|$zHtPIJZ5aoxZ%wV*dXt&DGDI0jb4l8tk z_d3u`d<1`yu`RaXkO4eOWt#<>Wxh4$8N1_Mv)M4bQYadcsrJyYU4<-8Osan~5Qi>- zxz!e)q!^%m_*l2BFq0aS4l9a@XKU;!NfBxRCZpf-n4rp0-%yB|0y`z(=)Ot=L184mj0izvK!s)-^#^RZP^lJm@O23^&BX_(3%nE2pdhE8$!|?Zv9;^`=+GXloiO8hmP4de&WSBZU^HLPEXO4{R zu+YuOFz1CrY`KqvWaVl+L-sO3m}G@HvToC-Q)FbB+V+x(qB(!_n((`2ZrYeMB35@` zdW}sRn$g@eRLKgnD)XFQeQ*^N>jDG46^l>$12Ypt$mkF36h{A7Tr-0eZ?1P-!~VC$ zEIJSz7zW=}6ru3Mq-Mt$5+-VI@9PxB!UW`{=nvHePcLp&RrOG~YuPdHsrBDh*+c(8 z@5d0gh&}J0WaWPnUpI*nQO=iDyme88=;MbTv=C zUF!nf0X62K@Urx`3}sE4{ltx+0GJ?iO*(=f)k4^kr~)DA`~&x6#Y$&(Q(tt z8j*Jk#oKL-$p=has~Zoah|W3s1GAvC`6;U^Og?{L%9h89*3*MPAu<+xQr$Ufgpk0F z7WFh?db>mCk{{^o)pP+-mBU8dQf+N`#CStRtwAFOJ{hsHaaWB;cw;?s%xjz4$>*j< zEF;5r^$IaDm8IE^oXgA#8WuI;Hzpj})>!FLv{;Q)5WuM(AO|fU7-^yi70j6nv0}5G zyZe9q(84bktLKVm<`!l>*fh@bR-`UQ7ENZl6y54^XuoOoCF&%i{BY?alN3xQ@wn?r zT_k*$d9jhr03QN~PchiBoea}n=G1vBl_63zS~aDmmfxU(6DBRyXuvX|3bbn-GRq5t z#tgh6wnBDIqY(s|B#$92cZ^uyo|zYo$Z>xRHEa>NpJuyYB{DuFH*-lbS_V;;jk_qu z%J(!`BPOUCfl_|cE3g+!lj#zXAuO44WmjX)mA*6!M2sKvcy173RPoqYj~|ty(A2>l zV&N^Bt`WAFOY}(Iv=P$J`aJc)_~2poF)*p3=$YHa=PfHt4a3|<3Xy(K#_byqJr#dz zCuv0H^I~S`9b#g3)Onox2TV~2cc&>9Nc3vvDU+dc=1Y3n%p^pLB6I&{dh4kVSR~Hy ztX+NRvPAHpKCFdIjT9%(2$_WWX4~>Tzz=1PN>kvG!ByU+i?1eDUC!VYrRfxckmaIm zr-u^5(j$R(vBZG7PV-S?c;m6a7o>jznhXnHlj7ksgSIFPMj39}ox~`H*~=G|(_b;B zMIGo6XiK^dUU+b>C=BN?o#~{ZFg&!UrfEnF&rIgLUz8XTtxI)53e&za0*fM*O>@rB z7!W7V?Cm!^E9!+eptgEttj6m3KhLUU?thwHi0c-#+SH4ETKgr*dZ1sFiCnoQQ6^rzxu#b z!}Qx%Re2L)%TKzgimrd?iMETP$it4h`oLtcCF?;R@=Wm{KMXBsmT)c6UV2u-Wu}qO z1AIt0rlO#18DyZEoGLISRxFVQ$3W}l*d2HpC(G#~=qXfWd4;hFy+)Q(a(k#eiZ9+M zFbdd?G0Qg{#VrugZk{v?#54&b7@cLo3TBt1SBm=JX*hbLt2%!!D&v+%rZI!MqY(q2 zwfnL~j&!Oj+<4f@RjLEssrg4tiv{a_A(uMP!C3 zpB9LWtibn}J4AoVA+An^m<#jM+AU(mUhQ1bh`gw0s@YBFc!O>=RximW!Du$?56lym z^`htb87u+aYR^=F>DFoprxLY*HgrkM#2Y4^1-yCnrWqI@X za8;GlTBP^uDDUc2gf5t8cCZ1Sd4UeKshYs12)yK~WAeYX&Eh_=aF=Hw#R-pRv-g)r>o1v|88MJU> zOx>{H0gE8g!*0iXrn{)qv&(U{GVA${`NG-Y^vF2IV&yrUqF7r-A-`kA8=7a+Lb$ZM z(t_~pSi$0PTttc$&&MxjF-hn^!$3+~R)(aLi1L5KS_D?l7x&L8dAuET7x)l$^dJrK zD({9R4KsI@^9UfTACqz@)oiA<8ynIh_JR|4rYtU8=4%gXaOZt$V|7W zKk#Nh#6?xH9mbZq?^1U%Zr`h;2+Evvba-tSM%`-=WG4MD&+PNj&M-L&8@$OwXn$ z@?Z~(Z@XBaHC4)cjfhd^HNqCrF?3yCuyTJ%20>ANSc(kBqcHwikr5#2Xri3p!@%Qx z5)Hpz-jA?iMv1$~^Cs)`?xjTGGd0?{0<9Emc-8LEDx2f8;=&pOAry-K01-rQA5{^R zCeJ8io0{l83!BVoM3VkRh6`o#_o2ne&QZqHOLZms#Ypfk2?|I|Y zE0<7;2~{pwVd6b&_N?%lwCR705)t;8YsX_7#Kh}Cult!7Dli?=Zse!{hME`MN&j3r z8LJNv6xBvO!y(sW2{ZGT35N|T7sVX7jqpRZgQU*uirR z)bE@ihjJQjJdzOQ7BkE9d8n+1Mj}*Sf3L{YS*TgQn^TDGW$to}mXEGQVXB>YS_6(39$bU~g>?XUvDpE=UL=bdzSbRw~FU2BRm*ZGeMaUpL zW$b#T;fL5SfUQSW-?q{7VAap$3dpOY$k5vX_k-DpiToo!#xmtH)etgzojGMw zTt&~2O-dEVZExei_flLMu!iqYqz?sijDwGU*9=@Y*2Gy%1N%v_wJi`AGFXHfU?Rf$ zqeKlvPR$%GG%)AWchBY%xulf!7fhF-t`G@_VM-)_h-E)WZki$oILv_!uwRFyqI-J+ zQMD^LH8nuT&B3wlHEb3|>`dkxy0f0HMxaZSIVbX_{)X8r@Xvh4oKyEowdQSRD7;9Tsr3s%`%bw@x zSidf_a%kHDe^H3rw9sLXhf`<+M3%t)@~(}s``dFC7?TL6DQ{~`Tx_Ihzd>dUp_(iq zWAfL!t`Y{$PV_ouq3N)ADsYZnB}wU1;7!WquX7~KXh(scJQ zu<0N#TTLVAyeW~ll2jKZ%2;{ynKoaAYJElz#{i>Ge?01Mn<6W+Tlkr#;CZgDzB;3> z<-8@xhRmL9+faz%_vmuOUpY@qAU@N)vpwH647u7cC1TK5+`fZbOu}!91$MtvA?*4w z;OD{X|8XuExb;nb*RWaB<|h{AE@uoD(vEiy|$Gh+wjf)0yf)06_k40bVe_e1T`^Y|lw;h-{Ru`a%$ ze>qvk$MzdUXh5^m&bQF@EaHOTx(1jXGMv$N_Yj-0<{`PnXjum%#?G;AY07=LE*soA=Bvvhw$mR)2}v_Bx9BC{8+!n!;f$29*`N1m*OP7 z;a4}AbRv_Mz8|T2c$GlYOjYD=p2j02e_N*p`j8T;kee3b{!{j+MUC+3mmXC$CU&ya z>^I0rM7$Ro0!OPZ!|AFr(sqg4HsY?PL}!80SFNw*4Y1zqkg7-v`_~>}m`oyJCTn7ksBj?yeCRfAyhe z3&gQSsdWoX*ihwQdkqcP^qfSuR4Iac)$6JAL>!{nxqz~l9I^C}-d|nuiCq`nRhe}) zZ5uDkJ>d zuw;GxAvJtc)Vpl^M)rBaM#DLje@8LgVB9BZ5fHfz(=Z|v^~v-Co8!ebAjZBL)_4y+ z>aI4Vy@(6iiMz$Uf-@jXz%3DWNV+E1W4-x(RdPB&hsKu34SjgFVY0?nGm(>bC8mJO zPus;#x++BT)i+Pg#K_9g0<-M*_}|&pi1>fhMN=D!ob?IB{QAMRxVc zQ@uZ=x4rE(4!hmz-;_v5F+wYBzQH5KA350)lSoOj-fW2(rQ@>gl~WO%b*h2IweEj* z2gJ0~A9j-Aa)~iAC30(8ebZCI-N1~+xg8+Pi6e$+o2CSul;+1c+yveP54%E8JoadC z7{X*Cx(%AJmk}qiP)|aqjS>|=`ysC zye%;Z-;`-@OB7~%9O2nUY_;xdx~?z%?2}vkiUorzQzE`Ai8{Aye?%o*9?_JD&${lHVbc^J zat~QyOT-iRv)69%3$6O5KkjZLPcm2wn-a6bZI8DlW)um{w7lC`a9C9qz(VA<7`9E3 zsaM-`WbXrJ#oN3kf3zxtx|j=a{nAp`LNFNVgONF6g_OHF_-?yg z_(Mh^iOX#b%XnF73RZ7ECfw@q-r$@ZmkK)PoB9Zi%0-N7e}89yoRAM&qI6xvJIAgm z_@T$CvjKKx^s0e(Q;5_QxQ*9Mk$$ZGKxGKIuRKf0-1g>T+mO*!eGDUlmiITW%^X1e zqN>tE=PXJrSlB-%fc~n&yR2IQ8w!7E*N@nyWMceiAWp0{&Y4@&tMqPTt!!G0HnsyNhWj?6{EJo&4NGpe?x#QB_I2!s2+e^iw$Vab-c%c?6i)K|8g}+*hCsaL#ZM?T4g5Tm}v6Jc*#j;yB9ge zB)y|_idb>rjQOhy64_>dC`jb#)q7A!`ta&)(l4*xGyVNc$Gu@cS&dqr3s}ejzeBbf zIe0l7RO@t33W52ms=)_%zaU>%Bgbjs6U{b{e<*PoH@vUFdINI{{i#DW1dZ?7*AcEE&! z{o)%k_pEvG4Y^x=$886TZ0$RD(7?hgRMaDLH-%6Sp)8sr0~Rrg*90QQ#kiOR+`2~$ zf5A6Zb)yqk(gN5x!0C^>fwB$B+OxfaXVKKPKQ=%@x#Y!^KzBIx4RPI_9+zeq0~=uK zE-Cg+m7{bI2w{2+7sx5vCD&ss5x#p@qR0T{sLqyHTNKt~R|sY}5#2OP5Jbs`X+t=; zJ+IGxd`QT-U#`bcZR15e!!`c4@qu_xe{QkvZ~m)G)P&C~)+{o#tcS1PVwGveGO~|4 z2=IW5-dT*3m30N=foY0F>EX2lHqvVhedtv>PQw~&R#n4AXnd5Tsu5`dPlV2tCqe`I zfQKcZgi>8HHFYgG{Jid}5+l- z@?(IR*Ic(975p}1KWm$EYO31tlI?>>3)@}Z^*|8Y?m~|t;UCEW`$)HA3-mp_wVetc zZT}Xwa{+$THGIuC2!qR*O_&lBesvz*!Tpl_y*XGcr;3g)F;(21*a6`AuY3L5wK4Yq zW7(D{1D=T}Z%Qov`owQbD|Sktb?SA{vMYft&YTjfuCT zX2(ew4}Ji)<3uo*a5&p*e;&7hUDaq)qwribpKPxQOFi6T$_NYTPKCEkX?W>*%#0^v z%3TuGCCV=9I#*q{5!b?8RGSjfU9H&e8G;N@3RSQDC*x6VFoZSZ!CZ2o_8-y};g!rN zv+z!RWxh|XvQgD$(xs(x6!Lfak3*6=LPpC`<*%HN`V@LicUWqce{3s|^CRkt?j{&! zJHN~KLu@|Vu*fm`q}_cYtCD@dGGoaQ+0i#pOXmxIi~k^X+ACql+N zO2doQ&_1ce4fXvYM!|~1vMq06)e&LUv;rBmrfAdUfRu7G)d=q<&dshGN2CdS;cA@2 zgZhCk{04|up&FBEe~5^$jq55)kW>AEX9!aj7qx*`j;ilt@U>qccNQB6l7*#oU$Xhb6oPHeL_6P4ReBEHzu8h(9Pk zZ-KI$7M={ZQwa=0=Xu~p~x$+ zS;FT9^TN0!rf;aqHay03Jmwj?2%x+S8xHDZ^BAIG z?3*|T-M~=Uf8Y&PHKU%AsYpMTfH5W0-4NvDP(lfCb^)(#@HYnvUBll3gX~Hi z{CACyT_q#hrX)GU94Xooh3Q6o3+zh7Hxqu246qS@poAR|4G#>T4A5iq)#CQ!QINo1 z(*greC+;!NMC6yrcykAAM4BBS;TbXyL$)PG5f^eRf7@?JiR5HU-X}8jw(Ii8ypeg5QZJyaraZLmmoPr9YpXo!e zNd*_Ge>OjUjNnHqzibGx^EH*;*kW2W<)A6!Si>qmiWvv7)--^Val=!RLEsHjwtb5r z(nM(X+Z;nh_&h_vD+JMjOi{!ml`YmH61w!oez*LJdrN1F%91LlL5nD|i4)=5APUaZ z{i2S>t6#C5>ty>oP<_$}=I(*clSar%7Ak80^z`YN? z1`Qz|6~oH~fd~g-g}~pId-RoAGGkeYd>rKXb2fXC;aXAgcG?uV%X522mK;xHEt>52 z@dRqOQ3{hf(u*X7cB6X3NzcB!dYz@Q_4qPivUD498#RpE%D!>E!0Lbz-2fN!2InxR ze~e*UpGOh!h1I5E9Zva|#&KTB}7Do#YW656$q_;8$k43Iar z^5}fs#>UIOTYOw2G;wsh8fA!xHRugcHeTWN>?Z3P@kCiLqcA{}hp|=O)hI{S_%e?M zFms|YHQvAsp&big#)Z1>)w`*M?JZ|Be@-I0hi*e@35lnbMOFCc^X1W<+^Stlin05= z4LvZtE)joDXqTB11IE$Mb)Xs_h~ng{9iSlJ+|AQB-F34C4b+6sD~=(fkDIx#?ZNSO z^ER?~o)m94Z!>)?dLR2EzD{qKs)sHI&!q8L{+RDPs<&bR=XJ7QAUuw&*e5iie;Zl4 zY7w$9G66aa0)M|)?`TB#Kt+5jjX+bb9nOBY456$}9~KB+$8xg>ksJG6^(4HXLvau5 z7&`uq>Ac2TWf-G=yJd+4a4&o3etnPR2gSTp_oO3(Pdh>yxW&NBwA zM@!7fz=$HJ60ST9q5DFDp{f?(My?zAZoZV)57*@~4a8?HzT0*{EQCAj(M=(Es%PugB_?Fa zBX3KT-iW*s8(@Zu#j*v8JlJ@AGflx@9y?4+sIr@kOe=K_glx2nE zQnwpwmTHfAV}R1hN0$ROHO8)ee^{W1u1x+dP|jW%D_{dmmAlyeH)h@~8VJWU3;}<8uY*?rdDw6w42M)ruy&v|x`lOvbfPS29M@|^=Gy}kZs_iUZzdu= z-cJC!#6*-rzb{dQXW4w51!kO0z*=`e>C!Gu=%y5;+!PiBd~tCDf29fSNV0;8Z9_w5 zXl>huMu<}HO^IF0K2`fwOzzO{&DJG)_60n<8z8DAyd>^`9EiNP6OWs`(l6vTKyD;` zTYN(#)LFD+-2>FO=d7C?tkkYqZQ76s$>$8f8SJ`ta007fe|NGu$CRL(b5Glb$8u+U@kbVDi)Y~ zTs_@6b4qmCxL;apAl_<%0p2yrSd}jSYhbsZE8Dr$f5Xik-hLx12+O7|PBdIah6{g@08<#!ZteIHeldCl5lKij(gs zh6$c0)2KoAdv^2zo4kp@Tfr1pMXEdcBwiLrSbE$MY8Vn-<%qh5xgPN%+v@OC;`>#} z4%l!uf0Zo|FI}#dEilT7ljz0z!ySQMu~sl8;!6(Wk6noz!;5zoSaJNj|~uEqH1M-7x6 zDfhFD2I4)eUp{Pr#4(GHkG~06EEPLfeC`3Af46f5u7&~i0@#QS9=1R{srCy~4dm7+ zhAmL$AktqnKzyyIF7|GKH)BvhO;~b_+V`+;a*WUe2G8sxy>RW(?qW_U3%5oAV-J=8 z^g|gjJJSGUF^`jagYc-*<`p4vFtK%`(Gr4RR4!kP#|BGCUCMQ~D7<<`c$7wDwo{I{ ze;Oep6-rywA^UymlA1;o-1>(_9kP3dT9ZY{TKDMv8-z5r8$oG;#~pr%w%aiat3--1 zh=6fau^%WhMD3b)1`%a#_xB=Az*?`L(REP?TfpA+NzRVm0I{U&x>6EwLXRCaj{JRgoO6=?({wsX=l{-HCXY3yZcrJ(|h=ZTwDFZwPIdTMk`>`-7))|IgYvC#1=G&TvfUj?6h~Bwx96 zm(K6xw~?QFL}7$k102sHK~{v`E$FK3Wb{T%!0;Jd8cHj9nF$8Ir z)6F1U$$09(H;(FnmWWdmb#8YMSW5&hl*uuY$AZ$y*UA~m zAD79S1?A?1SNUdZ6WG@$nmnEOab?TvfueOG1+ya(m}YAv0&mtL?z40iTxr( zb&RYU*<)l~n*5EphQZ{=c_;q;b$%IiBAJ+UN#@$el!F2>n~%;PLp|`aqVscl#!0x& zFM_Mc{@LU&+^5NjQs=KI>jhgrF&sj*<)cf)m6gulID~oA57;Bce;iFea7@63k}e0+ z+5>k#I={%nxJ@+qMHmmVuuT4x6Q?_qKgnS@1~VVHqe>#fn{+ru%ZqfG4(O(j^!IaF z&jmkbcI=^-&I|1YeK3Ukf?A3t8pHF5*G=Mj&|bI8-Q5#%;~Z00q{@Q_nXKm*-~v~U znQ|-{$ye?YWC_Ule~#q0ksq4{L==@@<}5c4x^$6dMRch;nQ#RC9crY%0Z$3A_MhpV zck7zN{XGXUE=n93X1|#XR|nR~8Ca@LB=E1Y)MB%1o@%p<^ubh3`qk4j{o^`)!&l4X zdphH6v!-j#S|(?mSzcJHE#l^_i|>7#s7qRzlq-FRE4n9!yrT2VsDB+8)*ApejX5uB zkl$-2Y>YwR5w8?y5!}ZUJ;M+JFY6&&0xrZcGc$D%KL{fXgTQ4c&t?XJqa>cq45CQQ zt{fI2D<#V6wTN~IC(O+dJYL&;ToBldN_!ObelCrteZ`M`4C%wuz+pOt&UDbPCjVv$g$`*02tHt-e zO;o8^`QDT(yeN7ZtW#7pH zi@g0qBz*`2GyTdxq=A|KHV{J`(1;-q=o&Z};t|0BWJ|~yl|zFF{Y@j^g!hxcTR_)8 zy1y9z>@safjw8EsRgQ6|p3}W3364@*`5Ifx(Pmd{ZINZ9PqwDh$6$=~kCQuvi+`8N zJ%MEYxON_wRyoG{$&b-T38j90{Un=RuOFLbq~GgDrO$P8rGH$fZ`MzGOzzi=v(1{W z*H3z^pDWAD`msga>u2%3Zxc1dfn=^g`?+Qw%W2HGgV=ZZT5yXTW5GS7-NMy>UA%6{ z>Th+MefPYv$a{WBo$nhn{mMTcIA;3WKyZ75X9Hc59IwiOFa1e)KM9yBh=2H2AMHdp zP3G;$ad(NyarRBQZ&Qhx5WjJqTAaN+EsB`TX!X5s6V;A@b>*a7>D9|2`|zeGYQ#*nn*6fKch{!|Ae($@L@=?4 ziZX#61m_OKg<=uth!XPEAb;?-g`&7Y1RUS9Ry9J-P56_y2%gUS$w?z(YDYggX#~3Y z88KQTGF!H97Eur4ygur9KPURV80Iv=i;VQ&S>__gSS9x|_YU^k9tR72|MMIoAAQ!; z&uGN%E_d$cc%-kRv_%Hg@zZyS5M%x?09yq z-!=R?^a5A8PhEkE0{d~Gt~e+&z2bL0n)HeV!tuy|)j*uVDie9u&?9I~7zV+)PzmX`hdwST}mfw)&7sI)0j#-S@KT0$Z6aI%Ex@Ut0g8@RH=-|yz5@J3zH zx-lh+xB$r#u&Kp`g{i9GV*lJqm!I3P(`~l#!dB3Ra;8L&-xEamP2>GR_?~8a9`!$b z=k1z;GGD8bc~O;Y6b%cdT^qUdkt3KbQGcYwhC-nspx7ZYp{=TR z(?LB!@2{#nwm#{9Z~%@ zjhBT&xH`MM0!~5k!($19!|19sVd@S(*@#SG5!4?{2fH1#<+vZZs*u@AUqeLAZ2M(~+n%O?Vz>_E;`AU!C3B&{?E!Y>o%+#m?1gMqq1 zaLz^@%^*ZB!13z>A>0uwO+&!xKDQ5+kYs+vW(nvM%IVD#WK{^uIu-;;m5s#`O1BQp zH^EGUG1N%Cghv`*YI2Nea$n{EkeT^a3Azuw%C02nMSqr&J|t+9J|^l&*AsYDwUnT# z@Dguz#@S{~KTHurf}UBP67-^oDM7Ek_iduC*Rx3(tKoV*(>*a>&vgFzdZq#M^~@k} z7|CszK`>JZxndCXnVi)uA>sNVL|c^X=|x!e0wH_`Kj0RDx3rKgLN-($`YnQRPedd( zh|*Q}n|~$Xf)D!wQ&fLeTYVtzpNXAn5$!+(FbLsUvNA$42!He~&{>2>q)N8i@tGd* zJ2?sO=eoR??3~qTS;cfM>P3#RsP7vlIjzV<`?}iRlLw6KdQsafBYiGvojw-tNdLG_ z-z@6;0$OLBZPs+XsP8-OndN0s+am5oz4+d@iGLc4dQh(Pxu{i7%tfv8--}uS?nP}7 z*ORzGj3;q}aG`ZK)rJrVi5?e(bTpze**cQvGZx>G2rQi!-;uEjaEtHA=sf4c5(;jT zT(*SjIk7G3sJM}ji#mvXirG76avpFH6h|T@((K zP=7PCh#;rr&QT0P*0!s5Xz>#%f}HKduE^gRpdobi#|Ps5figvv=98S(EdnncxXUz%Dn~C2^)v#94LJteTv^j7BG~5Q zk?a&7G@+jz!=qL2=hC=W&74>mtBpIQRgP)y@>Sc5%g*HZU*!CzJ;(o{%=a_rH-AiA zdXANeOFRB&CN8Ud!^A}6CV{PZ864s@M< zi&M7rTR9;A-KXFG_OIXn^21Mm`1JeV|I^=pia&q(^qb#&`puU={rQhS{qUDh-+%e? z)33k3e)~07z@Ps0%lDuD^249M{6^*HPk(#;=WqY;%fCy--hKGTFMs{{4}bcXpMLoK r;WuA?`M00Bwm3fg%9l?0o4a{{GJ&Km7Xs=eM7}fAjI<&)>c|fBV)MXTJaI$2Z@9di(3gPhZY|{`BST?-kMBOc{_s!#3vfRF(>K4D^z!?E|Neg`1MW}tdq98x^K1V7@bSazZ$H2J^#0c` z-{YUxpT4~L`F~Gue*SzC^M4PqhaX;le*34-U;cIy3x5wWK`TCs7NCCp>HV9}-#@(l z+kbui^F$~8Jv{yVBM>HH`41EO^6?EC`2NjAto%KkeSZJ{zP0w(FBr;?C%yW|nfu$X zZ(o0U`+8!|n!j_}e*W_5w>MvY`}B62xz;|5#n&G`e}Dhs^_QRc1OJ`bd)^|LDdG1o zGo|OPfSJ;}x4+DUo;UkvLO*=|+f3+rQ-3D(@z)zi&zt+e|MBB5Up|i?W>U|a`Q+)% z&#ym!e%q*h`RT(<>vUneiBK7&phxec7#pul6$<&)4-*r-7 zJIgVD-hY02|K|H2UjOj+=i~30qvuU=V?Mlp;156i@bkxCzuXx5+9`f#=(7K=g z^z&bT?1a8{imzJs*SCYrAC&Fq55Lcy^t>r9NzHS~J#UH+QeQs3e>anP-s~R3HaMEb z?Rm5N*T4RVf4)UOpFd7r?!R_=_mTVf!`n}PeSiP<;rsW${P^FnH+=duwb4I!h7W2# zfBF5*hriCc!fB5+E;mhkEK93(}QqL3RZ-4pi!}~99Ka3w{QqL3S@7{j=@b=56 zzl|SeQeQjUb=UuhahxfA?POn2`mdZ16REGA?48v6AAf(#-_L(%QqP<4x~r}U@1Hl} zsedtIeggCDFS9HU&y(ei%x_3($~)FH(Z;)e>s@>{M)a;e#^b@!^8XcozfqY$ZtM;p1JvhGy53u_Yf?@yE|^zkFw2{6E)^e{SOR%XcsSIh0sl{HuNOFZNXl5Y0Zhl3qm@ zi?7*0B`z-4XkUd~LQW;TGAC$^HGddiC(w+)Z7r{&$+o&u6{vT~+d4s7UrRIu{ONH( z1CYN6YN6(mz}f{BqIF=$9rPgF2amqESmSr55&Gu#Ek~b9^)r=ZLV6Wa3NIcSsEsaI z=kkE9DP&v9NlAS^s(H8k_(X9)e+PRN|FkTAyoQ%Aem_1`pNq3j)={HNIe(T>d_X(n zy$MA^I}>s>PD2-znktK}OU36ZiP&IMbx}h5YBTDT(6aa#1@B`D&L=erFU5#r`lp0R zc@3#|n7X6GB%GKm1AR4H_Ow6EOy)-bU!H6z&~3SDAiiP@rw#vwZ$$u717E#;(u!g6A ze-@put=D4%sHMw4RqZp$eA@PfwHZRG$og`%A%?5Iu|7-008O1;gEet1K&&(u{e^ax zC)66SN00Ke8jNcxTxbG57n_|ks=U;SrIS>7&6L$vmOEpyexj-u`$l%fsCu2N*mAvB z@ZKiuXIa7fXdKEke1EDr+M?iN%9sa5b}Lkegf4QTTSF(8ax!Kf{g;n?ku#%UAZyBB zJHbxy=aP{Vtb;!}!Fqky1S=)EivW5um@+1qE7^s7q4f#Ifq=?4%Fk*N2ZEAcz*F0+ zGkl*g8BMcQ(t*~{c5nrcImvDo4jJhl}yJAZ2U#H}bO_?S3DRQFvI zNpzo_E*(uzr0a{E0obr(vhiyt(h2@tGIAny@FyoyuWwgAL==XS5=@lG3_F4|MbJTK zlo~WVIxKsy=tIebhLRK=XQ3EXqv$xwMkpJq95#VBNz?aKuVPg6eG|-9!DA~-E_($J zeZ?lu6ahbGkST!QmiLL%%k`AHzWn9fMxP_mq;4d)`8HAGWn*D2VV?+-rWv7NdiN@m zBnU47vXfK@Du2PWlI4N+Oi+C4@}sBEaVxr~+qflnjaxJ%Fx$qofMFXy`GRS;k3lXtdb;A$TM_5KQ7=%JLj)vPscF`wP~b zf`?{dLRDX;gyBcG^(3V146kbe#u9ul%T4PPxrIcazp=hhoF zC=hGdV!1eExzCU#ioROY(VYp&$n#ltb_eEufKYPh6v6?9rvF zt=IukuxJ$2IQ+M56vS;dQ8y|T`$L&#;jV&^WGS8RMk^C zu)*xA$JWAKR*}Q9vc;*+=lLHtm#E6KGmv+>)3T?owwq}@oWyEZQ^OT-<=t*-VB3IR zXcc$pGfV=PBsnM@1uNZd$a$_htB1~Gu76W*?9i~mgQ!tlU<0mUZq!-sVbM6R`Wh_( z-+HJ$jB$_IsMwO_-x(zU(PC`hX(s@GZ@?JKfVv0pSqupTyS}L6WVn!Jad8QqYp>#i zNi2*S^F^CS1<Yob4O*hO^j8cNhrOLetnbx?h2C60xBzDzc z<2RHp3N1sx#NE7bA@aC9E3|+ezJG+YLxXY-71t={bIc(dH7^|R5R4C-X$D!wQ?;zf zL1#2pPcz5E*0P;u9?Ki^Nj1vDy5bqg7OmEb?vPw~>InFw%Av4h!Z=k9sYjus%TL`* zvL(w`!V2>;#91#7P^o#G4TZziF0EXFLR|**SwVuT3qf`fvDDL2*UGTVXMcB9(TlOY zIS$FanAV_SUx;F!LU1yR;uK0uUNTfmrB*t%Dq2@dU!RtyWv~(pzd*Z~Sh}}^n{kNP z*#r*|5rJ0%ikwfdCuT10O7S%Y|V9*&= zHCS85m$Km+J3a(J(A=TpBGmdFT7YDAMso+F4=SVP4$C0cr1~054l0&Y6V9cYJhha2 z^_Q?Kuuv9#T1>>gx#hZg>_62hE-Gr{y@M#Hc8Il@WHp}0kagm3PC`tClrE?J}uEFR?7oSDdQrl2y=V zi&dRqu})2Kx*VE*$$!*6L^Ux$j+(q_5>MBu-YGPgwwcF+8}171k+vlWw1UyF3T@J> z0<2Xpna6LrF2<0orTrkHre=LAGz&{UaeG*!!JMl%v@T=tJGK>F4imxaiH9DjrD=nr zdgwhd)UxRWI#$#sO9UE!Hfp2>*HCD%sx)^zzk>)?(8eS6Cu&V|dP=$)1 zrmHu+kjiG$D0-DamZ%AVUlXQa+|`D~MzWImOO^<7vV19H3XhndkTJ3Faw!bxp&vns zw^bHHH_cGJR56ca!vuYvaY1`YH1awp7V1FgJ7&SUj@I94Q4xai<$^4R_<$bUhU->` zg_f1t9&xK=n15vkqgdzmbq&c<*Do91tjF>!*()^c2_;yGHfr+;gW{cHo_7@(DMb!F zU~&jME>gQ+)6A!me4P4QZ~;ZK-LFfu!mAEidF$G0pj@w#dGHM*Fsp%bwp8dMQI*5A zvAjtT)kEXKgr{M>xmsLMqrBHh-;w@PWePl0t)FU1PR8E}-`S zQ#UpTtev2S0{XW-)U`DiP;R2pvl(3xF>N)u8iNOe8}4BCo^y zECy&hI)AwrmyFqGtE62p6pqvA4qd6z<|v^tN9h3|p&^AJ0OO(@3)s#qzUyL%t_M!R z(o zRrf=rCd_pp%M)+^)W~8ERM*6|EUzZJtVWA|J%5!K>7)Fi&8KT-_UVUysl0h;3@-qV ziJQ$eak1rLQg6=_egd7Up@*w0KcXdpD#Q8lEKW4TXjTe?41bO!ZSJvUFk|s>2`U%Y}( zRDac@rjvOL;ESR|KihV4C*TXjvky+e7Yc3NXO<`aM)y26G^`ul^-zT%IsDX{4{eHE zlc$fm#iY$x^dz_fIA@pt4!U1y>jWD)c&95(JMc|HEE3vjX!9xraD^U?<)};poy9zC zDby82ai6fg_?u-h4|nJubF1&+sLx=H7JsWiJJ0g7S-t6Nz^-nU~N5>nyj>c^Qc!Gxg zeyWCgeJUL-Kzg;S2Z2Ukc+V~C#$6t0#TsLS;v&M(P1z`Nuq4o&v}-K)(sqX+(0_P{ zb7TIF2JO)$r`yaE>!!r6nTJjXJ5zUI&2-SuvYh8cU``DMuQqd;M)0iO@m|JQyW!e- z&*keB8h=YXTv?-G*}Cjim%D)NEflZHBLrozs+Equt}zx>J#>rI^owPuK>`$r^`y|K zt%TqQ1r4UmY}l!QhT&(@NN=ki&Xpn=AN!WSviZ#+Wo(DbS(n4lT6FsT%7budpHM@&u(gXWb}R z5}2^tM&%MKJ*gyGfw=Haj(>ORxQ=a$0$% zCCV-J5gTQtmi{|!{t0;M+wB5X!25RgTNFI(GidZd!H4E^rTM|)kAF=N3V7;{uoyLb zG1!c=hOZcwpt{HM$z9HxPiV!p-QD$aDdPJOvX$JWT15+hbMV78_>d%Ybk&1@*ll8} zbZD(vYoN1uXx5^*tI)mpn`QA_ z!%-7zfmYyVZVjFH&wnkJJ^_U@;*Mo`SH&k27g{mU@j6<}skDm~ffi{5r)_Q6jj(Ku zLWB90nqss@%hbPl6C%(uH)a};8?@|vGb%dTS&lA&ZmHW`@u6_G-^hg%jqWjp9yq}K$7v>kQ=8md*5cRA9rX_T+7^sUOt44AScVm9yE&~NS#=> zV(9kupX0oyC2dlf^wsMlb$mS%19U=EB&6BxvVZe%9Mu7~9+c znzuPkV{CJa*1qgGe6$J+e|$KK(W{29hea{8sg#SI$`8h{60tpGKevubVn?H|V}aSE z&>$%1-agQLM+*i9iVF&jUc52o35~57XxNM}jl4qRl`0^2OkzS6tY3weu{mSI+%Z|2 zp&u0*c7MfNSBct6Ec ziVHp}vMol#8#pEth@9s#22l7wX)xdZnQ6g0`;OeF(+f+$cB$nkHL0%@V>*9OD=!0q&3}YWk*tH8EVIor{ymt~b z&k#%0<;kGStLg|WppbHkQ#H^?vws_CyjBgG9A$pSlsHya*8zF zaoyNjQ;V}8(0HH7bKXsDm_@MoU6RZ@o@LPePm-hg>YQZ0bHVpYB{?-Mz*%Z9mv?CG z4Ng{Q!9okOZpVByG`@>s9wI-_we|AEdXlb&j&dg19e0^$H#4~tEz`h-g@3%^4q9{K zC9~uLGMc?8%e^t!RjV3!Z=lHYKzq#{6kH#zS0e}wmSF@{CwK;eq92zm?^l-d&nO%6~8-V8D9;Ba)+k03Z5|~1a#q*NN^Im zwwNGBLUVG^jY&ZB87l9vb$>Z*QNJkX^`lEhl{;DmMpa8?ywc}U!B^N;CMbB{bOueI z(KhHmpy07cA_bm+ry-cU>PyU=03BDiD;b7qDvEx>e4>}Vf-jJC3qEu3jG?2;D=(`x zodV5_kGW*MmD*gk65eronYsVvl=irZck=T1<^cRz9ImZ^91Uiv4#K)0H-E zFMc?R8PvmG#k@#^Tz@=~GBq4F_KuXH4)PuU8mXW;^sg02P!3A+W`k6*{CEK)kZRy` zcXy=Ye4?~tZf*xbw$(!2rjN3uhE4kjKC|Y59H29jBFA@D496wQ+i?}OIZ;jEDRL~k zYM>`2zIKynkOVvs*`YymsO`{2aFKcRyWqOAAggfz$JhbVZhs)?6n|s>L~|y%V~<#) zSw7*-s*hl+x0fu6oTGoU+meF-NDOl%$sMn(iz<&)T7w#K7iqfsu$e$mX<*<5&2@X- zLE$dS8Lu!es=+Vb`Q5~#M}Ti<#saORQks>pM1zt7L)@rNX#Q9}t3LHM@tyvzPsyNb zww)k11hgP0%YVBva*KgYck%MrYidBJTtZV3Pw2BaGgLDd_r17402T_0dvS$`bM~sT zONat1Vj{xG7ij5_5YRJoH4=-j8iV6e+Gqgpa^jE#3@_DMGx0!4K!-9@6gesb#W+DO zT!I4s(FhXc7}>~E!4l=vm>hKuQBA6_k&NVeR8t^8ihoTCtvK|FH9NHS5nC<9Q`jAS0>R0|KM%c;H@r^-F!45vjo<2qE;2@J(YgLh&J!s5_V4#~ldM9mY& z2L{IbO(#H5VE>I)agiBKo@ZZzT+W_e1G~;C4CbOo+#4w6bc_+?yrE@SWnYJ}bZww7 zk3wq^B!BI0LR>3Ypvm&Kvi~C1whpX+o(!6=2Yf12|MMw6G(c=_<_>8+ouEzEf-Lm3 z*2E5QB95kOMD{>Cw_Jg>uYY;*&(yu`i~rsebf!O+zT?Yhnd{tv~u#tz&|YoY_JD9s7Gf_0*_xd=j!>!s&D#?u_=Pn`*d z@^oWA;@flH>&=u7_YaudQILWhtBLn4gBBJ;9-9lcKF_OVLF;(%>Le}Ni7;U%zWDTN z?0<*89rQ|Cyz!(vi71A$4k27*6&R30jdQNTn``f6v}V&CpCb4Nbj7o|&8!)6 zd`ZEV3g^1BZ`sL~*6pX;p26?Uqc+SIt~JX&~j?Jjd>|usEZMRnA6l zm?y-@iRJ0M&DdLZET_yRPjQwXP9Z!_qZ(VhkuMG za6cV@_6MmjNML=J+&Ll^@9i}LTamFCBvI-AL#)!u2Dj*s7yiU?$KuA737R3w^!)sYl%(DVo zP@-nYHDlwn5@6QWVW<=!(Wg)#LDliT?%1u^^Z6#@&HzJ{#+YO)JS0NQUVjd+=dCkZ zvaZ7O+}uaG9K7Q>a!j(gixN?VC|*dIOgEJLl(t1(4U6pr?uV8s=8D1TB)~r`z8uhC|SnP4S#8BF7(QQRNAJbka$q-%({r-& zx(dg5Y<$@#km&zlqUe~R!!RHQj7Z4<{ne~f?7~2be61_0peHfRs(%e%d^Qt`?0dea z$AsMUJ*1UmJaowb-z;Fls^Wr1YIgZz->Nl&Rf|y%n~{Q;;BApT^ri-vI{WN{Z_f+117kZsUSQb-Hgb~_af z46|rDaM!6kBb-E8T7STx^`f-!)e2PAUi$9Pj4BVw@34?tG1Dtuz%mvw!(QKEnG7NG zS(+%ubYqnMQ7p8{(P~5SR-8Ob>1ao9rK`87{zTndP;b3$nHi&k9ez9fcHVfM-_Ft= zKBJdD9HrO-+Gk{w_!)`V&zlS=SU>q!%lZB4do&x~VC)j8|D9aq*P2sVOs@XHo3s z7Er}qNcgLans_F}uzCWiM98gLH#K3Wb;hYKuh2euw7P5)1F9QSqdMg8PY(aUz{I; z3)Ur{q2IZ7bO&T$7eNcX$%hUb1|p0`rehRHkw$F^>%OM@d}Kyo!2mX1I#Wqn3@pp?sX%m~ zkCt)rNAW2a!V&RMKo^)Gl(_;Lm4P)~OpoxCB@x>^!kLTi4sIDHgNdaSJU8Z~cw~fF zUzweg6eKWzk8=f2M^0a4x#RnBdiD!CkYOHXo2r*_{rEaYmDBq2)5IBiK#8VhlN9tl z%oS{93Z5QGd}6A~(G7NXWVJVNwQb*0gb6?7*=2Y|qhwt0azbC-R{jC97_th&PAfJqLAAUsfAoOXobm+!l z9bS5)_~9t#L87^e+q?8)P9*H$m4WO95;WHeo;OI?-l_abBnCx2GdZu2An5{A{0gMX zo0qtML85aP7 z2sc@tpu<|HtKk(BU4S;#(3#-a7Vc<;PXp)aAXY~@$ei(p+QHgYD5N_XNaeNY0~uaX8BdsC>ISZ>bz|f3?5s`0*!Hx zl4QQm3&>l>398%%yuU~nQeV+rO>ISg z--t1FQl|2^rp71}*wvjv;|p#ZB$^uwKDm|_NTNZi@SV-Bw#1B^HY>EmSY6(1(J+g0 z^a?H0!!xBF8V$2ltm-O^yU9Mwa^C#Mrmozpp)*cPLc6ZU@f8H*x}unYQ%FIfG141z9c|EmpwgK#_3&6~Ia>OGs`APg7P^|kYpvVlEX-eb ztx)RvUXg1K7)cGhH-@npcLUGEh(l)(Xb|YGDer5vYlYs?Wch04#@wE0J+3MwW}mBh zKo6aOCUUxnFl_DUoD%b4EOex^m?4B}m9$Ew_BJs@r-wK;rxtR+C}NiRotasGO;E$G z$&{#Z!&-ZiN^?`9d0Im`?9d{^3fG{}A~@yM+XfAaW^HzmU>B5=hY)drhTYh@ zJsQ;9>Zw_YHdh*x^Fa2M1TB_-9=f6$K9Nb)*-bT`_Y*OzX~sleo|l!998+}gjBJpj z!~Btdr!7FwJbqS@8w*pAljW-gn>gRi6ALzXOYwy6YC5BkbC>JI?~Y!FIVV3HUB{ajH(;-Sg^T3y3+XXa3{1u*htMVH8yh)Pb6XVp31p&{0h@jpq$}6=@ z#g1*+$rt?asXjJD1W6=o>7svjI5TQS9;q!VolrB)4JE%O&E_(UVucm>bv zI}DnF&x|&Z6@8u$Sl+aM2zVw|Z|f{W0Mwy4UX^Ax5_mgV$xFh&gv16w7Y zM@hC)DYhB9Yql~pit2RrrRD0>om}bIkW@9UUD}&nHIU7Wuxm70rG*@KXb_{0{z-xh z2mKlXEh}=^*~2`4&kk~~qxsmP^C@z?6=+tOC~p}7ofPYOv$lnE7v_Z+3VqdcdliZtCC%+Ezmg3hF#|QyHA@F4Z4?O&ck)5xqzt<^iVVQC4W`qux;_u z;39`j6Ac{V!!RkC8q#(SpPeShcu+C#RtS&#TI@DSuF$DF8byw~YBhF4&O>Vr?e^-9 z=Gz;7FT1w)5g$BShO3cimN6E*oR6b6?hGz_$^0dMbp$zCzLG}RGN8^qYSKU&aiMVR zPUtR;&@*kv=|n7(YndT-V3q`h#5`NY?T`w0SZ=*{B;e3fZG!}*C@}AtK;lt6pZDFd zj+hNi2ja5>R}~r`oH6(Ix-!N;c1$-f(dhTaH|rZTzIbOkjDglgV1WS0nhO}wsl+W8 z5h@vfBSA{E$S@#f*S!z}(8i1EU;2Z$fM6Rm=4)@qm;x;`yE$dSx`zuazIoV2c|F3C z$#Q5asa-JL%Tf1{M^%>dxkHYs@0fcKD|**=dwN`_CBzMm$4muB-8mE^`na zExSIt1t$1_?jkW|m?Y*RVqr7+OHV^mh@JpNiUWdqMci>@Xx{IJn%F>O*= zumuGH+PkhEn>97VX*Am9!cY$j-|Z)bmMWh?`W@HMCnDb)NiIrlk98Ee$~+o*H=Hd% z0v+-M8eQ6w3p*}&cWZbGE74qgsT2f%S{gztVKa+Wp+QgPRM^!PxZy{u(C8e>oOv6x z7#X2a%@@}mffzNA+`BN`9Z7>-lH677a3>)1dtx0lp7iF-giyS7H z9U2hBy37-Llvf_N6;;l6{w3&Y_*TnByW<)h^M$2C%RGTMe%D8tH$usODzt(==PAyn zHi+;H`K8d9nv3xOHnmkuDZT&_ZEi8Sl2y}*F%=!(x~<7!#n;pV{YkXU=ViOK;9X<{ z@Tkz(SJdt{wGDwN&}8{aP;v_U@Wh!NgNb>{pA))EF$Oz@r8bIB{f#G5^(v-BDRr2% z4CV+uTF`=-fu=i2i{8F}HDoV{jgu$K6!YBR1RC@>%%8I1fhT=D?UhVeW}36GlVmw_ zu~(OMc?g&yRaGCb&3HRkU%2Ei?e7SKCCQ;BEo_!5PrP0)qfymohVTex*ZKlo zA{E_fg{~EO+i8{J-v@WBzc(9QXU45#gs}CrP6WBkbEl%4kpq)|pXq9tmM6C*K6;l=X@^)# zjH}@lIm`)@Vo~Iv{6nIZ`(RxsgSDkds2YuycrLp!28!W1q~OAFlJUG(chsA1Q)%deZJO`U81g9xHAAo}6NC1s^1%14R>Q*-wsazv)icj# z&2?9OWG;e#thwgZD_?wW(C8avi{^rhhBvm7T;Wl$-7Qau6KwQWbAd%$j-6^XQDA^& zQ;Jt;mF`xPV7b@Ew5Bb-g+SvCOK9r!1`YcQ6R|2ZOlR-6wOumyjwZ`jvX?LStJAW# zWl}jM@A=-e!#39y-s)y{&Q*LG%Y_M?jf95s!^Z-D5*izKZ0AGwV&07yj!G|WjWypqTba}4qR$*D@kD~! zoEZ~nARWcn9Aa})6vQa#17okQsaal#7#h3+&C>a})EycHflX1NdEQ^p5L%;QBy7{S z1sbz|SEsmTGDM0OquQJtRM@%vB*zV&F-|t*YRi3)6k26mYA&fI8gGL$1G@?|2AFeA z_^r`+`AFX=!91fT__lEfa`aWP(})Oikx8kOnlzA&u)6JT);Lb85;Yf0Bik%mSEDxU52=a&(I;Wa{N3L1tZa0ry4GfK?MsPf_U!#pT_JWIR zso%+|@*(vmArN_IwsMKREaNb|SvquI>6pE)=81@9j)A_?bD;a&g>)42Gh4L8=VQDX5X?hoEp_JNEH8|M# z8sj!KV@{yKMuwuFHzUHp@wq7{0u4Jm#6sNF7MLl_Xf&o%Pic$BNE-~JCDCHFOi;Z; zV@fpUs+4F94%jXr)@X&dUAzVpXoWFfFe5-nl>!5~(9@7v9%#WBA54_KDjKg(Do3w>&ngJ=efE6E`fhx#<@qHCN ztTtRwk}=MPL}REOKFQyp(Q?5ysL(3YT$-{$qwg3yMWVqb4W(U=EZfYq;aa$Bw6Q=1nk-)}T$pxzO7hsb z5*BWIU2g_-U!f7=fT~m{((FRpS7>9}N~BUDC@BO6Qrm{Q4iM>I8zfRqeDPj4NYM3* zjWgC+4&{(Je+26f(Q?xk<$R*S_!g?1?ywS7RmbH0$K-8?d1j~ZnX1jssNk(P@GSS0~-)h^WJa6X&>yM!SP3+yb76MV4H{IC$oEJR4cc8xGrU8C z)*ii@ZI0J0jLo!vM)Q2_$JmhqjX`)L)2?sOsJuF>+U8-Ww2ZVHH1u)~&MLGP@Y!WC z09tF1Xrg>27b;ZJ^texC81LIVbUT0K*#Ngge-)or0OqpeZg_{zJPTvn@6aHTo8m2s zd373#B*M5B*xP~xx16|qpQ_*s-^)1#?-<(9CRNTn@JuUzCF%H*qYt`XCjDt=+@hS9 zntXyK=_J;WH62#lY$O4nc|E4P2gAX5;#R@8Oq=si4a^si>JqMVD?b}afW6FEd;{WJo?jm6V-^H@g7#HAUv?Ziu{wW! zIEtalpc~6od@#V1W4`gbTEM%^aw1v27se!!SbPN&=cEI8;+C0-XaV%M= zc^TWUz+yDnmIic#hRv42=p+veAyav-BFVubC=4NUk)vm~9}>Vbyk%D8T%omS6*+p) zGD*dTJNldPwndU_**>i5BFnU|aqfQxGC1;owj4{jBwwRK180?wBQ{(V9@I=scC>cs zp6m{dPm|hoyrVUxk2%TLXpV=ELD%Nc8O?y&pwUN!nJXlk^X&!p4vhi*<{s;4y!GH~ zgB=>3sg0Kd!x)-8f>GosdwF5LA$KGkts0GasdLz&Ra%WfO#^z*1SX7Iqwx)B^EVcM z%rm-SOMM~8dA>zvtc01IJ>A6;FX@VLRSg(^rE#(wuuF{0XjzwkXCC=-2%d5Y9>!jS zvGS_Jk%*sd?olhioaPFuhpr1sXGF$b1Od^Nnof`9b#6eG=ZT`E!z3A z<8*bZe>jSVI(6@W8nfq{X93Ogo5Hw%YXY3U4=HKtOu_*HY7{(7C>MQF@aUw-7vHix zc>1YXRnAPid{!^%rvR&~YJRfg6OE+cGow-^r{J+MXC5d^c#2OO6`$=0f~lTlxwB-+ zOFE8^3t^XPc!p*GeW^LH!ZVINO%VGD_PAecW4f3ym;&3xG+ZfLz51d$qqGGafRX+Xj(2H0flb5E(7V@DO>^cs`dbW@^eMg|KUKZ{F3& z2s<<(G-9RIShk4K9BE4wVq_Qsv#*hvyO<|QjuWJeso5@Ap<4*Ee>3bFUm^oPWsO+S zm(@!|r)7dbR3DZy0ZLfCCox~C1c^zvDU?s}vG!XkkZ_g1JIh@&q!m1adGRTVLg2Kg zpUwg!74NA`DGbIcaaChj>cBDU4|F%@+XzL-wr>Di16{wkk0U;D3odjDkmsyEaRp>#+ zX5O`x?^qdSP9tLbX+HQn#Ne38I%-y8;F);P6eC79o3N#rc$MxKtxl%{kotfPF2u!% zppO_ZWr0!XBEoZg$sGL{n0#-?94|fis!Jk5;KLlq+kSHNF>RN?5|LdW=gHgWS*8 zCNpoms){+H>TONjt18S5F%Q6yc2s|&u8KjEf(d&0!(PPP&D-_QYX}(Jdfj@Ss8k!b zh-^ekdaOr=fX#v*DFRd*hBTBE<%gA+WN12Oe}{ZROfsqiW7u}^AwC0_S61bG_(


Y8IFeWLE{w@j4u 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 Ne*i|DuHkY=0s!s}1u_5t diff --git a/src/codegen/tools.py b/src/codegen/tools.py index e8ba9f0f..6430a883 100644 --- a/src/codegen/tools.py +++ b/src/codegen/tools.py @@ -94,7 +94,7 @@ class RegisterType(Enum): class RegisterDescriptor: 'Stores the contents of each register' def __init__(self): - registers = ['t0', 't1', 't2', 't3', 't4', 't5', 't6', 't7', 'a0', 'a1', 'a2', 'a3', \ + registers = ['t0', 't1', 't2', 't3', 't4', 't5', 't6', 't7', 'a1', 'a2', 'a3', \ 's0', 's1', 's2', 's3', 's4', 's5', 's6', 's7', 'v1'] self.registers = {reg: None for reg in registers} @@ -165,7 +165,7 @@ def dispatch_ptr_offset(self): return 2 def attr_offset(self, attr): - return self.attrs.index(attr) + 4 + return self.attrs.index(attr) + 3 def method_offset(self, meth): "Method offset in dispatch table" diff --git a/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc index 9966fe85d39d715339af595f65e6568c4533d5e2..2f95b876f7e74951f8efb6ee690c327193164d2a 100644 GIT binary patch delta 842 zcmYk5KWq|l6vuzR<0@?tY=H_$(_+#VP~d=a{3#rz6tvWqmZ+Oamx~u~FtK6McQTM@ zbp6GcIN90B5EFNIhb|^gjp^cG99%p2?r|Cz?)%>R-uLs~aJ;+!=AN(V_0BT zL)psqna*|ZP(oI&&-M6_W0l9GA94;YaUx;w`PUO0C#Lun3O`Ch4)U;$r~;w?O74bEq%x^#kcHs_Y_JGOE3<%$~^dO*DK{n-wl3s&pQVlNK zYPhU@y$&&&ZNds^0}`ZFD3I15MXEv8R^yV@)wf`dW=#l^ZbO)~1&j2KY#rdv2F+>% zC{v+9jZBwyi00ndgqGv&I9`tq5B3*y$zZTQbYbPOD>w)->b%%>sq$lWNL3!I-q2-C zm6*hif;zj)lI`yCb^NHmk1EkmlK2+AGE$d*a(-1T$3BmK#JJ4Q#QDlI*DPNYFIID- zx2q}cadXE0*#Cv64KeRo5U=AAaj|A{d1SBd>y|J?t--??{Q&#t|=?kYK*JrZ8s z-VYVu)LWNpfcM#37Y96Yqt4W@!ElTiOtb0nI)CYgxatl{RT*NcY-*FEJAiJ8Tq{-G zO&j|C=+mmR)vA29vMFQU^)HvI9Zjyux>C2RqY#5QC`Lrq6Lm>ts?*>a)023RC?16A zDMUSxJZ-IB7SH{Pas`r*f^kFE)5Lg)$sjXEOqQ6e#l*xf|M0muWFQMUWG32}Nn{j} z2xOE5Ou`gQV?NWC=P^%G&jR(#TRl_aX+YTm`~AeYqZ;{wcE6K z5>)zUU=`NjDl+RJ$x?Mtd ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',29,1046) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',29,1046) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',29,1046) @@ -6183,37 +6183,37 @@ yacc.py: 411:State : 91 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur true . LexToken(ccur,'}',29,1062) yacc.py: 471:Action : Reduce rule [atom -> true] with ['true'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur def_func semi id opar epsilon . LexToken(cpar,')',35,1254) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur def_func semi id opar param_list_empty . LexToken(cpar,')',35,1254) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur def_func semi id opar formals . LexToken(cpar,')',35,1254) @@ -6285,19 +6285,19 @@ yacc.py: 411:State : 113 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar . LexToken(cpar,')',35,1273) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar epsilon . LexToken(cpar,')',35,1273) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar arg_list_empty . LexToken(cpar,')',35,1273) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar args . LexToken(cpar,')',35,1273) @@ -6306,37 +6306,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar args cpar . LexToken(semi,';',35,1274) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['abort','(',[],')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'abort',35,1267), [])) + yacc.py: 506:Result : ((LexToken(id,'abort',35,1267), [])) yacc.py: 410: yacc.py: 411:State : 78 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur func_call . LexToken(semi,';',35,1274) - yacc.py: 471:Action : Reduce rule [factor -> func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar epsilon . LexToken(cpar,')',40,1389) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',40,1389) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals . LexToken(cpar,')',40,1389) @@ -6504,19 +6504,19 @@ yacc.py: 411:State : 113 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar . LexToken(cpar,')',40,1409) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar epsilon . LexToken(cpar,')',40,1409) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar arg_list_empty . LexToken(cpar,')',40,1409) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar args . LexToken(cpar,')',40,1409) @@ -6525,37 +6525,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar args cpar . LexToken(semi,';',40,1410) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['abort','(',[],')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'abort',40,1403), [])) + yacc.py: 506:Result : ((LexToken(id,'abort',40,1403), [])) yacc.py: 410: yacc.py: 411:State : 78 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur func_call . LexToken(semi,';',40,1410) - yacc.py: 471:Action : Reduce rule [factor -> func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['i',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'i',49,1777), LexToken(type ...) + yacc.py: 506:Result : ((LexToken(id,'i',49,1777), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar param . LexToken(cpar,')',49,1784) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',49,1784) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',49,1784) @@ -6734,37 +6734,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',50,1810) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Cons'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( id] with ['i'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['init','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'init',50,1812), [ id opar args cpar] with ['init','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'init',50,1812), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['cons','(',,')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['cons','(',,')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',53,1833) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',53,1833) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','List','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','List','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['car',':','Int'] and goto state 17 - yacc.py: 506:Result : ( ( id colon type] with ['cdr',':','List'] and goto state 17 - yacc.py: 506:Result : ( ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',76,2482) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',76,2482) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',76,2482) @@ -7097,37 +7097,37 @@ yacc.py: 411:State : 92 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur false . LexToken(ccur,'}',76,2499) yacc.py: 471:Action : Reduce rule [atom -> false] with ['false'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',78,2511) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',78,2511) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',78,2511) @@ -7191,37 +7191,37 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',78,2526) yacc.py: 471:Action : Reduce rule [atom -> id] with ['car'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',80,2538) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',80,2538) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',80,2538) @@ -7285,37 +7285,37 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',80,2554) yacc.py: 471:Action : Reduce rule [atom -> id] with ['cdr'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['i',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'i',82,2566), LexToken(type ...) + yacc.py: 506:Result : ((LexToken(id,'i',82,2566), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param . LexToken(comma,',',82,2573) @@ -7375,24 +7375,24 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma id colon type . LexToken(cpar,')',82,2586) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['rest',':','List'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'rest',82,2575), LexToken(t ...) + yacc.py: 506:Result : ((LexToken(id,'rest',82,2575), LexToken(t ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 - yacc.py: 506:Result : ([(LexToken(id,'rest',82,2575), LexToken( ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 + yacc.py: 506:Result : ([(LexToken(id,'rest',82,2575), LexToken( ...) yacc.py: 410: yacc.py: 411:State : 95 yacc.py: 430:Defaulted state 95: Reduce using 33 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param_list . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',82,2586) @@ -7429,42 +7429,42 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur ocur id larrow id . LexToken(semi,';',84,2615) yacc.py: 471:Action : Reduce rule [atom -> id] with ['i'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['car','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['car','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['rest'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['cdr','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['cdr','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['init','(',,')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['init','(',,')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',90,2655) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',90,2655) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Cons','inherits','List','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Cons','inherits','List','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['mylist',':','List'] and goto state 17 - yacc.py: 506:Result : ( ( id colon type] with ['l',':','List'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'l',107,3036), LexToken(typ ...) + yacc.py: 506:Result : ((LexToken(id,'l',107,3036), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param . LexToken(cpar,')',107,3044) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list . LexToken(cpar,')',107,3044) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',107,3044) @@ -7801,12 +7801,12 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if id . LexToken(dot,'.',108,3067) yacc.py: 471:Action : Reduce rule [atom -> id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar epsilon . LexToken(cpar,')',108,3074) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar arg_list_empty . LexToken(cpar,')',108,3074) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar args . LexToken(cpar,')',108,3074) @@ -7844,37 +7844,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar args cpar . LexToken(then,'then',108,3076) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['isNil','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'isNil',108,3068), [])) + yacc.py: 506:Result : ((LexToken(id,'isNil',108,3068), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot func_call . LexToken(then,'then',108,3076) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( string] with ['\n'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',108,3081), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',108,3081), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar epsilon . LexToken(cpar,')',110,3145) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar arg_list_empty . LexToken(cpar,')',110,3145) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar args . LexToken(cpar,')',110,3145) @@ -8043,48 +8043,48 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar args cpar . LexToken(cpar,')',110,3146) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['head','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'head',110,3140), [])) + yacc.py: 506:Result : ((LexToken(id,'head',110,3140), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot func_call . LexToken(cpar,')',110,3146) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_int','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_int',110,3130), [ id opar args cpar] with ['out_int','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_int',110,3130), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( string] with [' '] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',111,3155), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',111,3155), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar epsilon . LexToken(cpar,')',112,3196) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar arg_list_empty . LexToken(cpar,')',112,3196) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar args . LexToken(cpar,')',112,3196) @@ -8288,48 +8288,48 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar args cpar . LexToken(cpar,')',112,3197) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['tail','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'tail',112,3191), [])) + yacc.py: 506:Result : ((LexToken(id,'tail',112,3191), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot func_call . LexToken(cpar,')',112,3197) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['print_list','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'print_list',112,3178), [ id opar args cpar] with ['print_list','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'print_list',112,3178), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print_list','(',,')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print_list','(',,')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',126,3742) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',126,3742) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals . LexToken(cpar,')',126,3742) @@ -8540,12 +8540,12 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow new type . LexToken(dot,'.',128,3783) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','List'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3784), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3784), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3792), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3792), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3800), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3800), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3808), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3808), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3816), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3816), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar epsilon . LexToken(cpar,')',129,3851) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar arg_list_empty . LexToken(cpar,')',129,3851) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar args . LexToken(cpar,')',129,3851) @@ -9023,67 +9023,67 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar args cpar . LexToken(cpar,')',129,3852) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['isNil','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'isNil',129,3845), [])) + yacc.py: 506:Result : ((LexToken(id,'isNil',129,3845), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot func_call . LexToken(cpar,')',129,3852) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 124 - yacc.py: 506:Result : ( comp] with [] and goto state 124 + yacc.py: 506:Result : ( not expr] with ['not',] and goto state 77 - yacc.py: 506:Result : ( not expr] with ['not',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 133 - yacc.py: 506:Result : ( comp] with [] and goto state 133 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['print_list','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'print_list',131,3874), [ id opar args cpar] with ['print_list','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'print_list',131,3874), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar epsilon . LexToken(cpar,')',132,3924) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar arg_list_empty . LexToken(cpar,')',132,3924) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar args . LexToken(cpar,')',132,3924) @@ -9286,42 +9286,42 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar args cpar . LexToken(semi,';',132,3925) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['tail','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'tail',132,3919), [])) + yacc.py: 506:Result : ((LexToken(id,'tail',132,3919), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot func_call . LexToken(semi,';',132,3925) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 204 - yacc.py: 506:Result : ( comp] with [] and goto state 204 + yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 - yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi def_func semi epsilon . LexToken(ccur,'}',138,3957) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi def_func semi feature_list . LexToken(ccur,'}',138,3957) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( ( Date: Sun, 29 Nov 2020 21:15:47 -0700 Subject: [PATCH 56/60] Almost finished report ;) --- doc/report/report.aux | 18 +- doc/report/report.log | 229 +- doc/report/report.out | 12 + doc/report/report.pdf | Bin 92388 -> 152812 bytes doc/report/report.synctex.gz | Bin 36200 -> 81738 bytes doc/report/report.tex | 156 +- doc/report/resources/case.cl | 5 + doc/report/resources/object.png | Bin 0 -> 25224 bytes .../__pycache__/cil_ast.cpython-37.pyc | Bin 14939 -> 15278 bytes src/codegen/cil_ast.py | 7 + .../base_cil_visitor.cpython-37.pyc | Bin 10773 -> 10753 bytes .../__pycache__/cil_visitor.cpython-37.pyc | Bin 12850 -> 13323 bytes src/codegen/visitors/base_cil_visitor.py | 10 +- src/codegen/visitors/base_mips_visitor.py | 22 +- src/codegen/visitors/cil_visitor.py | 39 +- src/codegen/visitors/mips_visitor.py | 54 +- src/cool_parser/output_parser/parselog.txt | 1658 ++--- src/hello_world.cl | 8 + src/test.cl | 235 +- src/test.mips | 3195 ++++------ tests/codegen/arith.mips | 5556 +++++++++++------ tests/codegen/atoi.mips | 1300 ++-- tests/codegen/book_list.mips | 1205 +++- tests/codegen/cells.mips | 710 ++- tests/codegen/complex.mips | 476 +- tests/codegen/fib.mips | 16 +- tests/codegen/graph.mips | 3464 +++++++--- tests/codegen/hairyscary.mips | 1918 +++--- tests/codegen/hello_world.mips | 6 - tests/codegen/io.mips | 350 +- tests/codegen/life.mips | 1498 +++-- tests/codegen/list.mips | 730 ++- tests/codegen/new_complex.mips | 892 ++- tests/codegen/palindrome.mips | 514 +- tests/codegen/primes.mips | 145 +- tests/codegen/print-cool.mips | 324 +- tests/codegen/sort-list.mips | 1017 ++- 37 files changed, 16886 insertions(+), 8883 deletions(-) create mode 100644 doc/report/report.out create mode 100644 doc/report/resources/case.cl create mode 100644 doc/report/resources/object.png create mode 100644 src/hello_world.cl diff --git a/doc/report/report.aux b/doc/report/report.aux index 9496583a..eb32d51b 100644 --- a/doc/report/report.aux +++ b/doc/report/report.aux @@ -6,12 +6,16 @@ \@writefile{toc}{\contentsline {subsection}{\numberline {2.1}An\IeC {\'a}lisis sint\IeC {\'a}ctico}{1}} \@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.1}An\IeC {\'a}lisis l\IeC {\'e}xico}{2}} \@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.2}Parsing}{2}} -\newlabel{lst:parser}{{1}{3}} -\@writefile{lol}{\contentsline {lstlisting}{\numberline {1}Funci\IeC {\'o}n de una regla gramatical en PLY}{3}} +\newlabel{lst:parser}{{1}{2}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {1}Funci\IeC {\'o}n de una regla gramatical en PLY}{2}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.2}An\IeC {\'a}lisis sem\IeC {\'a}ntico}{3}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Generaci\IeC {\'o}n de c\IeC {\'o}digo}{4}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.3.1}C\IeC {\'o}digo Intermedio}{4}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Generaci\IeC {\'o}n de c\IeC {\'o}digo}{3}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.3.1}C\IeC {\'o}digo Intermedio}{3}} +\newlabel{lst:parser}{{2}{4}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {2}Forma de la expresi\IeC {\'o}n case}{4}} \@writefile{toc}{\contentsline {subsubsection}{\numberline {2.3.2}C\IeC {\'o}digo de M\IeC {\'a}quina}{4}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}Optimizaci\IeC {\'o}n}{4}} -\@writefile{toc}{\contentsline {section}{\numberline {3}Problemas t\IeC {\'e}cnicos}{4}} -\@writefile{toc}{\contentsline {paragraph}{\nonumberline Detalles sobre cualquier problema te\IeC {\'o}rico o t\IeC {\'e}cnico interesante que haya necesitado resolver de forma particular.}{4}} +\newlabel{fig:objects}{{2.3.2}{6}} +\@writefile{lof}{\contentsline {figure}{\numberline {2.1}{\ignorespaces Representaci\IeC {\'o}n de los objetos en memoria}}{6}} +\@writefile{toc}{\contentsline {section}{\numberline {3}Problemas t\IeC {\'e}cnicos y te\IeC {\'o}ricos}{7}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Tipos por valor y por referencia}{7}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Valor Void en Mips}{8}} diff --git a/doc/report/report.log b/doc/report/report.log index 5cf1d860..3ecb2440 100644 --- a/doc/report/report.log +++ b/doc/report/report.log @@ -1,4 +1,4 @@ -This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=pdflatex 2018.11.1) 29 NOV 2020 11:20 +This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=pdflatex 2018.11.1) 29 NOV 2020 20:48 entering extended mode restricted \write18 enabled. %&-line parsing enabled. @@ -97,6 +97,26 @@ LaTeX Info: Redefining \textsubscript on input line 4161. Class scrartcl Info: Redefining `\numberline' on input line 5319. \bibindent=\dimen102 ) +(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty +Package: graphicx 2017/06/01 v1.1a Enhanced LaTeX Graphics (DPC,SPQR) + +(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty +Package: graphics 2017/06/25 v1.2c Standard LaTeX Graphics (DPC,SPQR) + +(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty +Package: trig 2016/01/03 v1.10 sin cos tan (DPC) +) +(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg +File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration +) +Package graphics Info: Driver file: pdftex.def on input line 99. + +(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def +File: pdftex.def 2018/01/08 v1.0l Graphics/color driver for pdftex +)) +\Gin@req@height=\dimen103 +\Gin@req@width=\dimen104 +) (./structure.tex (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty Package: amsmath 2017/09/02 v2.17a AMS math features \@mathmargin=\skip55 @@ -108,11 +128,11 @@ Package: amstext 2000/06/29 v2.01 AMS text (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty File: amsgen.sty 1999/11/30 v2.0 generic functions \@emptytoks=\toks15 -\ex@=\dimen103 +\ex@=\dimen105 )) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty Package: amsbsy 1999/11/29 v1.2d Bold Symbols -\pmbraise@=\dimen104 +\pmbraise@=\dimen106 ) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty Package: amsopn 2016/03/08 v2.02 operator names @@ -129,7 +149,7 @@ LaTeX Info: Redefining \dots on input line 475. LaTeX Info: Redefining \cdots on input line 596. \Mathstrutbox@=\box28 \strutbox@=\box29 -\big@size=\dimen105 +\big@size=\dimen107 LaTeX Font Info: Redeclaring font encoding OML on input line 712. LaTeX Font Info: Redeclaring font encoding OMS on input line 713. \macc@depth=\count93 @@ -142,12 +162,12 @@ LaTeX Font Info: Redeclaring font encoding OMS on input line 713. \column@=\count98 \maxfields@=\count99 \andhelp@=\toks17 -\eqnshift@=\dimen106 -\alignsep@=\dimen107 -\tagshift@=\dimen108 -\tagwidth@=\dimen109 -\totwidth@=\dimen110 -\lineht@=\dimen111 +\eqnshift@=\dimen108 +\alignsep@=\dimen109 +\tagshift@=\dimen110 +\tagwidth@=\dimen111 +\totwidth@=\dimen112 +\lineht@=\dimen113 \@envbody=\toks18 \multlinegap=\skip56 \multlinetaggap=\skip57 @@ -179,14 +199,14 @@ Package: amsthm 2017/10/31 v2.20.4 \lst@gtempboxa=\box30 \lst@token=\toks26 \lst@length=\count101 -\lst@currlwidth=\dimen112 +\lst@currlwidth=\dimen114 \lst@column=\count102 \lst@pos=\count103 -\lst@lostspace=\dimen113 -\lst@width=\dimen114 +\lst@lostspace=\dimen115 +\lst@width=\dimen116 \lst@newlines=\count104 \lst@lineno=\count105 -\lst@maxwidth=\dimen115 +\lst@maxwidth=\dimen117 (/usr/share/texlive/texmf-dist/tex/latex/listings/lstmisc.sty File: lstmisc.sty 2015/06/04 1.6 (Carsten Heinz) @@ -211,7 +231,7 @@ Language: english 2017/06/06 v3.3r English support from the babel system (/usr/share/texlive/texmf-dist/tex/generic/babel/babel.def File: babel.def 2018/02/14 3.18 Babel common definitions \babel@savecnt=\count108 -\U@D=\dimen116 +\U@D=\dimen118 (/usr/share/texlive/texmf-dist/tex/generic/babel/txtbabel.def) \bbl@dirlevel=\count109 @@ -220,26 +240,6 @@ File: babel.def 2018/02/14 3.18 Babel common definitions \l@australian = a dialect from \language\l@british \l@newzealand = a dialect from \language\l@british )) -(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty -Package: graphicx 2017/06/01 v1.1a Enhanced LaTeX Graphics (DPC,SPQR) - -(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty -Package: graphics 2017/06/25 v1.2c Standard LaTeX Graphics (DPC,SPQR) - -(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty -Package: trig 2016/01/03 v1.10 sin cos tan (DPC) -) -(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg -File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration -) -Package graphics Info: Driver file: pdftex.def on input line 99. - -(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def -File: pdftex.def 2018/01/08 v1.0l Graphics/color driver for pdftex -)) -\Gin@req@height=\dimen117 -\Gin@req@width=\dimen118 -) (/usr/share/texlive/texmf-dist/tex/latex/booktabs/booktabs.sty Package: booktabs 2016/04/27 v1.618033 publication quality tables \heavyrulewidth=\dimen119 @@ -898,7 +898,11 @@ LaTeX Font Info: Redeclaring math accent \mathring on input line 256. (/usr/share/texlive/texmf-dist/tex/latex/sectsty/sectsty.sty Package: sectsty 2002/02/25 v2.0.2 Commands to change all sectional heading sty les -)) (./report.aux) +)) (./report.aux + +LaTeX Warning: Label `lst:parser' multiply defined. + +) \openout1 = `report.aux'. LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 46. @@ -916,8 +920,7 @@ LaTeX Font Info: ... okay on input line 46. LaTeX Font Info: Checking defaults for FML/futm/m/it on input line 46. LaTeX Font Info: Try loading font information for FML+futm on input line 46. - -(/usr/share/texlive/texmf-dist/tex/latex/fourier/fmlfutm.fd + (/usr/share/texlive/texmf-dist/tex/latex/fourier/fmlfutm.fd File: fmlfutm.fd 2004/10/30 Fontinst v1.926 font definitions for FML/futm. ) LaTeX Font Info: ... okay on input line 46. @@ -949,20 +952,18 @@ LaTeX Font Info: Try loading font information for T1+futs on input line 46. (/usr/share/texlive/texmf-dist/tex/latex/fourier/t1futs.fd File: t1futs.fd 2004/03/02 Fontinst v1.926 font definitions for T1/futs. ) -\c@lstlisting=\count118 - (/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii [Loading MPS to PDF converter (version 2006.09.02).] -\scratchcounter=\count119 +\scratchcounter=\count118 \scratchdimen=\dimen141 \scratchbox=\box33 -\nofMPsegments=\count120 -\nofMParguments=\count121 +\nofMPsegments=\count119 +\nofMParguments=\count120 \everyMPshowfont=\toks31 -\MPscratchCnt=\count122 +\MPscratchCnt=\count121 \MPscratchDim=\dimen142 -\MPnumerator=\count123 -\makeMPintoPDFobject=\count124 +\MPnumerator=\count122 +\makeMPintoPDFobject=\count123 \everyMPtoPDFconversion=\toks32 ) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty Package: epstopdf-base 2016/05/15 v2.6 Base part for package epstopdf @@ -1016,6 +1017,8 @@ G,.JBIG2,.JB2,.eps] File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv e )) +\c@lstlisting=\count124 + *geometry* driver: auto-detecting *geometry* detected driver: pdftex *geometry* verbose mode - [ preamble ] result: @@ -1091,67 +1094,117 @@ Class scrartcl Warning: incompatible usage of \@ssect detected. (scrartcl) This could result in several error messages on input li ne 56. - -Class scrartcl Warning: incompatible usage of \@ssect detected. -(scrartcl) You've used the KOMA-Script implementation of \@ssect -(scrartcl) from within a non compatible caller, that does not -(scrartcl) \scr@s@ct@@nn@m@ locally. -(scrartcl) This could result in several error messages on input li -ne 64. - - -Overfull \hbox (10.97055pt too wide) in paragraph at lines 67--68 - \T1/futs/m/sc/10.95 Una ex-pli-cación gen-eral de la ar-qui-tec-tura, en cuán- -tos mó-du-los se di-vide el proyecto, - [] - -LaTeX Font Info: Try loading font information for T1+cmtt on input line 78. +LaTeX Font Info: Try loading font information for T1+cmtt on input line 74. (/usr/share/texlive/texmf-dist/tex/latex/base/t1cmtt.fd File: t1cmtt.fd 2014/09/29 v2.5h Standard LaTeX font definitions ) LaTeX Font Info: Font shape `T1/futs/bx/n' in size <12> not available -(Font) Font shape `T1/futs/b/n' tried instead on input line 81. +(Font) Font shape `T1/futs/b/n' tried instead on input line 77. [1 {/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] -LaTeX Font Info: Try loading font information for TS1+futs on input line 96. - - -(/usr/share/texlive/texmf-dist/tex/latex/fourier/ts1futs.fd -File: ts1futs.fd 2004/03/26 Fontinst v1.926 font definitions for TS1/futs. -) LaTeX Font Info: Font shape `T1/futs/bx/n' in size <10.95> not available -(Font) Font shape `T1/futs/b/n' tried instead on input line 105. +(Font) Font shape `T1/futs/b/n' tried instead on input line 94. (/usr/share/texlive/texmf-dist/tex/latex/listings/lstlang1.sty File: lstlang1.sty 2015/06/04 1.6 listings language file ) -(./resources/parser.py [2]) -Overfull \hbox (29.69118pt too wide) in paragraph at lines 138--139 +(./resources/parser.py) [2] +Overfull \hbox (29.69118pt too wide) in paragraph at lines 125--126 []\T1/futs/m/n/10.95 En la primera pasada so-la-mente recolec-ta-mos to-dos los tipos definidos. A este vis-i-tor, \T1/cmtt/m/n/10.95 TypeCollector [] -[3] [4] (./report.aux) ) +[3] (./resources/case.cl) +LaTeX Font Info: Font shape `FMX/futm/m/n' will be +(Font) scaled to size 10.07397pt on input line 155. +LaTeX Font Info: Font shape `FMX/futm/m/n' will be +(Font) scaled to size 7.63599pt on input line 155. +LaTeX Font Info: Font shape `FMX/futm/m/n' will be +(Font) scaled to size 5.51999pt on input line 155. +LaTeX Font Info: Font shape `U/futm/m/n' will be +(Font) scaled to size 10.07397pt on input line 155. +LaTeX Font Info: Font shape `U/futm/m/n' will be +(Font) scaled to size 7.63599pt on input line 155. +LaTeX Font Info: Font shape `U/futm/m/n' will be +(Font) scaled to size 5.51999pt on input line 155. + +Overfull \hbox (8.54066pt too wide) in paragraph at lines 161--162 +\T1/futs/m/n/10.95 con el ob-je-tivo de im-ple-men-tar de forma más sen-cilla l +as fun-ciones \T1/cmtt/m/n/10.95 in_int\T1/futs/m/n/10.95 , \T1/cmtt/m/n/10.95 +in_string\T1/futs/m/n/10.95 , \T1/cmtt/m/n/10.95 out_int + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 167--168 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 167--168 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 169--170 + + [] + +[4] +LaTeX Font Info: Try loading font information for TS1+futs on input line 173 +. + (/usr/share/texlive/texmf-dist/tex/latex/fourier/ts1futs.fd +File: ts1futs.fd 2004/03/26 Fontinst v1.926 font definitions for TS1/futs. +) +Overfull \hbox (1.90201pt too wide) in paragraph at lines 193--194 +[]\T1/futs/m/n/10.95 Rastrea las lo-cal-iza-ciones donde una vari-able lo-cal p +uede ser en-con-trada. + [] + +[5] +Underfull \hbox (badness 10000) in paragraph at lines 212--213 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 212--213 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 214--215 + + [] + + +File: resources/object.png Graphic file (type png) + +Package pdftex.def Info: resources/object.png used on input line 222. +(pdftex.def) Requested size: 256.07741pt x 131.01648pt. +[6 <./resources/object.png (PNG copy)>] [7] [8] (./report.aux) + +LaTeX Warning: There were multiply-defined labels. + + ) Here is how much of TeX's memory you used: - 8839 strings out of 492982 - 131683 string characters out of 6134896 - 309764 words of memory out of 5000000 - 12208 multiletter control sequences out of 15000+600000 - 79687 words of font info for 77 fonts, out of 8000000 for 9000 + 8897 strings out of 492982 + 132494 string characters out of 6134896 + 310835 words of memory out of 5000000 + 12252 multiletter control sequences out of 15000+600000 + 100154 words of font info for 106 fonts, out of 8000000 for 9000 1141 hyphenation exceptions out of 8191 - 51i,7n,51p,8817b,1775s stack positions out of 5000i,500n,10000p,200000b,80000s -{/usr/share/texlive/texmf-dist/fonts/enc/dvips/base/8r. -enc}{/usr/share/texmf/fonts/enc/dvips/cm-super/cm-super-t1.enc} -Output written on report.pdf (4 pages, 92388 bytes). + 51i,7n,51p,8838b,1254s stack positions out of 5000i,500n,10000p,200000b,80000s +{/usr/share/texmf/fonts/enc/dvips/cm-super/cm-super-t1.enc}{/usr/share/texliv +e/texmf-dist/fonts/enc/dvips/base/8r.enc} +Output written on report.pdf (8 pages, 152812 bytes). PDF statistics: - 35 PDF objects out of 1000 (max. 8388607) - 24 compressed objects within 1 object stream + 54 PDF objects out of 1000 (max. 8388607) + 37 compressed objects within 1 object stream 0 named destinations out of 1000 (max. 500000) - 1 words of extra memory for PDF output out of 10000 (max. 10000000) + 6 words of extra memory for PDF output out of 10000 (max. 10000000) diff --git a/doc/report/report.out b/doc/report/report.out new file mode 100644 index 00000000..8410c6f3 --- /dev/null +++ b/doc/report/report.out @@ -0,0 +1,12 @@ +\BOOKMARK [1][-]{section.1}{Uso del compilador}{}% 1 +\BOOKMARK [1][-]{section.2}{Arquitectura del compilador}{}% 2 +\BOOKMARK [2][-]{subsection.2.1}{An\341lisis sint\341ctico}{section.2}% 3 +\BOOKMARK [3][-]{subsubsection.2.1.1}{An\341lisis l\351xico}{subsection.2.1}% 4 +\BOOKMARK [3][-]{subsubsection.2.1.2}{Parsing}{subsection.2.1}% 5 +\BOOKMARK [2][-]{subsection.2.2}{An\341lisis sem\341ntico}{section.2}% 6 +\BOOKMARK [2][-]{subsection.2.3}{Generaci\363n de c\363digo}{section.2}% 7 +\BOOKMARK [3][-]{subsubsection.2.3.1}{C\363digo Intermedio}{subsection.2.3}% 8 +\BOOKMARK [3][-]{subsubsection.2.3.2}{C\363digo de M\341quina}{subsection.2.3}% 9 +\BOOKMARK [1][-]{section.3}{Problemas t\351cnicos y te\363ricos}{}% 10 +\BOOKMARK [2][-]{subsection.3.1}{Tipos por valor y por referencia}{section.3}% 11 +\BOOKMARK [2][-]{subsection.3.2}{Valor Void en Mips}{section.3}% 12 diff --git a/doc/report/report.pdf b/doc/report/report.pdf index 08bdc018d94af87f0da36316e2cf157b8a69c480..ce860c387ccef8001de9f55448dd24de16f92a52 100644 GIT binary patch literal 152812 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

3i>kg*sp+GV&>eK8*${3>w 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

  • SNyJVY4nD* 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%0Ar(d3o?vvV2 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 literal 92388 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%0AcFwq`lPXndc7Cl-&L1$AQ>Ot2i~ycu~gj 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
    %G!N5$)LI?g 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%0AHrkiOsnPAzJcg!}0^; z3#IJdB(~pYvxnbuXoG)z{)!7fI4A7qzD=byHiq|NwP!;OHku5^UK|f|(A<;T0dO~* zg~wma_jl-H9y%lK{SKUk7(cA{IMZi2E7IRjvMD~7;V%YAV|wOE?x^wxO*GhT5?Wwp z#^`*$njZo*wxL?pVWNDm^=NeNt)h}3TXn@==ok$i^9$Wzcb$KRWuYpt=G&`6uNMn6 zgDf3gD)^5zl6T~U41xSE#8)U1=E?e+sb~L-{fZ7RJ5I#0 zXB$3-^nbqS|F)`kdd@SDT9*xcgudD%J}?F01bTsYbk4>>!}jt-2YuV}9RLe0VUiqi_u> zI85`zU_VVvJ{wL)j*{*@(1lr%*AfoEdE`mC{@n3%ypexY9U1BQWad2PW+6(Tx-rYx z;~yo!;)I>!C@)9b(xgBC(mMlYblD5m=0fc4DiEIbI*bQl+7bb6n)j(9{rVOUlecf7 zVc(jSk}Pj`m!2~jX?q?h9fQNEZPMqH|$b!U3pQEISg5e`HwR5LQYAo37U^CfB z4N1sMF$I5AD@)S(Vn98klo^aAGU0RJkAK>v0Cc~6850|VS*JR&3X`kG%-)`ox#mAs ze}euK2hpK?n!yL_IuxK?xcKK&F)sLD?=<-R49d%IIOyrXBlCu8Ada;6R+TD8stH!L z$hf#UZWWn~tn8|9=c!2|RT(~hQ_5~KIwFXFJsP7(6^%jMo=u0SG#c;8?8O4rBXOfC1xO&&ZBoO(wm3P8R zjnHK<30q2*@O;H^#piy?{9t@QMf-3>o3DR4+OKb_CJp%niD1fwUNUc0l2%*2ZY5h5 zPS=kB2a`QxU@9$uPc`24g*l@c2K8<#!L@%8n}8*w&3tl{gfTR74EkOXDV;QV7~%?+ zjHN+eePFz71rxykK_>i=*&`aZA7)8X?l3QQ!ha^iKZ0Mx?owBGzv7xR9O#ieO$&cv z$&o8>!Yc6JJYBQ4K(r7)q2C8kYM6W!)&qBD9DI+?2@TZx?rBtk&u78F4f4M$F#kyT zpePWHXhx&MF2R|>3)4H?QVu!k9m)D0LQMtRzb$)fRmD@VI(Jc{&17)>HY*zdXpOEA z!8&8ylRk@=^p}fr$_FE-4eTk|9YKGHg2p~LW}gbdGMWxH@j5*6J&sVl!S@7py+0LD zUDLn{Z|bEoYT9u%=->#8KaUea)+PTU{LbZ7zt`!GBBYC0#G!Gs64DaeU(G&6ZNp#K zK2e=>Xa!jG%{nLYnni0Qzmpj^Pb*Thm|9dPQcsC5Ojmo_z8P>`>JIExcBOw^A-zk3 z0zJK9P;7}ieXj;@Nl7<8eqPYtR4T{EXpC!*1_D8FK6P@2tGu_HUCp=?d=zq~s0)Au zrlv>56==G&VzSJK^kAliV(9q>_|U+b+dMnkyfw_A`bm*>*N=K~9enlzT`n$J8H4h< zQ7ku#V$!}MtgOtOjAAd=9Rz=e(q8=gc9~8TLPb^#mY&mvg-IqN@|4r4C49%UBhYY} zl}L>5X#l88^jkp%qJE$L`4ykONt&|WFbilPoH^owuz@ibmFFB|dF+y8wO)^B;;#0a zf@{Tsm&dp6+U(EFH70a;|K{Y)`4fY#0fj0N6DH0&!#6L7nU{`)sc(O`dZYg|c&b@@ zDMTm4(nICf5fuO9^BrQmvc;4mzorpU11Dr8l!Y#5WmxY{*Op*axK2%c@L~Gg1gDUv zb&O}z&MjCETMa%TMj#{9 zFDTikkVbMt6ak$n8V7%dX;!iqGdfgL*@3fCQ;%Kx&eN49Cpfo0lv?*D)@QSKG=?y43ln)zvo*7s!h{e#LJogYboBRpVpuBSXy})} zzz5}z)!ZdX_-$jX{kM)^=xIeR9@~;vHfvt13^gtbq>@Pk^Xe#>+qmJ54MCj(DeOo>-raWyo z2$z{sJV;9h(dx@A_?7Rrv;I#)kT&*}5B9qU=?oR> zE~x%VnBC1IaTnxG!cVr6P15cm+h9t`3Br8CBCCH)EE(!5*iBDPe+p)l%tQKuN}|VL z7cKt)-zf+Qq{V?yie*bM#WWU@JdvSC?r7T)=05havyE}8DFIIvYcuOOPp!txR}{ViAjGu zaUeY~@}S9*1!>k+>GZ=p_O!pJ50{N4|NNNt=U-p<<7%n5o@cl$6}-|(0{ZD4#0BtZ zU1O|OBngR8Wq*ogDHC+auRpY$D&drp&5K9q!yj3Lv*U2pyW=T2NiV;VlV4jnr=xfQ z&rUB_-;WF=3*6{(yu$A|EAE4m<(7Xtwv%7Fq7$Y4w;&m^;HgzEMJ+yJyy%!P-iPVr z+IdM+ulV#6m6iw0wruu;I}D!F`7WW|5@3uIcnOFaPHcS1Z)1hIhRy|(C?-Zie;+WhxH8H)^P$5faYJP>Y4=)nhT;aHdF%>hV`Xo#=QzUK!|?>Z02Y? zrZt)0{da#LS@;N|)~F;Vu9?t`v03!@x#4F|M4r^+;mmv!#MpJKwU*}2xDgT!f7fs( zUb_x~$XaDaQkjZ&D!eSgHbrk#`O2gdJ8M-IV{^RX;L{GZ;>Jj=ymSzxGP%QY6@alU zmDsIhV2i`e{;yIl^Qkcu`}2Pam~@%ph-Q;kXPYSp_dYdC&nT->*Mw@tvg|lU-u=RJ z$3#lqa_frHKVLSwfvLEmg+j#Gpl?y{#n<(h)2#txkuF4@GGQA4GY8Pvu@c=g4PI9y zwtyDsjpYh(TT4B}9muF`>NoAKRGM!IdG8Yf)%4YG?_aK<(hFp(S{8p~MKJ;hW1J}; zYiT4XS#N{Ry$(ukfdqP{XplZf%JMSWdPg3|ThX_bA4;d48jpT-E-fOUM%}CyA~x@|xF*alGIjNxM{T7`zYlLaV2q z*~cQKE$YC}!f8uZG%0^}ElS!?HF$oy=`w|%>_!CleTQForPidXJNGPXS_1W$4!Ha) z!gsM!)QjDOs1Cz01tFUg|2iT#2&nLPhj{5=iVY5 zUNU<8;Vt@Mm90x@r=LWRF`jtWAu9LSM2UQ~r1O8Dn32kPw75QmoB1#- zed;N9AMW#Q@~<#}OIeZ{u;7ggY5#Z#oTX0FVt0y{6cWEXwMh8&(Z(q<`La|vs`$)V z2^HmCESV^5MW>2kZi2v6U^cV8{mnCis}Z0X6Xkny+6?QtrV zfj&XH#pWY`80JHL6`e*TE`!H&cm_A&dcD4Gq+n6$6srN*LI68i0+|x=)Bu0FFkmXn zM{rz&#F4)`8XgGIcZZmVQ~g_L#pK9R3pHZP<(H1{A(5b^+555lb5`Z z0SoDXsk)($_d#4lL~cZM|ESXqhN@(*sb=D+B(>O^q>9Y4!1(h7`k@#H2m{)QEjlxN zcfe)WLT`)qdf=pA>`R;jpFMxc5u8@x2) zeoE8m73#+`*0L4VUuMgVle28bs{3V5L6tOqK0>4s4UP!5Px495FcKzlfJ~OfMnkRH znm~Ux6j$QV-%BM*fe*R^hhW|~h5ndES_XLAN@|7oG;cdwcyoGVo6t*0(sZy(?MeOA zLZIeNx>5A4ot5_Bs-9j;ynBV1;5)(^%?U*$jdVxu$kg(rCF}y6qB%^U8{f+Rig*AhqQR3{s=P^g4egA|ku4dzdkPLx_e_hV>(($hy9zB%ASw z!0tdH9NW9GSQq?iaW5s--O}K<7<5DZqf1&p1$&SVOy{}}9RR#3-8pg@Q|a@pkzQn+ zkA`Sr(Vp>>Y)NsPM;!&SO9LpI!gk>>GD2TA>St1ig7}6^_KJ{x7r^WxrxJg?JM@3P zvqrQvU84qf#h2N=)ftO)mL{>Eg?N8QlJVeVE786AmD0rJHk&pABW zd=pOAMMR=VKGxH0Tj6T`tk!=xTnPsL5Ga?RE2~dL8N6k=GI_EC)Wvz#89RSlzHAhs zrS>y@^V1mW*lN0*YcbJgn-f#mE4=yI%Kd7Bf2v?vOWAQk-l->+4+szL;LSFQK~ZrG zm)nON+IMn)=l-E0!QEJE{8c%x&Zav{S0QU!DTpk9xeVBUFdH3sZdg{i=vyx(Vm^Uv z*n-dm{*7aRv`Gso4PocF1d@N>V^B@2>dS6G9lX%Vf!H!r?b_O&?dw{*B^znDl2q0E z#6Tps>Mea+9s`$OIamh332K%h;;AaIB4#(=P$S3B92^=DDnfbZPq(UHNot_SY7y>) z;J(=7Oghp08EmDJxXzuJ{S#=a;N%;miIG~Le@9=S>Zbx@E9Y8_s$YNCeJA(+yV(D) zjS|>(m3FsuuAfylyg?Vv%~=G6xN-fD^J1Cfsw4kP%j3T}sVfPp6}iObk|G(7hNn3j z6O-6~qw>{AG*ig31^nNxoZGsx$3>2NpL#juNo zj$>nOMR)j;lIG~@c0V|J3xTKAy{=SkiP|>=?c&u9AC}pBip<{y>mHN)WF5E%WA9vvc6Tb$H!wSmLQhL*qDviAL6`sDC zpj(7NqlX8U$u)lw=+;c`uMiIHD~I^&a_7hpyH8$oWjj8T4WK{z7$0fvAF|XrY%7gm zbkcm%i^?|2?XJ6)xEm^2JLa#ZZ5-IZ7lKkt$?sQFzmi47l8y ze=yc&dFV~zOB@{_^rd@0B{)wCa!9c)<7LuCXe_0`(@5(7sDHbH-lzN8;3%yYoMHKl z=E4nx*eHlI?Ob>BWXdOO8zg-oE`k|7GvCH067I*M|L%}PBAv;uW!ih7^Ug@F2IH-RB9dvKX+D#4xGZfyH0WrrERn$)iQMM!892@0gf(`IW^9rxx z-3fF`-SqlENlCC1u&f`MX5un+fZbw1k5yjjO8j^lY9`dL#e9j>2i3~c5R7&!_p>ZlCw+}5ep*W*d`lRaIf#q z73wVC&Z&o;+C>pbRF5Tk!J8a(sETAYz`b5f8}ng;hIh4*Oocr6-YTwuuV4DU(nh1$Fk3*>Bxtrvhlq^n8E_#0mJopN$?UIfPRzPOBL#vp((y5FBt6=kz zUqR9GK2{;cca|uAhDg6qrj88~_4+tiVvaOC^J?mwAMZ$)0lS1+?jU@@ls)cSg4Yjd zFfiSjGIHN5h(Sz?K&rb8h)5CHrB0aX-Wu(6-zS^sop9`AxJ}YfF~j>zpXgBBsxE(+ z;1JBp%U3~+cBMguyD(oc=*&ur4X!JK#WHt|#<2WLwaQ4@^KbTDq>&qaTa_be@2m^s z^h|wW&tQ=T93=PdrdP%o3~N1AcqJx=ZG6W(;}>2HM=Pjr%_8w}TesU=ce`UQllVI= z80za8)=regYsQGn3P5VSZ?w_Pr;vYkhAhcntd8ED!q|N6;>>A0HdfLYv)(8;3y0+b z^Y+Gt<>*yO)%GGw0T;z|_iE@X>JUO-8Jzx{Xksr)4zeg? zi`@}z??3l6Ig&43;A|)(wYv@k65!p`Y4ykjd_d=k&Lq`W+FVTL12fCYOSXRkP-EdW zqcv{y4Bg|&&FzRz#Hx&Qo|c#lEflC0pb%uC3bTxWdx_TQ-(pj?)n_}Go}7`(1N)=+ zJ4o6vQhsG0zD;F2@_j^$be{u-!B4dD$O>(l>&4s4?ziCkG>li^oLLlki=q$p>=mYI z@FzG@RdUkK#y`JQrV&>?N2Gs5+d_wYlA!k^5of68jptY5+82D*&`Oi#xsN-q-aqBJ z&mql#Wq;q*csvnqqf}sG8k!p4YG&Ias~}lnr&TQC5}jyfVJQj`|4p>t+tJSPAjYig zwzix_(KCRpu8$_-b||Q02%rrQkty(HUwmgHVFrz*0wp3jy1fA{WNCkTHh*P0`$tFo z*1Dpz6Od*k33XncZGo`AalwMH9>r%sxn^DdGTnPybI0L*I?{bYoWD2=^Esq8I2$x< z6)ClU6zRFmZN72-n49#gRd3e`t|uY5P(EFxQsGwu1(9q_&3?k1|H^K72a35rRs^QH z2iwr2Mwb0xAE0p*MFoG7R^mM;i#ef9i32OSggfS%v$coLaGRecP~q(JO`&KG(wUna zN>c*AX)Un%Q(*l*DwZ+hW1R$S9o^&*gY(ImLx>*pI=KIHh@y|CN@L7T1r0Y1rl-7L z-KaVmI{7Jekb<3u2^DjDYngm}oFiy#jAu15#Q(wLn%w39`I&!oHRugql|q%Z+s}E@ z@xL!D12~}3Kd5Q3vM*nb$v8KBuMFn#!)bhhe=Qy5iwo+gZTPiXEf;+Fj)~+jtj_$^ z81%-f6HH8~(yQ16d&8oH@z~sOc5`a|CM-xn?fz~4YS-PF-%-*FLW#c+7PsiZnq zH`_TFScFtcz8jxc$(}e!Ydhf;($cU>yjf^)MG9qZWOJ8iRsvlGFf=$cHkZj(0v-i0 zG&nRim+V#o#{)DlAeT|l0VjX$THA6HNfLe6SJdNfOxV?RuZkchf}4RE7>o@wFoYk3 z+}HxyGP*D@U%%&6b<5q7Y|P+&+1N0tzSSi&Pvyz1ZnUU`63Gjtgo;|IO6Z7NRv3?) zMp$o!3c@+u^upUHbR~i|LM0Kk8fYgHPBmIpXs07a(l`d8wD!VaNTYwWFc{uq4&!i4 zL72elFbl?WyiUSYJ`8MyTlleB*ns=i3a2WnA)F6UV18d!NV1pKYPF$kx{bxr z@$9$OH_1c)kPUv_25tX)4)3n&*U#U5s7Iy!lQSi>x!w*mg6j9bWl!3$Cwz}Rrus() z{rF-s8w6?8ttft}?e^7lL#la;48trVqVv14_v>`En={8QQiZ8@4SqF$D}$%V8oN$- zXVC^(XVs>Z%;>I2CslvQ4#{V4y)tRqUTz#46>nROdXRj|VpgoBO$TUL-r8 zr>|DOJ{U}F45vpPhC=1M+%E>uET;onJMWMs6IH^Qt29(M7}Ga>c^4@cnL4-0hVVKD zReG#iQB1HH(`q`yq_7*025(s)n7}sGjfCwfNZc#24lsXU!FVKikJRjAqO;)M;=X{W zj#XeW0D;4C?jmaqz=2{Rc;t8#0r`kF&SQ}v?n7jef_5AmMS(|6;#tiY+LH2-^E-$} z#&?{*g2z%hI?$0p@!@iR6bT@2ibHK=sw5I?3l?v`7m5-*wMkT+KX%FDTs9_m&)uq2 z)M2;ieQr%RV7e`!>Fm5RW8@HY26`4HV>75hg_vQhbP>~-3Ihl&uk(FS6?-SNZG}*0 zn72p-B!r%0b)~?5DXiXF*Z~3v{rA^}dgXI2la6HQ0gd;61?FuM5jKRLuy>_}{Stn+ zf*pb&aLOZ^|Nr|x^h;`Em?DgwxtZklq)PT_#A@y{Y^EcR?S}Wv3m|61kORqLp8|RS z9f76{;)gUws!gN~vxWQM6%LVu}cS1o38rQ){u;AdKGHp3C^-Q?8eY7)dY(SZMT5a z0LiYAyFdVANd{TTe5V0>a*r40}gH zxP*OOs8>D*^j*o&S2)5C8Rjh#LV=#JcO}E#5yHKK-7pBeq6gq^*LnvP0%mQ!b?LLx z&c<>_XC$`&<>yF08XnW!+`G8KDS}u7(ByN2IVn~ZoQQx)x**|yEHH^6N;w1%P-74= zu`mIDv37zDfiDpf7j()xc$o16p?IDMG=a$yCANVXvt8Qdz;u0o5Ltdx$Qm1gNp;vQMqL6k#vGV>6C5bz zTv<>NOV8wrWfhpJ=t2kzY(;Wl(p2Xz1C!6_O7xC!bt`mFhIw63pTt1u%UE5>uy=$! z*TTLoIWT#iR8MF#%U91=RD^kp1U^)5$TOPKGCQVN0`nd8@Xg;OHIA7k?V= zND9NtyYmsZYQZ>c{Dv2g>+#9yg6H>?)}r@jC-|z$-DBNd?@$iBl%2!{wANx1Nl<^E{AeB94!~Md?!b8G@VS(<*}^g zdwC+q@`IenGkGqja#|Wq&ue)hFY4KNdMsyhE*ElfI;(5B_-iUZ%dh_~*6od*IH`;pk(%nAGnV?fHz;%6H4jq+YBr z7){U4h8c;vbj`}i`qOea0XXl+`1ctw;bOX+0j!f*JzUf?c`8r8UYyqFKyO@nevlsl z{7HUVP8ap@yGc1I4~hP~J{uQ(=k;gIIUj$K z^T}|2+FKV(xhzvHkH___o{#5pd462a=A-GX#;W-uzskSm-}P+TTR!G{me1?wzwE#I zwOu|1!-RV=I-a!@+2>keXNRqSN)jlU|fQ( zf$ih9vG-{s`j*9yJr}y~apB`X|9G~4_|xIu;cIMg-FEM3>>PItKRE=})5>9Q^VOhQ54xjiE@{I|fCbGW>dB zI?Kc>)iacrm&-)!n;2?;wk(qenVz{&$R+y?g^;4J;f=0;T6WmV25U4h-OA-9T5k}X zY182k&qvea@%agyF@FCZfqu^SlW%n->%)bjw};gV3sh3y1_9Z; z!2m^K0YOAvP(TTP3K(t~0TdK=8wN+4%z~g^zFXu=-UI{O8_w(eLVXL7_Na&-So16U zz42_mAPK-N1Nn5=TqxxS@{jTH;&je$xw&cUZ+?W`%5>N1v&naTeO$G!k9A#r$Y`xT z@fP&iS{$#rNN=d*J1SwpUaAzB*qq^hB1J zpKRuYPpsZHd&GWWRS4jEJ vGCo_i$mC`fkddBEJUw7o-DJIO~L_GpU3eN8DUAvl>(1mC3Pbr8$q+G2A zoT5ts_k^=d>y^8TPh{F~98>emK4lb-Q3r1qnQ>1)bx>JrM25Kqn@SYNdsThMp=icO z%U+J>u}1IRDv0Nsg$LydNQ6p12Fnxp*cIkH!oMq4WZA+!rA|obNn?M&ZbgZVapl3o z&Ldk20s|^^x7VghCOir_c^tL)NUv4NPv`_^wiw5aNE5glJ*|JeHh7ydQqb_iJn zzl=t+9ay=ZEkA*x$Pj-%`Z2L&T}_MC$|+_zuqu zttNW}MCl=+xp8T(io$((>*jRliZ|CB6-5qvvp>wTh|Kdvj}DxW%D1j~;K8*_ByaMt zq}~SH6OQ7L)2Mp#)w_wqgqO;heThTjlRe3}=x>u-#Nkls6ik1%8I9nx@36TFb%r;~ z+6L=rUCgX=X`X|+v3T9MDJ)$n!No&D;*KZj1kPr{qo{`pCu)`7SzkOv49|<^ot-UD zVXZpz-Y~EYSHLV1dkAc!#FB@15e+1YHiyd=a9E?qqATB}Q*n8rDE3M`jJ*Sv_TVGl zDs_K{5uuGO!kK@SfO&Fy49BH~$tc9zxCN8~2_>)U5V9z{wdp$G9c)C;u_)%s%hp33 zawqJSIcQO>Vyb$O;kCA7VX7#~eg?xJla=0*te<);iTq0mZO&Q;Weo5Eppht zik(s^v13h(9Y4n26lM({v`xeCB9F3ihRK`}wWYjs!FO3%2+6X4_rvjE^r{?|!^8_t zqaakmHrB-*$P-Vz7FobR*j*;s&Pv2>OwO93=os-?)QjTU*~wN$M%tlr8Clj36w#UT zlOp$Fd_#{*mW#RGTT)?Qc%=4aV*AxjO+I`ary%I9^&@;Ru$1cYx z3QZR-> zcu7JZIC0S(fU&HMH?sqx=Q80i!WjUW(4H1>O3EF$Cmcm+6zLjIwz})p*Eo`sFV+zZLdm8|l- z3=DsfAiBU2k_d-<77(*J-ooq^7mXzhr_G9@Z2MyB-K;|%H}{7+5R~VmI&hGJ|3d{V zfgrEm1~$SI23-f~1m0I_iY*T>*Jd4LT1%5wO|dt+R`VF7w>vQm4IZW6M>GHpr9w(1}_-l{uQ2P~@UIKqEX2_+>Qim3$oSe!dBpM?Q@&s)qFFZ1fr zDvv!Z#}#_KVw2{gJzjYufX1vSqWX;&u{uFy1P(d&qM|S$#hH_lYYYtFG*GswSWsC! zF1fS=_k^RsN_d4m8S}miEZQCw`N}@O~-S)j+uV(h|9hId$^8a*cVKhzH^1pwy zFyWnJiwz)Jn8*xH7j}fdT)L?Qp3oNr!k!SjNEpQDUPcFC zRHz!?n&hWDfeVikH6o7a#k$YO4M~4%k9zEvWpmJ?G4XX2cFJ)N_~n^O#$Vt~@JCMp zqu1G&4OR5h>Cc^df0y~(9P;}9{_Xl+WpuZdf2?;o+^|+7#_Wn5W62@UHgZz9tU=*P z4)yhh^;*W$Jq5#Cqz@Jsp3MTLyE{%)E!W3B_6-;(FmWMuC=es|o<1lMmB$E>Yym^! z;k9N}GI2?6vPxhZEL=5^i%#Cnn7|R3_5jQyM5+xel|Ug?14|o&(;5=o9gT+q3P^;2 zsDP_P>8l!o9!oEuh1DEOoT+~_7jzw&L3oohfwEc@ydCXBDq?Up#O6*BgVb2MO;MK4 z`WOH+VTz}n;-0XU>WAbi!cq9x<~I@=!&d@<+}WoLLTli}`zFHxFH6=$S=3nJZ`hPg zvQOj)VI$XM8|4_pXL6mVqrEB^#+?|j88F_dBx1DeIK0ENR@uN#fRBHof#^?!0k?pn zgu0=6Y!zoMA0DCT23kRMT?M1O;Y-2BZ<`GkA9_nhK%$AfM?YIMFMUuU!ZWXL73Fl}6rF&|6 zRDLDkC9dkRBKv^hP|Sa%C{hilwFh9w4kwyGPLMH|Qo!y;3<3)n*);aYY?%{Z7V{k$j*y;; zwI9l;9EbEn8I@4V@lb}Wp0Y*C8XdQ|Y+YaFhzevfBX9@pKg ztV4!-DlD%kvKoKM;@A3`3i)MbEZ_2sFXVl->6vbzQf`T>*e)4aOVP#3?7dXJ3Z+P{DN1D4_q1ebYMjOO=uL8 z6TDj`5t5pfDB?yohniv(0YxBPixu8P;@DIHb9wnpu~@a<_lC*W6h1?4C?2xHk_O@3k_?qnUP12>PT{LOgr>gJ7D6XkJSo-!#7?(h;#7Dgxp|5MYbF3y*IbLm<)+v89e!687 z(?1evX&p=7*rGYJvI9(>N(^$nTRsyaI zQ`Hn@-&_JlQ|}br0+SJR837ZMD|A+W{Q^!=oYL-%qSpyirF+W1oJaVY&*b0bv+~Y< zf9H`pL7C_Gt2UeiMkLZrp5TC?OgT56epCgMy`f}_7OaVij=QdRE=0~rUtmF@zH^)$ zb$%2`G%r=YD3B2^R~7@JnY7APi30NAy7y)RrTa=f)Y#+aBidEwaN)IL?7$>{HSP~q z6tIc1mXof07U9J6ER`^f&(k3RN1Q~QRXjBOjive=MZA7~h&jwWyr$R*fZh&0Bf|nq zLzNK50_dFLfj57+s<7H&#AuBn9e~~8pw9&2@s`-CiWO--he@`gh*d$V=I9C7apEIY zQLG6A@}?7{<-^!Y?M1c1sjNAF-iGl(FPi!2@apVzCyxMF9JH#0Fr1tnNO7##if&oL zgb$nc#hf%t^;%*n;FfTdSR7x+`kBNMC7_Lk^vXWJH)7`K@3M9#3=HP?Z@0`LhDdl6 zE90=bhv?yYOu;%~3wkzT1ixWJ@x}!LD05326+PLJ_cXRrXMzOt<#s~( zHUW{#HINzVnh7K{&^W-|>yWsJjC&K4&^g#hI)S}`V|m$m$gW#1Z6^eRdIlb*{GqQ^s{>w}BmFeBF*A$6>dm6J*<(+^Hy8eRBPv zsKyDr*K-1~>WHIe01=X+66?{y^K~~)2sVn51KQZkfhuaBOc$qn4)ccQtJ!l)B<{dH z;V3H^E~R`fD>2M<28b7w4ti)2-&cqXX*sbdVDz4Lwa2H z#Rsl9qYnANRlz%CK9IueQ|`KLlU;Wjf4URY7ULdh_@bARU%>)TIqpHaqW>k-`ku`} zirrueI{UI4B=tU^xl-@%^MGdmejm`>-@m=SS0|0h#{4b?YxnEvEy-*^p5$(rC{I{> zy~Dx{!(A`$lXfl$w-66p`|&c^CsmH;LILX^gFm9J)9)IHCszV_8XS5&f9I@g3dYVQ zjwSdBtaSmC|92yQS#`uqq@uFhkH@MCC_>EVYS)2(o4OeFcn-3H#O%$fIwAnJ zuA4J*_<8D}h=X0VtbM)|6eY{T7qZd~l4eB4r3bh|t%edkcEp`kR&_b-L}kZ&aa(|3O(Go$A3 z{#X3&zx|K@`qLjpWBu`m|NQO0{>Q)k@Vnpt?*I7#Ps8~i@ll=sG3Ne%{P55J_=n$r z{OPy9`iC@SA`6!*BooH^2MtZ)9Kf-TzFZjjR8W z?Eq`eYBpv?ANw)cF3N6Bbo(o>-Nbl*gB9Jg>%5W6vi`{Gx$t!4{P$0Cva9%~ogQKI zWMlTcb0-KHcSlYQg~;lgKUrU~d%{26m3uC`E#km=e!iDa!n=viJ89#_qRiD3H-sW; zc2JiDS*p*VabC!_bwkM>Lxg}#aSPT{e^m3a!;rmJv{)qMSS}*VcNp=-aSLsKzzWu} zPF0PEn@uK@1;amOt>wLSSq@{u$%g)32m_q=?*YTa9#rw%(-N%FC|)Eaugz6ugO7yx zwJM7{tSXw2f{9j;Ij=HcJepx_@61cXa$}{)iQd8+1&dscMU;Ha1-?UEH@V22%~w!d z5Y*?{7V|rHjgQLC5f8cHj_6Dd`|Pvq=BF@!l8fs5NzE@DkG9XGP?gQLXq|WN*D4}PeyL5` zXMVorOnKc9Zl8N4uxZ?h@G6og;9G9bFu~K>mfgz+F&FPu{xF_MYdQgce-o*w?*uI7 z*~?BpM!fZ@O0n?}1uCihnWxqwA60&qp?=6uSlFcV<0gdnb9?^b!LsOjRhiJd@KfJM zaHOW_v=JLAsr;?+c(v;MxLqo$7dfJ??C!VxxUMQ9P*r{$NaKip&rfu1jKfrZ?vbOa zZ@@jEe9+%VdbGX48Qr*R%B<+5*vI*Lm@+E}L`o|6;~X;a zMi8^*J8^z)$l@?R|8#xsU3S@R&n*%}mbSQmroD%K%tl2-6-NI-iBeVmGQ2P)m7my;JgnUFH>?4FvZmj$3hRn~;4YR+ zzb(Hk;z?=!#1 zHTKy2zwfVp-oFzgGG$e+bS>dMb-CH0FRymH`f-kbhxdLwj0#)LvAlBA94HF>@HOs{Enrofvn8#J=eGQ{xM@3X`g zN5}GJR$^9v#2;UI?n`G&%BlX>Y|_bd3A1@*@P;iJ61;1J5+p@ zEsDL%CYzIF9mdk1G|+?EM=kWdmMB{fesKW*yEXV;li;Ug@{xgEV%^w11G9#(6N@Mg zNS>nZeF@yB$Ccat?`8Y;J`V3}zupJ)d-5fF-bwv`EVb||>%Q_D1zzQSe~=-caehhI zoAdLG{j8a`Y_CyvuHR13sNaF$V+bm)uk`=F`1v(~GHNh7?N!`6p+BQ*jBLh$zF1H+ z&-E~9F6P$!`h2jeyhf=8&1a#PH2b7UR6e_74oAxy@wX~k>FXc$&wJ~^x(sNAnnXNs(C5dox-L!l;=eJkRB6_`SpYNQBIN#s> z@=EK3+L%M-LU342REsAfUI1E!zK^|Of8LmQg zhkhaBEOI>ixij|MW=eOd<+qfpMOztu1UKdzuFT%^KRDk~$9@lMm)Aw!bqe(7%BO+n?2EDb|bq*9od> zRZlR`?)^Jt@u;LS*_b@UOF*SEgHIotcbP|7$tFT{$IBc+9g~e;i3T#C=ct<&~6L%P3q02(#>8F;`J8z8 z@(x*Ss`O3I`#8r{hL`mEEMw_;fv4)V`>q&^ZNyC5K@ZmU9A*oCCFfOtY9bcilU0Yu zin|R(`tk~YXZ2FU-$C)o>YhWl;s-gdQrd`+Vzi=nY;~fVwNneX+fipR8}dt8SHVO3 zJqRDtM0=|5X}?@)86yfc9;U8t$RC})Z%kj-KYw2CS$0lI6#P}~RC1ggvuSuN(-TDu zo$lXJ_gF&yI&95$le}B0?5NkBn*4AtxzT*|l+Iy}x36Sf<;w2uEc|e(ypTty99OXRd-MHHTe9I4Afb!E$pE!zmjzo9C>niY)gWWme4eRx3b~Hxa}RZ62~LF zGsP}zZ&Zsi-+O}r|DL1cPw;&7A2 zUy-NhA=sf~zIq7u=MKgX4#AF8KRyK8sh$qOzA$`s=1&j7)BsjzNT0Nf&S-b?iRdSX zV8+nX8SF!Uu)hRfGv9Tt_0jNBhhVdftwXR?hy4)jIF@cj?2xDr!QwjFx-(r$knDMU zTI$l5GQJjz%7dix96f78A9>MDjMZeMrMgS9<}*@mBIyvmf_9`E(eZP<9-jt2LC&S=BgW%D1jp~|7!@S_}8DX|bg zz-U8EkiDylwfjKLY(tg9YQryNyvjt~>3eg`HtY_6R6C>dXzkF3--be?r6ZTJ1% zaL91gaXtO;yeg66zp4w}**{x;tbDs(a_6&jp*!7NOp?y~nJ)BB^SH`>%Ko*uPxcL6 z=(Fa3+VfeWKb=T^tarSTJm^A;bwd~WEAsTzg$^C~RbA-M9gH97Lg_^HV_j&cdeViy zFno39Pjw+RfR!roNz3Srb|;^RexeH*Lr-V0b)mlmUo+pO-h4E?lrA*e*wTeo9d=#l zIF{~p?U1N-p|n(-JCkvC^tGJduAJ9};GOe-J~>M3LhzaN%PZ-=5WJFZ#I4~x5#KNV z_hjor@QYcmLbEUL!=r^-ZbmDvTZ&?|ik_9?JEmS3LjL*~cT6Lex9jI}8c)(WuiP-W z$Mt?M=SsXag?EChy;KIXzrT`m7W%pnoDF-Qx~6p@_+E*rbG$(on<{gk1hw>87lM05?kl{r{L$(2Alj9N zvb`<@zn*)Royt?v@FF$!$?=H)t7Hm)C-XhD_=d{vMv2girE3(y4qOUGS!{pC#$rcF z%je{+vSgAGJ5r%~j`(Chmlb5UgHm%AkAaqbyf3^Fr|4JM%(t<8EHz*}bE(*dzTb zSy#cY3&DeAofm=!$vQ6t_ln$Cc!p$E>9?%Bczaw3em(bHwkV>tJ{3FyzTF&W$3>JL zYD5h6&jlTnpQzaLN!p2g?EOuDioca5%t;Sw6tQnyG0G~U4-gk?M-|-XIICU-Ur^E{ z3Wdj&r^5a!Yo=aTc<(eHJ*9G37lL2SdzXA)2;Oo%z#KFg1YHA<`!;qchr_d?NbEDVQ@UIB%y%7Z zeKfq(DcEdd>lAF&VLt_bJC3DW6FVeYFJQlz^|ct>Phe-(^*&V+WmjElnTZ#sFl=jo z$HWU$qN^n(g^?W&F3FDN6#VgF-?L$G=pFL8ocks0hM9+Z@8z64J3Klz<&bUB#>T235#Gnoum`m<01`}8?wFtUfWwV(b5oRoZU>8lQCS781_=0R^i86?M z#mm12;)#B5)d!Hb-NcMkKu>=aY13CF7zE0`IF zphrf?+-?+eWQ>qqIOL>Hf8EjgK5Nx_IpGwwB?FgH7r2!{lY-C?cgTw}IM<05MWM%!`Tv0$fQ17%Jn z9uwWbDb_?O9=h_L5D0}#w*Vqm@^0A$!e@|+||;d z)*PS8s4`0=luUotVM?c1L}tI27%or0BfWQ7Uk)WUU%H49v&0@=9z6F}<4`gcuR9=k zCnM}If<#`G5rEui6{6CX@d`r$YjfULi^o7vpnNKkWA(Q|B=SaN?UHvyHY!!uAr<14 zA8MU{9Z|r&E=oEy*6vLn^Vq8$iV{g3!>Ju{5K8b*l~7Yj@h}L2{H#NVFnAz%TH|76 z2X=?smTLBl$P4+96)RENq7nR4C3qUX=q@3yi%97=fzY$_S~Tv!J>e)C3lZzv=b|xT zgF3TM(I|{XE}thE4vWLm__|O@3MSoNDmN<}Z?L#TV@&uW-eDpdMa&ngv`+LNE?REb z{at=}lYosDf0rl?ITOutCQL*S-h*yHKf=pYvjvHMT!vuWfmr7DXtv?-DMVO61xy6n zZn|<)MtiP+q6Ts?jq76*C@AlpZWXL@h=r;WO6gKT-D4tSTgs1~UcxuYAPwEDb@#Cl zQc3~4sPysCjvMnLPXZE0v4SX-9gbHNU$O5}G${r`e|bJ@J%OT8hsPk<>JTCkzKgB{ z9_ho-LX8p$Q1c|bgmWB`g>?eqHeAp>LtuyKqMkEB6u&yQ2|IIDL|czGb0YOb;vayG zfQrEcM&}9Or^h4y(+QYqwPTbXaG~j*lchG*63m`kf^!G%2}g-4yVc^VxmCU-Y9=BO z%wO53f28%b4z*+Z-h2|xIj`@xOq4ZhC>3|H#3@NrjS&T|;htZ?L~!?9Etu>fJ-)Ht zxjjMwKw(iftI-6?q$p!-??A$7^su)|e_C=5JC$%KvCIA{RJ%mc!d_e8t@5H| zBCevM7+e(bk(xzOwocb8TLo+)Q;IoMf`E!Y)PZQRGXI_>HtCn8T%{yJz8p%Fl?{FJ zt;FtDi8-}AwwF6F6E(1y9W0t-Aaav#wJHKPW~V8lIl0H^+bN1Lbk*r$9dP=evN^1y ze{+O*NeakmxEq>+0hB&$!+K_`LnO*>2~|@hgj1}+q!?t!lAawn<=_<=NGIHK@U5t# z6OIB>Rsz|4eI_7F!3e9)?Duz`t2+)Qw(pIuXZ+sZZ%HR(r?FSPizNzUn^RDB+r(B= zFqTq+av3ljlH|z2&xRwykQ?va4505xlMj$qe|yP9&JaS?z+Q^%PQ%u+YZA*&IrOf_ z0LRkJS91^qLVkLeHBcmCekCn=VQ=Y%RLIfmc!Jv#vM|lx?zXWReApGSS<3gSi2tW4hOU ze^#$ev5dk}ogQ5@JOPU|Md=e^(d=tkr)$k#cfgX8D&ZD}Z$%ZIaFmjw8Hm33CM6@$ z-9$>xiaylHE4xx7x9>7uLq{ZR-ggJu=YQ&!S$ zl_tbF#Dm!EMr282N`<2W6-T8 z8#KbSX&z;DDVach#^{P%ub-Nm6+EY;2T>H6>TtWgGyk_n`r}-I1?@3j|8^#nHuk`K zQ8FM|*iGi=g0KVkgwskvoY*dFz-Rije`sk*M$Dak9^uwpX`e}kEpnVAO;+|qPfgf; zun^+7rrN*ryph{MRgRZ^q^nPU-wX1DAj9>N0%A!lX&dlyL|O^y84f_vVv6YKR*5{E zVzw(FPoa7-+eDVEj`e{CRyOWEn?TW$DpBPWu%%8!ce9S7Ec)6Gz@A}tZ=6+Pf3Kn( zic-AylZb2CEvBdwMC6v#{UITHhOtgSb#hLR5mbP2=%W&n&m)?oPGGLMqUtGJ?tLOw9L-1>g2ejFk&&$s+CZ!+F9 z_x#L%8Tz^a@46_#4@Q>~DWhjJ>LJHHgxVTHXni?+Z2nbs_J{dbl>sI##C*F_UmVK!#EcIM<#~FRZ&<~?kmkN& z_xBpHlu_TQ8@E(@G4k1GhQ?bl6DAsoXlzNtu+vK2;?BF8h(N7yGTd=56s_`zbWcc2 z#s4^r5aFW}2rS*>0THlA6YvKf;)t4IHmwYP`Q_aK*kw&glfIN1e=QzGBQ9eN*(tJK z`X>)J#fI^BYbHfmyDNI|PEoeHGC&_gWF~Mqh#y{^AoKb(2(j|a=`ftoQDe`}YFSJG zJn@1RMJz#x1*Is;prALb>Z0AtEY+PX^6<6kv{-4f>+p|>If31c$IDiUqQuLLNKFAn ziLVWtn>U~@3n*Gue?AN=V(tc*lN;y! z&OOP=WJybwWsU_j8!{ke``7XY%nw=CS{S{s0mqeFs%D8{f4Cjk8-#>{FOQ}v;-uj9 z1mR3kGzsigH857em1x$1_n)~PfZR5vY?p}jYf+s|f=r4KgHEX3T{CtoN;aG+j5&Vf zF`zZqt~)l29myl%HBj6`9Ld~ENdsl+5b4&<5^-?rd{K1>sfiHqdaTG=nOPLA=9226 zyk!l{cQm2 zDegpZ;>LTY$E`Irvj}=oJ^WDHcZ!~K0k$|hMUkpK)ERdmY*mkWzUW4I0SQ z%Fb=AR+j*kZ4YOo3YhRx(5uNRH>%k7Dxh?N8?xF0VifH3c*k2xb#5O^tB&|(Z$%G6 znI@iCKW2$twB~vkYtq)jYpE(hh7l+5Nfjm1e@-UJV`^& z`f?~S1{qGpE^*3H1>6#j0ydRO9M{hTY-WcMXZE?59;Q!0eV1v9cD}yfl9e+$6pOo9 zQ8i*(du*9Ak^RjMYqHB`@J|?1cEXxyD?9_)VQsABX@f2Gl>3<;6s#w%fvQ!ScQ}Qq zAz9%(hhM%p8^}#J2Qyo1Vd$E;_*WEhvZPsgsHZ98%2ktbm==G=p`!wFx0r&-s{HEF z>Asbg91kAM5@lH(L0VO-H4*Ez94arY5uY8r^j>y( z$*e;N<94~II&kXNYSCj*-(4vtd#C}7pW;$+41-M zXcf^C>YB9p4orXJ6m+ME=jzxGJn~8rqcf{=y+m2f4(;3 zsRS-(O4PDLCP8&L7BJdzTq(4wdoD_~u?sYLoML$g?g>YE&CaW|qdCS&A-=M&Gfv*k z#6?CXk$Z^kf=o;cc1z00n&1^Vwpdv28srG;+c1#aabAD+mpp#8figXlj~a+X94Ccu zz`6vYBn&4OTMb?ZJmHX#MDm8(by3XBShL9^<~s?+X$KO@n5PmJ5SxKsod(Kg1>X-Q zP&Qf>TM1PM5qPnm5_r4VysovV-gw@MI)V6Mx$EY@2+@^pHU~!T!vlu`1`I{LIYxbp#uUpDbDTy%n_7lRls|oRTMWd zV*%fRO_m^6&6zl?=}Rjb*j?(i1rx~Lb*!^n9dII-MBP;sBR68>%3)IMwYRl{=eTE_ zhVB%nz}hM92}eoB>z{slpYV9`#Stb;p`Y2;)*gQsWo?n+-f;~MERDxPaKq+NWyPvW zk(0j2fj!BYTrVy)ww^moJ`RoU45MXZ^j)#x13T)h33~F^Y*S1$DUxvqCRv8ZL6`yL zdSi(G9XPfj(FWFz*?Z7+5S9D2)!8XFjKfQObg^h1H7u!=vE@GiWgv*oV0Nm=gEV3% z?5rq=;#RzScIy&nJ(WXIfp=;CgQCJPyDl0ie_YGa1V*CDI;UAlzRRbREt^MwPN}j3 z_k^Rk5w+2UH*0^HN8>5!o8nYj!p`x|et)mjHXpth97e_U{ijR*h}cWMZ~4)f_?g#t zb?Y5Cgb}4 z?e)F7(8sOaU5e*6x8Jae7Z!GZeLGCH`l04`SfAXrBJ()~1(P*UB#yUA>(YBef!&z* zB5U2)?(PXP6fqE11<9HdUbiV{21O;rxq#C^QJ-om-C|MXFrum+fYdElvqYBIA;9-K z$f7PPZ_yO1h?ZyL@2oUYyj;?K>KiA>d*v4pTc{onC5kj{5oZKO9b~tE(nL(_eh3WR z_~_V4kzG{`&SYg6K?dD{qNs}Q<;@P1c~_l_daPhcD=mFsC5tdF)n=vSf;q1SVns7_ zIRjX0ELg)Uph#;s4ilfi2dgq2T=#l*$;JaKAaiCe&N;^;lS4+KEtS;%a0ad~j z&QHPBc}00L9esHO{^gZK9f>hS%9Z^tgDv5>wYbTkMI}E)jVwt+rP^SXQ^OuCSPRTZ zw_x||aIZb%At7?@tNCNQD^nvsOKP#j2@J%4epFxrlQx|{M!4jjXsv~pc6%Md(1nZc za9q0(?80J&JFbX>VFe_XR#L1yfSrd$O#@|f)rlTr0dbQ>L=shp#3}2E6`qQe$7tp} z!G(vDyq!LOoKk29?g=OHBn>CB>toB+hj_ZPPw|vr@l_@nX|~+c6i-;hx1wNG>Vw;W zcUYb(4f}kNDLbsE*138yO7r;RAr#(@^XO|lY_fm>A4gSJkLd8M-X>6n0PCLy=HcQ! zSv5p|3EAnEk)@wHII~1qGomYA0~<%HIh()^t0IVhCvb`s9D!ur+H4Y8QZ0%+&BX1E z24brdMV~e*k0@$6Ck>3*j|cQtiHYsE54sNADByZTQ7psltxd7X66C$^dCr7eb!N|V z1=u(`P{1yn#8$1!^SZNgA+`fqU`5?BJ8({C1>6(P^PDGuwt4ZK=i`EKW?%E1@F#JR zVd<-Xv;C`xO0NDVZ0&@wepTdZPa>JCMXqy1I7Z|OI+-Ejk@C}!+=l3fR$5c(mCH=s!1 zv8%Iy#O3s^XjVjf8P56?#m2NHo&sQ)MHw-7euf*s6)ZRwl&R)?44!* z~ijCf^35|ke|;%v;(mZ3|$Xf*@oausws+?e#mTp zPZmW{_~NxtZWO)Dg4Xmzn9kZPic1`Bz&+t8Cq>!k@a!`=S^LVi$V#gn$44hbU2@%ptFgk2qnY>$$#v;^w|9>Da;`F0hQqp20dvEDvtluUvPrGDZBsy*W;nJrfjzik8?S&o>j`Bq zu`Tg5+*t($lx$(d88b=@f!EdL02HN?cg-d+k1#TNK*&}HcYxUhigrTeDGe;R0x8|B zW5F0X=^=w7QnoIdV&kYj*mb}*v_DvVs8FKj`F&Kca~1Y%L%eN3;X?LG&aAwD=z#Lm zAAr8dV2tKGia2~0omB%x@oLY0*h`$EV+ZaDN0}mmT=b7mkASd3W};l#=V1*S?FX6p zJ&7(vzuez{y1rvB$?)IucOp{K^ILvAEjo6dI{+`&jT(1Y)@{-G%;&t|QStF^KE^+yCr@lBLl<#<0X7e}; zaWZ-R4Qrfpd9PricQ#Ho4H&g7xT&4EnUffzK7Z^SUfFvdg(-?1gNmZtUp57B|7Ja>Vc4qXk-KXAby>B>=W`urEIUO!xA34;Q5;jx2a`wK=DBvD$e~QH z2j&^7_0Svv6UbikR#aL*nK&UiO))pwE~KO>7B03zHk(7*s^(KW@-#es(2iIp<(d>L zGJgaL7PX2ZZbM~0nXKSPPd2kf0|WkVTQz}G_UyntVXeatu_T)!A@}h*EZI@FOPblI zKw|UCao7I6yE=sL{r%!eG&`4Q@4Hxz8G5*3vMMCp%k1RZ@BysJ5sCwg(|2;SX*l4- zG3^c`7B5fh3@+qX>s%=8I4`?Zo}8M%Fn=7G7Y$_3jeU{@j8zutq&XE%YUZNbs38pX zd}39UOdRN#C1%u^6RYFS>4Yl>4S&cu6s^2#!yl-doGkbyyR$BS`uX@Crwc{=85YKl_|?iBZgqj)47Rr}bhvSgn}#8>vI zm$70oYHl)I1jo5{Rt8NA3MM1XVSgR*4x8)XP`^UdIN1{o6HKc-+?sXFQxy;>BdqjLBR;^m(PCfYyjz<*U@B4kAL z8psLwI2klbl-}X=O9PASW(nD8l~^Nhkq#x+;dRq4v198TbR98n;Pv7ID7tZXOE!p3 zF^+L|pvO|wnccxT#PEx-cQDR1rRBO#xZODDgj;C5@ep*vQJNIqX?^U1xDbAMy!4*g zr&y@$X!9b&F{O)3+vzQ{{eReCxGXB@k8iNqA03C@y=vHaALOjk{CLO}v%(Ee!|7Su z_wu;S#MR>h&V(*n8LQ1sF)@VGPI0l4aZoI+sVEj6r}v^0M7`(8R2PK~WL5^N?iQ9UiT)^NvnTASs(MM14L~s!R`PyCn%nZ6}Ia+7CoYZZ0307Y*Gw3 zPjp@bW#Ba4gIPe?16OxqCCjYB5tpJUYf&C|o(9EQE3a=fP=9tuxwf|sl4-KEZK8tU z#Bc`^X^%i51BWlfmh5Tk9uYGF?zG zj|oYkG0r%dqZ|Xa0}$1U@&5*VoHO7G3*oZ^$8c>Mr?IU$j7z)rsNqaVtmauKM4Zx~ zSndf4*IzXq5`S=rkPc-?n=>bLLLt^pj5>kP1iTAX^%ODShe|#>*5$ZH3#)M^B8LWI z*_8K|U0uRG5Kf;JD;SaD%zvlIJa=OUbnYvuG8ag?4%lz>RGP)g@R5XvPz59kOX=MN zifT?LXdsVt#$k~G6fKGqe^q(h0n4JL$J_97TAux|Q8OgeVatcgXCAaiyYjLE#G3SY zlzk|!mAy{DPi>8Qbcsm97A$HWMA$m~>RCOojD&Nx}5{|x#QCB%p+dq;%nX5Sdnc&_e~E?jtAH5&UI=dQ8F}E6A$U1>%yEQpoRN?(!-lxIivMOYk9)Fd4oVdghXU}Rb5q~icA@a@& z)+W`(peS-aD{D-&Sm9!?mZEzOe<{gVv*)mK?mjln%92h`ia{qF#a71;5nc(rSV=)Aa7&(1Z1$pL@8I_(yYO;3 zjho-^^*(dYw(^f*mZy_Cs%d|~iXY-f9bUjSe_Ls+qq_2a>`c0*NbI@hg2jq-fwcFb zA9zaGgWV4zx7!G>yR(8>7!edTMJY>GE}IqEnaGY)S1#aDC^tQbxZ0Op?;#z7fCCk7urk#>5xFYJu|HB|#!BK(uxr5&4!-gF&0c8)Hq1lgXXaf+rBWB{>1PQOW!UAIn< z9knnK4+)7_DhE=sLyh&&`$Q!q2ag9i(dmskpjlS^(ajq!+!@L0;B#768LXP4OVI$QPV;cgC>U=}c9ev2E7y}5Be z)wpumDb65a7R4zmci^6I6r!?a6^1@FFTBD@-r1Kv`U)qxeJ59Lm1u=W4tr0wC@AyX=;KJ8H$2AF=6&klO%6qja1MDFmi9via5tVOYWMbr=d= z#i(7Ek$rHy^i_yF%;20(z#L45gHFJ&;9JG_-S+G_(RoG)uooAH9CxS3)#(Y}SIuds zm0SpVGrNfHf)#J#azmJw#o<+|&ikrJCm8GV2M{zi0v9Qv^6Y=}%T9UDN#LgCGoM&MzO_mwl@+be-L-t3qjHFhBgaewDnjl1QTQ)|W7O1U;J zuRqjJ%Cy|Qv%kLQX}PPuUzWS``?uG3yrW9WDwgN`*Gp_kZX#H5)wYx4@Sypq$jO?- z6FG|l%$j}l zCXiOgdPM;{Q7&`ZfN=r)*z~FH#XD3eRSzRkAviJUswf#mIC_Z|k2su?^~h-;PZVn1 zd3*pXZm@L+GAU{bW(Q(BHy&LoU>0#(oHK#4qxT%|smfO;x^gt{Uvlo3K8RvDRqCp#SbxWhm*he{JdHxe(s(h8`DwwEk9~tMfu+H zi$wP?EolRA#2d!(%#PsVHHusrUCX40W3Nj>VAdG1vER*Y|{P`2xzpf#0(a}YE#4UrS(S$Se-MLl zKjvZe8Yt@`H#!#UcseCAie?2j<#+>C6uDLsb;)EUnq#r2$Um#tdK#KwQy3CQL+ z6^q9amo@}FNHCWr&Vr_h1BtO71Q@L37?b#~E`OYY#9@a%fxV5GrV5CUJ6z>k&4Jth zMC4Wt#Isy6dxqDs@ib?+3wN&RS`SworR$bo@^j~5Pgu+2L$p$J(R)8!9veGh-P7oD%I6mJg;nJ{Ug{%++ zI)BG6fkMPMjMy}S^RIF5uqP1D*7*Y>69MU!gy@gyqHM`vRr9)-%+bN=_g0?lu)oU*RE_pGvFVzK;M#77QX zJ4-9wId14|J`JTIz8}qW$~Th#>ASzdNDZC*hkAxv=tRJaJMsS9P)X>n>+?_7XB=ieKHs^q53h;{ zE}cbn-9O`Kbp*%Rzk3)>d4B))s_hy(cXj=!?#qStA;UF=9}QJ7ifviXV4dd%ud^sl zt9;ELX~B=_cIRHLT(L+dK3u*N=V!d=^*BFYlZw}Zm=oWme2TZfbW%Bg6ZIM-J4exV z-$CsL;W%Ez-VSQ5a|U6Qggb-a!_GA?A6jgACq|s};TPe|f{%_+QC*SCBGyH@QRGC4 zC8~|V91Yr7n0Hvgu}SL|7nKL52bid%nNYDtX?P7wuI|i-VONmrP7bGBkyEBK7ett; zr8Wh_s)`t7XD&i41aee=%!lDsBUyD0DPgXlnZ!I)cHmZNvM~&tZtSpvJ{_A?nkdJ_ z^HVV5O5}ZbtkN2L+}u_HB3WIo*rME0LjpHxbzr$+|UVMCUEp zEaEYt35&IV9!KB!wpZU{?PV1*=L+7QaP2&6KoGPvVV*?S6gfhf6TfFC#}19FlXG2U z1MRW*)G%QVA87_m6uO4V*Ukk_sbkROa^fn%BsWYpbU%2!1NRc&VSS04-icDGU?M34 z;Y5tmc;QEo&K=f&i5((h#e#|Ej1b%E%#mtBVsGTQ?rbGRgPbsk%K+6>A>orUTTO+# z%9tL*?1ssB6$L&UO*KN=cil1gSQ{q0MrmEtSr)#n&JpuNQ3%xcka-8DdL(it%a-R{ z%$(3WZ2Nwk=ws8L^)=bsM91F-eh{zRbI!`%sf$u{f4<6p?J}^4_N_472ne;)sV$C29eaM>IoAjMJAe1GvK6=I4|sm_vX*T5gC8$_6+b+FOK6ez_iwMp zpWS%(6^FRaXa6FoGu*wLhNEsLGg(G3J_Cm%Q5nyiTx!;q)Gxsj0e z``)bY_Y+k`EeTWXLxZt`5^T*W}#2Sb()Ih8x>J0quH~e60^MPc_PxsRh-T11nle%<2{U+kM?+H8{YB3wo{b-cEK-? zPT+kKN`^`p`--4PS0vCMAyW(M*n?$m|$ad^!P767^69=d>jp%8U9QQbX&1;;Z zFN;R>p?Z>Z_FX;ES?=#sJ=wqCYRLWlSLg4BdXkpzuw|S)@9DdGl9qaMXL(akG>N62 z9P0c1MBz48l<=8yeP{CU)OmitxM=J#YJOCtVoEzr^a2Sy}@=-U=Bd7iZDs(Z}ton3d)i}3f|HLwt`+&LRq zJMrNUz)oEIY64~FQ#ig>%`H;YmD+WJ=w>(s(?yAR9iIN)i<-heIG$`Z-JCoe_IQLf zc*G<`R0FSAA!2#Q=ulCN!zr;@Ymwl?>$CJ@dJH=eh^Q4JZQ-uOPZ|IBra_nU#xN65<+quR|2=E8vM#QN&0S zn+S{I?O;PuoTB=TV%7;u+jvTG=>wT2T8cl;67r92xWRNY`}|IfQ{U8gj_0Ha;!61G z78JxHK@WaIq~Qrl|FS!+e5Ra{{*{sCMBIYzO z3X9x6Tfo9SZauI%{GqpE0y{@uRri7CJ`PLqH=ye`FgSdyGIlm#kQVD>VK|o<#=DrP z8z=AvaO_46VCb&k4p0HPUF7u40umz{hp-CBZyf7dK;n}-uSeQ&PDHF=MX_`2nS#}7 z_@Qq@=h=WP@7QyHTCB+UlCd2QKwNxacy9sc9Df5gov;MvWBM17E-9MR|Cd+x+qK7? zea<}33icr53EtY*1QQwWv&PA8jDYNI1GY86xJju&14q!g>K;H}ZiD?Xk1$lF{dXW9 z?i1UiH{fDb>Ww>74a}T!`C^txpqCyFCDw#q8cm?+iK6v?9ZDn$9$pSCU@xLMxO4y# z<hQdu|)M75C(%VH; zH3j35i)RmZhIQNqA&76-TGVCkpjmG8h%H6zzl~sd$Q&GidQCC0J?2Plrzq&gdl`d8 z5n?@z!_FPZ1CntTX8=pducONySXf+&*(jdv5>IP?RULZb0?KQOz2FA1SrmgTy{$S8 z6a^?@uWU7E;H5;0Sp%`H<`K13;;@={j-x4T5)W&OPDm)#Y)|&05@D;u&f_X7l~;67 z4Qz$`QxhmtBV)p?fSH5(Xag}NbEoE%O+if`G$(#v$BMXBo=Dv-_NXZG-pP%v?3tB_ zQT8~0lvF?|i0Et-d%ZwWX1*1FnnN1Ki(#nL?%x zjeYx0FA@|-5t7ysG2IUcJnD@*D3yQA7F}%Bis5BverPq7#Q;w?}+p^moR%N2?TDSIN-`I8b z$G)-8*VA|E{r!GDt-fEcr|0)?ukY0(r0RnyQIYRuli1G$H1vvG$8zgg%ta1=O78I; za>Y%q*}^*llkPZTpuQA>Gap`bUXcw+1BXlhN5WnrE~xO}wAX-bVd|`cDxn}Sye?{g z7#wtG@`%YYKHU^hHgCzbX7Y$4h>Q506?~DG>@~%JZ8CmP7DXNpEZ}fT>vTJd*6A@{ zwCWI$9AkH}1ErO*H@E75ky^)GLIJakM`EvAC5p0zJ1`BDZfN`=NIrpUT4j9O_Cw_h4ozdx36jVQl#6G*>OV74PS!_$Z);*}G4;}PJL5(n zj_Wt0#3qgAp1_&Va73!dN?>;~w&`=uNGnypW-!-~xho((hGg&JELJd)!1hzIA{bd; zqSqAJz=s}8iuflQhC(~VB@;G(ihIIISV((uZlHC5@nY)|6*6`Sn>jPzMWc6D>EZeP zr|WxZ!x8zOUxdK$sJ!Q=x6$wR{J6f)vbQ`W6k+yIvd28U9E#?;&$a$Qe0$Yxw$f?| zhrCR$%ivRvyA_vNmvjx`kn=}3&n@We?tW1?TKlJSuKW9a`K-R*U3q_h|JC{XynKF^ z`Ryw6x*Xo~PR{pqccOx&5+40#u3z)|?t1fapfazZPqqI3Mz!H`Ro9zH@0_;I?{|J# z#Qn3B>-+E>Asc{0LK&WARS8n?%YV8;a1M?ecaPJxjvifMsNnn`$L6btg(6C69T3eGFcTVUNN^Q%c?>I1Xt3n z8)Qz6S1k$=d9wZ_bt8z<{MJ@CLi(b!<YjIUzNa65W_?_<{?7F_>ot`% z>kqa5exk6R7QJw$T;FjpS7dv-629FDyjsc+K0LS6VFEpI$(}8CCq&tq;V?^4#5Ny) z{T9VMo<-HTu>qz8NobG8LJ_Syj9glxpQocc$B_s1P(xC!*Du?Q9$ujs}Nj?h$Phr*$BusxobqJ<8D(UI0hDJpb@fvtLVH%QV3}$S$1?&5k3P$ z8;!v29MLOx1kUT_x2_zJGh=UnNiKsZ`EvU$g&^U|RpEqEdKpB9+JxiPk!<)UXnkVcL_S5fmTR_>+VhE{$DYnji zhQ$iLA2|G0K+$n4j-ai|iwcnO7pZ{bR@Uu*tu{*x1byVjeFt)lO|&c%NQUZk9YwQw zgwfR(UO!DN+CtkPi`NTj-2 zl35~~`rvhU46iS)?*m|!IAT?wSjF3!Y~-yHd8D4xqw!|K6dM~wm9S*pL!#hItyWWi zqWtp8UO6pg!Mw7+WL6#FkqMzOzfW0`a15-!SB6zmbjE_*oXX$pxPDUk`*6@!Resc( zUYst#4`0h!mvCKi>mu-^@5bhFM*tvFi9*OS*m(1-5T#@4+%-b>n0ai3c0`q3WOTa0 z$AW~fNQJ;(EjLsO(L~|Ia%M*mWlj`-tf&wH$4Vj_G=hz#a|cqK-V>umk&3+xU)2hc zWUVC*j6!4-7xOjJ`v#-UQ)XT8oPQAb1h6U>TWmqu3|MdD^#~p%yrXzw~ z+NS9IH4#POKb-kRD)GYeW32jOS3QTe8ljZ)p&o?U##DVz zAT|r8IjRgMHP<~F;T>lTStG`OeNy%sfj6d_bPsZ0U%9PQh+!D|?2j7}N2uST5ebRu znoi(A9kV@^Ap6u-|mDWJGA;}DULBN6Q4frsbrxfTI&uJjnlE=e+Q-sl<6@1Nhwz9 zi0>3MMNz`~h@EOslpTV9$Ui6r)a<`;Ip$*gByGKDt~iq31fYc;Rv8E0o1vsEem#i zC*)-vqv-v+cg4Tr7OMo&w^-432DprfI2d{7z%9wu9HF`nK>3-Xw^+vzOL|}Pj_7UN ze5(XJ5SGvm39;gTEK>78{Ji)`U?~jFJ!DWD_P`2Q@a5&)JM&jG=8;};%yMWh{KT=f zw`xsL!TM;GCA{!!;IdA@gE9y0swfW1Wshz33}-?0wLZK9hlV7342#Erg4&!e5noie z`!h?7Sbuh1hY-i|dSE5;ma;y_x6BR~mT*g1*1rP~w|ez|gE|abFxNGZfQ6y%Gs->~7(wiRSamnR(3c6|p%B7|2%>yQ7%>l%CN;c5d8ZM>e{b*_fnkY9h1(G^6H?1* zL==t7_o5Mrld^Q+D$%k1z*T14p6Zdg1wPdSKM(QLh=l+br$#KY)ePa#h?2b~f2d$1 zB6U7g5cd-yG>wqlM1EBWWL(Kj50c=z8?n9=!WW)@YU?J!ilUDBxFdL;G^YNZ5Jwoj zL*bF9Z>PfX%}1yrg-Gmrs&2$EVskx5iBdoASyp5X3D@27DZ@QM*9EL7n@o(u9_=+j z_xXHh7k!hR#A&y*Y?kiapMJl0SNHc{oxlHBLd02!QR+_R5+Vf+g_*H^$GdR!NpaJX z8*a0I_xv6&4y~s{Lc@PqQIvGT_cKX$79N9~N77ABx}p#hNR<<1fx*YAN=Q*=a(yIx zyA!x*NUQF{sl|1L*N34J0oSSqii+4}Ju`tt=5NdgR@eym$4Hq8wR(bd=>#I{Iaf3f zct9-GTRa4w_qUQ15SKEApkEe{*(B3b1EVW{_Wj_~$2ngi1*GXz)!Z zWPFCDsCnRx7(T!)9(auA4h@XAr;eipMNx!&$ldHq%)2Tl9}3uI+VCvV0*c0fHK+pO zz^3v{*8p_-SYgFKf2Z`VW}q%>6bE&`aj;AVf57!uQBd_ z?Du!9+ym9zzW0nLp0vJSJn=e|2a&5-C)HXr!9~x*t&LtBTQE@rlTH{n8)fG#4kuNz z$Th`+$6YagTNV$5SuP7$@M+*RMd=o4&I5A=Z^QAF&BgbU4UE`sK7a&&0g1XDc@mmkbvnV1gZi$Dk}cA(F0gpyl!Q>~ z8i*Mk9^Fh}>At3Yw8i22y7M?sC#3NbLnq)5BOZDtUdS##5O2M~kU*D5E%OQW3+Jo6ktQvu^@+dGng6--! z6j6wdw%&9?B$#B)Iw9rEUPvcoJSV5F3(vgH>jy+37-4T3QEKLqq(;bC=5#?PG^A`h z6y8TD>_g$Ax5cqzRS4X!I9<35?}%qAoxrgLZ~t~uG)Nt%vO7YwAiM(~67Y-Cbw}}D zH^hD@JYh(7j|zGxe0vS(H977HfZewY<`;K|4ENl51O_X8I9dJZ1$!?#`{Say{8*gq z(`dFU_5O~jChrO6_iwN74M&g2$eY@TaMEv+BFtj~HxrYG%qjr_ld{Yxe_r9AEa05o zJ8(}}i{@kE54QsG!+;Z#{SG*BXTQskt$`nBFgF?OBg>Qs1OrXz?>FooR5(25P5Mrc zS9FbsX>SDcb8=@`*Ff(Z)@~Lj*nJSyT?1tgI9}CRz*w;4)>Zeha-VG0-6vjKrbFdL zHxwl~Xo>_6B*d;&`4Pjfe;q21?MO>@`Eaqv-5l>G6W5q1Y>~h=|hg!V` zrosaQXLS%(G#IUDV6DTurdeVeE{_g%Y`6y8OMC(=e)Fn_f9~2Tvf?_T1{oA_ z+Q<`$12DVc7u%?Od^r))%^fifz?+~|qHJOFI33yQAR^NdEKes)$+j1@Cmcl{mOU|i zF7iarV4HqrzssoOc}97VAF<17*JuhoCe{6!BYzpxo-+6pR;#c?`xa!bGT)_h?*m%|wRRVV-1(zi%ft3okDmxE> z6Pw%@;ztoT@p4r)(i`(HXo|ASkbR$SU=f5t)H}0*xyW;4e@D6lb0iXVHi4C!*k`S$ zSQ268syBg6rWT$_6tFwqPnad5C1tGsb|7bMvMcJ==vy;?2kr?+k$_RCtQMb$ghos? zHV9YtIZ21b%Y%%p(=uM>+-|vGz_hB{16-e6@ZNg@(r)i`PU5dqXH4} ztXWB1f5D4P)(Nu9&oX0FQK|9LyqG)^=$4~<1hXlS|VR>QYh;DwS^qO8Qk^3gz9 z2{SsURU$8GSR#Vd4EQ^W=A#2gxtAOgyc8pz{g z=UC$cW#QG=s97eXYt$K6CIja$<4;Vctqa|>i|?ycAqlS!yBb2+w|y+^!WR>3e^|jp z(r@@f_z6pgne>k3{)X+tMZ<$nG4&A#Y&k%3=-`P5oh1t-DspQYm<}^3XwP&DEVw&q z!EI6Yy@o}$=|jg&%4^78=l{8Upqr+UA8?7}H8pwv&&AZZ&d<0<)-@(fx>b#Rl-FG% z(cyz71;+&|u#YobxO(fd-&8UrUww)5y^ zcg&bPU}^1E)5Np2vT5YdejmcxQ3v2|Cy(|PGQy_l0!;Nh_ah44b|J8j2 zcT~}zp|iwfKL?LD!o0KFf8yqEKY-n4Tp1sp z#6tU{FeE3PRn@onM`cBXq1=|$-A;d`AUt2eXH@x)OLN$SDlfc1CRH)zhe%V6(NyJQ z#MvIIV^4hYaqI8yQtC;6Yy(XC^JSj& zf8Ntwe|NO`^+c!3e{RZkzV&xE=k|BEOTGQwU256>?ry#QYoopac6ZJ<{RyzU)4x<; zB}jy((-%~!>xT8bVh|db?8zcTDp+}75u@ZXZF3Pfl}n_#w-<3DLOcKi#1~WLlE!IK z_`XPd(*l>eQ_-ZJ7IP69^fdxI1KS8mvNcvtWL=YTYOE-Jf2Mc=ViK34+Xqa;d6YIl z5z&ZC=(adevWUa<0eMx<#>3PoBQkh|@@kazD4RsLqaqsxYFU>Wxp}H1d7Vr6n8q%{ z0C|m>S&zygW#FJ?*e}by9p=Ywi}UMh$^a*~$|ZO$9v=1r!of_&!}EWzx7Of&E_?g$ zPw^olZDIv|e~Uj$n<&$S&)wE0f(+I+aTD!VDy`DTxx)ZQbWQm;MYR?D+Te_VV0*GBa*2>q~g_LQ6}psXH` zkxROkm($LYsZ@C)6E$vIRC!`waXDfD#J(ab+XXQT@6{GT6p<09MYQ;RO45jy8qP8< zh!!xUxgccXhjc*@a*mjb27%|sb{sY}nX0B7n%0Yo zLL~g6f1uN^5d=Z2>%6KF92eHsrxC<%MTOlU(gLwPzW` zAk<;8h=MU{wWEv5$LD57BU(Z4y<5a`2UfC03>5Uni>hBAj&+#XvqsU}5VrEE@>1a8 zcE?qbuw?Ane$VZqEq>v4w$zipxt&gbxZ0Ecf6sfm&+X#jL#phiT<2f7T|C_GDfNTf z*;)>_yY%|6je5A|%T3-fVdxLH2a zDEWfGrgOg6;IGeqaJGuQA>c7=d?n{g0bz6h`Y_pZ=_E{Z;DGpb>Ga~Y|3`)Y>;GBJ zzdnUAD)?C%CAtv8_nfpMnAg?ir^Ex@V_~5T%6DhDlv~;V`p18ut%%=)n>gOsqb2P4)F z8j>2;a4OuUGp;CfW#NEksD=<3VlmYT1IN*%H&il?sa-~1xbnDtk=eN>f2lg1o9mQo zH|gA~pCQTAf}}RYvt(!*UM+XR`O+BwP*WX$FCrnlZ9-TC0RmuI9s|Qkq-K zUTZ|(Y}t$vzIY<)b2`1VLCj{;=PdXX)Xk6hQ4(>eo_L7QW?f=c-HB~_ryAFiB2Jl= znX&ks_6rh~BB7n3n#s7tf0WacLmdnbJ5N*H<3Q1*KMeidOf~7}a_+FcM%;+sDyLAo z)yjeWDg7jOIv2A^7Jh`Sn^S&f2 zN+b;h;^tfStOJrWecxYkPW&mBpHvgarXYnhU75&5ME2@VZISQ}e`p747_MnTiyjOW zfB7heij0G9I56DeVh^oh!pdd$%+2YWh(MG0qZY;sP4N1b5&@D@ z)gvtIwpQLtb#=JKfB7-pe^w_4+mO3iBuNBWS(?p*)j6lE2?J~BaTjlTpb04gax%or z(rPlyHXR$F5>5K3D|E7Hel!ephd1Q7;Sbrurkv2^`0Y@g@qxu2qNvDNr*dDQ(<5rD z!Ay3vINsAzH}kMb4O8hi_SuP|{#!ks#Xi5fec#eg1C858e>wF$mEbBdZia~4L}5r9 z^zcd8rW_hnGT!r>d>!4!a-NR~>Aex`0f+2_7B*)^G2Ve?tkP|dB5r_Wwf}&nBY>gn zhtmK}JRy|O4mIh*L2>`B(`9|*qu4YrCl#4A)1#U|jJSR_FaqKPx3e?gI>-z;a$6^i zs;W*H3_8Rfe-*-K8jiG0b#nT`t&~Y;>n8ApPS28oh@+bq&fP?!^_s_%FG0NwY{Kz4?VF?8x)GCLTMkRDw-kTR}1D40JwU_AsP?K9VJCL@rbEAxqAp zHNE&4!5hp(Ofz=*JZ2)|mVn@ErWsVlg#@SfBC7~ve+*{A<$#t=@+KUX&v69v#WzFJ z)v5FwqZ-2K%Ww5=-i+#7`g3Ej7*)e=_DOy?lnf)5L#i|(g0MZ-r5o{gx=zL*8z0Lm zdFE7j4c5sW*)8iP=RhZI>e4YR!n-aWIh3NRugkNdYMG`ymJ&fET3tS4m}JL`g%X1u zuw@y9e;ScaZw%!Ork=*#ZMNn6a@u0)@4RGJI}W20%IMUi4+zifAX1gAocJNY7I@~> z*v|`-Yk=RXE^+0gOJCk;Ora!!T$o6>qV<>e5Xv6wRD zdnH_jNtZo|mnfUw8%GLLKT%~+GScPyilb-gm#q+oV7hz??c*0ul}|)Z9XXitoCU*c zf1IE4cuc^TgegBT8;vHNfY05IL*fCA0MfetJh|Do^%s$5N~)%O<+`ccb`g5*ec{;&FfeOS|GTF;_v=#sYfq08n!Ozmh9uKl6-8cT`??&24=W=lQk z4_`CsUk--CIe;b>*?NUFuo2})rw@a`8+Ndvo+c{7Am%-`r zcsQIcKe_Xe)uGEzBAbYKt;@$Cdvedo06yM(WjV0U2~S)6vV?7^ zCw(tro&GG}W}_aAh&tSc88VjZ;2JF*1f#%4UDa4N5GM&K zH4Egr4wYMv6!s`QJ{nRAZ>KZc4A~qz0mMvGob?F@?KRbi9&s7uh||gLk1}@-RThH< zj*0gtw?*z*@m6Yp1VSD7S9FFm;SnodhLgBzrTW8}GSQjeQ*Q%1zNU%`f5ddDrD=wn z?-$E^)Se6+K$LDLU*arG00FNluEOK6-vQ^6!k*mkfJf$mTP6b}40ajW8_tZ%aJ~Qu z=-W_@bXr{6j(CVLz{iKA2i$yC19ir}a(J^~LUDwf65sZaLUAm2WHRjHn`sEEY%tfS znmE_d^kEtuZ(ilV_EIc_e>AG5J}%=EUXGj!;|k&^{L|DZa>jBiZ)(KMHNTqr)ELfE zmC>A`Ss=PZIMee;8E8hvVM&ptTIE~X8YibILU!yyj~o)tQk3mH3`+{GJyJBdY(@xb(5(~E4bY1~UIq6@?VGg`&1XEr_aO@m|0f-2W+mm)dOc81?O+-Y$bZbMV z%H&DQWQYJ62qtebe==KpyR;$aj*dS;gQ$oYC0ayffXAirT8SrKY(|&L=Iaxk43RB+ zxil{9wx@R+zdm2@%!KD_$2!n~`e@7DN<1^=1ov6)8f5|hP8TXBTl^?P#T6@dy<|MO zPdZLg@hh~`e|^*O|HJn%!7Ly4O^F?oVf0- zO&PEdhk+5|wBzO7!J)6zd5X}z7Fh?M`TdeX5cFop3FQFH3M>sdahI!U*j;ASdwvbc z1{Pc>h3OJsP&)`08u5}t09R9Ei|o(-a0sjC8p#5CU5a@Jc&x8K`OA*{(&ES*J*x|x zIMZG7g#rpEe~t4s9~F>?yo}2q4O}V#=tOzIgt2J1eZ~JRON+*_|Gndjx++^BihbQj3wp)i35mLsu zdWlvCWJG1mQiG%)m& zP}KebOW|-dnT{QyQsHD^xi^Sjd*~eWB^YQRuEkJ_@mj&cET5P*V-%)~%XFJD zQfSe{o6qh_zEsp)ZR=i_K=pVsEfTGah6R+ zS@S1a;)+a>6vmr4S%v+@qA)_#>j4&(ID1{1!v3)~JA>1xnPY*aL5}J&g`+z_xagU$ zC46`n0!P;0svi~=LtR%&3Ya5OS=TML!=gf5%8v$^aBy3O+v4U#8mKd_EUFVEe<1&n zMU65SoBS5vr{38K?Q*J#*hK8Dwi9@c3(g1j2y-Hw;F(xgCla?D$EK=ocU2_svaUrG zOxi%@&ZB}EUDw-ai4pbd4ET&+F>sPD;jX9DPR%oY)+>tDFe4nBrMdWUdUNCEJXL zLH=ke+l;@%@3JgY9ks|#I)9pX{`+3&fge3rS@xNT1aF>P$GW1yn(uReS#0sw{pB&{ zd~%<38QPT5AW`X@hjC$We=`34WZ?Dso$(;Bgzhz3#K()YZ9C$<04qU*NCnUF{eqB# zQ(|K3jP+Ifykv~IRCi4VgSVcSo{V3gVLzYr8A#!G1?$WYd6yFQo8gZID}>7@w}l?~ zQT5~mOw{n-URgI={PoERQc0B8uyc2M?by!P^rfqoPx`MEfJR7N z4iJBYBA3|}MWBmJR3;CIWt4nM(}zqnyHsrFa%#epa0w~1Le72Irn)t*F^#&z%ME=YIEk$hn;ov` zyc#RcdF60#e`*u~6~$wl(d27Nw`>O1L2Ie$jKM}8t0fKtrxtd>#8G(eGU3+84X z5H_FNh14SKubYpY4oky@Q?OqKZ5#~EFBurj6}y7)e^*av^>Ero zxI@!CfA8RU+xppj+ptLxfM{UC8!Hcu9@!%J3AYZG4zxhahpVa@IcxQ#2Vzr#uknOF zys5G9c$97#T=eB`o5GSOgya%0pRLDa2P@VUQ_vl)Smp3g=B3xNZ}r&hXO!h9v#1A~ zflYHA&1MXl#N6fBjAfyC>Fz|=Bl+E(g9vove*&BhUgvce2M8$c8dBs3r#7}%!a@id zn@m%9J}B|WCmDE$cyV2kxRYHzav~PiIrKz4G-Ah8O0}fmfgUFqrbZcF43WLz5`I?j z>|%i}!#mv>j5B6JeOOWkYL3Nz>*dp+6+02rEO;Rd9*yYs%v@|!==Ty1*wiRHNkEU$ zeRPDu-l9deYyAT)vztk7fv(j=DStPZ7KiHMR>6nY@O#(8j0AONpn8$FxIEMFTV9 z-(E%xTl{qyG5&6Wa7tt6ekhc5Od9J8e-)R@iw73NvJq(pCyN(mn|}hoDupY5hEzEX zXVNg4R??HAy{c|mf4D=L&6X$_F5P_uQn^X$J38#oIT@n1G67Z^F;f2V9Z zFH|P3jBSQ|Rw4=8j2cnWvXe+o?`eeKP9oHEP?52~F5h&?L-#Mo+rdoLesUgnB1&9N zi}0v1S~9>KxRnXh1)}&(BxK$Bv%r7UIBmvrt9{S#{|E;p&f3FasStrJczbS>0O(m+_tMFf+(YqD@A5Zyh|CV_88N%X4zJH3X z%#%HkU1Xu`?0v93UbQyIk9cpfwK~f94kTl$TQ* zPqzQ~|GWY+$P-hSr>6h@7KCZxRPZUdGl-pr8i38D{qv5otSp+_>h>D6{x@6$nQW(C?n2V|a!9YI0Y}=TNs%a1@EQQcy5bG*Q)`Uf{os`}z0*j!K zl11b$oH1Y8Ae_1I4T~r%2-T&HvVT0}U)pG>S4{f_+52-6p?PPR`KV{l<3u+dNd?p5 z+RONzV3WEnegvD;_ruzg`=s}Ym1H~Vzdq@hU2#@9jdNvD9vH@lIAAcaIajp5pRoME z1?}7K$7ZyQvSYa_(9^IwDpaBJNlqx~Fp{j}qLt;4I3Ll7$~(aDQrQ%($S; z?;7Q_QBI9AJ(g!KQ)9)+a=&y=W=F$ah1a=;*LFCA2BO8EUc;qWsS>Wxm8nRS^@dS@JJD|#Aq2#42F zzqFXqK%CPBA}lQ)qJd?31%ItBsdDHXv)b>3kJ@#6yn!z(hP79&=UqE9(!jtY2XC$s z6O*j4{rK92@`6|&z7z+bNwt5l-GHY;{&HP3q(7lW_Nb)ldd6U zGshn_4x6!0x^HedcuB3 zp0%3=qW(od0FOqgmVc;o7C39kJPSE3VsYK(dsH^N6CM&@r0x~XJO6lnazzRb9_lF3 z)+mw>LawbbbG2E5OC!nwv)NBh_))aLTv9%o!k0b}5pLAvw%8((OYE1$>~G*D!)7$3 zu1n{-%-5FPFNcYg@Q_RAChiMfEBWtIMo(LS%G?kTH%S9|Yk%zFJ)eIv`Mf-^UP#S6 zl?R{H!|pUtXI%N<#4l|6BOmM{wzO0HX+y+WLZY2&A_h2hi;WR;_;_GXI(C|6n)E@G zLUtFOjw#8oa}ypHk!vmBmkN+K$v z1f4S(Ijsu@+kaHf9217y6dr+6xpZ#bJr=)nl}$fiND;;$QbMsc%5eZ^&953oX3B@Z zHMZDv8Lo!Yq~s45Pe|yj7*g1>)8$J?!jHs!8LqKzM*QKLOYJ%sV8VGZ&QF}-5{^1L zmQe=Jt5!eD&K-s`1=NN)Q{eYbVuVC`XhKdy&CK4^n zWMoWJ%6}yT52@jTAeMVBwx?KxHG~vRGrESK@ZI;mA`>nyYk@O;qJlZVj3bd!nl0NL+4|V8@Y13l_5r#0L1ip3m8r@FeZkImJDAdkDc!YZ1vKo$x+@ zu;VCaGP{OxC=#;ya>ei~1JoH;euXZYEVn=Kt4hcv+{1i}Z$2iQ71oR<9VJQ;XiWMP z(SN?#@^Ww-#8}YjqoRKGD*qf{dqw^|z5dy~8Qp%fcc!RFy&L^O=m;1+u; zB7QsVMXaV*&|wYaxISM4q=Cd&<6^@AGiK;=26usIyQCX%j8CLPr;q4Q;|t#aW#ZOU zy4zwM%cMYkqjeF;xJFy!vdAgZtr2_5Jb$CDapI;=ge#jd2;?+uQ*$|u{4rc@#&npK zOyHC(5YtSQ;XN9O*V=i>)}-KzE|y`(5oX0cVCiSmtu9;C;DNkvLnjq_nZ3 zdf6J=@=oPWqSSjH7_J*&pCVEQzYhcdCofVDd&Eye)hq1Wo&}!Rss%1j#~hiR&VLi< zOC$!%2}F8iLv&dI{^AM!ZAR^|M_r@Nxbn?4apoW8JX}Q)KKEOEA7CqyzVoR@&NLzl zpMz@d#D~%_`7D8_bO$D)^1#L2hV64{!^wzAN1Q{&-n1k9F2u!M?hQq*eLAsRH4rWm zUNvfMJ8^tqb3`j@bc-78Xn_OIy0jti+tj>&1MKIkyF;Cb0x#pUVoiq<;Bxf zEvbck0m}NAIr^j0aX*^umlb{&CP8;hjk4F$akoYx6D>Sjqik0>yuR#VbXkb(c7>qH z7cfLM83}#8Xjd_YaXn0T6(2^YfjZ;P0dW;K{1drrD4eJnNKSNgxdylr%J zF;scpDiS_zO!>L)zjXbJ=YNH=;yNopAkf+8KG7gp?k!(3@H$!7 zvQ$;cI^7Edpz&(JmQFeYM-~k$9T>>>=L_eL=IQCZ4K>NPkTqDlR3y(>jMU ztwny8t?l>v4AT~W=`-K}9N&a_=RWCO&KG%3n_daA*-rYeZ+a(aXgIB4Sd_~H6Lw3y zBm=`GVMLYng)4n*@*)e&n15QcGb7=*ROBA7#k`J? z-OdcQ=9%Jqa0Z5r8@TzA2I`Ex1HV~S=}Qg$cRR2YCt456lTY!djdd53+o^^H5clLH zR%_u@uV7e+M>dNeu(^2>VFfvkDVRt*VGZHEH4dn9JvY(_$hRDgglvu;R2MXi`s$GB|RK z8|FI^TN$$-TcZqhTepJ_DOf$C`EP0zId28uH8o;&G=F>dXw3N37^RyU&pK8$nvClL zuW*(6#|2IRdq(zKd@pbjD&`7s|5QV0i6eB#@=kBqv+zX-7*M9F8&%d~ji)+J2XXT< znG`W`lc}mB0DOndsOl!WH)rBIb&-2M9tJf|HVuJB4LnmDzmTQdel1%F!o!*xWeVoC zt{qYekAG;F0T!93*Wiz^uqKg2rtLfa@MeE?PWPb`aj@BMfM?Ghx(1#WN09zsMqBnB zTzI&{Ev#~2;B7`N1zBUnIMg+Mj6xBIoEo_&3AI=t&W+Y<<-PMf15IqJ4Jnz|%3wbr zG6-k>SB=D%Er<6cLU>R{P#apKWz z*txcDPM7F?A2pFLWeXj4%4FhHyg#67@o*vy)EQS6)v)CB)xW|Q!egg}%@&q2n$wyLaEt3XSK%U#Ef@R0x5x8O zSbvL00}~fO$?ad{Z5*4=4cwdqzeDLlN?n_jPYRcpC?*?VD=P|tONxy2sO{1RUI@?- z+ramWC!&PN8lBrX4J1@FI+#w2azy18!FE2$!CXeok|OM81iZ62onKCM(Oa=VITK(f z=aC}pIILBtN$Ikta%r~4J{pe0TvBH5pMQHP4dl>{i+6__O|JoQIf&+(Oe0oc?Mo9_Yj9q-2nH#zFX;?iTYras zX`GnyEnOOK$WhEtoiX_8DP1!9Co;EbV|fjWb_ntDGS{7~M#vxzti?0}tq~FWn?ay2 zTZtHL5F9YDFSQw&P-%8Z(z2f{c1XB6#Af({m>AmIv66X*d(sQJ6}KkwLX~jMj2B#k zXjM3Eu%8xILIfI{u~c}Q9bIl0;(xjVQwXj(S@H%UjDQbl$wm2*AmSFmOjtXVM&O#h zUnbo01(@E`=htV!p2hzx@VJhCtEpT5!x~O>7*v>I^0j}tW6jYPKX1Zd(m5;(taumZ^Yc z14XXxOBF@~6E{c53Qmi%tUk|Wst0m>;ezf`V-evNj}%^wyz$}?#sDie5+%DpVz90I zYz-us>$=c(IzP(FvB1$dY&Ewb2+=cjprpt$#%8Fny5oy@(-~K41o$qTh!WaGqW)uqA>9>Ph$l4qU+7 zDT8kl+?KmQ5f)`pUOLY+Ho?9fAWlwN9dGTy-At48@?Up2#(UkH3@ zM-A^MeX(wbl+^q3N^F3SNrVU7oKFLF#*vp^OmQv;uNS6x!Xjp3Wq-xKRC>O}KWsPt zjc8at0o*?6o3F*V6mnGgfg5pd7FGE<19q0CJWARD!zT?`4htF@z6MdtTq3eY5cnj` zX)}0$UqYX*3bpbj^=Slg<8VD~5GbClt2~V;%X4eDh|-sbN{gr%i?s_?hyY8l)`(sS zg=9aH2p{949-|RMW`AXRkM4uurlikc5IA3|OH9=nsM5su=>Gf3z>RvT7X+3c@q)nA z9Y<#dA?&}_ZabKG5RcJz5LJYk<^@5(+mSB_nItg`J0!x@a1C-9k~Zoxnl~9^Jy%~4 zXqxxl)#h)aQO8=sH22F#qZtg_dVet(5x{y!@GU;oc){`Dyw zrR>kr5v}X+_2;!p$nHg#pArvrkA;OYC?C%lw{k1{U;p?InZ`oM|7!pEj~M>(KR=yq z{qMq2NEqOuU)TmZqas?$cSe2Brrf0_4Oisu!j=T(}p0_=?+IrMiWkw*We z>npRbICihm=6`-3E3RO^Odfc%|E(OHP3e~yOrRUW$<`-xCzr{M?@s>pO>P9*I8{aI z(X(Y{?B=*8(RGQuDy+ZjWI6I;P^yzBP9wT$c@o|_c znh~NL>g0$$2(e*csG@T-?7$LEzeL2-u%)G#n?pQmbR9pjn)piO?rP?A;^Gs}e0v>p z6z&H$=6`x*)vy*&PxPjZY=;q5Zvzu1A<~1lga{MfYO{SF1Aj%`Yi$ma!(Os|PJt*1ZlAeU zn1AW??ZBi<=*2iNnPu3>8dyRnRrl?{h`xZ&0}acKsEgiIlXYE*C2wH3WXPj?t%(#M zN5g4gORF_R57w50>ZreGVwnifGS%TKgvIL+FC3vt2MlbWFIZgSxv;}eq=w04lO^H9 zCdXSd8S}dIuckUYT`$$jdv$p^cCq{<<9`A&)a3Lz69BMPGxd488F)l@T6>(>XyPCC z_@laF(r;`N^8h*D{()^i_JZHio14lE!k?Q;?#nZF+{v3?HZDVVlSE*x?eI%{(F_fm zfpEh4C+NihiN_hHM#1HYUbkV285ES*<-Dt5rOHuCSkk+-UJh)a^K58@{Sg%0>3PfR=;~P4uMeiF zn8fIaraHFTCM#1{mqoI!STEkG+pI^!RQio24W#q-zbnaoOK(XIn-3YxrxI>gPjA`` za$HCo^ayxGm|LGFnRDG}I(aN_wNWRpplu?KX^JArp@yF%9j3x*6v0Hp)_=|;N9B7@ zSeljVa1F!G0{3xFYbeHHz^q}Y77{7ZX^orTdiwC$=#zuhJQsaQ7~Mg#&oJvRA6J=W;K%qeK)+7nsk))#~H%I zqi{PEUSDL0jDOZ~o+uAyQ-2-isyM~e)fL{`Q~z1r>yTR45!}FP8;$42`xqsT9UO@@ z6~r9QGn?uLkFRZbV>dXiU#O7rncb&ib{WGSG!>aZ-NG<*b%3FLMP=u9i~NAWR~7v-|;iv9K8M>Z?&PaI@~V72^tZU>b`^IGxXShb0(avoJJ7 z@^E38$P(g7!{mrw(erm;g)cHs-!_kuO}#~1U1KJeTUt%-nYU|mGS#b@s@gdh1bdW2Eek!fhY$dV(n9SadD z%SYVx0UaU&?u9!`AJT`E*sH=OT!`-PqtVh9A`i&(`%zxC&A6e2@j{259H)8k+ zs=E?iP3I;{_L9o$^aFZ075Yjwo8*q_xJkw<6lUG3<%!G49DlZa?yf>kC^+iMcvUD| zW~kZ-Q%#_9rz4RA#2nF7N96PHqWLhHQt<%cR9A9e+DaOREi&%$olX@Tb2r;5JR0!6 zVbXEB5Qj;Zfqy~g&!(etBEr2UOL&3o#>MN+GH#2uI+PIbHlWid_eR~M6Nb8k&~@`7 zBBZ7FeIFGxpW&tk7CTN}yt$bQ!A$IQBZ@iiKBl@N8wa-9d%XlX+?;#(iZjR93{0j0 znn4~F!i~aviEJ)4FkhHnpRw@gQdGm_yoyT=r?t%M?0@#!#}CWOQlBEu_kX_;74Rz zn~^vaihoFDGk6ygwrMitFG30$nqy{@eG{DvUcL?xm-e#h8=$P^AoBB%-lq3`m(*;#76H6eKgEwUZ96<=NhWq*H`lf&yf{JiBvP#Q!FGQj26J0)+H zuce054n5pNN$Z4rvKgEzf}MTRuMv5<&>0y=f6c7Sb>YOrko}}0^WhKH{iG)X`43>R z8CO1orH!x@%V#QU_u(5T-!;_cp7KY|$P?M*RT0_*XKpV?urpYoP?k}!@PHYM;CU)O z8Gn<5ezO@|+-4?>&ZrzD`z51|k$HDA#C0??W^sud$o^qiAO^Nr89BfehZT=m8Yt)E zj&k4u$_c*K*Y4g>ryiyc7!#qHV{4RM8d=UI1$$c}Mj9aQs>AU6Am1(GDcO)RI(OW5 zI1`4DD6M-nPRthar4Lx}@;vVVIh1fkXMac`Ty^ExVKNBvg%*%*N*FM{XRF)PUQGt5 zGOo)EIbp^>Uhb|qT74Ja+q|&ewHBWAXWPa;C7<%h>Gg;^qo6q)EsW=$s$qL0o2d?N zYkpF}w#};-EXrgE89eXmhVal*k#tW>#1?w(_dHHB2Q@HaOai~TlSpV-%sDM7IDb@* zXD81Pee4ntEiS-03Hadx8>UZUv%Iu{2~<$q;P&DN_a z&vh?Gs|FzQ9}1__BIFDvVq>xhoWS9@${>hSimyO}$aOAc0caQ78h;x%k@?b8N6%?S z+f;9D`62k()SgA3km#%cRbvvazwRn^jY%f;=Uj6q9!K?k@hc4^U==Uv9uODtIEgnv z*|nB4Vh`APqm7pqWmE!ce$MPkBT4^XD{N;7o18qfm>TC2EvH9{?0r40iy>8G4sy=s z4Mx`}Cu9yI)vXa7Gk;!kO^qU2%31uDA@dFcRFm=Or`e2$W&I$o*^IMIzPMRkZ1nd> z^9Elk_%nZsAHGzFtcFt!3i)MEP+{H6E?UFnnsn?hdl+6UtJ)c>`+-UKsj&){8o5C8Gqpq(|Le9LzXRy1SW$J z3|Qcr42;NlDm667v>TXwI)fF_Tg!D?AaTvYoG$UL;)EhwQe?4;(B5sv$SlbVjf3qZ zC%38Dn*4nkV0=C(!F3ml-x3(LQ) z?)-Xi>ujbvqkq5znw_qx6cL0%a%rsaf_$kFTZta*mq`tM-*_1gJYS=Rgwp;aB-zf#0(33f*U!c9R8_+ zI^)V%Q8@^IQ2uRlp6H#p?oaW}A!T!0+v!sc7TSGpet#$dW2~-WgOJXQ?j1I{$U!W4 zV21^c7T+0%1rnbjdKKb|GGcCTfp{OP-38(vcRi_SAc3`c&-8#PWF9hXAJBMNU&UnL zWV2p6Cud+`S$^l3Z>8E%##mzowex@#N4>WeD`o>+ZXF;Y6%SChy__yBqS#V`-(tg; zbhvcBReyrPW}DG*$(=59VTExEc1p$}LmY=YCy~a&d`i9&9`G^e3T3ZhT(kD| z<=?RJ;;lksusGqZy?zGg+Fm5ID@IoaxD@^8a9bppA&#ppP&V^*Aa`0ME^3K(WH=1R zzJK`A7nrNakMA?@x)Ha)Itg^_x5)KNm_>b~B^t`iE0<9lysuV&xF@!juRb0wBxmV9 zH1Mn^G%az|qk%~{?^2aqqaJ22Kq8YbvI2B z9~3`jUQrPZs%NCJLxCu3QF<$97XY{wcv>6$h937T?@N&L=o#+|@)m8;w00 zIGGlo8iWEV;P9+8Z!>!mfYdgh|4`(&YBuGbJR8Jj4Rh1vase&Gy11&mVZN93;J7p zr=zZgn61)>z%iBC>Hq$+%N##vjvwXMonK$yL6x6XKESl)V+e#r3*M zUz;XF4x&ilmyE_7@3xH?WoKD_kV_GNR7bI?sGI$2;pRiPIeG6y(mjlLTBLoA{N_o;cfW8 zv^`(Z4wnL}MwE5cWWPC11kr`J2w_pOGuuH-tj?vHrV%{t;9kWb22RN?Q#}pHz07sI zrS>o`RLzRAu%$|vhR8{m372Ji3z!G(4D*=qtZ&)xq+t5Abt&+$hJOIC^rfs?U+KTT=>%zNCw<+B#9f_C%C;^CRdus`uToWYs3xrq z_Ff&ftCe`oy1sSYRWB97Mr!#@jlvu78*G7iqp4l>?75L%k-Fum#7mMUh3jPuB210) zIpoOQT~efHeKBnfY<~pH%fkh>fjZ@-55lSPx?XgE#Bg2b9Ss~Sti1bKMKG1QnY!&f zFX97cU@}^pecG9@!sX^@$5Gh)a>8hc6HbJhW$}pnM7=Hc17NN?@UP(kOJ97(lETS$ zU0vvm<;AesaX<&8^)f9D(tb`a1eRvo4PajiLTw3z3b;J3kALwd9h^Fa;ePd=yXY4s)Q!J5)3z+`sX(mq%MyoJeGY1umaa2Ls-O$1D$LJVMeiIH&w~N z44AJ$5E_Ko41Weukax$Waha5}tE*%t+BZp~+J#|i##eWVvrzT{TOGXu;=l#v~Lf(rN zSB=61KW$wKeAjt7o*)yq5jDMhOt!p2Y2e*%HB^?eoRC)XDcyMC4CSfK7Qo;c-)(D8 z{8aXDr|jzI$`F!x3)mSC0_R|O65bhqZHye^1|F78Wu5a%8@956CzaR@0w4TKDbHji z+z*TBtbeN#VY?DS>Vn{&f$3rp6VFk>B4k?$Xf~RR*4K-+t;%G4Ki2u^`eS`R{?WeU z>?Z8|#pG+rL=1sxITv1!Zz&}#72!E0Om)f&Iq$Sn|o58?gKxV2U_#rk_ z2EjWmhLZ*%+X!c2i@+8u-r8u~7TntCDG>Jik})O$+fT-?Pevl1SjeZUzx&`2+Mfbv zdi^ZWp6T_HAy6Nd1L5zKj4A#-vpmH==^`sU`|Okc>ziJeN3&Bsx0T=9C&?Dc1Cs^= z>wlcq>rk+^VRMB@G*qAxw>A+~-Q@n0VYpKfh2t)7iy9|fW{$OEI6x5~GZLf$mcD{= zxWKvsDPMp@2_vA5({sFO60OhzaoB;jyVs&@?giy)1H^b!Sh)vW9>)m*tAPmz{js^E zu25--4O#<*rI*n)@U)mj`o_}Q05N6k!GHZ6C@SDf!~$!V{!e!rqNyJ97#7$$V)f$n zaZQ{2npqDpuYey(19yvgX=LPRrtn#^x<;L`PXg~%+<6>nmsNaD0#dwvW9vM{_i7~q zLW-|yc+)?tRd#k6Dg*0%RIaNW7=q~XHM?<71`Z0)8`Bj^_eAn4nvk)9?El!S8-HNR zIPMxQDOiURP{aVGHGDF-Ktz|d$>=`Rl9n}&%~;_j?PwvK=EbF+rb;9}@mb;-C#2QZ zNG#Ici_PdrspHa=$d?%}PhPJEH;OG;;3##J9~0^)aK;s)-jI@(%j{rDk%owZ;F2OD za46jT8K6w;fcqa0i0hyqz`dw5UVoS_8C_(I{+c9bwddY&4dXS1-%>8OEl?yZbjO_e ziU^JVl_5n07h(k4`Iu#jwCT^s%m#@`i~&B5Vm#nxBO0hPuKZ;XD7e1)OY3pz*}VA+ zZiFWy^|$zDAY~aip7eh|jD;J8YRbownjB)I0dSP4nS+5rbiQrBAO`2HY=02AW9!)2 z?TlZaPMiUGIxTEx;NCq9nGsRt- zCIqE&k^aUdW8@Wn%`_$33x9EsT^eO!uULJi#^qXd*iJ`Y-PWDJyT;fykc(h^6B=Ou zXl%Qr^c6d?UVuo-vAe@1^ZIkIp@CCQj4it@ir9qyMm9iH1edcZr^Q5Er&!AcD8~To z`CmX>J#AnSvHnIX;Sc-oNEPu;#3K7SmbFyz=QI){x4Gs6qhnGqPk%8r5_~y$I0MQA+w!tGMYMpiS_5#AT8NGuI+w7!#*N>`?uwJ;U_bTM_ zGT?*V)F{#lt~hOt34isDph@h9-QYSE`P2Yq*Q;r|q;SK!Sf(b0>Ugv_HOihvv?900 zftSjfY>iXKn0H)Lqp))su<@!9w>tAs{ zP)@`<>GlI1KB8;X88-&QEh>i6zdNnMU;-Yl^De&S7~c1DJLwPO88{CQr}|}?uqXcD z8A(2ru5OCRDt|N4RL7+_QRIJC_u^Nqid0N}SRR!A>gHaV@>M#1z8nGxkj>8pI6ekg z9*{`4a*VR1G^EowY>jx=mIdK;4kh~KsYKV92)`%n*3^hQuH>BjqoE`Q%ExBzTPzp@K-UO#xqPRX7Q8F%6IlSrmZ1 z7TINbw11T1HbVZ1Zi~cvk^!?oW@~!&UAHJls*YaM25u37NRLcDUE`2XgW;4%3ZBI= z{?#?gQ40&3ZfZx|Z=*FB|h8wr`n}SXuAlpY-r|D}-VmC;itqy^gqe=uI)a7(8}5nT%ra1HQdnh-T`x0vMgv9uBlkVvDW zyE8Q5S1BhuIP3WehngO#B8(O8@eQzY_NM{A4(eQ8oMT2`dnj6ZWAGlr=chJ zNynEp&Ng(qoE&9kmy`bML(?I56O}t+_jgn;C7uo)ofmj*3BJC=>QS-9Up*>+^OA?6 z?UTFHXKiR7@AO}vbZ&nlg4k{xWq-K#z&a}jzM)|~p-1DwW?jZ@nhIIMDYa(PIrd~r z9rh}ty{OB92bc%Ojxe~Q(m2dkDoP#>eaO)Gv$4R)9bv65kRZTIhSoqCrh-+&PhdU3 zA!{2MS_2DQhB@W5C}OKD$4eh8Zp)hAM=WyFjnu}WcDNsJsk&nCr@xYH^nd7d*v}+$ zH5F_~of?TKxFRL$8oAZu64lg*#o<`H#C#M9#g|` zfmKd=bzXoi#1;R~1Ik*?quJpkmJj>3tx+c6L}kG1{J`RH6jP%x=(x;cZN_MrLz|}L zus#~P0;egg7vct{#IvuRM1SnX%O{4@>%;FfP-mPi^2G|5%e~(#ja0P%gmp3PzQs2? z5$O{(pPl~iZ+a7P4G~e7N9BtzsM2xEhS994Ncf9v!OhmRVh|9l*dXwPxW0f!$Q%$^ zVOWH8H1pJD5Cey{FyANR*Jn7+&_2V*Rw%Ol#{=W7#545cHS`l(f`1=FKbCK%*Dlm- z@z*ZY&Mx%L-RaLR^rZj#q<3B+kV1FkSWngmMmX`2f`#GWfbHZ5tZmqAcq}wj5P+y) zzhX0_%XtpdP+UO@*e0KrFaS-Pz?cw#vh5gFi2;RsheX*=WY<7y)4-ew%{{##ktu+* zS8X5A{vmX(sS(9M^ndug8k=k<1PwGmT+Zt=XBdUWiht9*sQb)X;2;GFFWZ*aylneFWP%)VlEdr)orPNF)!UEMEK2 zmtkZ@cftUL!q9{B$(QPXm*cVivVB=vV}ZxHKM?rhzKsY&0)!hZ~$(TyFQ@ zpW;n+Dxz;b#dkXX+uAhgonSev!6*GoQ!kiHhSTf{H@ru0EG5)zU~Fa~cLggCjPot} z1R6#JZQSuWt$*PnNBUS4^-E>3ENA|@LeyvHVmeNZ84LY*0iuh&CXxf>fxTXOzRW3y z-*o~*$eOqS(aK$Npwprpt(Q|a)A=sDN{Z2D3{Lb_f9$1sNOVs-{=A~JA36VJ!%H9=3{N*CaYcb(l9)4F`^rVqj}P~^#%jDOlOxUm_WV^LBwG?W!my0|pR zksImV0v8vH)9rP|{a&}bLl2o&lc*@l-=#kuwZ4 zcf#`=*puEwY#Y&}6D&EcJ=0_~`Y;UvJT~O@xc-BJ!^3b3uw)YrOtMh&tgjJRwit&` z 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 a!{5L8`L93y^6QUZe(^u)gCPX(p#=bTt(u$w delta 54224 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 Date: Sun, 29 Nov 2020 23:53:01 -0700 Subject: [PATCH 58/60] Adding boxing of int. bool and string --- .../base_cil_visitor.cpython-37.pyc | Bin 10753 -> 11364 bytes .../__pycache__/cil_visitor.cpython-37.pyc | Bin 13323 -> 12659 bytes src/codegen/visitors/base_cil_visitor.py | 17 +- src/codegen/visitors/cil_visitor.py | 69 +- src/codegen/visitors/mips_visitor.py | 1 + src/cool_parser/output_parser/parselog.txt | 1658 ++++++++-------- src/hello_world.cl | 9 +- src/main.py | 2 +- src/test.cl | 480 ++++- src/test.mips | 1718 ++--------------- tests/codegen/arith.mips | 790 ++++---- tests/codegen/atoi.mips | 248 +-- tests/codegen/book_list.mips | 114 +- tests/codegen/cells.mips | 128 +- tests/codegen/complex.mips | 28 +- tests/codegen/fib.mips | 10 +- tests/codegen/graph.mips | 418 ++-- tests/codegen/hairyscary.mips | 1718 +++++++++-------- tests/codegen/io.mips | 24 +- tests/codegen/life.mips | 638 +++--- tests/codegen/list.mips | 86 +- tests/codegen/new_complex.mips | 94 +- tests/codegen/palindrome.mips | 28 +- tests/codegen/primes.mips | 66 +- tests/codegen/print-cool.mips | 30 +- tests/codegen/sort-list.mips | 116 +- 26 files changed, 3701 insertions(+), 4789 deletions(-) diff --git a/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/base_cil_visitor.cpython-37.pyc index 6d58cd9774c89781ce93e0e8ea7664630d086297..d6d1e3f4f5596213f4a214eae145820a4bfe9be4 100644 GIT binary patch delta 645 zcmZ8dOKTHR6u#%q%{&qsQZq_iX?Zu|19q_bWoo`D6cWjsP?GqT$F-c8a zwSkI9HlLoZ;mNTk9&_gMp)V$;^HSgCZm*p@>vu(Np&ikV zRP`&>vo-1YPqAUT`-311Tt5AZ{|8qy=atiA&8orAV2S_(o7TVv6V6dap_Y|Pwd!eo b%ek0U>Yw0E_PIU>jqFFgNlh!WonL)Ew?rm4@`!9+!<4DY?58O| bIY(>zWFsBn$=2Fjj5?FuwDl*KYrh2m5B3&E diff --git a/src/codegen/visitors/__pycache__/cil_visitor.cpython-37.pyc b/src/codegen/visitors/__pycache__/cil_visitor.cpython-37.pyc index a6da93a0a66814caa5e7f7cc4aa5942b06f46618..6ac729aa9f08fc5b33f536f6d25d56da6693361f 100644 GIT binary patch delta 2460 zcmd5-U2IfU5WeT${r}%>ciTdD*`+P*_Mbv1BEE=5L@g=>3n<%dcWK#{w%)zPlH8_X z4Mq_gGxDQo-HnMcm=K#PAu%Q<@?e4?8Xh$Jz@sr5AB>3_L0iP(*xbKWGN%L<#V9D7sVocSCOgkiX%mzs* zI1N|9ZCY7ZREt6=6QPRM18qeI$#PKLr6jdJJ%kOCn*JC*`VNN2S>dJU{5wTIedymp zONqMfQ7H2PfTDVYPk7Xjs1_06u*ORK9F?&R-~5l%6lf7=s4tM1({lElBctJ@Go}@i z1t*>1GZmFt3%)MHUGSI|wv|s@(RnjgQ_DF_B?pUXDO%)hcEIXmeNoKX@xAH$+AZJL zZuzvcuJN`o@K%1)4reknyr~R>jlKvBA*_q8P0@b^gkw>TiU(3MK!d>=F+elH*s48j ziZVnPY8Yx6`sssUQ=>!Y6*}{$`x*8!Jju|?@Bo1R2*w+ZK*-kvII99ZqoU{%h3UU?VcnRUVvFf~XnNI}>`rpt8Z zsw%;oD=Vurn9S7hB-1G+ixHkzj0i@}yfUJJ@Ea8uwWcLkClBo~ZAj9(qE*rwuh>^f zJ6}mNZ_cnupGbtlYA_~>YB_a99}R}1yX$oyVpq~8hjRK8kn|pg4GfZw7)xP5DKMIz z$c$%GX?Of&>Ij1Zv3nUi`5RKRHps;q#Wl(Js9275VOV${i_}O(X09WkXCVO6> zSWa)A6J-0X5UPDL=aM0PBTn@nfx9hkJeiv6V{NiI4dQRoerNWkc#_VLXGqdho|?cV zh?O26;?$+Z`f>G&LQ96LgQc!QmmiBQqnJYxB?xL=50=xU-}T%tb{OBVDZg+5xlAbfOx!^YSE zpXg~o$??dfG1)hn$(CF@hjQ6rqyOj>9dFoZEs2yqKo=AB>fg$8si95{9mo8AE<>Nr zrpD7l*>U|CS=Vh7VS04k4Y8hDnitTvFE_`5SSGeC|K5B=h~soP*p+yLZS!_{BuQ^S_DZ_$q*vNs zhiRXdo}SV7Ln^;I3y?}qZd$4A%#=<`zUnn;z6!r#3N8{6)$$qg@s-fEss+8*)kV*? z_lYU`xO0mj`k{T3FeuuwyG?F$h@DRYlD4}ZgPAEOm^ezGcAOA%($8snp>wmCugE`l z_KKG)@`0{R;$%hsrmI&hROD^l_hENF!)dzQy;+>4U%OuwgJiD1D&C~+J!=}z@K$FT z&M~~j@HWGFhIbg;$n+{&?1@)-!CJ^?0ft$^@Y1(EHBlcV9<>;&F&r39jCu^;vUP(^ F`~zK0A(;RG delta 3051 zcmcguYiv|i5WaKo-Mf$OtGC;3pWCIBw%Z3SQrluMK}uqjP+qB(BG&D07g$TT++9@U zt_$H|gFHKkpuz0^@If?DEI*8ih8SX^#z%~QToW~h7!wnX(VrTeIlBQ`gg~NfGT)s& zGiT=9Ip3Xg{uq63i)*>d<&fz2z{JIoZRcE%x?vc{-6vrkDxReQDQizTvL&X))N*nT zKq5_z$?K&M41}C`#(JmOOB=RO+8qXq=BT5fZtsQ8#uv75}<$hn|=!R;8fYt4A&yr z4U#kkS;>SrOi4NU5jm}-)s$>1DP^y0G|(%mY2{hzS%}F|h|2qHciDhGQ> zIzu%~+sWcJ71A7}m6BaI9i}~AR;X}s%onxffOljHFyX7t90P-b2=_`;jjJNN&D2b5 zT+NXyZC$WvuM&1;mWRe3CNHYmq`5g+Y@#+0p)!e|OsJ8RktAygHcO_o$(IJ2LPcD` zHH=DC(s6ma%FHx)B0YGIL$c9HkGv8#Hj^&4QtWIAjT$b7MFfY4EIpZj&sa@%kx@@W zO3H#sn--UIav`0;fkKK=$)N%a%%@^nW0Z9$aA|hN!(>So-YoBkBqmZ@C-5g<`LY_Z z?7Wf~jT;>t&ceX-%&YVc$vKIPRcscNUd-BhTvNW|?!0Hk&WZ50t&#rl`1n8~I%b5) z7%G`d>M;&$Nu+j8ju|n$T;7|RRU=UzuHt@@WFvtj>#_qhxdIyK<7Uk!o<8t`gGPgL z@ahN8FU%jkApKvY6!z<8q|f{xtiKJ?XKso0*;3P9;J+Y!InlXd7NrI01*QGBN9mPC zPTvBh3*5RfrC-0}ls-#aT%@!SA>D{d^~Ac$LbGMA&0#cgZjZmrdmV+(`WH0~vipr$ zYiwtG3@w%OZot_bIV6JwH|K2NDqs0<;)XBy`YI`N$S8>xtfU|-N2x~^+pn4t{a0Zl z^TQ|l$y7o8^B%toNxh#ch7NwSV<${Gzla!#(v*w$Bf)E+XVL zVlDLdn$AeHD>lV$*2Lj1Shg5Ds~RGLR<^m#FvhON6@Na^jSz$A@YjB5SNh_6WKQY? zl2SoOy-r7dp(i$=yVj2%R;_|h@OX6@dOK9Ct+iuU^<(fkjl2tA;e$29@DRRIvjM)r z%Qaiz2jRJ^_5zJAt!susjMg=3;@&ZgN9yL4UgB(g&PcLMR|}^+bD_=y@F#v5XovIo zci^0C+VP$Gqu|2j!ESwsJdJe(dE5PoRD#X{JQ3`+8XI|h2tNzf$_mW<60DMS9vXI} zj2&YmeYm9YC=B7pjX^@12KUWa7d!#55ua&lp`q8B8cKF^ z(8n3};nz)rUXff}l|&6QxTHB!wi4(K+R2H(Nj^Dr1>b6JbMq--CFv(g9>AZQ_c^Sl zt#Hfq;`x>iD#?#6eO(+hblufVq&h^VVI{odDPx$l!X@o6u66or;+#}$l5B$t@QM4G zo9<{j-OM^V@nUEIp2W$Hd*B!jwD!O*+}}D#Z}n|!y(U6$oNlXy-B{Ol01gPhY5cye z4-OXf_3gcIq^N(?-UHJ`y|1Ge=$cD$r}2%BCGcWV4=(J3mvO_wgAm3`3qOV9_;zP~ zJ@TqgFg(w2lHmo0Qw*o^*Ur8+hYfU>TP3U^sU-1`C`Hle$-@6VxVFo036SQT+191O EKSA_aL;wH) diff --git a/src/codegen/visitors/base_cil_visitor.py b/src/codegen/visitors/base_cil_visitor.py index 9d80c849..5c3e191e 100644 --- a/src/codegen/visitors/base_cil_visitor.py +++ b/src/codegen/visitors/base_cil_visitor.py @@ -270,8 +270,15 @@ def check_void(self, expr): self.register_instruction(cil.EqualNode(result, result, void_expr)) return result - # def handle_arguments(self, args, scope, arg_type): - # args_node = [] - # for arg, typex in self.visit(node.args): - # if typex.name in ['String', 'Int', 'Bool']: - \ No newline at end of file + def handle_arguments(self, args, scope, param_types): + args_node = [] + args = [self.visit(arg, scope) for arg in args] + + for (arg, typex), param_type in zip(args, param_types): + if typex.name in ['String', 'Int', 'Bool'] and param_type.name == 'Object': + auxiliar = self.define_internal_local() + self.register_instruction(cil.BoxingNode(auxiliar, typex.name)) + else: + auxiliar = arg + args_node.append(cil.ArgNode(auxiliar, self.index)) + return args_node \ No newline at end of file diff --git a/src/codegen/visitors/cil_visitor.py b/src/codegen/visitors/cil_visitor.py index caf6c035..1fea5636 100644 --- a/src/codegen/visitors/cil_visitor.py +++ b/src/codegen/visitors/cil_visitor.py @@ -107,8 +107,11 @@ def visit(self, node: VarDeclarationNode, scope: Scope): vtype = get_type(var_info.type, self.current_type) local_var = self.register_local(var_info.name) - value, _ = self.visit(node.expr, scope) - self.register_instruction(cil.AssignNode(local_var, value)) + value, typex = self.visit(node.expr, scope) + if vtype.name == 'Object' and typex.name in ['String', 'Int', 'Bool']: + self.register_instruction(cil.BoxingNode(local_var, typex.name)) + else: + self.register_instruction(cil.AssignNode(local_var, value)) return local_var, vtype @@ -119,11 +122,16 @@ def visit(self, node: AssignNode, scope: Scope): if var_info is None: var_info = scope.find_attribute(node.id) attributes = [attr.name for attr, a_type in self.current_type.all_attributes()] - offset = attributes.index(var_info.name) + if var_info.type.name == 'Object' and typex.name in ['String', 'Bool', 'Int']: + value = self.define_internal_local() + self.register_instruction(cil.BoxingNode(value, typex.name)) self.register_instruction(cil.SetAttribNode('self', var_info.name, self.current_type.name, value)) else: local_name = self.to_var_name(var_info.name) - self.register_instruction(cil.AssignNode(local_name, value)) + if var_info.type.name == 'Object' and typex.name in ['String', 'Bool', 'Int']: + self.register_instruction(cil.BoxingNode(local_name, typex.name)) + else: + self.register_instruction(cil.AssignNode(local_name, value)) return value, typex def _return_type(self, typex: Type, node): @@ -134,18 +142,12 @@ def _return_type(self, typex: Type, node): def visit(self, node: CallNode, scope: Scope): obj, otype = self.visit(node.obj, scope) - if isinstance(obj, VariableInfo): - obj = obj.name - - args = [self.visit(arg, scope)[0] for arg in node.args] - args_node = [cil.ArgNode(obj, self.index)] + [cil.ArgNode(arg, self.index) for arg in args] - - rtype = otype.get_method(node.id, node.pos).return_type - if isinstance(rtype, VoidType): - result = None - else: - result = self.define_internal_local() + meth = otype.get_method(node.id, node.pos) + args_node = [cil.ArgNode(obj, self.index)] + self.handle_arguments(node.args, scope, meth.param_types) + rtype = meth.return_type + result = None if isinstance(rtype, VoidType) else self.define_internal_local() + continue_label = cil.LabelNode(f'continue__{self.index}') isvoid = self.check_void(obj) self.register_instruction(cil.GotoIfFalseNode(isvoid, continue_label.label)) @@ -161,18 +163,12 @@ def visit(self, node: CallNode, scope: Scope): @visitor.when(BaseCallNode) def visit(self, node: BaseCallNode, scope: Scope): obj, otype = self.visit(node.obj, scope) - - if isinstance(obj, VariableInfo): - obj = obj.name - args = [self.visit(arg, scope)[0] for arg in node.args] - args_node = [cil.ArgNode(obj, self.index)] + [cil.ArgNode(arg, self.index) for arg in args] - - rtype = otype.get_method(node.id, node.pos).return_type - if isinstance(rtype, VoidType): - result = None - else: - result = self.define_internal_local() + meth = otype.get_method(node.id, node.pos) + args_node = [cil.ArgNode(obj, self.index)] + self.handle_arguments(node.args, scope, meth.param_types) + + rtype = meth.return_type + result = None if isinstance(rtype, VoidType) else self.define_internal_local() continue_label = cil.LabelNode(f'continue__{self.index}') isvoid = self.check_void(obj) @@ -185,12 +181,10 @@ def visit(self, node: BaseCallNode, scope: Scope): @visitor.when(StaticCallNode) def visit(self, node: StaticCallNode, scope: Scope): - - args = [self.visit(arg, scope)[0] for arg in node.args] - args_node = [cil.ArgNode('self')] + [cil.ArgNode(arg, self.index) for arg in args] - - name = self.to_function_name(node.id, self.current_type.name) - rtype = self.current_type.get_method(node.id, node.pos).return_type + meth = self.current_type.get_method(node.id, node.pos) + args_node = [cil.ArgNode('self', self.index)] + self.handle_arguments(node.args, scope, meth.param_types) + + rtype = meth.return_type if isinstance(rtype, VoidType): result = None else: @@ -230,7 +224,6 @@ def visit(self, node: VariableNode, scope: Scope): try: var_info = scope.find_attribute(node.lex) local_var = self.register_local(var_info.name) - # attributes = [attr.name for attr, a_type in self.current_type.all_attributes()] self.register_instruction(cil.GetAttribNode('self', var_info.name, self.current_type.name, local_var, var_info.type.name)) return local_var, get_type(var_info.type, self.current_type) except: @@ -279,7 +272,7 @@ def visit(self, node: WhileNode, scope: Scope): self.register_instruction(cil.GotoNode(start_label.label)) self.register_instruction(end_label) - return result, typex + return result, ObjectType() @visitor.when(ConditionalNode) def visit(self, node: ConditionalNode, scope: Scope): @@ -333,11 +326,9 @@ def visit(self, node: CaseNode, scope: Scope): expr, typex = self.visit(node.expr, scope) result = self.define_internal_local() - # etype = self.define_internal_local() end_label = cil.LabelNode(f'end__{self.idx}') error_label = cil.LabelNode(f'error__{self.idx}') - # self.register_instruction(cil.TypeOfNode(expr, etype)) - + isvoid = self.check_void(expr) self.register_instruction(cil.GotoIfNode(isvoid, error_label.label)) @@ -369,7 +360,9 @@ def visit(self, node: OptionNode, scope:Scope, expr, next_label): typex = self.context.get_type(node.typex, node.type_pos) scope.define_variable(node.id, typex) self.register_instruction(cil.AssignNode(local_var, expr)) - expr_i, typex = self.visit(node.expr, scope) + expr_i, type_expr = self.visit(node.expr, scope) + if typex.name == 'Object' and type_expr.name in ['String', 'Int', 'Bool']: + self.register_instruction(cil.BoxingNode(expr_i, type_expr.name)) return expr_i @visitor.when(NotNode) diff --git a/src/codegen/visitors/mips_visitor.py b/src/codegen/visitors/mips_visitor.py index adac1990..3c2a32ec 100644 --- a/src/codegen/visitors/mips_visitor.py +++ b/src/codegen/visitors/mips_visitor.py @@ -782,3 +782,4 @@ def visit(self, node:BoxingNode): self.code.append('la $t8, types') self.code.append(f'lw $v0, {4*idx}($t8)') self.code.append(f'sw $v0, 8(${rdest})') + self.var_address[node.dest] = AddrType.REF diff --git a/src/cool_parser/output_parser/parselog.txt b/src/cool_parser/output_parser/parselog.txt index 48eac652..06dff12f 100644 --- a/src/cool_parser/output_parser/parselog.txt +++ b/src/cool_parser/output_parser/parselog.txt @@ -6146,19 +6146,19 @@ yacc.py: 411:State : 32 yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',29,1046) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',29,1046) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',29,1046) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',29,1046) @@ -6183,37 +6183,37 @@ yacc.py: 411:State : 91 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur true . LexToken(ccur,'}',29,1062) yacc.py: 471:Action : Reduce rule [atom -> true] with ['true'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur def_func semi id opar epsilon . LexToken(cpar,')',35,1254) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur def_func semi id opar param_list_empty . LexToken(cpar,')',35,1254) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur def_func semi id opar formals . LexToken(cpar,')',35,1254) @@ -6285,19 +6285,19 @@ yacc.py: 411:State : 113 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar . LexToken(cpar,')',35,1273) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar epsilon . LexToken(cpar,')',35,1273) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar arg_list_empty . LexToken(cpar,')',35,1273) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar args . LexToken(cpar,')',35,1273) @@ -6306,37 +6306,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar args cpar . LexToken(semi,';',35,1274) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['abort','(',[],')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'abort',35,1267), [])) + yacc.py: 506:Result : ((LexToken(id,'abort',35,1267), [])) yacc.py: 410: yacc.py: 411:State : 78 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur func_call . LexToken(semi,';',35,1274) - yacc.py: 471:Action : Reduce rule [factor -> func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar epsilon . LexToken(cpar,')',40,1389) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',40,1389) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals . LexToken(cpar,')',40,1389) @@ -6504,19 +6504,19 @@ yacc.py: 411:State : 113 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar . LexToken(cpar,')',40,1409) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar epsilon . LexToken(cpar,')',40,1409) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar arg_list_empty . LexToken(cpar,')',40,1409) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar args . LexToken(cpar,')',40,1409) @@ -6525,37 +6525,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar args cpar . LexToken(semi,';',40,1410) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['abort','(',[],')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'abort',40,1403), [])) + yacc.py: 506:Result : ((LexToken(id,'abort',40,1403), [])) yacc.py: 410: yacc.py: 411:State : 78 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur func_call . LexToken(semi,';',40,1410) - yacc.py: 471:Action : Reduce rule [factor -> func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['i',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'i',49,1777), LexToken(type ...) + yacc.py: 506:Result : ((LexToken(id,'i',49,1777), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar param . LexToken(cpar,')',49,1784) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',49,1784) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',49,1784) @@ -6734,37 +6734,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',50,1810) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Cons'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( id] with ['i'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['init','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'init',50,1812), [ id opar args cpar] with ['init','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'init',50,1812), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['cons','(',,')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['cons','(',,')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',53,1833) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',53,1833) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','List','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','List','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['car',':','Int'] and goto state 17 - yacc.py: 506:Result : ( ( id colon type] with ['cdr',':','List'] and goto state 17 - yacc.py: 506:Result : ( ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',76,2482) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',76,2482) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',76,2482) @@ -7097,37 +7097,37 @@ yacc.py: 411:State : 92 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur false . LexToken(ccur,'}',76,2499) yacc.py: 471:Action : Reduce rule [atom -> false] with ['false'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',78,2511) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',78,2511) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',78,2511) @@ -7191,37 +7191,37 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',78,2526) yacc.py: 471:Action : Reduce rule [atom -> id] with ['car'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',80,2538) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',80,2538) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',80,2538) @@ -7285,37 +7285,37 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',80,2554) yacc.py: 471:Action : Reduce rule [atom -> id] with ['cdr'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['i',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'i',82,2566), LexToken(type ...) + yacc.py: 506:Result : ((LexToken(id,'i',82,2566), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param . LexToken(comma,',',82,2573) @@ -7375,24 +7375,24 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma id colon type . LexToken(cpar,')',82,2586) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['rest',':','List'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'rest',82,2575), LexToken(t ...) + yacc.py: 506:Result : ((LexToken(id,'rest',82,2575), LexToken(t ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 - yacc.py: 506:Result : ([(LexToken(id,'rest',82,2575), LexToken( ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 + yacc.py: 506:Result : ([(LexToken(id,'rest',82,2575), LexToken( ...) yacc.py: 410: yacc.py: 411:State : 95 yacc.py: 430:Defaulted state 95: Reduce using 33 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param_list . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',82,2586) @@ -7429,42 +7429,42 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur ocur id larrow id . LexToken(semi,';',84,2615) yacc.py: 471:Action : Reduce rule [atom -> id] with ['i'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['car','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['car','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['rest'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['cdr','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['cdr','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['init','(',,')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['init','(',,')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',90,2655) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',90,2655) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Cons','inherits','List','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Cons','inherits','List','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['mylist',':','List'] and goto state 17 - yacc.py: 506:Result : ( ( id colon type] with ['l',':','List'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'l',107,3036), LexToken(typ ...) + yacc.py: 506:Result : ((LexToken(id,'l',107,3036), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param . LexToken(cpar,')',107,3044) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list . LexToken(cpar,')',107,3044) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',107,3044) @@ -7801,12 +7801,12 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if id . LexToken(dot,'.',108,3067) yacc.py: 471:Action : Reduce rule [atom -> id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar epsilon . LexToken(cpar,')',108,3074) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar arg_list_empty . LexToken(cpar,')',108,3074) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar args . LexToken(cpar,')',108,3074) @@ -7844,37 +7844,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar args cpar . LexToken(then,'then',108,3076) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['isNil','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'isNil',108,3068), [])) + yacc.py: 506:Result : ((LexToken(id,'isNil',108,3068), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot func_call . LexToken(then,'then',108,3076) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( string] with ['\n'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',108,3081), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',108,3081), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar epsilon . LexToken(cpar,')',110,3145) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar arg_list_empty . LexToken(cpar,')',110,3145) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar args . LexToken(cpar,')',110,3145) @@ -8043,48 +8043,48 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar args cpar . LexToken(cpar,')',110,3146) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['head','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'head',110,3140), [])) + yacc.py: 506:Result : ((LexToken(id,'head',110,3140), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot func_call . LexToken(cpar,')',110,3146) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_int','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_int',110,3130), [ id opar args cpar] with ['out_int','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_int',110,3130), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( string] with [' '] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',111,3155), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',111,3155), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar epsilon . LexToken(cpar,')',112,3196) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar arg_list_empty . LexToken(cpar,')',112,3196) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar args . LexToken(cpar,')',112,3196) @@ -8288,48 +8288,48 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar args cpar . LexToken(cpar,')',112,3197) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['tail','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'tail',112,3191), [])) + yacc.py: 506:Result : ((LexToken(id,'tail',112,3191), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot func_call . LexToken(cpar,')',112,3197) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['print_list','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'print_list',112,3178), [ id opar args cpar] with ['print_list','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'print_list',112,3178), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print_list','(',,')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print_list','(',,')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',126,3742) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',126,3742) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals . LexToken(cpar,')',126,3742) @@ -8540,12 +8540,12 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow new type . LexToken(dot,'.',128,3783) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','List'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3784), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3784), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3792), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3792), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3800), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3800), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3808), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3808), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3816), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3816), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar epsilon . LexToken(cpar,')',129,3851) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar arg_list_empty . LexToken(cpar,')',129,3851) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar args . LexToken(cpar,')',129,3851) @@ -9023,67 +9023,67 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar args cpar . LexToken(cpar,')',129,3852) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['isNil','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'isNil',129,3845), [])) + yacc.py: 506:Result : ((LexToken(id,'isNil',129,3845), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot func_call . LexToken(cpar,')',129,3852) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 124 - yacc.py: 506:Result : ( comp] with [] and goto state 124 + yacc.py: 506:Result : ( not expr] with ['not',] and goto state 77 - yacc.py: 506:Result : ( not expr] with ['not',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 133 - yacc.py: 506:Result : ( comp] with [] and goto state 133 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['print_list','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'print_list',131,3874), [ id opar args cpar] with ['print_list','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'print_list',131,3874), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar epsilon . LexToken(cpar,')',132,3924) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar arg_list_empty . LexToken(cpar,')',132,3924) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar args . LexToken(cpar,')',132,3924) @@ -9286,42 +9286,42 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar args cpar . LexToken(semi,';',132,3925) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['tail','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'tail',132,3919), [])) + yacc.py: 506:Result : ((LexToken(id,'tail',132,3919), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot func_call . LexToken(semi,';',132,3925) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 204 - yacc.py: 506:Result : ( comp] with [] and goto state 204 + yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 - yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi def_func semi epsilon . LexToken(ccur,'}',138,3957) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi def_func semi feature_list . LexToken(ccur,'}',138,3957) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( ( out_string("Class type is now A\n"); + b : B => out_string("Class type is now B\n"); + c : C => out_string("Class type is now C\n"); + d : D => out_string("Class type is now D\n"); + e : E => out_string("Class type is now E\n"); + o : Object => out_string("Oooops\n"); + esac + }; + + print(var : A) : IO { + (let z : A2I <- new A2I in + { + out_string(z.i2a(var.value())); + out_string(" "); + } + ) + }; main() : Object { { - mylist <- new List.cons(1).cons(2).cons(3).cons(4).cons(5); - while (not mylist.isNil()) loop - { - print_list(mylist); - mylist <- mylist.tail(); - } - pool; - } + avar <- (new A); + while flag loop + { + -- avar <- (new A).set_var(get_int()); + out_string("number "); + print(avar); + if is_even(avar.value()) then + out_string("is even!\n") + else + out_string("is odd!\n") + fi; + -- print(avar); -- prints out answer + class_type(avar); + char <- menu(); + if char = "a" then -- add + { + a_var <- (new A).set_var(get_int()); + avar <- (new B).method2(avar.value(), a_var.value()); + } else + if char = "b" then -- negate + case avar of + c : C => avar <- c.method6(c.value()); + a : A => avar <- a.method3(a.value()); + o : Object => { + out_string("Oooops\n"); + abort(); 0; + }; + esac else + if char = "c" then -- diff + { + a_var <- (new A).set_var(get_int()); + avar <- (new D).method4(avar.value(), a_var.value()); + } else + if char = "d" then avar <- (new C)@A.method5(avar.value()) else + -- factorial + if char = "e" then avar <- (new C)@B.method5(avar.value()) else + -- square + if char = "f" then avar <- (new C)@C.method5(avar.value()) else + -- cube + if char = "g" then -- multiple of 3? + if ((new D).method7(avar.value())) + then -- avar <- (new A).method1(avar.value()) + { + out_string("number "); + print(avar); + out_string("is divisible by 3.\n"); + } + else -- avar <- (new A).set_var(0) + { + out_string("number "); + print(avar); + out_string("is not divisible by 3.\n"); + } + fi else + if char = "h" then + (let x : A in + { + x <- (new E).method6(avar.value()); + (let r : Int <- (avar.value() - (x.value() * 8)) in + { + out_string("number "); + print(avar); + out_string("is equal to "); + print(x); + out_string("times 8 with a remainder of "); + (let a : A2I <- new A2I in + { + out_string(a.i2a(r)); + out_string("\n"); + } + ); -- end let a: + } + ); -- end let r: + avar <- x; + } + ) -- end let x: + else + if char = "j" then avar <- (new A) + else + if char = "q" then flag <- false + else + avar <- (new A).method1(avar.value()) -- divide/8 + fi fi fi fi fi fi fi fi fi fi; + } + pool; + } }; }; + diff --git a/src/test.mips b/src/test.mips index 788addc7..53de5e3b 100644 --- a/src/test.mips +++ b/src/test.mips @@ -43,30 +43,10 @@ la $t9, function_abort_Int sw $t9, 72($v0) la $t9, function_abort_Bool sw $t9, 76($v0) -la $t9, function_isNil_List +la $t9, function_main_Main sw $t9, 80($v0) -la $t9, function_head_List +la $t9, function_test_Main sw $t9, 84($v0) -la $t9, function_tail_List -sw $t9, 88($v0) -la $t9, function_cons_List -sw $t9, 92($v0) -la $t9, function_Cons_Cons -sw $t9, 96($v0) -la $t9, function_isNil_Cons -sw $t9, 100($v0) -la $t9, function_head_Cons -sw $t9, 104($v0) -la $t9, function_tail_Cons -sw $t9, 108($v0) -la $t9, function_init_Cons -sw $t9, 112($v0) -la $t9, function_Main_Main -sw $t9, 116($v0) -la $t9, function_print_list_Main -sw $t9, 120($v0) -la $t9, function_main_Main -sw $t9, 124($v0) # Save types directions in the types array la $t9, types # Save space to locate the type info @@ -263,7 +243,7 @@ li $v0, 9 li $a0, 12 syscall # Filling table methods -la $t8, type_List +la $t8, type_Main sw $t8, 0($v0) # Copying direction to array sw $v0, 20($t9) @@ -272,54 +252,6 @@ move $t8, $v0 # Creating the dispatch table # Allocate dispatch table in the heap li $v0, 9 -li $a0, 32 -syscall -# I save the offset of every one of the methods of this type -# Save the direction of methods -la $v1, methods -# Save the direction of the method function_abort_Object in a0 -lw $a0, 4($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 4($v0) -# Save the direction of the method function_type_name_Object in a0 -lw $a0, 8($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 8($v0) -# Save the direction of the method function_copy_Object in a0 -lw $a0, 12($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 12($v0) -# Save the direction of the method function_isNil_List in a0 -lw $a0, 80($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 16($v0) -# Save the direction of the method function_head_List in a0 -lw $a0, 84($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 20($v0) -# Save the direction of the method function_tail_List in a0 -lw $a0, 88($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 24($v0) -# Save the direction of the method function_cons_List in a0 -lw $a0, 92($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 28($v0) -sw $v0, 8($t8) -# Allocating memory -li $v0, 9 -li $a0, 12 -syscall -# Filling table methods -la $t8, type_Cons -sw $t8, 0($v0) -# Copying direction to array -sw $v0, 24($t9) -# Table addr is now stored in t8 -move $t8, $v0 -# Creating the dispatch table -# Allocate dispatch table in the heap -li $v0, 9 li $a0, 40 syscall # I save the offset of every one of the methods of this type @@ -337,62 +269,6 @@ sw $a0, 8($v0) lw $a0, 12($v1) # Save the direction of the method in his position in the dispatch table sw $a0, 12($v0) -# Save the direction of the method function_isNil_Cons in a0 -lw $a0, 100($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 16($v0) -# Save the direction of the method function_head_Cons in a0 -lw $a0, 104($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 20($v0) -# Save the direction of the method function_tail_Cons in a0 -lw $a0, 108($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 24($v0) -# Save the direction of the method function_cons_List in a0 -lw $a0, 92($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 28($v0) -# Save the direction of the method function_init_Cons in a0 -lw $a0, 112($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 32($v0) -# Save the direction of the method function_Cons_Cons in a0 -lw $a0, 96($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 36($v0) -sw $v0, 8($t8) -# Allocating memory -li $v0, 9 -li $a0, 12 -syscall -# Filling table methods -la $t8, type_Main -sw $t8, 0($v0) -# Copying direction to array -sw $v0, 28($t9) -# Table addr is now stored in t8 -move $t8, $v0 -# Creating the dispatch table -# Allocate dispatch table in the heap -li $v0, 9 -li $a0, 44 -syscall -# I save the offset of every one of the methods of this type -# Save the direction of methods -la $v1, methods -# Save the direction of the method function_abort_Object in a0 -lw $a0, 4($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 4($v0) -# Save the direction of the method function_type_name_Object in a0 -lw $a0, 8($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 8($v0) -# Save the direction of the method function_copy_Object in a0 -lw $a0, 12($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 12($v0) # Save the direction of the method function_out_string_IO in a0 lw $a0, 16($v1) # Save the direction of the method in his position in the dispatch table @@ -409,18 +285,14 @@ sw $a0, 24($v0) lw $a0, 24($v1) # Save the direction of the method in his position in the dispatch table sw $a0, 28($v0) -# Save the direction of the method function_print_list_Main in a0 -lw $a0, 120($v1) +# Save the direction of the method function_main_Main in a0 +lw $a0, 80($v1) # Save the direction of the method in his position in the dispatch table sw $a0, 32($v0) -# Save the direction of the method function_main_Main in a0 -lw $a0, 124($v1) +# Save the direction of the method function_test_Main in a0 +lw $a0, 84($v1) # Save the direction of the method in his position in the dispatch table sw $a0, 36($v0) -# Save the direction of the method function_Main_Main in a0 -lw $a0, 116($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 40($v0) sw $v0, 8($t8) # Copying parents lw $v0, 0($t9) @@ -439,12 +311,6 @@ lw $v0, 16($t9) lw $t8, 8($t9) sw $t8, 4($v0) lw $v0, 20($t9) -lw $t8, 8($t9) -sw $t8, 4($v0) -lw $v0, 24($t9) -lw $t8, 20($t9) -sw $t8, 4($v0) -lw $v0, 28($t9) lw $t8, 16($t9) sw $t8, 4($v0) @@ -459,20 +325,21 @@ addiu $sp, $sp, -4 lw $t0, -0($fp) # Syscall to allocate memory of the object entry in heap li $v0, 9 -li $a0, 16 +li $a0, 12 syscall # Loads the name of the variable and saves the name like the first field la $t9, type_Main sw $t9, 0($v0) # Saves the size of the node -li $t9, 16 +li $t9, 12 sw $t9, 4($v0) move $t0, $v0 # Adding Type Info addr la $t8, types -lw $v0, 28($t8) +lw $v0, 20($t8) sw $v0, 8($t0) -# Static Dispatch of the method Main +lw $t1, -4($fp) +# Static Dispatch of the method main sw $fp, ($sp) addiu $sp, $sp, -4 sw $ra, ($sp) @@ -483,28 +350,7 @@ sw $t0, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory sw $t0, -0($fp) -# This function will consume the arguments -jal function_Main_Main -# Pop ra register of return function of the stack -addiu $sp, $sp, 4 -lw $ra, ($sp) -# Pop fp register from the stack -addiu $sp, $sp, 4 -lw $fp, ($sp) -lw $t0, -4($fp) -# Static Dispatch of the method main -sw $fp, ($sp) -addiu $sp, $sp, -4 -sw $ra, ($sp) -addiu $sp, $sp, -4 -# Push the arguments to the stack -# The rest of the arguments are push into the stack -lw $t1, -0($fp) -sw $t1, ($sp) -addiu $sp, $sp, -4 -# Empty all used registers and saves them to memory -sw $t0, -4($fp) -sw $t1, -0($fp) +sw $t1, -4($fp) # This function will consume the arguments jal function_main_Main # Pop ra register of return function of the stack @@ -1090,35 +936,21 @@ move $a0, $t8 syscall sw $t0, -0($fp) -function_isNil_List: +function_main_Main: # Gets the params from the stack move $fp, $sp # Pops the register with the param value self addiu $fp, $fp, 4 # Gets the frame pointer from the stack -# Updates stack pointer pushing local_isNil_List_internal_0 to the stack +# Updates stack pointer pushing local_main_Main_internal_0 to the stack addiu $sp, $sp, -4 -lw $t0, -4($fp) -# Moving 1 to local_isNil_List_internal_0 -li $t0, 1 -sw $t0, -4($fp) -move $v0, $t0 -# Empty all used registers and saves them to memory -sw $t0, -4($fp) -# Removing all locals from stack -addiu $sp, $sp, 8 -jr $ra - - -function_head_List: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_head_List_internal_0 to the stack +# Updates stack pointer pushing local_main_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_3 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_head_List_internal_1 to the stack +# Updates stack pointer pushing local_main_Main_internal_4 to the stack addiu $sp, $sp, -4 lw $t0, -0($fp) lw $t1, -4($fp) @@ -1126,8 +958,8 @@ lw $t1, -4($fp) # Gets in a0 the actual direction of the dispatch table lw $t9, 8($t0) lw $a0, 8($t9) -# Saves in t8 the direction of function_abort_Object -lw $t8, 4($a0) +# Saves in t8 the direction of function_test_Main +lw $t8, 36($a0) sw $fp, ($sp) addiu $sp, $sp, -4 sw $ra, ($sp) @@ -1136,6 +968,9 @@ addiu $sp, $sp, -4 # The rest of the arguments are push into the stack sw $t0, ($sp) addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 # Empty all used registers and saves them to memory sw $t0, -0($fp) sw $t1, -4($fp) @@ -1150,37 +985,74 @@ lw $fp, ($sp) lw $t0, -4($fp) # saves the return value move $t0, $v0 -lw $t1, -8($fp) -# Moving 0 to local_head_List_internal_1 -li $t1, 0 -sw $t1, -8($fp) -move $v0, $t1 -# Empty all used registers and saves them to memory +lw $t1, -12($fp) +# local_main_Main_internal_2 <- Type of local_main_Main_internal_0 +la $t1, type_String +lw $t2, -16($fp) +# Saves in local_main_Main_internal_3 data_0 +la $t2, data_0 +# local_main_Main_internal_2 <- local_main_Main_internal_2 = local_main_Main_internal_3 +move $t8, $t1 +move $t9, $t2 +loop_6: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_6 +beqz $a1, mismatch_6 +seq $v0, $a0, $a1 +beqz $v0, mismatch_6 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_6 +mismatch_6: +li $v0, 0 +j end_6 +check_6: +bnez $a1, mismatch_6 +li $v0, 1 +end_6: +move $t1, $v0 +# If not local_main_Main_internal_2 goto continue__55 sw $t0, -4($fp) -sw $t1, -8($fp) -# Removing all locals from stack -addiu $sp, $sp, 12 -jr $ra - - -function_tail_List: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_tail_List_internal_0 to the stack +sw $t1, -12($fp) +sw $t2, -16($fp) +beqz $t1, continue__55 +la $a0, dispatch_error +j .raise +continue__55: +lw $t0, -8($fp) +# Static Dispatch of the method length +sw $fp, ($sp) addiu $sp, $sp, -4 -# Updates stack pointer pushing local_tail_List_internal_1 to the stack +sw $ra, ($sp) addiu $sp, $sp, -4 -lw $t0, -0($fp) +# Push the arguments to the stack +# The rest of the arguments are push into the stack lw $t1, -4($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +sw $t1, -4($fp) +# This function will consume the arguments +jal function_length_String +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +lw $t1, -0($fp) +lw $t2, -20($fp) # Find the actual name in the dispatch table # Gets in a0 the actual direction of the dispatch table -lw $t9, 8($t0) +lw $t9, 8($t1) lw $a0, 8($t9) -# Saves in t8 the direction of function_abort_Object -lw $t8, 4($a0) +# Saves in t8 the direction of function_out_int_IO +lw $t8, 20($a0) sw $fp, ($sp) addiu $sp, $sp, -4 sw $ra, ($sp) @@ -1189,9 +1061,13 @@ addiu $sp, $sp, -4 # The rest of the arguments are push into the stack sw $t0, ($sp) addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 # Empty all used registers and saves them to memory -sw $t0, -0($fp) -sw $t1, -4($fp) +sw $t0, -8($fp) +sw $t1, -0($fp) +sw $t2, -20($fp) # This function will consume the arguments jal $t8 # Pop ra register of return function of the stack @@ -1200,1409 +1076,51 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -4($fp) +lw $t0, -20($fp) # saves the return value move $t0, $v0 -lw $t1, -0($fp) -lw $t2, -8($fp) -# Moving self to local_tail_List_internal_1 -move $t2, $t1 -sw $t2, -8($fp) -move $v0, $t2 +move $v0, $t0 # Empty all used registers and saves them to memory -sw $t0, -4($fp) -sw $t1, -0($fp) -sw $t2, -8($fp) +sw $t0, -20($fp) # Removing all locals from stack -addiu $sp, $sp, 12 +addiu $sp, $sp, 24 jr $ra -function_cons_List: +function_test_Main: # Gets the params from the stack move $fp, $sp # Pops the register with the param value self addiu $fp, $fp, 4 -# Pops the register with the param value i +# Pops the register with the param value x addiu $fp, $fp, 4 # Gets the frame pointer from the stack -# Updates stack pointer pushing local_cons_List_internal_0 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_cons_List_internal_1 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_cons_List_internal_2 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_cons_List_internal_3 to the stack +# Updates stack pointer pushing local_test_Main_internal_0 to the stack addiu $sp, $sp, -4 lw $t0, -8($fp) -# Syscall to allocate memory of the object entry in heap +# Saves in local_test_Main_internal_0 data_1 +la $t0, data_1 +lw $t1, -0($fp) +# Initialize new node +li $a0, 12 li $v0, 9 -li $a0, 20 syscall -# Loads the name of the variable and saves the name like the first field -la $t9, type_Cons +la $t9, type_String sw $t9, 0($v0) -# Saves the size of the node -li $t9, 20 +li $t9, 12 sw $t9, 4($v0) -move $t0, $v0 +move $t1, $v0 +# Saving the methods of object # Adding Type Info addr la $t8, types -lw $v0, 24($t8) -sw $v0, 8($t0) -# Static Dispatch of the method Cons -sw $fp, ($sp) -addiu $sp, $sp, -4 -sw $ra, ($sp) -addiu $sp, $sp, -4 -# Push the arguments to the stack -# The rest of the arguments are push into the stack -sw $t0, ($sp) -addiu $sp, $sp, -4 -# Empty all used registers and saves them to memory -sw $t0, -8($fp) -# This function will consume the arguments -jal function_Cons_Cons -# Pop ra register of return function of the stack -addiu $sp, $sp, 4 -lw $ra, ($sp) -# Pop fp register from the stack -addiu $sp, $sp, 4 -lw $fp, ($sp) -lw $t0, -8($fp) -# saves the return value -move $t0, $v0 -lw $t1, -16($fp) -# local_cons_List_internal_2 <- Type of local_cons_List_internal_0 -lw $t1, 0($t0) -lw $t2, -20($fp) -# Saves in local_cons_List_internal_3 data_0 -la $t2, data_0 -# local_cons_List_internal_2 <- local_cons_List_internal_2 = local_cons_List_internal_3 -move $t8, $t1 -move $t9, $t2 -loop_6: -lb $a0, ($t8) -lb $a1, ($t9) -beqz $a0, check_6 -beqz $a1, mismatch_6 -seq $v0, $a0, $a1 -beqz $v0, mismatch_6 -addi $t8, $t8, 1 -addi $t9, $t9, 1 -j loop_6 -mismatch_6: -li $v0, 0 -j end_6 -check_6: -bnez $a1, mismatch_6 -li $v0, 1 -end_6: -move $t1, $v0 -# If not local_cons_List_internal_2 goto continue__76 -sw $t0, -8($fp) -sw $t1, -16($fp) -sw $t2, -20($fp) -beqz $t1, continue__76 -la $a0, dispatch_error -j .raise -continue__76: -lw $t0, -8($fp) -lw $t1, -12($fp) -# Find the actual name in the dispatch table -# Gets in a0 the actual direction of the dispatch table -lw $t9, 8($t0) -lw $a0, 8($t9) -# Saves in t8 the direction of function_init_Cons -lw $t8, 32($a0) -sw $fp, ($sp) -addiu $sp, $sp, -4 -sw $ra, ($sp) -addiu $sp, $sp, -4 -# Push the arguments to the stack -# The rest of the arguments are push into the stack -lw $t2, -4($fp) -sw $t2, ($sp) -addiu $sp, $sp, -4 -# The rest of the arguments are push into the stack -lw $t3, -0($fp) -sw $t3, ($sp) -addiu $sp, $sp, -4 -# The rest of the arguments are push into the stack -sw $t0, ($sp) -addiu $sp, $sp, -4 -# Empty all used registers and saves them to memory -sw $t0, -8($fp) -sw $t1, -12($fp) -sw $t2, -4($fp) -sw $t3, -0($fp) -# This function will consume the arguments -jal $t8 -# Pop ra register of return function of the stack -addiu $sp, $sp, 4 -lw $ra, ($sp) -# Pop fp register from the stack -addiu $sp, $sp, 4 -lw $fp, ($sp) -lw $t0, -12($fp) -# saves the return value -move $t0, $v0 -move $v0, $t0 -# Empty all used registers and saves them to memory -sw $t0, -12($fp) -# Removing all locals from stack -addiu $sp, $sp, 24 -jr $ra - - -function_Cons_Cons: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_Cons_Cons_cdr_0 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Cons_Cons_internal_1 to the stack -addiu $sp, $sp, -4 -lw $t0, -0($fp) -# self . car <- SET 0 -li $t9, 0 -sw $t9, 12($t0) -lw $t1, -4($fp) -# Initialize void node -li $a0, 4 -li $v0, 9 -syscall -# Loads the name of the variable and saves the name like the first field -la $t9, type_Void -sw $t9, 0($v0) -move $t1, $v0 -# self . cdr <- SET local_Cons_Cons_cdr_0 -sw $t1, 16($t0) -lw $t2, -8($fp) -# Moving self to local_Cons_Cons_internal_1 -move $t2, $t0 -sw $t2, -8($fp) -move $v0, $t2 -# Empty all used registers and saves them to memory -sw $t0, -0($fp) -sw $t1, -4($fp) -sw $t2, -8($fp) -# Removing all locals from stack -addiu $sp, $sp, 12 -jr $ra - - -function_isNil_Cons: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_isNil_Cons_internal_0 to the stack -addiu $sp, $sp, -4 -lw $t0, -4($fp) -# Moving 0 to local_isNil_Cons_internal_0 -li $t0, 0 -sw $t0, -4($fp) -move $v0, $t0 -# Empty all used registers and saves them to memory -sw $t0, -4($fp) -# Removing all locals from stack -addiu $sp, $sp, 8 -jr $ra - - -function_head_Cons: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_head_Cons_car_0 to the stack -addiu $sp, $sp, -4 -lw $t0, -0($fp) -lw $t1, -4($fp) -# local_head_Cons_car_0 <- GET self . car -lw $t1, 12($t0) -move $v0, $t1 -# Empty all used registers and saves them to memory -sw $t0, -0($fp) -sw $t1, -4($fp) -# Removing all locals from stack -addiu $sp, $sp, 8 -jr $ra - - -function_tail_Cons: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_tail_Cons_cdr_0 to the stack -addiu $sp, $sp, -4 -lw $t0, -0($fp) -lw $t1, -4($fp) -# local_tail_Cons_cdr_0 <- GET self . cdr -lw $t1, 16($t0) -move $v0, $t1 -# Empty all used registers and saves them to memory -sw $t0, -0($fp) -sw $t1, -4($fp) -# Removing all locals from stack -addiu $sp, $sp, 8 -jr $ra - - -function_init_Cons: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Pops the register with the param value i -addiu $fp, $fp, 4 -# Pops the register with the param value rest -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_init_Cons_internal_0 to the stack -addiu $sp, $sp, -4 -lw $t0, -4($fp) -lw $t1, -8($fp) -# self . car <- SET i -sw $t0, 12($t1) -lw $t2, -0($fp) -# self . cdr <- SET rest -sw $t2, 16($t1) -lw $t3, -12($fp) -# Moving self to local_init_Cons_internal_0 -move $t3, $t1 -sw $t3, -12($fp) -move $v0, $t3 -# Empty all used registers and saves them to memory -sw $t0, -4($fp) -sw $t1, -8($fp) -sw $t2, -0($fp) -sw $t3, -12($fp) -# Removing all locals from stack -addiu $sp, $sp, 16 -jr $ra - - -function_Main_Main: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_Main_Main_mylist_0 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Main_Main_internal_1 to the stack -addiu $sp, $sp, -4 -lw $t0, -4($fp) -# Initialize void node -li $a0, 4 -li $v0, 9 -syscall -# Loads the name of the variable and saves the name like the first field -la $t9, type_Void -sw $t9, 0($v0) -move $t0, $v0 -lw $t1, -0($fp) -# self . mylist <- SET local_Main_Main_mylist_0 -sw $t0, 12($t1) -lw $t2, -8($fp) -# Moving self to local_Main_Main_internal_1 -move $t2, $t1 -sw $t2, -8($fp) -move $v0, $t2 -# Empty all used registers and saves them to memory -sw $t0, -4($fp) -sw $t1, -0($fp) -sw $t2, -8($fp) -# Removing all locals from stack -addiu $sp, $sp, 12 -jr $ra - - -function_print_list_Main: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Pops the register with the param value l -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_print_list_Main_internal_0 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_print_list_Main_internal_1 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_print_list_Main_internal_2 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_print_list_Main_internal_3 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_print_list_Main_internal_4 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_print_list_Main_internal_5 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_print_list_Main_internal_6 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_print_list_Main_internal_7 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_print_list_Main_internal_8 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_print_list_Main_internal_9 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_print_list_Main_internal_10 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_print_list_Main_internal_11 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_print_list_Main_internal_12 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_print_list_Main_internal_13 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_print_list_Main_internal_14 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_print_list_Main_internal_15 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_print_list_Main_internal_16 to the stack -addiu $sp, $sp, -4 -lw $t0, -0($fp) -lw $t1, -12($fp) -# local_print_list_Main_internal_1 <- Type of l -lw $t1, 0($t0) -lw $t2, -16($fp) -# Saves in local_print_list_Main_internal_2 data_0 -la $t2, data_0 -# local_print_list_Main_internal_1 <- local_print_list_Main_internal_1 = local_print_list_Main_internal_2 -move $t8, $t1 -move $t9, $t2 -loop_7: -lb $a0, ($t8) -lb $a1, ($t9) -beqz $a0, check_7 -beqz $a1, mismatch_7 -seq $v0, $a0, $a1 -beqz $v0, mismatch_7 -addi $t8, $t8, 1 -addi $t9, $t9, 1 -j loop_7 -mismatch_7: -li $v0, 0 -j end_7 -check_7: -bnez $a1, mismatch_7 -li $v0, 1 -end_7: -move $t1, $v0 -# If not local_print_list_Main_internal_1 goto continue__133 -sw $t0, -0($fp) -sw $t1, -12($fp) -sw $t2, -16($fp) -beqz $t1, continue__133 -la $a0, dispatch_error -j .raise -continue__133: -lw $t0, -0($fp) -lw $t1, -8($fp) -# Find the actual name in the dispatch table -# Gets in a0 the actual direction of the dispatch table -lw $t9, 8($t0) -lw $a0, 8($t9) -# Saves in t8 the direction of function_isNil_List -lw $t8, 16($a0) -sw $fp, ($sp) -addiu $sp, $sp, -4 -sw $ra, ($sp) -addiu $sp, $sp, -4 -# Push the arguments to the stack -# The rest of the arguments are push into the stack -sw $t0, ($sp) -addiu $sp, $sp, -4 -# Empty all used registers and saves them to memory -sw $t0, -0($fp) -sw $t1, -8($fp) -# This function will consume the arguments -jal $t8 -# Pop ra register of return function of the stack -addiu $sp, $sp, 4 -lw $ra, ($sp) -# Pop fp register from the stack -addiu $sp, $sp, 4 -lw $fp, ($sp) -lw $t0, -8($fp) -# saves the return value -move $t0, $v0 -# If local_print_list_Main_internal_0 goto true__143 -sw $t0, -8($fp) -bnez $t0, true__143 -lw $t0, -0($fp) -lw $t1, -28($fp) -# local_print_list_Main_internal_5 <- Type of l -lw $t1, 0($t0) -lw $t2, -32($fp) -# Saves in local_print_list_Main_internal_6 data_0 -la $t2, data_0 -# local_print_list_Main_internal_5 <- local_print_list_Main_internal_5 = local_print_list_Main_internal_6 -move $t8, $t1 -move $t9, $t2 -loop_8: -lb $a0, ($t8) -lb $a1, ($t9) -beqz $a0, check_8 -beqz $a1, mismatch_8 -seq $v0, $a0, $a1 -beqz $v0, mismatch_8 -addi $t8, $t8, 1 -addi $t9, $t9, 1 -j loop_8 -mismatch_8: -li $v0, 0 -j end_8 -check_8: -bnez $a1, mismatch_8 -li $v0, 1 -end_8: -move $t1, $v0 -# If not local_print_list_Main_internal_5 goto continue__147 -sw $t0, -0($fp) -sw $t1, -28($fp) -sw $t2, -32($fp) -beqz $t1, continue__147 -la $a0, dispatch_error -j .raise -continue__147: -lw $t0, -0($fp) -lw $t1, -24($fp) -# Find the actual name in the dispatch table -# Gets in a0 the actual direction of the dispatch table -lw $t9, 8($t0) -lw $a0, 8($t9) -# Saves in t8 the direction of function_head_List -lw $t8, 20($a0) -sw $fp, ($sp) -addiu $sp, $sp, -4 -sw $ra, ($sp) -addiu $sp, $sp, -4 -# Push the arguments to the stack -# The rest of the arguments are push into the stack -sw $t0, ($sp) -addiu $sp, $sp, -4 -# Empty all used registers and saves them to memory -sw $t0, -0($fp) -sw $t1, -24($fp) -# This function will consume the arguments -jal $t8 -# Pop ra register of return function of the stack -addiu $sp, $sp, 4 -lw $ra, ($sp) -# Pop fp register from the stack -addiu $sp, $sp, 4 -lw $fp, ($sp) -lw $t0, -24($fp) -# saves the return value -move $t0, $v0 -lw $t1, -4($fp) -lw $t2, -36($fp) -# Find the actual name in the dispatch table -# Gets in a0 the actual direction of the dispatch table -lw $t9, 8($t1) -lw $a0, 8($t9) -# Saves in t8 the direction of function_out_int_IO -lw $t8, 20($a0) -sw $fp, ($sp) -addiu $sp, $sp, -4 -sw $ra, ($sp) -addiu $sp, $sp, -4 -# Push the arguments to the stack -# The rest of the arguments are push into the stack -sw $t0, ($sp) -addiu $sp, $sp, -4 -# The rest of the arguments are push into the stack -sw $t1, ($sp) -addiu $sp, $sp, -4 -# Empty all used registers and saves them to memory -sw $t0, -24($fp) -sw $t1, -4($fp) -sw $t2, -36($fp) -# This function will consume the arguments -jal $t8 -# Pop ra register of return function of the stack -addiu $sp, $sp, 4 -lw $ra, ($sp) -# Pop fp register from the stack -addiu $sp, $sp, 4 -lw $fp, ($sp) -lw $t0, -36($fp) -# saves the return value -move $t0, $v0 -lw $t1, -40($fp) -# Saves in local_print_list_Main_internal_8 data_1 -la $t1, data_1 -lw $t2, -4($fp) -lw $t3, -44($fp) -# Find the actual name in the dispatch table -# Gets in a0 the actual direction of the dispatch table -lw $t9, 8($t2) -lw $a0, 8($t9) -# Saves in t8 the direction of function_out_string_IO -lw $t8, 16($a0) -sw $fp, ($sp) -addiu $sp, $sp, -4 -sw $ra, ($sp) -addiu $sp, $sp, -4 -# Push the arguments to the stack -# The rest of the arguments are push into the stack -sw $t1, ($sp) -addiu $sp, $sp, -4 -# The rest of the arguments are push into the stack -sw $t2, ($sp) -addiu $sp, $sp, -4 -# Empty all used registers and saves them to memory -sw $t0, -36($fp) -sw $t1, -40($fp) -sw $t2, -4($fp) -sw $t3, -44($fp) -# This function will consume the arguments -jal $t8 -# Pop ra register of return function of the stack -addiu $sp, $sp, 4 -lw $ra, ($sp) -# Pop fp register from the stack -addiu $sp, $sp, 4 -lw $fp, ($sp) -lw $t0, -44($fp) -# saves the return value -move $t0, $v0 -lw $t1, -0($fp) -lw $t2, -52($fp) -# local_print_list_Main_internal_11 <- Type of l -lw $t2, 0($t1) -lw $t3, -56($fp) -# Saves in local_print_list_Main_internal_12 data_0 -la $t3, data_0 -# local_print_list_Main_internal_11 <- local_print_list_Main_internal_11 = local_print_list_Main_internal_12 -move $t8, $t2 -move $t9, $t3 -loop_9: -lb $a0, ($t8) -lb $a1, ($t9) -beqz $a0, check_9 -beqz $a1, mismatch_9 -seq $v0, $a0, $a1 -beqz $v0, mismatch_9 -addi $t8, $t8, 1 -addi $t9, $t9, 1 -j loop_9 -mismatch_9: -li $v0, 0 -j end_9 -check_9: -bnez $a1, mismatch_9 -li $v0, 1 -end_9: -move $t2, $v0 -# If not local_print_list_Main_internal_11 goto continue__168 -sw $t0, -44($fp) -sw $t1, -0($fp) -sw $t2, -52($fp) -sw $t3, -56($fp) -beqz $t2, continue__168 -la $a0, dispatch_error -j .raise -continue__168: -lw $t0, -0($fp) -lw $t1, -48($fp) -# Find the actual name in the dispatch table -# Gets in a0 the actual direction of the dispatch table -lw $t9, 8($t0) -lw $a0, 8($t9) -# Saves in t8 the direction of function_tail_List -lw $t8, 24($a0) -sw $fp, ($sp) -addiu $sp, $sp, -4 -sw $ra, ($sp) -addiu $sp, $sp, -4 -# Push the arguments to the stack -# The rest of the arguments are push into the stack -sw $t0, ($sp) -addiu $sp, $sp, -4 -# Empty all used registers and saves them to memory -sw $t0, -0($fp) -sw $t1, -48($fp) -# This function will consume the arguments -jal $t8 -# Pop ra register of return function of the stack -addiu $sp, $sp, 4 -lw $ra, ($sp) -# Pop fp register from the stack -addiu $sp, $sp, 4 -lw $fp, ($sp) -lw $t0, -48($fp) -# saves the return value -move $t0, $v0 -lw $t1, -4($fp) -lw $t2, -60($fp) -# Find the actual name in the dispatch table -# Gets in a0 the actual direction of the dispatch table -lw $t9, 8($t1) -lw $a0, 8($t9) -# Saves in t8 the direction of function_print_list_Main -lw $t8, 32($a0) -sw $fp, ($sp) -addiu $sp, $sp, -4 -sw $ra, ($sp) -addiu $sp, $sp, -4 -# Push the arguments to the stack -# The rest of the arguments are push into the stack -sw $t0, ($sp) -addiu $sp, $sp, -4 -# The rest of the arguments are push into the stack -sw $t1, ($sp) -addiu $sp, $sp, -4 -# Empty all used registers and saves them to memory -sw $t0, -48($fp) -sw $t1, -4($fp) -sw $t2, -60($fp) -# This function will consume the arguments -jal $t8 -# Pop ra register of return function of the stack -addiu $sp, $sp, 4 -lw $ra, ($sp) -# Pop fp register from the stack -addiu $sp, $sp, 4 -lw $fp, ($sp) -lw $t0, -60($fp) -# saves the return value -move $t0, $v0 -lw $t1, -64($fp) -# Moving local_print_list_Main_internal_13 to local_print_list_Main_internal_14 -move $t1, $t0 -sw $t1, -64($fp) -lw $t2, -20($fp) -# Moving local_print_list_Main_internal_14 to local_print_list_Main_internal_3 -move $t2, $t1 -sw $t2, -20($fp) -sw $t0, -60($fp) -sw $t1, -64($fp) -sw $t2, -20($fp) -j end__143 -true__143: -lw $t0, -68($fp) -# Saves in local_print_list_Main_internal_15 data_2 -la $t0, data_2 -lw $t1, -4($fp) -lw $t2, -72($fp) -# Find the actual name in the dispatch table -# Gets in a0 the actual direction of the dispatch table -lw $t9, 8($t1) -lw $a0, 8($t9) -# Saves in t8 the direction of function_out_string_IO -lw $t8, 16($a0) -sw $fp, ($sp) -addiu $sp, $sp, -4 -sw $ra, ($sp) -addiu $sp, $sp, -4 -# Push the arguments to the stack -# The rest of the arguments are push into the stack -sw $t0, ($sp) -addiu $sp, $sp, -4 -# The rest of the arguments are push into the stack -sw $t1, ($sp) -addiu $sp, $sp, -4 -# Empty all used registers and saves them to memory -sw $t0, -68($fp) -sw $t1, -4($fp) -sw $t2, -72($fp) -# This function will consume the arguments -jal $t8 -# Pop ra register of return function of the stack -addiu $sp, $sp, 4 -lw $ra, ($sp) -# Pop fp register from the stack -addiu $sp, $sp, 4 -lw $fp, ($sp) -lw $t0, -72($fp) -# saves the return value -move $t0, $v0 -lw $t1, -20($fp) -# Moving local_print_list_Main_internal_16 to local_print_list_Main_internal_3 -move $t1, $t0 -sw $t1, -20($fp) -sw $t0, -72($fp) -sw $t1, -20($fp) -end__143: -lw $t0, -20($fp) -move $v0, $t0 -# Empty all used registers and saves them to memory -sw $t0, -20($fp) -# Removing all locals from stack -addiu $sp, $sp, 76 -jr $ra - - -function_main_Main: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_main_Main_internal_0 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_1 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_2 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_3 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_4 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_5 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_6 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_7 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_8 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_9 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_10 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_11 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_12 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_13 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_14 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_15 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_16 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_17 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_mylist_18 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_19 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_20 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_21 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_mylist_22 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_23 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_mylist_24 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_25 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_26 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_27 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_28 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_29 to the stack -addiu $sp, $sp, -4 -lw $t0, -4($fp) -# Syscall to allocate memory of the object entry in heap -li $v0, 9 -li $a0, 12 -syscall -# Loads the name of the variable and saves the name like the first field -la $t9, type_List -sw $t9, 0($v0) -# Saves the size of the node -li $t9, 12 -sw $t9, 4($v0) -move $t0, $v0 -# Adding Type Info addr -la $t8, types -lw $v0, 20($t8) -sw $v0, 8($t0) -lw $t1, -12($fp) -# local_main_Main_internal_2 <- Type of local_main_Main_internal_0 -lw $t1, 0($t0) -lw $t2, -16($fp) -# Saves in local_main_Main_internal_3 data_0 -la $t2, data_0 -# local_main_Main_internal_2 <- local_main_Main_internal_2 = local_main_Main_internal_3 -move $t8, $t1 -move $t9, $t2 -loop_10: -lb $a0, ($t8) -lb $a1, ($t9) -beqz $a0, check_10 -beqz $a1, mismatch_10 -seq $v0, $a0, $a1 -beqz $v0, mismatch_10 -addi $t8, $t8, 1 -addi $t9, $t9, 1 -j loop_10 -mismatch_10: -li $v0, 0 -j end_10 -check_10: -bnez $a1, mismatch_10 -li $v0, 1 -end_10: -move $t1, $v0 -# If not local_main_Main_internal_2 goto continue__202 -sw $t0, -4($fp) -sw $t1, -12($fp) -sw $t2, -16($fp) -beqz $t1, continue__202 -la $a0, dispatch_error -j .raise -continue__202: -lw $t0, -4($fp) -lw $t1, -8($fp) -# Find the actual name in the dispatch table -# Gets in a0 the actual direction of the dispatch table -lw $t9, 8($t0) -lw $a0, 8($t9) -# Saves in t8 the direction of function_cons_List -lw $t8, 28($a0) -sw $fp, ($sp) -addiu $sp, $sp, -4 -sw $ra, ($sp) -addiu $sp, $sp, -4 -# Push the arguments to the stack -# The rest of the arguments are push into the stack -li $t9, 1 -sw $t9, ($sp) -addiu $sp, $sp, -4 -# The rest of the arguments are push into the stack -sw $t0, ($sp) -addiu $sp, $sp, -4 -# Empty all used registers and saves them to memory -sw $t0, -4($fp) -sw $t1, -8($fp) -# This function will consume the arguments -jal $t8 -# Pop ra register of return function of the stack -addiu $sp, $sp, 4 -lw $ra, ($sp) -# Pop fp register from the stack -addiu $sp, $sp, 4 -lw $fp, ($sp) -lw $t0, -8($fp) -# saves the return value -move $t0, $v0 -lw $t1, -24($fp) -# local_main_Main_internal_5 <- Type of local_main_Main_internal_1 -lw $t1, 0($t0) -lw $t2, -28($fp) -# Saves in local_main_Main_internal_6 data_0 -la $t2, data_0 -# local_main_Main_internal_5 <- local_main_Main_internal_5 = local_main_Main_internal_6 -move $t8, $t1 -move $t9, $t2 -loop_11: -lb $a0, ($t8) -lb $a1, ($t9) -beqz $a0, check_11 -beqz $a1, mismatch_11 -seq $v0, $a0, $a1 -beqz $v0, mismatch_11 -addi $t8, $t8, 1 -addi $t9, $t9, 1 -j loop_11 -mismatch_11: -li $v0, 0 -j end_11 -check_11: -bnez $a1, mismatch_11 -li $v0, 1 -end_11: -move $t1, $v0 -# If not local_main_Main_internal_5 goto continue__215 -sw $t0, -8($fp) -sw $t1, -24($fp) -sw $t2, -28($fp) -beqz $t1, continue__215 -la $a0, dispatch_error -j .raise -continue__215: -lw $t0, -8($fp) -lw $t1, -20($fp) -# Find the actual name in the dispatch table -# Gets in a0 the actual direction of the dispatch table -lw $t9, 8($t0) -lw $a0, 8($t9) -# Saves in t8 the direction of function_cons_List -lw $t8, 28($a0) -sw $fp, ($sp) -addiu $sp, $sp, -4 -sw $ra, ($sp) -addiu $sp, $sp, -4 -# Push the arguments to the stack -# The rest of the arguments are push into the stack -li $t9, 2 -sw $t9, ($sp) -addiu $sp, $sp, -4 -# The rest of the arguments are push into the stack -sw $t0, ($sp) -addiu $sp, $sp, -4 +lw $v0, 8($t8) +sw $v0, 8($t1) +move $v0, $t0 # Empty all used registers and saves them to memory sw $t0, -8($fp) -sw $t1, -20($fp) -# This function will consume the arguments -jal $t8 -# Pop ra register of return function of the stack -addiu $sp, $sp, 4 -lw $ra, ($sp) -# Pop fp register from the stack -addiu $sp, $sp, 4 -lw $fp, ($sp) -lw $t0, -20($fp) -# saves the return value -move $t0, $v0 -lw $t1, -36($fp) -# local_main_Main_internal_8 <- Type of local_main_Main_internal_4 -lw $t1, 0($t0) -lw $t2, -40($fp) -# Saves in local_main_Main_internal_9 data_0 -la $t2, data_0 -# local_main_Main_internal_8 <- local_main_Main_internal_8 = local_main_Main_internal_9 -move $t8, $t1 -move $t9, $t2 -loop_12: -lb $a0, ($t8) -lb $a1, ($t9) -beqz $a0, check_12 -beqz $a1, mismatch_12 -seq $v0, $a0, $a1 -beqz $v0, mismatch_12 -addi $t8, $t8, 1 -addi $t9, $t9, 1 -j loop_12 -mismatch_12: -li $v0, 0 -j end_12 -check_12: -bnez $a1, mismatch_12 -li $v0, 1 -end_12: -move $t1, $v0 -# If not local_main_Main_internal_8 goto continue__228 -sw $t0, -20($fp) -sw $t1, -36($fp) -sw $t2, -40($fp) -beqz $t1, continue__228 -la $a0, dispatch_error -j .raise -continue__228: -lw $t0, -20($fp) -lw $t1, -32($fp) -# Find the actual name in the dispatch table -# Gets in a0 the actual direction of the dispatch table -lw $t9, 8($t0) -lw $a0, 8($t9) -# Saves in t8 the direction of function_cons_List -lw $t8, 28($a0) -sw $fp, ($sp) -addiu $sp, $sp, -4 -sw $ra, ($sp) -addiu $sp, $sp, -4 -# Push the arguments to the stack -# The rest of the arguments are push into the stack -li $t9, 3 -sw $t9, ($sp) -addiu $sp, $sp, -4 -# The rest of the arguments are push into the stack -sw $t0, ($sp) -addiu $sp, $sp, -4 -# Empty all used registers and saves them to memory -sw $t0, -20($fp) -sw $t1, -32($fp) -# This function will consume the arguments -jal $t8 -# Pop ra register of return function of the stack -addiu $sp, $sp, 4 -lw $ra, ($sp) -# Pop fp register from the stack -addiu $sp, $sp, 4 -lw $fp, ($sp) -lw $t0, -32($fp) -# saves the return value -move $t0, $v0 -lw $t1, -48($fp) -# local_main_Main_internal_11 <- Type of local_main_Main_internal_7 -lw $t1, 0($t0) -lw $t2, -52($fp) -# Saves in local_main_Main_internal_12 data_0 -la $t2, data_0 -# local_main_Main_internal_11 <- local_main_Main_internal_11 = local_main_Main_internal_12 -move $t8, $t1 -move $t9, $t2 -loop_13: -lb $a0, ($t8) -lb $a1, ($t9) -beqz $a0, check_13 -beqz $a1, mismatch_13 -seq $v0, $a0, $a1 -beqz $v0, mismatch_13 -addi $t8, $t8, 1 -addi $t9, $t9, 1 -j loop_13 -mismatch_13: -li $v0, 0 -j end_13 -check_13: -bnez $a1, mismatch_13 -li $v0, 1 -end_13: -move $t1, $v0 -# If not local_main_Main_internal_11 goto continue__241 -sw $t0, -32($fp) -sw $t1, -48($fp) -sw $t2, -52($fp) -beqz $t1, continue__241 -la $a0, dispatch_error -j .raise -continue__241: -lw $t0, -32($fp) -lw $t1, -44($fp) -# Find the actual name in the dispatch table -# Gets in a0 the actual direction of the dispatch table -lw $t9, 8($t0) -lw $a0, 8($t9) -# Saves in t8 the direction of function_cons_List -lw $t8, 28($a0) -sw $fp, ($sp) -addiu $sp, $sp, -4 -sw $ra, ($sp) -addiu $sp, $sp, -4 -# Push the arguments to the stack -# The rest of the arguments are push into the stack -li $t9, 4 -sw $t9, ($sp) -addiu $sp, $sp, -4 -# The rest of the arguments are push into the stack -sw $t0, ($sp) -addiu $sp, $sp, -4 -# Empty all used registers and saves them to memory -sw $t0, -32($fp) -sw $t1, -44($fp) -# This function will consume the arguments -jal $t8 -# Pop ra register of return function of the stack -addiu $sp, $sp, 4 -lw $ra, ($sp) -# Pop fp register from the stack -addiu $sp, $sp, 4 -lw $fp, ($sp) -lw $t0, -44($fp) -# saves the return value -move $t0, $v0 -lw $t1, -60($fp) -# local_main_Main_internal_14 <- Type of local_main_Main_internal_10 -lw $t1, 0($t0) -lw $t2, -64($fp) -# Saves in local_main_Main_internal_15 data_0 -la $t2, data_0 -# local_main_Main_internal_14 <- local_main_Main_internal_14 = local_main_Main_internal_15 -move $t8, $t1 -move $t9, $t2 -loop_14: -lb $a0, ($t8) -lb $a1, ($t9) -beqz $a0, check_14 -beqz $a1, mismatch_14 -seq $v0, $a0, $a1 -beqz $v0, mismatch_14 -addi $t8, $t8, 1 -addi $t9, $t9, 1 -j loop_14 -mismatch_14: -li $v0, 0 -j end_14 -check_14: -bnez $a1, mismatch_14 -li $v0, 1 -end_14: -move $t1, $v0 -# If not local_main_Main_internal_14 goto continue__254 -sw $t0, -44($fp) -sw $t1, -60($fp) -sw $t2, -64($fp) -beqz $t1, continue__254 -la $a0, dispatch_error -j .raise -continue__254: -lw $t0, -44($fp) -lw $t1, -56($fp) -# Find the actual name in the dispatch table -# Gets in a0 the actual direction of the dispatch table -lw $t9, 8($t0) -lw $a0, 8($t9) -# Saves in t8 the direction of function_cons_List -lw $t8, 28($a0) -sw $fp, ($sp) -addiu $sp, $sp, -4 -sw $ra, ($sp) -addiu $sp, $sp, -4 -# Push the arguments to the stack -# The rest of the arguments are push into the stack -li $t9, 5 -sw $t9, ($sp) -addiu $sp, $sp, -4 -# The rest of the arguments are push into the stack -sw $t0, ($sp) -addiu $sp, $sp, -4 -# Empty all used registers and saves them to memory -sw $t0, -44($fp) -sw $t1, -56($fp) -# This function will consume the arguments -jal $t8 -# Pop ra register of return function of the stack -addiu $sp, $sp, 4 -lw $ra, ($sp) -# Pop fp register from the stack -addiu $sp, $sp, 4 -lw $fp, ($sp) -lw $t0, -56($fp) -# saves the return value -move $t0, $v0 -lw $t1, -0($fp) -# self . mylist <- SET local_main_Main_internal_13 -sw $t0, 12($t1) -lw $t2, -68($fp) -# Initialize void node -li $a0, 4 -li $v0, 9 -syscall -# Loads the name of the variable and saves the name like the first field -la $t9, type_Void -sw $t9, 0($v0) -move $t2, $v0 -sw $t0, -56($fp) -sw $t1, -0($fp) -sw $t2, -68($fp) -start__265: -lw $t0, -0($fp) -lw $t1, -76($fp) -# local_main_Main_mylist_18 <- GET self . mylist -lw $t1, 12($t0) -lw $t2, -84($fp) -# local_main_Main_internal_20 <- Type of local_main_Main_mylist_18 -lw $t2, 0($t1) -lw $t3, -88($fp) -# Saves in local_main_Main_internal_21 data_0 -la $t3, data_0 -# local_main_Main_internal_20 <- local_main_Main_internal_20 = local_main_Main_internal_21 -move $t8, $t2 -move $t9, $t3 -loop_15: -lb $a0, ($t8) -lb $a1, ($t9) -beqz $a0, check_15 -beqz $a1, mismatch_15 -seq $v0, $a0, $a1 -beqz $v0, mismatch_15 -addi $t8, $t8, 1 -addi $t9, $t9, 1 -j loop_15 -mismatch_15: -li $v0, 0 -j end_15 -check_15: -bnez $a1, mismatch_15 -li $v0, 1 -end_15: -move $t2, $v0 -# If not local_main_Main_internal_20 goto continue__273 -sw $t0, -0($fp) -sw $t1, -76($fp) -sw $t2, -84($fp) -sw $t3, -88($fp) -beqz $t2, continue__273 -la $a0, dispatch_error -j .raise -continue__273: -lw $t0, -76($fp) -lw $t1, -80($fp) -# Find the actual name in the dispatch table -# Gets in a0 the actual direction of the dispatch table -lw $t9, 8($t0) -lw $a0, 8($t9) -# Saves in t8 the direction of function_isNil_List -lw $t8, 16($a0) -sw $fp, ($sp) -addiu $sp, $sp, -4 -sw $ra, ($sp) -addiu $sp, $sp, -4 -# Push the arguments to the stack -# The rest of the arguments are push into the stack -sw $t0, ($sp) -addiu $sp, $sp, -4 -# Empty all used registers and saves them to memory -sw $t0, -76($fp) -sw $t1, -80($fp) -# This function will consume the arguments -jal $t8 -# Pop ra register of return function of the stack -addiu $sp, $sp, 4 -lw $ra, ($sp) -# Pop fp register from the stack -addiu $sp, $sp, 4 -lw $fp, ($sp) -lw $t0, -80($fp) -# saves the return value -move $t0, $v0 -lw $t1, -72($fp) -# local_main_Main_internal_17 <- not local_main_Main_internal_19 -beqz $t0, false_16 -li $t1, 0 -j end_16 -false_16: -li $t1, 1 -end_16: -# If not local_main_Main_internal_17 goto end__265 -sw $t0, -80($fp) -sw $t1, -72($fp) -beqz $t1, end__265 -lw $t0, -0($fp) -lw $t1, -92($fp) -# local_main_Main_mylist_22 <- GET self . mylist -lw $t1, 12($t0) -lw $t2, -96($fp) -# Find the actual name in the dispatch table -# Gets in a0 the actual direction of the dispatch table -lw $t9, 8($t0) -lw $a0, 8($t9) -# Saves in t8 the direction of function_print_list_Main -lw $t8, 32($a0) -sw $fp, ($sp) -addiu $sp, $sp, -4 -sw $ra, ($sp) -addiu $sp, $sp, -4 -# Push the arguments to the stack -# The rest of the arguments are push into the stack -sw $t1, ($sp) -addiu $sp, $sp, -4 -# The rest of the arguments are push into the stack -sw $t0, ($sp) -addiu $sp, $sp, -4 -# Empty all used registers and saves them to memory -sw $t0, -0($fp) -sw $t1, -92($fp) -sw $t2, -96($fp) -# This function will consume the arguments -jal $t8 -# Pop ra register of return function of the stack -addiu $sp, $sp, 4 -lw $ra, ($sp) -# Pop fp register from the stack -addiu $sp, $sp, 4 -lw $fp, ($sp) -lw $t0, -96($fp) -# saves the return value -move $t0, $v0 -lw $t1, -0($fp) -lw $t2, -100($fp) -# local_main_Main_mylist_24 <- GET self . mylist -lw $t2, 12($t1) -lw $t3, -108($fp) -# local_main_Main_internal_26 <- Type of local_main_Main_mylist_24 -lw $t3, 0($t2) -lw $t4, -112($fp) -# Saves in local_main_Main_internal_27 data_0 -la $t4, data_0 -# local_main_Main_internal_26 <- local_main_Main_internal_26 = local_main_Main_internal_27 -move $t8, $t3 -move $t9, $t4 -loop_17: -lb $a0, ($t8) -lb $a1, ($t9) -beqz $a0, check_17 -beqz $a1, mismatch_17 -seq $v0, $a0, $a1 -beqz $v0, mismatch_17 -addi $t8, $t8, 1 -addi $t9, $t9, 1 -j loop_17 -mismatch_17: -li $v0, 0 -j end_17 -check_17: -bnez $a1, mismatch_17 -li $v0, 1 -end_17: -move $t3, $v0 -# If not local_main_Main_internal_26 goto continue__294 -sw $t0, -96($fp) sw $t1, -0($fp) -sw $t2, -100($fp) -sw $t3, -108($fp) -sw $t4, -112($fp) -beqz $t3, continue__294 -la $a0, dispatch_error -j .raise -continue__294: -lw $t0, -100($fp) -lw $t1, -104($fp) -# Find the actual name in the dispatch table -# Gets in a0 the actual direction of the dispatch table -lw $t9, 8($t0) -lw $a0, 8($t9) -# Saves in t8 the direction of function_tail_List -lw $t8, 24($a0) -sw $fp, ($sp) -addiu $sp, $sp, -4 -sw $ra, ($sp) -addiu $sp, $sp, -4 -# Push the arguments to the stack -# The rest of the arguments are push into the stack -sw $t0, ($sp) -addiu $sp, $sp, -4 -# Empty all used registers and saves them to memory -sw $t0, -100($fp) -sw $t1, -104($fp) -# This function will consume the arguments -jal $t8 -# Pop ra register of return function of the stack -addiu $sp, $sp, 4 -lw $ra, ($sp) -# Pop fp register from the stack -addiu $sp, $sp, 4 -lw $fp, ($sp) -lw $t0, -104($fp) -# saves the return value -move $t0, $v0 -lw $t1, -0($fp) -# self . mylist <- SET local_main_Main_internal_25 -sw $t0, 12($t1) -lw $t2, -116($fp) -# Moving local_main_Main_internal_25 to local_main_Main_internal_28 -move $t2, $t0 -sw $t2, -116($fp) -lw $t3, -68($fp) -# Moving local_main_Main_internal_28 to local_main_Main_internal_16 -move $t3, $t2 -sw $t3, -68($fp) -sw $t0, -104($fp) -sw $t1, -0($fp) -sw $t2, -116($fp) -sw $t3, -68($fp) -j start__265 -end__265: -lw $t0, -68($fp) -lw $t1, -120($fp) -# Moving local_main_Main_internal_16 to local_main_Main_internal_29 -move $t1, $t0 -sw $t1, -120($fp) -move $v0, $t1 -# Empty all used registers and saves them to memory -sw $t0, -68($fp) -sw $t1, -120($fp) # Removing all locals from stack -addiu $sp, $sp, 124 +addiu $sp, $sp, 12 jr $ra # Raise exception method @@ -2628,16 +1146,12 @@ type_IO: .asciiz "IO" type_String: .asciiz "String" type_Int: .asciiz "Int" type_Bool: .asciiz "Bool" -type_List: .asciiz "List" -type_Cons: .asciiz "Cons" type_Main: .asciiz "Main" -methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 type_Void: .asciiz "Void" -types: .word 0, 0, 0, 0, 0, 0, 0, 0 +types: .word 0, 0, 0, 0, 0, 0 data_0: .asciiz "Void" -data_1: .asciiz " " -data_2: .asciiz " -" +data_1: .asciiz "HI" zero_error: .asciiz "Division by zero error " case_void_error: .asciiz "Case on void error diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index 9fb73328..b3825a9b 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -3348,14 +3348,14 @@ bnez $a1, mismatch_14 li $v0, 1 end_14: move $t1, $v0 -# If not local_method6_E_internal_4 goto continue__400 +# If not local_method6_E_internal_4 goto continue__402 sw $t0, -16($fp) sw $t1, -24($fp) sw $t2, -28($fp) -beqz $t1, continue__400 +beqz $t1, continue__402 la $a0, dispatch_error j .raise -continue__400: +continue__402: lw $t0, -16($fp) lw $t1, -20($fp) # Find the actual name in the dispatch table @@ -3502,11 +3502,11 @@ bnez $a1, mismatch_15 li $v0, 1 end_15: move $t2, $v0 -# If local_c2i_A2I_internal_0 goto true__421 +# If local_c2i_A2I_internal_0 goto true__423 sw $t0, -12($fp) sw $t1, -0($fp) sw $t2, -8($fp) -bnez $t2, true__421 +bnez $t2, true__423 lw $t0, -24($fp) # Saves in local_c2i_A2I_internal_4 data_2 la $t0, data_2 @@ -3533,11 +3533,11 @@ bnez $a1, mismatch_16 li $v0, 1 end_16: move $t2, $v0 -# If local_c2i_A2I_internal_3 goto true__428 +# If local_c2i_A2I_internal_3 goto true__430 sw $t0, -24($fp) sw $t1, -0($fp) sw $t2, -20($fp) -bnez $t2, true__428 +bnez $t2, true__430 lw $t0, -36($fp) # Saves in local_c2i_A2I_internal_7 data_3 la $t0, data_3 @@ -3564,11 +3564,11 @@ bnez $a1, mismatch_17 li $v0, 1 end_17: move $t2, $v0 -# If local_c2i_A2I_internal_6 goto true__435 +# If local_c2i_A2I_internal_6 goto true__437 sw $t0, -36($fp) sw $t1, -0($fp) sw $t2, -32($fp) -bnez $t2, true__435 +bnez $t2, true__437 lw $t0, -48($fp) # Saves in local_c2i_A2I_internal_10 data_4 la $t0, data_4 @@ -3595,11 +3595,11 @@ bnez $a1, mismatch_18 li $v0, 1 end_18: move $t2, $v0 -# If local_c2i_A2I_internal_9 goto true__442 +# If local_c2i_A2I_internal_9 goto true__444 sw $t0, -48($fp) sw $t1, -0($fp) sw $t2, -44($fp) -bnez $t2, true__442 +bnez $t2, true__444 lw $t0, -60($fp) # Saves in local_c2i_A2I_internal_13 data_5 la $t0, data_5 @@ -3626,11 +3626,11 @@ bnez $a1, mismatch_19 li $v0, 1 end_19: move $t2, $v0 -# If local_c2i_A2I_internal_12 goto true__449 +# If local_c2i_A2I_internal_12 goto true__451 sw $t0, -60($fp) sw $t1, -0($fp) sw $t2, -56($fp) -bnez $t2, true__449 +bnez $t2, true__451 lw $t0, -72($fp) # Saves in local_c2i_A2I_internal_16 data_6 la $t0, data_6 @@ -3657,11 +3657,11 @@ bnez $a1, mismatch_20 li $v0, 1 end_20: move $t2, $v0 -# If local_c2i_A2I_internal_15 goto true__456 +# If local_c2i_A2I_internal_15 goto true__458 sw $t0, -72($fp) sw $t1, -0($fp) sw $t2, -68($fp) -bnez $t2, true__456 +bnez $t2, true__458 lw $t0, -84($fp) # Saves in local_c2i_A2I_internal_19 data_7 la $t0, data_7 @@ -3688,11 +3688,11 @@ bnez $a1, mismatch_21 li $v0, 1 end_21: move $t2, $v0 -# If local_c2i_A2I_internal_18 goto true__463 +# If local_c2i_A2I_internal_18 goto true__465 sw $t0, -84($fp) sw $t1, -0($fp) sw $t2, -80($fp) -bnez $t2, true__463 +bnez $t2, true__465 lw $t0, -96($fp) # Saves in local_c2i_A2I_internal_22 data_8 la $t0, data_8 @@ -3719,11 +3719,11 @@ bnez $a1, mismatch_22 li $v0, 1 end_22: move $t2, $v0 -# If local_c2i_A2I_internal_21 goto true__470 +# If local_c2i_A2I_internal_21 goto true__472 sw $t0, -96($fp) sw $t1, -0($fp) sw $t2, -92($fp) -bnez $t2, true__470 +bnez $t2, true__472 lw $t0, -108($fp) # Saves in local_c2i_A2I_internal_25 data_9 la $t0, data_9 @@ -3750,11 +3750,11 @@ bnez $a1, mismatch_23 li $v0, 1 end_23: move $t2, $v0 -# If local_c2i_A2I_internal_24 goto true__477 +# If local_c2i_A2I_internal_24 goto true__479 sw $t0, -108($fp) sw $t1, -0($fp) sw $t2, -104($fp) -bnez $t2, true__477 +bnez $t2, true__479 lw $t0, -120($fp) # Saves in local_c2i_A2I_internal_28 data_10 la $t0, data_10 @@ -3781,11 +3781,11 @@ bnez $a1, mismatch_24 li $v0, 1 end_24: move $t2, $v0 -# If local_c2i_A2I_internal_27 goto true__484 +# If local_c2i_A2I_internal_27 goto true__486 sw $t0, -120($fp) sw $t1, -0($fp) sw $t2, -116($fp) -bnez $t2, true__484 +bnez $t2, true__486 lw $t0, -4($fp) lw $t1, -128($fp) # Find the actual name in the dispatch table @@ -3827,14 +3827,14 @@ sw $t2, -124($fp) sw $t0, -128($fp) sw $t1, -132($fp) sw $t2, -124($fp) -j end__484 -true__484: +j end__486 +true__486: lw $t0, -124($fp) # Moving 9 to local_c2i_A2I_internal_29 li $t0, 9 sw $t0, -124($fp) sw $t0, -124($fp) -end__484: +end__486: lw $t0, -124($fp) lw $t1, -112($fp) # Moving local_c2i_A2I_internal_29 to local_c2i_A2I_internal_26 @@ -3842,14 +3842,14 @@ move $t1, $t0 sw $t1, -112($fp) sw $t0, -124($fp) sw $t1, -112($fp) -j end__477 -true__477: +j end__479 +true__479: lw $t0, -112($fp) # Moving 8 to local_c2i_A2I_internal_26 li $t0, 8 sw $t0, -112($fp) sw $t0, -112($fp) -end__477: +end__479: lw $t0, -112($fp) lw $t1, -100($fp) # Moving local_c2i_A2I_internal_26 to local_c2i_A2I_internal_23 @@ -3857,14 +3857,14 @@ move $t1, $t0 sw $t1, -100($fp) sw $t0, -112($fp) sw $t1, -100($fp) -j end__470 -true__470: +j end__472 +true__472: lw $t0, -100($fp) # Moving 7 to local_c2i_A2I_internal_23 li $t0, 7 sw $t0, -100($fp) sw $t0, -100($fp) -end__470: +end__472: lw $t0, -100($fp) lw $t1, -88($fp) # Moving local_c2i_A2I_internal_23 to local_c2i_A2I_internal_20 @@ -3872,14 +3872,14 @@ move $t1, $t0 sw $t1, -88($fp) sw $t0, -100($fp) sw $t1, -88($fp) -j end__463 -true__463: +j end__465 +true__465: lw $t0, -88($fp) # Moving 6 to local_c2i_A2I_internal_20 li $t0, 6 sw $t0, -88($fp) sw $t0, -88($fp) -end__463: +end__465: lw $t0, -88($fp) lw $t1, -76($fp) # Moving local_c2i_A2I_internal_20 to local_c2i_A2I_internal_17 @@ -3887,14 +3887,14 @@ move $t1, $t0 sw $t1, -76($fp) sw $t0, -88($fp) sw $t1, -76($fp) -j end__456 -true__456: +j end__458 +true__458: lw $t0, -76($fp) # Moving 5 to local_c2i_A2I_internal_17 li $t0, 5 sw $t0, -76($fp) sw $t0, -76($fp) -end__456: +end__458: lw $t0, -76($fp) lw $t1, -64($fp) # Moving local_c2i_A2I_internal_17 to local_c2i_A2I_internal_14 @@ -3902,14 +3902,14 @@ move $t1, $t0 sw $t1, -64($fp) sw $t0, -76($fp) sw $t1, -64($fp) -j end__449 -true__449: +j end__451 +true__451: lw $t0, -64($fp) # Moving 4 to local_c2i_A2I_internal_14 li $t0, 4 sw $t0, -64($fp) sw $t0, -64($fp) -end__449: +end__451: lw $t0, -64($fp) lw $t1, -52($fp) # Moving local_c2i_A2I_internal_14 to local_c2i_A2I_internal_11 @@ -3917,14 +3917,14 @@ move $t1, $t0 sw $t1, -52($fp) sw $t0, -64($fp) sw $t1, -52($fp) -j end__442 -true__442: +j end__444 +true__444: lw $t0, -52($fp) # Moving 3 to local_c2i_A2I_internal_11 li $t0, 3 sw $t0, -52($fp) sw $t0, -52($fp) -end__442: +end__444: lw $t0, -52($fp) lw $t1, -40($fp) # Moving local_c2i_A2I_internal_11 to local_c2i_A2I_internal_8 @@ -3932,14 +3932,14 @@ move $t1, $t0 sw $t1, -40($fp) sw $t0, -52($fp) sw $t1, -40($fp) -j end__435 -true__435: +j end__437 +true__437: lw $t0, -40($fp) # Moving 2 to local_c2i_A2I_internal_8 li $t0, 2 sw $t0, -40($fp) sw $t0, -40($fp) -end__435: +end__437: lw $t0, -40($fp) lw $t1, -28($fp) # Moving local_c2i_A2I_internal_8 to local_c2i_A2I_internal_5 @@ -3947,14 +3947,14 @@ move $t1, $t0 sw $t1, -28($fp) sw $t0, -40($fp) sw $t1, -28($fp) -j end__428 -true__428: +j end__430 +true__430: lw $t0, -28($fp) # Moving 1 to local_c2i_A2I_internal_5 li $t0, 1 sw $t0, -28($fp) sw $t0, -28($fp) -end__428: +end__430: lw $t0, -28($fp) lw $t1, -16($fp) # Moving local_c2i_A2I_internal_5 to local_c2i_A2I_internal_2 @@ -3962,14 +3962,14 @@ move $t1, $t0 sw $t1, -16($fp) sw $t0, -28($fp) sw $t1, -16($fp) -j end__421 -true__421: +j end__423 +true__423: lw $t0, -16($fp) # Moving 0 to local_c2i_A2I_internal_2 li $t0, 0 sw $t0, -16($fp) sw $t0, -16($fp) -end__421: +end__423: lw $t0, -16($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -4058,91 +4058,91 @@ lw $t1, -8($fp) # local_i2c_A2I_internal_0 <- i = 0 li $t9, 0 seq $t1, $t0, $t9 -# If local_i2c_A2I_internal_0 goto true__546 +# If local_i2c_A2I_internal_0 goto true__549 sw $t0, -0($fp) sw $t1, -8($fp) -bnez $t1, true__546 +bnez $t1, true__549 lw $t0, -0($fp) lw $t1, -16($fp) # local_i2c_A2I_internal_2 <- i = 1 li $t9, 1 seq $t1, $t0, $t9 -# If local_i2c_A2I_internal_2 goto true__550 +# If local_i2c_A2I_internal_2 goto true__553 sw $t0, -0($fp) sw $t1, -16($fp) -bnez $t1, true__550 +bnez $t1, true__553 lw $t0, -0($fp) lw $t1, -24($fp) # local_i2c_A2I_internal_4 <- i = 2 li $t9, 2 seq $t1, $t0, $t9 -# If local_i2c_A2I_internal_4 goto true__554 +# If local_i2c_A2I_internal_4 goto true__557 sw $t0, -0($fp) sw $t1, -24($fp) -bnez $t1, true__554 +bnez $t1, true__557 lw $t0, -0($fp) lw $t1, -32($fp) # local_i2c_A2I_internal_6 <- i = 3 li $t9, 3 seq $t1, $t0, $t9 -# If local_i2c_A2I_internal_6 goto true__558 +# If local_i2c_A2I_internal_6 goto true__561 sw $t0, -0($fp) sw $t1, -32($fp) -bnez $t1, true__558 +bnez $t1, true__561 lw $t0, -0($fp) lw $t1, -40($fp) # local_i2c_A2I_internal_8 <- i = 4 li $t9, 4 seq $t1, $t0, $t9 -# If local_i2c_A2I_internal_8 goto true__562 +# If local_i2c_A2I_internal_8 goto true__565 sw $t0, -0($fp) sw $t1, -40($fp) -bnez $t1, true__562 +bnez $t1, true__565 lw $t0, -0($fp) lw $t1, -48($fp) # local_i2c_A2I_internal_10 <- i = 5 li $t9, 5 seq $t1, $t0, $t9 -# If local_i2c_A2I_internal_10 goto true__566 +# If local_i2c_A2I_internal_10 goto true__569 sw $t0, -0($fp) sw $t1, -48($fp) -bnez $t1, true__566 +bnez $t1, true__569 lw $t0, -0($fp) lw $t1, -56($fp) # local_i2c_A2I_internal_12 <- i = 6 li $t9, 6 seq $t1, $t0, $t9 -# If local_i2c_A2I_internal_12 goto true__570 +# If local_i2c_A2I_internal_12 goto true__573 sw $t0, -0($fp) sw $t1, -56($fp) -bnez $t1, true__570 +bnez $t1, true__573 lw $t0, -0($fp) lw $t1, -64($fp) # local_i2c_A2I_internal_14 <- i = 7 li $t9, 7 seq $t1, $t0, $t9 -# If local_i2c_A2I_internal_14 goto true__574 +# If local_i2c_A2I_internal_14 goto true__577 sw $t0, -0($fp) sw $t1, -64($fp) -bnez $t1, true__574 +bnez $t1, true__577 lw $t0, -0($fp) lw $t1, -72($fp) # local_i2c_A2I_internal_16 <- i = 8 li $t9, 8 seq $t1, $t0, $t9 -# If local_i2c_A2I_internal_16 goto true__578 +# If local_i2c_A2I_internal_16 goto true__581 sw $t0, -0($fp) sw $t1, -72($fp) -bnez $t1, true__578 +bnez $t1, true__581 lw $t0, -0($fp) lw $t1, -80($fp) # local_i2c_A2I_internal_18 <- i = 9 li $t9, 9 seq $t1, $t0, $t9 -# If local_i2c_A2I_internal_18 goto true__582 +# If local_i2c_A2I_internal_18 goto true__585 sw $t0, -0($fp) sw $t1, -80($fp) -bnez $t1, true__582 +bnez $t1, true__585 lw $t0, -4($fp) lw $t1, -88($fp) # Find the actual name in the dispatch table @@ -4188,8 +4188,8 @@ sw $t0, -88($fp) sw $t1, -92($fp) sw $t2, -96($fp) sw $t3, -84($fp) -j end__582 -true__582: +j end__585 +true__585: lw $t0, -100($fp) # Saves in local_i2c_A2I_internal_23 data_12 la $t0, data_12 @@ -4199,7 +4199,7 @@ move $t1, $t0 sw $t1, -84($fp) sw $t0, -100($fp) sw $t1, -84($fp) -end__582: +end__585: lw $t0, -84($fp) lw $t1, -76($fp) # Moving local_i2c_A2I_internal_19 to local_i2c_A2I_internal_17 @@ -4207,8 +4207,8 @@ move $t1, $t0 sw $t1, -76($fp) sw $t0, -84($fp) sw $t1, -76($fp) -j end__578 -true__578: +j end__581 +true__581: lw $t0, -104($fp) # Saves in local_i2c_A2I_internal_24 data_13 la $t0, data_13 @@ -4218,7 +4218,7 @@ move $t1, $t0 sw $t1, -76($fp) sw $t0, -104($fp) sw $t1, -76($fp) -end__578: +end__581: lw $t0, -76($fp) lw $t1, -68($fp) # Moving local_i2c_A2I_internal_17 to local_i2c_A2I_internal_15 @@ -4226,8 +4226,8 @@ move $t1, $t0 sw $t1, -68($fp) sw $t0, -76($fp) sw $t1, -68($fp) -j end__574 -true__574: +j end__577 +true__577: lw $t0, -108($fp) # Saves in local_i2c_A2I_internal_25 data_14 la $t0, data_14 @@ -4237,7 +4237,7 @@ move $t1, $t0 sw $t1, -68($fp) sw $t0, -108($fp) sw $t1, -68($fp) -end__574: +end__577: lw $t0, -68($fp) lw $t1, -60($fp) # Moving local_i2c_A2I_internal_15 to local_i2c_A2I_internal_13 @@ -4245,8 +4245,8 @@ move $t1, $t0 sw $t1, -60($fp) sw $t0, -68($fp) sw $t1, -60($fp) -j end__570 -true__570: +j end__573 +true__573: lw $t0, -112($fp) # Saves in local_i2c_A2I_internal_26 data_15 la $t0, data_15 @@ -4256,7 +4256,7 @@ move $t1, $t0 sw $t1, -60($fp) sw $t0, -112($fp) sw $t1, -60($fp) -end__570: +end__573: lw $t0, -60($fp) lw $t1, -52($fp) # Moving local_i2c_A2I_internal_13 to local_i2c_A2I_internal_11 @@ -4264,8 +4264,8 @@ move $t1, $t0 sw $t1, -52($fp) sw $t0, -60($fp) sw $t1, -52($fp) -j end__566 -true__566: +j end__569 +true__569: lw $t0, -116($fp) # Saves in local_i2c_A2I_internal_27 data_16 la $t0, data_16 @@ -4275,7 +4275,7 @@ move $t1, $t0 sw $t1, -52($fp) sw $t0, -116($fp) sw $t1, -52($fp) -end__566: +end__569: lw $t0, -52($fp) lw $t1, -44($fp) # Moving local_i2c_A2I_internal_11 to local_i2c_A2I_internal_9 @@ -4283,8 +4283,8 @@ move $t1, $t0 sw $t1, -44($fp) sw $t0, -52($fp) sw $t1, -44($fp) -j end__562 -true__562: +j end__565 +true__565: lw $t0, -120($fp) # Saves in local_i2c_A2I_internal_28 data_17 la $t0, data_17 @@ -4294,7 +4294,7 @@ move $t1, $t0 sw $t1, -44($fp) sw $t0, -120($fp) sw $t1, -44($fp) -end__562: +end__565: lw $t0, -44($fp) lw $t1, -36($fp) # Moving local_i2c_A2I_internal_9 to local_i2c_A2I_internal_7 @@ -4302,8 +4302,8 @@ move $t1, $t0 sw $t1, -36($fp) sw $t0, -44($fp) sw $t1, -36($fp) -j end__558 -true__558: +j end__561 +true__561: lw $t0, -124($fp) # Saves in local_i2c_A2I_internal_29 data_18 la $t0, data_18 @@ -4313,7 +4313,7 @@ move $t1, $t0 sw $t1, -36($fp) sw $t0, -124($fp) sw $t1, -36($fp) -end__558: +end__561: lw $t0, -36($fp) lw $t1, -28($fp) # Moving local_i2c_A2I_internal_7 to local_i2c_A2I_internal_5 @@ -4321,8 +4321,8 @@ move $t1, $t0 sw $t1, -28($fp) sw $t0, -36($fp) sw $t1, -28($fp) -j end__554 -true__554: +j end__557 +true__557: lw $t0, -128($fp) # Saves in local_i2c_A2I_internal_30 data_19 la $t0, data_19 @@ -4332,7 +4332,7 @@ move $t1, $t0 sw $t1, -28($fp) sw $t0, -128($fp) sw $t1, -28($fp) -end__554: +end__557: lw $t0, -28($fp) lw $t1, -20($fp) # Moving local_i2c_A2I_internal_5 to local_i2c_A2I_internal_3 @@ -4340,8 +4340,8 @@ move $t1, $t0 sw $t1, -20($fp) sw $t0, -28($fp) sw $t1, -20($fp) -j end__550 -true__550: +j end__553 +true__553: lw $t0, -132($fp) # Saves in local_i2c_A2I_internal_31 data_20 la $t0, data_20 @@ -4351,7 +4351,7 @@ move $t1, $t0 sw $t1, -20($fp) sw $t0, -132($fp) sw $t1, -20($fp) -end__550: +end__553: lw $t0, -20($fp) lw $t1, -12($fp) # Moving local_i2c_A2I_internal_3 to local_i2c_A2I_internal_1 @@ -4359,8 +4359,8 @@ move $t1, $t0 sw $t1, -12($fp) sw $t0, -20($fp) sw $t1, -12($fp) -j end__546 -true__546: +j end__549 +true__549: lw $t0, -136($fp) # Saves in local_i2c_A2I_internal_32 data_21 la $t0, data_21 @@ -4370,7 +4370,7 @@ move $t1, $t0 sw $t1, -12($fp) sw $t0, -136($fp) sw $t1, -12($fp) -end__546: +end__549: lw $t0, -12($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -4486,14 +4486,14 @@ bnez $a1, mismatch_25 li $v0, 1 end_25: move $t1, $v0 -# If not local_a2i_A2I_internal_2 goto continue__678 +# If not local_a2i_A2I_internal_2 goto continue__682 sw $t0, -0($fp) sw $t1, -16($fp) sw $t2, -20($fp) -beqz $t1, continue__678 +beqz $t1, continue__682 la $a0, dispatch_error j .raise -continue__678: +continue__682: lw $t0, -12($fp) # Static Dispatch of the method length sw $fp, ($sp) @@ -4523,10 +4523,10 @@ lw $t1, -8($fp) # local_a2i_A2I_internal_0 <- local_a2i_A2I_internal_1 = 0 li $t9, 0 seq $t1, $t0, $t9 -# If local_a2i_A2I_internal_0 goto true__689 +# If local_a2i_A2I_internal_0 goto true__693 sw $t0, -12($fp) sw $t1, -8($fp) -bnez $t1, true__689 +bnez $t1, true__693 lw $t0, -0($fp) lw $t1, -36($fp) # local_a2i_A2I_internal_7 <- Type of s @@ -4555,14 +4555,14 @@ bnez $a1, mismatch_26 li $v0, 1 end_26: move $t1, $v0 -# If not local_a2i_A2I_internal_7 goto continue__696 +# If not local_a2i_A2I_internal_7 goto continue__700 sw $t0, -0($fp) sw $t1, -36($fp) sw $t2, -40($fp) -beqz $t1, continue__696 +beqz $t1, continue__700 la $a0, dispatch_error j .raise -continue__696: +continue__700: lw $t0, -32($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -4621,11 +4621,11 @@ bnez $a1, mismatch_27 li $v0, 1 end_27: move $t2, $v0 -# If local_a2i_A2I_internal_5 goto true__710 +# If local_a2i_A2I_internal_5 goto true__714 sw $t0, -32($fp) sw $t1, -44($fp) sw $t2, -28($fp) -bnez $t2, true__710 +bnez $t2, true__714 lw $t0, -0($fp) lw $t1, -60($fp) # local_a2i_A2I_internal_13 <- Type of s @@ -4654,14 +4654,14 @@ bnez $a1, mismatch_28 li $v0, 1 end_28: move $t1, $v0 -# If not local_a2i_A2I_internal_13 goto continue__717 +# If not local_a2i_A2I_internal_13 goto continue__721 sw $t0, -0($fp) sw $t1, -60($fp) sw $t2, -64($fp) -beqz $t1, continue__717 +beqz $t1, continue__721 la $a0, dispatch_error j .raise -continue__717: +continue__721: lw $t0, -56($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -4720,11 +4720,11 @@ bnez $a1, mismatch_29 li $v0, 1 end_29: move $t2, $v0 -# If local_a2i_A2I_internal_11 goto true__731 +# If local_a2i_A2I_internal_11 goto true__735 sw $t0, -56($fp) sw $t1, -68($fp) sw $t2, -52($fp) -bnez $t2, true__731 +bnez $t2, true__735 lw $t0, -4($fp) lw $t1, -76($fp) # Find the actual name in the dispatch table @@ -4766,8 +4766,8 @@ move $t1, $t0 sw $t1, -72($fp) sw $t0, -76($fp) sw $t1, -72($fp) -j end__731 -true__731: +j end__735 +true__735: lw $t0, -0($fp) lw $t1, -88($fp) # local_a2i_A2I_internal_20 <- Type of s @@ -4796,14 +4796,14 @@ bnez $a1, mismatch_30 li $v0, 1 end_30: move $t1, $v0 -# If not local_a2i_A2I_internal_20 goto continue__742 +# If not local_a2i_A2I_internal_20 goto continue__749 sw $t0, -0($fp) sw $t1, -88($fp) sw $t2, -92($fp) -beqz $t1, continue__742 +beqz $t1, continue__749 la $a0, dispatch_error j .raise -continue__742: +continue__749: lw $t0, -84($fp) # Static Dispatch of the method length sw $fp, ($sp) @@ -4860,16 +4860,16 @@ bnez $a1, mismatch_31 li $v0, 1 end_31: move $t3, $v0 -# If not local_a2i_A2I_internal_23 goto continue__757 +# If not local_a2i_A2I_internal_23 goto continue__763 sw $t0, -84($fp) sw $t1, -80($fp) sw $t2, -0($fp) sw $t3, -100($fp) sw $t4, -104($fp) -beqz $t3, continue__757 +beqz $t3, continue__763 la $a0, dispatch_error j .raise -continue__757: +continue__763: lw $t0, -96($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -4944,7 +4944,7 @@ move $t1, $t0 sw $t1, -72($fp) sw $t0, -108($fp) sw $t1, -72($fp) -end__731: +end__735: lw $t0, -72($fp) lw $t1, -48($fp) # Moving local_a2i_A2I_internal_16 to local_a2i_A2I_internal_10 @@ -4952,8 +4952,8 @@ move $t1, $t0 sw $t1, -48($fp) sw $t0, -72($fp) sw $t1, -48($fp) -j end__710 -true__710: +j end__714 +true__714: lw $t0, -0($fp) lw $t1, -124($fp) # local_a2i_A2I_internal_29 <- Type of s @@ -4982,14 +4982,14 @@ bnez $a1, mismatch_32 li $v0, 1 end_32: move $t1, $v0 -# If not local_a2i_A2I_internal_29 goto continue__779 +# If not local_a2i_A2I_internal_29 goto continue__787 sw $t0, -0($fp) sw $t1, -124($fp) sw $t2, -128($fp) -beqz $t1, continue__779 +beqz $t1, continue__787 la $a0, dispatch_error j .raise -continue__779: +continue__787: lw $t0, -120($fp) # Static Dispatch of the method length sw $fp, ($sp) @@ -5046,16 +5046,16 @@ bnez $a1, mismatch_33 li $v0, 1 end_33: move $t3, $v0 -# If not local_a2i_A2I_internal_32 goto continue__794 +# If not local_a2i_A2I_internal_32 goto continue__801 sw $t0, -120($fp) sw $t1, -116($fp) sw $t2, -0($fp) sw $t3, -136($fp) sw $t4, -140($fp) -beqz $t3, continue__794 +beqz $t3, continue__801 la $a0, dispatch_error j .raise -continue__794: +continue__801: lw $t0, -132($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -5135,7 +5135,7 @@ sw $t2, -48($fp) sw $t0, -144($fp) sw $t1, -112($fp) sw $t2, -48($fp) -end__710: +end__714: lw $t0, -48($fp) lw $t1, -24($fp) # Moving local_a2i_A2I_internal_10 to local_a2i_A2I_internal_4 @@ -5143,14 +5143,14 @@ move $t1, $t0 sw $t1, -24($fp) sw $t0, -48($fp) sw $t1, -24($fp) -j end__689 -true__689: +j end__693 +true__693: lw $t0, -24($fp) # Moving 0 to local_a2i_A2I_internal_4 li $t0, 0 sw $t0, -24($fp) sw $t0, -24($fp) -end__689: +end__693: lw $t0, -24($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -5234,15 +5234,15 @@ bnez $a1, mismatch_34 li $v0, 1 end_34: move $t2, $v0 -# If not local_a2i_aux_A2I_internal_3 goto continue__824 +# If not local_a2i_aux_A2I_internal_3 goto continue__831 sw $t0, -8($fp) sw $t1, -0($fp) sw $t2, -20($fp) sw $t3, -24($fp) -beqz $t2, continue__824 +beqz $t2, continue__831 la $a0, dispatch_error j .raise -continue__824: +continue__831: lw $t0, -16($fp) # Static Dispatch of the method length sw $fp, ($sp) @@ -5289,17 +5289,17 @@ sw $t0, -16($fp) sw $t1, -12($fp) sw $t2, -28($fp) sw $t3, -32($fp) -start__837: +start__844: lw $t0, -28($fp) lw $t1, -12($fp) lw $t2, -36($fp) # local_a2i_aux_A2I_internal_7 <- local_a2i_aux_A2I_i_5 < local_a2i_aux_A2I_j_1 slt $t2, $t0, $t1 -# If not local_a2i_aux_A2I_internal_7 goto end__837 +# If not local_a2i_aux_A2I_internal_7 goto end__844 sw $t0, -28($fp) sw $t1, -12($fp) sw $t2, -36($fp) -beqz $t2, end__837 +beqz $t2, end__844 lw $t0, -8($fp) lw $t1, -44($fp) # local_a2i_aux_A2I_internal_9 <- local_a2i_aux_A2I_int_0 * 10 @@ -5334,16 +5334,16 @@ bnez $a1, mismatch_35 li $v0, 1 end_35: move $t3, $v0 -# If not local_a2i_aux_A2I_internal_11 goto continue__850 +# If not local_a2i_aux_A2I_internal_11 goto continue__858 sw $t0, -8($fp) sw $t1, -44($fp) sw $t2, -0($fp) sw $t3, -52($fp) sw $t4, -56($fp) -beqz $t3, continue__850 +beqz $t3, continue__858 la $a0, dispatch_error j .raise -continue__850: +continue__858: lw $t0, -48($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -5443,8 +5443,8 @@ sw $t4, -28($fp) sw $t5, -64($fp) sw $t6, -68($fp) sw $t7, -32($fp) -j start__837 -end__837: +j start__844 +end__844: lw $t0, -8($fp) lw $t1, -72($fp) # Moving local_a2i_aux_A2I_int_0 to local_a2i_aux_A2I_internal_16 @@ -5498,19 +5498,19 @@ lw $t1, -8($fp) # local_i2a_A2I_internal_0 <- i = 0 li $t9, 0 seq $t1, $t0, $t9 -# If local_i2a_A2I_internal_0 goto true__881 +# If local_i2a_A2I_internal_0 goto true__889 sw $t0, -0($fp) sw $t1, -8($fp) -bnez $t1, true__881 +bnez $t1, true__889 lw $t0, -0($fp) lw $t1, -16($fp) # local_i2a_A2I_internal_2 <- 0 < i li $t9, 0 slt $t1, $t9, $t0 -# If local_i2a_A2I_internal_2 goto true__885 +# If local_i2a_A2I_internal_2 goto true__893 sw $t0, -0($fp) sw $t1, -16($fp) -bnez $t1, true__885 +bnez $t1, true__893 lw $t0, -24($fp) # Saves in local_i2a_A2I_internal_4 data_24 la $t0, data_24 @@ -5589,15 +5589,15 @@ bnez $a1, mismatch_36 li $v0, 1 end_36: move $t2, $v0 -# If not local_i2a_A2I_internal_9 goto continue__900 +# If not local_i2a_A2I_internal_9 goto continue__909 sw $t0, -36($fp) sw $t1, -24($fp) sw $t2, -44($fp) sw $t3, -48($fp) -beqz $t2, continue__900 +beqz $t2, continue__909 la $a0, dispatch_error j .raise -continue__900: +continue__909: lw $t0, -40($fp) # Static Dispatch of the method concat sw $fp, ($sp) @@ -5634,8 +5634,8 @@ move $t1, $t0 sw $t1, -20($fp) sw $t0, -40($fp) sw $t1, -20($fp) -j end__885 -true__885: +j end__893 +true__893: lw $t0, -4($fp) lw $t1, -52($fp) # Find the actual name in the dispatch table @@ -5677,7 +5677,7 @@ move $t1, $t0 sw $t1, -20($fp) sw $t0, -52($fp) sw $t1, -20($fp) -end__885: +end__893: lw $t0, -20($fp) lw $t1, -12($fp) # Moving local_i2a_A2I_internal_3 to local_i2a_A2I_internal_1 @@ -5685,8 +5685,8 @@ move $t1, $t0 sw $t1, -12($fp) sw $t0, -20($fp) sw $t1, -12($fp) -j end__881 -true__881: +j end__889 +true__889: lw $t0, -56($fp) # Saves in local_i2a_A2I_internal_12 data_25 la $t0, data_25 @@ -5696,7 +5696,7 @@ move $t1, $t0 sw $t1, -12($fp) sw $t0, -56($fp) sw $t1, -12($fp) -end__881: +end__889: lw $t0, -12($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -5743,10 +5743,10 @@ lw $t1, -8($fp) # local_i2a_aux_A2I_internal_0 <- i = 0 li $t9, 0 seq $t1, $t0, $t9 -# If local_i2a_aux_A2I_internal_0 goto true__932 +# If local_i2a_aux_A2I_internal_0 goto true__942 sw $t0, -0($fp) sw $t1, -8($fp) -bnez $t1, true__932 +bnez $t1, true__942 lw $t0, -0($fp) lw $t1, -20($fp) # local_i2a_aux_A2I_internal_3 <- i / 10 @@ -5871,15 +5871,15 @@ bnez $a1, mismatch_37 li $v0, 1 end_37: move $t2, $v0 -# If not local_i2a_aux_A2I_internal_9 goto continue__951 +# If not local_i2a_aux_A2I_internal_9 goto continue__963 sw $t0, -36($fp) sw $t1, -24($fp) sw $t2, -44($fp) sw $t3, -48($fp) -beqz $t2, continue__951 +beqz $t2, continue__963 la $a0, dispatch_error j .raise -continue__951: +continue__963: lw $t0, -40($fp) # Static Dispatch of the method concat sw $fp, ($sp) @@ -5916,8 +5916,8 @@ move $t1, $t0 sw $t1, -12($fp) sw $t0, -40($fp) sw $t1, -12($fp) -j end__932 -true__932: +j end__942 +true__942: lw $t0, -52($fp) # Saves in local_i2a_aux_A2I_internal_11 data_26 la $t0, data_26 @@ -5927,7 +5927,7 @@ move $t1, $t0 sw $t1, -12($fp) sw $t0, -52($fp) sw $t1, -12($fp) -end__932: +end__942: lw $t0, -12($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -7386,16 +7386,16 @@ bnez $a1, mismatch_38 li $v0, 1 end_38: move $t3, $v0 -# If not local_get_int_Main_internal_5 goto continue__1173 +# If not local_get_int_Main_internal_5 goto continue__1216 sw $t0, -16($fp) sw $t1, -12($fp) sw $t2, -4($fp) sw $t3, -24($fp) sw $t4, -28($fp) -beqz $t3, continue__1173 +beqz $t3, continue__1216 la $a0, dispatch_error j .raise -continue__1173: +continue__1216: lw $t0, -4($fp) lw $t1, -20($fp) # Find the actual name in the dispatch table @@ -7483,29 +7483,29 @@ lw $t2, -12($fp) # local_is_even_Main_internal_1 <- local_is_even_Main_x_0 < 0 li $t9, 0 slt $t2, $t1, $t9 -# If local_is_even_Main_internal_1 goto true__1193 +# If local_is_even_Main_internal_1 goto true__1236 sw $t0, -0($fp) sw $t1, -8($fp) sw $t2, -12($fp) -bnez $t2, true__1193 +bnez $t2, true__1236 lw $t0, -8($fp) lw $t1, -20($fp) # local_is_even_Main_internal_3 <- 0 = local_is_even_Main_x_0 li $t9, 0 seq $t1, $t9, $t0 -# If local_is_even_Main_internal_3 goto true__1197 +# If local_is_even_Main_internal_3 goto true__1240 sw $t0, -8($fp) sw $t1, -20($fp) -bnez $t1, true__1197 +bnez $t1, true__1240 lw $t0, -8($fp) lw $t1, -28($fp) # local_is_even_Main_internal_5 <- 1 = local_is_even_Main_x_0 li $t9, 1 seq $t1, $t9, $t0 -# If local_is_even_Main_internal_5 goto true__1201 +# If local_is_even_Main_internal_5 goto true__1244 sw $t0, -8($fp) sw $t1, -28($fp) -bnez $t1, true__1201 +bnez $t1, true__1244 lw $t0, -8($fp) lw $t1, -36($fp) # local_is_even_Main_internal_7 <- local_is_even_Main_x_0 - 2 @@ -7551,14 +7551,14 @@ move $t1, $t0 sw $t1, -32($fp) sw $t0, -40($fp) sw $t1, -32($fp) -j end__1201 -true__1201: +j end__1244 +true__1244: lw $t0, -32($fp) # Moving 0 to local_is_even_Main_internal_6 li $t0, 0 sw $t0, -32($fp) sw $t0, -32($fp) -end__1201: +end__1244: lw $t0, -32($fp) lw $t1, -24($fp) # Moving local_is_even_Main_internal_6 to local_is_even_Main_internal_4 @@ -7566,14 +7566,14 @@ move $t1, $t0 sw $t1, -24($fp) sw $t0, -32($fp) sw $t1, -24($fp) -j end__1197 -true__1197: +j end__1240 +true__1240: lw $t0, -24($fp) # Moving 1 to local_is_even_Main_internal_4 li $t0, 1 sw $t0, -24($fp) sw $t0, -24($fp) -end__1197: +end__1240: lw $t0, -24($fp) lw $t1, -16($fp) # Moving local_is_even_Main_internal_4 to local_is_even_Main_internal_2 @@ -7581,8 +7581,8 @@ move $t1, $t0 sw $t1, -16($fp) sw $t0, -24($fp) sw $t1, -16($fp) -j end__1193 -true__1193: +j end__1236 +true__1236: lw $t0, -8($fp) lw $t1, -44($fp) # local_is_even_Main_internal_9 <- ~local_is_even_Main_x_0 @@ -7629,7 +7629,7 @@ move $t1, $t0 sw $t1, -16($fp) sw $t0, -48($fp) sw $t1, -16($fp) -end__1193: +end__1236: lw $t0, -16($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -7729,11 +7729,11 @@ bnez $a1, mismatch_39 li $v0, 1 end_39: move $t1, $v0 -# If local_class_type_Main_internal_1 goto error__1233 +# If local_class_type_Main_internal_1 goto error__1278 sw $t0, -0($fp) sw $t1, -12($fp) sw $t2, -16($fp) -bnez $t1, error__1233 +bnez $t1, error__1278 lw $t0, -0($fp) lw $t1, -20($fp) la $t9, type_E @@ -7751,10 +7751,10 @@ j end_40 false_40: li $t1, 0 end_40: -# If not local_class_type_Main_internal_3 goto next__1239_0 +# If not local_class_type_Main_internal_3 goto next__1284_0 sw $t0, -0($fp) sw $t1, -20($fp) -beqz $t1, next__1239_0 +beqz $t1, next__1284_0 lw $t0, -0($fp) lw $t1, -24($fp) # Moving var to local_class_type_Main_e_4 @@ -7805,8 +7805,8 @@ move $t1, $t0 sw $t1, -8($fp) sw $t0, -32($fp) sw $t1, -8($fp) -j end__1233 -next__1239_0: +j end__1278 +next__1284_0: lw $t0, -0($fp) lw $t1, -36($fp) la $t9, type_C @@ -7824,10 +7824,10 @@ j end_41 false_41: li $t1, 0 end_41: -# If not local_class_type_Main_internal_7 goto next__1253_1 +# If not local_class_type_Main_internal_7 goto next__1299_1 sw $t0, -0($fp) sw $t1, -36($fp) -beqz $t1, next__1253_1 +beqz $t1, next__1299_1 lw $t0, -0($fp) lw $t1, -40($fp) # Moving var to local_class_type_Main_c_8 @@ -7878,8 +7878,8 @@ move $t1, $t0 sw $t1, -8($fp) sw $t0, -48($fp) sw $t1, -8($fp) -j end__1233 -next__1253_1: +j end__1278 +next__1299_1: lw $t0, -0($fp) lw $t1, -52($fp) la $t9, type_D @@ -7897,10 +7897,10 @@ j end_42 false_42: li $t1, 0 end_42: -# If not local_class_type_Main_internal_11 goto next__1267_2 +# If not local_class_type_Main_internal_11 goto next__1314_2 sw $t0, -0($fp) sw $t1, -52($fp) -beqz $t1, next__1267_2 +beqz $t1, next__1314_2 lw $t0, -0($fp) lw $t1, -56($fp) # Moving var to local_class_type_Main_d_12 @@ -7951,8 +7951,8 @@ move $t1, $t0 sw $t1, -8($fp) sw $t0, -64($fp) sw $t1, -8($fp) -j end__1233 -next__1267_2: +j end__1278 +next__1314_2: lw $t0, -0($fp) lw $t1, -68($fp) la $t9, type_B @@ -7970,10 +7970,10 @@ j end_43 false_43: li $t1, 0 end_43: -# If not local_class_type_Main_internal_15 goto next__1281_3 +# If not local_class_type_Main_internal_15 goto next__1329_3 sw $t0, -0($fp) sw $t1, -68($fp) -beqz $t1, next__1281_3 +beqz $t1, next__1329_3 lw $t0, -0($fp) lw $t1, -72($fp) # Moving var to local_class_type_Main_b_16 @@ -8024,8 +8024,8 @@ move $t1, $t0 sw $t1, -8($fp) sw $t0, -80($fp) sw $t1, -8($fp) -j end__1233 -next__1281_3: +j end__1278 +next__1329_3: lw $t0, -0($fp) lw $t1, -84($fp) la $t9, type_A @@ -8043,10 +8043,10 @@ j end_44 false_44: li $t1, 0 end_44: -# If not local_class_type_Main_internal_19 goto next__1295_4 +# If not local_class_type_Main_internal_19 goto next__1344_4 sw $t0, -0($fp) sw $t1, -84($fp) -beqz $t1, next__1295_4 +beqz $t1, next__1344_4 lw $t0, -0($fp) lw $t1, -88($fp) # Moving var to local_class_type_Main_a_20 @@ -8097,8 +8097,8 @@ move $t1, $t0 sw $t1, -8($fp) sw $t0, -96($fp) sw $t1, -8($fp) -j end__1233 -next__1295_4: +j end__1278 +next__1344_4: lw $t0, -0($fp) lw $t1, -100($fp) la $t9, type_Object @@ -8116,10 +8116,10 @@ j end_45 false_45: li $t1, 0 end_45: -# If not local_class_type_Main_internal_23 goto next__1309_5 +# If not local_class_type_Main_internal_23 goto next__1359_5 sw $t0, -0($fp) sw $t1, -100($fp) -beqz $t1, next__1309_5 +beqz $t1, next__1359_5 lw $t0, -0($fp) lw $t1, -104($fp) # Moving var to local_class_type_Main_o_24 @@ -8170,14 +8170,14 @@ move $t1, $t0 sw $t1, -8($fp) sw $t0, -112($fp) sw $t1, -8($fp) -j end__1233 -next__1309_5: +j end__1278 +next__1359_5: la $a0, case_error j .raise -error__1233: +error__1278: la $a0, case_void_error j .raise -end__1233: +end__1278: lw $t0, -8($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -8267,16 +8267,16 @@ bnez $a1, mismatch_46 li $v0, 1 end_46: move $t3, $v0 -# If not local_print_Main_internal_3 goto continue__1337 +# If not local_print_Main_internal_3 goto continue__1390 sw $t0, -12($fp) sw $t1, -8($fp) sw $t2, -0($fp) sw $t3, -20($fp) sw $t4, -24($fp) -beqz $t3, continue__1337 +beqz $t3, continue__1390 la $a0, dispatch_error j .raise -continue__1337: +continue__1390: lw $t0, -0($fp) lw $t1, -16($fp) # Find the actual name in the dispatch table @@ -8335,15 +8335,15 @@ bnez $a1, mismatch_47 li $v0, 1 end_47: move $t2, $v0 -# If not local_print_Main_internal_6 goto continue__1350 +# If not local_print_Main_internal_6 goto continue__1402 sw $t0, -16($fp) sw $t1, -8($fp) sw $t2, -32($fp) sw $t3, -36($fp) -beqz $t2, continue__1350 +beqz $t2, continue__1402 la $a0, dispatch_error j .raise -continue__1350: +continue__1402: lw $t0, -8($fp) lw $t1, -28($fp) # Find the actual name in the dispatch table @@ -8963,15 +8963,15 @@ move $t2, $v0 sw $t0, -4($fp) sw $t1, -0($fp) sw $t2, -8($fp) -start__1378: +start__1431: lw $t0, -0($fp) lw $t1, -12($fp) # local_main_Main_flag_2 <- GET self . flag lw $t1, 24($t0) -# If not local_main_Main_flag_2 goto end__1378 +# If not local_main_Main_flag_2 goto end__1431 sw $t0, -0($fp) sw $t1, -12($fp) -beqz $t1, end__1378 +beqz $t1, end__1431 lw $t0, -16($fp) # Saves in local_main_Main_internal_3 data_55 la $t0, data_55 @@ -9078,16 +9078,16 @@ bnez $a1, mismatch_48 li $v0, 1 end_48: move $t3, $v0 -# If not local_main_Main_internal_9 goto continue__1399 +# If not local_main_Main_internal_9 goto continue__1455 sw $t0, -28($fp) sw $t1, -0($fp) sw $t2, -32($fp) sw $t3, -40($fp) sw $t4, -44($fp) -beqz $t3, continue__1399 +beqz $t3, continue__1455 la $a0, dispatch_error j .raise -continue__1399: +continue__1455: lw $t0, -32($fp) lw $t1, -36($fp) # Find the actual name in the dispatch table @@ -9152,9 +9152,9 @@ lw $fp, ($sp) lw $t0, -48($fp) # saves the return value move $t0, $v0 -# If local_main_Main_internal_11 goto true__1412 +# If local_main_Main_internal_11 goto true__1468 sw $t0, -48($fp) -bnez $t0, true__1412 +bnez $t0, true__1468 lw $t0, -56($fp) # Saves in local_main_Main_internal_13 data_56 la $t0, data_56 @@ -9198,8 +9198,8 @@ move $t1, $t0 sw $t1, -52($fp) sw $t0, -60($fp) sw $t1, -52($fp) -j end__1412 -true__1412: +j end__1468 +true__1468: lw $t0, -64($fp) # Saves in local_main_Main_internal_15 data_57 la $t0, data_57 @@ -9243,7 +9243,7 @@ move $t1, $t0 sw $t1, -52($fp) sw $t0, -68($fp) sw $t1, -52($fp) -end__1412: +end__1468: lw $t0, -0($fp) lw $t1, -72($fp) # local_main_Main_avar_17 <- GET self . avar @@ -9343,13 +9343,13 @@ bnez $a1, mismatch_49 li $v0, 1 end_49: move $t4, $v0 -# If local_main_Main_internal_20 goto true__1446 +# If local_main_Main_internal_20 goto true__1506 sw $t0, -80($fp) sw $t1, -0($fp) sw $t2, -88($fp) sw $t3, -92($fp) sw $t4, -84($fp) -bnez $t4, true__1446 +bnez $t4, true__1506 lw $t0, -0($fp) lw $t1, -104($fp) # local_main_Main_char_25 <- GET self . char @@ -9379,12 +9379,12 @@ bnez $a1, mismatch_50 li $v0, 1 end_50: move $t3, $v0 -# If local_main_Main_internal_24 goto true__1455 +# If local_main_Main_internal_24 goto true__1515 sw $t0, -0($fp) sw $t1, -104($fp) sw $t2, -108($fp) sw $t3, -100($fp) -bnez $t3, true__1455 +bnez $t3, true__1515 lw $t0, -0($fp) lw $t1, -120($fp) # local_main_Main_char_29 <- GET self . char @@ -9414,12 +9414,12 @@ bnez $a1, mismatch_51 li $v0, 1 end_51: move $t3, $v0 -# If local_main_Main_internal_28 goto true__1464 +# If local_main_Main_internal_28 goto true__1524 sw $t0, -0($fp) sw $t1, -120($fp) sw $t2, -124($fp) sw $t3, -116($fp) -bnez $t3, true__1464 +bnez $t3, true__1524 lw $t0, -0($fp) lw $t1, -136($fp) # local_main_Main_char_33 <- GET self . char @@ -9449,12 +9449,12 @@ bnez $a1, mismatch_52 li $v0, 1 end_52: move $t3, $v0 -# If local_main_Main_internal_32 goto true__1473 +# If local_main_Main_internal_32 goto true__1533 sw $t0, -0($fp) sw $t1, -136($fp) sw $t2, -140($fp) sw $t3, -132($fp) -bnez $t3, true__1473 +bnez $t3, true__1533 lw $t0, -0($fp) lw $t1, -152($fp) # local_main_Main_char_37 <- GET self . char @@ -9484,12 +9484,12 @@ bnez $a1, mismatch_53 li $v0, 1 end_53: move $t3, $v0 -# If local_main_Main_internal_36 goto true__1482 +# If local_main_Main_internal_36 goto true__1542 sw $t0, -0($fp) sw $t1, -152($fp) sw $t2, -156($fp) sw $t3, -148($fp) -bnez $t3, true__1482 +bnez $t3, true__1542 lw $t0, -0($fp) lw $t1, -168($fp) # local_main_Main_char_41 <- GET self . char @@ -9519,12 +9519,12 @@ bnez $a1, mismatch_54 li $v0, 1 end_54: move $t3, $v0 -# If local_main_Main_internal_40 goto true__1491 +# If local_main_Main_internal_40 goto true__1551 sw $t0, -0($fp) sw $t1, -168($fp) sw $t2, -172($fp) sw $t3, -164($fp) -bnez $t3, true__1491 +bnez $t3, true__1551 lw $t0, -0($fp) lw $t1, -184($fp) # local_main_Main_char_45 <- GET self . char @@ -9554,12 +9554,12 @@ bnez $a1, mismatch_55 li $v0, 1 end_55: move $t3, $v0 -# If local_main_Main_internal_44 goto true__1500 +# If local_main_Main_internal_44 goto true__1560 sw $t0, -0($fp) sw $t1, -184($fp) sw $t2, -188($fp) sw $t3, -180($fp) -bnez $t3, true__1500 +bnez $t3, true__1560 lw $t0, -0($fp) lw $t1, -200($fp) # local_main_Main_char_49 <- GET self . char @@ -9589,12 +9589,12 @@ bnez $a1, mismatch_56 li $v0, 1 end_56: move $t3, $v0 -# If local_main_Main_internal_48 goto true__1509 +# If local_main_Main_internal_48 goto true__1569 sw $t0, -0($fp) sw $t1, -200($fp) sw $t2, -204($fp) sw $t3, -196($fp) -bnez $t3, true__1509 +bnez $t3, true__1569 lw $t0, -0($fp) lw $t1, -216($fp) # local_main_Main_char_53 <- GET self . char @@ -9624,12 +9624,12 @@ bnez $a1, mismatch_57 li $v0, 1 end_57: move $t3, $v0 -# If local_main_Main_internal_52 goto true__1518 +# If local_main_Main_internal_52 goto true__1578 sw $t0, -0($fp) sw $t1, -216($fp) sw $t2, -220($fp) sw $t3, -212($fp) -bnez $t3, true__1518 +bnez $t3, true__1578 lw $t0, -0($fp) lw $t1, -232($fp) # local_main_Main_char_57 <- GET self . char @@ -9659,12 +9659,12 @@ bnez $a1, mismatch_58 li $v0, 1 end_58: move $t3, $v0 -# If local_main_Main_internal_56 goto true__1527 +# If local_main_Main_internal_56 goto true__1587 sw $t0, -0($fp) sw $t1, -232($fp) sw $t2, -236($fp) sw $t3, -228($fp) -bnez $t3, true__1527 +bnez $t3, true__1587 lw $t0, -244($fp) # Syscall to allocate memory of the object entry in heap li $v0, 9 @@ -9734,16 +9734,16 @@ bnez $a1, mismatch_59 li $v0, 1 end_59: move $t3, $v0 -# If not local_main_Main_internal_63 goto continue__1536 +# If not local_main_Main_internal_63 goto continue__1597 sw $t0, -244($fp) sw $t1, -0($fp) sw $t2, -248($fp) sw $t3, -256($fp) sw $t4, -260($fp) -beqz $t3, continue__1536 +beqz $t3, continue__1597 la $a0, dispatch_error j .raise -continue__1536: +continue__1597: lw $t0, -248($fp) lw $t1, -252($fp) # Find the actual name in the dispatch table @@ -9802,15 +9802,15 @@ bnez $a1, mismatch_60 li $v0, 1 end_60: move $t2, $v0 -# If not local_main_Main_internal_66 goto continue__1549 +# If not local_main_Main_internal_66 goto continue__1609 sw $t0, -252($fp) sw $t1, -244($fp) sw $t2, -268($fp) sw $t3, -272($fp) -beqz $t2, continue__1549 +beqz $t2, continue__1609 la $a0, dispatch_error j .raise -continue__1549: +continue__1609: lw $t0, -244($fp) lw $t1, -264($fp) # Find the actual name in the dispatch table @@ -9856,8 +9856,8 @@ sw $t2, -240($fp) sw $t0, -264($fp) sw $t1, -0($fp) sw $t2, -240($fp) -j end__1527 -true__1527: +j end__1587 +true__1587: lw $t0, -0($fp) # self . flag <- SET 0 li $t9, 0 @@ -9868,7 +9868,7 @@ li $t1, 0 sw $t1, -240($fp) sw $t0, -0($fp) sw $t1, -240($fp) -end__1527: +end__1587: lw $t0, -240($fp) lw $t1, -224($fp) # Moving local_main_Main_internal_59 to local_main_Main_internal_55 @@ -9876,8 +9876,8 @@ move $t1, $t0 sw $t1, -224($fp) sw $t0, -240($fp) sw $t1, -224($fp) -j end__1518 -true__1518: +j end__1578 +true__1578: lw $t0, -276($fp) # Syscall to allocate memory of the object entry in heap li $v0, 9 @@ -9926,7 +9926,7 @@ sw $t2, -224($fp) sw $t0, -276($fp) sw $t1, -0($fp) sw $t2, -224($fp) -end__1518: +end__1578: lw $t0, -224($fp) lw $t1, -208($fp) # Moving local_main_Main_internal_55 to local_main_Main_internal_51 @@ -9934,8 +9934,8 @@ move $t1, $t0 sw $t1, -208($fp) sw $t0, -224($fp) sw $t1, -208($fp) -j end__1509 -true__1509: +j end__1569 +true__1569: lw $t0, -284($fp) # Initialize void node li $a0, 4 @@ -10020,16 +10020,16 @@ bnez $a1, mismatch_61 li $v0, 1 end_61: move $t3, $v0 -# If not local_main_Main_internal_74 goto continue__1589 +# If not local_main_Main_internal_74 goto continue__1650 sw $t0, -288($fp) sw $t1, -0($fp) sw $t2, -292($fp) sw $t3, -300($fp) sw $t4, -304($fp) -beqz $t3, continue__1589 +beqz $t3, continue__1650 la $a0, dispatch_error j .raise -continue__1589: +continue__1650: lw $t0, -292($fp) lw $t1, -296($fp) # Find the actual name in the dispatch table @@ -10088,15 +10088,15 @@ bnez $a1, mismatch_62 li $v0, 1 end_62: move $t2, $v0 -# If not local_main_Main_internal_77 goto continue__1602 +# If not local_main_Main_internal_77 goto continue__1662 sw $t0, -296($fp) sw $t1, -288($fp) sw $t2, -312($fp) sw $t3, -316($fp) -beqz $t2, continue__1602 +beqz $t2, continue__1662 la $a0, dispatch_error j .raise -continue__1602: +continue__1662: lw $t0, -288($fp) lw $t1, -308($fp) # Find the actual name in the dispatch table @@ -10167,17 +10167,17 @@ bnez $a1, mismatch_63 li $v0, 1 end_63: move $t4, $v0 -# If not local_main_Main_internal_83 goto continue__1619 +# If not local_main_Main_internal_83 goto continue__1679 sw $t0, -308($fp) sw $t1, -284($fp) sw $t2, -0($fp) sw $t3, -328($fp) sw $t4, -336($fp) sw $t5, -340($fp) -beqz $t4, continue__1619 +beqz $t4, continue__1679 la $a0, dispatch_error j .raise -continue__1619: +continue__1679: lw $t0, -328($fp) lw $t1, -332($fp) # Find the actual name in the dispatch table @@ -10236,15 +10236,15 @@ bnez $a1, mismatch_64 li $v0, 1 end_64: move $t2, $v0 -# If not local_main_Main_internal_87 goto continue__1632 +# If not local_main_Main_internal_87 goto continue__1692 sw $t0, -332($fp) sw $t1, -284($fp) sw $t2, -352($fp) sw $t3, -356($fp) -beqz $t2, continue__1632 +beqz $t2, continue__1692 la $a0, dispatch_error j .raise -continue__1632: +continue__1692: lw $t0, -284($fp) lw $t1, -348($fp) # Find the actual name in the dispatch table @@ -10527,16 +10527,16 @@ bnez $a1, mismatch_65 li $v0, 1 end_65: move $t3, $v0 -# If not local_main_Main_internal_101 goto continue__1678 +# If not local_main_Main_internal_101 goto continue__1744 sw $t0, -392($fp) sw $t1, -400($fp) sw $t2, -396($fp) sw $t3, -408($fp) sw $t4, -412($fp) -beqz $t3, continue__1678 +beqz $t3, continue__1744 la $a0, dispatch_error j .raise -continue__1678: +continue__1744: lw $t0, -396($fp) lw $t1, -404($fp) # Find the actual name in the dispatch table @@ -10671,7 +10671,7 @@ sw $t3, -284($fp) sw $t4, -0($fp) sw $t5, -436($fp) sw $t6, -208($fp) -end__1509: +end__1569: lw $t0, -208($fp) lw $t1, -192($fp) # Moving local_main_Main_internal_51 to local_main_Main_internal_47 @@ -10679,8 +10679,8 @@ move $t1, $t0 sw $t1, -192($fp) sw $t0, -208($fp) sw $t1, -192($fp) -j end__1500 -true__1500: +j end__1560 +true__1560: lw $t0, -440($fp) # Syscall to allocate memory of the object entry in heap li $v0, 9 @@ -10750,16 +10750,16 @@ bnez $a1, mismatch_66 li $v0, 1 end_66: move $t3, $v0 -# If not local_main_Main_internal_112 goto continue__1716 +# If not local_main_Main_internal_112 goto continue__1784 sw $t0, -440($fp) sw $t1, -0($fp) sw $t2, -444($fp) sw $t3, -452($fp) sw $t4, -456($fp) -beqz $t3, continue__1716 +beqz $t3, continue__1784 la $a0, dispatch_error j .raise -continue__1716: +continue__1784: lw $t0, -444($fp) lw $t1, -448($fp) # Find the actual name in the dispatch table @@ -10818,15 +10818,15 @@ bnez $a1, mismatch_67 li $v0, 1 end_67: move $t2, $v0 -# If not local_main_Main_internal_115 goto continue__1729 +# If not local_main_Main_internal_115 goto continue__1796 sw $t0, -448($fp) sw $t1, -440($fp) sw $t2, -464($fp) sw $t3, -468($fp) -beqz $t2, continue__1729 +beqz $t2, continue__1796 la $a0, dispatch_error j .raise -continue__1729: +continue__1796: lw $t0, -440($fp) lw $t1, -460($fp) # Find the actual name in the dispatch table @@ -10862,9 +10862,9 @@ lw $fp, ($sp) lw $t0, -460($fp) # saves the return value move $t0, $v0 -# If local_main_Main_internal_114 goto true__1739 +# If local_main_Main_internal_114 goto true__1806 sw $t0, -460($fp) -bnez $t0, true__1739 +bnez $t0, true__1806 lw $t0, -476($fp) # Saves in local_main_Main_internal_118 data_72 la $t0, data_72 @@ -10989,8 +10989,8 @@ sw $t2, -472($fp) sw $t0, -496($fp) sw $t1, -500($fp) sw $t2, -472($fp) -j end__1739 -true__1739: +j end__1806 +true__1806: lw $t0, -504($fp) # Saves in local_main_Main_internal_125 data_74 la $t0, data_74 @@ -11115,7 +11115,7 @@ sw $t2, -472($fp) sw $t0, -524($fp) sw $t1, -528($fp) sw $t2, -472($fp) -end__1739: +end__1806: lw $t0, -472($fp) lw $t1, -192($fp) # Moving local_main_Main_internal_117 to local_main_Main_internal_47 @@ -11123,7 +11123,7 @@ move $t1, $t0 sw $t1, -192($fp) sw $t0, -472($fp) sw $t1, -192($fp) -end__1500: +end__1560: lw $t0, -192($fp) lw $t1, -176($fp) # Moving local_main_Main_internal_47 to local_main_Main_internal_43 @@ -11131,8 +11131,8 @@ move $t1, $t0 sw $t1, -176($fp) sw $t0, -192($fp) sw $t1, -176($fp) -j end__1491 -true__1491: +j end__1551 +true__1551: lw $t0, -532($fp) # Syscall to allocate memory of the object entry in heap li $v0, 9 @@ -11202,16 +11202,16 @@ bnez $a1, mismatch_68 li $v0, 1 end_68: move $t3, $v0 -# If not local_main_Main_internal_135 goto continue__1796 +# If not local_main_Main_internal_135 goto continue__1870 sw $t0, -532($fp) sw $t1, -0($fp) sw $t2, -536($fp) sw $t3, -544($fp) sw $t4, -548($fp) -beqz $t3, continue__1796 +beqz $t3, continue__1870 la $a0, dispatch_error j .raise -continue__1796: +continue__1870: lw $t0, -536($fp) lw $t1, -540($fp) # Find the actual name in the dispatch table @@ -11270,15 +11270,15 @@ bnez $a1, mismatch_69 li $v0, 1 end_69: move $t2, $v0 -# If not local_main_Main_internal_138 goto continue__1809 +# If not local_main_Main_internal_138 goto continue__1882 sw $t0, -540($fp) sw $t1, -532($fp) sw $t2, -556($fp) sw $t3, -560($fp) -beqz $t2, continue__1809 +beqz $t2, continue__1882 la $a0, dispatch_error j .raise -continue__1809: +continue__1882: lw $t0, -552($fp) # Static Dispatch of the method method5 sw $fp, ($sp) @@ -11319,7 +11319,7 @@ sw $t2, -176($fp) sw $t0, -552($fp) sw $t1, -0($fp) sw $t2, -176($fp) -end__1491: +end__1551: lw $t0, -176($fp) lw $t1, -160($fp) # Moving local_main_Main_internal_43 to local_main_Main_internal_39 @@ -11327,8 +11327,8 @@ move $t1, $t0 sw $t1, -160($fp) sw $t0, -176($fp) sw $t1, -160($fp) -j end__1482 -true__1482: +j end__1542 +true__1542: lw $t0, -564($fp) # Syscall to allocate memory of the object entry in heap li $v0, 9 @@ -11398,16 +11398,16 @@ bnez $a1, mismatch_70 li $v0, 1 end_70: move $t3, $v0 -# If not local_main_Main_internal_143 goto continue__1832 +# If not local_main_Main_internal_143 goto continue__1906 sw $t0, -564($fp) sw $t1, -0($fp) sw $t2, -568($fp) sw $t3, -576($fp) sw $t4, -580($fp) -beqz $t3, continue__1832 +beqz $t3, continue__1906 la $a0, dispatch_error j .raise -continue__1832: +continue__1906: lw $t0, -568($fp) lw $t1, -572($fp) # Find the actual name in the dispatch table @@ -11466,15 +11466,15 @@ bnez $a1, mismatch_71 li $v0, 1 end_71: move $t2, $v0 -# If not local_main_Main_internal_146 goto continue__1845 +# If not local_main_Main_internal_146 goto continue__1918 sw $t0, -572($fp) sw $t1, -564($fp) sw $t2, -588($fp) sw $t3, -592($fp) -beqz $t2, continue__1845 +beqz $t2, continue__1918 la $a0, dispatch_error j .raise -continue__1845: +continue__1918: lw $t0, -584($fp) # Static Dispatch of the method method5 sw $fp, ($sp) @@ -11515,7 +11515,7 @@ sw $t2, -160($fp) sw $t0, -584($fp) sw $t1, -0($fp) sw $t2, -160($fp) -end__1482: +end__1542: lw $t0, -160($fp) lw $t1, -144($fp) # Moving local_main_Main_internal_39 to local_main_Main_internal_35 @@ -11523,8 +11523,8 @@ move $t1, $t0 sw $t1, -144($fp) sw $t0, -160($fp) sw $t1, -144($fp) -j end__1473 -true__1473: +j end__1533 +true__1533: lw $t0, -596($fp) # Syscall to allocate memory of the object entry in heap li $v0, 9 @@ -11594,16 +11594,16 @@ bnez $a1, mismatch_72 li $v0, 1 end_72: move $t3, $v0 -# If not local_main_Main_internal_151 goto continue__1868 +# If not local_main_Main_internal_151 goto continue__1942 sw $t0, -596($fp) sw $t1, -0($fp) sw $t2, -600($fp) sw $t3, -608($fp) sw $t4, -612($fp) -beqz $t3, continue__1868 +beqz $t3, continue__1942 la $a0, dispatch_error j .raise -continue__1868: +continue__1942: lw $t0, -600($fp) lw $t1, -604($fp) # Find the actual name in the dispatch table @@ -11662,15 +11662,15 @@ bnez $a1, mismatch_73 li $v0, 1 end_73: move $t2, $v0 -# If not local_main_Main_internal_154 goto continue__1881 +# If not local_main_Main_internal_154 goto continue__1954 sw $t0, -604($fp) sw $t1, -596($fp) sw $t2, -620($fp) sw $t3, -624($fp) -beqz $t2, continue__1881 +beqz $t2, continue__1954 la $a0, dispatch_error j .raise -continue__1881: +continue__1954: lw $t0, -616($fp) # Static Dispatch of the method method5 sw $fp, ($sp) @@ -11711,7 +11711,7 @@ sw $t2, -144($fp) sw $t0, -616($fp) sw $t1, -0($fp) sw $t2, -144($fp) -end__1473: +end__1533: lw $t0, -144($fp) lw $t1, -128($fp) # Moving local_main_Main_internal_35 to local_main_Main_internal_31 @@ -11719,8 +11719,8 @@ move $t1, $t0 sw $t1, -128($fp) sw $t0, -144($fp) sw $t1, -128($fp) -j end__1464 -true__1464: +j end__1524 +true__1524: lw $t0, -628($fp) # Syscall to allocate memory of the object entry in heap li $v0, 9 @@ -11818,15 +11818,15 @@ bnez $a1, mismatch_74 li $v0, 1 end_74: move $t2, $v0 -# If not local_main_Main_internal_159 goto continue__1905 +# If not local_main_Main_internal_159 goto continue__1979 sw $t0, -632($fp) sw $t1, -628($fp) sw $t2, -640($fp) sw $t3, -644($fp) -beqz $t2, continue__1905 +beqz $t2, continue__1979 la $a0, dispatch_error j .raise -continue__1905: +continue__1979: lw $t0, -628($fp) lw $t1, -636($fp) # Find the actual name in the dispatch table @@ -11936,16 +11936,16 @@ bnez $a1, mismatch_75 li $v0, 1 end_75: move $t3, $v0 -# If not local_main_Main_internal_164 goto continue__1923 +# If not local_main_Main_internal_164 goto continue__1998 sw $t0, -648($fp) sw $t1, -0($fp) sw $t2, -652($fp) sw $t3, -660($fp) sw $t4, -664($fp) -beqz $t3, continue__1923 +beqz $t3, continue__1998 la $a0, dispatch_error j .raise -continue__1923: +continue__1998: lw $t0, -652($fp) lw $t1, -656($fp) # Find the actual name in the dispatch table @@ -12007,16 +12007,16 @@ bnez $a1, mismatch_76 li $v0, 1 end_76: move $t3, $v0 -# If not local_main_Main_internal_168 goto continue__1937 +# If not local_main_Main_internal_168 goto continue__2012 sw $t0, -656($fp) sw $t1, -0($fp) sw $t2, -668($fp) sw $t3, -676($fp) sw $t4, -680($fp) -beqz $t3, continue__1937 +beqz $t3, continue__2012 la $a0, dispatch_error j .raise -continue__1937: +continue__2012: lw $t0, -668($fp) lw $t1, -672($fp) # Find the actual name in the dispatch table @@ -12075,15 +12075,15 @@ bnez $a1, mismatch_77 li $v0, 1 end_77: move $t2, $v0 -# If not local_main_Main_internal_171 goto continue__1951 +# If not local_main_Main_internal_171 goto continue__2025 sw $t0, -672($fp) sw $t1, -648($fp) sw $t2, -688($fp) sw $t3, -692($fp) -beqz $t2, continue__1951 +beqz $t2, continue__2025 la $a0, dispatch_error j .raise -continue__1951: +continue__2025: lw $t0, -648($fp) lw $t1, -684($fp) # Find the actual name in the dispatch table @@ -12139,7 +12139,7 @@ sw $t0, -684($fp) sw $t1, -0($fp) sw $t2, -696($fp) sw $t3, -128($fp) -end__1464: +end__1524: lw $t0, -128($fp) lw $t1, -112($fp) # Moving local_main_Main_internal_31 to local_main_Main_internal_27 @@ -12147,8 +12147,8 @@ move $t1, $t0 sw $t1, -112($fp) sw $t0, -128($fp) sw $t1, -112($fp) -j end__1455 -true__1455: +j end__1515 +true__1515: lw $t0, -0($fp) lw $t1, -700($fp) # local_main_Main_avar_174 <- GET self . avar @@ -12180,12 +12180,12 @@ bnez $a1, mismatch_78 li $v0, 1 end_78: move $t2, $v0 -# If local_main_Main_internal_176 goto error__1972 +# If local_main_Main_internal_176 goto error__2046 sw $t0, -0($fp) sw $t1, -700($fp) sw $t2, -708($fp) sw $t3, -712($fp) -bnez $t2, error__1972 +bnez $t2, error__2046 lw $t0, -700($fp) lw $t1, -716($fp) la $t9, type_C @@ -12203,10 +12203,10 @@ j end_79 false_79: li $t1, 0 end_79: -# If not local_main_Main_internal_178 goto next__1978_0 +# If not local_main_Main_internal_178 goto next__2052_0 sw $t0, -700($fp) sw $t1, -716($fp) -beqz $t1, next__1978_0 +beqz $t1, next__2052_0 lw $t0, -700($fp) lw $t1, -720($fp) # Moving local_main_Main_avar_174 to local_main_Main_c_179 @@ -12239,15 +12239,15 @@ bnez $a1, mismatch_80 li $v0, 1 end_80: move $t2, $v0 -# If not local_main_Main_internal_181 goto continue__1985 +# If not local_main_Main_internal_181 goto continue__2060 sw $t0, -700($fp) sw $t1, -720($fp) sw $t2, -728($fp) sw $t3, -732($fp) -beqz $t2, continue__1985 +beqz $t2, continue__2060 la $a0, dispatch_error j .raise -continue__1985: +continue__2060: lw $t0, -720($fp) lw $t1, -724($fp) # Find the actual name in the dispatch table @@ -12306,15 +12306,15 @@ bnez $a1, mismatch_81 li $v0, 1 end_81: move $t2, $v0 -# If not local_main_Main_internal_184 goto continue__1998 +# If not local_main_Main_internal_184 goto continue__2072 sw $t0, -724($fp) sw $t1, -720($fp) sw $t2, -740($fp) sw $t3, -744($fp) -beqz $t2, continue__1998 +beqz $t2, continue__2072 la $a0, dispatch_error j .raise -continue__1998: +continue__2072: lw $t0, -720($fp) lw $t1, -736($fp) # Find the actual name in the dispatch table @@ -12360,8 +12360,8 @@ sw $t2, -704($fp) sw $t0, -736($fp) sw $t1, -0($fp) sw $t2, -704($fp) -j end__1972 -next__1978_0: +j end__2046 +next__2052_0: lw $t0, -700($fp) lw $t1, -748($fp) la $t9, type_A @@ -12379,10 +12379,10 @@ j end_82 false_82: li $t1, 0 end_82: -# If not local_main_Main_internal_186 goto next__2012_1 +# If not local_main_Main_internal_186 goto next__2086_1 sw $t0, -700($fp) sw $t1, -748($fp) -beqz $t1, next__2012_1 +beqz $t1, next__2086_1 lw $t0, -700($fp) lw $t1, -752($fp) # Moving local_main_Main_avar_174 to local_main_Main_a_187 @@ -12415,15 +12415,15 @@ bnez $a1, mismatch_83 li $v0, 1 end_83: move $t2, $v0 -# If not local_main_Main_internal_189 goto continue__2019 +# If not local_main_Main_internal_189 goto continue__2094 sw $t0, -700($fp) sw $t1, -752($fp) sw $t2, -760($fp) sw $t3, -764($fp) -beqz $t2, continue__2019 +beqz $t2, continue__2094 la $a0, dispatch_error j .raise -continue__2019: +continue__2094: lw $t0, -752($fp) lw $t1, -756($fp) # Find the actual name in the dispatch table @@ -12482,15 +12482,15 @@ bnez $a1, mismatch_84 li $v0, 1 end_84: move $t2, $v0 -# If not local_main_Main_internal_192 goto continue__2032 +# If not local_main_Main_internal_192 goto continue__2106 sw $t0, -756($fp) sw $t1, -752($fp) sw $t2, -772($fp) sw $t3, -776($fp) -beqz $t2, continue__2032 +beqz $t2, continue__2106 la $a0, dispatch_error j .raise -continue__2032: +continue__2106: lw $t0, -752($fp) lw $t1, -768($fp) # Find the actual name in the dispatch table @@ -12536,8 +12536,8 @@ sw $t2, -704($fp) sw $t0, -768($fp) sw $t1, -0($fp) sw $t2, -704($fp) -j end__1972 -next__2012_1: +j end__2046 +next__2086_1: lw $t0, -700($fp) lw $t1, -780($fp) la $t9, type_Object @@ -12555,10 +12555,10 @@ j end_85 false_85: li $t1, 0 end_85: -# If not local_main_Main_internal_194 goto next__2046_2 +# If not local_main_Main_internal_194 goto next__2120_2 sw $t0, -700($fp) sw $t1, -780($fp) -beqz $t1, next__2046_2 +beqz $t1, next__2120_2 lw $t0, -700($fp) lw $t1, -784($fp) # Moving local_main_Main_avar_174 to local_main_Main_o_195 @@ -12638,6 +12638,20 @@ lw $t1, -800($fp) # Moving 0 to local_main_Main_internal_199 li $t1, 0 sw $t1, -800($fp) +# Initialize new node +li $a0, 12 +li $v0, 9 +syscall +la $t9, type_Int +sw $t9, 0($v0) +li $t9, 12 +sw $t9, 4($v0) +move $t1, $v0 +# Saving the methods of object +# Adding Type Info addr +la $t8, types +lw $v0, 8($t8) +sw $v0, 8($t1) lw $t2, -704($fp) # Moving local_main_Main_internal_199 to local_main_Main_internal_175 move $t2, $t1 @@ -12645,14 +12659,14 @@ sw $t2, -704($fp) sw $t0, -796($fp) sw $t1, -800($fp) sw $t2, -704($fp) -j end__1972 -next__2046_2: +j end__2046 +next__2120_2: la $a0, case_error j .raise -error__1972: +error__2046: la $a0, case_void_error j .raise -end__1972: +end__2046: lw $t0, -704($fp) lw $t1, -112($fp) # Moving local_main_Main_internal_175 to local_main_Main_internal_27 @@ -12660,7 +12674,7 @@ move $t1, $t0 sw $t1, -112($fp) sw $t0, -704($fp) sw $t1, -112($fp) -end__1455: +end__1515: lw $t0, -112($fp) lw $t1, -96($fp) # Moving local_main_Main_internal_27 to local_main_Main_internal_23 @@ -12668,8 +12682,8 @@ move $t1, $t0 sw $t1, -96($fp) sw $t0, -112($fp) sw $t1, -96($fp) -j end__1446 -true__1446: +j end__1506 +true__1506: lw $t0, -804($fp) # Syscall to allocate memory of the object entry in heap li $v0, 9 @@ -12767,15 +12781,15 @@ bnez $a1, mismatch_86 li $v0, 1 end_86: move $t2, $v0 -# If not local_main_Main_internal_203 goto continue__2081 +# If not local_main_Main_internal_203 goto continue__2159 sw $t0, -808($fp) sw $t1, -804($fp) sw $t2, -816($fp) sw $t3, -820($fp) -beqz $t2, continue__2081 +beqz $t2, continue__2159 la $a0, dispatch_error j .raise -continue__2081: +continue__2159: lw $t0, -804($fp) lw $t1, -812($fp) # Find the actual name in the dispatch table @@ -12885,16 +12899,16 @@ bnez $a1, mismatch_87 li $v0, 1 end_87: move $t3, $v0 -# If not local_main_Main_internal_208 goto continue__2099 +# If not local_main_Main_internal_208 goto continue__2178 sw $t0, -824($fp) sw $t1, -0($fp) sw $t2, -828($fp) sw $t3, -836($fp) sw $t4, -840($fp) -beqz $t3, continue__2099 +beqz $t3, continue__2178 la $a0, dispatch_error j .raise -continue__2099: +continue__2178: lw $t0, -828($fp) lw $t1, -832($fp) # Find the actual name in the dispatch table @@ -12956,16 +12970,16 @@ bnez $a1, mismatch_88 li $v0, 1 end_88: move $t3, $v0 -# If not local_main_Main_internal_212 goto continue__2113 +# If not local_main_Main_internal_212 goto continue__2192 sw $t0, -832($fp) sw $t1, -0($fp) sw $t2, -844($fp) sw $t3, -852($fp) sw $t4, -856($fp) -beqz $t3, continue__2113 +beqz $t3, continue__2192 la $a0, dispatch_error j .raise -continue__2113: +continue__2192: lw $t0, -844($fp) lw $t1, -848($fp) # Find the actual name in the dispatch table @@ -13024,15 +13038,15 @@ bnez $a1, mismatch_89 li $v0, 1 end_89: move $t2, $v0 -# If not local_main_Main_internal_215 goto continue__2127 +# If not local_main_Main_internal_215 goto continue__2205 sw $t0, -848($fp) sw $t1, -824($fp) sw $t2, -864($fp) sw $t3, -868($fp) -beqz $t2, continue__2127 +beqz $t2, continue__2205 la $a0, dispatch_error j .raise -continue__2127: +continue__2205: lw $t0, -824($fp) lw $t1, -860($fp) # Find the actual name in the dispatch table @@ -13088,7 +13102,7 @@ sw $t0, -860($fp) sw $t1, -0($fp) sw $t2, -872($fp) sw $t3, -96($fp) -end__1446: +end__1506: lw $t0, -96($fp) lw $t1, -876($fp) # Moving local_main_Main_internal_23 to local_main_Main_internal_218 @@ -13101,8 +13115,8 @@ sw $t2, -8($fp) sw $t0, -96($fp) sw $t1, -876($fp) sw $t2, -8($fp) -j start__1378 -end__1378: +j start__1431 +end__1431: lw $t0, -8($fp) lw $t1, -880($fp) # Moving local_main_Main_internal_1 to local_main_Main_internal_219 diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips index 65f00021..d58e971f 100644 --- a/tests/codegen/atoi.mips +++ b/tests/codegen/atoi.mips @@ -1655,91 +1655,91 @@ lw $t1, -8($fp) # local_i2c_A2I_internal_0 <- i = 0 li $t9, 0 seq $t1, $t0, $t9 -# If local_i2c_A2I_internal_0 goto true__179 +# If local_i2c_A2I_internal_0 goto true__180 sw $t0, -0($fp) sw $t1, -8($fp) -bnez $t1, true__179 +bnez $t1, true__180 lw $t0, -0($fp) lw $t1, -16($fp) # local_i2c_A2I_internal_2 <- i = 1 li $t9, 1 seq $t1, $t0, $t9 -# If local_i2c_A2I_internal_2 goto true__183 +# If local_i2c_A2I_internal_2 goto true__184 sw $t0, -0($fp) sw $t1, -16($fp) -bnez $t1, true__183 +bnez $t1, true__184 lw $t0, -0($fp) lw $t1, -24($fp) # local_i2c_A2I_internal_4 <- i = 2 li $t9, 2 seq $t1, $t0, $t9 -# If local_i2c_A2I_internal_4 goto true__187 +# If local_i2c_A2I_internal_4 goto true__188 sw $t0, -0($fp) sw $t1, -24($fp) -bnez $t1, true__187 +bnez $t1, true__188 lw $t0, -0($fp) lw $t1, -32($fp) # local_i2c_A2I_internal_6 <- i = 3 li $t9, 3 seq $t1, $t0, $t9 -# If local_i2c_A2I_internal_6 goto true__191 +# If local_i2c_A2I_internal_6 goto true__192 sw $t0, -0($fp) sw $t1, -32($fp) -bnez $t1, true__191 +bnez $t1, true__192 lw $t0, -0($fp) lw $t1, -40($fp) # local_i2c_A2I_internal_8 <- i = 4 li $t9, 4 seq $t1, $t0, $t9 -# If local_i2c_A2I_internal_8 goto true__195 +# If local_i2c_A2I_internal_8 goto true__196 sw $t0, -0($fp) sw $t1, -40($fp) -bnez $t1, true__195 +bnez $t1, true__196 lw $t0, -0($fp) lw $t1, -48($fp) # local_i2c_A2I_internal_10 <- i = 5 li $t9, 5 seq $t1, $t0, $t9 -# If local_i2c_A2I_internal_10 goto true__199 +# If local_i2c_A2I_internal_10 goto true__200 sw $t0, -0($fp) sw $t1, -48($fp) -bnez $t1, true__199 +bnez $t1, true__200 lw $t0, -0($fp) lw $t1, -56($fp) # local_i2c_A2I_internal_12 <- i = 6 li $t9, 6 seq $t1, $t0, $t9 -# If local_i2c_A2I_internal_12 goto true__203 +# If local_i2c_A2I_internal_12 goto true__204 sw $t0, -0($fp) sw $t1, -56($fp) -bnez $t1, true__203 +bnez $t1, true__204 lw $t0, -0($fp) lw $t1, -64($fp) # local_i2c_A2I_internal_14 <- i = 7 li $t9, 7 seq $t1, $t0, $t9 -# If local_i2c_A2I_internal_14 goto true__207 +# If local_i2c_A2I_internal_14 goto true__208 sw $t0, -0($fp) sw $t1, -64($fp) -bnez $t1, true__207 +bnez $t1, true__208 lw $t0, -0($fp) lw $t1, -72($fp) # local_i2c_A2I_internal_16 <- i = 8 li $t9, 8 seq $t1, $t0, $t9 -# If local_i2c_A2I_internal_16 goto true__211 +# If local_i2c_A2I_internal_16 goto true__212 sw $t0, -0($fp) sw $t1, -72($fp) -bnez $t1, true__211 +bnez $t1, true__212 lw $t0, -0($fp) lw $t1, -80($fp) # local_i2c_A2I_internal_18 <- i = 9 li $t9, 9 seq $t1, $t0, $t9 -# If local_i2c_A2I_internal_18 goto true__215 +# If local_i2c_A2I_internal_18 goto true__216 sw $t0, -0($fp) sw $t1, -80($fp) -bnez $t1, true__215 +bnez $t1, true__216 lw $t0, -4($fp) lw $t1, -88($fp) # Find the actual name in the dispatch table @@ -1785,8 +1785,8 @@ sw $t0, -88($fp) sw $t1, -92($fp) sw $t2, -96($fp) sw $t3, -84($fp) -j end__215 -true__215: +j end__216 +true__216: lw $t0, -100($fp) # Saves in local_i2c_A2I_internal_23 data_12 la $t0, data_12 @@ -1796,7 +1796,7 @@ move $t1, $t0 sw $t1, -84($fp) sw $t0, -100($fp) sw $t1, -84($fp) -end__215: +end__216: lw $t0, -84($fp) lw $t1, -76($fp) # Moving local_i2c_A2I_internal_19 to local_i2c_A2I_internal_17 @@ -1804,8 +1804,8 @@ move $t1, $t0 sw $t1, -76($fp) sw $t0, -84($fp) sw $t1, -76($fp) -j end__211 -true__211: +j end__212 +true__212: lw $t0, -104($fp) # Saves in local_i2c_A2I_internal_24 data_13 la $t0, data_13 @@ -1815,7 +1815,7 @@ move $t1, $t0 sw $t1, -76($fp) sw $t0, -104($fp) sw $t1, -76($fp) -end__211: +end__212: lw $t0, -76($fp) lw $t1, -68($fp) # Moving local_i2c_A2I_internal_17 to local_i2c_A2I_internal_15 @@ -1823,8 +1823,8 @@ move $t1, $t0 sw $t1, -68($fp) sw $t0, -76($fp) sw $t1, -68($fp) -j end__207 -true__207: +j end__208 +true__208: lw $t0, -108($fp) # Saves in local_i2c_A2I_internal_25 data_14 la $t0, data_14 @@ -1834,7 +1834,7 @@ move $t1, $t0 sw $t1, -68($fp) sw $t0, -108($fp) sw $t1, -68($fp) -end__207: +end__208: lw $t0, -68($fp) lw $t1, -60($fp) # Moving local_i2c_A2I_internal_15 to local_i2c_A2I_internal_13 @@ -1842,8 +1842,8 @@ move $t1, $t0 sw $t1, -60($fp) sw $t0, -68($fp) sw $t1, -60($fp) -j end__203 -true__203: +j end__204 +true__204: lw $t0, -112($fp) # Saves in local_i2c_A2I_internal_26 data_15 la $t0, data_15 @@ -1853,7 +1853,7 @@ move $t1, $t0 sw $t1, -60($fp) sw $t0, -112($fp) sw $t1, -60($fp) -end__203: +end__204: lw $t0, -60($fp) lw $t1, -52($fp) # Moving local_i2c_A2I_internal_13 to local_i2c_A2I_internal_11 @@ -1861,8 +1861,8 @@ move $t1, $t0 sw $t1, -52($fp) sw $t0, -60($fp) sw $t1, -52($fp) -j end__199 -true__199: +j end__200 +true__200: lw $t0, -116($fp) # Saves in local_i2c_A2I_internal_27 data_16 la $t0, data_16 @@ -1872,7 +1872,7 @@ move $t1, $t0 sw $t1, -52($fp) sw $t0, -116($fp) sw $t1, -52($fp) -end__199: +end__200: lw $t0, -52($fp) lw $t1, -44($fp) # Moving local_i2c_A2I_internal_11 to local_i2c_A2I_internal_9 @@ -1880,8 +1880,8 @@ move $t1, $t0 sw $t1, -44($fp) sw $t0, -52($fp) sw $t1, -44($fp) -j end__195 -true__195: +j end__196 +true__196: lw $t0, -120($fp) # Saves in local_i2c_A2I_internal_28 data_17 la $t0, data_17 @@ -1891,7 +1891,7 @@ move $t1, $t0 sw $t1, -44($fp) sw $t0, -120($fp) sw $t1, -44($fp) -end__195: +end__196: lw $t0, -44($fp) lw $t1, -36($fp) # Moving local_i2c_A2I_internal_9 to local_i2c_A2I_internal_7 @@ -1899,8 +1899,8 @@ move $t1, $t0 sw $t1, -36($fp) sw $t0, -44($fp) sw $t1, -36($fp) -j end__191 -true__191: +j end__192 +true__192: lw $t0, -124($fp) # Saves in local_i2c_A2I_internal_29 data_18 la $t0, data_18 @@ -1910,7 +1910,7 @@ move $t1, $t0 sw $t1, -36($fp) sw $t0, -124($fp) sw $t1, -36($fp) -end__191: +end__192: lw $t0, -36($fp) lw $t1, -28($fp) # Moving local_i2c_A2I_internal_7 to local_i2c_A2I_internal_5 @@ -1918,8 +1918,8 @@ move $t1, $t0 sw $t1, -28($fp) sw $t0, -36($fp) sw $t1, -28($fp) -j end__187 -true__187: +j end__188 +true__188: lw $t0, -128($fp) # Saves in local_i2c_A2I_internal_30 data_19 la $t0, data_19 @@ -1929,7 +1929,7 @@ move $t1, $t0 sw $t1, -28($fp) sw $t0, -128($fp) sw $t1, -28($fp) -end__187: +end__188: lw $t0, -28($fp) lw $t1, -20($fp) # Moving local_i2c_A2I_internal_5 to local_i2c_A2I_internal_3 @@ -1937,8 +1937,8 @@ move $t1, $t0 sw $t1, -20($fp) sw $t0, -28($fp) sw $t1, -20($fp) -j end__183 -true__183: +j end__184 +true__184: lw $t0, -132($fp) # Saves in local_i2c_A2I_internal_31 data_20 la $t0, data_20 @@ -1948,7 +1948,7 @@ move $t1, $t0 sw $t1, -20($fp) sw $t0, -132($fp) sw $t1, -20($fp) -end__183: +end__184: lw $t0, -20($fp) lw $t1, -12($fp) # Moving local_i2c_A2I_internal_3 to local_i2c_A2I_internal_1 @@ -1956,8 +1956,8 @@ move $t1, $t0 sw $t1, -12($fp) sw $t0, -20($fp) sw $t1, -12($fp) -j end__179 -true__179: +j end__180 +true__180: lw $t0, -136($fp) # Saves in local_i2c_A2I_internal_32 data_21 la $t0, data_21 @@ -1967,7 +1967,7 @@ move $t1, $t0 sw $t1, -12($fp) sw $t0, -136($fp) sw $t1, -12($fp) -end__179: +end__180: lw $t0, -12($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -2083,14 +2083,14 @@ bnez $a1, mismatch_16 li $v0, 1 end_16: move $t1, $v0 -# If not local_a2i_A2I_internal_2 goto continue__311 +# If not local_a2i_A2I_internal_2 goto continue__313 sw $t0, -0($fp) sw $t1, -16($fp) sw $t2, -20($fp) -beqz $t1, continue__311 +beqz $t1, continue__313 la $a0, dispatch_error j .raise -continue__311: +continue__313: lw $t0, -12($fp) # Static Dispatch of the method length sw $fp, ($sp) @@ -2120,10 +2120,10 @@ lw $t1, -8($fp) # local_a2i_A2I_internal_0 <- local_a2i_A2I_internal_1 = 0 li $t9, 0 seq $t1, $t0, $t9 -# If local_a2i_A2I_internal_0 goto true__322 +# If local_a2i_A2I_internal_0 goto true__324 sw $t0, -12($fp) sw $t1, -8($fp) -bnez $t1, true__322 +bnez $t1, true__324 lw $t0, -0($fp) lw $t1, -36($fp) # local_a2i_A2I_internal_7 <- Type of s @@ -2152,14 +2152,14 @@ bnez $a1, mismatch_17 li $v0, 1 end_17: move $t1, $v0 -# If not local_a2i_A2I_internal_7 goto continue__329 +# If not local_a2i_A2I_internal_7 goto continue__331 sw $t0, -0($fp) sw $t1, -36($fp) sw $t2, -40($fp) -beqz $t1, continue__329 +beqz $t1, continue__331 la $a0, dispatch_error j .raise -continue__329: +continue__331: lw $t0, -32($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -2218,11 +2218,11 @@ bnez $a1, mismatch_18 li $v0, 1 end_18: move $t2, $v0 -# If local_a2i_A2I_internal_5 goto true__343 +# If local_a2i_A2I_internal_5 goto true__345 sw $t0, -32($fp) sw $t1, -44($fp) sw $t2, -28($fp) -bnez $t2, true__343 +bnez $t2, true__345 lw $t0, -0($fp) lw $t1, -60($fp) # local_a2i_A2I_internal_13 <- Type of s @@ -2251,14 +2251,14 @@ bnez $a1, mismatch_19 li $v0, 1 end_19: move $t1, $v0 -# If not local_a2i_A2I_internal_13 goto continue__350 +# If not local_a2i_A2I_internal_13 goto continue__352 sw $t0, -0($fp) sw $t1, -60($fp) sw $t2, -64($fp) -beqz $t1, continue__350 +beqz $t1, continue__352 la $a0, dispatch_error j .raise -continue__350: +continue__352: lw $t0, -56($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -2317,11 +2317,11 @@ bnez $a1, mismatch_20 li $v0, 1 end_20: move $t2, $v0 -# If local_a2i_A2I_internal_11 goto true__364 +# If local_a2i_A2I_internal_11 goto true__366 sw $t0, -56($fp) sw $t1, -68($fp) sw $t2, -52($fp) -bnez $t2, true__364 +bnez $t2, true__366 lw $t0, -4($fp) lw $t1, -76($fp) # Find the actual name in the dispatch table @@ -2363,8 +2363,8 @@ move $t1, $t0 sw $t1, -72($fp) sw $t0, -76($fp) sw $t1, -72($fp) -j end__364 -true__364: +j end__366 +true__366: lw $t0, -0($fp) lw $t1, -88($fp) # local_a2i_A2I_internal_20 <- Type of s @@ -2393,14 +2393,14 @@ bnez $a1, mismatch_21 li $v0, 1 end_21: move $t1, $v0 -# If not local_a2i_A2I_internal_20 goto continue__375 +# If not local_a2i_A2I_internal_20 goto continue__380 sw $t0, -0($fp) sw $t1, -88($fp) sw $t2, -92($fp) -beqz $t1, continue__375 +beqz $t1, continue__380 la $a0, dispatch_error j .raise -continue__375: +continue__380: lw $t0, -84($fp) # Static Dispatch of the method length sw $fp, ($sp) @@ -2457,16 +2457,16 @@ bnez $a1, mismatch_22 li $v0, 1 end_22: move $t3, $v0 -# If not local_a2i_A2I_internal_23 goto continue__390 +# If not local_a2i_A2I_internal_23 goto continue__394 sw $t0, -84($fp) sw $t1, -80($fp) sw $t2, -0($fp) sw $t3, -100($fp) sw $t4, -104($fp) -beqz $t3, continue__390 +beqz $t3, continue__394 la $a0, dispatch_error j .raise -continue__390: +continue__394: lw $t0, -96($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -2541,7 +2541,7 @@ move $t1, $t0 sw $t1, -72($fp) sw $t0, -108($fp) sw $t1, -72($fp) -end__364: +end__366: lw $t0, -72($fp) lw $t1, -48($fp) # Moving local_a2i_A2I_internal_16 to local_a2i_A2I_internal_10 @@ -2549,8 +2549,8 @@ move $t1, $t0 sw $t1, -48($fp) sw $t0, -72($fp) sw $t1, -48($fp) -j end__343 -true__343: +j end__345 +true__345: lw $t0, -0($fp) lw $t1, -124($fp) # local_a2i_A2I_internal_29 <- Type of s @@ -2579,14 +2579,14 @@ bnez $a1, mismatch_23 li $v0, 1 end_23: move $t1, $v0 -# If not local_a2i_A2I_internal_29 goto continue__412 +# If not local_a2i_A2I_internal_29 goto continue__418 sw $t0, -0($fp) sw $t1, -124($fp) sw $t2, -128($fp) -beqz $t1, continue__412 +beqz $t1, continue__418 la $a0, dispatch_error j .raise -continue__412: +continue__418: lw $t0, -120($fp) # Static Dispatch of the method length sw $fp, ($sp) @@ -2643,16 +2643,16 @@ bnez $a1, mismatch_24 li $v0, 1 end_24: move $t3, $v0 -# If not local_a2i_A2I_internal_32 goto continue__427 +# If not local_a2i_A2I_internal_32 goto continue__432 sw $t0, -120($fp) sw $t1, -116($fp) sw $t2, -0($fp) sw $t3, -136($fp) sw $t4, -140($fp) -beqz $t3, continue__427 +beqz $t3, continue__432 la $a0, dispatch_error j .raise -continue__427: +continue__432: lw $t0, -132($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -2732,7 +2732,7 @@ sw $t2, -48($fp) sw $t0, -144($fp) sw $t1, -112($fp) sw $t2, -48($fp) -end__343: +end__345: lw $t0, -48($fp) lw $t1, -24($fp) # Moving local_a2i_A2I_internal_10 to local_a2i_A2I_internal_4 @@ -2740,14 +2740,14 @@ move $t1, $t0 sw $t1, -24($fp) sw $t0, -48($fp) sw $t1, -24($fp) -j end__322 -true__322: +j end__324 +true__324: lw $t0, -24($fp) # Moving 0 to local_a2i_A2I_internal_4 li $t0, 0 sw $t0, -24($fp) sw $t0, -24($fp) -end__322: +end__324: lw $t0, -24($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -2831,15 +2831,15 @@ bnez $a1, mismatch_25 li $v0, 1 end_25: move $t2, $v0 -# If not local_a2i_aux_A2I_internal_3 goto continue__457 +# If not local_a2i_aux_A2I_internal_3 goto continue__462 sw $t0, -8($fp) sw $t1, -0($fp) sw $t2, -20($fp) sw $t3, -24($fp) -beqz $t2, continue__457 +beqz $t2, continue__462 la $a0, dispatch_error j .raise -continue__457: +continue__462: lw $t0, -16($fp) # Static Dispatch of the method length sw $fp, ($sp) @@ -2886,17 +2886,17 @@ sw $t0, -16($fp) sw $t1, -12($fp) sw $t2, -28($fp) sw $t3, -32($fp) -start__470: +start__475: lw $t0, -28($fp) lw $t1, -12($fp) lw $t2, -36($fp) # local_a2i_aux_A2I_internal_7 <- local_a2i_aux_A2I_i_5 < local_a2i_aux_A2I_j_1 slt $t2, $t0, $t1 -# If not local_a2i_aux_A2I_internal_7 goto end__470 +# If not local_a2i_aux_A2I_internal_7 goto end__475 sw $t0, -28($fp) sw $t1, -12($fp) sw $t2, -36($fp) -beqz $t2, end__470 +beqz $t2, end__475 lw $t0, -8($fp) lw $t1, -44($fp) # local_a2i_aux_A2I_internal_9 <- local_a2i_aux_A2I_int_0 * 10 @@ -2931,16 +2931,16 @@ bnez $a1, mismatch_26 li $v0, 1 end_26: move $t3, $v0 -# If not local_a2i_aux_A2I_internal_11 goto continue__483 +# If not local_a2i_aux_A2I_internal_11 goto continue__489 sw $t0, -8($fp) sw $t1, -44($fp) sw $t2, -0($fp) sw $t3, -52($fp) sw $t4, -56($fp) -beqz $t3, continue__483 +beqz $t3, continue__489 la $a0, dispatch_error j .raise -continue__483: +continue__489: lw $t0, -48($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -3040,8 +3040,8 @@ sw $t4, -28($fp) sw $t5, -64($fp) sw $t6, -68($fp) sw $t7, -32($fp) -j start__470 -end__470: +j start__475 +end__475: lw $t0, -8($fp) lw $t1, -72($fp) # Moving local_a2i_aux_A2I_int_0 to local_a2i_aux_A2I_internal_16 @@ -3095,19 +3095,19 @@ lw $t1, -8($fp) # local_i2a_A2I_internal_0 <- i = 0 li $t9, 0 seq $t1, $t0, $t9 -# If local_i2a_A2I_internal_0 goto true__514 +# If local_i2a_A2I_internal_0 goto true__520 sw $t0, -0($fp) sw $t1, -8($fp) -bnez $t1, true__514 +bnez $t1, true__520 lw $t0, -0($fp) lw $t1, -16($fp) # local_i2a_A2I_internal_2 <- 0 < i li $t9, 0 slt $t1, $t9, $t0 -# If local_i2a_A2I_internal_2 goto true__518 +# If local_i2a_A2I_internal_2 goto true__524 sw $t0, -0($fp) sw $t1, -16($fp) -bnez $t1, true__518 +bnez $t1, true__524 lw $t0, -24($fp) # Saves in local_i2a_A2I_internal_4 data_24 la $t0, data_24 @@ -3186,15 +3186,15 @@ bnez $a1, mismatch_27 li $v0, 1 end_27: move $t2, $v0 -# If not local_i2a_A2I_internal_9 goto continue__533 +# If not local_i2a_A2I_internal_9 goto continue__540 sw $t0, -36($fp) sw $t1, -24($fp) sw $t2, -44($fp) sw $t3, -48($fp) -beqz $t2, continue__533 +beqz $t2, continue__540 la $a0, dispatch_error j .raise -continue__533: +continue__540: lw $t0, -40($fp) # Static Dispatch of the method concat sw $fp, ($sp) @@ -3231,8 +3231,8 @@ move $t1, $t0 sw $t1, -20($fp) sw $t0, -40($fp) sw $t1, -20($fp) -j end__518 -true__518: +j end__524 +true__524: lw $t0, -4($fp) lw $t1, -52($fp) # Find the actual name in the dispatch table @@ -3274,7 +3274,7 @@ move $t1, $t0 sw $t1, -20($fp) sw $t0, -52($fp) sw $t1, -20($fp) -end__518: +end__524: lw $t0, -20($fp) lw $t1, -12($fp) # Moving local_i2a_A2I_internal_3 to local_i2a_A2I_internal_1 @@ -3282,8 +3282,8 @@ move $t1, $t0 sw $t1, -12($fp) sw $t0, -20($fp) sw $t1, -12($fp) -j end__514 -true__514: +j end__520 +true__520: lw $t0, -56($fp) # Saves in local_i2a_A2I_internal_12 data_25 la $t0, data_25 @@ -3293,7 +3293,7 @@ move $t1, $t0 sw $t1, -12($fp) sw $t0, -56($fp) sw $t1, -12($fp) -end__514: +end__520: lw $t0, -12($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -3340,10 +3340,10 @@ lw $t1, -8($fp) # local_i2a_aux_A2I_internal_0 <- i = 0 li $t9, 0 seq $t1, $t0, $t9 -# If local_i2a_aux_A2I_internal_0 goto true__565 +# If local_i2a_aux_A2I_internal_0 goto true__573 sw $t0, -0($fp) sw $t1, -8($fp) -bnez $t1, true__565 +bnez $t1, true__573 lw $t0, -0($fp) lw $t1, -20($fp) # local_i2a_aux_A2I_internal_3 <- i / 10 @@ -3468,15 +3468,15 @@ bnez $a1, mismatch_28 li $v0, 1 end_28: move $t2, $v0 -# If not local_i2a_aux_A2I_internal_9 goto continue__584 +# If not local_i2a_aux_A2I_internal_9 goto continue__594 sw $t0, -36($fp) sw $t1, -24($fp) sw $t2, -44($fp) sw $t3, -48($fp) -beqz $t2, continue__584 +beqz $t2, continue__594 la $a0, dispatch_error j .raise -continue__584: +continue__594: lw $t0, -40($fp) # Static Dispatch of the method concat sw $fp, ($sp) @@ -3513,8 +3513,8 @@ move $t1, $t0 sw $t1, -12($fp) sw $t0, -40($fp) sw $t1, -12($fp) -j end__565 -true__565: +j end__573 +true__573: lw $t0, -52($fp) # Saves in local_i2a_aux_A2I_internal_11 data_26 la $t0, data_26 @@ -3524,7 +3524,7 @@ move $t1, $t0 sw $t1, -12($fp) sw $t0, -52($fp) sw $t1, -12($fp) -end__565: +end__573: lw $t0, -12($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -3622,15 +3622,15 @@ bnez $a1, mismatch_29 li $v0, 1 end_29: move $t2, $v0 -# If not local_main_Main_internal_4 goto continue__614 +# If not local_main_Main_internal_4 goto continue__624 sw $t0, -8($fp) sw $t1, -12($fp) sw $t2, -20($fp) sw $t3, -24($fp) -beqz $t2, continue__614 +beqz $t2, continue__624 la $a0, dispatch_error j .raise -continue__614: +continue__624: lw $t0, -8($fp) lw $t1, -16($fp) # Find the actual name in the dispatch table @@ -3713,16 +3713,16 @@ bnez $a1, mismatch_30 li $v0, 1 end_30: move $t3, $v0 -# If not local_main_Main_internal_9 goto continue__631 +# If not local_main_Main_internal_9 goto continue__641 sw $t0, -16($fp) sw $t1, -4($fp) sw $t2, -32($fp) sw $t3, -40($fp) sw $t4, -44($fp) -beqz $t3, continue__631 +beqz $t3, continue__641 la $a0, dispatch_error j .raise -continue__631: +continue__641: lw $t0, -32($fp) lw $t1, -36($fp) # Find the actual name in the dispatch table diff --git a/tests/codegen/book_list.mips b/tests/codegen/book_list.mips index ebf55ed8..d1badb70 100644 --- a/tests/codegen/book_list.mips +++ b/tests/codegen/book_list.mips @@ -1521,16 +1521,16 @@ bnez $a1, mismatch_6 li $v0, 1 end_6: move $t3, $v0 -# If not local_print_Book_internal_4 goto continue__82 +# If not local_print_Book_internal_4 goto continue__83 sw $t0, -8($fp) sw $t1, -0($fp) sw $t2, -12($fp) sw $t3, -20($fp) sw $t4, -24($fp) -beqz $t3, continue__82 +beqz $t3, continue__83 la $a0, dispatch_error j .raise -continue__82: +continue__83: lw $t0, -8($fp) lw $t1, -16($fp) # Find the actual name in the dispatch table @@ -1596,15 +1596,15 @@ bnez $a1, mismatch_7 li $v0, 1 end_7: move $t2, $v0 -# If not local_print_Book_internal_8 goto continue__98 +# If not local_print_Book_internal_8 goto continue__99 sw $t0, -16($fp) sw $t1, -28($fp) sw $t2, -36($fp) sw $t3, -40($fp) -beqz $t2, continue__98 +beqz $t2, continue__99 la $a0, dispatch_error j .raise -continue__98: +continue__99: lw $t0, -16($fp) lw $t1, -32($fp) # Find the actual name in the dispatch table @@ -1709,16 +1709,16 @@ bnez $a1, mismatch_8 li $v0, 1 end_8: move $t3, $v0 -# If not local_print_Book_internal_14 goto continue__119 +# If not local_print_Book_internal_14 goto continue__121 sw $t0, -48($fp) sw $t1, -0($fp) sw $t2, -52($fp) sw $t3, -60($fp) sw $t4, -64($fp) -beqz $t3, continue__119 +beqz $t3, continue__121 la $a0, dispatch_error j .raise -continue__119: +continue__121: lw $t0, -48($fp) lw $t1, -56($fp) # Find the actual name in the dispatch table @@ -1784,15 +1784,15 @@ bnez $a1, mismatch_9 li $v0, 1 end_9: move $t2, $v0 -# If not local_print_Book_internal_18 goto continue__135 +# If not local_print_Book_internal_18 goto continue__137 sw $t0, -56($fp) sw $t1, -68($fp) sw $t2, -76($fp) sw $t3, -80($fp) -beqz $t2, continue__135 +beqz $t2, continue__137 la $a0, dispatch_error j .raise -continue__135: +continue__137: lw $t0, -56($fp) lw $t1, -72($fp) # Find the actual name in the dispatch table @@ -2026,14 +2026,14 @@ bnez $a1, mismatch_10 li $v0, 1 end_10: move $t1, $v0 -# If not local_print_Article_internal_1 goto continue__182 +# If not local_print_Article_internal_1 goto continue__185 sw $t0, -0($fp) sw $t1, -8($fp) sw $t2, -12($fp) -beqz $t1, continue__182 +beqz $t1, continue__185 la $a0, dispatch_error j .raise -continue__182: +continue__185: lw $t0, -4($fp) # Static Dispatch of the method print sw $fp, ($sp) @@ -2128,16 +2128,16 @@ bnez $a1, mismatch_11 li $v0, 1 end_11: move $t3, $v0 -# If not local_print_Article_internal_7 goto continue__203 +# If not local_print_Article_internal_7 goto continue__207 sw $t0, -20($fp) sw $t1, -0($fp) sw $t2, -24($fp) sw $t3, -32($fp) sw $t4, -36($fp) -beqz $t3, continue__203 +beqz $t3, continue__207 la $a0, dispatch_error j .raise -continue__203: +continue__207: lw $t0, -20($fp) lw $t1, -28($fp) # Find the actual name in the dispatch table @@ -2203,15 +2203,15 @@ bnez $a1, mismatch_12 li $v0, 1 end_12: move $t2, $v0 -# If not local_print_Article_internal_11 goto continue__219 +# If not local_print_Article_internal_11 goto continue__223 sw $t0, -28($fp) sw $t1, -40($fp) sw $t2, -48($fp) sw $t3, -52($fp) -beqz $t2, continue__219 +beqz $t2, continue__223 la $a0, dispatch_error j .raise -continue__219: +continue__223: lw $t0, -28($fp) lw $t1, -44($fp) # Find the actual name in the dispatch table @@ -2402,15 +2402,15 @@ bnez $a1, mismatch_13 li $v0, 1 end_13: move $t2, $v0 -# If not local_cons_BookList_internal_3 goto continue__251 +# If not local_cons_BookList_internal_3 goto continue__256 sw $t0, -12($fp) sw $t1, -8($fp) sw $t2, -20($fp) sw $t3, -24($fp) -beqz $t2, continue__251 +beqz $t2, continue__256 la $a0, dispatch_error j .raise -continue__251: +continue__256: lw $t0, -8($fp) lw $t1, -16($fp) # Find the actual name in the dispatch table @@ -2894,15 +2894,15 @@ bnez $a1, mismatch_14 li $v0, 1 end_14: move $t2, $v0 -# If not local_print_list_Cons_internal_2 goto continue__327 +# If not local_print_list_Cons_internal_2 goto continue__335 sw $t0, -0($fp) sw $t1, -4($fp) sw $t2, -12($fp) sw $t3, -16($fp) -beqz $t2, continue__327 +beqz $t2, continue__335 la $a0, dispatch_error j .raise -continue__327: +continue__335: lw $t0, -4($fp) lw $t1, -8($fp) # Find the actual name in the dispatch table @@ -2960,11 +2960,11 @@ bnez $a1, mismatch_15 li $v0, 1 end_15: move $t1, $v0 -# If local_print_list_Cons_internal_5 goto error__338 +# If local_print_list_Cons_internal_5 goto error__346 sw $t0, -8($fp) sw $t1, -24($fp) sw $t2, -28($fp) -bnez $t1, error__338 +bnez $t1, error__346 lw $t0, -8($fp) lw $t1, -32($fp) la $t9, type_Article @@ -2982,10 +2982,10 @@ j end_16 false_16: li $t1, 0 end_16: -# If not local_print_list_Cons_internal_7 goto next__344_0 +# If not local_print_list_Cons_internal_7 goto next__352_0 sw $t0, -8($fp) sw $t1, -32($fp) -beqz $t1, next__344_0 +beqz $t1, next__352_0 lw $t0, -8($fp) lw $t1, -36($fp) # Moving local_print_list_Cons_internal_1 to local_print_list_Cons_dummy_8 @@ -3036,8 +3036,8 @@ move $t1, $t0 sw $t1, -20($fp) sw $t0, -44($fp) sw $t1, -20($fp) -j end__338 -next__344_0: +j end__346 +next__352_0: lw $t0, -8($fp) lw $t1, -48($fp) la $t9, type_Book @@ -3055,10 +3055,10 @@ j end_17 false_17: li $t1, 0 end_17: -# If not local_print_list_Cons_internal_11 goto next__358_1 +# If not local_print_list_Cons_internal_11 goto next__367_1 sw $t0, -8($fp) sw $t1, -48($fp) -beqz $t1, next__358_1 +beqz $t1, next__367_1 lw $t0, -8($fp) lw $t1, -52($fp) # Moving local_print_list_Cons_internal_1 to local_print_list_Cons_dummy_12 @@ -3109,14 +3109,14 @@ move $t1, $t0 sw $t1, -20($fp) sw $t0, -60($fp) sw $t1, -20($fp) -j end__338 -next__358_1: +j end__346 +next__367_1: la $a0, case_error j .raise -error__338: +error__346: la $a0, case_void_error j .raise -end__338: +end__346: lw $t0, -0($fp) lw $t1, -64($fp) # local_print_list_Cons_xcdr_15 <- GET self . xcdr @@ -3148,15 +3148,15 @@ bnez $a1, mismatch_18 li $v0, 1 end_18: move $t2, $v0 -# If not local_print_list_Cons_internal_17 goto continue__380 +# If not local_print_list_Cons_internal_17 goto continue__390 sw $t0, -0($fp) sw $t1, -64($fp) sw $t2, -72($fp) sw $t3, -76($fp) -beqz $t2, continue__380 +beqz $t2, continue__390 la $a0, dispatch_error j .raise -continue__380: +continue__390: lw $t0, -64($fp) lw $t1, -68($fp) # Find the actual name in the dispatch table @@ -3421,16 +3421,16 @@ bnez $a1, mismatch_19 li $v0, 1 end_19: move $t3, $v0 -# If not local_main_Main_internal_5 goto continue__428 +# If not local_main_Main_internal_5 goto continue__438 sw $t0, -8($fp) sw $t1, -12($fp) sw $t2, -16($fp) sw $t3, -24($fp) sw $t4, -28($fp) -beqz $t3, continue__428 +beqz $t3, continue__438 la $a0, dispatch_error j .raise -continue__428: +continue__438: lw $t0, -8($fp) lw $t1, -20($fp) # Find the actual name in the dispatch table @@ -3551,17 +3551,17 @@ bnez $a1, mismatch_20 li $v0, 1 end_20: move $t4, $v0 -# If not local_main_Main_internal_13 goto continue__457 +# If not local_main_Main_internal_13 goto continue__467 sw $t0, -36($fp) sw $t1, -40($fp) sw $t2, -44($fp) sw $t3, -48($fp) sw $t4, -56($fp) sw $t5, -60($fp) -beqz $t4, continue__457 +beqz $t4, continue__467 la $a0, dispatch_error j .raise -continue__457: +continue__467: lw $t0, -36($fp) lw $t1, -52($fp) # Find the actual name in the dispatch table @@ -3654,16 +3654,16 @@ bnez $a1, mismatch_21 li $v0, 1 end_21: move $t3, $v0 -# If not local_main_Main_internal_17 goto continue__473 +# If not local_main_Main_internal_17 goto continue__483 sw $t0, -52($fp) sw $t1, -32($fp) sw $t2, -64($fp) sw $t3, -72($fp) sw $t4, -76($fp) -beqz $t3, continue__473 +beqz $t3, continue__483 la $a0, dispatch_error j .raise -continue__473: +continue__483: lw $t0, -64($fp) lw $t1, -68($fp) # Find the actual name in the dispatch table @@ -3726,14 +3726,14 @@ bnez $a1, mismatch_22 li $v0, 1 end_22: move $t1, $v0 -# If not local_main_Main_internal_20 goto continue__486 +# If not local_main_Main_internal_20 goto continue__496 sw $t0, -68($fp) sw $t1, -84($fp) sw $t2, -88($fp) -beqz $t1, continue__486 +beqz $t1, continue__496 la $a0, dispatch_error j .raise -continue__486: +continue__496: lw $t0, -68($fp) lw $t1, -80($fp) # Find the actual name in the dispatch table @@ -3802,16 +3802,16 @@ bnez $a1, mismatch_23 li $v0, 1 end_23: move $t3, $v0 -# If not local_main_Main_internal_24 goto continue__501 +# If not local_main_Main_internal_24 goto continue__511 sw $t0, -80($fp) sw $t1, -0($fp) sw $t2, -92($fp) sw $t3, -100($fp) sw $t4, -104($fp) -beqz $t3, continue__501 +beqz $t3, continue__511 la $a0, dispatch_error j .raise -continue__501: +continue__511: lw $t0, -92($fp) lw $t1, -96($fp) # Find the actual name in the dispatch table diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips index e8142aae..9f107aa3 100644 --- a/tests/codegen/cells.mips +++ b/tests/codegen/cells.mips @@ -1157,16 +1157,16 @@ bnez $a1, mismatch_6 li $v0, 1 end_6: move $t3, $v0 -# If not local_print_CellularAutomaton_internal_3 goto continue__73 +# If not local_print_CellularAutomaton_internal_3 goto continue__74 sw $t0, -0($fp) sw $t1, -4($fp) sw $t2, -8($fp) sw $t3, -16($fp) sw $t4, -20($fp) -beqz $t3, continue__73 +beqz $t3, continue__74 la $a0, dispatch_error j .raise -continue__73: +continue__74: lw $t0, -12($fp) # Static Dispatch of the method concat sw $fp, ($sp) @@ -1291,15 +1291,15 @@ bnez $a1, mismatch_7 li $v0, 1 end_7: move $t2, $v0 -# If not local_num_cells_CellularAutomaton_internal_2 goto continue__95 +# If not local_num_cells_CellularAutomaton_internal_2 goto continue__96 sw $t0, -0($fp) sw $t1, -4($fp) sw $t2, -12($fp) sw $t3, -16($fp) -beqz $t2, continue__95 +beqz $t2, continue__96 la $a0, dispatch_error j .raise -continue__95: +continue__96: lw $t0, -8($fp) # Static Dispatch of the method length sw $fp, ($sp) @@ -1380,15 +1380,15 @@ bnez $a1, mismatch_8 li $v0, 1 end_8: move $t2, $v0 -# If not local_cell_CellularAutomaton_internal_2 goto continue__115 +# If not local_cell_CellularAutomaton_internal_2 goto continue__116 sw $t0, -4($fp) sw $t1, -8($fp) sw $t2, -16($fp) sw $t3, -20($fp) -beqz $t2, continue__115 +beqz $t2, continue__116 la $a0, dispatch_error j .raise -continue__115: +continue__116: lw $t0, -12($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -1458,10 +1458,10 @@ lw $t1, -8($fp) # local_cell_left_neighbor_CellularAutomaton_internal_0 <- position = 0 li $t9, 0 seq $t1, $t0, $t9 -# If local_cell_left_neighbor_CellularAutomaton_internal_0 goto true__131 +# If local_cell_left_neighbor_CellularAutomaton_internal_0 goto true__132 sw $t0, -0($fp) sw $t1, -8($fp) -bnez $t1, true__131 +bnez $t1, true__132 lw $t0, -0($fp) lw $t1, -16($fp) # local_cell_left_neighbor_CellularAutomaton_internal_2 <- position - 1 @@ -1507,8 +1507,8 @@ move $t1, $t0 sw $t1, -12($fp) sw $t0, -20($fp) sw $t1, -12($fp) -j end__131 -true__131: +j end__132 +true__132: lw $t0, -4($fp) lw $t1, -28($fp) # Find the actual name in the dispatch table @@ -1583,7 +1583,7 @@ move $t1, $t0 sw $t1, -12($fp) sw $t0, -32($fp) sw $t1, -12($fp) -end__131: +end__132: lw $t0, -12($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -1652,12 +1652,12 @@ lw $t2, -0($fp) lw $t3, -8($fp) # local_cell_right_neighbor_CellularAutomaton_internal_0 <- position = local_cell_right_neighbor_CellularAutomaton_internal_1 seq $t3, $t2, $t1 -# If local_cell_right_neighbor_CellularAutomaton_internal_0 goto true__160 +# If local_cell_right_neighbor_CellularAutomaton_internal_0 goto true__165 sw $t0, -16($fp) sw $t1, -12($fp) sw $t2, -0($fp) sw $t3, -8($fp) -bnez $t3, true__160 +bnez $t3, true__165 lw $t0, -0($fp) lw $t1, -24($fp) # local_cell_right_neighbor_CellularAutomaton_internal_4 <- position + 1 @@ -1703,8 +1703,8 @@ move $t1, $t0 sw $t1, -20($fp) sw $t0, -28($fp) sw $t1, -20($fp) -j end__160 -true__160: +j end__165 +true__165: lw $t0, -4($fp) lw $t1, -32($fp) # Find the actual name in the dispatch table @@ -1745,7 +1745,7 @@ move $t1, $t0 sw $t1, -20($fp) sw $t0, -32($fp) sw $t1, -20($fp) -end__160: +end__165: lw $t0, -20($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -1859,24 +1859,24 @@ bnez $a1, mismatch_9 li $v0, 1 end_9: move $t2, $v0 -# If local_cell_at_next_evolution_CellularAutomaton_internal_3 goto true__190 +# If local_cell_at_next_evolution_CellularAutomaton_internal_3 goto true__198 sw $t0, -24($fp) sw $t1, -28($fp) sw $t2, -20($fp) -bnez $t2, true__190 +bnez $t2, true__198 lw $t0, -32($fp) # Moving 0 to local_cell_at_next_evolution_CellularAutomaton_internal_6 li $t0, 0 sw $t0, -32($fp) sw $t0, -32($fp) -j end__190 -true__190: +j end__198 +true__198: lw $t0, -32($fp) # Moving 1 to local_cell_at_next_evolution_CellularAutomaton_internal_6 li $t0, 1 sw $t0, -32($fp) sw $t0, -32($fp) -end__190: +end__198: lw $t0, -4($fp) lw $t1, -40($fp) # Find the actual name in the dispatch table @@ -1937,24 +1937,24 @@ bnez $a1, mismatch_10 li $v0, 1 end_10: move $t2, $v0 -# If local_cell_at_next_evolution_CellularAutomaton_internal_7 goto true__205 +# If local_cell_at_next_evolution_CellularAutomaton_internal_7 goto true__214 sw $t0, -40($fp) sw $t1, -44($fp) sw $t2, -36($fp) -bnez $t2, true__205 +bnez $t2, true__214 lw $t0, -48($fp) # Moving 0 to local_cell_at_next_evolution_CellularAutomaton_internal_10 li $t0, 0 sw $t0, -48($fp) sw $t0, -48($fp) -j end__205 -true__205: +j end__214 +true__214: lw $t0, -48($fp) # Moving 1 to local_cell_at_next_evolution_CellularAutomaton_internal_10 li $t0, 1 sw $t0, -48($fp) sw $t0, -48($fp) -end__205: +end__214: lw $t0, -32($fp) lw $t1, -48($fp) lw $t2, -16($fp) @@ -2023,24 +2023,24 @@ bnez $a1, mismatch_11 li $v0, 1 end_11: move $t2, $v0 -# If local_cell_at_next_evolution_CellularAutomaton_internal_11 goto true__221 +# If local_cell_at_next_evolution_CellularAutomaton_internal_11 goto true__231 sw $t0, -56($fp) sw $t1, -60($fp) sw $t2, -52($fp) -bnez $t2, true__221 +bnez $t2, true__231 lw $t0, -64($fp) # Moving 0 to local_cell_at_next_evolution_CellularAutomaton_internal_14 li $t0, 0 sw $t0, -64($fp) sw $t0, -64($fp) -j end__221 -true__221: +j end__231 +true__231: lw $t0, -64($fp) # Moving 1 to local_cell_at_next_evolution_CellularAutomaton_internal_14 li $t0, 1 sw $t0, -64($fp) sw $t0, -64($fp) -end__221: +end__231: lw $t0, -16($fp) lw $t1, -64($fp) lw $t2, -12($fp) @@ -2050,12 +2050,12 @@ lw $t3, -8($fp) # local_cell_at_next_evolution_CellularAutomaton_internal_0 <- local_cell_at_next_evolution_CellularAutomaton_internal_1 = 1 li $t9, 1 seq $t3, $t2, $t9 -# If local_cell_at_next_evolution_CellularAutomaton_internal_0 goto true__230 +# If local_cell_at_next_evolution_CellularAutomaton_internal_0 goto true__240 sw $t0, -16($fp) sw $t1, -64($fp) sw $t2, -12($fp) sw $t3, -8($fp) -bnez $t3, true__230 +bnez $t3, true__240 lw $t0, -72($fp) # Saves in local_cell_at_next_evolution_CellularAutomaton_internal_16 data_6 la $t0, data_6 @@ -2065,8 +2065,8 @@ move $t1, $t0 sw $t1, -68($fp) sw $t0, -72($fp) sw $t1, -68($fp) -j end__230 -true__230: +j end__240 +true__240: lw $t0, -76($fp) # Saves in local_cell_at_next_evolution_CellularAutomaton_internal_17 data_7 la $t0, data_7 @@ -2076,7 +2076,7 @@ move $t1, $t0 sw $t1, -68($fp) sw $t0, -76($fp) sw $t1, -68($fp) -end__230: +end__240: lw $t0, -68($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -2180,17 +2180,17 @@ sw $t1, -8($fp) sw $t2, -20($fp) sw $t3, -16($fp) sw $t4, -24($fp) -start__257: +start__268: lw $t0, -4($fp) lw $t1, -8($fp) lw $t2, -28($fp) # local_evolve_CellularAutomaton_internal_6 <- local_evolve_CellularAutomaton_position_0 < local_evolve_CellularAutomaton_num_1 slt $t2, $t0, $t1 -# If not local_evolve_CellularAutomaton_internal_6 goto end__257 +# If not local_evolve_CellularAutomaton_internal_6 goto end__268 sw $t0, -4($fp) sw $t1, -8($fp) sw $t2, -28($fp) -beqz $t2, end__257 +beqz $t2, end__268 lw $t0, -0($fp) lw $t1, -32($fp) # Find the actual name in the dispatch table @@ -2254,15 +2254,15 @@ bnez $a1, mismatch_12 li $v0, 1 end_12: move $t2, $v0 -# If not local_evolve_CellularAutomaton_internal_9 goto continue__269 +# If not local_evolve_CellularAutomaton_internal_9 goto continue__281 sw $t0, -32($fp) sw $t1, -16($fp) sw $t2, -40($fp) sw $t3, -44($fp) -beqz $t2, continue__269 +beqz $t2, continue__281 la $a0, dispatch_error j .raise -continue__269: +continue__281: lw $t0, -36($fp) # Static Dispatch of the method concat sw $fp, ($sp) @@ -2318,8 +2318,8 @@ sw $t2, -4($fp) sw $t3, -48($fp) sw $t4, -52($fp) sw $t5, -24($fp) -j start__257 -end__257: +j start__268 +end__268: lw $t0, -16($fp) lw $t1, -0($fp) # self . population_map <- SET local_evolve_CellularAutomaton_temp_3 @@ -2494,15 +2494,15 @@ bnez $a1, mismatch_13 li $v0, 1 end_13: move $t2, $v0 -# If not local_main_Main_internal_3 goto continue__311 +# If not local_main_Main_internal_3 goto continue__323 sw $t0, -4($fp) sw $t1, -8($fp) sw $t2, -16($fp) sw $t3, -20($fp) -beqz $t2, continue__311 +beqz $t2, continue__323 la $a0, dispatch_error j .raise -continue__311: +continue__323: lw $t0, -4($fp) lw $t1, -12($fp) # Find the actual name in the dispatch table @@ -2571,16 +2571,16 @@ bnez $a1, mismatch_14 li $v0, 1 end_14: move $t3, $v0 -# If not local_main_Main_internal_7 goto continue__326 +# If not local_main_Main_internal_7 goto continue__338 sw $t0, -12($fp) sw $t1, -0($fp) sw $t2, -24($fp) sw $t3, -32($fp) sw $t4, -36($fp) -beqz $t3, continue__326 +beqz $t3, continue__338 la $a0, dispatch_error j .raise -continue__326: +continue__338: lw $t0, -24($fp) lw $t1, -28($fp) # Find the actual name in the dispatch table @@ -2627,16 +2627,16 @@ move $t2, $v0 sw $t0, -28($fp) sw $t1, -40($fp) sw $t2, -44($fp) -start__338: +start__350: lw $t0, -40($fp) lw $t1, -48($fp) # local_main_Main_internal_11 <- 0 < local_main_Main_countdown_9 li $t9, 0 slt $t1, $t9, $t0 -# If not local_main_Main_internal_11 goto end__338 +# If not local_main_Main_internal_11 goto end__350 sw $t0, -40($fp) sw $t1, -48($fp) -beqz $t1, end__338 +beqz $t1, end__350 lw $t0, -0($fp) lw $t1, -52($fp) # local_main_Main_cells_12 <- GET self . cells @@ -2668,15 +2668,15 @@ bnez $a1, mismatch_15 li $v0, 1 end_15: move $t2, $v0 -# If not local_main_Main_internal_14 goto continue__348 +# If not local_main_Main_internal_14 goto continue__360 sw $t0, -0($fp) sw $t1, -52($fp) sw $t2, -60($fp) sw $t3, -64($fp) -beqz $t2, continue__348 +beqz $t2, continue__360 la $a0, dispatch_error j .raise -continue__348: +continue__360: lw $t0, -52($fp) lw $t1, -56($fp) # Find the actual name in the dispatch table @@ -2738,16 +2738,16 @@ bnez $a1, mismatch_16 li $v0, 1 end_16: move $t3, $v0 -# If not local_main_Main_internal_18 goto continue__362 +# If not local_main_Main_internal_18 goto continue__374 sw $t0, -56($fp) sw $t1, -0($fp) sw $t2, -68($fp) sw $t3, -76($fp) sw $t4, -80($fp) -beqz $t3, continue__362 +beqz $t3, continue__374 la $a0, dispatch_error j .raise -continue__362: +continue__374: lw $t0, -68($fp) lw $t1, -72($fp) # Find the actual name in the dispatch table @@ -2798,8 +2798,8 @@ sw $t1, -40($fp) sw $t2, -84($fp) sw $t3, -88($fp) sw $t4, -44($fp) -j start__338 -end__338: +j start__350 +end__350: lw $t0, -0($fp) lw $t1, -92($fp) # Moving self to local_main_Main_internal_22 diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips index cafde74b..e52447ff 100644 --- a/tests/codegen/complex.mips +++ b/tests/codegen/complex.mips @@ -1617,11 +1617,11 @@ lw $t2, -4($fp) # local_print_Complex_internal_0 <- local_print_Complex_y_1 = 0 li $t9, 0 seq $t2, $t1, $t9 -# If local_print_Complex_internal_0 goto true__153 +# If local_print_Complex_internal_0 goto true__155 sw $t0, -0($fp) sw $t1, -8($fp) sw $t2, -4($fp) -bnez $t2, true__153 +bnez $t2, true__155 lw $t0, -0($fp) lw $t1, -16($fp) # local_print_Complex_x_3 <- GET self . x @@ -1689,15 +1689,15 @@ bnez $a1, mismatch_10 li $v0, 1 end_10: move $t2, $v0 -# If not local_print_Complex_internal_7 goto continue__166 +# If not local_print_Complex_internal_7 goto continue__169 sw $t0, -20($fp) sw $t1, -24($fp) sw $t2, -32($fp) sw $t3, -36($fp) -beqz $t2, continue__166 +beqz $t2, continue__169 la $a0, dispatch_error j .raise -continue__166: +continue__169: lw $t0, -20($fp) lw $t1, -28($fp) # Find the actual name in the dispatch table @@ -1764,16 +1764,16 @@ bnez $a1, mismatch_11 li $v0, 1 end_11: move $t3, $v0 -# If not local_print_Complex_internal_11 goto continue__181 +# If not local_print_Complex_internal_11 goto continue__184 sw $t0, -28($fp) sw $t1, -0($fp) sw $t2, -40($fp) sw $t3, -48($fp) sw $t4, -52($fp) -beqz $t3, continue__181 +beqz $t3, continue__184 la $a0, dispatch_error j .raise -continue__181: +continue__184: lw $t0, -28($fp) lw $t1, -44($fp) # Find the actual name in the dispatch table @@ -1839,15 +1839,15 @@ bnez $a1, mismatch_12 li $v0, 1 end_12: move $t2, $v0 -# If not local_print_Complex_internal_15 goto continue__197 +# If not local_print_Complex_internal_15 goto continue__200 sw $t0, -44($fp) sw $t1, -56($fp) sw $t2, -64($fp) sw $t3, -68($fp) -beqz $t2, continue__197 +beqz $t2, continue__200 la $a0, dispatch_error j .raise -continue__197: +continue__200: lw $t0, -44($fp) lw $t1, -60($fp) # Find the actual name in the dispatch table @@ -1889,8 +1889,8 @@ move $t1, $t0 sw $t1, -12($fp) sw $t0, -60($fp) sw $t1, -12($fp) -j end__153 -true__153: +j end__155 +true__155: lw $t0, -0($fp) lw $t1, -72($fp) # local_print_Complex_x_17 <- GET self . x @@ -1934,7 +1934,7 @@ move $t1, $t0 sw $t1, -12($fp) sw $t0, -76($fp) sw $t1, -12($fp) -end__153: +end__155: lw $t0, -12($fp) move $v0, $t0 # Empty all used registers and saves them to memory diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips index 35e104f1..cdc9ae00 100644 --- a/tests/codegen/fib.mips +++ b/tests/codegen/fib.mips @@ -1198,7 +1198,7 @@ sw $t0, -8($fp) sw $t1, -12($fp) sw $t2, -16($fp) sw $t3, -20($fp) -start__80: +start__85: lw $t0, -0($fp) lw $t1, -28($fp) # local_fib_Main_internal_5 <- i = 0 @@ -1212,11 +1212,11 @@ j end_6 false_6: li $t2, 1 end_6: -# If not local_fib_Main_internal_4 goto end__80 +# If not local_fib_Main_internal_4 goto end__85 sw $t0, -0($fp) sw $t1, -28($fp) sw $t2, -24($fp) -beqz $t2, end__80 +beqz $t2, end__85 lw $t0, -8($fp) lw $t1, -12($fp) lw $t2, -32($fp) @@ -1255,8 +1255,8 @@ sw $t4, -0($fp) sw $t5, -36($fp) sw $t6, -40($fp) sw $t7, -20($fp) -j start__80 -end__80: +j start__85 +end__85: lw $t0, -16($fp) lw $t1, -44($fp) # Moving local_fib_Main_c_2 to local_fib_Main_internal_9 diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips index 5742ea73..614b4117 100644 --- a/tests/codegen/graph.mips +++ b/tests/codegen/graph.mips @@ -2604,16 +2604,16 @@ bnez $a1, mismatch_12 li $v0, 1 end_12: move $t3, $v0 -# If not local_print_Vertice_internal_4 goto continue__204 +# If not local_print_Vertice_internal_4 goto continue__205 sw $t0, -8($fp) sw $t1, -0($fp) sw $t2, -12($fp) sw $t3, -20($fp) sw $t4, -24($fp) -beqz $t3, continue__204 +beqz $t3, continue__205 la $a0, dispatch_error j .raise -continue__204: +continue__205: lw $t0, -12($fp) lw $t1, -16($fp) # Find the actual name in the dispatch table @@ -3253,14 +3253,14 @@ bnez $a1, mismatch_13 li $v0, 1 end_13: move $t1, $v0 -# If not local_cons_EList_internal_2 goto continue__313 +# If not local_cons_EList_internal_2 goto continue__322 sw $t0, -8($fp) sw $t1, -16($fp) sw $t2, -20($fp) -beqz $t1, continue__313 +beqz $t1, continue__322 la $a0, dispatch_error j .raise -continue__313: +continue__322: lw $t0, -8($fp) lw $t1, -12($fp) # Find the actual name in the dispatch table @@ -3369,14 +3369,14 @@ bnez $a1, mismatch_14 li $v0, 1 end_14: move $t1, $v0 -# If not local_append_EList_internal_1 goto continue__329 +# If not local_append_EList_internal_1 goto continue__338 sw $t0, -4($fp) sw $t1, -12($fp) sw $t2, -16($fp) -beqz $t1, continue__329 +beqz $t1, continue__338 la $a0, dispatch_error j .raise -continue__329: +continue__338: lw $t0, -4($fp) lw $t1, -8($fp) # Find the actual name in the dispatch table @@ -3407,9 +3407,9 @@ lw $fp, ($sp) lw $t0, -8($fp) # saves the return value move $t0, $v0 -# If local_append_EList_internal_0 goto true__339 +# If local_append_EList_internal_0 goto true__348 sw $t0, -8($fp) -bnez $t0, true__339 +bnez $t0, true__348 lw $t0, -4($fp) lw $t1, -24($fp) # Find the actual name in the dispatch table @@ -3467,14 +3467,14 @@ bnez $a1, mismatch_15 li $v0, 1 end_15: move $t1, $v0 -# If not local_append_EList_internal_6 goto continue__346 +# If not local_append_EList_internal_6 goto continue__356 sw $t0, -24($fp) sw $t1, -32($fp) sw $t2, -36($fp) -beqz $t1, continue__346 +beqz $t1, continue__356 la $a0, dispatch_error j .raise -continue__346: +continue__356: lw $t0, -24($fp) lw $t1, -28($fp) # Find the actual name in the dispatch table @@ -3569,15 +3569,15 @@ bnez $a1, mismatch_16 li $v0, 1 end_16: move $t2, $v0 -# If not local_append_EList_internal_10 goto continue__361 +# If not local_append_EList_internal_10 goto continue__372 sw $t0, -40($fp) sw $t1, -28($fp) sw $t2, -48($fp) sw $t3, -52($fp) -beqz $t2, continue__361 +beqz $t2, continue__372 la $a0, dispatch_error j .raise -continue__361: +continue__372: lw $t0, -28($fp) lw $t1, -44($fp) # Find the actual name in the dispatch table @@ -3619,8 +3619,8 @@ move $t1, $t0 sw $t1, -20($fp) sw $t0, -44($fp) sw $t1, -20($fp) -j end__339 -true__339: +j end__348 +true__348: lw $t0, -0($fp) lw $t1, -20($fp) # Moving l to local_append_EList_internal_3 @@ -3628,7 +3628,7 @@ move $t1, $t0 sw $t1, -20($fp) sw $t0, -0($fp) sw $t1, -20($fp) -end__339: +end__348: lw $t0, -20($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -3894,15 +3894,15 @@ bnez $a1, mismatch_17 li $v0, 1 end_17: move $t2, $v0 -# If not local_print_ECons_internal_2 goto continue__427 +# If not local_print_ECons_internal_2 goto continue__439 sw $t0, -0($fp) sw $t1, -4($fp) sw $t2, -12($fp) sw $t3, -16($fp) -beqz $t2, continue__427 +beqz $t2, continue__439 la $a0, dispatch_error j .raise -continue__427: +continue__439: lw $t0, -4($fp) lw $t1, -8($fp) # Find the actual name in the dispatch table @@ -3964,16 +3964,16 @@ bnez $a1, mismatch_18 li $v0, 1 end_18: move $t3, $v0 -# If not local_print_ECons_internal_6 goto continue__441 +# If not local_print_ECons_internal_6 goto continue__453 sw $t0, -8($fp) sw $t1, -0($fp) sw $t2, -20($fp) sw $t3, -28($fp) sw $t4, -32($fp) -beqz $t3, continue__441 +beqz $t3, continue__453 la $a0, dispatch_error j .raise -continue__441: +continue__453: lw $t0, -20($fp) lw $t1, -24($fp) # Find the actual name in the dispatch table @@ -4270,14 +4270,14 @@ bnez $a1, mismatch_19 li $v0, 1 end_19: move $t1, $v0 -# If not local_cons_VList_internal_2 goto continue__493 +# If not local_cons_VList_internal_2 goto continue__507 sw $t0, -8($fp) sw $t1, -16($fp) sw $t2, -20($fp) -beqz $t1, continue__493 +beqz $t1, continue__507 la $a0, dispatch_error j .raise -continue__493: +continue__507: lw $t0, -8($fp) lw $t1, -12($fp) # Find the actual name in the dispatch table @@ -4582,15 +4582,15 @@ bnez $a1, mismatch_20 li $v0, 1 end_20: move $t2, $v0 -# If not local_print_VCons_internal_2 goto continue__554 +# If not local_print_VCons_internal_2 goto continue__569 sw $t0, -0($fp) sw $t1, -4($fp) sw $t2, -12($fp) sw $t3, -16($fp) -beqz $t2, continue__554 +beqz $t2, continue__569 la $a0, dispatch_error j .raise -continue__554: +continue__569: lw $t0, -4($fp) lw $t1, -8($fp) # Find the actual name in the dispatch table @@ -4652,16 +4652,16 @@ bnez $a1, mismatch_21 li $v0, 1 end_21: move $t3, $v0 -# If not local_print_VCons_internal_6 goto continue__568 +# If not local_print_VCons_internal_6 goto continue__583 sw $t0, -8($fp) sw $t1, -0($fp) sw $t2, -20($fp) sw $t3, -28($fp) sw $t4, -32($fp) -beqz $t3, continue__568 +beqz $t3, continue__583 la $a0, dispatch_error j .raise -continue__568: +continue__583: lw $t0, -20($fp) lw $t1, -24($fp) # Find the actual name in the dispatch table @@ -4896,7 +4896,7 @@ move $t2, $v0 sw $t0, -16($fp) sw $t1, -12($fp) sw $t2, -20($fp) -start__604: +start__620: lw $t0, -0($fp) lw $t1, -24($fp) # local_read_input_Parse_boolop_5 <- GET self . boolop @@ -4999,7 +4999,7 @@ end_26: move $a2, $v0 # Restore the variable of local_read_input_Parse_internal_9 lw $a1, -40($fp) -# If not local_read_input_Parse_internal_13 goto continue__627 +# If not local_read_input_Parse_internal_13 goto continue__643 sw $t0, -0($fp) sw $t1, -24($fp) sw $t2, -36($fp) @@ -5011,10 +5011,10 @@ sw $t7, -44($fp) sw $a1, -40($fp) sw $a2, -56($fp) sw $a3, -60($fp) -beqz $a2, continue__627 +beqz $a2, continue__643 la $a0, dispatch_error j .raise -continue__627: +continue__643: lw $t0, -24($fp) lw $t1, -52($fp) # Find the actual name in the dispatch table @@ -5055,9 +5055,9 @@ lw $fp, ($sp) lw $t0, -52($fp) # saves the return value move $t0, $v0 -# If not local_read_input_Parse_internal_12 goto end__604 +# If not local_read_input_Parse_internal_12 goto end__620 sw $t0, -52($fp) -beqz $t0, end__604 +beqz $t0, end__620 lw $t0, -0($fp) lw $t1, -64($fp) # Find the actual name in the dispatch table @@ -5121,15 +5121,15 @@ bnez $a1, mismatch_27 li $v0, 1 end_27: move $t2, $v0 -# If not local_read_input_Parse_internal_17 goto continue__644 +# If not local_read_input_Parse_internal_17 goto continue__661 sw $t0, -64($fp) sw $t1, -4($fp) sw $t2, -72($fp) sw $t3, -76($fp) -beqz $t2, continue__644 +beqz $t2, continue__661 la $a0, dispatch_error j .raise -continue__644: +continue__661: lw $t0, -4($fp) lw $t1, -68($fp) # Find the actual name in the dispatch table @@ -5212,8 +5212,8 @@ sw $t0, -80($fp) sw $t1, -12($fp) sw $t2, -84($fp) sw $t3, -20($fp) -j start__604 -end__604: +j start__620 +end__620: lw $t0, -4($fp) lw $t1, -88($fp) # Moving local_read_input_Parse_g_0 to local_read_input_Parse_internal_21 @@ -5400,15 +5400,15 @@ bnez $a1, mismatch_28 li $v0, 1 end_28: move $t2, $v0 -# If not local_parse_line_Parse_internal_4 goto continue__678 +# If not local_parse_line_Parse_internal_4 goto continue__697 sw $t0, -16($fp) sw $t1, -12($fp) sw $t2, -24($fp) sw $t3, -28($fp) -beqz $t2, continue__678 +beqz $t2, continue__697 la $a0, dispatch_error j .raise -continue__678: +continue__697: lw $t0, -12($fp) lw $t1, -20($fp) # Find the actual name in the dispatch table @@ -5460,7 +5460,7 @@ move $t2, $v0 sw $t0, -20($fp) sw $t1, -8($fp) sw $t2, -32($fp) -start__689: +start__708: lw $t0, -4($fp) lw $t1, -44($fp) # local_parse_line_Parse_rest_9 <- GET self . rest @@ -5492,15 +5492,15 @@ bnez $a1, mismatch_29 li $v0, 1 end_29: move $t2, $v0 -# If not local_parse_line_Parse_internal_11 goto continue__698 +# If not local_parse_line_Parse_internal_11 goto continue__717 sw $t0, -4($fp) sw $t1, -44($fp) sw $t2, -52($fp) sw $t3, -56($fp) -beqz $t2, continue__698 +beqz $t2, continue__717 la $a0, dispatch_error j .raise -continue__698: +continue__717: lw $t0, -48($fp) # Static Dispatch of the method length sw $fp, ($sp) @@ -5538,11 +5538,11 @@ j end_30 false_30: li $t2, 1 end_30: -# If not local_parse_line_Parse_internal_7 goto end__689 +# If not local_parse_line_Parse_internal_7 goto end__708 sw $t0, -48($fp) sw $t1, -40($fp) sw $t2, -36($fp) -beqz $t2, end__689 +beqz $t2, end__708 lw $t0, -4($fp) lw $t1, -64($fp) # local_parse_line_Parse_rest_14 <- GET self . rest @@ -5695,15 +5695,15 @@ bnez $a1, mismatch_31 li $v0, 1 end_31: move $t2, $v0 -# If not local_parse_line_Parse_internal_21 goto continue__730 +# If not local_parse_line_Parse_internal_21 goto continue__753 sw $t0, -84($fp) sw $t1, -8($fp) sw $t2, -92($fp) sw $t3, -96($fp) -beqz $t2, continue__730 +beqz $t2, continue__753 la $a0, dispatch_error j .raise -continue__730: +continue__753: lw $t0, -8($fp) lw $t1, -88($fp) # Find the actual name in the dispatch table @@ -5762,15 +5762,15 @@ bnez $a1, mismatch_32 li $v0, 1 end_32: move $t2, $v0 -# If not local_parse_line_Parse_internal_24 goto continue__745 +# If not local_parse_line_Parse_internal_24 goto continue__767 sw $t0, -88($fp) sw $t1, -84($fp) sw $t2, -104($fp) sw $t3, -108($fp) -beqz $t2, continue__745 +beqz $t2, continue__767 la $a0, dispatch_error j .raise -continue__745: +continue__767: lw $t0, -84($fp) lw $t1, -100($fp) # Find the actual name in the dispatch table @@ -5844,15 +5844,15 @@ bnez $a1, mismatch_33 li $v0, 1 end_33: move $t2, $v0 -# If not local_parse_line_Parse_internal_27 goto continue__758 +# If not local_parse_line_Parse_internal_27 goto continue__779 sw $t0, -100($fp) sw $t1, -8($fp) sw $t2, -116($fp) sw $t3, -120($fp) -beqz $t2, continue__758 +beqz $t2, continue__779 la $a0, dispatch_error j .raise -continue__758: +continue__779: lw $t0, -8($fp) lw $t1, -112($fp) # Find the actual name in the dispatch table @@ -5899,8 +5899,8 @@ sw $t2, -32($fp) sw $t0, -112($fp) sw $t1, -124($fp) sw $t2, -32($fp) -j start__689 -end__689: +j start__708 +end__708: lw $t0, -8($fp) lw $t1, -128($fp) # Moving local_parse_line_Parse_v_0 to local_parse_line_Parse_internal_30 @@ -6013,11 +6013,11 @@ bnez $a1, mismatch_34 li $v0, 1 end_34: move $t2, $v0 -# If local_c2i_Parse_internal_0 goto true__784 +# If local_c2i_Parse_internal_0 goto true__805 sw $t0, -12($fp) sw $t1, -0($fp) sw $t2, -8($fp) -bnez $t2, true__784 +bnez $t2, true__805 lw $t0, -24($fp) # Saves in local_c2i_Parse_internal_4 data_10 la $t0, data_10 @@ -6044,11 +6044,11 @@ bnez $a1, mismatch_35 li $v0, 1 end_35: move $t2, $v0 -# If local_c2i_Parse_internal_3 goto true__791 +# If local_c2i_Parse_internal_3 goto true__812 sw $t0, -24($fp) sw $t1, -0($fp) sw $t2, -20($fp) -bnez $t2, true__791 +bnez $t2, true__812 lw $t0, -36($fp) # Saves in local_c2i_Parse_internal_7 data_11 la $t0, data_11 @@ -6075,11 +6075,11 @@ bnez $a1, mismatch_36 li $v0, 1 end_36: move $t2, $v0 -# If local_c2i_Parse_internal_6 goto true__798 +# If local_c2i_Parse_internal_6 goto true__819 sw $t0, -36($fp) sw $t1, -0($fp) sw $t2, -32($fp) -bnez $t2, true__798 +bnez $t2, true__819 lw $t0, -48($fp) # Saves in local_c2i_Parse_internal_10 data_12 la $t0, data_12 @@ -6106,11 +6106,11 @@ bnez $a1, mismatch_37 li $v0, 1 end_37: move $t2, $v0 -# If local_c2i_Parse_internal_9 goto true__805 +# If local_c2i_Parse_internal_9 goto true__826 sw $t0, -48($fp) sw $t1, -0($fp) sw $t2, -44($fp) -bnez $t2, true__805 +bnez $t2, true__826 lw $t0, -60($fp) # Saves in local_c2i_Parse_internal_13 data_13 la $t0, data_13 @@ -6137,11 +6137,11 @@ bnez $a1, mismatch_38 li $v0, 1 end_38: move $t2, $v0 -# If local_c2i_Parse_internal_12 goto true__812 +# If local_c2i_Parse_internal_12 goto true__833 sw $t0, -60($fp) sw $t1, -0($fp) sw $t2, -56($fp) -bnez $t2, true__812 +bnez $t2, true__833 lw $t0, -72($fp) # Saves in local_c2i_Parse_internal_16 data_14 la $t0, data_14 @@ -6168,11 +6168,11 @@ bnez $a1, mismatch_39 li $v0, 1 end_39: move $t2, $v0 -# If local_c2i_Parse_internal_15 goto true__819 +# If local_c2i_Parse_internal_15 goto true__840 sw $t0, -72($fp) sw $t1, -0($fp) sw $t2, -68($fp) -bnez $t2, true__819 +bnez $t2, true__840 lw $t0, -84($fp) # Saves in local_c2i_Parse_internal_19 data_15 la $t0, data_15 @@ -6199,11 +6199,11 @@ bnez $a1, mismatch_40 li $v0, 1 end_40: move $t2, $v0 -# If local_c2i_Parse_internal_18 goto true__826 +# If local_c2i_Parse_internal_18 goto true__847 sw $t0, -84($fp) sw $t1, -0($fp) sw $t2, -80($fp) -bnez $t2, true__826 +bnez $t2, true__847 lw $t0, -96($fp) # Saves in local_c2i_Parse_internal_22 data_16 la $t0, data_16 @@ -6230,11 +6230,11 @@ bnez $a1, mismatch_41 li $v0, 1 end_41: move $t2, $v0 -# If local_c2i_Parse_internal_21 goto true__833 +# If local_c2i_Parse_internal_21 goto true__854 sw $t0, -96($fp) sw $t1, -0($fp) sw $t2, -92($fp) -bnez $t2, true__833 +bnez $t2, true__854 lw $t0, -108($fp) # Saves in local_c2i_Parse_internal_25 data_17 la $t0, data_17 @@ -6261,11 +6261,11 @@ bnez $a1, mismatch_42 li $v0, 1 end_42: move $t2, $v0 -# If local_c2i_Parse_internal_24 goto true__840 +# If local_c2i_Parse_internal_24 goto true__861 sw $t0, -108($fp) sw $t1, -0($fp) sw $t2, -104($fp) -bnez $t2, true__840 +bnez $t2, true__861 lw $t0, -120($fp) # Saves in local_c2i_Parse_internal_28 data_18 la $t0, data_18 @@ -6292,11 +6292,11 @@ bnez $a1, mismatch_43 li $v0, 1 end_43: move $t2, $v0 -# If local_c2i_Parse_internal_27 goto true__847 +# If local_c2i_Parse_internal_27 goto true__868 sw $t0, -120($fp) sw $t1, -0($fp) sw $t2, -116($fp) -bnez $t2, true__847 +bnez $t2, true__868 lw $t0, -4($fp) lw $t1, -128($fp) # Find the actual name in the dispatch table @@ -6338,14 +6338,14 @@ sw $t2, -124($fp) sw $t0, -128($fp) sw $t1, -132($fp) sw $t2, -124($fp) -j end__847 -true__847: +j end__868 +true__868: lw $t0, -124($fp) # Moving 9 to local_c2i_Parse_internal_29 li $t0, 9 sw $t0, -124($fp) sw $t0, -124($fp) -end__847: +end__868: lw $t0, -124($fp) lw $t1, -112($fp) # Moving local_c2i_Parse_internal_29 to local_c2i_Parse_internal_26 @@ -6353,14 +6353,14 @@ move $t1, $t0 sw $t1, -112($fp) sw $t0, -124($fp) sw $t1, -112($fp) -j end__840 -true__840: +j end__861 +true__861: lw $t0, -112($fp) # Moving 8 to local_c2i_Parse_internal_26 li $t0, 8 sw $t0, -112($fp) sw $t0, -112($fp) -end__840: +end__861: lw $t0, -112($fp) lw $t1, -100($fp) # Moving local_c2i_Parse_internal_26 to local_c2i_Parse_internal_23 @@ -6368,14 +6368,14 @@ move $t1, $t0 sw $t1, -100($fp) sw $t0, -112($fp) sw $t1, -100($fp) -j end__833 -true__833: +j end__854 +true__854: lw $t0, -100($fp) # Moving 7 to local_c2i_Parse_internal_23 li $t0, 7 sw $t0, -100($fp) sw $t0, -100($fp) -end__833: +end__854: lw $t0, -100($fp) lw $t1, -88($fp) # Moving local_c2i_Parse_internal_23 to local_c2i_Parse_internal_20 @@ -6383,14 +6383,14 @@ move $t1, $t0 sw $t1, -88($fp) sw $t0, -100($fp) sw $t1, -88($fp) -j end__826 -true__826: +j end__847 +true__847: lw $t0, -88($fp) # Moving 6 to local_c2i_Parse_internal_20 li $t0, 6 sw $t0, -88($fp) sw $t0, -88($fp) -end__826: +end__847: lw $t0, -88($fp) lw $t1, -76($fp) # Moving local_c2i_Parse_internal_20 to local_c2i_Parse_internal_17 @@ -6398,14 +6398,14 @@ move $t1, $t0 sw $t1, -76($fp) sw $t0, -88($fp) sw $t1, -76($fp) -j end__819 -true__819: +j end__840 +true__840: lw $t0, -76($fp) # Moving 5 to local_c2i_Parse_internal_17 li $t0, 5 sw $t0, -76($fp) sw $t0, -76($fp) -end__819: +end__840: lw $t0, -76($fp) lw $t1, -64($fp) # Moving local_c2i_Parse_internal_17 to local_c2i_Parse_internal_14 @@ -6413,14 +6413,14 @@ move $t1, $t0 sw $t1, -64($fp) sw $t0, -76($fp) sw $t1, -64($fp) -j end__812 -true__812: +j end__833 +true__833: lw $t0, -64($fp) # Moving 4 to local_c2i_Parse_internal_14 li $t0, 4 sw $t0, -64($fp) sw $t0, -64($fp) -end__812: +end__833: lw $t0, -64($fp) lw $t1, -52($fp) # Moving local_c2i_Parse_internal_14 to local_c2i_Parse_internal_11 @@ -6428,14 +6428,14 @@ move $t1, $t0 sw $t1, -52($fp) sw $t0, -64($fp) sw $t1, -52($fp) -j end__805 -true__805: +j end__826 +true__826: lw $t0, -52($fp) # Moving 3 to local_c2i_Parse_internal_11 li $t0, 3 sw $t0, -52($fp) sw $t0, -52($fp) -end__805: +end__826: lw $t0, -52($fp) lw $t1, -40($fp) # Moving local_c2i_Parse_internal_11 to local_c2i_Parse_internal_8 @@ -6443,14 +6443,14 @@ move $t1, $t0 sw $t1, -40($fp) sw $t0, -52($fp) sw $t1, -40($fp) -j end__798 -true__798: +j end__819 +true__819: lw $t0, -40($fp) # Moving 2 to local_c2i_Parse_internal_8 li $t0, 2 sw $t0, -40($fp) sw $t0, -40($fp) -end__798: +end__819: lw $t0, -40($fp) lw $t1, -28($fp) # Moving local_c2i_Parse_internal_8 to local_c2i_Parse_internal_5 @@ -6458,14 +6458,14 @@ move $t1, $t0 sw $t1, -28($fp) sw $t0, -40($fp) sw $t1, -28($fp) -j end__791 -true__791: +j end__812 +true__812: lw $t0, -28($fp) # Moving 1 to local_c2i_Parse_internal_5 li $t0, 1 sw $t0, -28($fp) sw $t0, -28($fp) -end__791: +end__812: lw $t0, -28($fp) lw $t1, -16($fp) # Moving local_c2i_Parse_internal_5 to local_c2i_Parse_internal_2 @@ -6473,14 +6473,14 @@ move $t1, $t0 sw $t1, -16($fp) sw $t0, -28($fp) sw $t1, -16($fp) -j end__784 -true__784: +j end__805 +true__805: lw $t0, -16($fp) # Moving 0 to local_c2i_Parse_internal_2 li $t0, 0 sw $t0, -16($fp) sw $t0, -16($fp) -end__784: +end__805: lw $t0, -16($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -6596,14 +6596,14 @@ bnez $a1, mismatch_44 li $v0, 1 end_44: move $t1, $v0 -# If not local_a2i_Parse_internal_2 goto continue__910 +# If not local_a2i_Parse_internal_2 goto continue__932 sw $t0, -0($fp) sw $t1, -16($fp) sw $t2, -20($fp) -beqz $t1, continue__910 +beqz $t1, continue__932 la $a0, dispatch_error j .raise -continue__910: +continue__932: lw $t0, -12($fp) # Static Dispatch of the method length sw $fp, ($sp) @@ -6633,10 +6633,10 @@ lw $t1, -8($fp) # local_a2i_Parse_internal_0 <- local_a2i_Parse_internal_1 = 0 li $t9, 0 seq $t1, $t0, $t9 -# If local_a2i_Parse_internal_0 goto true__921 +# If local_a2i_Parse_internal_0 goto true__943 sw $t0, -12($fp) sw $t1, -8($fp) -bnez $t1, true__921 +bnez $t1, true__943 lw $t0, -0($fp) lw $t1, -36($fp) # local_a2i_Parse_internal_7 <- Type of s @@ -6665,14 +6665,14 @@ bnez $a1, mismatch_45 li $v0, 1 end_45: move $t1, $v0 -# If not local_a2i_Parse_internal_7 goto continue__928 +# If not local_a2i_Parse_internal_7 goto continue__950 sw $t0, -0($fp) sw $t1, -36($fp) sw $t2, -40($fp) -beqz $t1, continue__928 +beqz $t1, continue__950 la $a0, dispatch_error j .raise -continue__928: +continue__950: lw $t0, -32($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -6731,11 +6731,11 @@ bnez $a1, mismatch_46 li $v0, 1 end_46: move $t2, $v0 -# If local_a2i_Parse_internal_5 goto true__942 +# If local_a2i_Parse_internal_5 goto true__964 sw $t0, -32($fp) sw $t1, -44($fp) sw $t2, -28($fp) -bnez $t2, true__942 +bnez $t2, true__964 lw $t0, -0($fp) lw $t1, -60($fp) # local_a2i_Parse_internal_13 <- Type of s @@ -6764,14 +6764,14 @@ bnez $a1, mismatch_47 li $v0, 1 end_47: move $t1, $v0 -# If not local_a2i_Parse_internal_13 goto continue__949 +# If not local_a2i_Parse_internal_13 goto continue__971 sw $t0, -0($fp) sw $t1, -60($fp) sw $t2, -64($fp) -beqz $t1, continue__949 +beqz $t1, continue__971 la $a0, dispatch_error j .raise -continue__949: +continue__971: lw $t0, -56($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -6830,11 +6830,11 @@ bnez $a1, mismatch_48 li $v0, 1 end_48: move $t2, $v0 -# If local_a2i_Parse_internal_11 goto true__963 +# If local_a2i_Parse_internal_11 goto true__985 sw $t0, -56($fp) sw $t1, -68($fp) sw $t2, -52($fp) -bnez $t2, true__963 +bnez $t2, true__985 lw $t0, -4($fp) lw $t1, -76($fp) # Find the actual name in the dispatch table @@ -6876,8 +6876,8 @@ move $t1, $t0 sw $t1, -72($fp) sw $t0, -76($fp) sw $t1, -72($fp) -j end__963 -true__963: +j end__985 +true__985: lw $t0, -0($fp) lw $t1, -88($fp) # local_a2i_Parse_internal_20 <- Type of s @@ -6906,14 +6906,14 @@ bnez $a1, mismatch_49 li $v0, 1 end_49: move $t1, $v0 -# If not local_a2i_Parse_internal_20 goto continue__974 +# If not local_a2i_Parse_internal_20 goto continue__999 sw $t0, -0($fp) sw $t1, -88($fp) sw $t2, -92($fp) -beqz $t1, continue__974 +beqz $t1, continue__999 la $a0, dispatch_error j .raise -continue__974: +continue__999: lw $t0, -84($fp) # Static Dispatch of the method length sw $fp, ($sp) @@ -6970,16 +6970,16 @@ bnez $a1, mismatch_50 li $v0, 1 end_50: move $t3, $v0 -# If not local_a2i_Parse_internal_23 goto continue__989 +# If not local_a2i_Parse_internal_23 goto continue__1013 sw $t0, -84($fp) sw $t1, -80($fp) sw $t2, -0($fp) sw $t3, -100($fp) sw $t4, -104($fp) -beqz $t3, continue__989 +beqz $t3, continue__1013 la $a0, dispatch_error j .raise -continue__989: +continue__1013: lw $t0, -96($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -7054,7 +7054,7 @@ move $t1, $t0 sw $t1, -72($fp) sw $t0, -108($fp) sw $t1, -72($fp) -end__963: +end__985: lw $t0, -72($fp) lw $t1, -48($fp) # Moving local_a2i_Parse_internal_16 to local_a2i_Parse_internal_10 @@ -7062,8 +7062,8 @@ move $t1, $t0 sw $t1, -48($fp) sw $t0, -72($fp) sw $t1, -48($fp) -j end__942 -true__942: +j end__964 +true__964: lw $t0, -0($fp) lw $t1, -124($fp) # local_a2i_Parse_internal_29 <- Type of s @@ -7092,14 +7092,14 @@ bnez $a1, mismatch_51 li $v0, 1 end_51: move $t1, $v0 -# If not local_a2i_Parse_internal_29 goto continue__1011 +# If not local_a2i_Parse_internal_29 goto continue__1037 sw $t0, -0($fp) sw $t1, -124($fp) sw $t2, -128($fp) -beqz $t1, continue__1011 +beqz $t1, continue__1037 la $a0, dispatch_error j .raise -continue__1011: +continue__1037: lw $t0, -120($fp) # Static Dispatch of the method length sw $fp, ($sp) @@ -7156,16 +7156,16 @@ bnez $a1, mismatch_52 li $v0, 1 end_52: move $t3, $v0 -# If not local_a2i_Parse_internal_32 goto continue__1026 +# If not local_a2i_Parse_internal_32 goto continue__1051 sw $t0, -120($fp) sw $t1, -116($fp) sw $t2, -0($fp) sw $t3, -136($fp) sw $t4, -140($fp) -beqz $t3, continue__1026 +beqz $t3, continue__1051 la $a0, dispatch_error j .raise -continue__1026: +continue__1051: lw $t0, -132($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -7245,7 +7245,7 @@ sw $t2, -48($fp) sw $t0, -144($fp) sw $t1, -112($fp) sw $t2, -48($fp) -end__942: +end__964: lw $t0, -48($fp) lw $t1, -24($fp) # Moving local_a2i_Parse_internal_10 to local_a2i_Parse_internal_4 @@ -7253,14 +7253,14 @@ move $t1, $t0 sw $t1, -24($fp) sw $t0, -48($fp) sw $t1, -24($fp) -j end__921 -true__921: +j end__943 +true__943: lw $t0, -24($fp) # Moving 0 to local_a2i_Parse_internal_4 li $t0, 0 sw $t0, -24($fp) sw $t0, -24($fp) -end__921: +end__943: lw $t0, -24($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -7412,15 +7412,15 @@ bnez $a1, mismatch_53 li $v0, 1 end_53: move $t2, $v0 -# If not local_a2i_aux_Parse_internal_3 goto continue__1056 +# If not local_a2i_aux_Parse_internal_3 goto continue__1081 sw $t0, -8($fp) sw $t1, -0($fp) sw $t2, -20($fp) sw $t3, -24($fp) -beqz $t2, continue__1056 +beqz $t2, continue__1081 la $a0, dispatch_error j .raise -continue__1056: +continue__1081: lw $t0, -16($fp) # Static Dispatch of the method length sw $fp, ($sp) @@ -7467,17 +7467,17 @@ sw $t0, -16($fp) sw $t1, -12($fp) sw $t2, -28($fp) sw $t3, -32($fp) -start__1069: +start__1094: lw $t0, -28($fp) lw $t1, -12($fp) lw $t2, -36($fp) # local_a2i_aux_Parse_internal_7 <- local_a2i_aux_Parse_i_5 < local_a2i_aux_Parse_j_1 slt $t2, $t0, $t1 -# If not local_a2i_aux_Parse_internal_7 goto end__1069 +# If not local_a2i_aux_Parse_internal_7 goto end__1094 sw $t0, -28($fp) sw $t1, -12($fp) sw $t2, -36($fp) -beqz $t2, end__1069 +beqz $t2, end__1094 lw $t0, -0($fp) lw $t1, -48($fp) # local_a2i_aux_Parse_internal_10 <- Type of s @@ -7506,14 +7506,14 @@ bnez $a1, mismatch_54 li $v0, 1 end_54: move $t1, $v0 -# If not local_a2i_aux_Parse_internal_10 goto continue__1080 +# If not local_a2i_aux_Parse_internal_10 goto continue__1105 sw $t0, -0($fp) sw $t1, -48($fp) sw $t2, -52($fp) -beqz $t1, continue__1080 +beqz $t1, continue__1105 la $a0, dispatch_error j .raise -continue__1080: +continue__1105: lw $t0, -44($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -7577,12 +7577,12 @@ bnez $a1, mismatch_55 li $v0, 1 end_55: move $t3, $v0 -# If local_a2i_aux_Parse_internal_12 goto true__1096 +# If local_a2i_aux_Parse_internal_12 goto true__1121 sw $t0, -44($fp) sw $t1, -40($fp) sw $t2, -60($fp) sw $t3, -56($fp) -bnez $t3, true__1096 +bnez $t3, true__1121 lw $t0, -72($fp) # Saves in local_a2i_aux_Parse_internal_16 data_22 la $t0, data_22 @@ -7609,11 +7609,11 @@ bnez $a1, mismatch_56 li $v0, 1 end_56: move $t2, $v0 -# If local_a2i_aux_Parse_internal_15 goto true__1103 +# If local_a2i_aux_Parse_internal_15 goto true__1128 sw $t0, -72($fp) sw $t1, -40($fp) sw $t2, -68($fp) -bnez $t2, true__1103 +bnez $t2, true__1128 lw $t0, -8($fp) lw $t1, -84($fp) # local_a2i_aux_Parse_internal_19 <- local_a2i_aux_Parse_int_0 * 10 @@ -7648,16 +7648,16 @@ bnez $a1, mismatch_57 li $v0, 1 end_57: move $t3, $v0 -# If not local_a2i_aux_Parse_internal_21 goto continue__1112 +# If not local_a2i_aux_Parse_internal_21 goto continue__1138 sw $t0, -8($fp) sw $t1, -84($fp) sw $t2, -0($fp) sw $t3, -92($fp) sw $t4, -96($fp) -beqz $t3, continue__1112 +beqz $t3, continue__1138 la $a0, dispatch_error j .raise -continue__1112: +continue__1138: lw $t0, -88($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -7745,7 +7745,7 @@ lw $t6, -12($fp) lw $t7, -108($fp) # local_a2i_aux_Parse_internal_25 <- local_a2i_aux_Parse_i_5 = local_a2i_aux_Parse_j_1 seq $t7, $t4, $t6 -# If local_a2i_aux_Parse_internal_25 goto true__1132 +# If local_a2i_aux_Parse_internal_25 goto true__1158 sw $t0, -100($fp) sw $t1, -84($fp) sw $t2, -80($fp) @@ -7754,7 +7754,7 @@ sw $t4, -28($fp) sw $t5, -104($fp) sw $t6, -12($fp) sw $t7, -108($fp) -bnez $t7, true__1132 +bnez $t7, true__1158 lw $t0, -116($fp) # Saves in local_a2i_aux_Parse_internal_27 data_23 la $t0, data_23 @@ -7764,8 +7764,8 @@ move $t1, $t0 sw $t1, -112($fp) sw $t0, -116($fp) sw $t1, -112($fp) -j end__1132 -true__1132: +j end__1158 +true__1158: lw $t0, -120($fp) # Saves in local_a2i_aux_Parse_internal_28 data_24 la $t0, data_24 @@ -7779,7 +7779,7 @@ sw $t2, -112($fp) sw $t0, -120($fp) sw $t1, -4($fp) sw $t2, -112($fp) -end__1132: +end__1158: lw $t0, -112($fp) lw $t1, -124($fp) # Moving local_a2i_aux_Parse_internal_26 to local_a2i_aux_Parse_internal_29 @@ -7792,8 +7792,8 @@ sw $t2, -76($fp) sw $t0, -112($fp) sw $t1, -124($fp) sw $t2, -76($fp) -j end__1103 -true__1103: +j end__1128 +true__1128: lw $t0, -28($fp) lw $t1, -128($fp) # local_a2i_aux_Parse_internal_30 <- local_a2i_aux_Parse_i_5 + 1 @@ -7826,16 +7826,16 @@ bnez $a1, mismatch_58 li $v0, 1 end_58: move $t3, $v0 -# If not local_a2i_aux_Parse_internal_34 goto continue__1157 +# If not local_a2i_aux_Parse_internal_34 goto continue__1184 sw $t0, -28($fp) sw $t1, -128($fp) sw $t2, -0($fp) sw $t3, -144($fp) sw $t4, -148($fp) -beqz $t3, continue__1157 +beqz $t3, continue__1184 la $a0, dispatch_error j .raise -continue__1157: +continue__1184: lw $t0, -140($fp) # Static Dispatch of the method length sw $fp, ($sp) @@ -7896,7 +7896,7 @@ bnez $a1, mismatch_59 li $v0, 1 end_59: move $t5, $v0 -# If not local_a2i_aux_Parse_internal_37 goto continue__1173 +# If not local_a2i_aux_Parse_internal_37 goto continue__1199 sw $t0, -140($fp) sw $t1, -28($fp) sw $t2, -136($fp) @@ -7904,10 +7904,10 @@ sw $t3, -132($fp) sw $t4, -0($fp) sw $t5, -156($fp) sw $t6, -160($fp) -beqz $t5, continue__1173 +beqz $t5, continue__1199 la $a0, dispatch_error j .raise -continue__1173: +continue__1199: lw $t0, -152($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -7965,7 +7965,7 @@ sw $t2, -12($fp) sw $t3, -28($fp) sw $t4, -164($fp) sw $t5, -76($fp) -end__1103: +end__1128: lw $t0, -76($fp) lw $t1, -64($fp) # Moving local_a2i_aux_Parse_internal_17 to local_a2i_aux_Parse_internal_14 @@ -7973,8 +7973,8 @@ move $t1, $t0 sw $t1, -64($fp) sw $t0, -76($fp) sw $t1, -64($fp) -j end__1096 -true__1096: +j end__1121 +true__1121: lw $t0, -28($fp) lw $t1, -168($fp) # local_a2i_aux_Parse_internal_40 <- local_a2i_aux_Parse_i_5 + 1 @@ -8007,16 +8007,16 @@ bnez $a1, mismatch_60 li $v0, 1 end_60: move $t3, $v0 -# If not local_a2i_aux_Parse_internal_44 goto continue__1198 +# If not local_a2i_aux_Parse_internal_44 goto continue__1225 sw $t0, -28($fp) sw $t1, -168($fp) sw $t2, -0($fp) sw $t3, -184($fp) sw $t4, -188($fp) -beqz $t3, continue__1198 +beqz $t3, continue__1225 la $a0, dispatch_error j .raise -continue__1198: +continue__1225: lw $t0, -180($fp) # Static Dispatch of the method length sw $fp, ($sp) @@ -8077,7 +8077,7 @@ bnez $a1, mismatch_61 li $v0, 1 end_61: move $t5, $v0 -# If not local_a2i_aux_Parse_internal_47 goto continue__1214 +# If not local_a2i_aux_Parse_internal_47 goto continue__1240 sw $t0, -180($fp) sw $t1, -28($fp) sw $t2, -176($fp) @@ -8085,10 +8085,10 @@ sw $t3, -172($fp) sw $t4, -0($fp) sw $t5, -196($fp) sw $t6, -200($fp) -beqz $t5, continue__1214 +beqz $t5, continue__1240 la $a0, dispatch_error j .raise -continue__1214: +continue__1240: lw $t0, -192($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -8146,7 +8146,7 @@ sw $t2, -12($fp) sw $t3, -28($fp) sw $t4, -204($fp) sw $t5, -64($fp) -end__1096: +end__1121: lw $t0, -64($fp) lw $t1, -32($fp) # Moving local_a2i_aux_Parse_internal_14 to local_a2i_aux_Parse_internal_6 @@ -8154,8 +8154,8 @@ move $t1, $t0 sw $t1, -32($fp) sw $t0, -64($fp) sw $t1, -32($fp) -j start__1069 -end__1069: +j start__1094 +end__1094: lw $t0, -8($fp) lw $t1, -208($fp) # Moving local_a2i_aux_Parse_int_0 to local_a2i_aux_Parse_internal_50 @@ -8311,15 +8311,15 @@ bnez $a1, mismatch_62 li $v0, 1 end_62: move $t2, $v0 -# If not local_main_Main_internal_2 goto continue__1257 +# If not local_main_Main_internal_2 goto continue__1284 sw $t0, -0($fp) sw $t1, -4($fp) sw $t2, -12($fp) sw $t3, -16($fp) -beqz $t2, continue__1257 +beqz $t2, continue__1284 la $a0, dispatch_error j .raise -continue__1257: +continue__1284: lw $t0, -4($fp) lw $t1, -8($fp) # Find the actual name in the dispatch table @@ -8381,16 +8381,16 @@ bnez $a1, mismatch_63 li $v0, 1 end_63: move $t3, $v0 -# If not local_main_Main_internal_6 goto continue__1271 +# If not local_main_Main_internal_6 goto continue__1298 sw $t0, -8($fp) sw $t1, -0($fp) sw $t2, -20($fp) sw $t3, -28($fp) sw $t4, -32($fp) -beqz $t3, continue__1271 +beqz $t3, continue__1298 la $a0, dispatch_error j .raise -continue__1271: +continue__1298: lw $t0, -20($fp) lw $t1, -24($fp) # Find the actual name in the dispatch table @@ -8447,16 +8447,16 @@ addiu $fp, $fp, 4 # Updates stack pointer pushing local_and_BoolOp_internal_0 to the stack addiu $sp, $sp, -4 lw $t0, -4($fp) -# If b1 goto true__1288 +# If b1 goto true__1315 sw $t0, -4($fp) -bnez $t0, true__1288 +bnez $t0, true__1315 lw $t0, -12($fp) # Moving 0 to local_and_BoolOp_internal_0 li $t0, 0 sw $t0, -12($fp) sw $t0, -12($fp) -j end__1288 -true__1288: +j end__1315 +true__1315: lw $t0, -0($fp) lw $t1, -12($fp) # Moving b2 to local_and_BoolOp_internal_0 @@ -8464,7 +8464,7 @@ move $t1, $t0 sw $t1, -12($fp) sw $t0, -0($fp) sw $t1, -12($fp) -end__1288: +end__1315: lw $t0, -12($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -8487,9 +8487,9 @@ addiu $fp, $fp, 4 # Updates stack pointer pushing local_or_BoolOp_internal_0 to the stack addiu $sp, $sp, -4 lw $t0, -4($fp) -# If b1 goto true__1300 +# If b1 goto true__1327 sw $t0, -4($fp) -bnez $t0, true__1300 +bnez $t0, true__1327 lw $t0, -0($fp) lw $t1, -12($fp) # Moving b2 to local_or_BoolOp_internal_0 @@ -8497,14 +8497,14 @@ move $t1, $t0 sw $t1, -12($fp) sw $t0, -0($fp) sw $t1, -12($fp) -j end__1300 -true__1300: +j end__1327 +true__1327: lw $t0, -12($fp) # Moving 1 to local_or_BoolOp_internal_0 li $t0, 1 sw $t0, -12($fp) sw $t0, -12($fp) -end__1300: +end__1327: lw $t0, -12($fp) move $v0, $t0 # Empty all used registers and saves them to memory diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips index 2aa4e999..0e646443 100644 --- a/tests/codegen/hairyscary.mips +++ b/tests/codegen/hairyscary.mips @@ -1258,19 +1258,19 @@ addiu $sp, $sp, -4 addiu $sp, $sp, -4 # Updates stack pointer pushing local_Foo_Foo_internal_18 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Foo_Foo_n_19 to the stack +# Updates stack pointer pushing local_Foo_Foo_internal_19 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Foo_Foo_internal_20 to the stack +# Updates stack pointer pushing local_Foo_Foo_n_20 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Foo_Foo_n_21 to the stack +# Updates stack pointer pushing local_Foo_Foo_internal_21 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Foo_Foo_internal_22 to the stack +# Updates stack pointer pushing local_Foo_Foo_n_22 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Foo_Foo_internal_23 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Foo_Foo_n_24 to the stack +# Updates stack pointer pushing local_Foo_Foo_internal_24 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Foo_Foo_internal_25 to the stack +# Updates stack pointer pushing local_Foo_Foo_n_25 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Foo_Foo_internal_26 to the stack addiu $sp, $sp, -4 @@ -1278,17 +1278,17 @@ addiu $sp, $sp, -4 addiu $sp, $sp, -4 # Updates stack pointer pushing local_Foo_Foo_internal_28 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Foo_Foo_a_29 to the stack +# Updates stack pointer pushing local_Foo_Foo_internal_29 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Foo_Foo_internal_30 to the stack +# Updates stack pointer pushing local_Foo_Foo_a_30 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Foo_Foo_internal_31 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Foo_Foo_internal_32 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Foo_Foo_g_33 to the stack +# Updates stack pointer pushing local_Foo_Foo_internal_33 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Foo_Foo_internal_34 to the stack +# Updates stack pointer pushing local_Foo_Foo_g_34 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Foo_Foo_internal_35 to the stack addiu $sp, $sp, -4 @@ -1300,6 +1300,8 @@ addiu $sp, $sp, -4 addiu $sp, $sp, -4 # Updates stack pointer pushing local_Foo_Foo_internal_39 to the stack addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Foo_Foo_internal_40 to the stack +addiu $sp, $sp, -4 lw $t0, -0($fp) # self . h <- SET 1 li $t9, 1 @@ -1633,18 +1635,33 @@ lw $fp, ($sp) lw $t0, -60($fp) # saves the return value move $t0, $v0 -lw $t1, -0($fp) -# self . i <- SET local_Foo_Foo_internal_14 -sw $t0, 20($t1) -lw $t2, -68($fp) -# local_Foo_Foo_internal_16 <- Type of self -lw $t2, 0($t1) +lw $t1, -64($fp) +# Initialize new node +li $a0, 12 +li $v0, 9 +syscall +la $t9, type_Int +sw $t9, 0($v0) +li $t9, 12 +sw $t9, 4($v0) +move $t1, $v0 +# Saving the methods of object +# Adding Type Info addr +la $t8, types +lw $v0, 8($t8) +sw $v0, 8($t1) +lw $t2, -0($fp) +# self . i <- SET local_Foo_Foo_internal_15 +sw $t1, 20($t2) lw $t3, -72($fp) -# Saves in local_Foo_Foo_internal_17 data_0 -la $t3, data_0 -# local_Foo_Foo_internal_16 <- local_Foo_Foo_internal_16 = local_Foo_Foo_internal_17 -move $t8, $t2 -move $t9, $t3 +# local_Foo_Foo_internal_17 <- Type of self +lw $t3, 0($t2) +lw $t4, -76($fp) +# Saves in local_Foo_Foo_internal_18 data_0 +la $t4, data_0 +# local_Foo_Foo_internal_17 <- local_Foo_Foo_internal_17 = local_Foo_Foo_internal_18 +move $t8, $t3 +move $t9, $t4 loop_11: lb $a0, ($t8) lb $a1, ($t9) @@ -1662,15 +1679,16 @@ check_11: bnez $a1, mismatch_11 li $v0, 1 end_11: -move $t2, $v0 -# If local_Foo_Foo_internal_16 goto error__107 +move $t3, $v0 +# If local_Foo_Foo_internal_17 goto error__110 sw $t0, -60($fp) -sw $t1, -0($fp) -sw $t2, -68($fp) +sw $t1, -64($fp) +sw $t2, -0($fp) sw $t3, -72($fp) -bnez $t2, error__107 +sw $t4, -76($fp) +bnez $t3, error__110 lw $t0, -0($fp) -lw $t1, -76($fp) +lw $t1, -80($fp) la $t9, type_Bar lw $v0, 8($t0) loop_12: @@ -1686,26 +1704,26 @@ j end_12 false_12: li $t1, 0 end_12: -# If not local_Foo_Foo_internal_18 goto next__113_0 +# If not local_Foo_Foo_internal_19 goto next__116_0 sw $t0, -0($fp) -sw $t1, -76($fp) -beqz $t1, next__113_0 +sw $t1, -80($fp) +beqz $t1, next__116_0 lw $t0, -0($fp) -lw $t1, -80($fp) -# Moving self to local_Foo_Foo_n_19 +lw $t1, -84($fp) +# Moving self to local_Foo_Foo_n_20 move $t1, $t0 -sw $t1, -80($fp) -lw $t2, -64($fp) -# Moving local_Foo_Foo_n_19 to local_Foo_Foo_internal_15 +sw $t1, -84($fp) +lw $t2, -68($fp) +# Moving local_Foo_Foo_n_20 to local_Foo_Foo_internal_16 move $t2, $t1 -sw $t2, -64($fp) +sw $t2, -68($fp) sw $t0, -0($fp) -sw $t1, -80($fp) -sw $t2, -64($fp) -j end__107 -next__113_0: +sw $t1, -84($fp) +sw $t2, -68($fp) +j end__110 +next__116_0: lw $t0, -0($fp) -lw $t1, -84($fp) +lw $t1, -88($fp) la $t9, type_Razz lw $v0, 8($t0) loop_13: @@ -1721,16 +1739,16 @@ j end_13 false_13: li $t1, 0 end_13: -# If not local_Foo_Foo_internal_20 goto next__121_1 +# If not local_Foo_Foo_internal_21 goto next__124_1 sw $t0, -0($fp) -sw $t1, -84($fp) -beqz $t1, next__121_1 +sw $t1, -88($fp) +beqz $t1, next__124_1 lw $t0, -0($fp) -lw $t1, -88($fp) -# Moving self to local_Foo_Foo_n_21 +lw $t1, -92($fp) +# Moving self to local_Foo_Foo_n_22 move $t1, $t0 -sw $t1, -88($fp) -lw $t2, -92($fp) +sw $t1, -92($fp) +lw $t2, -96($fp) # Syscall to allocate memory of the object entry in heap li $v0, 9 li $a0, 48 @@ -1757,8 +1775,8 @@ sw $t2, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory sw $t0, -0($fp) -sw $t1, -88($fp) -sw $t2, -92($fp) +sw $t1, -92($fp) +sw $t2, -96($fp) # This function will consume the arguments jal function_Bar_Bar # Pop ra register of return function of the stack @@ -1767,19 +1785,19 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -92($fp) +lw $t0, -96($fp) # saves the return value move $t0, $v0 -lw $t1, -64($fp) -# Moving local_Foo_Foo_internal_22 to local_Foo_Foo_internal_15 +lw $t1, -68($fp) +# Moving local_Foo_Foo_internal_23 to local_Foo_Foo_internal_16 move $t1, $t0 -sw $t1, -64($fp) -sw $t0, -92($fp) -sw $t1, -64($fp) -j end__107 -next__121_1: +sw $t1, -68($fp) +sw $t0, -96($fp) +sw $t1, -68($fp) +j end__110 +next__124_1: lw $t0, -0($fp) -lw $t1, -96($fp) +lw $t1, -100($fp) la $t9, type_Foo lw $v0, 8($t0) loop_14: @@ -1795,16 +1813,16 @@ j end_14 false_14: li $t1, 0 end_14: -# If not local_Foo_Foo_internal_23 goto next__132_2 +# If not local_Foo_Foo_internal_24 goto next__135_2 sw $t0, -0($fp) -sw $t1, -96($fp) -beqz $t1, next__132_2 +sw $t1, -100($fp) +beqz $t1, next__135_2 lw $t0, -0($fp) -lw $t1, -100($fp) -# Moving self to local_Foo_Foo_n_24 +lw $t1, -104($fp) +# Moving self to local_Foo_Foo_n_25 move $t1, $t0 -sw $t1, -100($fp) -lw $t2, -104($fp) +sw $t1, -104($fp) +lw $t2, -108($fp) # Syscall to allocate memory of the object entry in heap li $v0, 9 li $a0, 40 @@ -1831,8 +1849,8 @@ sw $t2, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory sw $t0, -0($fp) -sw $t1, -100($fp) -sw $t2, -104($fp) +sw $t1, -104($fp) +sw $t2, -108($fp) # This function will consume the arguments jal function_Razz_Razz # Pop ra register of return function of the stack @@ -1841,37 +1859,37 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -104($fp) +lw $t0, -108($fp) # saves the return value move $t0, $v0 -lw $t1, -64($fp) -# Moving local_Foo_Foo_internal_25 to local_Foo_Foo_internal_15 +lw $t1, -68($fp) +# Moving local_Foo_Foo_internal_26 to local_Foo_Foo_internal_16 move $t1, $t0 -sw $t1, -64($fp) -sw $t0, -104($fp) -sw $t1, -64($fp) -j end__107 -next__132_2: +sw $t1, -68($fp) +sw $t0, -108($fp) +sw $t1, -68($fp) +j end__110 +next__135_2: la $a0, case_error j .raise -error__107: +error__110: la $a0, case_void_error j .raise -end__107: -lw $t0, -64($fp) +end__110: +lw $t0, -68($fp) lw $t1, -0($fp) -# self . a <- SET local_Foo_Foo_internal_15 +# self . a <- SET local_Foo_Foo_internal_16 sw $t0, 24($t1) -lw $t2, -120($fp) -# local_Foo_Foo_a_29 <- GET self . a +lw $t2, -124($fp) +# local_Foo_Foo_a_30 <- GET self . a lw $t2, 24($t1) -lw $t3, -128($fp) -# local_Foo_Foo_internal_31 <- Type of local_Foo_Foo_a_29 +lw $t3, -132($fp) +# local_Foo_Foo_internal_32 <- Type of local_Foo_Foo_a_30 lw $t3, 0($t2) -lw $t4, -132($fp) -# Saves in local_Foo_Foo_internal_32 data_0 +lw $t4, -136($fp) +# Saves in local_Foo_Foo_internal_33 data_0 la $t4, data_0 -# local_Foo_Foo_internal_31 <- local_Foo_Foo_internal_31 = local_Foo_Foo_internal_32 +# local_Foo_Foo_internal_32 <- local_Foo_Foo_internal_32 = local_Foo_Foo_internal_33 move $t8, $t3 move $t9, $t4 loop_15: @@ -1892,18 +1910,18 @@ bnez $a1, mismatch_15 li $v0, 1 end_15: move $t3, $v0 -# If not local_Foo_Foo_internal_31 goto continue__155 -sw $t0, -64($fp) +# If not local_Foo_Foo_internal_32 goto continue__158 +sw $t0, -68($fp) sw $t1, -0($fp) -sw $t2, -120($fp) -sw $t3, -128($fp) -sw $t4, -132($fp) -beqz $t3, continue__155 +sw $t2, -124($fp) +sw $t3, -132($fp) +sw $t4, -136($fp) +beqz $t3, continue__158 la $a0, dispatch_error j .raise -continue__155: -lw $t0, -120($fp) -lw $t1, -124($fp) +continue__158: +lw $t0, -124($fp) +lw $t1, -128($fp) # Find the actual name in the dispatch table # Gets in a0 the actual direction of the dispatch table lw $t9, 8($t0) @@ -1919,8 +1937,8 @@ addiu $sp, $sp, -4 sw $t0, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory -sw $t0, -120($fp) -sw $t1, -124($fp) +sw $t0, -124($fp) +sw $t1, -128($fp) # This function will consume the arguments jal $t8 # Pop ra register of return function of the stack @@ -1929,20 +1947,20 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -124($fp) +lw $t0, -128($fp) # saves the return value move $t0, $v0 lw $t1, -0($fp) -lw $t2, -136($fp) -# local_Foo_Foo_g_33 <- GET self . g +lw $t2, -140($fp) +# local_Foo_Foo_g_34 <- GET self . g lw $t2, 16($t1) -lw $t3, -144($fp) -# local_Foo_Foo_internal_35 <- Type of local_Foo_Foo_g_33 +lw $t3, -148($fp) +# local_Foo_Foo_internal_36 <- Type of local_Foo_Foo_g_34 lw $t3, 0($t2) -lw $t4, -148($fp) -# Saves in local_Foo_Foo_internal_36 data_0 +lw $t4, -152($fp) +# Saves in local_Foo_Foo_internal_37 data_0 la $t4, data_0 -# local_Foo_Foo_internal_35 <- local_Foo_Foo_internal_35 = local_Foo_Foo_internal_36 +# local_Foo_Foo_internal_36 <- local_Foo_Foo_internal_36 = local_Foo_Foo_internal_37 move $t8, $t3 move $t9, $t4 loop_16: @@ -1963,18 +1981,18 @@ bnez $a1, mismatch_16 li $v0, 1 end_16: move $t3, $v0 -# If not local_Foo_Foo_internal_35 goto continue__169 -sw $t0, -124($fp) +# If not local_Foo_Foo_internal_36 goto continue__172 +sw $t0, -128($fp) sw $t1, -0($fp) -sw $t2, -136($fp) -sw $t3, -144($fp) -sw $t4, -148($fp) -beqz $t3, continue__169 +sw $t2, -140($fp) +sw $t3, -148($fp) +sw $t4, -152($fp) +beqz $t3, continue__172 la $a0, dispatch_error j .raise -continue__169: -lw $t0, -136($fp) -lw $t1, -140($fp) +continue__172: +lw $t0, -140($fp) +lw $t1, -144($fp) # Find the actual name in the dispatch table # Gets in a0 the actual direction of the dispatch table lw $t9, 8($t0) @@ -1990,8 +2008,8 @@ addiu $sp, $sp, -4 sw $t0, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory -sw $t0, -136($fp) -sw $t1, -140($fp) +sw $t0, -140($fp) +sw $t1, -144($fp) # This function will consume the arguments jal $t8 # Pop ra register of return function of the stack @@ -2000,15 +2018,15 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -140($fp) +lw $t0, -144($fp) # saves the return value move $t0, $v0 -lw $t1, -124($fp) -lw $t2, -116($fp) -# local_Foo_Foo_internal_28 <- local_Foo_Foo_internal_30 + local_Foo_Foo_internal_34 +lw $t1, -128($fp) +lw $t2, -120($fp) +# local_Foo_Foo_internal_29 <- local_Foo_Foo_internal_31 + local_Foo_Foo_internal_35 add $t2, $t1, $t0 lw $t3, -0($fp) -lw $t4, -152($fp) +lw $t4, -156($fp) # Find the actual name in the dispatch table # Gets in a0 the actual direction of the dispatch table lw $t9, 8($t3) @@ -2024,11 +2042,11 @@ addiu $sp, $sp, -4 sw $t3, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory -sw $t0, -140($fp) -sw $t1, -124($fp) -sw $t2, -116($fp) +sw $t0, -144($fp) +sw $t1, -128($fp) +sw $t2, -120($fp) sw $t3, -0($fp) -sw $t4, -152($fp) +sw $t4, -156($fp) # This function will consume the arguments jal $t8 # Pop ra register of return function of the stack @@ -2037,15 +2055,15 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -152($fp) +lw $t0, -156($fp) # saves the return value move $t0, $v0 -lw $t1, -116($fp) -lw $t2, -112($fp) -# local_Foo_Foo_internal_27 <- local_Foo_Foo_internal_28 + local_Foo_Foo_internal_37 +lw $t1, -120($fp) +lw $t2, -116($fp) +# local_Foo_Foo_internal_28 <- local_Foo_Foo_internal_29 + local_Foo_Foo_internal_38 add $t2, $t1, $t0 lw $t3, -0($fp) -lw $t4, -156($fp) +lw $t4, -160($fp) # Find the actual name in the dispatch table # Gets in a0 the actual direction of the dispatch table lw $t9, 8($t3) @@ -2061,11 +2079,11 @@ addiu $sp, $sp, -4 sw $t3, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory -sw $t0, -152($fp) -sw $t1, -116($fp) -sw $t2, -112($fp) +sw $t0, -156($fp) +sw $t1, -120($fp) +sw $t2, -116($fp) sw $t3, -0($fp) -sw $t4, -156($fp) +sw $t4, -160($fp) # This function will consume the arguments jal $t8 # Pop ra register of return function of the stack @@ -2074,29 +2092,29 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -156($fp) +lw $t0, -160($fp) # saves the return value move $t0, $v0 -lw $t1, -112($fp) -lw $t2, -108($fp) -# local_Foo_Foo_internal_26 <- local_Foo_Foo_internal_27 + local_Foo_Foo_internal_38 +lw $t1, -116($fp) +lw $t2, -112($fp) +# local_Foo_Foo_internal_27 <- local_Foo_Foo_internal_28 + local_Foo_Foo_internal_39 add $t2, $t1, $t0 lw $t3, -0($fp) -# self . b <- SET local_Foo_Foo_internal_26 +# self . b <- SET local_Foo_Foo_internal_27 sw $t2, 28($t3) -lw $t4, -160($fp) -# Moving self to local_Foo_Foo_internal_39 +lw $t4, -164($fp) +# Moving self to local_Foo_Foo_internal_40 move $t4, $t3 -sw $t4, -160($fp) +sw $t4, -164($fp) move $v0, $t4 # Empty all used registers and saves them to memory -sw $t0, -156($fp) -sw $t1, -112($fp) -sw $t2, -108($fp) +sw $t0, -160($fp) +sw $t1, -116($fp) +sw $t2, -112($fp) sw $t3, -0($fp) -sw $t4, -160($fp) +sw $t4, -164($fp) # Removing all locals from stack -addiu $sp, $sp, 164 +addiu $sp, $sp, 168 jr $ra @@ -2199,19 +2217,19 @@ addiu $sp, $sp, -4 addiu $sp, $sp, -4 # Updates stack pointer pushing local_Bar_Bar_internal_18 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Bar_Bar_n_19 to the stack +# Updates stack pointer pushing local_Bar_Bar_internal_19 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Bar_Bar_internal_20 to the stack +# Updates stack pointer pushing local_Bar_Bar_n_20 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Bar_Bar_n_21 to the stack +# Updates stack pointer pushing local_Bar_Bar_internal_21 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Bar_Bar_internal_22 to the stack +# Updates stack pointer pushing local_Bar_Bar_n_22 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Bar_Bar_internal_23 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Bar_Bar_n_24 to the stack +# Updates stack pointer pushing local_Bar_Bar_internal_24 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Bar_Bar_internal_25 to the stack +# Updates stack pointer pushing local_Bar_Bar_n_25 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Bar_Bar_internal_26 to the stack addiu $sp, $sp, -4 @@ -2219,17 +2237,17 @@ addiu $sp, $sp, -4 addiu $sp, $sp, -4 # Updates stack pointer pushing local_Bar_Bar_internal_28 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Bar_Bar_a_29 to the stack +# Updates stack pointer pushing local_Bar_Bar_internal_29 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Bar_Bar_internal_30 to the stack +# Updates stack pointer pushing local_Bar_Bar_a_30 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Bar_Bar_internal_31 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Bar_Bar_internal_32 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Bar_Bar_g_33 to the stack +# Updates stack pointer pushing local_Bar_Bar_internal_33 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Bar_Bar_internal_34 to the stack +# Updates stack pointer pushing local_Bar_Bar_g_34 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Bar_Bar_internal_35 to the stack addiu $sp, $sp, -4 @@ -2247,13 +2265,13 @@ addiu $sp, $sp, -4 addiu $sp, $sp, -4 # Updates stack pointer pushing local_Bar_Bar_internal_42 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Bar_Bar_n_43 to the stack +# Updates stack pointer pushing local_Bar_Bar_internal_43 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Bar_Bar_internal_44 to the stack +# Updates stack pointer pushing local_Bar_Bar_n_44 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Bar_Bar_n_45 to the stack +# Updates stack pointer pushing local_Bar_Bar_internal_45 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Bar_Bar_internal_46 to the stack +# Updates stack pointer pushing local_Bar_Bar_n_46 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Bar_Bar_internal_47 to the stack addiu $sp, $sp, -4 @@ -2263,25 +2281,25 @@ addiu $sp, $sp, -4 addiu $sp, $sp, -4 # Updates stack pointer pushing local_Bar_Bar_internal_50 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Bar_Bar_a_51 to the stack +# Updates stack pointer pushing local_Bar_Bar_internal_51 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Bar_Bar_internal_52 to the stack +# Updates stack pointer pushing local_Bar_Bar_a_52 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Bar_Bar_internal_53 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Bar_Bar_internal_54 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Bar_Bar_g_55 to the stack +# Updates stack pointer pushing local_Bar_Bar_internal_55 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Bar_Bar_internal_56 to the stack +# Updates stack pointer pushing local_Bar_Bar_g_56 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Bar_Bar_internal_57 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Bar_Bar_internal_58 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Bar_Bar_e_59 to the stack +# Updates stack pointer pushing local_Bar_Bar_internal_59 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Bar_Bar_internal_60 to the stack +# Updates stack pointer pushing local_Bar_Bar_e_60 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Bar_Bar_internal_61 to the stack addiu $sp, $sp, -4 @@ -2297,6 +2315,10 @@ addiu $sp, $sp, -4 addiu $sp, $sp, -4 # Updates stack pointer pushing local_Bar_Bar_internal_67 to the stack addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_68 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bar_Bar_internal_69 to the stack +addiu $sp, $sp, -4 lw $t0, -0($fp) # self . h <- SET 1 li $t9, 1 @@ -2328,11 +2350,11 @@ bnez $a1, mismatch_17 li $v0, 1 end_17: move $t1, $v0 -# If local_Bar_Bar_internal_1 goto error__210 +# If local_Bar_Bar_internal_1 goto error__215 sw $t0, -0($fp) sw $t1, -8($fp) sw $t2, -12($fp) -bnez $t1, error__210 +bnez $t1, error__215 lw $t0, -0($fp) lw $t1, -16($fp) la $t9, type_Bar @@ -2350,10 +2372,10 @@ j end_18 false_18: li $t1, 0 end_18: -# If not local_Bar_Bar_internal_3 goto next__216_0 +# If not local_Bar_Bar_internal_3 goto next__221_0 sw $t0, -0($fp) sw $t1, -16($fp) -beqz $t1, next__216_0 +beqz $t1, next__221_0 lw $t0, -0($fp) lw $t1, -20($fp) # Moving self to local_Bar_Bar_n_4 @@ -2366,8 +2388,8 @@ sw $t2, -4($fp) sw $t0, -0($fp) sw $t1, -20($fp) sw $t2, -4($fp) -j end__210 -next__216_0: +j end__215 +next__221_0: lw $t0, -0($fp) lw $t1, -24($fp) la $t9, type_Razz @@ -2385,10 +2407,10 @@ j end_19 false_19: li $t1, 0 end_19: -# If not local_Bar_Bar_internal_5 goto next__224_1 +# If not local_Bar_Bar_internal_5 goto next__229_1 sw $t0, -0($fp) sw $t1, -24($fp) -beqz $t1, next__224_1 +beqz $t1, next__229_1 lw $t0, -0($fp) lw $t1, -28($fp) # Moving self to local_Bar_Bar_n_6 @@ -2440,8 +2462,8 @@ move $t1, $t0 sw $t1, -4($fp) sw $t0, -32($fp) sw $t1, -4($fp) -j end__210 -next__224_1: +j end__215 +next__229_1: lw $t0, -0($fp) lw $t1, -36($fp) la $t9, type_Foo @@ -2459,10 +2481,10 @@ j end_20 false_20: li $t1, 0 end_20: -# If not local_Bar_Bar_internal_8 goto next__235_2 +# If not local_Bar_Bar_internal_8 goto next__240_2 sw $t0, -0($fp) sw $t1, -36($fp) -beqz $t1, next__235_2 +beqz $t1, next__240_2 lw $t0, -0($fp) lw $t1, -40($fp) # Moving self to local_Bar_Bar_n_9 @@ -2514,8 +2536,8 @@ move $t1, $t0 sw $t1, -4($fp) sw $t0, -44($fp) sw $t1, -4($fp) -j end__210 -next__235_2: +j end__215 +next__240_2: lw $t0, -0($fp) lw $t1, -48($fp) la $t9, type_Bazz @@ -2533,10 +2555,10 @@ j end_21 false_21: li $t1, 0 end_21: -# If not local_Bar_Bar_internal_11 goto next__246_3 +# If not local_Bar_Bar_internal_11 goto next__251_3 sw $t0, -0($fp) sw $t1, -48($fp) -beqz $t1, next__246_3 +beqz $t1, next__251_3 lw $t0, -0($fp) lw $t1, -52($fp) # Moving self to local_Bar_Bar_n_12 @@ -2588,14 +2610,14 @@ move $t1, $t0 sw $t1, -4($fp) sw $t0, -56($fp) sw $t1, -4($fp) -j end__210 -next__246_3: +j end__215 +next__251_3: la $a0, case_error j .raise -error__210: +error__215: la $a0, case_void_error j .raise -end__210: +end__215: lw $t0, -4($fp) lw $t1, -0($fp) # self . g <- SET local_Bar_Bar_internal_0 @@ -2630,18 +2652,33 @@ lw $fp, ($sp) lw $t0, -60($fp) # saves the return value move $t0, $v0 -lw $t1, -0($fp) -# self . i <- SET local_Bar_Bar_internal_14 -sw $t0, 20($t1) -lw $t2, -68($fp) -# local_Bar_Bar_internal_16 <- Type of self -lw $t2, 0($t1) +lw $t1, -64($fp) +# Initialize new node +li $a0, 12 +li $v0, 9 +syscall +la $t9, type_Int +sw $t9, 0($v0) +li $t9, 12 +sw $t9, 4($v0) +move $t1, $v0 +# Saving the methods of object +# Adding Type Info addr +la $t8, types +lw $v0, 8($t8) +sw $v0, 8($t1) +lw $t2, -0($fp) +# self . i <- SET local_Bar_Bar_internal_15 +sw $t1, 20($t2) lw $t3, -72($fp) -# Saves in local_Bar_Bar_internal_17 data_0 -la $t3, data_0 -# local_Bar_Bar_internal_16 <- local_Bar_Bar_internal_16 = local_Bar_Bar_internal_17 -move $t8, $t2 -move $t9, $t3 +# local_Bar_Bar_internal_17 <- Type of self +lw $t3, 0($t2) +lw $t4, -76($fp) +# Saves in local_Bar_Bar_internal_18 data_0 +la $t4, data_0 +# local_Bar_Bar_internal_17 <- local_Bar_Bar_internal_17 = local_Bar_Bar_internal_18 +move $t8, $t3 +move $t9, $t4 loop_22: lb $a0, ($t8) lb $a1, ($t9) @@ -2659,15 +2696,16 @@ check_22: bnez $a1, mismatch_22 li $v0, 1 end_22: -move $t2, $v0 -# If local_Bar_Bar_internal_16 goto error__266 +move $t3, $v0 +# If local_Bar_Bar_internal_17 goto error__274 sw $t0, -60($fp) -sw $t1, -0($fp) -sw $t2, -68($fp) +sw $t1, -64($fp) +sw $t2, -0($fp) sw $t3, -72($fp) -bnez $t2, error__266 +sw $t4, -76($fp) +bnez $t3, error__274 lw $t0, -0($fp) -lw $t1, -76($fp) +lw $t1, -80($fp) la $t9, type_Bar lw $v0, 8($t0) loop_23: @@ -2683,26 +2721,26 @@ j end_23 false_23: li $t1, 0 end_23: -# If not local_Bar_Bar_internal_18 goto next__272_0 +# If not local_Bar_Bar_internal_19 goto next__280_0 sw $t0, -0($fp) -sw $t1, -76($fp) -beqz $t1, next__272_0 +sw $t1, -80($fp) +beqz $t1, next__280_0 lw $t0, -0($fp) -lw $t1, -80($fp) -# Moving self to local_Bar_Bar_n_19 +lw $t1, -84($fp) +# Moving self to local_Bar_Bar_n_20 move $t1, $t0 -sw $t1, -80($fp) -lw $t2, -64($fp) -# Moving local_Bar_Bar_n_19 to local_Bar_Bar_internal_15 +sw $t1, -84($fp) +lw $t2, -68($fp) +# Moving local_Bar_Bar_n_20 to local_Bar_Bar_internal_16 move $t2, $t1 -sw $t2, -64($fp) +sw $t2, -68($fp) sw $t0, -0($fp) -sw $t1, -80($fp) -sw $t2, -64($fp) -j end__266 -next__272_0: +sw $t1, -84($fp) +sw $t2, -68($fp) +j end__274 +next__280_0: lw $t0, -0($fp) -lw $t1, -84($fp) +lw $t1, -88($fp) la $t9, type_Razz lw $v0, 8($t0) loop_24: @@ -2718,16 +2756,16 @@ j end_24 false_24: li $t1, 0 end_24: -# If not local_Bar_Bar_internal_20 goto next__280_1 +# If not local_Bar_Bar_internal_21 goto next__288_1 sw $t0, -0($fp) -sw $t1, -84($fp) -beqz $t1, next__280_1 +sw $t1, -88($fp) +beqz $t1, next__288_1 lw $t0, -0($fp) -lw $t1, -88($fp) -# Moving self to local_Bar_Bar_n_21 +lw $t1, -92($fp) +# Moving self to local_Bar_Bar_n_22 move $t1, $t0 -sw $t1, -88($fp) -lw $t2, -92($fp) +sw $t1, -92($fp) +lw $t2, -96($fp) # Syscall to allocate memory of the object entry in heap li $v0, 9 li $a0, 48 @@ -2754,8 +2792,8 @@ sw $t2, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory sw $t0, -0($fp) -sw $t1, -88($fp) -sw $t2, -92($fp) +sw $t1, -92($fp) +sw $t2, -96($fp) # This function will consume the arguments jal function_Bar_Bar # Pop ra register of return function of the stack @@ -2764,19 +2802,19 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -92($fp) +lw $t0, -96($fp) # saves the return value move $t0, $v0 -lw $t1, -64($fp) -# Moving local_Bar_Bar_internal_22 to local_Bar_Bar_internal_15 +lw $t1, -68($fp) +# Moving local_Bar_Bar_internal_23 to local_Bar_Bar_internal_16 move $t1, $t0 -sw $t1, -64($fp) -sw $t0, -92($fp) -sw $t1, -64($fp) -j end__266 -next__280_1: +sw $t1, -68($fp) +sw $t0, -96($fp) +sw $t1, -68($fp) +j end__274 +next__288_1: lw $t0, -0($fp) -lw $t1, -96($fp) +lw $t1, -100($fp) la $t9, type_Foo lw $v0, 8($t0) loop_25: @@ -2792,16 +2830,16 @@ j end_25 false_25: li $t1, 0 end_25: -# If not local_Bar_Bar_internal_23 goto next__291_2 +# If not local_Bar_Bar_internal_24 goto next__299_2 sw $t0, -0($fp) -sw $t1, -96($fp) -beqz $t1, next__291_2 +sw $t1, -100($fp) +beqz $t1, next__299_2 lw $t0, -0($fp) -lw $t1, -100($fp) -# Moving self to local_Bar_Bar_n_24 +lw $t1, -104($fp) +# Moving self to local_Bar_Bar_n_25 move $t1, $t0 -sw $t1, -100($fp) -lw $t2, -104($fp) +sw $t1, -104($fp) +lw $t2, -108($fp) # Syscall to allocate memory of the object entry in heap li $v0, 9 li $a0, 40 @@ -2828,8 +2866,8 @@ sw $t2, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory sw $t0, -0($fp) -sw $t1, -100($fp) -sw $t2, -104($fp) +sw $t1, -104($fp) +sw $t2, -108($fp) # This function will consume the arguments jal function_Razz_Razz # Pop ra register of return function of the stack @@ -2838,37 +2876,37 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -104($fp) +lw $t0, -108($fp) # saves the return value move $t0, $v0 -lw $t1, -64($fp) -# Moving local_Bar_Bar_internal_25 to local_Bar_Bar_internal_15 +lw $t1, -68($fp) +# Moving local_Bar_Bar_internal_26 to local_Bar_Bar_internal_16 move $t1, $t0 -sw $t1, -64($fp) -sw $t0, -104($fp) -sw $t1, -64($fp) -j end__266 -next__291_2: +sw $t1, -68($fp) +sw $t0, -108($fp) +sw $t1, -68($fp) +j end__274 +next__299_2: la $a0, case_error j .raise -error__266: +error__274: la $a0, case_void_error j .raise -end__266: -lw $t0, -64($fp) +end__274: +lw $t0, -68($fp) lw $t1, -0($fp) -# self . a <- SET local_Bar_Bar_internal_15 +# self . a <- SET local_Bar_Bar_internal_16 sw $t0, 24($t1) -lw $t2, -120($fp) -# local_Bar_Bar_a_29 <- GET self . a +lw $t2, -124($fp) +# local_Bar_Bar_a_30 <- GET self . a lw $t2, 24($t1) -lw $t3, -128($fp) -# local_Bar_Bar_internal_31 <- Type of local_Bar_Bar_a_29 +lw $t3, -132($fp) +# local_Bar_Bar_internal_32 <- Type of local_Bar_Bar_a_30 lw $t3, 0($t2) -lw $t4, -132($fp) -# Saves in local_Bar_Bar_internal_32 data_0 +lw $t4, -136($fp) +# Saves in local_Bar_Bar_internal_33 data_0 la $t4, data_0 -# local_Bar_Bar_internal_31 <- local_Bar_Bar_internal_31 = local_Bar_Bar_internal_32 +# local_Bar_Bar_internal_32 <- local_Bar_Bar_internal_32 = local_Bar_Bar_internal_33 move $t8, $t3 move $t9, $t4 loop_26: @@ -2889,18 +2927,18 @@ bnez $a1, mismatch_26 li $v0, 1 end_26: move $t3, $v0 -# If not local_Bar_Bar_internal_31 goto continue__314 -sw $t0, -64($fp) +# If not local_Bar_Bar_internal_32 goto continue__322 +sw $t0, -68($fp) sw $t1, -0($fp) -sw $t2, -120($fp) -sw $t3, -128($fp) -sw $t4, -132($fp) -beqz $t3, continue__314 +sw $t2, -124($fp) +sw $t3, -132($fp) +sw $t4, -136($fp) +beqz $t3, continue__322 la $a0, dispatch_error j .raise -continue__314: -lw $t0, -120($fp) -lw $t1, -124($fp) +continue__322: +lw $t0, -124($fp) +lw $t1, -128($fp) # Find the actual name in the dispatch table # Gets in a0 the actual direction of the dispatch table lw $t9, 8($t0) @@ -2916,8 +2954,8 @@ addiu $sp, $sp, -4 sw $t0, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory -sw $t0, -120($fp) -sw $t1, -124($fp) +sw $t0, -124($fp) +sw $t1, -128($fp) # This function will consume the arguments jal $t8 # Pop ra register of return function of the stack @@ -2926,20 +2964,20 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -124($fp) +lw $t0, -128($fp) # saves the return value move $t0, $v0 lw $t1, -0($fp) -lw $t2, -136($fp) -# local_Bar_Bar_g_33 <- GET self . g +lw $t2, -140($fp) +# local_Bar_Bar_g_34 <- GET self . g lw $t2, 16($t1) -lw $t3, -144($fp) -# local_Bar_Bar_internal_35 <- Type of local_Bar_Bar_g_33 +lw $t3, -148($fp) +# local_Bar_Bar_internal_36 <- Type of local_Bar_Bar_g_34 lw $t3, 0($t2) -lw $t4, -148($fp) -# Saves in local_Bar_Bar_internal_36 data_0 +lw $t4, -152($fp) +# Saves in local_Bar_Bar_internal_37 data_0 la $t4, data_0 -# local_Bar_Bar_internal_35 <- local_Bar_Bar_internal_35 = local_Bar_Bar_internal_36 +# local_Bar_Bar_internal_36 <- local_Bar_Bar_internal_36 = local_Bar_Bar_internal_37 move $t8, $t3 move $t9, $t4 loop_27: @@ -2960,18 +2998,18 @@ bnez $a1, mismatch_27 li $v0, 1 end_27: move $t3, $v0 -# If not local_Bar_Bar_internal_35 goto continue__328 -sw $t0, -124($fp) +# If not local_Bar_Bar_internal_36 goto continue__336 +sw $t0, -128($fp) sw $t1, -0($fp) -sw $t2, -136($fp) -sw $t3, -144($fp) -sw $t4, -148($fp) -beqz $t3, continue__328 +sw $t2, -140($fp) +sw $t3, -148($fp) +sw $t4, -152($fp) +beqz $t3, continue__336 la $a0, dispatch_error j .raise -continue__328: -lw $t0, -136($fp) -lw $t1, -140($fp) +continue__336: +lw $t0, -140($fp) +lw $t1, -144($fp) # Find the actual name in the dispatch table # Gets in a0 the actual direction of the dispatch table lw $t9, 8($t0) @@ -2987,8 +3025,8 @@ addiu $sp, $sp, -4 sw $t0, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory -sw $t0, -136($fp) -sw $t1, -140($fp) +sw $t0, -140($fp) +sw $t1, -144($fp) # This function will consume the arguments jal $t8 # Pop ra register of return function of the stack @@ -2997,15 +3035,15 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -140($fp) +lw $t0, -144($fp) # saves the return value move $t0, $v0 -lw $t1, -124($fp) -lw $t2, -116($fp) -# local_Bar_Bar_internal_28 <- local_Bar_Bar_internal_30 + local_Bar_Bar_internal_34 +lw $t1, -128($fp) +lw $t2, -120($fp) +# local_Bar_Bar_internal_29 <- local_Bar_Bar_internal_31 + local_Bar_Bar_internal_35 add $t2, $t1, $t0 lw $t3, -0($fp) -lw $t4, -152($fp) +lw $t4, -156($fp) # Find the actual name in the dispatch table # Gets in a0 the actual direction of the dispatch table lw $t9, 8($t3) @@ -3021,11 +3059,11 @@ addiu $sp, $sp, -4 sw $t3, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory -sw $t0, -140($fp) -sw $t1, -124($fp) -sw $t2, -116($fp) +sw $t0, -144($fp) +sw $t1, -128($fp) +sw $t2, -120($fp) sw $t3, -0($fp) -sw $t4, -152($fp) +sw $t4, -156($fp) # This function will consume the arguments jal $t8 # Pop ra register of return function of the stack @@ -3034,15 +3072,15 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -152($fp) +lw $t0, -156($fp) # saves the return value move $t0, $v0 -lw $t1, -116($fp) -lw $t2, -112($fp) -# local_Bar_Bar_internal_27 <- local_Bar_Bar_internal_28 + local_Bar_Bar_internal_37 +lw $t1, -120($fp) +lw $t2, -116($fp) +# local_Bar_Bar_internal_28 <- local_Bar_Bar_internal_29 + local_Bar_Bar_internal_38 add $t2, $t1, $t0 lw $t3, -0($fp) -lw $t4, -156($fp) +lw $t4, -160($fp) # Find the actual name in the dispatch table # Gets in a0 the actual direction of the dispatch table lw $t9, 8($t3) @@ -3058,11 +3096,11 @@ addiu $sp, $sp, -4 sw $t3, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory -sw $t0, -152($fp) -sw $t1, -116($fp) -sw $t2, -112($fp) +sw $t0, -156($fp) +sw $t1, -120($fp) +sw $t2, -116($fp) sw $t3, -0($fp) -sw $t4, -156($fp) +sw $t4, -160($fp) # This function will consume the arguments jal $t8 # Pop ra register of return function of the stack @@ -3071,23 +3109,23 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -156($fp) +lw $t0, -160($fp) # saves the return value move $t0, $v0 -lw $t1, -112($fp) -lw $t2, -108($fp) -# local_Bar_Bar_internal_26 <- local_Bar_Bar_internal_27 + local_Bar_Bar_internal_38 +lw $t1, -116($fp) +lw $t2, -112($fp) +# local_Bar_Bar_internal_27 <- local_Bar_Bar_internal_28 + local_Bar_Bar_internal_39 add $t2, $t1, $t0 lw $t3, -0($fp) -# self . b <- SET local_Bar_Bar_internal_26 +# self . b <- SET local_Bar_Bar_internal_27 sw $t2, 28($t3) -lw $t4, -164($fp) -# local_Bar_Bar_internal_40 <- Type of self +lw $t4, -168($fp) +# local_Bar_Bar_internal_41 <- Type of self lw $t4, 0($t3) -lw $t5, -168($fp) -# Saves in local_Bar_Bar_internal_41 data_0 +lw $t5, -172($fp) +# Saves in local_Bar_Bar_internal_42 data_0 la $t5, data_0 -# local_Bar_Bar_internal_40 <- local_Bar_Bar_internal_40 = local_Bar_Bar_internal_41 +# local_Bar_Bar_internal_41 <- local_Bar_Bar_internal_41 = local_Bar_Bar_internal_42 move $t8, $t4 move $t9, $t5 loop_28: @@ -3108,16 +3146,16 @@ bnez $a1, mismatch_28 li $v0, 1 end_28: move $t4, $v0 -# If local_Bar_Bar_internal_40 goto error__347 -sw $t0, -156($fp) -sw $t1, -112($fp) -sw $t2, -108($fp) +# If local_Bar_Bar_internal_41 goto error__357 +sw $t0, -160($fp) +sw $t1, -116($fp) +sw $t2, -112($fp) sw $t3, -0($fp) -sw $t4, -164($fp) -sw $t5, -168($fp) -bnez $t4, error__347 +sw $t4, -168($fp) +sw $t5, -172($fp) +bnez $t4, error__357 lw $t0, -0($fp) -lw $t1, -172($fp) +lw $t1, -176($fp) la $t9, type_Bar lw $v0, 8($t0) loop_29: @@ -3133,26 +3171,26 @@ j end_29 false_29: li $t1, 0 end_29: -# If not local_Bar_Bar_internal_42 goto next__353_0 +# If not local_Bar_Bar_internal_43 goto next__363_0 sw $t0, -0($fp) -sw $t1, -172($fp) -beqz $t1, next__353_0 +sw $t1, -176($fp) +beqz $t1, next__363_0 lw $t0, -0($fp) -lw $t1, -176($fp) -# Moving self to local_Bar_Bar_n_43 +lw $t1, -180($fp) +# Moving self to local_Bar_Bar_n_44 move $t1, $t0 -sw $t1, -176($fp) -lw $t2, -160($fp) -# Moving local_Bar_Bar_n_43 to local_Bar_Bar_internal_39 +sw $t1, -180($fp) +lw $t2, -164($fp) +# Moving local_Bar_Bar_n_44 to local_Bar_Bar_internal_40 move $t2, $t1 -sw $t2, -160($fp) +sw $t2, -164($fp) sw $t0, -0($fp) -sw $t1, -176($fp) -sw $t2, -160($fp) -j end__347 -next__353_0: +sw $t1, -180($fp) +sw $t2, -164($fp) +j end__357 +next__363_0: lw $t0, -0($fp) -lw $t1, -180($fp) +lw $t1, -184($fp) la $t9, type_Razz lw $v0, 8($t0) loop_30: @@ -3168,16 +3206,16 @@ j end_30 false_30: li $t1, 0 end_30: -# If not local_Bar_Bar_internal_44 goto next__361_1 +# If not local_Bar_Bar_internal_45 goto next__371_1 sw $t0, -0($fp) -sw $t1, -180($fp) -beqz $t1, next__361_1 +sw $t1, -184($fp) +beqz $t1, next__371_1 lw $t0, -0($fp) -lw $t1, -184($fp) -# Moving self to local_Bar_Bar_n_45 +lw $t1, -188($fp) +# Moving self to local_Bar_Bar_n_46 move $t1, $t0 -sw $t1, -184($fp) -lw $t2, -188($fp) +sw $t1, -188($fp) +lw $t2, -192($fp) # Syscall to allocate memory of the object entry in heap li $v0, 9 li $a0, 48 @@ -3204,8 +3242,8 @@ sw $t2, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory sw $t0, -0($fp) -sw $t1, -184($fp) -sw $t2, -188($fp) +sw $t1, -188($fp) +sw $t2, -192($fp) # This function will consume the arguments jal function_Bar_Bar # Pop ra register of return function of the stack @@ -3214,37 +3252,37 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -188($fp) +lw $t0, -192($fp) # saves the return value move $t0, $v0 -lw $t1, -160($fp) -# Moving local_Bar_Bar_internal_46 to local_Bar_Bar_internal_39 +lw $t1, -164($fp) +# Moving local_Bar_Bar_internal_47 to local_Bar_Bar_internal_40 move $t1, $t0 -sw $t1, -160($fp) -sw $t0, -188($fp) -sw $t1, -160($fp) -j end__347 -next__361_1: +sw $t1, -164($fp) +sw $t0, -192($fp) +sw $t1, -164($fp) +j end__357 +next__371_1: la $a0, case_error j .raise -error__347: +error__357: la $a0, case_void_error j .raise -end__347: -lw $t0, -160($fp) +end__357: +lw $t0, -164($fp) lw $t1, -0($fp) -# self . e <- SET local_Bar_Bar_internal_39 +# self . e <- SET local_Bar_Bar_internal_40 sw $t0, 32($t1) -lw $t2, -208($fp) -# local_Bar_Bar_a_51 <- GET self . a +lw $t2, -212($fp) +# local_Bar_Bar_a_52 <- GET self . a lw $t2, 24($t1) -lw $t3, -216($fp) -# local_Bar_Bar_internal_53 <- Type of local_Bar_Bar_a_51 +lw $t3, -220($fp) +# local_Bar_Bar_internal_54 <- Type of local_Bar_Bar_a_52 lw $t3, 0($t2) -lw $t4, -220($fp) -# Saves in local_Bar_Bar_internal_54 data_0 +lw $t4, -224($fp) +# Saves in local_Bar_Bar_internal_55 data_0 la $t4, data_0 -# local_Bar_Bar_internal_53 <- local_Bar_Bar_internal_53 = local_Bar_Bar_internal_54 +# local_Bar_Bar_internal_54 <- local_Bar_Bar_internal_54 = local_Bar_Bar_internal_55 move $t8, $t3 move $t9, $t4 loop_31: @@ -3265,17 +3303,17 @@ bnez $a1, mismatch_31 li $v0, 1 end_31: move $t3, $v0 -# If not local_Bar_Bar_internal_53 goto continue__385 -sw $t0, -160($fp) +# If not local_Bar_Bar_internal_54 goto continue__395 +sw $t0, -164($fp) sw $t1, -0($fp) -sw $t2, -208($fp) -sw $t3, -216($fp) -sw $t4, -220($fp) -beqz $t3, continue__385 +sw $t2, -212($fp) +sw $t3, -220($fp) +sw $t4, -224($fp) +beqz $t3, continue__395 la $a0, dispatch_error j .raise -continue__385: -lw $t0, -212($fp) +continue__395: +lw $t0, -216($fp) # Static Dispatch of the method doh sw $fp, ($sp) addiu $sp, $sp, -4 @@ -3283,12 +3321,12 @@ sw $ra, ($sp) addiu $sp, $sp, -4 # Push the arguments to the stack # The rest of the arguments are push into the stack -lw $t1, -208($fp) +lw $t1, -212($fp) sw $t1, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory -sw $t0, -212($fp) -sw $t1, -208($fp) +sw $t0, -216($fp) +sw $t1, -212($fp) # This function will consume the arguments jal function_doh_Bazz # Pop ra register of return function of the stack @@ -3297,20 +3335,20 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -212($fp) +lw $t0, -216($fp) # saves the return value move $t0, $v0 lw $t1, -0($fp) -lw $t2, -224($fp) -# local_Bar_Bar_g_55 <- GET self . g +lw $t2, -228($fp) +# local_Bar_Bar_g_56 <- GET self . g lw $t2, 16($t1) -lw $t3, -232($fp) -# local_Bar_Bar_internal_57 <- Type of local_Bar_Bar_g_55 +lw $t3, -236($fp) +# local_Bar_Bar_internal_58 <- Type of local_Bar_Bar_g_56 lw $t3, 0($t2) -lw $t4, -236($fp) -# Saves in local_Bar_Bar_internal_58 data_0 +lw $t4, -240($fp) +# Saves in local_Bar_Bar_internal_59 data_0 la $t4, data_0 -# local_Bar_Bar_internal_57 <- local_Bar_Bar_internal_57 = local_Bar_Bar_internal_58 +# local_Bar_Bar_internal_58 <- local_Bar_Bar_internal_58 = local_Bar_Bar_internal_59 move $t8, $t3 move $t9, $t4 loop_32: @@ -3331,18 +3369,18 @@ bnez $a1, mismatch_32 li $v0, 1 end_32: move $t3, $v0 -# If not local_Bar_Bar_internal_57 goto continue__399 -sw $t0, -212($fp) +# If not local_Bar_Bar_internal_58 goto continue__409 +sw $t0, -216($fp) sw $t1, -0($fp) -sw $t2, -224($fp) -sw $t3, -232($fp) -sw $t4, -236($fp) -beqz $t3, continue__399 +sw $t2, -228($fp) +sw $t3, -236($fp) +sw $t4, -240($fp) +beqz $t3, continue__409 la $a0, dispatch_error j .raise -continue__399: -lw $t0, -224($fp) -lw $t1, -228($fp) +continue__409: +lw $t0, -228($fp) +lw $t1, -232($fp) # Find the actual name in the dispatch table # Gets in a0 the actual direction of the dispatch table lw $t9, 8($t0) @@ -3358,8 +3396,8 @@ addiu $sp, $sp, -4 sw $t0, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory -sw $t0, -224($fp) -sw $t1, -228($fp) +sw $t0, -228($fp) +sw $t1, -232($fp) # This function will consume the arguments jal $t8 # Pop ra register of return function of the stack @@ -3368,24 +3406,24 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -228($fp) +lw $t0, -232($fp) # saves the return value move $t0, $v0 -lw $t1, -212($fp) -lw $t2, -204($fp) -# local_Bar_Bar_internal_50 <- local_Bar_Bar_internal_52 + local_Bar_Bar_internal_56 +lw $t1, -216($fp) +lw $t2, -208($fp) +# local_Bar_Bar_internal_51 <- local_Bar_Bar_internal_53 + local_Bar_Bar_internal_57 add $t2, $t1, $t0 lw $t3, -0($fp) -lw $t4, -240($fp) -# local_Bar_Bar_e_59 <- GET self . e +lw $t4, -244($fp) +# local_Bar_Bar_e_60 <- GET self . e lw $t4, 32($t3) -lw $t5, -248($fp) -# local_Bar_Bar_internal_61 <- Type of local_Bar_Bar_e_59 +lw $t5, -252($fp) +# local_Bar_Bar_internal_62 <- Type of local_Bar_Bar_e_60 lw $t5, 0($t4) -lw $t6, -252($fp) -# Saves in local_Bar_Bar_internal_62 data_0 +lw $t6, -256($fp) +# Saves in local_Bar_Bar_internal_63 data_0 la $t6, data_0 -# local_Bar_Bar_internal_61 <- local_Bar_Bar_internal_61 = local_Bar_Bar_internal_62 +# local_Bar_Bar_internal_62 <- local_Bar_Bar_internal_62 = local_Bar_Bar_internal_63 move $t8, $t5 move $t9, $t6 loop_33: @@ -3406,20 +3444,20 @@ bnez $a1, mismatch_33 li $v0, 1 end_33: move $t5, $v0 -# If not local_Bar_Bar_internal_61 goto continue__414 -sw $t0, -228($fp) -sw $t1, -212($fp) -sw $t2, -204($fp) +# If not local_Bar_Bar_internal_62 goto continue__424 +sw $t0, -232($fp) +sw $t1, -216($fp) +sw $t2, -208($fp) sw $t3, -0($fp) -sw $t4, -240($fp) -sw $t5, -248($fp) -sw $t6, -252($fp) -beqz $t5, continue__414 +sw $t4, -244($fp) +sw $t5, -252($fp) +sw $t6, -256($fp) +beqz $t5, continue__424 la $a0, dispatch_error j .raise -continue__414: -lw $t0, -240($fp) -lw $t1, -244($fp) +continue__424: +lw $t0, -244($fp) +lw $t1, -248($fp) # Find the actual name in the dispatch table # Gets in a0 the actual direction of the dispatch table lw $t9, 8($t0) @@ -3435,8 +3473,8 @@ addiu $sp, $sp, -4 sw $t0, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory -sw $t0, -240($fp) -sw $t1, -244($fp) +sw $t0, -244($fp) +sw $t1, -248($fp) # This function will consume the arguments jal $t8 # Pop ra register of return function of the stack @@ -3445,15 +3483,15 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -244($fp) +lw $t0, -248($fp) # saves the return value move $t0, $v0 -lw $t1, -204($fp) -lw $t2, -200($fp) -# local_Bar_Bar_internal_49 <- local_Bar_Bar_internal_50 + local_Bar_Bar_internal_60 +lw $t1, -208($fp) +lw $t2, -204($fp) +# local_Bar_Bar_internal_50 <- local_Bar_Bar_internal_51 + local_Bar_Bar_internal_61 add $t2, $t1, $t0 lw $t3, -0($fp) -lw $t4, -256($fp) +lw $t4, -260($fp) # Find the actual name in the dispatch table # Gets in a0 the actual direction of the dispatch table lw $t9, 8($t3) @@ -3469,11 +3507,11 @@ addiu $sp, $sp, -4 sw $t3, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory -sw $t0, -244($fp) -sw $t1, -204($fp) -sw $t2, -200($fp) +sw $t0, -248($fp) +sw $t1, -208($fp) +sw $t2, -204($fp) sw $t3, -0($fp) -sw $t4, -256($fp) +sw $t4, -260($fp) # This function will consume the arguments jal $t8 # Pop ra register of return function of the stack @@ -3482,15 +3520,15 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -256($fp) +lw $t0, -260($fp) # saves the return value move $t0, $v0 -lw $t1, -200($fp) -lw $t2, -196($fp) -# local_Bar_Bar_internal_48 <- local_Bar_Bar_internal_49 + local_Bar_Bar_internal_63 +lw $t1, -204($fp) +lw $t2, -200($fp) +# local_Bar_Bar_internal_49 <- local_Bar_Bar_internal_50 + local_Bar_Bar_internal_64 add $t2, $t1, $t0 lw $t3, -0($fp) -lw $t4, -260($fp) +lw $t4, -264($fp) # Find the actual name in the dispatch table # Gets in a0 the actual direction of the dispatch table lw $t9, 8($t3) @@ -3506,11 +3544,11 @@ addiu $sp, $sp, -4 sw $t3, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory -sw $t0, -256($fp) -sw $t1, -200($fp) -sw $t2, -196($fp) +sw $t0, -260($fp) +sw $t1, -204($fp) +sw $t2, -200($fp) sw $t3, -0($fp) -sw $t4, -260($fp) +sw $t4, -264($fp) # This function will consume the arguments jal $t8 # Pop ra register of return function of the stack @@ -3519,17 +3557,17 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -260($fp) +lw $t0, -264($fp) # saves the return value move $t0, $v0 -lw $t1, -196($fp) -lw $t2, -192($fp) -# local_Bar_Bar_internal_47 <- local_Bar_Bar_internal_48 + local_Bar_Bar_internal_64 +lw $t1, -200($fp) +lw $t2, -196($fp) +# local_Bar_Bar_internal_48 <- local_Bar_Bar_internal_49 + local_Bar_Bar_internal_65 add $t2, $t1, $t0 lw $t3, -0($fp) -# self . f <- SET local_Bar_Bar_internal_47 +# self . f <- SET local_Bar_Bar_internal_48 sw $t2, 36($t3) -lw $t4, -264($fp) +lw $t4, -268($fp) # Find the actual name in the dispatch table # Gets in a0 the actual direction of the dispatch table lw $t9, 8($t3) @@ -3545,11 +3583,11 @@ addiu $sp, $sp, -4 sw $t3, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory -sw $t0, -260($fp) -sw $t1, -196($fp) -sw $t2, -192($fp) +sw $t0, -264($fp) +sw $t1, -200($fp) +sw $t2, -196($fp) sw $t3, -0($fp) -sw $t4, -264($fp) +sw $t4, -268($fp) # This function will consume the arguments jal $t8 # Pop ra register of return function of the stack @@ -3558,13 +3596,13 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -264($fp) +lw $t0, -268($fp) # saves the return value move $t0, $v0 lw $t1, -0($fp) -# self . c <- SET local_Bar_Bar_internal_65 +# self . c <- SET local_Bar_Bar_internal_66 sw $t0, 40($t1) -lw $t2, -268($fp) +lw $t2, -272($fp) # Find the actual name in the dispatch table # Gets in a0 the actual direction of the dispatch table lw $t9, 8($t1) @@ -3580,9 +3618,9 @@ addiu $sp, $sp, -4 sw $t1, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory -sw $t0, -264($fp) +sw $t0, -268($fp) sw $t1, -0($fp) -sw $t2, -268($fp) +sw $t2, -272($fp) # This function will consume the arguments jal $t8 # Pop ra register of return function of the stack @@ -3591,23 +3629,39 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -268($fp) +lw $t0, -272($fp) # saves the return value move $t0, $v0 -lw $t1, -0($fp) -# self . d <- SET local_Bar_Bar_internal_66 -sw $t0, 44($t1) -lw $t2, -272($fp) -# Moving self to local_Bar_Bar_internal_67 -move $t2, $t1 -sw $t2, -272($fp) -move $v0, $t2 +lw $t1, -276($fp) +# Initialize new node +li $a0, 12 +li $v0, 9 +syscall +la $t9, type_Int +sw $t9, 0($v0) +li $t9, 12 +sw $t9, 4($v0) +move $t1, $v0 +# Saving the methods of object +# Adding Type Info addr +la $t8, types +lw $v0, 8($t8) +sw $v0, 8($t1) +lw $t2, -0($fp) +# self . d <- SET local_Bar_Bar_internal_68 +sw $t1, 44($t2) +lw $t3, -280($fp) +# Moving self to local_Bar_Bar_internal_69 +move $t3, $t2 +sw $t3, -280($fp) +move $v0, $t3 # Empty all used registers and saves them to memory -sw $t0, -268($fp) -sw $t1, -0($fp) -sw $t2, -272($fp) +sw $t0, -272($fp) +sw $t1, -276($fp) +sw $t2, -0($fp) +sw $t3, -280($fp) # Removing all locals from stack -addiu $sp, $sp, 276 +addiu $sp, $sp, 284 jr $ra @@ -3655,19 +3709,19 @@ addiu $sp, $sp, -4 addiu $sp, $sp, -4 # Updates stack pointer pushing local_Razz_Razz_internal_18 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Razz_Razz_n_19 to the stack +# Updates stack pointer pushing local_Razz_Razz_internal_19 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Razz_Razz_internal_20 to the stack +# Updates stack pointer pushing local_Razz_Razz_n_20 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Razz_Razz_n_21 to the stack +# Updates stack pointer pushing local_Razz_Razz_internal_21 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Razz_Razz_internal_22 to the stack +# Updates stack pointer pushing local_Razz_Razz_n_22 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Razz_Razz_internal_23 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Razz_Razz_n_24 to the stack +# Updates stack pointer pushing local_Razz_Razz_internal_24 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Razz_Razz_internal_25 to the stack +# Updates stack pointer pushing local_Razz_Razz_n_25 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Razz_Razz_internal_26 to the stack addiu $sp, $sp, -4 @@ -3675,17 +3729,17 @@ addiu $sp, $sp, -4 addiu $sp, $sp, -4 # Updates stack pointer pushing local_Razz_Razz_internal_28 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Razz_Razz_a_29 to the stack +# Updates stack pointer pushing local_Razz_Razz_internal_29 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Razz_Razz_internal_30 to the stack +# Updates stack pointer pushing local_Razz_Razz_a_30 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Razz_Razz_internal_31 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Razz_Razz_internal_32 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Razz_Razz_g_33 to the stack +# Updates stack pointer pushing local_Razz_Razz_internal_33 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Razz_Razz_internal_34 to the stack +# Updates stack pointer pushing local_Razz_Razz_g_34 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Razz_Razz_internal_35 to the stack addiu $sp, $sp, -4 @@ -3703,13 +3757,13 @@ addiu $sp, $sp, -4 addiu $sp, $sp, -4 # Updates stack pointer pushing local_Razz_Razz_internal_42 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Razz_Razz_n_43 to the stack +# Updates stack pointer pushing local_Razz_Razz_internal_43 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Razz_Razz_internal_44 to the stack +# Updates stack pointer pushing local_Razz_Razz_n_44 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Razz_Razz_n_45 to the stack +# Updates stack pointer pushing local_Razz_Razz_internal_45 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Razz_Razz_internal_46 to the stack +# Updates stack pointer pushing local_Razz_Razz_n_46 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Razz_Razz_internal_47 to the stack addiu $sp, $sp, -4 @@ -3719,25 +3773,25 @@ addiu $sp, $sp, -4 addiu $sp, $sp, -4 # Updates stack pointer pushing local_Razz_Razz_internal_50 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Razz_Razz_a_51 to the stack +# Updates stack pointer pushing local_Razz_Razz_internal_51 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Razz_Razz_internal_52 to the stack +# Updates stack pointer pushing local_Razz_Razz_a_52 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Razz_Razz_internal_53 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Razz_Razz_internal_54 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Razz_Razz_g_55 to the stack +# Updates stack pointer pushing local_Razz_Razz_internal_55 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Razz_Razz_internal_56 to the stack +# Updates stack pointer pushing local_Razz_Razz_g_56 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Razz_Razz_internal_57 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Razz_Razz_internal_58 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Razz_Razz_e_59 to the stack +# Updates stack pointer pushing local_Razz_Razz_internal_59 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_Razz_Razz_internal_60 to the stack +# Updates stack pointer pushing local_Razz_Razz_e_60 to the stack addiu $sp, $sp, -4 # Updates stack pointer pushing local_Razz_Razz_internal_61 to the stack addiu $sp, $sp, -4 @@ -3749,6 +3803,8 @@ addiu $sp, $sp, -4 addiu $sp, $sp, -4 # Updates stack pointer pushing local_Razz_Razz_internal_65 to the stack addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Razz_Razz_internal_66 to the stack +addiu $sp, $sp, -4 lw $t0, -0($fp) # self . h <- SET 1 li $t9, 1 @@ -3780,11 +3836,11 @@ bnez $a1, mismatch_34 li $v0, 1 end_34: move $t1, $v0 -# If local_Razz_Razz_internal_1 goto error__445 +# If local_Razz_Razz_internal_1 goto error__461 sw $t0, -0($fp) sw $t1, -8($fp) sw $t2, -12($fp) -bnez $t1, error__445 +bnez $t1, error__461 lw $t0, -0($fp) lw $t1, -16($fp) la $t9, type_Bar @@ -3802,10 +3858,10 @@ j end_35 false_35: li $t1, 0 end_35: -# If not local_Razz_Razz_internal_3 goto next__451_0 +# If not local_Razz_Razz_internal_3 goto next__467_0 sw $t0, -0($fp) sw $t1, -16($fp) -beqz $t1, next__451_0 +beqz $t1, next__467_0 lw $t0, -0($fp) lw $t1, -20($fp) # Moving self to local_Razz_Razz_n_4 @@ -3818,8 +3874,8 @@ sw $t2, -4($fp) sw $t0, -0($fp) sw $t1, -20($fp) sw $t2, -4($fp) -j end__445 -next__451_0: +j end__461 +next__467_0: lw $t0, -0($fp) lw $t1, -24($fp) la $t9, type_Razz @@ -3837,10 +3893,10 @@ j end_36 false_36: li $t1, 0 end_36: -# If not local_Razz_Razz_internal_5 goto next__459_1 +# If not local_Razz_Razz_internal_5 goto next__475_1 sw $t0, -0($fp) sw $t1, -24($fp) -beqz $t1, next__459_1 +beqz $t1, next__475_1 lw $t0, -0($fp) lw $t1, -28($fp) # Moving self to local_Razz_Razz_n_6 @@ -3892,8 +3948,8 @@ move $t1, $t0 sw $t1, -4($fp) sw $t0, -32($fp) sw $t1, -4($fp) -j end__445 -next__459_1: +j end__461 +next__475_1: lw $t0, -0($fp) lw $t1, -36($fp) la $t9, type_Foo @@ -3911,10 +3967,10 @@ j end_37 false_37: li $t1, 0 end_37: -# If not local_Razz_Razz_internal_8 goto next__470_2 +# If not local_Razz_Razz_internal_8 goto next__486_2 sw $t0, -0($fp) sw $t1, -36($fp) -beqz $t1, next__470_2 +beqz $t1, next__486_2 lw $t0, -0($fp) lw $t1, -40($fp) # Moving self to local_Razz_Razz_n_9 @@ -3966,8 +4022,8 @@ move $t1, $t0 sw $t1, -4($fp) sw $t0, -44($fp) sw $t1, -4($fp) -j end__445 -next__470_2: +j end__461 +next__486_2: lw $t0, -0($fp) lw $t1, -48($fp) la $t9, type_Bazz @@ -3985,10 +4041,10 @@ j end_38 false_38: li $t1, 0 end_38: -# If not local_Razz_Razz_internal_11 goto next__481_3 +# If not local_Razz_Razz_internal_11 goto next__497_3 sw $t0, -0($fp) sw $t1, -48($fp) -beqz $t1, next__481_3 +beqz $t1, next__497_3 lw $t0, -0($fp) lw $t1, -52($fp) # Moving self to local_Razz_Razz_n_12 @@ -4040,14 +4096,14 @@ move $t1, $t0 sw $t1, -4($fp) sw $t0, -56($fp) sw $t1, -4($fp) -j end__445 -next__481_3: +j end__461 +next__497_3: la $a0, case_error j .raise -error__445: +error__461: la $a0, case_void_error j .raise -end__445: +end__461: lw $t0, -4($fp) lw $t1, -0($fp) # self . g <- SET local_Razz_Razz_internal_0 @@ -4082,18 +4138,33 @@ lw $fp, ($sp) lw $t0, -60($fp) # saves the return value move $t0, $v0 -lw $t1, -0($fp) -# self . i <- SET local_Razz_Razz_internal_14 -sw $t0, 20($t1) -lw $t2, -68($fp) -# local_Razz_Razz_internal_16 <- Type of self -lw $t2, 0($t1) +lw $t1, -64($fp) +# Initialize new node +li $a0, 12 +li $v0, 9 +syscall +la $t9, type_Int +sw $t9, 0($v0) +li $t9, 12 +sw $t9, 4($v0) +move $t1, $v0 +# Saving the methods of object +# Adding Type Info addr +la $t8, types +lw $v0, 8($t8) +sw $v0, 8($t1) +lw $t2, -0($fp) +# self . i <- SET local_Razz_Razz_internal_15 +sw $t1, 20($t2) lw $t3, -72($fp) -# Saves in local_Razz_Razz_internal_17 data_0 -la $t3, data_0 -# local_Razz_Razz_internal_16 <- local_Razz_Razz_internal_16 = local_Razz_Razz_internal_17 -move $t8, $t2 -move $t9, $t3 +# local_Razz_Razz_internal_17 <- Type of self +lw $t3, 0($t2) +lw $t4, -76($fp) +# Saves in local_Razz_Razz_internal_18 data_0 +la $t4, data_0 +# local_Razz_Razz_internal_17 <- local_Razz_Razz_internal_17 = local_Razz_Razz_internal_18 +move $t8, $t3 +move $t9, $t4 loop_39: lb $a0, ($t8) lb $a1, ($t9) @@ -4111,15 +4182,16 @@ check_39: bnez $a1, mismatch_39 li $v0, 1 end_39: -move $t2, $v0 -# If local_Razz_Razz_internal_16 goto error__501 +move $t3, $v0 +# If local_Razz_Razz_internal_17 goto error__520 sw $t0, -60($fp) -sw $t1, -0($fp) -sw $t2, -68($fp) +sw $t1, -64($fp) +sw $t2, -0($fp) sw $t3, -72($fp) -bnez $t2, error__501 +sw $t4, -76($fp) +bnez $t3, error__520 lw $t0, -0($fp) -lw $t1, -76($fp) +lw $t1, -80($fp) la $t9, type_Bar lw $v0, 8($t0) loop_40: @@ -4135,26 +4207,26 @@ j end_40 false_40: li $t1, 0 end_40: -# If not local_Razz_Razz_internal_18 goto next__507_0 +# If not local_Razz_Razz_internal_19 goto next__526_0 sw $t0, -0($fp) -sw $t1, -76($fp) -beqz $t1, next__507_0 +sw $t1, -80($fp) +beqz $t1, next__526_0 lw $t0, -0($fp) -lw $t1, -80($fp) -# Moving self to local_Razz_Razz_n_19 +lw $t1, -84($fp) +# Moving self to local_Razz_Razz_n_20 move $t1, $t0 -sw $t1, -80($fp) -lw $t2, -64($fp) -# Moving local_Razz_Razz_n_19 to local_Razz_Razz_internal_15 +sw $t1, -84($fp) +lw $t2, -68($fp) +# Moving local_Razz_Razz_n_20 to local_Razz_Razz_internal_16 move $t2, $t1 -sw $t2, -64($fp) +sw $t2, -68($fp) sw $t0, -0($fp) -sw $t1, -80($fp) -sw $t2, -64($fp) -j end__501 -next__507_0: +sw $t1, -84($fp) +sw $t2, -68($fp) +j end__520 +next__526_0: lw $t0, -0($fp) -lw $t1, -84($fp) +lw $t1, -88($fp) la $t9, type_Razz lw $v0, 8($t0) loop_41: @@ -4170,16 +4242,16 @@ j end_41 false_41: li $t1, 0 end_41: -# If not local_Razz_Razz_internal_20 goto next__515_1 +# If not local_Razz_Razz_internal_21 goto next__534_1 sw $t0, -0($fp) -sw $t1, -84($fp) -beqz $t1, next__515_1 +sw $t1, -88($fp) +beqz $t1, next__534_1 lw $t0, -0($fp) -lw $t1, -88($fp) -# Moving self to local_Razz_Razz_n_21 +lw $t1, -92($fp) +# Moving self to local_Razz_Razz_n_22 move $t1, $t0 -sw $t1, -88($fp) -lw $t2, -92($fp) +sw $t1, -92($fp) +lw $t2, -96($fp) # Syscall to allocate memory of the object entry in heap li $v0, 9 li $a0, 48 @@ -4206,8 +4278,8 @@ sw $t2, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory sw $t0, -0($fp) -sw $t1, -88($fp) -sw $t2, -92($fp) +sw $t1, -92($fp) +sw $t2, -96($fp) # This function will consume the arguments jal function_Bar_Bar # Pop ra register of return function of the stack @@ -4216,19 +4288,19 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -92($fp) +lw $t0, -96($fp) # saves the return value move $t0, $v0 -lw $t1, -64($fp) -# Moving local_Razz_Razz_internal_22 to local_Razz_Razz_internal_15 +lw $t1, -68($fp) +# Moving local_Razz_Razz_internal_23 to local_Razz_Razz_internal_16 move $t1, $t0 -sw $t1, -64($fp) -sw $t0, -92($fp) -sw $t1, -64($fp) -j end__501 -next__515_1: +sw $t1, -68($fp) +sw $t0, -96($fp) +sw $t1, -68($fp) +j end__520 +next__534_1: lw $t0, -0($fp) -lw $t1, -96($fp) +lw $t1, -100($fp) la $t9, type_Foo lw $v0, 8($t0) loop_42: @@ -4244,16 +4316,16 @@ j end_42 false_42: li $t1, 0 end_42: -# If not local_Razz_Razz_internal_23 goto next__526_2 +# If not local_Razz_Razz_internal_24 goto next__545_2 sw $t0, -0($fp) -sw $t1, -96($fp) -beqz $t1, next__526_2 +sw $t1, -100($fp) +beqz $t1, next__545_2 lw $t0, -0($fp) -lw $t1, -100($fp) -# Moving self to local_Razz_Razz_n_24 +lw $t1, -104($fp) +# Moving self to local_Razz_Razz_n_25 move $t1, $t0 -sw $t1, -100($fp) -lw $t2, -104($fp) +sw $t1, -104($fp) +lw $t2, -108($fp) # Syscall to allocate memory of the object entry in heap li $v0, 9 li $a0, 40 @@ -4280,8 +4352,8 @@ sw $t2, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory sw $t0, -0($fp) -sw $t1, -100($fp) -sw $t2, -104($fp) +sw $t1, -104($fp) +sw $t2, -108($fp) # This function will consume the arguments jal function_Razz_Razz # Pop ra register of return function of the stack @@ -4290,37 +4362,37 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -104($fp) +lw $t0, -108($fp) # saves the return value move $t0, $v0 -lw $t1, -64($fp) -# Moving local_Razz_Razz_internal_25 to local_Razz_Razz_internal_15 +lw $t1, -68($fp) +# Moving local_Razz_Razz_internal_26 to local_Razz_Razz_internal_16 move $t1, $t0 -sw $t1, -64($fp) -sw $t0, -104($fp) -sw $t1, -64($fp) -j end__501 -next__526_2: +sw $t1, -68($fp) +sw $t0, -108($fp) +sw $t1, -68($fp) +j end__520 +next__545_2: la $a0, case_error j .raise -error__501: +error__520: la $a0, case_void_error j .raise -end__501: -lw $t0, -64($fp) +end__520: +lw $t0, -68($fp) lw $t1, -0($fp) -# self . a <- SET local_Razz_Razz_internal_15 +# self . a <- SET local_Razz_Razz_internal_16 sw $t0, 24($t1) -lw $t2, -120($fp) -# local_Razz_Razz_a_29 <- GET self . a +lw $t2, -124($fp) +# local_Razz_Razz_a_30 <- GET self . a lw $t2, 24($t1) -lw $t3, -128($fp) -# local_Razz_Razz_internal_31 <- Type of local_Razz_Razz_a_29 +lw $t3, -132($fp) +# local_Razz_Razz_internal_32 <- Type of local_Razz_Razz_a_30 lw $t3, 0($t2) -lw $t4, -132($fp) -# Saves in local_Razz_Razz_internal_32 data_0 +lw $t4, -136($fp) +# Saves in local_Razz_Razz_internal_33 data_0 la $t4, data_0 -# local_Razz_Razz_internal_31 <- local_Razz_Razz_internal_31 = local_Razz_Razz_internal_32 +# local_Razz_Razz_internal_32 <- local_Razz_Razz_internal_32 = local_Razz_Razz_internal_33 move $t8, $t3 move $t9, $t4 loop_43: @@ -4341,18 +4413,18 @@ bnez $a1, mismatch_43 li $v0, 1 end_43: move $t3, $v0 -# If not local_Razz_Razz_internal_31 goto continue__549 -sw $t0, -64($fp) +# If not local_Razz_Razz_internal_32 goto continue__568 +sw $t0, -68($fp) sw $t1, -0($fp) -sw $t2, -120($fp) -sw $t3, -128($fp) -sw $t4, -132($fp) -beqz $t3, continue__549 +sw $t2, -124($fp) +sw $t3, -132($fp) +sw $t4, -136($fp) +beqz $t3, continue__568 la $a0, dispatch_error j .raise -continue__549: -lw $t0, -120($fp) -lw $t1, -124($fp) +continue__568: +lw $t0, -124($fp) +lw $t1, -128($fp) # Find the actual name in the dispatch table # Gets in a0 the actual direction of the dispatch table lw $t9, 8($t0) @@ -4368,8 +4440,8 @@ addiu $sp, $sp, -4 sw $t0, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory -sw $t0, -120($fp) -sw $t1, -124($fp) +sw $t0, -124($fp) +sw $t1, -128($fp) # This function will consume the arguments jal $t8 # Pop ra register of return function of the stack @@ -4378,20 +4450,20 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -124($fp) +lw $t0, -128($fp) # saves the return value move $t0, $v0 lw $t1, -0($fp) -lw $t2, -136($fp) -# local_Razz_Razz_g_33 <- GET self . g +lw $t2, -140($fp) +# local_Razz_Razz_g_34 <- GET self . g lw $t2, 16($t1) -lw $t3, -144($fp) -# local_Razz_Razz_internal_35 <- Type of local_Razz_Razz_g_33 +lw $t3, -148($fp) +# local_Razz_Razz_internal_36 <- Type of local_Razz_Razz_g_34 lw $t3, 0($t2) -lw $t4, -148($fp) -# Saves in local_Razz_Razz_internal_36 data_0 +lw $t4, -152($fp) +# Saves in local_Razz_Razz_internal_37 data_0 la $t4, data_0 -# local_Razz_Razz_internal_35 <- local_Razz_Razz_internal_35 = local_Razz_Razz_internal_36 +# local_Razz_Razz_internal_36 <- local_Razz_Razz_internal_36 = local_Razz_Razz_internal_37 move $t8, $t3 move $t9, $t4 loop_44: @@ -4412,18 +4484,18 @@ bnez $a1, mismatch_44 li $v0, 1 end_44: move $t3, $v0 -# If not local_Razz_Razz_internal_35 goto continue__563 -sw $t0, -124($fp) +# If not local_Razz_Razz_internal_36 goto continue__582 +sw $t0, -128($fp) sw $t1, -0($fp) -sw $t2, -136($fp) -sw $t3, -144($fp) -sw $t4, -148($fp) -beqz $t3, continue__563 +sw $t2, -140($fp) +sw $t3, -148($fp) +sw $t4, -152($fp) +beqz $t3, continue__582 la $a0, dispatch_error j .raise -continue__563: -lw $t0, -136($fp) -lw $t1, -140($fp) +continue__582: +lw $t0, -140($fp) +lw $t1, -144($fp) # Find the actual name in the dispatch table # Gets in a0 the actual direction of the dispatch table lw $t9, 8($t0) @@ -4439,8 +4511,8 @@ addiu $sp, $sp, -4 sw $t0, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory -sw $t0, -136($fp) -sw $t1, -140($fp) +sw $t0, -140($fp) +sw $t1, -144($fp) # This function will consume the arguments jal $t8 # Pop ra register of return function of the stack @@ -4449,15 +4521,15 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -140($fp) +lw $t0, -144($fp) # saves the return value move $t0, $v0 -lw $t1, -124($fp) -lw $t2, -116($fp) -# local_Razz_Razz_internal_28 <- local_Razz_Razz_internal_30 + local_Razz_Razz_internal_34 +lw $t1, -128($fp) +lw $t2, -120($fp) +# local_Razz_Razz_internal_29 <- local_Razz_Razz_internal_31 + local_Razz_Razz_internal_35 add $t2, $t1, $t0 lw $t3, -0($fp) -lw $t4, -152($fp) +lw $t4, -156($fp) # Find the actual name in the dispatch table # Gets in a0 the actual direction of the dispatch table lw $t9, 8($t3) @@ -4473,11 +4545,11 @@ addiu $sp, $sp, -4 sw $t3, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory -sw $t0, -140($fp) -sw $t1, -124($fp) -sw $t2, -116($fp) +sw $t0, -144($fp) +sw $t1, -128($fp) +sw $t2, -120($fp) sw $t3, -0($fp) -sw $t4, -152($fp) +sw $t4, -156($fp) # This function will consume the arguments jal $t8 # Pop ra register of return function of the stack @@ -4486,15 +4558,15 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -152($fp) +lw $t0, -156($fp) # saves the return value move $t0, $v0 -lw $t1, -116($fp) -lw $t2, -112($fp) -# local_Razz_Razz_internal_27 <- local_Razz_Razz_internal_28 + local_Razz_Razz_internal_37 +lw $t1, -120($fp) +lw $t2, -116($fp) +# local_Razz_Razz_internal_28 <- local_Razz_Razz_internal_29 + local_Razz_Razz_internal_38 add $t2, $t1, $t0 lw $t3, -0($fp) -lw $t4, -156($fp) +lw $t4, -160($fp) # Find the actual name in the dispatch table # Gets in a0 the actual direction of the dispatch table lw $t9, 8($t3) @@ -4510,11 +4582,11 @@ addiu $sp, $sp, -4 sw $t3, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory -sw $t0, -152($fp) -sw $t1, -116($fp) -sw $t2, -112($fp) +sw $t0, -156($fp) +sw $t1, -120($fp) +sw $t2, -116($fp) sw $t3, -0($fp) -sw $t4, -156($fp) +sw $t4, -160($fp) # This function will consume the arguments jal $t8 # Pop ra register of return function of the stack @@ -4523,23 +4595,23 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -156($fp) +lw $t0, -160($fp) # saves the return value move $t0, $v0 -lw $t1, -112($fp) -lw $t2, -108($fp) -# local_Razz_Razz_internal_26 <- local_Razz_Razz_internal_27 + local_Razz_Razz_internal_38 +lw $t1, -116($fp) +lw $t2, -112($fp) +# local_Razz_Razz_internal_27 <- local_Razz_Razz_internal_28 + local_Razz_Razz_internal_39 add $t2, $t1, $t0 lw $t3, -0($fp) -# self . b <- SET local_Razz_Razz_internal_26 +# self . b <- SET local_Razz_Razz_internal_27 sw $t2, 28($t3) -lw $t4, -164($fp) -# local_Razz_Razz_internal_40 <- Type of self +lw $t4, -168($fp) +# local_Razz_Razz_internal_41 <- Type of self lw $t4, 0($t3) -lw $t5, -168($fp) -# Saves in local_Razz_Razz_internal_41 data_0 +lw $t5, -172($fp) +# Saves in local_Razz_Razz_internal_42 data_0 la $t5, data_0 -# local_Razz_Razz_internal_40 <- local_Razz_Razz_internal_40 = local_Razz_Razz_internal_41 +# local_Razz_Razz_internal_41 <- local_Razz_Razz_internal_41 = local_Razz_Razz_internal_42 move $t8, $t4 move $t9, $t5 loop_45: @@ -4560,16 +4632,16 @@ bnez $a1, mismatch_45 li $v0, 1 end_45: move $t4, $v0 -# If local_Razz_Razz_internal_40 goto error__582 -sw $t0, -156($fp) -sw $t1, -112($fp) -sw $t2, -108($fp) +# If local_Razz_Razz_internal_41 goto error__603 +sw $t0, -160($fp) +sw $t1, -116($fp) +sw $t2, -112($fp) sw $t3, -0($fp) -sw $t4, -164($fp) -sw $t5, -168($fp) -bnez $t4, error__582 +sw $t4, -168($fp) +sw $t5, -172($fp) +bnez $t4, error__603 lw $t0, -0($fp) -lw $t1, -172($fp) +lw $t1, -176($fp) la $t9, type_Bar lw $v0, 8($t0) loop_46: @@ -4585,26 +4657,26 @@ j end_46 false_46: li $t1, 0 end_46: -# If not local_Razz_Razz_internal_42 goto next__588_0 +# If not local_Razz_Razz_internal_43 goto next__609_0 sw $t0, -0($fp) -sw $t1, -172($fp) -beqz $t1, next__588_0 +sw $t1, -176($fp) +beqz $t1, next__609_0 lw $t0, -0($fp) -lw $t1, -176($fp) -# Moving self to local_Razz_Razz_n_43 +lw $t1, -180($fp) +# Moving self to local_Razz_Razz_n_44 move $t1, $t0 -sw $t1, -176($fp) -lw $t2, -160($fp) -# Moving local_Razz_Razz_n_43 to local_Razz_Razz_internal_39 +sw $t1, -180($fp) +lw $t2, -164($fp) +# Moving local_Razz_Razz_n_44 to local_Razz_Razz_internal_40 move $t2, $t1 -sw $t2, -160($fp) +sw $t2, -164($fp) sw $t0, -0($fp) -sw $t1, -176($fp) -sw $t2, -160($fp) -j end__582 -next__588_0: +sw $t1, -180($fp) +sw $t2, -164($fp) +j end__603 +next__609_0: lw $t0, -0($fp) -lw $t1, -180($fp) +lw $t1, -184($fp) la $t9, type_Razz lw $v0, 8($t0) loop_47: @@ -4620,16 +4692,16 @@ j end_47 false_47: li $t1, 0 end_47: -# If not local_Razz_Razz_internal_44 goto next__596_1 +# If not local_Razz_Razz_internal_45 goto next__617_1 sw $t0, -0($fp) -sw $t1, -180($fp) -beqz $t1, next__596_1 +sw $t1, -184($fp) +beqz $t1, next__617_1 lw $t0, -0($fp) -lw $t1, -184($fp) -# Moving self to local_Razz_Razz_n_45 +lw $t1, -188($fp) +# Moving self to local_Razz_Razz_n_46 move $t1, $t0 -sw $t1, -184($fp) -lw $t2, -188($fp) +sw $t1, -188($fp) +lw $t2, -192($fp) # Syscall to allocate memory of the object entry in heap li $v0, 9 li $a0, 48 @@ -4656,8 +4728,8 @@ sw $t2, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory sw $t0, -0($fp) -sw $t1, -184($fp) -sw $t2, -188($fp) +sw $t1, -188($fp) +sw $t2, -192($fp) # This function will consume the arguments jal function_Bar_Bar # Pop ra register of return function of the stack @@ -4666,37 +4738,37 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -188($fp) +lw $t0, -192($fp) # saves the return value move $t0, $v0 -lw $t1, -160($fp) -# Moving local_Razz_Razz_internal_46 to local_Razz_Razz_internal_39 +lw $t1, -164($fp) +# Moving local_Razz_Razz_internal_47 to local_Razz_Razz_internal_40 move $t1, $t0 -sw $t1, -160($fp) -sw $t0, -188($fp) -sw $t1, -160($fp) -j end__582 -next__596_1: +sw $t1, -164($fp) +sw $t0, -192($fp) +sw $t1, -164($fp) +j end__603 +next__617_1: la $a0, case_error j .raise -error__582: +error__603: la $a0, case_void_error j .raise -end__582: -lw $t0, -160($fp) +end__603: +lw $t0, -164($fp) lw $t1, -0($fp) -# self . e <- SET local_Razz_Razz_internal_39 +# self . e <- SET local_Razz_Razz_internal_40 sw $t0, 32($t1) -lw $t2, -208($fp) -# local_Razz_Razz_a_51 <- GET self . a +lw $t2, -212($fp) +# local_Razz_Razz_a_52 <- GET self . a lw $t2, 24($t1) -lw $t3, -216($fp) -# local_Razz_Razz_internal_53 <- Type of local_Razz_Razz_a_51 +lw $t3, -220($fp) +# local_Razz_Razz_internal_54 <- Type of local_Razz_Razz_a_52 lw $t3, 0($t2) -lw $t4, -220($fp) -# Saves in local_Razz_Razz_internal_54 data_0 +lw $t4, -224($fp) +# Saves in local_Razz_Razz_internal_55 data_0 la $t4, data_0 -# local_Razz_Razz_internal_53 <- local_Razz_Razz_internal_53 = local_Razz_Razz_internal_54 +# local_Razz_Razz_internal_54 <- local_Razz_Razz_internal_54 = local_Razz_Razz_internal_55 move $t8, $t3 move $t9, $t4 loop_48: @@ -4717,17 +4789,17 @@ bnez $a1, mismatch_48 li $v0, 1 end_48: move $t3, $v0 -# If not local_Razz_Razz_internal_53 goto continue__620 -sw $t0, -160($fp) +# If not local_Razz_Razz_internal_54 goto continue__641 +sw $t0, -164($fp) sw $t1, -0($fp) -sw $t2, -208($fp) -sw $t3, -216($fp) -sw $t4, -220($fp) -beqz $t3, continue__620 +sw $t2, -212($fp) +sw $t3, -220($fp) +sw $t4, -224($fp) +beqz $t3, continue__641 la $a0, dispatch_error j .raise -continue__620: -lw $t0, -212($fp) +continue__641: +lw $t0, -216($fp) # Static Dispatch of the method doh sw $fp, ($sp) addiu $sp, $sp, -4 @@ -4735,12 +4807,12 @@ sw $ra, ($sp) addiu $sp, $sp, -4 # Push the arguments to the stack # The rest of the arguments are push into the stack -lw $t1, -208($fp) +lw $t1, -212($fp) sw $t1, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory -sw $t0, -212($fp) -sw $t1, -208($fp) +sw $t0, -216($fp) +sw $t1, -212($fp) # This function will consume the arguments jal function_doh_Bazz # Pop ra register of return function of the stack @@ -4749,20 +4821,20 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -212($fp) +lw $t0, -216($fp) # saves the return value move $t0, $v0 lw $t1, -0($fp) -lw $t2, -224($fp) -# local_Razz_Razz_g_55 <- GET self . g +lw $t2, -228($fp) +# local_Razz_Razz_g_56 <- GET self . g lw $t2, 16($t1) -lw $t3, -232($fp) -# local_Razz_Razz_internal_57 <- Type of local_Razz_Razz_g_55 +lw $t3, -236($fp) +# local_Razz_Razz_internal_58 <- Type of local_Razz_Razz_g_56 lw $t3, 0($t2) -lw $t4, -236($fp) -# Saves in local_Razz_Razz_internal_58 data_0 +lw $t4, -240($fp) +# Saves in local_Razz_Razz_internal_59 data_0 la $t4, data_0 -# local_Razz_Razz_internal_57 <- local_Razz_Razz_internal_57 = local_Razz_Razz_internal_58 +# local_Razz_Razz_internal_58 <- local_Razz_Razz_internal_58 = local_Razz_Razz_internal_59 move $t8, $t3 move $t9, $t4 loop_49: @@ -4783,18 +4855,18 @@ bnez $a1, mismatch_49 li $v0, 1 end_49: move $t3, $v0 -# If not local_Razz_Razz_internal_57 goto continue__634 -sw $t0, -212($fp) +# If not local_Razz_Razz_internal_58 goto continue__655 +sw $t0, -216($fp) sw $t1, -0($fp) -sw $t2, -224($fp) -sw $t3, -232($fp) -sw $t4, -236($fp) -beqz $t3, continue__634 +sw $t2, -228($fp) +sw $t3, -236($fp) +sw $t4, -240($fp) +beqz $t3, continue__655 la $a0, dispatch_error j .raise -continue__634: -lw $t0, -224($fp) -lw $t1, -228($fp) +continue__655: +lw $t0, -228($fp) +lw $t1, -232($fp) # Find the actual name in the dispatch table # Gets in a0 the actual direction of the dispatch table lw $t9, 8($t0) @@ -4810,8 +4882,8 @@ addiu $sp, $sp, -4 sw $t0, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory -sw $t0, -224($fp) -sw $t1, -228($fp) +sw $t0, -228($fp) +sw $t1, -232($fp) # This function will consume the arguments jal $t8 # Pop ra register of return function of the stack @@ -4820,24 +4892,24 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -228($fp) +lw $t0, -232($fp) # saves the return value move $t0, $v0 -lw $t1, -212($fp) -lw $t2, -204($fp) -# local_Razz_Razz_internal_50 <- local_Razz_Razz_internal_52 + local_Razz_Razz_internal_56 +lw $t1, -216($fp) +lw $t2, -208($fp) +# local_Razz_Razz_internal_51 <- local_Razz_Razz_internal_53 + local_Razz_Razz_internal_57 add $t2, $t1, $t0 lw $t3, -0($fp) -lw $t4, -240($fp) -# local_Razz_Razz_e_59 <- GET self . e +lw $t4, -244($fp) +# local_Razz_Razz_e_60 <- GET self . e lw $t4, 32($t3) -lw $t5, -248($fp) -# local_Razz_Razz_internal_61 <- Type of local_Razz_Razz_e_59 +lw $t5, -252($fp) +# local_Razz_Razz_internal_62 <- Type of local_Razz_Razz_e_60 lw $t5, 0($t4) -lw $t6, -252($fp) -# Saves in local_Razz_Razz_internal_62 data_0 +lw $t6, -256($fp) +# Saves in local_Razz_Razz_internal_63 data_0 la $t6, data_0 -# local_Razz_Razz_internal_61 <- local_Razz_Razz_internal_61 = local_Razz_Razz_internal_62 +# local_Razz_Razz_internal_62 <- local_Razz_Razz_internal_62 = local_Razz_Razz_internal_63 move $t8, $t5 move $t9, $t6 loop_50: @@ -4858,20 +4930,20 @@ bnez $a1, mismatch_50 li $v0, 1 end_50: move $t5, $v0 -# If not local_Razz_Razz_internal_61 goto continue__649 -sw $t0, -228($fp) -sw $t1, -212($fp) -sw $t2, -204($fp) +# If not local_Razz_Razz_internal_62 goto continue__670 +sw $t0, -232($fp) +sw $t1, -216($fp) +sw $t2, -208($fp) sw $t3, -0($fp) -sw $t4, -240($fp) -sw $t5, -248($fp) -sw $t6, -252($fp) -beqz $t5, continue__649 +sw $t4, -244($fp) +sw $t5, -252($fp) +sw $t6, -256($fp) +beqz $t5, continue__670 la $a0, dispatch_error j .raise -continue__649: -lw $t0, -240($fp) -lw $t1, -244($fp) +continue__670: +lw $t0, -244($fp) +lw $t1, -248($fp) # Find the actual name in the dispatch table # Gets in a0 the actual direction of the dispatch table lw $t9, 8($t0) @@ -4887,8 +4959,8 @@ addiu $sp, $sp, -4 sw $t0, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory -sw $t0, -240($fp) -sw $t1, -244($fp) +sw $t0, -244($fp) +sw $t1, -248($fp) # This function will consume the arguments jal $t8 # Pop ra register of return function of the stack @@ -4897,15 +4969,15 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -244($fp) +lw $t0, -248($fp) # saves the return value move $t0, $v0 -lw $t1, -204($fp) -lw $t2, -200($fp) -# local_Razz_Razz_internal_49 <- local_Razz_Razz_internal_50 + local_Razz_Razz_internal_60 +lw $t1, -208($fp) +lw $t2, -204($fp) +# local_Razz_Razz_internal_50 <- local_Razz_Razz_internal_51 + local_Razz_Razz_internal_61 add $t2, $t1, $t0 lw $t3, -0($fp) -lw $t4, -256($fp) +lw $t4, -260($fp) # Find the actual name in the dispatch table # Gets in a0 the actual direction of the dispatch table lw $t9, 8($t3) @@ -4921,11 +4993,11 @@ addiu $sp, $sp, -4 sw $t3, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory -sw $t0, -244($fp) -sw $t1, -204($fp) -sw $t2, -200($fp) +sw $t0, -248($fp) +sw $t1, -208($fp) +sw $t2, -204($fp) sw $t3, -0($fp) -sw $t4, -256($fp) +sw $t4, -260($fp) # This function will consume the arguments jal $t8 # Pop ra register of return function of the stack @@ -4934,15 +5006,15 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -256($fp) +lw $t0, -260($fp) # saves the return value move $t0, $v0 -lw $t1, -200($fp) -lw $t2, -196($fp) -# local_Razz_Razz_internal_48 <- local_Razz_Razz_internal_49 + local_Razz_Razz_internal_63 +lw $t1, -204($fp) +lw $t2, -200($fp) +# local_Razz_Razz_internal_49 <- local_Razz_Razz_internal_50 + local_Razz_Razz_internal_64 add $t2, $t1, $t0 lw $t3, -0($fp) -lw $t4, -260($fp) +lw $t4, -264($fp) # Find the actual name in the dispatch table # Gets in a0 the actual direction of the dispatch table lw $t9, 8($t3) @@ -4958,11 +5030,11 @@ addiu $sp, $sp, -4 sw $t3, ($sp) addiu $sp, $sp, -4 # Empty all used registers and saves them to memory -sw $t0, -256($fp) -sw $t1, -200($fp) -sw $t2, -196($fp) +sw $t0, -260($fp) +sw $t1, -204($fp) +sw $t2, -200($fp) sw $t3, -0($fp) -sw $t4, -260($fp) +sw $t4, -264($fp) # This function will consume the arguments jal $t8 # Pop ra register of return function of the stack @@ -4971,29 +5043,29 @@ lw $ra, ($sp) # Pop fp register from the stack addiu $sp, $sp, 4 lw $fp, ($sp) -lw $t0, -260($fp) +lw $t0, -264($fp) # saves the return value move $t0, $v0 -lw $t1, -196($fp) -lw $t2, -192($fp) -# local_Razz_Razz_internal_47 <- local_Razz_Razz_internal_48 + local_Razz_Razz_internal_64 +lw $t1, -200($fp) +lw $t2, -196($fp) +# local_Razz_Razz_internal_48 <- local_Razz_Razz_internal_49 + local_Razz_Razz_internal_65 add $t2, $t1, $t0 lw $t3, -0($fp) -# self . f <- SET local_Razz_Razz_internal_47 +# self . f <- SET local_Razz_Razz_internal_48 sw $t2, 36($t3) -lw $t4, -264($fp) -# Moving self to local_Razz_Razz_internal_65 +lw $t4, -268($fp) +# Moving self to local_Razz_Razz_internal_66 move $t4, $t3 -sw $t4, -264($fp) +sw $t4, -268($fp) move $v0, $t4 # Empty all used registers and saves them to memory -sw $t0, -260($fp) -sw $t1, -196($fp) -sw $t2, -192($fp) +sw $t0, -264($fp) +sw $t1, -200($fp) +sw $t2, -196($fp) sw $t3, -0($fp) -sw $t4, -264($fp) +sw $t4, -268($fp) # Removing all locals from stack -addiu $sp, $sp, 268 +addiu $sp, $sp, 272 jr $ra @@ -5035,6 +5107,8 @@ addiu $sp, $sp, -4 addiu $sp, $sp, -4 # Updates stack pointer pushing local_Bazz_Bazz_internal_15 to the stack addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Bazz_Bazz_internal_16 to the stack +addiu $sp, $sp, -4 lw $t0, -0($fp) # self . h <- SET 1 li $t9, 1 @@ -5066,11 +5140,11 @@ bnez $a1, mismatch_51 li $v0, 1 end_51: move $t1, $v0 -# If local_Bazz_Bazz_internal_1 goto error__674 +# If local_Bazz_Bazz_internal_1 goto error__697 sw $t0, -0($fp) sw $t1, -8($fp) sw $t2, -12($fp) -bnez $t1, error__674 +bnez $t1, error__697 lw $t0, -0($fp) lw $t1, -16($fp) la $t9, type_Bar @@ -5088,10 +5162,10 @@ j end_52 false_52: li $t1, 0 end_52: -# If not local_Bazz_Bazz_internal_3 goto next__680_0 +# If not local_Bazz_Bazz_internal_3 goto next__703_0 sw $t0, -0($fp) sw $t1, -16($fp) -beqz $t1, next__680_0 +beqz $t1, next__703_0 lw $t0, -0($fp) lw $t1, -20($fp) # Moving self to local_Bazz_Bazz_n_4 @@ -5104,8 +5178,8 @@ sw $t2, -4($fp) sw $t0, -0($fp) sw $t1, -20($fp) sw $t2, -4($fp) -j end__674 -next__680_0: +j end__697 +next__703_0: lw $t0, -0($fp) lw $t1, -24($fp) la $t9, type_Razz @@ -5123,10 +5197,10 @@ j end_53 false_53: li $t1, 0 end_53: -# If not local_Bazz_Bazz_internal_5 goto next__688_1 +# If not local_Bazz_Bazz_internal_5 goto next__711_1 sw $t0, -0($fp) sw $t1, -24($fp) -beqz $t1, next__688_1 +beqz $t1, next__711_1 lw $t0, -0($fp) lw $t1, -28($fp) # Moving self to local_Bazz_Bazz_n_6 @@ -5178,8 +5252,8 @@ move $t1, $t0 sw $t1, -4($fp) sw $t0, -32($fp) sw $t1, -4($fp) -j end__674 -next__688_1: +j end__697 +next__711_1: lw $t0, -0($fp) lw $t1, -36($fp) la $t9, type_Foo @@ -5197,10 +5271,10 @@ j end_54 false_54: li $t1, 0 end_54: -# If not local_Bazz_Bazz_internal_8 goto next__699_2 +# If not local_Bazz_Bazz_internal_8 goto next__722_2 sw $t0, -0($fp) sw $t1, -36($fp) -beqz $t1, next__699_2 +beqz $t1, next__722_2 lw $t0, -0($fp) lw $t1, -40($fp) # Moving self to local_Bazz_Bazz_n_9 @@ -5252,8 +5326,8 @@ move $t1, $t0 sw $t1, -4($fp) sw $t0, -44($fp) sw $t1, -4($fp) -j end__674 -next__699_2: +j end__697 +next__722_2: lw $t0, -0($fp) lw $t1, -48($fp) la $t9, type_Bazz @@ -5271,10 +5345,10 @@ j end_55 false_55: li $t1, 0 end_55: -# If not local_Bazz_Bazz_internal_11 goto next__710_3 +# If not local_Bazz_Bazz_internal_11 goto next__733_3 sw $t0, -0($fp) sw $t1, -48($fp) -beqz $t1, next__710_3 +beqz $t1, next__733_3 lw $t0, -0($fp) lw $t1, -52($fp) # Moving self to local_Bazz_Bazz_n_12 @@ -5326,14 +5400,14 @@ move $t1, $t0 sw $t1, -4($fp) sw $t0, -56($fp) sw $t1, -4($fp) -j end__674 -next__710_3: +j end__697 +next__733_3: la $a0, case_error j .raise -error__674: +error__697: la $a0, case_void_error j .raise -end__674: +end__697: lw $t0, -4($fp) lw $t1, -0($fp) # self . g <- SET local_Bazz_Bazz_internal_0 @@ -5368,20 +5442,36 @@ lw $fp, ($sp) lw $t0, -60($fp) # saves the return value move $t0, $v0 -lw $t1, -0($fp) -# self . i <- SET local_Bazz_Bazz_internal_14 -sw $t0, 20($t1) -lw $t2, -64($fp) -# Moving self to local_Bazz_Bazz_internal_15 -move $t2, $t1 -sw $t2, -64($fp) -move $v0, $t2 +lw $t1, -64($fp) +# Initialize new node +li $a0, 12 +li $v0, 9 +syscall +la $t9, type_Int +sw $t9, 0($v0) +li $t9, 12 +sw $t9, 4($v0) +move $t1, $v0 +# Saving the methods of object +# Adding Type Info addr +la $t8, types +lw $v0, 8($t8) +sw $v0, 8($t1) +lw $t2, -0($fp) +# self . i <- SET local_Bazz_Bazz_internal_15 +sw $t1, 20($t2) +lw $t3, -68($fp) +# Moving self to local_Bazz_Bazz_internal_16 +move $t3, $t2 +sw $t3, -68($fp) +move $v0, $t3 # Empty all used registers and saves them to memory sw $t0, -60($fp) -sw $t1, -0($fp) -sw $t2, -64($fp) +sw $t1, -64($fp) +sw $t2, -0($fp) +sw $t3, -68($fp) # Removing all locals from stack -addiu $sp, $sp, 68 +addiu $sp, $sp, 72 jr $ra diff --git a/tests/codegen/io.mips b/tests/codegen/io.mips index af0856af..a9fff600 100644 --- a/tests/codegen/io.mips +++ b/tests/codegen/io.mips @@ -1661,14 +1661,14 @@ bnez $a1, mismatch_8 li $v0, 1 end_8: move $t1, $v0 -# If not local_main_Main_internal_2 goto continue__129 +# If not local_main_Main_internal_2 goto continue__131 sw $t0, -4($fp) sw $t1, -12($fp) sw $t2, -16($fp) -beqz $t1, continue__129 +beqz $t1, continue__131 la $a0, dispatch_error j .raise -continue__129: +continue__131: lw $t0, -4($fp) lw $t1, -8($fp) # Find the actual name in the dispatch table @@ -1765,14 +1765,14 @@ bnez $a1, mismatch_9 li $v0, 1 end_9: move $t1, $v0 -# If not local_main_Main_internal_6 goto continue__144 +# If not local_main_Main_internal_6 goto continue__146 sw $t0, -20($fp) sw $t1, -28($fp) sw $t2, -32($fp) -beqz $t1, continue__144 +beqz $t1, continue__146 la $a0, dispatch_error j .raise -continue__144: +continue__146: lw $t0, -20($fp) lw $t1, -24($fp) # Find the actual name in the dispatch table @@ -1846,15 +1846,15 @@ bnez $a1, mismatch_10 li $v0, 1 end_10: move $t2, $v0 -# If not local_main_Main_internal_10 goto continue__158 +# If not local_main_Main_internal_10 goto continue__160 sw $t0, -24($fp) sw $t1, -36($fp) sw $t2, -44($fp) sw $t3, -48($fp) -beqz $t2, continue__158 +beqz $t2, continue__160 la $a0, dispatch_error j .raise -continue__158: +continue__160: lw $t0, -36($fp) lw $t1, -40($fp) # Find the actual name in the dispatch table @@ -1928,15 +1928,15 @@ bnez $a1, mismatch_11 li $v0, 1 end_11: move $t2, $v0 -# If not local_main_Main_internal_14 goto continue__172 +# If not local_main_Main_internal_14 goto continue__174 sw $t0, -40($fp) sw $t1, -52($fp) sw $t2, -60($fp) sw $t3, -64($fp) -beqz $t2, continue__172 +beqz $t2, continue__174 la $a0, dispatch_error j .raise -continue__172: +continue__174: lw $t0, -52($fp) lw $t1, -56($fp) # Find the actual name in the dispatch table diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips index 8f947982..af09b693 100644 --- a/tests/codegen/life.mips +++ b/tests/codegen/life.mips @@ -1499,56 +1499,56 @@ lw $t2, -16($fp) # local_board_init_Board_internal_2 <- local_board_init_Board_size_0 = 15 li $t9, 15 seq $t2, $t1, $t9 -# If local_board_init_Board_internal_2 goto true__81 +# If local_board_init_Board_internal_2 goto true__82 sw $t0, -12($fp) sw $t1, -8($fp) sw $t2, -16($fp) -bnez $t2, true__81 +bnez $t2, true__82 lw $t0, -8($fp) lw $t1, -24($fp) # local_board_init_Board_internal_4 <- local_board_init_Board_size_0 = 16 li $t9, 16 seq $t1, $t0, $t9 -# If local_board_init_Board_internal_4 goto true__85 +# If local_board_init_Board_internal_4 goto true__86 sw $t0, -8($fp) sw $t1, -24($fp) -bnez $t1, true__85 +bnez $t1, true__86 lw $t0, -8($fp) lw $t1, -32($fp) # local_board_init_Board_internal_6 <- local_board_init_Board_size_0 = 20 li $t9, 20 seq $t1, $t0, $t9 -# If local_board_init_Board_internal_6 goto true__89 +# If local_board_init_Board_internal_6 goto true__90 sw $t0, -8($fp) sw $t1, -32($fp) -bnez $t1, true__89 +bnez $t1, true__90 lw $t0, -8($fp) lw $t1, -40($fp) # local_board_init_Board_internal_8 <- local_board_init_Board_size_0 = 21 li $t9, 21 seq $t1, $t0, $t9 -# If local_board_init_Board_internal_8 goto true__93 +# If local_board_init_Board_internal_8 goto true__94 sw $t0, -8($fp) sw $t1, -40($fp) -bnez $t1, true__93 +bnez $t1, true__94 lw $t0, -8($fp) lw $t1, -48($fp) # local_board_init_Board_internal_10 <- local_board_init_Board_size_0 = 25 li $t9, 25 seq $t1, $t0, $t9 -# If local_board_init_Board_internal_10 goto true__97 +# If local_board_init_Board_internal_10 goto true__98 sw $t0, -8($fp) sw $t1, -48($fp) -bnez $t1, true__97 +bnez $t1, true__98 lw $t0, -8($fp) lw $t1, -56($fp) # local_board_init_Board_internal_12 <- local_board_init_Board_size_0 = 28 li $t9, 28 seq $t1, $t0, $t9 -# If local_board_init_Board_internal_12 goto true__101 +# If local_board_init_Board_internal_12 goto true__102 sw $t0, -8($fp) sw $t1, -56($fp) -bnez $t1, true__101 +bnez $t1, true__102 lw $t0, -4($fp) # self . rows <- SET 5 li $t9, 5 @@ -1571,8 +1571,8 @@ sw $t0, -4($fp) sw $t1, -8($fp) sw $t2, -64($fp) sw $t3, -60($fp) -j end__101 -true__101: +j end__102 +true__102: lw $t0, -4($fp) # self . rows <- SET 7 li $t9, 7 @@ -1595,7 +1595,7 @@ sw $t0, -4($fp) sw $t1, -8($fp) sw $t2, -68($fp) sw $t3, -60($fp) -end__101: +end__102: lw $t0, -60($fp) lw $t1, -52($fp) # Moving local_board_init_Board_internal_13 to local_board_init_Board_internal_11 @@ -1603,8 +1603,8 @@ move $t1, $t0 sw $t1, -52($fp) sw $t0, -60($fp) sw $t1, -52($fp) -j end__97 -true__97: +j end__98 +true__98: lw $t0, -4($fp) # self . rows <- SET 5 li $t9, 5 @@ -1627,7 +1627,7 @@ sw $t0, -4($fp) sw $t1, -8($fp) sw $t2, -72($fp) sw $t3, -52($fp) -end__97: +end__98: lw $t0, -52($fp) lw $t1, -44($fp) # Moving local_board_init_Board_internal_11 to local_board_init_Board_internal_9 @@ -1635,8 +1635,8 @@ move $t1, $t0 sw $t1, -44($fp) sw $t0, -52($fp) sw $t1, -44($fp) -j end__93 -true__93: +j end__94 +true__94: lw $t0, -4($fp) # self . rows <- SET 3 li $t9, 3 @@ -1659,7 +1659,7 @@ sw $t0, -4($fp) sw $t1, -8($fp) sw $t2, -76($fp) sw $t3, -44($fp) -end__93: +end__94: lw $t0, -44($fp) lw $t1, -36($fp) # Moving local_board_init_Board_internal_9 to local_board_init_Board_internal_7 @@ -1667,8 +1667,8 @@ move $t1, $t0 sw $t1, -36($fp) sw $t0, -44($fp) sw $t1, -36($fp) -j end__89 -true__89: +j end__90 +true__90: lw $t0, -4($fp) # self . rows <- SET 4 li $t9, 4 @@ -1691,7 +1691,7 @@ sw $t0, -4($fp) sw $t1, -8($fp) sw $t2, -80($fp) sw $t3, -36($fp) -end__89: +end__90: lw $t0, -36($fp) lw $t1, -28($fp) # Moving local_board_init_Board_internal_7 to local_board_init_Board_internal_5 @@ -1699,8 +1699,8 @@ move $t1, $t0 sw $t1, -28($fp) sw $t0, -36($fp) sw $t1, -28($fp) -j end__85 -true__85: +j end__86 +true__86: lw $t0, -4($fp) # self . rows <- SET 4 li $t9, 4 @@ -1723,7 +1723,7 @@ sw $t0, -4($fp) sw $t1, -8($fp) sw $t2, -84($fp) sw $t3, -28($fp) -end__85: +end__86: lw $t0, -28($fp) lw $t1, -20($fp) # Moving local_board_init_Board_internal_5 to local_board_init_Board_internal_3 @@ -1731,8 +1731,8 @@ move $t1, $t0 sw $t1, -20($fp) sw $t0, -28($fp) sw $t1, -20($fp) -j end__81 -true__81: +j end__82 +true__82: lw $t0, -4($fp) # self . rows <- SET 3 li $t9, 3 @@ -1755,7 +1755,7 @@ sw $t0, -4($fp) sw $t1, -8($fp) sw $t2, -88($fp) sw $t3, -20($fp) -end__81: +end__82: lw $t0, -4($fp) lw $t1, -92($fp) # Moving self to local_board_init_Board_internal_21 @@ -1983,17 +1983,17 @@ sw $t9, 0($v0) move $t1, $v0 sw $t0, -20($fp) sw $t1, -24($fp) -start__207: +start__210: lw $t0, -4($fp) lw $t1, -8($fp) lw $t2, -28($fp) # local_print_CellularAutomaton_internal_6 <- local_print_CellularAutomaton_i_0 < local_print_CellularAutomaton_num_1 slt $t2, $t0, $t1 -# If not local_print_CellularAutomaton_internal_6 goto end__207 +# If not local_print_CellularAutomaton_internal_6 goto end__210 sw $t0, -4($fp) sw $t1, -8($fp) sw $t2, -28($fp) -beqz $t2, end__207 +beqz $t2, end__210 lw $t0, -0($fp) lw $t1, -32($fp) # local_print_CellularAutomaton_population_map_7 <- GET self . population_map @@ -2028,16 +2028,16 @@ bnez $a1, mismatch_7 li $v0, 1 end_7: move $t3, $v0 -# If not local_print_CellularAutomaton_internal_10 goto continue__221 +# If not local_print_CellularAutomaton_internal_10 goto continue__225 sw $t0, -0($fp) sw $t1, -32($fp) sw $t2, -36($fp) sw $t3, -44($fp) sw $t4, -48($fp) -beqz $t3, continue__221 +beqz $t3, continue__225 la $a0, dispatch_error j .raise -continue__221: +continue__225: lw $t0, -40($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -2171,8 +2171,8 @@ sw $t3, -4($fp) sw $t4, -64($fp) sw $t5, -72($fp) sw $t6, -24($fp) -j start__207 -end__207: +j start__210 +end__210: lw $t0, -76($fp) # Saves in local_print_CellularAutomaton_internal_18 data_4 la $t0, data_4 @@ -2270,15 +2270,15 @@ bnez $a1, mismatch_8 li $v0, 1 end_8: move $t2, $v0 -# If not local_num_cells_CellularAutomaton_internal_2 goto continue__265 +# If not local_num_cells_CellularAutomaton_internal_2 goto continue__271 sw $t0, -0($fp) sw $t1, -4($fp) sw $t2, -12($fp) sw $t3, -16($fp) -beqz $t2, continue__265 +beqz $t2, continue__271 la $a0, dispatch_error j .raise -continue__265: +continue__271: lw $t0, -8($fp) # Static Dispatch of the method length sw $fp, ($sp) @@ -2349,13 +2349,13 @@ lw $t3, -0($fp) lw $t4, -8($fp) # local_cell_CellularAutomaton_internal_0 <- local_cell_CellularAutomaton_internal_1 < position slt $t4, $t2, $t3 -# If local_cell_CellularAutomaton_internal_0 goto true__285 +# If local_cell_CellularAutomaton_internal_0 goto true__291 sw $t0, -4($fp) sw $t1, -16($fp) sw $t2, -12($fp) sw $t3, -0($fp) sw $t4, -8($fp) -bnez $t4, true__285 +bnez $t4, true__291 lw $t0, -4($fp) lw $t1, -24($fp) # local_cell_CellularAutomaton_population_map_4 <- GET self . population_map @@ -2387,15 +2387,15 @@ bnez $a1, mismatch_9 li $v0, 1 end_9: move $t2, $v0 -# If not local_cell_CellularAutomaton_internal_6 goto continue__293 +# If not local_cell_CellularAutomaton_internal_6 goto continue__299 sw $t0, -4($fp) sw $t1, -24($fp) sw $t2, -32($fp) sw $t3, -36($fp) -beqz $t2, continue__293 +beqz $t2, continue__299 la $a0, dispatch_error j .raise -continue__293: +continue__299: lw $t0, -28($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -2436,8 +2436,8 @@ move $t1, $t0 sw $t1, -20($fp) sw $t0, -28($fp) sw $t1, -20($fp) -j end__285 -true__285: +j end__291 +true__291: lw $t0, -40($fp) # Saves in local_cell_CellularAutomaton_internal_8 data_5 la $t0, data_5 @@ -2447,7 +2447,7 @@ move $t1, $t0 sw $t1, -20($fp) sw $t0, -40($fp) sw $t1, -20($fp) -end__285: +end__291: lw $t0, -20($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -2493,13 +2493,13 @@ lw $t4, -8($fp) # local_north_CellularAutomaton_internal_0 <- local_north_CellularAutomaton_internal_1 < 0 li $t9, 0 slt $t4, $t3, $t9 -# If local_north_CellularAutomaton_internal_0 goto true__321 +# If local_north_CellularAutomaton_internal_0 goto true__327 sw $t0, -4($fp) sw $t1, -16($fp) sw $t2, -0($fp) sw $t3, -12($fp) sw $t4, -8($fp) -bnez $t4, true__321 +bnez $t4, true__327 lw $t0, -4($fp) lw $t1, -28($fp) # local_north_CellularAutomaton_columns_5 <- GET self . columns @@ -2549,8 +2549,8 @@ move $t1, $t0 sw $t1, -20($fp) sw $t0, -32($fp) sw $t1, -20($fp) -j end__321 -true__321: +j end__327 +true__327: lw $t0, -36($fp) # Saves in local_north_CellularAutomaton_internal_7 data_6 la $t0, data_6 @@ -2560,7 +2560,7 @@ move $t1, $t0 sw $t1, -20($fp) sw $t0, -36($fp) sw $t1, -20($fp) -end__321: +end__327: lw $t0, -20($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -2610,14 +2610,14 @@ add $t4, $t3, $t2 lw $t5, -8($fp) # local_south_CellularAutomaton_internal_0 <- local_south_CellularAutomaton_board_size_1 < local_south_CellularAutomaton_internal_2 slt $t5, $t1, $t4 -# If local_south_CellularAutomaton_internal_0 goto true__350 +# If local_south_CellularAutomaton_internal_0 goto true__357 sw $t0, -4($fp) sw $t1, -12($fp) sw $t2, -20($fp) sw $t3, -0($fp) sw $t4, -16($fp) sw $t5, -8($fp) -bnez $t5, true__350 +bnez $t5, true__357 lw $t0, -4($fp) lw $t1, -32($fp) # local_south_CellularAutomaton_columns_6 <- GET self . columns @@ -2667,8 +2667,8 @@ move $t1, $t0 sw $t1, -24($fp) sw $t0, -36($fp) sw $t1, -24($fp) -j end__350 -true__350: +j end__357 +true__357: lw $t0, -40($fp) # Saves in local_south_CellularAutomaton_internal_8 data_7 la $t0, data_7 @@ -2678,7 +2678,7 @@ move $t1, $t0 sw $t1, -24($fp) sw $t0, -40($fp) sw $t1, -24($fp) -end__350: +end__357: lw $t0, -24($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -2745,7 +2745,7 @@ addi $t7, $t0, 1 lw $a1, -8($fp) # local_east_CellularAutomaton_internal_0 <- local_east_CellularAutomaton_internal_1 = local_east_CellularAutomaton_internal_6 seq $a1, $t6, $t7 -# If local_east_CellularAutomaton_internal_0 goto true__385 +# If local_east_CellularAutomaton_internal_0 goto true__393 sw $t0, -0($fp) sw $t1, -20($fp) sw $t2, -4($fp) @@ -2755,7 +2755,7 @@ sw $t5, -28($fp) sw $t6, -12($fp) sw $t7, -32($fp) sw $a1, -8($fp) -bnez $a1, true__385 +bnez $a1, true__393 lw $t0, -0($fp) lw $t1, -40($fp) # local_east_CellularAutomaton_internal_8 <- position + 1 @@ -2801,8 +2801,8 @@ move $t1, $t0 sw $t1, -36($fp) sw $t0, -44($fp) sw $t1, -36($fp) -j end__385 -true__385: +j end__393 +true__393: lw $t0, -48($fp) # Saves in local_east_CellularAutomaton_internal_10 data_8 la $t0, data_8 @@ -2812,7 +2812,7 @@ move $t1, $t0 sw $t1, -36($fp) sw $t0, -48($fp) sw $t1, -36($fp) -end__385: +end__393: lw $t0, -36($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -2859,10 +2859,10 @@ lw $t1, -8($fp) # local_west_CellularAutomaton_internal_0 <- position = 0 li $t9, 0 seq $t1, $t0, $t9 -# If local_west_CellularAutomaton_internal_0 goto true__406 +# If local_west_CellularAutomaton_internal_0 goto true__415 sw $t0, -0($fp) sw $t1, -8($fp) -bnez $t1, true__406 +bnez $t1, true__415 lw $t0, -4($fp) lw $t1, -28($fp) # local_west_CellularAutomaton_columns_5 <- GET self . columns @@ -2884,7 +2884,7 @@ mflo $t5 lw $t6, -16($fp) # local_west_CellularAutomaton_internal_2 <- local_west_CellularAutomaton_internal_3 = position seq $t6, $t5, $t2 -# If local_west_CellularAutomaton_internal_2 goto true__418 +# If local_west_CellularAutomaton_internal_2 goto true__427 sw $t0, -4($fp) sw $t1, -28($fp) sw $t2, -0($fp) @@ -2892,7 +2892,7 @@ sw $t3, -24($fp) sw $t4, -32($fp) sw $t5, -20($fp) sw $t6, -16($fp) -bnez $t6, true__418 +bnez $t6, true__427 lw $t0, -0($fp) lw $t1, -40($fp) # local_west_CellularAutomaton_internal_8 <- position - 1 @@ -2938,8 +2938,8 @@ move $t1, $t0 sw $t1, -36($fp) sw $t0, -44($fp) sw $t1, -36($fp) -j end__418 -true__418: +j end__427 +true__427: lw $t0, -48($fp) # Saves in local_west_CellularAutomaton_internal_10 data_9 la $t0, data_9 @@ -2949,7 +2949,7 @@ move $t1, $t0 sw $t1, -36($fp) sw $t0, -48($fp) sw $t1, -36($fp) -end__418: +end__427: lw $t0, -36($fp) lw $t1, -12($fp) # Moving local_west_CellularAutomaton_internal_7 to local_west_CellularAutomaton_internal_1 @@ -2957,8 +2957,8 @@ move $t1, $t0 sw $t1, -12($fp) sw $t0, -36($fp) sw $t1, -12($fp) -j end__406 -true__406: +j end__415 +true__415: lw $t0, -52($fp) # Saves in local_west_CellularAutomaton_internal_11 data_10 la $t0, data_10 @@ -2968,7 +2968,7 @@ move $t1, $t0 sw $t1, -12($fp) sw $t0, -52($fp) sw $t1, -12($fp) -end__406: +end__415: lw $t0, -12($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -3026,13 +3026,13 @@ lw $t4, -8($fp) # local_northwest_CellularAutomaton_internal_0 <- local_northwest_CellularAutomaton_internal_1 < 0 li $t9, 0 slt $t4, $t3, $t9 -# If local_northwest_CellularAutomaton_internal_0 goto true__451 +# If local_northwest_CellularAutomaton_internal_0 goto true__461 sw $t0, -4($fp) sw $t1, -16($fp) sw $t2, -0($fp) sw $t3, -12($fp) sw $t4, -8($fp) -bnez $t4, true__451 +bnez $t4, true__461 lw $t0, -4($fp) lw $t1, -36($fp) # local_northwest_CellularAutomaton_columns_7 <- GET self . columns @@ -3054,7 +3054,7 @@ mflo $t5 lw $t6, -24($fp) # local_northwest_CellularAutomaton_internal_4 <- local_northwest_CellularAutomaton_internal_5 = position seq $t6, $t5, $t2 -# If local_northwest_CellularAutomaton_internal_4 goto true__463 +# If local_northwest_CellularAutomaton_internal_4 goto true__473 sw $t0, -4($fp) sw $t1, -36($fp) sw $t2, -0($fp) @@ -3062,7 +3062,7 @@ sw $t3, -32($fp) sw $t4, -40($fp) sw $t5, -28($fp) sw $t6, -24($fp) -bnez $t6, true__463 +bnez $t6, true__473 lw $t0, -0($fp) lw $t1, -48($fp) # local_northwest_CellularAutomaton_internal_10 <- position - 1 @@ -3108,8 +3108,8 @@ move $t1, $t0 sw $t1, -44($fp) sw $t0, -52($fp) sw $t1, -44($fp) -j end__463 -true__463: +j end__473 +true__473: lw $t0, -56($fp) # Saves in local_northwest_CellularAutomaton_internal_12 data_11 la $t0, data_11 @@ -3119,7 +3119,7 @@ move $t1, $t0 sw $t1, -44($fp) sw $t0, -56($fp) sw $t1, -44($fp) -end__463: +end__473: lw $t0, -44($fp) lw $t1, -20($fp) # Moving local_northwest_CellularAutomaton_internal_9 to local_northwest_CellularAutomaton_internal_3 @@ -3127,8 +3127,8 @@ move $t1, $t0 sw $t1, -20($fp) sw $t0, -44($fp) sw $t1, -20($fp) -j end__451 -true__451: +j end__461 +true__461: lw $t0, -60($fp) # Saves in local_northwest_CellularAutomaton_internal_13 data_12 la $t0, data_12 @@ -3138,7 +3138,7 @@ move $t1, $t0 sw $t1, -20($fp) sw $t0, -60($fp) sw $t1, -20($fp) -end__451: +end__461: lw $t0, -20($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -3200,13 +3200,13 @@ lw $t4, -8($fp) # local_northeast_CellularAutomaton_internal_0 <- local_northeast_CellularAutomaton_internal_1 < 0 li $t9, 0 slt $t4, $t3, $t9 -# If local_northeast_CellularAutomaton_internal_0 goto true__496 +# If local_northeast_CellularAutomaton_internal_0 goto true__507 sw $t0, -4($fp) sw $t1, -16($fp) sw $t2, -0($fp) sw $t3, -12($fp) sw $t4, -8($fp) -bnez $t4, true__496 +bnez $t4, true__507 lw $t0, -0($fp) lw $t1, -36($fp) # local_northeast_CellularAutomaton_internal_7 <- position + 1 @@ -3234,7 +3234,7 @@ addi $t7, $t0, 1 lw $a1, -24($fp) # local_northeast_CellularAutomaton_internal_4 <- local_northeast_CellularAutomaton_internal_5 = local_northeast_CellularAutomaton_internal_10 seq $a1, $t6, $t7 -# If local_northeast_CellularAutomaton_internal_4 goto true__512 +# If local_northeast_CellularAutomaton_internal_4 goto true__523 sw $t0, -0($fp) sw $t1, -36($fp) sw $t2, -4($fp) @@ -3244,7 +3244,7 @@ sw $t5, -44($fp) sw $t6, -28($fp) sw $t7, -48($fp) sw $a1, -24($fp) -bnez $a1, true__512 +bnez $a1, true__523 lw $t0, -0($fp) lw $t1, -56($fp) # local_northeast_CellularAutomaton_internal_12 <- position + 1 @@ -3290,8 +3290,8 @@ move $t1, $t0 sw $t1, -52($fp) sw $t0, -60($fp) sw $t1, -52($fp) -j end__512 -true__512: +j end__523 +true__523: lw $t0, -64($fp) # Saves in local_northeast_CellularAutomaton_internal_14 data_13 la $t0, data_13 @@ -3301,7 +3301,7 @@ move $t1, $t0 sw $t1, -52($fp) sw $t0, -64($fp) sw $t1, -52($fp) -end__512: +end__523: lw $t0, -52($fp) lw $t1, -20($fp) # Moving local_northeast_CellularAutomaton_internal_11 to local_northeast_CellularAutomaton_internal_3 @@ -3309,8 +3309,8 @@ move $t1, $t0 sw $t1, -20($fp) sw $t0, -52($fp) sw $t1, -20($fp) -j end__496 -true__496: +j end__507 +true__507: lw $t0, -68($fp) # Saves in local_northeast_CellularAutomaton_internal_15 data_14 la $t0, data_14 @@ -3320,7 +3320,7 @@ move $t1, $t0 sw $t1, -20($fp) sw $t0, -68($fp) sw $t1, -20($fp) -end__496: +end__507: lw $t0, -20($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -3386,14 +3386,14 @@ add $t4, $t3, $t2 lw $t5, -8($fp) # local_southeast_CellularAutomaton_internal_0 <- local_southeast_CellularAutomaton_board_size_1 < local_southeast_CellularAutomaton_internal_2 slt $t5, $t1, $t4 -# If local_southeast_CellularAutomaton_internal_0 goto true__547 +# If local_southeast_CellularAutomaton_internal_0 goto true__559 sw $t0, -4($fp) sw $t1, -12($fp) sw $t2, -20($fp) sw $t3, -0($fp) sw $t4, -16($fp) sw $t5, -8($fp) -bnez $t5, true__547 +bnez $t5, true__559 lw $t0, -0($fp) lw $t1, -40($fp) # local_southeast_CellularAutomaton_internal_8 <- position + 1 @@ -3421,7 +3421,7 @@ addi $t7, $t0, 1 lw $a1, -28($fp) # local_southeast_CellularAutomaton_internal_5 <- local_southeast_CellularAutomaton_internal_6 = local_southeast_CellularAutomaton_internal_11 seq $a1, $t6, $t7 -# If local_southeast_CellularAutomaton_internal_5 goto true__563 +# If local_southeast_CellularAutomaton_internal_5 goto true__575 sw $t0, -0($fp) sw $t1, -40($fp) sw $t2, -4($fp) @@ -3431,7 +3431,7 @@ sw $t5, -48($fp) sw $t6, -32($fp) sw $t7, -52($fp) sw $a1, -28($fp) -bnez $a1, true__563 +bnez $a1, true__575 lw $t0, -0($fp) lw $t1, -60($fp) # local_southeast_CellularAutomaton_internal_13 <- position + 1 @@ -3477,8 +3477,8 @@ move $t1, $t0 sw $t1, -56($fp) sw $t0, -64($fp) sw $t1, -56($fp) -j end__563 -true__563: +j end__575 +true__575: lw $t0, -68($fp) # Saves in local_southeast_CellularAutomaton_internal_15 data_15 la $t0, data_15 @@ -3488,7 +3488,7 @@ move $t1, $t0 sw $t1, -56($fp) sw $t0, -68($fp) sw $t1, -56($fp) -end__563: +end__575: lw $t0, -56($fp) lw $t1, -24($fp) # Moving local_southeast_CellularAutomaton_internal_12 to local_southeast_CellularAutomaton_internal_4 @@ -3496,8 +3496,8 @@ move $t1, $t0 sw $t1, -24($fp) sw $t0, -56($fp) sw $t1, -24($fp) -j end__547 -true__547: +j end__559 +true__559: lw $t0, -72($fp) # Saves in local_southeast_CellularAutomaton_internal_16 data_16 la $t0, data_16 @@ -3507,7 +3507,7 @@ move $t1, $t0 sw $t1, -24($fp) sw $t0, -72($fp) sw $t1, -24($fp) -end__547: +end__559: lw $t0, -24($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -3569,14 +3569,14 @@ add $t4, $t3, $t2 lw $t5, -8($fp) # local_southwest_CellularAutomaton_internal_0 <- local_southwest_CellularAutomaton_board_size_1 < local_southwest_CellularAutomaton_internal_2 slt $t5, $t1, $t4 -# If local_southwest_CellularAutomaton_internal_0 goto true__598 +# If local_southwest_CellularAutomaton_internal_0 goto true__611 sw $t0, -4($fp) sw $t1, -12($fp) sw $t2, -20($fp) sw $t3, -0($fp) sw $t4, -16($fp) sw $t5, -8($fp) -bnez $t5, true__598 +bnez $t5, true__611 lw $t0, -4($fp) lw $t1, -40($fp) # local_southwest_CellularAutomaton_columns_8 <- GET self . columns @@ -3598,7 +3598,7 @@ mflo $t5 lw $t6, -28($fp) # local_southwest_CellularAutomaton_internal_5 <- local_southwest_CellularAutomaton_internal_6 = position seq $t6, $t5, $t2 -# If local_southwest_CellularAutomaton_internal_5 goto true__610 +# If local_southwest_CellularAutomaton_internal_5 goto true__623 sw $t0, -4($fp) sw $t1, -40($fp) sw $t2, -0($fp) @@ -3606,7 +3606,7 @@ sw $t3, -36($fp) sw $t4, -44($fp) sw $t5, -32($fp) sw $t6, -28($fp) -bnez $t6, true__610 +bnez $t6, true__623 lw $t0, -0($fp) lw $t1, -52($fp) # local_southwest_CellularAutomaton_internal_11 <- position - 1 @@ -3652,8 +3652,8 @@ move $t1, $t0 sw $t1, -48($fp) sw $t0, -56($fp) sw $t1, -48($fp) -j end__610 -true__610: +j end__623 +true__623: lw $t0, -60($fp) # Saves in local_southwest_CellularAutomaton_internal_13 data_17 la $t0, data_17 @@ -3663,7 +3663,7 @@ move $t1, $t0 sw $t1, -48($fp) sw $t0, -60($fp) sw $t1, -48($fp) -end__610: +end__623: lw $t0, -48($fp) lw $t1, -24($fp) # Moving local_southwest_CellularAutomaton_internal_10 to local_southwest_CellularAutomaton_internal_4 @@ -3671,8 +3671,8 @@ move $t1, $t0 sw $t1, -24($fp) sw $t0, -48($fp) sw $t1, -24($fp) -j end__598 -true__598: +j end__611 +true__611: lw $t0, -64($fp) # Saves in local_southwest_CellularAutomaton_internal_14 data_18 la $t0, data_18 @@ -3682,7 +3682,7 @@ move $t1, $t0 sw $t1, -24($fp) sw $t0, -64($fp) sw $t1, -24($fp) -end__598: +end__611: lw $t0, -24($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -3840,24 +3840,24 @@ bnez $a1, mismatch_10 li $v0, 1 end_10: move $t2, $v0 -# If local_neighbors_CellularAutomaton_internal_7 goto true__652 +# If local_neighbors_CellularAutomaton_internal_7 goto true__667 sw $t0, -40($fp) sw $t1, -44($fp) sw $t2, -36($fp) -bnez $t2, true__652 +bnez $t2, true__667 lw $t0, -48($fp) # Moving 0 to local_neighbors_CellularAutomaton_internal_10 li $t0, 0 sw $t0, -48($fp) sw $t0, -48($fp) -j end__652 -true__652: +j end__667 +true__667: lw $t0, -48($fp) # Moving 1 to local_neighbors_CellularAutomaton_internal_10 li $t0, 1 sw $t0, -48($fp) sw $t0, -48($fp) -end__652: +end__667: lw $t0, -4($fp) lw $t1, -56($fp) # Find the actual name in the dispatch table @@ -3918,24 +3918,24 @@ bnez $a1, mismatch_11 li $v0, 1 end_11: move $t2, $v0 -# If local_neighbors_CellularAutomaton_internal_11 goto true__667 +# If local_neighbors_CellularAutomaton_internal_11 goto true__683 sw $t0, -56($fp) sw $t1, -60($fp) sw $t2, -52($fp) -bnez $t2, true__667 +bnez $t2, true__683 lw $t0, -64($fp) # Moving 0 to local_neighbors_CellularAutomaton_internal_14 li $t0, 0 sw $t0, -64($fp) sw $t0, -64($fp) -j end__667 -true__667: +j end__683 +true__683: lw $t0, -64($fp) # Moving 1 to local_neighbors_CellularAutomaton_internal_14 li $t0, 1 sw $t0, -64($fp) sw $t0, -64($fp) -end__667: +end__683: lw $t0, -48($fp) lw $t1, -64($fp) lw $t2, -32($fp) @@ -4004,24 +4004,24 @@ bnez $a1, mismatch_12 li $v0, 1 end_12: move $t2, $v0 -# If local_neighbors_CellularAutomaton_internal_15 goto true__683 +# If local_neighbors_CellularAutomaton_internal_15 goto true__700 sw $t0, -72($fp) sw $t1, -76($fp) sw $t2, -68($fp) -bnez $t2, true__683 +bnez $t2, true__700 lw $t0, -80($fp) # Moving 0 to local_neighbors_CellularAutomaton_internal_18 li $t0, 0 sw $t0, -80($fp) sw $t0, -80($fp) -j end__683 -true__683: +j end__700 +true__700: lw $t0, -80($fp) # Moving 1 to local_neighbors_CellularAutomaton_internal_18 li $t0, 1 sw $t0, -80($fp) sw $t0, -80($fp) -end__683: +end__700: lw $t0, -32($fp) lw $t1, -80($fp) lw $t2, -28($fp) @@ -4090,24 +4090,24 @@ bnez $a1, mismatch_13 li $v0, 1 end_13: move $t2, $v0 -# If local_neighbors_CellularAutomaton_internal_19 goto true__699 +# If local_neighbors_CellularAutomaton_internal_19 goto true__717 sw $t0, -88($fp) sw $t1, -92($fp) sw $t2, -84($fp) -bnez $t2, true__699 +bnez $t2, true__717 lw $t0, -96($fp) # Moving 0 to local_neighbors_CellularAutomaton_internal_22 li $t0, 0 sw $t0, -96($fp) sw $t0, -96($fp) -j end__699 -true__699: +j end__717 +true__717: lw $t0, -96($fp) # Moving 1 to local_neighbors_CellularAutomaton_internal_22 li $t0, 1 sw $t0, -96($fp) sw $t0, -96($fp) -end__699: +end__717: lw $t0, -28($fp) lw $t1, -96($fp) lw $t2, -24($fp) @@ -4176,24 +4176,24 @@ bnez $a1, mismatch_14 li $v0, 1 end_14: move $t2, $v0 -# If local_neighbors_CellularAutomaton_internal_23 goto true__715 +# If local_neighbors_CellularAutomaton_internal_23 goto true__734 sw $t0, -104($fp) sw $t1, -108($fp) sw $t2, -100($fp) -bnez $t2, true__715 +bnez $t2, true__734 lw $t0, -112($fp) # Moving 0 to local_neighbors_CellularAutomaton_internal_26 li $t0, 0 sw $t0, -112($fp) sw $t0, -112($fp) -j end__715 -true__715: +j end__734 +true__734: lw $t0, -112($fp) # Moving 1 to local_neighbors_CellularAutomaton_internal_26 li $t0, 1 sw $t0, -112($fp) sw $t0, -112($fp) -end__715: +end__734: lw $t0, -24($fp) lw $t1, -112($fp) lw $t2, -20($fp) @@ -4262,24 +4262,24 @@ bnez $a1, mismatch_15 li $v0, 1 end_15: move $t2, $v0 -# If local_neighbors_CellularAutomaton_internal_27 goto true__731 +# If local_neighbors_CellularAutomaton_internal_27 goto true__751 sw $t0, -120($fp) sw $t1, -124($fp) sw $t2, -116($fp) -bnez $t2, true__731 +bnez $t2, true__751 lw $t0, -128($fp) # Moving 0 to local_neighbors_CellularAutomaton_internal_30 li $t0, 0 sw $t0, -128($fp) sw $t0, -128($fp) -j end__731 -true__731: +j end__751 +true__751: lw $t0, -128($fp) # Moving 1 to local_neighbors_CellularAutomaton_internal_30 li $t0, 1 sw $t0, -128($fp) sw $t0, -128($fp) -end__731: +end__751: lw $t0, -20($fp) lw $t1, -128($fp) lw $t2, -16($fp) @@ -4348,24 +4348,24 @@ bnez $a1, mismatch_16 li $v0, 1 end_16: move $t2, $v0 -# If local_neighbors_CellularAutomaton_internal_31 goto true__747 +# If local_neighbors_CellularAutomaton_internal_31 goto true__768 sw $t0, -136($fp) sw $t1, -140($fp) sw $t2, -132($fp) -bnez $t2, true__747 +bnez $t2, true__768 lw $t0, -144($fp) # Moving 0 to local_neighbors_CellularAutomaton_internal_34 li $t0, 0 sw $t0, -144($fp) sw $t0, -144($fp) -j end__747 -true__747: +j end__768 +true__768: lw $t0, -144($fp) # Moving 1 to local_neighbors_CellularAutomaton_internal_34 li $t0, 1 sw $t0, -144($fp) sw $t0, -144($fp) -end__747: +end__768: lw $t0, -16($fp) lw $t1, -144($fp) lw $t2, -12($fp) @@ -4434,24 +4434,24 @@ bnez $a1, mismatch_17 li $v0, 1 end_17: move $t2, $v0 -# If local_neighbors_CellularAutomaton_internal_35 goto true__763 +# If local_neighbors_CellularAutomaton_internal_35 goto true__785 sw $t0, -152($fp) sw $t1, -156($fp) sw $t2, -148($fp) -bnez $t2, true__763 +bnez $t2, true__785 lw $t0, -160($fp) # Moving 0 to local_neighbors_CellularAutomaton_internal_38 li $t0, 0 sw $t0, -160($fp) sw $t0, -160($fp) -j end__763 -true__763: +j end__785 +true__785: lw $t0, -160($fp) # Moving 1 to local_neighbors_CellularAutomaton_internal_38 li $t0, 1 sw $t0, -160($fp) sw $t0, -160($fp) -end__763: +end__785: lw $t0, -12($fp) lw $t1, -160($fp) lw $t2, -8($fp) @@ -4547,10 +4547,10 @@ lw $t1, -8($fp) # local_cell_at_next_evolution_CellularAutomaton_internal_0 <- local_cell_at_next_evolution_CellularAutomaton_internal_1 = 3 li $t9, 3 seq $t1, $t0, $t9 -# If local_cell_at_next_evolution_CellularAutomaton_internal_0 goto true__782 +# If local_cell_at_next_evolution_CellularAutomaton_internal_0 goto true__805 sw $t0, -12($fp) sw $t1, -8($fp) -bnez $t1, true__782 +bnez $t1, true__805 lw $t0, -4($fp) lw $t1, -24($fp) # Find the actual name in the dispatch table @@ -4590,10 +4590,10 @@ lw $t1, -20($fp) # local_cell_at_next_evolution_CellularAutomaton_internal_3 <- local_cell_at_next_evolution_CellularAutomaton_internal_4 = 2 li $t9, 2 seq $t1, $t0, $t9 -# If local_cell_at_next_evolution_CellularAutomaton_internal_3 goto true__789 +# If local_cell_at_next_evolution_CellularAutomaton_internal_3 goto true__813 sw $t0, -24($fp) sw $t1, -20($fp) -bnez $t1, true__789 +bnez $t1, true__813 lw $t0, -32($fp) # Saves in local_cell_at_next_evolution_CellularAutomaton_internal_6 data_27 la $t0, data_27 @@ -4603,8 +4603,8 @@ move $t1, $t0 sw $t1, -28($fp) sw $t0, -32($fp) sw $t1, -28($fp) -j end__789 -true__789: +j end__813 +true__813: lw $t0, -4($fp) lw $t1, -40($fp) # Find the actual name in the dispatch table @@ -4665,11 +4665,11 @@ bnez $a1, mismatch_18 li $v0, 1 end_18: move $t2, $v0 -# If local_cell_at_next_evolution_CellularAutomaton_internal_7 goto true__805 +# If local_cell_at_next_evolution_CellularAutomaton_internal_7 goto true__830 sw $t0, -40($fp) sw $t1, -44($fp) sw $t2, -36($fp) -bnez $t2, true__805 +bnez $t2, true__830 lw $t0, -52($fp) # Saves in local_cell_at_next_evolution_CellularAutomaton_internal_11 data_29 la $t0, data_29 @@ -4679,8 +4679,8 @@ move $t1, $t0 sw $t1, -48($fp) sw $t0, -52($fp) sw $t1, -48($fp) -j end__805 -true__805: +j end__830 +true__830: lw $t0, -56($fp) # Saves in local_cell_at_next_evolution_CellularAutomaton_internal_12 data_30 la $t0, data_30 @@ -4690,7 +4690,7 @@ move $t1, $t0 sw $t1, -48($fp) sw $t0, -56($fp) sw $t1, -48($fp) -end__805: +end__830: lw $t0, -48($fp) lw $t1, -28($fp) # Moving local_cell_at_next_evolution_CellularAutomaton_internal_10 to local_cell_at_next_evolution_CellularAutomaton_internal_5 @@ -4698,7 +4698,7 @@ move $t1, $t0 sw $t1, -28($fp) sw $t0, -48($fp) sw $t1, -28($fp) -end__789: +end__813: lw $t0, -28($fp) lw $t1, -16($fp) # Moving local_cell_at_next_evolution_CellularAutomaton_internal_5 to local_cell_at_next_evolution_CellularAutomaton_internal_2 @@ -4706,8 +4706,8 @@ move $t1, $t0 sw $t1, -16($fp) sw $t0, -28($fp) sw $t1, -16($fp) -j end__782 -true__782: +j end__805 +true__805: lw $t0, -60($fp) # Saves in local_cell_at_next_evolution_CellularAutomaton_internal_13 data_31 la $t0, data_31 @@ -4717,7 +4717,7 @@ move $t1, $t0 sw $t1, -16($fp) sw $t0, -60($fp) sw $t1, -16($fp) -end__782: +end__805: lw $t0, -16($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -4821,17 +4821,17 @@ sw $t1, -8($fp) sw $t2, -20($fp) sw $t3, -16($fp) sw $t4, -24($fp) -start__842: +start__868: lw $t0, -4($fp) lw $t1, -8($fp) lw $t2, -28($fp) # local_evolve_CellularAutomaton_internal_6 <- local_evolve_CellularAutomaton_position_0 < local_evolve_CellularAutomaton_num_1 slt $t2, $t0, $t1 -# If not local_evolve_CellularAutomaton_internal_6 goto end__842 +# If not local_evolve_CellularAutomaton_internal_6 goto end__868 sw $t0, -4($fp) sw $t1, -8($fp) sw $t2, -28($fp) -beqz $t2, end__842 +beqz $t2, end__868 lw $t0, -0($fp) lw $t1, -32($fp) # Find the actual name in the dispatch table @@ -4895,15 +4895,15 @@ bnez $a1, mismatch_19 li $v0, 1 end_19: move $t2, $v0 -# If not local_evolve_CellularAutomaton_internal_9 goto continue__854 +# If not local_evolve_CellularAutomaton_internal_9 goto continue__881 sw $t0, -32($fp) sw $t1, -16($fp) sw $t2, -40($fp) sw $t3, -44($fp) -beqz $t2, continue__854 +beqz $t2, continue__881 la $a0, dispatch_error j .raise -continue__854: +continue__881: lw $t0, -36($fp) # Static Dispatch of the method concat sw $fp, ($sp) @@ -4959,8 +4959,8 @@ sw $t2, -4($fp) sw $t3, -48($fp) sw $t4, -52($fp) sw $t5, -24($fp) -j start__842 -end__842: +j start__868 +end__868: lw $t0, -16($fp) lw $t1, -0($fp) # self . population_map <- SET local_evolve_CellularAutomaton_temp_3 @@ -6174,191 +6174,191 @@ lw $t2, -204($fp) # local_option_CellularAutomaton_internal_50 <- local_option_CellularAutomaton_num_0 = 1 li $t9, 1 seq $t2, $t1, $t9 -# If local_option_CellularAutomaton_internal_50 goto true__1030 +# If local_option_CellularAutomaton_internal_50 goto true__1082 sw $t0, -200($fp) sw $t1, -4($fp) sw $t2, -204($fp) -bnez $t2, true__1030 +bnez $t2, true__1082 lw $t0, -4($fp) lw $t1, -212($fp) # local_option_CellularAutomaton_internal_52 <- local_option_CellularAutomaton_num_0 = 2 li $t9, 2 seq $t1, $t0, $t9 -# If local_option_CellularAutomaton_internal_52 goto true__1034 +# If local_option_CellularAutomaton_internal_52 goto true__1086 sw $t0, -4($fp) sw $t1, -212($fp) -bnez $t1, true__1034 +bnez $t1, true__1086 lw $t0, -4($fp) lw $t1, -220($fp) # local_option_CellularAutomaton_internal_54 <- local_option_CellularAutomaton_num_0 = 3 li $t9, 3 seq $t1, $t0, $t9 -# If local_option_CellularAutomaton_internal_54 goto true__1038 +# If local_option_CellularAutomaton_internal_54 goto true__1090 sw $t0, -4($fp) sw $t1, -220($fp) -bnez $t1, true__1038 +bnez $t1, true__1090 lw $t0, -4($fp) lw $t1, -228($fp) # local_option_CellularAutomaton_internal_56 <- local_option_CellularAutomaton_num_0 = 4 li $t9, 4 seq $t1, $t0, $t9 -# If local_option_CellularAutomaton_internal_56 goto true__1042 +# If local_option_CellularAutomaton_internal_56 goto true__1094 sw $t0, -4($fp) sw $t1, -228($fp) -bnez $t1, true__1042 +bnez $t1, true__1094 lw $t0, -4($fp) lw $t1, -236($fp) # local_option_CellularAutomaton_internal_58 <- local_option_CellularAutomaton_num_0 = 5 li $t9, 5 seq $t1, $t0, $t9 -# If local_option_CellularAutomaton_internal_58 goto true__1046 +# If local_option_CellularAutomaton_internal_58 goto true__1098 sw $t0, -4($fp) sw $t1, -236($fp) -bnez $t1, true__1046 +bnez $t1, true__1098 lw $t0, -4($fp) lw $t1, -244($fp) # local_option_CellularAutomaton_internal_60 <- local_option_CellularAutomaton_num_0 = 6 li $t9, 6 seq $t1, $t0, $t9 -# If local_option_CellularAutomaton_internal_60 goto true__1050 +# If local_option_CellularAutomaton_internal_60 goto true__1102 sw $t0, -4($fp) sw $t1, -244($fp) -bnez $t1, true__1050 +bnez $t1, true__1102 lw $t0, -4($fp) lw $t1, -252($fp) # local_option_CellularAutomaton_internal_62 <- local_option_CellularAutomaton_num_0 = 7 li $t9, 7 seq $t1, $t0, $t9 -# If local_option_CellularAutomaton_internal_62 goto true__1054 +# If local_option_CellularAutomaton_internal_62 goto true__1106 sw $t0, -4($fp) sw $t1, -252($fp) -bnez $t1, true__1054 +bnez $t1, true__1106 lw $t0, -4($fp) lw $t1, -260($fp) # local_option_CellularAutomaton_internal_64 <- local_option_CellularAutomaton_num_0 = 8 li $t9, 8 seq $t1, $t0, $t9 -# If local_option_CellularAutomaton_internal_64 goto true__1058 +# If local_option_CellularAutomaton_internal_64 goto true__1110 sw $t0, -4($fp) sw $t1, -260($fp) -bnez $t1, true__1058 +bnez $t1, true__1110 lw $t0, -4($fp) lw $t1, -268($fp) # local_option_CellularAutomaton_internal_66 <- local_option_CellularAutomaton_num_0 = 9 li $t9, 9 seq $t1, $t0, $t9 -# If local_option_CellularAutomaton_internal_66 goto true__1062 +# If local_option_CellularAutomaton_internal_66 goto true__1114 sw $t0, -4($fp) sw $t1, -268($fp) -bnez $t1, true__1062 +bnez $t1, true__1114 lw $t0, -4($fp) lw $t1, -276($fp) # local_option_CellularAutomaton_internal_68 <- local_option_CellularAutomaton_num_0 = 10 li $t9, 10 seq $t1, $t0, $t9 -# If local_option_CellularAutomaton_internal_68 goto true__1066 +# If local_option_CellularAutomaton_internal_68 goto true__1118 sw $t0, -4($fp) sw $t1, -276($fp) -bnez $t1, true__1066 +bnez $t1, true__1118 lw $t0, -4($fp) lw $t1, -284($fp) # local_option_CellularAutomaton_internal_70 <- local_option_CellularAutomaton_num_0 = 11 li $t9, 11 seq $t1, $t0, $t9 -# If local_option_CellularAutomaton_internal_70 goto true__1070 +# If local_option_CellularAutomaton_internal_70 goto true__1122 sw $t0, -4($fp) sw $t1, -284($fp) -bnez $t1, true__1070 +bnez $t1, true__1122 lw $t0, -4($fp) lw $t1, -292($fp) # local_option_CellularAutomaton_internal_72 <- local_option_CellularAutomaton_num_0 = 12 li $t9, 12 seq $t1, $t0, $t9 -# If local_option_CellularAutomaton_internal_72 goto true__1074 +# If local_option_CellularAutomaton_internal_72 goto true__1126 sw $t0, -4($fp) sw $t1, -292($fp) -bnez $t1, true__1074 +bnez $t1, true__1126 lw $t0, -4($fp) lw $t1, -300($fp) # local_option_CellularAutomaton_internal_74 <- local_option_CellularAutomaton_num_0 = 13 li $t9, 13 seq $t1, $t0, $t9 -# If local_option_CellularAutomaton_internal_74 goto true__1078 +# If local_option_CellularAutomaton_internal_74 goto true__1130 sw $t0, -4($fp) sw $t1, -300($fp) -bnez $t1, true__1078 +bnez $t1, true__1130 lw $t0, -4($fp) lw $t1, -308($fp) # local_option_CellularAutomaton_internal_76 <- local_option_CellularAutomaton_num_0 = 14 li $t9, 14 seq $t1, $t0, $t9 -# If local_option_CellularAutomaton_internal_76 goto true__1082 +# If local_option_CellularAutomaton_internal_76 goto true__1134 sw $t0, -4($fp) sw $t1, -308($fp) -bnez $t1, true__1082 +bnez $t1, true__1134 lw $t0, -4($fp) lw $t1, -316($fp) # local_option_CellularAutomaton_internal_78 <- local_option_CellularAutomaton_num_0 = 15 li $t9, 15 seq $t1, $t0, $t9 -# If local_option_CellularAutomaton_internal_78 goto true__1086 +# If local_option_CellularAutomaton_internal_78 goto true__1138 sw $t0, -4($fp) sw $t1, -316($fp) -bnez $t1, true__1086 +bnez $t1, true__1138 lw $t0, -4($fp) lw $t1, -324($fp) # local_option_CellularAutomaton_internal_80 <- local_option_CellularAutomaton_num_0 = 16 li $t9, 16 seq $t1, $t0, $t9 -# If local_option_CellularAutomaton_internal_80 goto true__1090 +# If local_option_CellularAutomaton_internal_80 goto true__1142 sw $t0, -4($fp) sw $t1, -324($fp) -bnez $t1, true__1090 +bnez $t1, true__1142 lw $t0, -4($fp) lw $t1, -332($fp) # local_option_CellularAutomaton_internal_82 <- local_option_CellularAutomaton_num_0 = 17 li $t9, 17 seq $t1, $t0, $t9 -# If local_option_CellularAutomaton_internal_82 goto true__1094 +# If local_option_CellularAutomaton_internal_82 goto true__1146 sw $t0, -4($fp) sw $t1, -332($fp) -bnez $t1, true__1094 +bnez $t1, true__1146 lw $t0, -4($fp) lw $t1, -340($fp) # local_option_CellularAutomaton_internal_84 <- local_option_CellularAutomaton_num_0 = 18 li $t9, 18 seq $t1, $t0, $t9 -# If local_option_CellularAutomaton_internal_84 goto true__1098 +# If local_option_CellularAutomaton_internal_84 goto true__1150 sw $t0, -4($fp) sw $t1, -340($fp) -bnez $t1, true__1098 +bnez $t1, true__1150 lw $t0, -4($fp) lw $t1, -348($fp) # local_option_CellularAutomaton_internal_86 <- local_option_CellularAutomaton_num_0 = 19 li $t9, 19 seq $t1, $t0, $t9 -# If local_option_CellularAutomaton_internal_86 goto true__1102 +# If local_option_CellularAutomaton_internal_86 goto true__1154 sw $t0, -4($fp) sw $t1, -348($fp) -bnez $t1, true__1102 +bnez $t1, true__1154 lw $t0, -4($fp) lw $t1, -356($fp) # local_option_CellularAutomaton_internal_88 <- local_option_CellularAutomaton_num_0 = 20 li $t9, 20 seq $t1, $t0, $t9 -# If local_option_CellularAutomaton_internal_88 goto true__1106 +# If local_option_CellularAutomaton_internal_88 goto true__1158 sw $t0, -4($fp) sw $t1, -356($fp) -bnez $t1, true__1106 +bnez $t1, true__1158 lw $t0, -4($fp) lw $t1, -364($fp) # local_option_CellularAutomaton_internal_90 <- local_option_CellularAutomaton_num_0 = 21 li $t9, 21 seq $t1, $t0, $t9 -# If local_option_CellularAutomaton_internal_90 goto true__1110 +# If local_option_CellularAutomaton_internal_90 goto true__1162 sw $t0, -4($fp) sw $t1, -364($fp) -bnez $t1, true__1110 +bnez $t1, true__1162 lw $t0, -372($fp) # Saves in local_option_CellularAutomaton_internal_92 data_57 la $t0, data_57 @@ -6368,8 +6368,8 @@ move $t1, $t0 sw $t1, -368($fp) sw $t0, -372($fp) sw $t1, -368($fp) -j end__1110 -true__1110: +j end__1162 +true__1162: lw $t0, -376($fp) # Saves in local_option_CellularAutomaton_internal_93 data_58 la $t0, data_58 @@ -6379,7 +6379,7 @@ move $t1, $t0 sw $t1, -368($fp) sw $t0, -376($fp) sw $t1, -368($fp) -end__1110: +end__1162: lw $t0, -368($fp) lw $t1, -360($fp) # Moving local_option_CellularAutomaton_internal_91 to local_option_CellularAutomaton_internal_89 @@ -6387,8 +6387,8 @@ move $t1, $t0 sw $t1, -360($fp) sw $t0, -368($fp) sw $t1, -360($fp) -j end__1106 -true__1106: +j end__1158 +true__1158: lw $t0, -380($fp) # Saves in local_option_CellularAutomaton_internal_94 data_59 la $t0, data_59 @@ -6398,7 +6398,7 @@ move $t1, $t0 sw $t1, -360($fp) sw $t0, -380($fp) sw $t1, -360($fp) -end__1106: +end__1158: lw $t0, -360($fp) lw $t1, -352($fp) # Moving local_option_CellularAutomaton_internal_89 to local_option_CellularAutomaton_internal_87 @@ -6406,8 +6406,8 @@ move $t1, $t0 sw $t1, -352($fp) sw $t0, -360($fp) sw $t1, -352($fp) -j end__1102 -true__1102: +j end__1154 +true__1154: lw $t0, -384($fp) # Saves in local_option_CellularAutomaton_internal_95 data_60 la $t0, data_60 @@ -6417,7 +6417,7 @@ move $t1, $t0 sw $t1, -352($fp) sw $t0, -384($fp) sw $t1, -352($fp) -end__1102: +end__1154: lw $t0, -352($fp) lw $t1, -344($fp) # Moving local_option_CellularAutomaton_internal_87 to local_option_CellularAutomaton_internal_85 @@ -6425,8 +6425,8 @@ move $t1, $t0 sw $t1, -344($fp) sw $t0, -352($fp) sw $t1, -344($fp) -j end__1098 -true__1098: +j end__1150 +true__1150: lw $t0, -388($fp) # Saves in local_option_CellularAutomaton_internal_96 data_61 la $t0, data_61 @@ -6436,7 +6436,7 @@ move $t1, $t0 sw $t1, -344($fp) sw $t0, -388($fp) sw $t1, -344($fp) -end__1098: +end__1150: lw $t0, -344($fp) lw $t1, -336($fp) # Moving local_option_CellularAutomaton_internal_85 to local_option_CellularAutomaton_internal_83 @@ -6444,8 +6444,8 @@ move $t1, $t0 sw $t1, -336($fp) sw $t0, -344($fp) sw $t1, -336($fp) -j end__1094 -true__1094: +j end__1146 +true__1146: lw $t0, -392($fp) # Saves in local_option_CellularAutomaton_internal_97 data_62 la $t0, data_62 @@ -6455,7 +6455,7 @@ move $t1, $t0 sw $t1, -336($fp) sw $t0, -392($fp) sw $t1, -336($fp) -end__1094: +end__1146: lw $t0, -336($fp) lw $t1, -328($fp) # Moving local_option_CellularAutomaton_internal_83 to local_option_CellularAutomaton_internal_81 @@ -6463,8 +6463,8 @@ move $t1, $t0 sw $t1, -328($fp) sw $t0, -336($fp) sw $t1, -328($fp) -j end__1090 -true__1090: +j end__1142 +true__1142: lw $t0, -396($fp) # Saves in local_option_CellularAutomaton_internal_98 data_63 la $t0, data_63 @@ -6474,7 +6474,7 @@ move $t1, $t0 sw $t1, -328($fp) sw $t0, -396($fp) sw $t1, -328($fp) -end__1090: +end__1142: lw $t0, -328($fp) lw $t1, -320($fp) # Moving local_option_CellularAutomaton_internal_81 to local_option_CellularAutomaton_internal_79 @@ -6482,8 +6482,8 @@ move $t1, $t0 sw $t1, -320($fp) sw $t0, -328($fp) sw $t1, -320($fp) -j end__1086 -true__1086: +j end__1138 +true__1138: lw $t0, -400($fp) # Saves in local_option_CellularAutomaton_internal_99 data_64 la $t0, data_64 @@ -6493,7 +6493,7 @@ move $t1, $t0 sw $t1, -320($fp) sw $t0, -400($fp) sw $t1, -320($fp) -end__1086: +end__1138: lw $t0, -320($fp) lw $t1, -312($fp) # Moving local_option_CellularAutomaton_internal_79 to local_option_CellularAutomaton_internal_77 @@ -6501,8 +6501,8 @@ move $t1, $t0 sw $t1, -312($fp) sw $t0, -320($fp) sw $t1, -312($fp) -j end__1082 -true__1082: +j end__1134 +true__1134: lw $t0, -404($fp) # Saves in local_option_CellularAutomaton_internal_100 data_65 la $t0, data_65 @@ -6512,7 +6512,7 @@ move $t1, $t0 sw $t1, -312($fp) sw $t0, -404($fp) sw $t1, -312($fp) -end__1082: +end__1134: lw $t0, -312($fp) lw $t1, -304($fp) # Moving local_option_CellularAutomaton_internal_77 to local_option_CellularAutomaton_internal_75 @@ -6520,8 +6520,8 @@ move $t1, $t0 sw $t1, -304($fp) sw $t0, -312($fp) sw $t1, -304($fp) -j end__1078 -true__1078: +j end__1130 +true__1130: lw $t0, -408($fp) # Saves in local_option_CellularAutomaton_internal_101 data_66 la $t0, data_66 @@ -6531,7 +6531,7 @@ move $t1, $t0 sw $t1, -304($fp) sw $t0, -408($fp) sw $t1, -304($fp) -end__1078: +end__1130: lw $t0, -304($fp) lw $t1, -296($fp) # Moving local_option_CellularAutomaton_internal_75 to local_option_CellularAutomaton_internal_73 @@ -6539,8 +6539,8 @@ move $t1, $t0 sw $t1, -296($fp) sw $t0, -304($fp) sw $t1, -296($fp) -j end__1074 -true__1074: +j end__1126 +true__1126: lw $t0, -412($fp) # Saves in local_option_CellularAutomaton_internal_102 data_67 la $t0, data_67 @@ -6550,7 +6550,7 @@ move $t1, $t0 sw $t1, -296($fp) sw $t0, -412($fp) sw $t1, -296($fp) -end__1074: +end__1126: lw $t0, -296($fp) lw $t1, -288($fp) # Moving local_option_CellularAutomaton_internal_73 to local_option_CellularAutomaton_internal_71 @@ -6558,8 +6558,8 @@ move $t1, $t0 sw $t1, -288($fp) sw $t0, -296($fp) sw $t1, -288($fp) -j end__1070 -true__1070: +j end__1122 +true__1122: lw $t0, -416($fp) # Saves in local_option_CellularAutomaton_internal_103 data_68 la $t0, data_68 @@ -6569,7 +6569,7 @@ move $t1, $t0 sw $t1, -288($fp) sw $t0, -416($fp) sw $t1, -288($fp) -end__1070: +end__1122: lw $t0, -288($fp) lw $t1, -280($fp) # Moving local_option_CellularAutomaton_internal_71 to local_option_CellularAutomaton_internal_69 @@ -6577,8 +6577,8 @@ move $t1, $t0 sw $t1, -280($fp) sw $t0, -288($fp) sw $t1, -280($fp) -j end__1066 -true__1066: +j end__1118 +true__1118: lw $t0, -420($fp) # Saves in local_option_CellularAutomaton_internal_104 data_69 la $t0, data_69 @@ -6588,7 +6588,7 @@ move $t1, $t0 sw $t1, -280($fp) sw $t0, -420($fp) sw $t1, -280($fp) -end__1066: +end__1118: lw $t0, -280($fp) lw $t1, -272($fp) # Moving local_option_CellularAutomaton_internal_69 to local_option_CellularAutomaton_internal_67 @@ -6596,8 +6596,8 @@ move $t1, $t0 sw $t1, -272($fp) sw $t0, -280($fp) sw $t1, -272($fp) -j end__1062 -true__1062: +j end__1114 +true__1114: lw $t0, -424($fp) # Saves in local_option_CellularAutomaton_internal_105 data_70 la $t0, data_70 @@ -6607,7 +6607,7 @@ move $t1, $t0 sw $t1, -272($fp) sw $t0, -424($fp) sw $t1, -272($fp) -end__1062: +end__1114: lw $t0, -272($fp) lw $t1, -264($fp) # Moving local_option_CellularAutomaton_internal_67 to local_option_CellularAutomaton_internal_65 @@ -6615,8 +6615,8 @@ move $t1, $t0 sw $t1, -264($fp) sw $t0, -272($fp) sw $t1, -264($fp) -j end__1058 -true__1058: +j end__1110 +true__1110: lw $t0, -428($fp) # Saves in local_option_CellularAutomaton_internal_106 data_71 la $t0, data_71 @@ -6626,7 +6626,7 @@ move $t1, $t0 sw $t1, -264($fp) sw $t0, -428($fp) sw $t1, -264($fp) -end__1058: +end__1110: lw $t0, -264($fp) lw $t1, -256($fp) # Moving local_option_CellularAutomaton_internal_65 to local_option_CellularAutomaton_internal_63 @@ -6634,8 +6634,8 @@ move $t1, $t0 sw $t1, -256($fp) sw $t0, -264($fp) sw $t1, -256($fp) -j end__1054 -true__1054: +j end__1106 +true__1106: lw $t0, -432($fp) # Saves in local_option_CellularAutomaton_internal_107 data_72 la $t0, data_72 @@ -6645,7 +6645,7 @@ move $t1, $t0 sw $t1, -256($fp) sw $t0, -432($fp) sw $t1, -256($fp) -end__1054: +end__1106: lw $t0, -256($fp) lw $t1, -248($fp) # Moving local_option_CellularAutomaton_internal_63 to local_option_CellularAutomaton_internal_61 @@ -6653,8 +6653,8 @@ move $t1, $t0 sw $t1, -248($fp) sw $t0, -256($fp) sw $t1, -248($fp) -j end__1050 -true__1050: +j end__1102 +true__1102: lw $t0, -436($fp) # Saves in local_option_CellularAutomaton_internal_108 data_73 la $t0, data_73 @@ -6664,7 +6664,7 @@ move $t1, $t0 sw $t1, -248($fp) sw $t0, -436($fp) sw $t1, -248($fp) -end__1050: +end__1102: lw $t0, -248($fp) lw $t1, -240($fp) # Moving local_option_CellularAutomaton_internal_61 to local_option_CellularAutomaton_internal_59 @@ -6672,8 +6672,8 @@ move $t1, $t0 sw $t1, -240($fp) sw $t0, -248($fp) sw $t1, -240($fp) -j end__1046 -true__1046: +j end__1098 +true__1098: lw $t0, -440($fp) # Saves in local_option_CellularAutomaton_internal_109 data_74 la $t0, data_74 @@ -6683,7 +6683,7 @@ move $t1, $t0 sw $t1, -240($fp) sw $t0, -440($fp) sw $t1, -240($fp) -end__1046: +end__1098: lw $t0, -240($fp) lw $t1, -232($fp) # Moving local_option_CellularAutomaton_internal_59 to local_option_CellularAutomaton_internal_57 @@ -6691,8 +6691,8 @@ move $t1, $t0 sw $t1, -232($fp) sw $t0, -240($fp) sw $t1, -232($fp) -j end__1042 -true__1042: +j end__1094 +true__1094: lw $t0, -444($fp) # Saves in local_option_CellularAutomaton_internal_110 data_75 la $t0, data_75 @@ -6702,7 +6702,7 @@ move $t1, $t0 sw $t1, -232($fp) sw $t0, -444($fp) sw $t1, -232($fp) -end__1042: +end__1094: lw $t0, -232($fp) lw $t1, -224($fp) # Moving local_option_CellularAutomaton_internal_57 to local_option_CellularAutomaton_internal_55 @@ -6710,8 +6710,8 @@ move $t1, $t0 sw $t1, -224($fp) sw $t0, -232($fp) sw $t1, -224($fp) -j end__1038 -true__1038: +j end__1090 +true__1090: lw $t0, -448($fp) # Saves in local_option_CellularAutomaton_internal_111 data_76 la $t0, data_76 @@ -6721,7 +6721,7 @@ move $t1, $t0 sw $t1, -224($fp) sw $t0, -448($fp) sw $t1, -224($fp) -end__1038: +end__1090: lw $t0, -224($fp) lw $t1, -216($fp) # Moving local_option_CellularAutomaton_internal_55 to local_option_CellularAutomaton_internal_53 @@ -6729,8 +6729,8 @@ move $t1, $t0 sw $t1, -216($fp) sw $t0, -224($fp) sw $t1, -216($fp) -j end__1034 -true__1034: +j end__1086 +true__1086: lw $t0, -452($fp) # Saves in local_option_CellularAutomaton_internal_112 data_77 la $t0, data_77 @@ -6740,7 +6740,7 @@ move $t1, $t0 sw $t1, -216($fp) sw $t0, -452($fp) sw $t1, -216($fp) -end__1034: +end__1086: lw $t0, -216($fp) lw $t1, -208($fp) # Moving local_option_CellularAutomaton_internal_53 to local_option_CellularAutomaton_internal_51 @@ -6748,8 +6748,8 @@ move $t1, $t0 sw $t1, -208($fp) sw $t0, -216($fp) sw $t1, -208($fp) -j end__1030 -true__1030: +j end__1082 +true__1082: lw $t0, -456($fp) # Saves in local_option_CellularAutomaton_internal_113 data_78 la $t0, data_78 @@ -6759,7 +6759,7 @@ move $t1, $t0 sw $t1, -208($fp) sw $t0, -456($fp) sw $t1, -208($fp) -end__1030: +end__1082: lw $t0, -208($fp) lw $t1, -460($fp) # Moving local_option_CellularAutomaton_internal_51 to local_option_CellularAutomaton_internal_114 @@ -6997,25 +6997,25 @@ bnez $a1, mismatch_20 li $v0, 1 end_20: move $t3, $v0 -# If local_prompt_CellularAutomaton_internal_9 goto true__1321 +# If local_prompt_CellularAutomaton_internal_9 goto true__1377 sw $t0, -36($fp) sw $t1, -44($fp) sw $t2, -4($fp) sw $t3, -40($fp) -bnez $t3, true__1321 +bnez $t3, true__1377 lw $t0, -48($fp) # Moving 1 to local_prompt_CellularAutomaton_internal_11 li $t0, 1 sw $t0, -48($fp) sw $t0, -48($fp) -j end__1321 -true__1321: +j end__1377 +true__1377: lw $t0, -48($fp) # Moving 0 to local_prompt_CellularAutomaton_internal_11 li $t0, 0 sw $t0, -48($fp) sw $t0, -48($fp) -end__1321: +end__1377: lw $t0, -48($fp) lw $t1, -52($fp) # Moving local_prompt_CellularAutomaton_internal_11 to local_prompt_CellularAutomaton_internal_12 @@ -7249,25 +7249,25 @@ bnez $a1, mismatch_21 li $v0, 1 end_21: move $t3, $v0 -# If local_prompt2_CellularAutomaton_internal_9 goto true__1366 +# If local_prompt2_CellularAutomaton_internal_9 goto true__1426 sw $t0, -36($fp) sw $t1, -4($fp) sw $t2, -44($fp) sw $t3, -40($fp) -bnez $t3, true__1366 +bnez $t3, true__1426 lw $t0, -48($fp) # Moving 0 to local_prompt2_CellularAutomaton_internal_11 li $t0, 0 sw $t0, -48($fp) sw $t0, -48($fp) -j end__1366 -true__1366: +j end__1426 +true__1426: lw $t0, -48($fp) # Moving 1 to local_prompt2_CellularAutomaton_internal_11 li $t0, 1 sw $t0, -48($fp) sw $t0, -48($fp) -end__1366: +end__1426: lw $t0, -48($fp) lw $t1, -52($fp) # Moving local_prompt2_CellularAutomaton_internal_11 to local_prompt2_CellularAutomaton_internal_12 @@ -7507,7 +7507,7 @@ sw $t9, 0($v0) move $t1, $v0 sw $t0, -28($fp) sw $t1, -32($fp) -start__1412: +start__1474: lw $t0, -0($fp) lw $t1, -36($fp) # Find the actual name in the dispatch table @@ -7538,9 +7538,9 @@ lw $fp, ($sp) lw $t0, -36($fp) # saves the return value move $t0, $v0 -# If not local_main_Main_internal_8 goto end__1412 +# If not local_main_Main_internal_8 goto end__1474 sw $t0, -36($fp) -beqz $t0, end__1412 +beqz $t0, end__1474 lw $t0, -4($fp) # Moving 1 to local_main_Main_continue_0 li $t0, 1 @@ -7647,14 +7647,14 @@ bnez $a1, mismatch_22 li $v0, 1 end_22: move $t1, $v0 -# If not local_main_Main_internal_12 goto continue__1428 +# If not local_main_Main_internal_12 goto continue__1492 sw $t0, -44($fp) sw $t1, -52($fp) sw $t2, -56($fp) -beqz $t1, continue__1428 +beqz $t1, continue__1492 la $a0, dispatch_error j .raise -continue__1428: +continue__1492: lw $t0, -44($fp) lw $t1, -48($fp) # Find the actual name in the dispatch table @@ -7723,16 +7723,16 @@ bnez $a1, mismatch_23 li $v0, 1 end_23: move $t3, $v0 -# If not local_main_Main_internal_16 goto continue__1443 +# If not local_main_Main_internal_16 goto continue__1507 sw $t0, -48($fp) sw $t1, -0($fp) sw $t2, -60($fp) sw $t3, -68($fp) sw $t4, -72($fp) -beqz $t3, continue__1443 +beqz $t3, continue__1507 la $a0, dispatch_error j .raise -continue__1443: +continue__1507: lw $t0, -60($fp) lw $t1, -64($fp) # Find the actual name in the dispatch table @@ -7774,11 +7774,11 @@ sw $t9, 0($v0) move $t1, $v0 sw $t0, -64($fp) sw $t1, -76($fp) -start__1453: +start__1517: lw $t0, -4($fp) -# If not local_main_Main_continue_0 goto end__1453 +# If not local_main_Main_continue_0 goto end__1517 sw $t0, -4($fp) -beqz $t0, end__1453 +beqz $t0, end__1517 lw $t0, -0($fp) lw $t1, -80($fp) # Find the actual name in the dispatch table @@ -7809,9 +7809,9 @@ lw $fp, ($sp) lw $t0, -80($fp) # saves the return value move $t0, $v0 -# If local_main_Main_internal_19 goto true__1459 +# If local_main_Main_internal_19 goto true__1524 sw $t0, -80($fp) -bnez $t0, true__1459 +bnez $t0, true__1524 lw $t0, -4($fp) # Moving 0 to local_main_Main_continue_0 li $t0, 0 @@ -7822,8 +7822,8 @@ li $t1, 0 sw $t1, -84($fp) sw $t0, -4($fp) sw $t1, -84($fp) -j end__1459 -true__1459: +j end__1524 +true__1524: lw $t0, -0($fp) lw $t1, -88($fp) # local_main_Main_cells_21 <- GET self . cells @@ -7855,15 +7855,15 @@ bnez $a1, mismatch_24 li $v0, 1 end_24: move $t2, $v0 -# If not local_main_Main_internal_23 goto continue__1469 +# If not local_main_Main_internal_23 goto continue__1534 sw $t0, -0($fp) sw $t1, -88($fp) sw $t2, -96($fp) sw $t3, -100($fp) -beqz $t2, continue__1469 +beqz $t2, continue__1534 la $a0, dispatch_error j .raise -continue__1469: +continue__1534: lw $t0, -88($fp) lw $t1, -92($fp) # Find the actual name in the dispatch table @@ -7925,16 +7925,16 @@ bnez $a1, mismatch_25 li $v0, 1 end_25: move $t3, $v0 -# If not local_main_Main_internal_27 goto continue__1483 +# If not local_main_Main_internal_27 goto continue__1548 sw $t0, -92($fp) sw $t1, -0($fp) sw $t2, -104($fp) sw $t3, -112($fp) sw $t4, -116($fp) -beqz $t3, continue__1483 +beqz $t3, continue__1548 la $a0, dispatch_error j .raise -continue__1483: +continue__1548: lw $t0, -104($fp) lw $t1, -108($fp) # Find the actual name in the dispatch table @@ -7976,7 +7976,7 @@ sw $t2, -84($fp) sw $t0, -108($fp) sw $t1, -120($fp) sw $t2, -84($fp) -end__1459: +end__1524: lw $t0, -84($fp) lw $t1, -76($fp) # Moving local_main_Main_internal_20 to local_main_Main_internal_18 @@ -7984,8 +7984,8 @@ move $t1, $t0 sw $t1, -76($fp) sw $t0, -84($fp) sw $t1, -76($fp) -j start__1453 -end__1453: +j start__1517 +end__1517: lw $t0, -76($fp) lw $t1, -124($fp) # Moving local_main_Main_internal_18 to local_main_Main_internal_30 @@ -7998,8 +7998,8 @@ sw $t2, -32($fp) sw $t0, -76($fp) sw $t1, -124($fp) sw $t2, -32($fp) -j start__1412 -end__1412: +j start__1474 +end__1474: lw $t0, -0($fp) lw $t1, -128($fp) # Moving self to local_main_Main_internal_31 diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips index 788addc7..7aa79f63 100644 --- a/tests/codegen/list.mips +++ b/tests/codegen/list.mips @@ -1299,14 +1299,14 @@ bnez $a1, mismatch_6 li $v0, 1 end_6: move $t1, $v0 -# If not local_cons_List_internal_2 goto continue__76 +# If not local_cons_List_internal_2 goto continue__78 sw $t0, -8($fp) sw $t1, -16($fp) sw $t2, -20($fp) -beqz $t1, continue__76 +beqz $t1, continue__78 la $a0, dispatch_error j .raise -continue__76: +continue__78: lw $t0, -8($fp) lw $t1, -12($fp) # Find the actual name in the dispatch table @@ -1596,14 +1596,14 @@ bnez $a1, mismatch_7 li $v0, 1 end_7: move $t1, $v0 -# If not local_print_list_Main_internal_1 goto continue__133 +# If not local_print_list_Main_internal_1 goto continue__135 sw $t0, -0($fp) sw $t1, -12($fp) sw $t2, -16($fp) -beqz $t1, continue__133 +beqz $t1, continue__135 la $a0, dispatch_error j .raise -continue__133: +continue__135: lw $t0, -0($fp) lw $t1, -8($fp) # Find the actual name in the dispatch table @@ -1634,9 +1634,9 @@ lw $fp, ($sp) lw $t0, -8($fp) # saves the return value move $t0, $v0 -# If local_print_list_Main_internal_0 goto true__143 +# If local_print_list_Main_internal_0 goto true__145 sw $t0, -8($fp) -bnez $t0, true__143 +bnez $t0, true__145 lw $t0, -0($fp) lw $t1, -28($fp) # local_print_list_Main_internal_5 <- Type of l @@ -1665,14 +1665,14 @@ bnez $a1, mismatch_8 li $v0, 1 end_8: move $t1, $v0 -# If not local_print_list_Main_internal_5 goto continue__147 +# If not local_print_list_Main_internal_5 goto continue__150 sw $t0, -0($fp) sw $t1, -28($fp) sw $t2, -32($fp) -beqz $t1, continue__147 +beqz $t1, continue__150 la $a0, dispatch_error j .raise -continue__147: +continue__150: lw $t0, -0($fp) lw $t1, -24($fp) # Find the actual name in the dispatch table @@ -1803,15 +1803,15 @@ bnez $a1, mismatch_9 li $v0, 1 end_9: move $t2, $v0 -# If not local_print_list_Main_internal_11 goto continue__168 +# If not local_print_list_Main_internal_11 goto continue__173 sw $t0, -44($fp) sw $t1, -0($fp) sw $t2, -52($fp) sw $t3, -56($fp) -beqz $t2, continue__168 +beqz $t2, continue__173 la $a0, dispatch_error j .raise -continue__168: +continue__173: lw $t0, -0($fp) lw $t1, -48($fp) # Find the actual name in the dispatch table @@ -1887,8 +1887,8 @@ sw $t2, -20($fp) sw $t0, -60($fp) sw $t1, -64($fp) sw $t2, -20($fp) -j end__143 -true__143: +j end__145 +true__145: lw $t0, -68($fp) # Saves in local_print_list_Main_internal_15 data_2 la $t0, data_2 @@ -1932,7 +1932,7 @@ move $t1, $t0 sw $t1, -20($fp) sw $t0, -72($fp) sw $t1, -20($fp) -end__143: +end__145: lw $t0, -20($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -2051,14 +2051,14 @@ bnez $a1, mismatch_10 li $v0, 1 end_10: move $t1, $v0 -# If not local_main_Main_internal_2 goto continue__202 +# If not local_main_Main_internal_2 goto continue__208 sw $t0, -4($fp) sw $t1, -12($fp) sw $t2, -16($fp) -beqz $t1, continue__202 +beqz $t1, continue__208 la $a0, dispatch_error j .raise -continue__202: +continue__208: lw $t0, -4($fp) lw $t1, -8($fp) # Find the actual name in the dispatch table @@ -2120,14 +2120,14 @@ bnez $a1, mismatch_11 li $v0, 1 end_11: move $t1, $v0 -# If not local_main_Main_internal_5 goto continue__215 +# If not local_main_Main_internal_5 goto continue__221 sw $t0, -8($fp) sw $t1, -24($fp) sw $t2, -28($fp) -beqz $t1, continue__215 +beqz $t1, continue__221 la $a0, dispatch_error j .raise -continue__215: +continue__221: lw $t0, -8($fp) lw $t1, -20($fp) # Find the actual name in the dispatch table @@ -2189,14 +2189,14 @@ bnez $a1, mismatch_12 li $v0, 1 end_12: move $t1, $v0 -# If not local_main_Main_internal_8 goto continue__228 +# If not local_main_Main_internal_8 goto continue__234 sw $t0, -20($fp) sw $t1, -36($fp) sw $t2, -40($fp) -beqz $t1, continue__228 +beqz $t1, continue__234 la $a0, dispatch_error j .raise -continue__228: +continue__234: lw $t0, -20($fp) lw $t1, -32($fp) # Find the actual name in the dispatch table @@ -2258,14 +2258,14 @@ bnez $a1, mismatch_13 li $v0, 1 end_13: move $t1, $v0 -# If not local_main_Main_internal_11 goto continue__241 +# If not local_main_Main_internal_11 goto continue__247 sw $t0, -32($fp) sw $t1, -48($fp) sw $t2, -52($fp) -beqz $t1, continue__241 +beqz $t1, continue__247 la $a0, dispatch_error j .raise -continue__241: +continue__247: lw $t0, -32($fp) lw $t1, -44($fp) # Find the actual name in the dispatch table @@ -2327,14 +2327,14 @@ bnez $a1, mismatch_14 li $v0, 1 end_14: move $t1, $v0 -# If not local_main_Main_internal_14 goto continue__254 +# If not local_main_Main_internal_14 goto continue__260 sw $t0, -44($fp) sw $t1, -60($fp) sw $t2, -64($fp) -beqz $t1, continue__254 +beqz $t1, continue__260 la $a0, dispatch_error j .raise -continue__254: +continue__260: lw $t0, -44($fp) lw $t1, -56($fp) # Find the actual name in the dispatch table @@ -2384,7 +2384,7 @@ move $t2, $v0 sw $t0, -56($fp) sw $t1, -0($fp) sw $t2, -68($fp) -start__265: +start__271: lw $t0, -0($fp) lw $t1, -76($fp) # local_main_Main_mylist_18 <- GET self . mylist @@ -2416,15 +2416,15 @@ bnez $a1, mismatch_15 li $v0, 1 end_15: move $t2, $v0 -# If not local_main_Main_internal_20 goto continue__273 +# If not local_main_Main_internal_20 goto continue__279 sw $t0, -0($fp) sw $t1, -76($fp) sw $t2, -84($fp) sw $t3, -88($fp) -beqz $t2, continue__273 +beqz $t2, continue__279 la $a0, dispatch_error j .raise -continue__273: +continue__279: lw $t0, -76($fp) lw $t1, -80($fp) # Find the actual name in the dispatch table @@ -2463,10 +2463,10 @@ j end_16 false_16: li $t1, 1 end_16: -# If not local_main_Main_internal_17 goto end__265 +# If not local_main_Main_internal_17 goto end__271 sw $t0, -80($fp) sw $t1, -72($fp) -beqz $t1, end__265 +beqz $t1, end__271 lw $t0, -0($fp) lw $t1, -92($fp) # local_main_Main_mylist_22 <- GET self . mylist @@ -2535,16 +2535,16 @@ bnez $a1, mismatch_17 li $v0, 1 end_17: move $t3, $v0 -# If not local_main_Main_internal_26 goto continue__294 +# If not local_main_Main_internal_26 goto continue__301 sw $t0, -96($fp) sw $t1, -0($fp) sw $t2, -100($fp) sw $t3, -108($fp) sw $t4, -112($fp) -beqz $t3, continue__294 +beqz $t3, continue__301 la $a0, dispatch_error j .raise -continue__294: +continue__301: lw $t0, -100($fp) lw $t1, -104($fp) # Find the actual name in the dispatch table @@ -2590,8 +2590,8 @@ sw $t0, -104($fp) sw $t1, -0($fp) sw $t2, -116($fp) sw $t3, -68($fp) -j start__265 -end__265: +j start__271 +end__271: lw $t0, -68($fp) lw $t1, -120($fp) # Moving local_main_Main_internal_16 to local_main_Main_internal_29 diff --git a/tests/codegen/new_complex.mips b/tests/codegen/new_complex.mips index 5034b6ff..0ea290fc 100644 --- a/tests/codegen/new_complex.mips +++ b/tests/codegen/new_complex.mips @@ -1485,14 +1485,14 @@ bnez $a1, mismatch_9 li $v0, 1 end_9: move $t1, $v0 -# If not local_main_Main_internal_18 goto continue__114 +# If not local_main_Main_internal_18 goto continue__116 sw $t0, -4($fp) sw $t1, -76($fp) sw $t2, -80($fp) -beqz $t1, continue__114 +beqz $t1, continue__116 la $a0, dispatch_error j .raise -continue__114: +continue__116: lw $t0, -4($fp) lw $t1, -72($fp) # Find the actual name in the dispatch table @@ -1550,14 +1550,14 @@ bnez $a1, mismatch_10 li $v0, 1 end_10: move $t1, $v0 -# If not local_main_Main_internal_21 goto continue__126 +# If not local_main_Main_internal_21 goto continue__128 sw $t0, -72($fp) sw $t1, -88($fp) sw $t2, -92($fp) -beqz $t1, continue__126 +beqz $t1, continue__128 la $a0, dispatch_error j .raise -continue__126: +continue__128: lw $t0, -72($fp) lw $t1, -84($fp) # Find the actual name in the dispatch table @@ -1616,15 +1616,15 @@ bnez $a1, mismatch_11 li $v0, 1 end_11: move $t2, $v0 -# If not local_main_Main_internal_24 goto continue__138 +# If not local_main_Main_internal_24 goto continue__141 sw $t0, -84($fp) sw $t1, -4($fp) sw $t2, -100($fp) sw $t3, -104($fp) -beqz $t2, continue__138 +beqz $t2, continue__141 la $a0, dispatch_error j .raise -continue__138: +continue__141: lw $t0, -4($fp) lw $t1, -96($fp) # Find the actual name in the dispatch table @@ -1683,15 +1683,15 @@ bnez $a1, mismatch_12 li $v0, 1 end_12: move $t2, $v0 -# If not local_main_Main_internal_27 goto continue__151 +# If not local_main_Main_internal_27 goto continue__153 sw $t0, -96($fp) sw $t1, -84($fp) sw $t2, -112($fp) sw $t3, -116($fp) -beqz $t2, continue__151 +beqz $t2, continue__153 la $a0, dispatch_error j .raise -continue__151: +continue__153: lw $t0, -84($fp) lw $t1, -108($fp) # Find the actual name in the dispatch table @@ -1727,9 +1727,9 @@ lw $fp, ($sp) lw $t0, -108($fp) # saves the return value move $t0, $v0 -# If local_main_Main_internal_26 goto true__161 +# If local_main_Main_internal_26 goto true__163 sw $t0, -108($fp) -bnez $t0, true__161 +bnez $t0, true__163 lw $t0, -124($fp) # Saves in local_main_Main_internal_30 data_3 la $t0, data_3 @@ -1773,8 +1773,8 @@ move $t1, $t0 sw $t1, -120($fp) sw $t0, -128($fp) sw $t1, -120($fp) -j end__161 -true__161: +j end__163 +true__163: lw $t0, -132($fp) # Saves in local_main_Main_internal_32 data_4 la $t0, data_4 @@ -1818,7 +1818,7 @@ move $t1, $t0 sw $t1, -120($fp) sw $t0, -136($fp) sw $t1, -120($fp) -end__161: +end__163: lw $t0, -120($fp) lw $t1, -140($fp) # Moving local_main_Main_internal_29 to local_main_Main_internal_34 @@ -1967,11 +1967,11 @@ lw $t2, -4($fp) # local_print_Complex_internal_0 <- local_print_Complex_y_1 = 0 li $t9, 0 seq $t2, $t1, $t9 -# If local_print_Complex_internal_0 goto true__211 +# If local_print_Complex_internal_0 goto true__215 sw $t0, -0($fp) sw $t1, -8($fp) sw $t2, -4($fp) -bnez $t2, true__211 +bnez $t2, true__215 lw $t0, -0($fp) lw $t1, -16($fp) # local_print_Complex_x_3 <- GET self . x @@ -2039,15 +2039,15 @@ bnez $a1, mismatch_13 li $v0, 1 end_13: move $t2, $v0 -# If not local_print_Complex_internal_7 goto continue__224 +# If not local_print_Complex_internal_7 goto continue__229 sw $t0, -20($fp) sw $t1, -24($fp) sw $t2, -32($fp) sw $t3, -36($fp) -beqz $t2, continue__224 +beqz $t2, continue__229 la $a0, dispatch_error j .raise -continue__224: +continue__229: lw $t0, -20($fp) lw $t1, -28($fp) # Find the actual name in the dispatch table @@ -2114,16 +2114,16 @@ bnez $a1, mismatch_14 li $v0, 1 end_14: move $t3, $v0 -# If not local_print_Complex_internal_11 goto continue__239 +# If not local_print_Complex_internal_11 goto continue__244 sw $t0, -28($fp) sw $t1, -0($fp) sw $t2, -40($fp) sw $t3, -48($fp) sw $t4, -52($fp) -beqz $t3, continue__239 +beqz $t3, continue__244 la $a0, dispatch_error j .raise -continue__239: +continue__244: lw $t0, -28($fp) lw $t1, -44($fp) # Find the actual name in the dispatch table @@ -2189,15 +2189,15 @@ bnez $a1, mismatch_15 li $v0, 1 end_15: move $t2, $v0 -# If not local_print_Complex_internal_15 goto continue__255 +# If not local_print_Complex_internal_15 goto continue__260 sw $t0, -44($fp) sw $t1, -56($fp) sw $t2, -64($fp) sw $t3, -68($fp) -beqz $t2, continue__255 +beqz $t2, continue__260 la $a0, dispatch_error j .raise -continue__255: +continue__260: lw $t0, -44($fp) lw $t1, -60($fp) # Find the actual name in the dispatch table @@ -2239,8 +2239,8 @@ move $t1, $t0 sw $t1, -12($fp) sw $t0, -60($fp) sw $t1, -12($fp) -j end__211 -true__211: +j end__215 +true__215: lw $t0, -0($fp) lw $t1, -72($fp) # local_print_Complex_x_17 <- GET self . x @@ -2284,7 +2284,7 @@ move $t1, $t0 sw $t1, -12($fp) sw $t0, -76($fp) sw $t1, -12($fp) -end__211: +end__215: lw $t0, -12($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -2524,16 +2524,16 @@ bnez $a1, mismatch_16 li $v0, 1 end_16: move $t3, $v0 -# If not local_equal_Complex_internal_3 goto continue__331 +# If not local_equal_Complex_internal_3 goto continue__337 sw $t0, -4($fp) sw $t1, -12($fp) sw $t2, -0($fp) sw $t3, -20($fp) sw $t4, -24($fp) -beqz $t3, continue__331 +beqz $t3, continue__337 la $a0, dispatch_error j .raise -continue__331: +continue__337: lw $t0, -0($fp) lw $t1, -16($fp) # Find the actual name in the dispatch table @@ -2568,18 +2568,18 @@ lw $t1, -12($fp) lw $t2, -8($fp) # local_equal_Complex_internal_0 <- local_equal_Complex_x_1 = local_equal_Complex_internal_2 seq $t2, $t1, $t0 -# If local_equal_Complex_internal_0 goto true__342 +# If local_equal_Complex_internal_0 goto true__348 sw $t0, -16($fp) sw $t1, -12($fp) sw $t2, -8($fp) -bnez $t2, true__342 +bnez $t2, true__348 lw $t0, -28($fp) # Moving 0 to local_equal_Complex_internal_5 li $t0, 0 sw $t0, -28($fp) sw $t0, -28($fp) -j end__342 -true__342: +j end__348 +true__348: lw $t0, -4($fp) lw $t1, -36($fp) # local_equal_Complex_y_7 <- GET self . y @@ -2612,16 +2612,16 @@ bnez $a1, mismatch_17 li $v0, 1 end_17: move $t3, $v0 -# If not local_equal_Complex_internal_9 goto continue__352 +# If not local_equal_Complex_internal_9 goto continue__358 sw $t0, -4($fp) sw $t1, -36($fp) sw $t2, -0($fp) sw $t3, -44($fp) sw $t4, -48($fp) -beqz $t3, continue__352 +beqz $t3, continue__358 la $a0, dispatch_error j .raise -continue__352: +continue__358: lw $t0, -0($fp) lw $t1, -40($fp) # Find the actual name in the dispatch table @@ -2656,24 +2656,24 @@ lw $t1, -36($fp) lw $t2, -32($fp) # local_equal_Complex_internal_6 <- local_equal_Complex_y_7 = local_equal_Complex_internal_8 seq $t2, $t1, $t0 -# If local_equal_Complex_internal_6 goto true__363 +# If local_equal_Complex_internal_6 goto true__369 sw $t0, -40($fp) sw $t1, -36($fp) sw $t2, -32($fp) -bnez $t2, true__363 +bnez $t2, true__369 lw $t0, -52($fp) # Moving 0 to local_equal_Complex_internal_11 li $t0, 0 sw $t0, -52($fp) sw $t0, -52($fp) -j end__363 -true__363: +j end__369 +true__369: lw $t0, -52($fp) # Moving 1 to local_equal_Complex_internal_11 li $t0, 1 sw $t0, -52($fp) sw $t0, -52($fp) -end__363: +end__369: lw $t0, -52($fp) lw $t1, -28($fp) # Moving local_equal_Complex_internal_11 to local_equal_Complex_internal_5 @@ -2681,7 +2681,7 @@ move $t1, $t0 sw $t1, -28($fp) sw $t0, -52($fp) sw $t1, -28($fp) -end__342: +end__348: lw $t0, -28($fp) move $v0, $t0 # Empty all used registers and saves them to memory diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips index a3ad8c73..4f718d0c 100644 --- a/tests/codegen/palindrome.mips +++ b/tests/codegen/palindrome.mips @@ -1290,15 +1290,15 @@ bnez $a1, mismatch_9 li $v0, 1 end_9: move $t2, $v0 -# If not local_pal_Main_internal_16 goto continue__106 +# If not local_pal_Main_internal_16 goto continue__107 sw $t0, -52($fp) sw $t1, -0($fp) sw $t2, -72($fp) sw $t3, -76($fp) -beqz $t2, continue__106 +beqz $t2, continue__107 la $a0, dispatch_error j .raise -continue__106: +continue__107: lw $t0, -68($fp) # Static Dispatch of the method length sw $fp, ($sp) @@ -1462,14 +1462,14 @@ bnez $a1, mismatch_12 li $v0, 1 end_12: move $t1, $v0 -# If not local_pal_Main_internal_24 goto continue__140 +# If not local_pal_Main_internal_24 goto continue__142 sw $t0, -0($fp) sw $t1, -104($fp) sw $t2, -108($fp) -beqz $t1, continue__140 +beqz $t1, continue__142 la $a0, dispatch_error j .raise -continue__140: +continue__142: lw $t0, -100($fp) # Static Dispatch of the method length sw $fp, ($sp) @@ -1526,16 +1526,16 @@ bnez $a1, mismatch_13 li $v0, 1 end_13: move $t3, $v0 -# If not local_pal_Main_internal_27 goto continue__155 +# If not local_pal_Main_internal_27 goto continue__156 sw $t0, -100($fp) sw $t1, -96($fp) sw $t2, -0($fp) sw $t3, -116($fp) sw $t4, -120($fp) -beqz $t3, continue__155 +beqz $t3, continue__156 la $a0, dispatch_error j .raise -continue__155: +continue__156: lw $t0, -112($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -1788,9 +1788,9 @@ lw $fp, ($sp) lw $t0, -20($fp) # saves the return value move $t0, $v0 -# If local_main_Main_internal_4 goto true__197 +# If local_main_Main_internal_4 goto true__201 sw $t0, -20($fp) -bnez $t0, true__197 +bnez $t0, true__201 lw $t0, -28($fp) # Saves in local_main_Main_internal_6 data_2 la $t0, data_2 @@ -1834,8 +1834,8 @@ move $t1, $t0 sw $t1, -24($fp) sw $t0, -32($fp) sw $t1, -24($fp) -j end__197 -true__197: +j end__201 +true__201: lw $t0, -36($fp) # Saves in local_main_Main_internal_8 data_3 la $t0, data_3 @@ -1879,7 +1879,7 @@ move $t1, $t0 sw $t1, -24($fp) sw $t0, -40($fp) sw $t1, -24($fp) -end__197: +end__201: lw $t0, -24($fp) lw $t1, -44($fp) # Moving local_main_Main_internal_5 to local_main_Main_internal_10 diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips index a35993e6..0b90b827 100644 --- a/tests/codegen/primes.mips +++ b/tests/codegen/primes.mips @@ -1127,10 +1127,10 @@ sw $t1, -12($fp) sw $t2, -0($fp) sw $t3, -16($fp) sw $t4, -20($fp) -start__63: +start__64: li $t9, 1 -# If not 1 goto end__63 -beqz $t9, end__63 +# If not 1 goto end__64 +beqz $t9, end__64 lw $t0, -0($fp) lw $t1, -28($fp) # local_Main_Main_testee_6 <- GET self . testee @@ -1156,7 +1156,7 @@ sw $t0, -0($fp) sw $t1, -28($fp) sw $t2, -24($fp) sw $t3, -32($fp) -start__73: +start__74: lw $t0, -0($fp) lw $t1, -40($fp) # local_Main_Main_testee_9 <- GET self . testee @@ -1174,14 +1174,14 @@ mflo $t4 lw $t5, -36($fp) # local_Main_Main_internal_8 <- local_Main_Main_testee_9 < local_Main_Main_internal_10 slt $t5, $t1, $t4 -# If local_Main_Main_internal_8 goto true__86 +# If local_Main_Main_internal_8 goto true__87 sw $t0, -0($fp) sw $t1, -40($fp) sw $t2, -48($fp) sw $t3, -52($fp) sw $t4, -44($fp) sw $t5, -36($fp) -bnez $t5, true__86 +bnez $t5, true__87 lw $t0, -0($fp) lw $t1, -68($fp) # local_Main_Main_testee_16 <- GET self . testee @@ -1212,7 +1212,7 @@ lw $a1, -60($fp) # local_Main_Main_internal_14 <- local_Main_Main_internal_15 = 0 li $t9, 0 seq $a1, $t7, $t9 -# If local_Main_Main_internal_14 goto true__104 +# If local_Main_Main_internal_14 goto true__105 sw $t0, -0($fp) sw $t1, -68($fp) sw $t2, -76($fp) @@ -1222,20 +1222,20 @@ sw $t5, -80($fp) sw $t6, -72($fp) sw $t7, -64($fp) sw $a1, -60($fp) -bnez $a1, true__104 +bnez $a1, true__105 lw $t0, -92($fp) # Moving 1 to local_Main_Main_internal_22 li $t0, 1 sw $t0, -92($fp) sw $t0, -92($fp) -j end__104 -true__104: +j end__105 +true__105: lw $t0, -92($fp) # Moving 0 to local_Main_Main_internal_22 li $t0, 0 sw $t0, -92($fp) sw $t0, -92($fp) -end__104: +end__105: lw $t0, -92($fp) lw $t1, -56($fp) # Moving local_Main_Main_internal_22 to local_Main_Main_internal_13 @@ -1243,18 +1243,18 @@ move $t1, $t0 sw $t1, -56($fp) sw $t0, -92($fp) sw $t1, -56($fp) -j end__86 -true__86: +j end__87 +true__87: lw $t0, -56($fp) # Moving 0 to local_Main_Main_internal_13 li $t0, 0 sw $t0, -56($fp) sw $t0, -56($fp) -end__86: +end__87: lw $t0, -56($fp) -# If not local_Main_Main_internal_13 goto end__73 +# If not local_Main_Main_internal_13 goto end__74 sw $t0, -56($fp) -beqz $t0, end__73 +beqz $t0, end__74 lw $t0, -0($fp) lw $t1, -100($fp) # local_Main_Main_divisor_24 <- GET self . divisor @@ -1272,8 +1272,8 @@ sw $t0, -0($fp) sw $t1, -100($fp) sw $t2, -96($fp) sw $t3, -32($fp) -j start__73 -end__73: +j start__74 +end__74: lw $t0, -0($fp) lw $t1, -108($fp) # local_Main_Main_testee_26 <- GET self . testee @@ -1291,21 +1291,21 @@ mflo $t4 lw $t5, -104($fp) # local_Main_Main_internal_25 <- local_Main_Main_testee_26 < local_Main_Main_internal_27 slt $t5, $t1, $t4 -# If local_Main_Main_internal_25 goto true__135 +# If local_Main_Main_internal_25 goto true__136 sw $t0, -0($fp) sw $t1, -108($fp) sw $t2, -116($fp) sw $t3, -120($fp) sw $t4, -112($fp) sw $t5, -104($fp) -bnez $t5, true__135 +bnez $t5, true__136 lw $t0, -124($fp) # Moving 0 to local_Main_Main_internal_30 li $t0, 0 sw $t0, -124($fp) sw $t0, -124($fp) -j end__135 -true__135: +j end__136 +true__136: lw $t0, -0($fp) lw $t1, -128($fp) # local_Main_Main_testee_31 <- GET self . testee @@ -1398,7 +1398,7 @@ sw $t2, -124($fp) sw $t0, -144($fp) sw $t1, -148($fp) sw $t2, -124($fp) -end__135: +end__136: lw $t0, -0($fp) lw $t1, -156($fp) # local_Main_Main_stop_38 <- GET self . stop @@ -1409,12 +1409,12 @@ lw $t2, 16($t0) lw $t3, -152($fp) # local_Main_Main_internal_37 <- local_Main_Main_stop_38 <= local_Main_Main_testee_39 sle $t3, $t1, $t2 -# If local_Main_Main_internal_37 goto true__164 +# If local_Main_Main_internal_37 goto true__167 sw $t0, -0($fp) sw $t1, -156($fp) sw $t2, -160($fp) sw $t3, -152($fp) -bnez $t3, true__164 +bnez $t3, true__167 lw $t0, -168($fp) # Saves in local_Main_Main_internal_41 data_3 la $t0, data_3 @@ -1424,8 +1424,8 @@ move $t1, $t0 sw $t1, -164($fp) sw $t0, -168($fp) sw $t1, -164($fp) -j end__164 -true__164: +j end__167 +true__167: lw $t0, -172($fp) # Saves in local_Main_Main_internal_42 data_4 la $t0, data_4 @@ -1456,14 +1456,14 @@ bnez $a1, mismatch_6 li $v0, 1 end_6: move $t1, $v0 -# If not local_Main_Main_internal_44 goto continue__177 +# If not local_Main_Main_internal_44 goto continue__180 sw $t0, -172($fp) sw $t1, -180($fp) sw $t2, -184($fp) -beqz $t1, continue__177 +beqz $t1, continue__180 la $a0, dispatch_error j .raise -continue__177: +continue__180: lw $t0, -176($fp) # Static Dispatch of the method abort sw $fp, ($sp) @@ -1495,7 +1495,7 @@ move $t1, $t0 sw $t1, -164($fp) sw $t0, -176($fp) sw $t1, -164($fp) -end__164: +end__167: lw $t0, -164($fp) lw $t1, -188($fp) # Moving local_Main_Main_internal_40 to local_Main_Main_internal_46 @@ -1508,8 +1508,8 @@ sw $t2, -20($fp) sw $t0, -164($fp) sw $t1, -188($fp) sw $t2, -20($fp) -j start__63 -end__63: +j start__64 +end__64: lw $t0, -20($fp) lw $t1, -0($fp) # self . m <- SET local_Main_Main_internal_4 diff --git a/tests/codegen/print-cool.mips b/tests/codegen/print-cool.mips index 6a9c1b62..35a7ef07 100644 --- a/tests/codegen/print-cool.mips +++ b/tests/codegen/print-cool.mips @@ -1023,14 +1023,14 @@ bnez $a1, mismatch_6 li $v0, 1 end_6: move $t1, $v0 -# If not local_main_Main_internal_2 goto continue__52 +# If not local_main_Main_internal_2 goto continue__53 sw $t0, -4($fp) sw $t1, -12($fp) sw $t2, -16($fp) -beqz $t1, continue__52 +beqz $t1, continue__53 la $a0, dispatch_error j .raise -continue__52: +continue__53: lw $t0, -4($fp) lw $t1, -8($fp) # Find the actual name in the dispatch table @@ -1088,14 +1088,14 @@ bnez $a1, mismatch_7 li $v0, 1 end_7: move $t1, $v0 -# If not local_main_Main_internal_5 goto continue__66 +# If not local_main_Main_internal_5 goto continue__67 sw $t0, -8($fp) sw $t1, -24($fp) sw $t2, -28($fp) -beqz $t1, continue__66 +beqz $t1, continue__67 la $a0, dispatch_error j .raise -continue__66: +continue__67: lw $t0, -20($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -1218,17 +1218,17 @@ bnez $a1, mismatch_9 li $v0, 1 end_9: move $t4, $v0 -# If not local_main_Main_internal_11 goto continue__86 +# If not local_main_Main_internal_11 goto continue__88 sw $t0, -32($fp) sw $t1, -0($fp) sw $t2, -36($fp) sw $t3, -40($fp) sw $t4, -48($fp) sw $t5, -52($fp) -beqz $t4, continue__86 +beqz $t4, continue__88 la $a0, dispatch_error j .raise -continue__86: +continue__88: lw $t0, -44($fp) # Static Dispatch of the method type_name sw $fp, ($sp) @@ -1281,14 +1281,14 @@ bnez $a1, mismatch_10 li $v0, 1 end_10: move $t1, $v0 -# If not local_main_Main_internal_14 goto continue__100 +# If not local_main_Main_internal_14 goto continue__102 sw $t0, -44($fp) sw $t1, -60($fp) sw $t2, -64($fp) -beqz $t1, continue__100 +beqz $t1, continue__102 la $a0, dispatch_error j .raise -continue__100: +continue__102: lw $t0, -56($fp) # Static Dispatch of the method substr sw $fp, ($sp) @@ -1350,15 +1350,15 @@ bnez $a1, mismatch_11 li $v0, 1 end_11: move $t2, $v0 -# If not local_main_Main_internal_17 goto continue__113 +# If not local_main_Main_internal_17 goto continue__114 sw $t0, -56($fp) sw $t1, -32($fp) sw $t2, -72($fp) sw $t3, -76($fp) -beqz $t2, continue__113 +beqz $t2, continue__114 la $a0, dispatch_error j .raise -continue__113: +continue__114: lw $t0, -32($fp) lw $t1, -68($fp) # Find the actual name in the dispatch table diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips index c0466164..88691e37 100644 --- a/tests/codegen/sort-list.mips +++ b/tests/codegen/sort-list.mips @@ -1421,15 +1421,15 @@ bnez $a1, mismatch_6 li $v0, 1 end_6: move $t2, $v0 -# If not local_cons_List_internal_3 goto continue__66 +# If not local_cons_List_internal_3 goto continue__67 sw $t0, -12($fp) sw $t1, -8($fp) sw $t2, -20($fp) sw $t3, -24($fp) -beqz $t2, continue__66 +beqz $t2, continue__67 la $a0, dispatch_error j .raise -continue__66: +continue__67: lw $t0, -8($fp) lw $t1, -16($fp) # Find the actual name in the dispatch table @@ -2044,15 +2044,15 @@ bnez $a1, mismatch_7 li $v0, 1 end_7: move $t2, $v0 -# If not local_rev_Cons_internal_2 goto continue__161 +# If not local_rev_Cons_internal_2 goto continue__169 sw $t0, -0($fp) sw $t1, -4($fp) sw $t2, -12($fp) sw $t3, -16($fp) -beqz $t2, continue__161 +beqz $t2, continue__169 la $a0, dispatch_error j .raise -continue__161: +continue__169: lw $t0, -4($fp) lw $t1, -8($fp) # Find the actual name in the dispatch table @@ -2114,16 +2114,16 @@ bnez $a1, mismatch_8 li $v0, 1 end_8: move $t3, $v0 -# If not local_rev_Cons_internal_6 goto continue__176 +# If not local_rev_Cons_internal_6 goto continue__184 sw $t0, -8($fp) sw $t1, -0($fp) sw $t2, -20($fp) sw $t3, -28($fp) sw $t4, -32($fp) -beqz $t3, continue__176 +beqz $t3, continue__184 la $a0, dispatch_error j .raise -continue__176: +continue__184: lw $t0, -8($fp) lw $t1, -24($fp) # Find the actual name in the dispatch table @@ -2220,15 +2220,15 @@ bnez $a1, mismatch_9 li $v0, 1 end_9: move $t2, $v0 -# If not local_sort_Cons_internal_2 goto continue__193 +# If not local_sort_Cons_internal_2 goto continue__201 sw $t0, -0($fp) sw $t1, -4($fp) sw $t2, -12($fp) sw $t3, -16($fp) -beqz $t2, continue__193 +beqz $t2, continue__201 la $a0, dispatch_error j .raise -continue__193: +continue__201: lw $t0, -4($fp) lw $t1, -8($fp) # Find the actual name in the dispatch table @@ -2290,16 +2290,16 @@ bnez $a1, mismatch_10 li $v0, 1 end_10: move $t3, $v0 -# If not local_sort_Cons_internal_6 goto continue__208 +# If not local_sort_Cons_internal_6 goto continue__216 sw $t0, -8($fp) sw $t1, -0($fp) sw $t2, -20($fp) sw $t3, -28($fp) sw $t4, -32($fp) -beqz $t3, continue__208 +beqz $t3, continue__216 la $a0, dispatch_error j .raise -continue__208: +continue__216: lw $t0, -8($fp) lw $t1, -24($fp) # Find the actual name in the dispatch table @@ -2391,12 +2391,12 @@ lw $t2, -0($fp) lw $t3, -8($fp) # local_insert_Cons_internal_0 <- i < local_insert_Cons_xcar_1 slt $t3, $t2, $t1 -# If local_insert_Cons_internal_0 goto true__226 +# If local_insert_Cons_internal_0 goto true__234 sw $t0, -4($fp) sw $t1, -12($fp) sw $t2, -0($fp) sw $t3, -8($fp) -bnez $t3, true__226 +bnez $t3, true__234 lw $t0, -20($fp) # Syscall to allocate memory of the object entry in heap li $v0, 9 @@ -2469,17 +2469,17 @@ bnez $a1, mismatch_11 li $v0, 1 end_11: move $t4, $v0 -# If not local_insert_Cons_internal_7 goto continue__238 +# If not local_insert_Cons_internal_7 goto continue__247 sw $t0, -20($fp) sw $t1, -4($fp) sw $t2, -24($fp) sw $t3, -28($fp) sw $t4, -36($fp) sw $t5, -40($fp) -beqz $t4, continue__238 +beqz $t4, continue__247 la $a0, dispatch_error j .raise -continue__238: +continue__247: lw $t0, -28($fp) lw $t1, -32($fp) # Find the actual name in the dispatch table @@ -2543,15 +2543,15 @@ bnez $a1, mismatch_12 li $v0, 1 end_12: move $t2, $v0 -# If not local_insert_Cons_internal_10 goto continue__252 +# If not local_insert_Cons_internal_10 goto continue__260 sw $t0, -32($fp) sw $t1, -20($fp) sw $t2, -48($fp) sw $t3, -52($fp) -beqz $t2, continue__252 +beqz $t2, continue__260 la $a0, dispatch_error j .raise -continue__252: +continue__260: lw $t0, -20($fp) lw $t1, -44($fp) # Find the actual name in the dispatch table @@ -2598,8 +2598,8 @@ move $t1, $t0 sw $t1, -16($fp) sw $t0, -44($fp) sw $t1, -16($fp) -j end__226 -true__226: +j end__234 +true__234: lw $t0, -56($fp) # Syscall to allocate memory of the object entry in heap li $v0, 9 @@ -2665,14 +2665,14 @@ bnez $a1, mismatch_13 li $v0, 1 end_13: move $t1, $v0 -# If not local_insert_Cons_internal_14 goto continue__272 +# If not local_insert_Cons_internal_14 goto continue__280 sw $t0, -56($fp) sw $t1, -64($fp) sw $t2, -68($fp) -beqz $t1, continue__272 +beqz $t1, continue__280 la $a0, dispatch_error j .raise -continue__272: +continue__280: lw $t0, -56($fp) lw $t1, -60($fp) # Find the actual name in the dispatch table @@ -2719,7 +2719,7 @@ move $t1, $t0 sw $t1, -16($fp) sw $t0, -60($fp) sw $t1, -16($fp) -end__226: +end__234: lw $t0, -16($fp) move $v0, $t0 # Empty all used registers and saves them to memory @@ -2827,17 +2827,17 @@ bnez $a1, mismatch_14 li $v0, 1 end_14: move $t4, $v0 -# If not local_rcons_Cons_internal_4 goto continue__298 +# If not local_rcons_Cons_internal_4 goto continue__307 sw $t0, -8($fp) sw $t1, -4($fp) sw $t2, -12($fp) sw $t3, -16($fp) sw $t4, -24($fp) sw $t5, -28($fp) -beqz $t4, continue__298 +beqz $t4, continue__307 la $a0, dispatch_error j .raise -continue__298: +continue__307: lw $t0, -16($fp) lw $t1, -20($fp) # Find the actual name in the dispatch table @@ -2901,15 +2901,15 @@ bnez $a1, mismatch_15 li $v0, 1 end_15: move $t2, $v0 -# If not local_rcons_Cons_internal_7 goto continue__312 +# If not local_rcons_Cons_internal_7 goto continue__320 sw $t0, -20($fp) sw $t1, -8($fp) sw $t2, -36($fp) sw $t3, -40($fp) -beqz $t2, continue__312 +beqz $t2, continue__320 la $a0, dispatch_error j .raise -continue__312: +continue__320: lw $t0, -8($fp) lw $t1, -32($fp) # Find the actual name in the dispatch table @@ -3088,16 +3088,16 @@ bnez $a1, mismatch_16 li $v0, 1 end_16: move $t3, $v0 -# If not local_print_list_Cons_internal_6 goto continue__340 +# If not local_print_list_Cons_internal_6 goto continue__350 sw $t0, -16($fp) sw $t1, -0($fp) sw $t2, -20($fp) sw $t3, -28($fp) sw $t4, -32($fp) -beqz $t3, continue__340 +beqz $t3, continue__350 la $a0, dispatch_error j .raise -continue__340: +continue__350: lw $t0, -20($fp) lw $t1, -24($fp) # Find the actual name in the dispatch table @@ -3325,14 +3325,14 @@ bnez $a1, mismatch_17 li $v0, 1 end_17: move $t1, $v0 -# If not local_rcons_Nil_internal_2 goto continue__381 +# If not local_rcons_Nil_internal_2 goto continue__392 sw $t0, -8($fp) sw $t1, -16($fp) sw $t2, -20($fp) -beqz $t1, continue__381 +beqz $t1, continue__392 la $a0, dispatch_error j .raise -continue__381: +continue__392: lw $t0, -8($fp) lw $t1, -12($fp) # Find the actual name in the dispatch table @@ -3521,17 +3521,17 @@ sw $t0, -8($fp) sw $t1, -4($fp) sw $t2, -12($fp) sw $t3, -16($fp) -start__414: +start__425: lw $t0, -12($fp) lw $t1, -0($fp) lw $t2, -20($fp) # local_iota_Main_internal_3 <- local_iota_Main_j_1 < i slt $t2, $t0, $t1 -# If not local_iota_Main_internal_3 goto end__414 +# If not local_iota_Main_internal_3 goto end__425 sw $t0, -12($fp) sw $t1, -0($fp) sw $t2, -20($fp) -beqz $t2, end__414 +beqz $t2, end__425 lw $t0, -24($fp) # Syscall to allocate memory of the object entry in heap li $v0, 9 @@ -3601,16 +3601,16 @@ bnez $a1, mismatch_18 li $v0, 1 end_18: move $t3, $v0 -# If not local_iota_Main_internal_7 goto continue__429 +# If not local_iota_Main_internal_7 goto continue__440 sw $t0, -24($fp) sw $t1, -4($fp) sw $t2, -28($fp) sw $t3, -36($fp) sw $t4, -40($fp) -beqz $t3, continue__429 +beqz $t3, continue__440 la $a0, dispatch_error j .raise -continue__429: +continue__440: lw $t0, -24($fp) lw $t1, -32($fp) # Find the actual name in the dispatch table @@ -3675,8 +3675,8 @@ sw $t2, -12($fp) sw $t3, -44($fp) sw $t4, -48($fp) sw $t5, -16($fp) -j start__414 -end__414: +j start__425 +end__425: lw $t0, -4($fp) lw $t1, -52($fp) # local_iota_Main_l_11 <- GET self . l @@ -3858,14 +3858,14 @@ bnez $a1, mismatch_19 li $v0, 1 end_19: move $t1, $v0 -# If not local_main_Main_internal_5 goto continue__468 +# If not local_main_Main_internal_5 goto continue__482 sw $t0, -16($fp) sw $t1, -24($fp) sw $t2, -28($fp) -beqz $t1, continue__468 +beqz $t1, continue__482 la $a0, dispatch_error j .raise -continue__468: +continue__482: lw $t0, -16($fp) lw $t1, -20($fp) # Find the actual name in the dispatch table @@ -3923,14 +3923,14 @@ bnez $a1, mismatch_20 li $v0, 1 end_20: move $t1, $v0 -# If not local_main_Main_internal_8 goto continue__480 +# If not local_main_Main_internal_8 goto continue__494 sw $t0, -20($fp) sw $t1, -36($fp) sw $t2, -40($fp) -beqz $t1, continue__480 +beqz $t1, continue__494 la $a0, dispatch_error j .raise -continue__480: +continue__494: lw $t0, -20($fp) lw $t1, -32($fp) # Find the actual name in the dispatch table @@ -3988,14 +3988,14 @@ bnez $a1, mismatch_21 li $v0, 1 end_21: move $t1, $v0 -# If not local_main_Main_internal_11 goto continue__492 +# If not local_main_Main_internal_11 goto continue__506 sw $t0, -32($fp) sw $t1, -48($fp) sw $t2, -52($fp) -beqz $t1, continue__492 +beqz $t1, continue__506 la $a0, dispatch_error j .raise -continue__492: +continue__506: lw $t0, -32($fp) lw $t1, -44($fp) # Find the actual name in the dispatch table From bad4406e59a34a0be9bc41f3c002af34b86082e3 Mon Sep 17 00:00:00 2001 From: Loraine Monteagudo Date: Mon, 30 Nov 2020 11:15:10 -0700 Subject: [PATCH 59/60] Reviewing and adding last changes to report. Getting ready to deliver --- src/cool_parser/output_parser/parselog.txt | 1658 ++++++++++---------- src/hello_world.cl | 9 - src/self.cl | 9 - src/semantic/visitors/selftype_visitor.py | 108 -- src/semantic/visitors/type_checker.py | 2 - src/test.cl | 430 ----- src/test.mips | 1166 -------------- 7 files changed, 829 insertions(+), 2553 deletions(-) delete mode 100644 src/hello_world.cl delete mode 100644 src/self.cl delete mode 100644 src/semantic/visitors/selftype_visitor.py delete mode 100644 src/test.cl delete mode 100644 src/test.mips diff --git a/src/cool_parser/output_parser/parselog.txt b/src/cool_parser/output_parser/parselog.txt index 06dff12f..4f58f3c0 100644 --- a/src/cool_parser/output_parser/parselog.txt +++ b/src/cool_parser/output_parser/parselog.txt @@ -6146,19 +6146,19 @@ yacc.py: 411:State : 32 yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',29,1046) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',29,1046) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',29,1046) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',29,1046) @@ -6183,37 +6183,37 @@ yacc.py: 411:State : 91 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur true . LexToken(ccur,'}',29,1062) yacc.py: 471:Action : Reduce rule [atom -> true] with ['true'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur def_func semi id opar epsilon . LexToken(cpar,')',35,1254) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur def_func semi id opar param_list_empty . LexToken(cpar,')',35,1254) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur def_func semi id opar formals . LexToken(cpar,')',35,1254) @@ -6285,19 +6285,19 @@ yacc.py: 411:State : 113 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar . LexToken(cpar,')',35,1273) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar epsilon . LexToken(cpar,')',35,1273) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar arg_list_empty . LexToken(cpar,')',35,1273) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar args . LexToken(cpar,')',35,1273) @@ -6306,37 +6306,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar args cpar . LexToken(semi,';',35,1274) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['abort','(',[],')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'abort',35,1267), [])) + yacc.py: 506:Result : ((LexToken(id,'abort',35,1267), [])) yacc.py: 410: yacc.py: 411:State : 78 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur func_call . LexToken(semi,';',35,1274) - yacc.py: 471:Action : Reduce rule [factor -> func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar epsilon . LexToken(cpar,')',40,1389) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',40,1389) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals . LexToken(cpar,')',40,1389) @@ -6504,19 +6504,19 @@ yacc.py: 411:State : 113 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar . LexToken(cpar,')',40,1409) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar epsilon . LexToken(cpar,')',40,1409) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar arg_list_empty . LexToken(cpar,')',40,1409) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar args . LexToken(cpar,')',40,1409) @@ -6525,37 +6525,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar args cpar . LexToken(semi,';',40,1410) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['abort','(',[],')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'abort',40,1403), [])) + yacc.py: 506:Result : ((LexToken(id,'abort',40,1403), [])) yacc.py: 410: yacc.py: 411:State : 78 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur func_call . LexToken(semi,';',40,1410) - yacc.py: 471:Action : Reduce rule [factor -> func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['i',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'i',49,1777), LexToken(type ...) + yacc.py: 506:Result : ((LexToken(id,'i',49,1777), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar param . LexToken(cpar,')',49,1784) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',49,1784) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',49,1784) @@ -6734,37 +6734,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',50,1810) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Cons'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( id] with ['i'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['init','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'init',50,1812), [ id opar args cpar] with ['init','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'init',50,1812), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['cons','(',,')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['cons','(',,')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',53,1833) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',53,1833) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','List','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','List','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['car',':','Int'] and goto state 17 - yacc.py: 506:Result : ( ( id colon type] with ['cdr',':','List'] and goto state 17 - yacc.py: 506:Result : ( ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',76,2482) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',76,2482) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',76,2482) @@ -7097,37 +7097,37 @@ yacc.py: 411:State : 92 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur false . LexToken(ccur,'}',76,2499) yacc.py: 471:Action : Reduce rule [atom -> false] with ['false'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',78,2511) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',78,2511) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',78,2511) @@ -7191,37 +7191,37 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',78,2526) yacc.py: 471:Action : Reduce rule [atom -> id] with ['car'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',80,2538) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',80,2538) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',80,2538) @@ -7285,37 +7285,37 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',80,2554) yacc.py: 471:Action : Reduce rule [atom -> id] with ['cdr'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['i',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'i',82,2566), LexToken(type ...) + yacc.py: 506:Result : ((LexToken(id,'i',82,2566), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param . LexToken(comma,',',82,2573) @@ -7375,24 +7375,24 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma id colon type . LexToken(cpar,')',82,2586) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['rest',':','List'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'rest',82,2575), LexToken(t ...) + yacc.py: 506:Result : ((LexToken(id,'rest',82,2575), LexToken(t ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 - yacc.py: 506:Result : ([(LexToken(id,'rest',82,2575), LexToken( ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 + yacc.py: 506:Result : ([(LexToken(id,'rest',82,2575), LexToken( ...) yacc.py: 410: yacc.py: 411:State : 95 yacc.py: 430:Defaulted state 95: Reduce using 33 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param_list . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',82,2586) @@ -7429,42 +7429,42 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur ocur id larrow id . LexToken(semi,';',84,2615) yacc.py: 471:Action : Reduce rule [atom -> id] with ['i'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['car','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['car','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['rest'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['cdr','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['cdr','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['init','(',,')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['init','(',,')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',90,2655) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',90,2655) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Cons','inherits','List','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Cons','inherits','List','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['mylist',':','List'] and goto state 17 - yacc.py: 506:Result : ( ( id colon type] with ['l',':','List'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'l',107,3036), LexToken(typ ...) + yacc.py: 506:Result : ((LexToken(id,'l',107,3036), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param . LexToken(cpar,')',107,3044) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list . LexToken(cpar,')',107,3044) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',107,3044) @@ -7801,12 +7801,12 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if id . LexToken(dot,'.',108,3067) yacc.py: 471:Action : Reduce rule [atom -> id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar epsilon . LexToken(cpar,')',108,3074) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar arg_list_empty . LexToken(cpar,')',108,3074) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar args . LexToken(cpar,')',108,3074) @@ -7844,37 +7844,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar args cpar . LexToken(then,'then',108,3076) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['isNil','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'isNil',108,3068), [])) + yacc.py: 506:Result : ((LexToken(id,'isNil',108,3068), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot func_call . LexToken(then,'then',108,3076) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( string] with ['\n'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',108,3081), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',108,3081), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar epsilon . LexToken(cpar,')',110,3145) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar arg_list_empty . LexToken(cpar,')',110,3145) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar args . LexToken(cpar,')',110,3145) @@ -8043,48 +8043,48 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar args cpar . LexToken(cpar,')',110,3146) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['head','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'head',110,3140), [])) + yacc.py: 506:Result : ((LexToken(id,'head',110,3140), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot func_call . LexToken(cpar,')',110,3146) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_int','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_int',110,3130), [ id opar args cpar] with ['out_int','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_int',110,3130), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( string] with [' '] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',111,3155), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',111,3155), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar epsilon . LexToken(cpar,')',112,3196) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar arg_list_empty . LexToken(cpar,')',112,3196) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar args . LexToken(cpar,')',112,3196) @@ -8288,48 +8288,48 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar args cpar . LexToken(cpar,')',112,3197) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['tail','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'tail',112,3191), [])) + yacc.py: 506:Result : ((LexToken(id,'tail',112,3191), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot func_call . LexToken(cpar,')',112,3197) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['print_list','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'print_list',112,3178), [ id opar args cpar] with ['print_list','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'print_list',112,3178), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print_list','(',,')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print_list','(',,')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',126,3742) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',126,3742) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals . LexToken(cpar,')',126,3742) @@ -8540,12 +8540,12 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow new type . LexToken(dot,'.',128,3783) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','List'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3784), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3784), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3792), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3792), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3800), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3800), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3808), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3808), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3816), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3816), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar epsilon . LexToken(cpar,')',129,3851) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar arg_list_empty . LexToken(cpar,')',129,3851) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar args . LexToken(cpar,')',129,3851) @@ -9023,67 +9023,67 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar args cpar . LexToken(cpar,')',129,3852) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['isNil','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'isNil',129,3845), [])) + yacc.py: 506:Result : ((LexToken(id,'isNil',129,3845), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot func_call . LexToken(cpar,')',129,3852) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 124 - yacc.py: 506:Result : ( comp] with [] and goto state 124 + yacc.py: 506:Result : ( not expr] with ['not',] and goto state 77 - yacc.py: 506:Result : ( not expr] with ['not',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 133 - yacc.py: 506:Result : ( comp] with [] and goto state 133 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['print_list','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'print_list',131,3874), [ id opar args cpar] with ['print_list','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'print_list',131,3874), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar epsilon . LexToken(cpar,')',132,3924) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar arg_list_empty . LexToken(cpar,')',132,3924) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar args . LexToken(cpar,')',132,3924) @@ -9286,42 +9286,42 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar args cpar . LexToken(semi,';',132,3925) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['tail','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'tail',132,3919), [])) + yacc.py: 506:Result : ((LexToken(id,'tail',132,3919), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot func_call . LexToken(semi,';',132,3925) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 204 - yacc.py: 506:Result : ( comp] with [] and goto state 204 + yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 - yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi def_func semi epsilon . LexToken(ccur,'}',138,3957) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi def_func semi feature_list . LexToken(ccur,'}',138,3957) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( ( out_string("Class type is now A\n"); - b : B => out_string("Class type is now B\n"); - c : C => out_string("Class type is now C\n"); - d : D => out_string("Class type is now D\n"); - e : E => out_string("Class type is now E\n"); - o : Object => out_string("Oooops\n"); - esac - }; - - print(var : A) : IO { - (let z : A2I <- new A2I in - { - out_string(z.i2a(var.value())); - out_string(" "); - } - ) - }; - - main() : Object { - { - avar <- (new A); - while flag loop - { - -- avar <- (new A).set_var(get_int()); - out_string("number "); - print(avar); - if is_even(avar.value()) then - out_string("is even!\n") - else - out_string("is odd!\n") - fi; - -- print(avar); -- prints out answer - class_type(avar); - char <- menu(); - if char = "a" then -- add - { - a_var <- (new A).set_var(get_int()); - avar <- (new B).method2(avar.value(), a_var.value()); - } else - if char = "b" then -- negate - case avar of - c : C => avar <- c.method6(c.value()); - a : A => avar <- a.method3(a.value()); - o : Object => { - out_string("Oooops\n"); - abort(); 0; - }; - esac else - if char = "c" then -- diff - { - a_var <- (new A).set_var(get_int()); - avar <- (new D).method4(avar.value(), a_var.value()); - } else - if char = "d" then avar <- (new C)@A.method5(avar.value()) else - -- factorial - if char = "e" then avar <- (new C)@B.method5(avar.value()) else - -- square - if char = "f" then avar <- (new C)@C.method5(avar.value()) else - -- cube - if char = "g" then -- multiple of 3? - if ((new D).method7(avar.value())) - then -- avar <- (new A).method1(avar.value()) - { - out_string("number "); - print(avar); - out_string("is divisible by 3.\n"); - } - else -- avar <- (new A).set_var(0) - { - out_string("number "); - print(avar); - out_string("is not divisible by 3.\n"); - } - fi else - if char = "h" then - (let x : A in - { - x <- (new E).method6(avar.value()); - (let r : Int <- (avar.value() - (x.value() * 8)) in - { - out_string("number "); - print(avar); - out_string("is equal to "); - print(x); - out_string("times 8 with a remainder of "); - (let a : A2I <- new A2I in - { - out_string(a.i2a(r)); - out_string("\n"); - } - ); -- end let a: - } - ); -- end let r: - avar <- x; - } - ) -- end let x: - else - if char = "j" then avar <- (new A) - else - if char = "q" then flag <- false - else - avar <- (new A).method1(avar.value()) -- divide/8 - fi fi fi fi fi fi fi fi fi fi; - } - pool; - } - }; - -}; - diff --git a/src/test.mips b/src/test.mips deleted file mode 100644 index 53de5e3b..00000000 --- a/src/test.mips +++ /dev/null @@ -1,1166 +0,0 @@ -.text -.globl main -main: -# Save method directions in the methods array -la $v0, methods -la $t9, entry -sw $t9, 0($v0) -la $t9, function_abort_Object -sw $t9, 4($v0) -la $t9, function_type_name_Object -sw $t9, 8($v0) -la $t9, function_copy_Object -sw $t9, 12($v0) -la $t9, function_out_string_IO -sw $t9, 16($v0) -la $t9, function_out_int_IO -sw $t9, 20($v0) -la $t9, function_in_int_IO -sw $t9, 24($v0) -la $t9, function_in_string_IO -sw $t9, 28($v0) -la $t9, function_length_String -sw $t9, 32($v0) -la $t9, function_concat_String -sw $t9, 36($v0) -la $t9, function_substr_String -sw $t9, 40($v0) -la $t9, function_type_name_String -sw $t9, 44($v0) -la $t9, function_copy_String -sw $t9, 48($v0) -la $t9, function_type_name_Int -sw $t9, 52($v0) -la $t9, function_copy_Int -sw $t9, 56($v0) -la $t9, function_type_name_Bool -sw $t9, 60($v0) -la $t9, function_copy_Bool -sw $t9, 64($v0) -la $t9, function_abort_String -sw $t9, 68($v0) -la $t9, function_abort_Int -sw $t9, 72($v0) -la $t9, function_abort_Bool -sw $t9, 76($v0) -la $t9, function_main_Main -sw $t9, 80($v0) -la $t9, function_test_Main -sw $t9, 84($v0) -# Save types directions in the types array -la $t9, types -# Save space to locate the type info -# Allocating memory -li $v0, 9 -li $a0, 12 -syscall -# Filling table methods -la $t8, type_String -sw $t8, 0($v0) -# Copying direction to array -sw $v0, 0($t9) -# Table addr is now stored in t8 -move $t8, $v0 -# Creating the dispatch table -# Allocate dispatch table in the heap -li $v0, 9 -li $a0, 28 -syscall -# I save the offset of every one of the methods of this type -# Save the direction of methods -la $v1, methods -# Save the direction of the method function_length_String in a0 -lw $a0, 32($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 4($v0) -# Save the direction of the method function_concat_String in a0 -lw $a0, 36($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 8($v0) -# Save the direction of the method function_substr_String in a0 -lw $a0, 40($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 12($v0) -# Save the direction of the method function_abort_String in a0 -lw $a0, 68($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 16($v0) -# Save the direction of the method function_type_name_String in a0 -lw $a0, 44($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 20($v0) -# Save the direction of the method function_copy_String in a0 -lw $a0, 48($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 24($v0) -sw $v0, 8($t8) -# Allocating memory -li $v0, 9 -li $a0, 12 -syscall -# Filling table methods -la $t8, type_Int -sw $t8, 0($v0) -# Copying direction to array -sw $v0, 4($t9) -# Table addr is now stored in t8 -move $t8, $v0 -# Creating the dispatch table -# Allocate dispatch table in the heap -li $v0, 9 -li $a0, 16 -syscall -# I save the offset of every one of the methods of this type -# Save the direction of methods -la $v1, methods -# Save the direction of the method function_abort_Int in a0 -lw $a0, 72($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 4($v0) -# Save the direction of the method function_type_name_Int in a0 -lw $a0, 52($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 8($v0) -# Save the direction of the method function_copy_Int in a0 -lw $a0, 56($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 12($v0) -sw $v0, 8($t8) -# Allocating memory -li $v0, 9 -li $a0, 12 -syscall -# Filling table methods -la $t8, type_Object -sw $t8, 0($v0) -# Copying direction to array -sw $v0, 8($t9) -# Table addr is now stored in t8 -move $t8, $v0 -# Creating the dispatch table -# Allocate dispatch table in the heap -li $v0, 9 -li $a0, 16 -syscall -# I save the offset of every one of the methods of this type -# Save the direction of methods -la $v1, methods -# Save the direction of the method function_abort_Object in a0 -lw $a0, 4($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 4($v0) -# Save the direction of the method function_type_name_Object in a0 -lw $a0, 8($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 8($v0) -# Save the direction of the method function_copy_Object in a0 -lw $a0, 12($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 12($v0) -sw $v0, 8($t8) -# Allocating memory -li $v0, 9 -li $a0, 12 -syscall -# Filling table methods -la $t8, type_Bool -sw $t8, 0($v0) -# Copying direction to array -sw $v0, 12($t9) -# Table addr is now stored in t8 -move $t8, $v0 -# Creating the dispatch table -# Allocate dispatch table in the heap -li $v0, 9 -li $a0, 16 -syscall -# I save the offset of every one of the methods of this type -# Save the direction of methods -la $v1, methods -# Save the direction of the method function_abort_Bool in a0 -lw $a0, 76($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 4($v0) -# Save the direction of the method function_type_name_Bool in a0 -lw $a0, 60($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 8($v0) -# Save the direction of the method function_copy_Bool in a0 -lw $a0, 64($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 12($v0) -sw $v0, 8($t8) -# Allocating memory -li $v0, 9 -li $a0, 12 -syscall -# Filling table methods -la $t8, type_IO -sw $t8, 0($v0) -# Copying direction to array -sw $v0, 16($t9) -# Table addr is now stored in t8 -move $t8, $v0 -# Creating the dispatch table -# Allocate dispatch table in the heap -li $v0, 9 -li $a0, 32 -syscall -# I save the offset of every one of the methods of this type -# Save the direction of methods -la $v1, methods -# Save the direction of the method function_abort_Object in a0 -lw $a0, 4($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 4($v0) -# Save the direction of the method function_type_name_Object in a0 -lw $a0, 8($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 8($v0) -# Save the direction of the method function_copy_Object in a0 -lw $a0, 12($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 12($v0) -# Save the direction of the method function_out_string_IO in a0 -lw $a0, 16($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 16($v0) -# Save the direction of the method function_out_int_IO in a0 -lw $a0, 20($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 20($v0) -# Save the direction of the method function_in_int_IO in a0 -lw $a0, 24($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 24($v0) -# Save the direction of the method function_in_string_IO in a0 -lw $a0, 28($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 28($v0) -sw $v0, 8($t8) -# Allocating memory -li $v0, 9 -li $a0, 12 -syscall -# Filling table methods -la $t8, type_Main -sw $t8, 0($v0) -# Copying direction to array -sw $v0, 20($t9) -# Table addr is now stored in t8 -move $t8, $v0 -# Creating the dispatch table -# Allocate dispatch table in the heap -li $v0, 9 -li $a0, 40 -syscall -# I save the offset of every one of the methods of this type -# Save the direction of methods -la $v1, methods -# Save the direction of the method function_abort_Object in a0 -lw $a0, 4($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 4($v0) -# Save the direction of the method function_type_name_Object in a0 -lw $a0, 8($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 8($v0) -# Save the direction of the method function_copy_Object in a0 -lw $a0, 12($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 12($v0) -# Save the direction of the method function_out_string_IO in a0 -lw $a0, 16($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 16($v0) -# Save the direction of the method function_out_int_IO in a0 -lw $a0, 20($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 20($v0) -# Save the direction of the method function_in_string_IO in a0 -lw $a0, 28($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 24($v0) -# Save the direction of the method function_in_int_IO in a0 -lw $a0, 24($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 28($v0) -# Save the direction of the method function_main_Main in a0 -lw $a0, 80($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 32($v0) -# Save the direction of the method function_test_Main in a0 -lw $a0, 84($v1) -# Save the direction of the method in his position in the dispatch table -sw $a0, 36($v0) -sw $v0, 8($t8) -# Copying parents -lw $v0, 0($t9) -li $t8, 0 -sw $t8, 4($v0) -lw $v0, 4($t9) -li $t8, 0 -sw $t8, 4($v0) -lw $v0, 8($t9) -li $t8, 0 -sw $t8, 4($v0) -lw $v0, 12($t9) -li $t8, 0 -sw $t8, 4($v0) -lw $v0, 16($t9) -lw $t8, 8($t9) -sw $t8, 4($v0) -lw $v0, 20($t9) -lw $t8, 16($t9) -sw $t8, 4($v0) - -entry: -# Gets the params from the stack -move $fp, $sp -# Gets the frame pointer from the stack -# Updates stack pointer pushing local__internal_0 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local__internal_1 to the stack -addiu $sp, $sp, -4 -lw $t0, -0($fp) -# Syscall to allocate memory of the object entry in heap -li $v0, 9 -li $a0, 12 -syscall -# Loads the name of the variable and saves the name like the first field -la $t9, type_Main -sw $t9, 0($v0) -# Saves the size of the node -li $t9, 12 -sw $t9, 4($v0) -move $t0, $v0 -# Adding Type Info addr -la $t8, types -lw $v0, 20($t8) -sw $v0, 8($t0) -lw $t1, -4($fp) -# Static Dispatch of the method main -sw $fp, ($sp) -addiu $sp, $sp, -4 -sw $ra, ($sp) -addiu $sp, $sp, -4 -# Push the arguments to the stack -# The rest of the arguments are push into the stack -sw $t0, ($sp) -addiu $sp, $sp, -4 -# Empty all used registers and saves them to memory -sw $t0, -0($fp) -sw $t1, -4($fp) -# This function will consume the arguments -jal function_main_Main -# Pop ra register of return function of the stack -addiu $sp, $sp, 4 -lw $ra, ($sp) -# Pop fp register from the stack -addiu $sp, $sp, 4 -lw $fp, ($sp) -lw $t0, -4($fp) -# saves the return value -move $t0, $v0 -li $v0, 0 -# Empty all used registers and saves them to memory -sw $t0, -4($fp) -# Removing all locals from stack -addiu $sp, $sp, 8 -jr $ra - - -function_abort_Object: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_abort_Object_self_0 to the stack -addiu $sp, $sp, -4 -lw $t0, -0($fp) -lw $t1, -4($fp) -# Moving self to local_abort_Object_self_0 -move $t1, $t0 -sw $t1, -4($fp) -# Exiting the program -li $t8, 0 -# Printing abort message -li $v0, 4 -la $a0, abort_msg -syscall -li $v0, 4 -lw $a0, 0($t0) -syscall -li $v0, 4 -la $a0, new_line -syscall -li $v0, 17 -move $a0, $t8 -syscall -sw $t0, -0($fp) -sw $t1, -4($fp) - -function_type_name_Object: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_type_name_Object_result_0 to the stack -addiu $sp, $sp, -4 -lw $t0, -0($fp) -lw $t1, -4($fp) -# local_type_name_Object_result_0 <- Type of self -lw $t1, 0($t0) -move $v0, $t1 -# Empty all used registers and saves them to memory -sw $t0, -0($fp) -sw $t1, -4($fp) -# Removing all locals from stack -addiu $sp, $sp, 8 -jr $ra - - -function_copy_Object: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_copy_Object_result_0 to the stack -addiu $sp, $sp, -4 -lw $t0, -0($fp) -lw $t1, -4($fp) -lw $t9, 4($t0) -# Syscall to allocate memory of the object entry in heap -li $v0, 9 -move $a0, $t9 -syscall -move $t1, $v0 -# Loop to copy every field of the previous object -# t8 the register to loop -li $t8, 0 -loop_0: -# In t9 is stored the size of the object -bge $t8, $t9, exit_0 -lw $a0, ($t0) -sw $a0, ($v0) -addi $v0, $v0, 4 -addi $t0, $t0, 4 -# Increase loop counter -addi $t8, $t8, 4 -j loop_0 -exit_0: -move $v0, $t1 -# Empty all used registers and saves them to memory -sw $t0, -0($fp) -sw $t1, -4($fp) -# Removing all locals from stack -addiu $sp, $sp, 8 -jr $ra - - -function_out_string_IO: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Pops the register with the param value word -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_out_string_String_self_0 to the stack -addiu $sp, $sp, -4 -lw $t0, -4($fp) -lw $t1, -8($fp) -# Moving self to local_out_string_String_self_0 -move $t1, $t0 -sw $t1, -8($fp) -lw $t2, -0($fp) -# Printing a string -li $v0, 4 -move $a0, $t2 -syscall -move $v0, $t1 -# Empty all used registers and saves them to memory -sw $t0, -4($fp) -sw $t1, -8($fp) -sw $t2, -0($fp) -# Removing all locals from stack -addiu $sp, $sp, 12 -jr $ra - - -function_out_int_IO: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Pops the register with the param value number -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_out_int_IO_self_0 to the stack -addiu $sp, $sp, -4 -lw $t0, -4($fp) -lw $t1, -8($fp) -# Moving self to local_out_int_IO_self_0 -move $t1, $t0 -sw $t1, -8($fp) -lw $t2, -0($fp) -# Printing an int -li $v0, 1 -move $a0, $t2 -syscall -move $v0, $t1 -# Empty all used registers and saves them to memory -sw $t0, -4($fp) -sw $t1, -8($fp) -sw $t2, -0($fp) -# Removing all locals from stack -addiu $sp, $sp, 12 -jr $ra - - -function_in_int_IO: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_in_int_IO_result_0 to the stack -addiu $sp, $sp, -4 -lw $t0, -4($fp) -# Reading a int -li $v0, 5 -syscall -move $t0, $v0 -move $v0, $t0 -# Empty all used registers and saves them to memory -sw $t0, -4($fp) -# Removing all locals from stack -addiu $sp, $sp, 8 -jr $ra - - -function_in_string_IO: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_in_string_IO_result_0 to the stack -addiu $sp, $sp, -4 -lw $t0, -4($fp) -# Allocating memory for the buffer -li $a0, 356 -li $v0, 9 -syscall -move $t0, $v0 -# Reading a string -# Putting buffer in a0 -move $a0, $t0 -# Putting length of string in a1 -li $a1, 356 -li $v0, 8 -syscall -# Walks to eliminate the newline -move $t9, $t0 -start_1: -lb $t8, 0($t9) -beqz $t8, end_1 -add $t9, $t9, 1 -j start_1 -end_1: -addiu $t9, $t9, -1 -sb $0, ($t9) -move $v0, $t0 -# Empty all used registers and saves them to memory -sw $t0, -4($fp) -# Removing all locals from stack -addiu $sp, $sp, 8 -jr $ra - - -function_length_String: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_length_String_result_0 to the stack -addiu $sp, $sp, -4 -lw $t0, -0($fp) -lw $t1, -4($fp) -move $t8, $t0 -# Determining the length of a string -loop_2: -lb $t9, 0($t8) -beq $t9, $zero, end_2 -addi $t8, $t8, 1 -j loop_2 -end_2: -sub $t1, $t8, $t0 -move $v0, $t1 -# Empty all used registers and saves them to memory -sw $t0, -0($fp) -sw $t1, -4($fp) -# Removing all locals from stack -addiu $sp, $sp, 8 -jr $ra - - -function_concat_String: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Pops the register with the param value word -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_concat_String_result_0 to the stack -addiu $sp, $sp, -4 -lw $t0, -4($fp) -lw $t1, -0($fp) -lw $t2, -8($fp) -# Allocating memory for the buffer -li $a0, 356 -li $v0, 9 -syscall -move $t2, $v0 -# Copy the first string to dest -move $a0, $t0 -move $a1, $t2 -sw $ra, ($sp) -addiu $sp, $sp, -4 -jal strcopier -# Concatenate second string on result buffer -move $a0, $t1 -move $a1, $v0 -jal strcopier -sb $0, 0($v0) -addiu $sp, $sp, 4 -lw $ra, ($sp) -j finish_3 -# Definition of strcopier -strcopier: -# In a0 is the source and in a1 is the destination -loop_3: -lb $t8, ($a0) -beq $t8, $zero, end_3 -addiu $a0, $a0, 1 -sb $t8, ($a1) -addiu $a1, $a1, 1 -b loop_3 -end_3: -move $v0, $a1 -jr $ra -finish_3: -move $v0, $t2 -# Empty all used registers and saves them to memory -sw $t0, -4($fp) -sw $t1, -0($fp) -sw $t2, -8($fp) -# Removing all locals from stack -addiu $sp, $sp, 12 -jr $ra - - -function_substr_String: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Pops the register with the param value begin -addiu $fp, $fp, 4 -# Pops the register with the param value end -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_substr_String_result_0 to the stack -addiu $sp, $sp, -4 -lw $t0, -4($fp) -lw $t1, -0($fp) -lw $t2, -12($fp) -# Allocating memory for the buffer -li $a0, 356 -li $v0, 9 -syscall -move $t2, $v0 -lw $t3, -8($fp) -# Getting the substring of a node -# Move to the first position in the string -li $v0, 0 -move $t8, $t3 -start_4: -lb $t9, 0($t8) -beqz $t9, error_4 -addi $v0, 1 -bgt $v0, $t0, end_len_4 -addi $t8, 1 -j start_4 -end_len_4: -# Saving dest to iterate over him -move $v0, $t2 -loop_4: -sub $t9, $v0, $t2 -beq $t9, $t1, end_4 -lb $t9, 0($t8) -beqz $t9, error_4 -sb $t9, 0($v0) -addi $t8, $t8, 1 -addi $v0, $v0, 1 -j loop_4 -error_4: -la $a0, index_error -li $v0, 4 -move $a0, $t3 -syscall -li $v0, 1 -move $a0, $t0 -syscall -li $v0, 1 -move $a0, $t1 -syscall -j .raise -end_4: -sb $0, 0($v0) -move $v0, $t2 -# Empty all used registers and saves them to memory -sw $t0, -4($fp) -sw $t1, -0($fp) -sw $t2, -12($fp) -sw $t3, -8($fp) -# Removing all locals from stack -addiu $sp, $sp, 16 -jr $ra - - -function_type_name_String: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_type_name_String_result_0 to the stack -addiu $sp, $sp, -4 -lw $t0, -4($fp) -# Saves in local_type_name_String_result_0 type_String -la $t0, type_String -move $v0, $t0 -# Empty all used registers and saves them to memory -sw $t0, -4($fp) -# Removing all locals from stack -addiu $sp, $sp, 8 -jr $ra - - -function_copy_String: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_copy_String_result_0 to the stack -addiu $sp, $sp, -4 -lw $t0, -0($fp) -lw $t1, -4($fp) -# Allocating memory for the buffer -li $a0, 356 -li $v0, 9 -syscall -move $t1, $v0 -# Copy the first string to dest -move $a0, $t0 -move $a1, $t1 -sw $ra, ($sp) -addiu $sp, $sp, -4 -jal strcopier -sb $0, 0($v0) -addiu $sp, $sp, 4 -lw $ra, ($sp) -j finish_5 -finish_5: -move $v0, $t1 -# Empty all used registers and saves them to memory -sw $t0, -0($fp) -sw $t1, -4($fp) -# Removing all locals from stack -addiu $sp, $sp, 8 -jr $ra - - -function_type_name_Int: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_type_name_Int_result_0 to the stack -addiu $sp, $sp, -4 -lw $t0, -4($fp) -# Saves in local_type_name_Int_result_0 type_Int -la $t0, type_Int -move $v0, $t0 -# Empty all used registers and saves them to memory -sw $t0, -4($fp) -# Removing all locals from stack -addiu $sp, $sp, 8 -jr $ra - - -function_copy_Int: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_copy_Int_result_0 to the stack -addiu $sp, $sp, -4 -lw $t0, -0($fp) -lw $t1, -4($fp) -# Moving self to local_copy_Int_result_0 -move $t1, $t0 -sw $t1, -4($fp) -move $v0, $t1 -# Empty all used registers and saves them to memory -sw $t0, -0($fp) -sw $t1, -4($fp) -# Removing all locals from stack -addiu $sp, $sp, 8 -jr $ra - - -function_type_name_Bool: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_type_name_Bool_result_0 to the stack -addiu $sp, $sp, -4 -lw $t0, -4($fp) -# Saves in local_type_name_Bool_result_0 type_Bool -la $t0, type_Bool -move $v0, $t0 -# Empty all used registers and saves them to memory -sw $t0, -4($fp) -# Removing all locals from stack -addiu $sp, $sp, 8 -jr $ra - - -function_copy_Bool: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_copy_result_Bool_0 to the stack -addiu $sp, $sp, -4 -lw $t0, -0($fp) -lw $t1, -4($fp) -# Moving self to local_copy_result_Bool_0 -move $t1, $t0 -sw $t1, -4($fp) -move $v0, $t1 -# Empty all used registers and saves them to memory -sw $t0, -0($fp) -sw $t1, -4($fp) -# Removing all locals from stack -addiu $sp, $sp, 8 -jr $ra - - -function_abort_String: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_abort_String_msg_0 to the stack -addiu $sp, $sp, -4 -lw $t0, -0($fp) -# Saves in self string_abort -la $t0, string_abort -# Printing a string -li $v0, 4 -move $a0, $t0 -syscall -# Exiting the program -li $t8, 0 -li $v0, 17 -move $a0, $t8 -syscall -sw $t0, -0($fp) - -function_abort_Int: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_abort_Int_msg_0 to the stack -addiu $sp, $sp, -4 -lw $t0, -0($fp) -# Saves in self int_abort -la $t0, int_abort -# Printing a string -li $v0, 4 -move $a0, $t0 -syscall -# Exiting the program -li $t8, 0 -li $v0, 17 -move $a0, $t8 -syscall -sw $t0, -0($fp) - -function_abort_Bool: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_abort_Bool_msg_0 to the stack -addiu $sp, $sp, -4 -lw $t0, -0($fp) -# Saves in self bool_abort -la $t0, bool_abort -# Printing a string -li $v0, 4 -move $a0, $t0 -syscall -# Exiting the program -li $t8, 0 -li $v0, 17 -move $a0, $t8 -syscall -sw $t0, -0($fp) - -function_main_Main: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_main_Main_internal_0 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_1 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_2 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_3 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_main_Main_internal_4 to the stack -addiu $sp, $sp, -4 -lw $t0, -0($fp) -lw $t1, -4($fp) -# Find the actual name in the dispatch table -# Gets in a0 the actual direction of the dispatch table -lw $t9, 8($t0) -lw $a0, 8($t9) -# Saves in t8 the direction of function_test_Main -lw $t8, 36($a0) -sw $fp, ($sp) -addiu $sp, $sp, -4 -sw $ra, ($sp) -addiu $sp, $sp, -4 -# Push the arguments to the stack -# The rest of the arguments are push into the stack -sw $t0, ($sp) -addiu $sp, $sp, -4 -# The rest of the arguments are push into the stack -sw $t0, ($sp) -addiu $sp, $sp, -4 -# Empty all used registers and saves them to memory -sw $t0, -0($fp) -sw $t1, -4($fp) -# This function will consume the arguments -jal $t8 -# Pop ra register of return function of the stack -addiu $sp, $sp, 4 -lw $ra, ($sp) -# Pop fp register from the stack -addiu $sp, $sp, 4 -lw $fp, ($sp) -lw $t0, -4($fp) -# saves the return value -move $t0, $v0 -lw $t1, -12($fp) -# local_main_Main_internal_2 <- Type of local_main_Main_internal_0 -la $t1, type_String -lw $t2, -16($fp) -# Saves in local_main_Main_internal_3 data_0 -la $t2, data_0 -# local_main_Main_internal_2 <- local_main_Main_internal_2 = local_main_Main_internal_3 -move $t8, $t1 -move $t9, $t2 -loop_6: -lb $a0, ($t8) -lb $a1, ($t9) -beqz $a0, check_6 -beqz $a1, mismatch_6 -seq $v0, $a0, $a1 -beqz $v0, mismatch_6 -addi $t8, $t8, 1 -addi $t9, $t9, 1 -j loop_6 -mismatch_6: -li $v0, 0 -j end_6 -check_6: -bnez $a1, mismatch_6 -li $v0, 1 -end_6: -move $t1, $v0 -# If not local_main_Main_internal_2 goto continue__55 -sw $t0, -4($fp) -sw $t1, -12($fp) -sw $t2, -16($fp) -beqz $t1, continue__55 -la $a0, dispatch_error -j .raise -continue__55: -lw $t0, -8($fp) -# Static Dispatch of the method length -sw $fp, ($sp) -addiu $sp, $sp, -4 -sw $ra, ($sp) -addiu $sp, $sp, -4 -# Push the arguments to the stack -# The rest of the arguments are push into the stack -lw $t1, -4($fp) -sw $t1, ($sp) -addiu $sp, $sp, -4 -# Empty all used registers and saves them to memory -sw $t0, -8($fp) -sw $t1, -4($fp) -# This function will consume the arguments -jal function_length_String -# Pop ra register of return function of the stack -addiu $sp, $sp, 4 -lw $ra, ($sp) -# Pop fp register from the stack -addiu $sp, $sp, 4 -lw $fp, ($sp) -lw $t0, -8($fp) -# saves the return value -move $t0, $v0 -lw $t1, -0($fp) -lw $t2, -20($fp) -# Find the actual name in the dispatch table -# Gets in a0 the actual direction of the dispatch table -lw $t9, 8($t1) -lw $a0, 8($t9) -# Saves in t8 the direction of function_out_int_IO -lw $t8, 20($a0) -sw $fp, ($sp) -addiu $sp, $sp, -4 -sw $ra, ($sp) -addiu $sp, $sp, -4 -# Push the arguments to the stack -# The rest of the arguments are push into the stack -sw $t0, ($sp) -addiu $sp, $sp, -4 -# The rest of the arguments are push into the stack -sw $t1, ($sp) -addiu $sp, $sp, -4 -# Empty all used registers and saves them to memory -sw $t0, -8($fp) -sw $t1, -0($fp) -sw $t2, -20($fp) -# This function will consume the arguments -jal $t8 -# Pop ra register of return function of the stack -addiu $sp, $sp, 4 -lw $ra, ($sp) -# Pop fp register from the stack -addiu $sp, $sp, 4 -lw $fp, ($sp) -lw $t0, -20($fp) -# saves the return value -move $t0, $v0 -move $v0, $t0 -# Empty all used registers and saves them to memory -sw $t0, -20($fp) -# Removing all locals from stack -addiu $sp, $sp, 24 -jr $ra - - -function_test_Main: -# Gets the params from the stack -move $fp, $sp -# Pops the register with the param value self -addiu $fp, $fp, 4 -# Pops the register with the param value x -addiu $fp, $fp, 4 -# Gets the frame pointer from the stack -# Updates stack pointer pushing local_test_Main_internal_0 to the stack -addiu $sp, $sp, -4 -lw $t0, -8($fp) -# Saves in local_test_Main_internal_0 data_1 -la $t0, data_1 -lw $t1, -0($fp) -# Initialize new node -li $a0, 12 -li $v0, 9 -syscall -la $t9, type_String -sw $t9, 0($v0) -li $t9, 12 -sw $t9, 4($v0) -move $t1, $v0 -# Saving the methods of object -# Adding Type Info addr -la $t8, types -lw $v0, 8($t8) -sw $v0, 8($t1) -move $v0, $t0 -# Empty all used registers and saves them to memory -sw $t0, -8($fp) -sw $t1, -0($fp) -# Removing all locals from stack -addiu $sp, $sp, 12 -jr $ra - -# Raise exception method -.raise: -li $v0, 4 -syscall -li $v0, 17 -li $a0, 1 -syscall - -.data -abort_msg: .asciiz "Abort called from class " -new_line: .asciiz " -" -string_abort: .asciiz "Abort called from class String -" -int_abort: .asciiz "Abort called from class Int -" -bool_abort: .asciiz "Abort called from class Bool -" -type_Object: .asciiz "Object" -type_IO: .asciiz "IO" -type_String: .asciiz "String" -type_Int: .asciiz "Int" -type_Bool: .asciiz "Bool" -type_Main: .asciiz "Main" -methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -type_Void: .asciiz "Void" -types: .word 0, 0, 0, 0, 0, 0 -data_0: .asciiz "Void" -data_1: .asciiz "HI" -zero_error: .asciiz "Division by zero error -" -case_void_error: .asciiz "Case on void error -" -dispatch_error: .asciiz "Dispatch on void error -" -case_error: .asciiz "Case statement without a matching branch error -" -index_error: .asciiz "Substring out of range error -" -heap_error: .asciiz "Heap overflow error -" \ No newline at end of file From 78c2297849b6269571b24cf5547dee8de83d88a3 Mon Sep 17 00:00:00 2001 From: Loraine Monteagudo Date: Mon, 30 Nov 2020 13:14:58 -0700 Subject: [PATCH 60/60] Fixing litle bug in case nodes. Updating report. Hopefully last commit :) --- doc/Readme.md | 34 +- doc/report/report.aux | 22 - doc/report/report.log | 1200 ------------ doc/report/report.out | 12 - doc/report/report.pdf | Bin 156672 -> 158765 bytes doc/report/report.synctex.gz | Bin 88218 -> 0 bytes doc/report/report.tex | 286 --- doc/report/resources/case.cl | 5 - doc/report/resources/luftballons.pl | 22 - doc/report/resources/object.png | Bin 25224 -> 0 bytes doc/report/resources/parser.py | 3 - doc/report/structure.tex | 92 - .../__pycache__/cil_visitor.cpython-37.pyc | Bin 12659 -> 12659 bytes src/codegen/visitors/base_mips_visitor.py | 16 + src/codegen/visitors/cil_visitor.py | 24 +- src/codegen/visitors/mips_visitor.py | 10 +- src/cool_parser/output_parser/parselog.txt | 1658 ++++++++--------- src/hello_world.cl | 10 + src/semantic/types.py | 2 + src/test.mips | 1320 +++++++++++++ src/utils/utils.py | 1 + tests/codegen/arith.mips | 38 +- tests/codegen/hairyscary.mips | 328 ++-- 23 files changed, 2366 insertions(+), 2717 deletions(-) delete mode 100644 doc/report/report.aux delete mode 100644 doc/report/report.log delete mode 100644 doc/report/report.out delete mode 100644 doc/report/report.synctex.gz delete mode 100644 doc/report/report.tex delete mode 100644 doc/report/resources/case.cl delete mode 100644 doc/report/resources/luftballons.pl delete mode 100644 doc/report/resources/object.png delete mode 100644 doc/report/resources/parser.py delete mode 100644 doc/report/structure.tex create mode 100644 src/hello_world.cl create mode 100644 src/test.mips diff --git a/doc/Readme.md b/doc/Readme.md index 5c2d6c9d..71fb2c23 100644 --- a/doc/Readme.md +++ b/doc/Readme.md @@ -1,39 +1,11 @@ # Documentación -> Introduzca sus datos (de todo el equipo) en la siguiente tabla: - **Nombre** | **Grupo** | **Github** --|--|-- Loraine Monteagudo García | C411 | [@lorainemg](https://github.com/lorainemg) Amanda Marrero Santos | C411 | [@amymsantos42](https://github.com/amymsantos42) -Manuel Fernández Arias | C411 | [@nolyfdezarias](https://github.com/nolyfdezarias) - -## Readme - -Modifique el contenido de este documento para documentar de forma clara y concisa los siguientes aspectos: - -- Cómo ejecutar (y compilar si es necesario) su compilador. -- Requisitos adicionales, dependencias, configuración, etc. -- Opciones adicionales que tenga su compilador. - -### Sobre los Equipos de Desarrollo - -Para desarrollar el compilador del lenguaje COOL se trabajará en equipos de 2 o 3 integrantes. El proyecto de Compilación será recogido y evaluado únicamente a través de Github. Es imprescindible tener una cuenta de Github para cada participante, y que su proyecto esté correctamente hosteado en esta plataforma. Próximamente les daremos las instrucciones mínimas necesarias para ello. - -### Sobre los Materiales a Entregar - -Para la evaluación del proyecto Ud. debe entregar un informe en formato PDF (`report.pdf`) que resuma de manera organizada y comprensible la arquitectura e implementación de su compilador. -El documento **NO** debe exceder las 5 cuartillas. -En él explicará en más detalle su solución a los problemas que, durante la implementación de cada una de las fases del proceso de compilación, hayan requerido de Ud. especial atención. - -### Estructura del reporte - -Usted es libre de estructurar su reporte escrito como más conveniente le parezca. A continuación le sugerimos algunas secciones que no deberían faltar, aunque puede mezclar, renombrar y organizarlas de la manera que mejor le parezca: - -- **Uso del compilador**: detalles sobre las opciones de líneas de comando, si tiene opciones adicionales (e.j., `--ast` genera un AST en JSON, etc.). Básicamente lo mismo que pondrá en este Readme. -- **Arquitectura del compilador**: una explicación general de la arquitectura, en cuántos módulos se divide el proyecto, cuantas fases tiene, qué tipo de gramática se utiliza, y en general, como se organiza el proyecto. Una buena imagen siempre ayuda. -- **Problemas técnicos**: detalles sobre cualquier problema teórico o técnico interesante que haya necesitado resolver de forma particular. +Manuel S. Fernández Arias | C411 | [@nolyfdezarias](https://github.com/nolyfdezarias) -## Sobre la Fecha de Entrega +## Uso del compilador -Se realizarán recogidas parciales del proyecto a lo largo del curso. En el Canal de Telegram [@matcom_cmp](https://t.me/matcom_cmp) se anunciará la fecha y requisitos de cada primera entrega. +Para el uso del compilador es necesario tener Python 3.7 o superior. Se hace uso de los paquetes `ply` para la generación del lexer y el parser y de `pytest` y `pytest-ordering` para la ejecución de los tests automáticos. Todos los paquetes mencionados pueden ser instalados usando pip ejecutando `pip install -r requirements.txt` en la raíz del proyecto. El archivo principal es `main.py`, ubicado en la carpeta `src`, y recibe como argumento 2 ficheros: uno de entrada que debe tener la extensión `.cl` con el código en COOL y otro de salida que será en donde se guardará el código MIPS generado. También se puede ejecutar el compilador haciendo uso del archivo `coolc.sh`, ubicado también en `src`, que espera como parámetro el programa en COOL. El fichero de MIPS generado por el compilador tendrá el mismo nombre que el fichero de entrada y será ubicado en la misma carpeta, pero tendrá la extensión `.mips`. Este fichero puede ser ejecutado por el simulador de MIPS `spim`. diff --git a/doc/report/report.aux b/doc/report/report.aux deleted file mode 100644 index a8c9b632..00000000 --- a/doc/report/report.aux +++ /dev/null @@ -1,22 +0,0 @@ -\relax -\providecommand*\new@tpo@label[2]{} -\babel@aux{english}{} -\@writefile{toc}{\contentsline {section}{\numberline {1}Uso del compilador}{1}} -\@writefile{toc}{\contentsline {section}{\numberline {2}Arquitectura del compilador}{1}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}An\IeC {\'a}lisis sint\IeC {\'a}ctico}{1}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.1}An\IeC {\'a}lisis l\IeC {\'e}xico}{2}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.2}Parsing}{2}} -\newlabel{lst:parser}{{1}{2}} -\@writefile{lol}{\contentsline {lstlisting}{\numberline {1}Funci\IeC {\'o}n de una regla gramatical en PLY}{2}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}An\IeC {\'a}lisis sem\IeC {\'a}ntico}{3}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Generaci\IeC {\'o}n de c\IeC {\'o}digo}{3}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.3.1}C\IeC {\'o}digo Intermedio}{3}} -\newlabel{lst:parser}{{2}{4}} -\@writefile{lol}{\contentsline {lstlisting}{\numberline {2}Forma de la expresi\IeC {\'o}n case}{4}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.3.2}C\IeC {\'o}digo de M\IeC {\'a}quina}{4}} -\newlabel{fig:objects}{{2.3.2}{6}} -\@writefile{lof}{\contentsline {figure}{\numberline {2.1}{\ignorespaces Representaci\IeC {\'o}n de los objetos en memoria}}{6}} -\@writefile{toc}{\contentsline {section}{\numberline {3}Problemas t\IeC {\'e}cnicos y te\IeC {\'o}ricos}{7}} -\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Comentarios y strings en el lexer}{7}} -\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Tipos por valor y por referencia}{8}} -\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Valor Void en Mips}{8}} diff --git a/doc/report/report.log b/doc/report/report.log deleted file mode 100644 index b5b6f7d2..00000000 --- a/doc/report/report.log +++ /dev/null @@ -1,1200 +0,0 @@ -This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=pdflatex 2018.11.1) 29 NOV 2020 21:47 -entering extended mode - restricted \write18 enabled. - %&-line parsing enabled. -**report.tex -(./report.tex -LaTeX2e <2017-04-15> -Babel <3.18> and hyphenation patterns for 84 language(s) loaded. -(/usr/share/texlive/texmf-dist/tex/latex/koma-script/scrartcl.cls -Document Class: scrartcl 2017/09/07 v3.24 KOMA-Script document class (article) -(/usr/share/texlive/texmf-dist/tex/latex/koma-script/scrkbase.sty -Package: scrkbase 2017/09/07 v3.24 KOMA-Script package (KOMA-Script-dependent b -asics and keyval usage) - -(/usr/share/texlive/texmf-dist/tex/latex/koma-script/scrbase.sty -Package: scrbase 2017/09/07 v3.24 KOMA-Script package (KOMA-Script-independent -basics and keyval usage) - -(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty -Package: keyval 2014/10/28 v1.15 key=value parser (DPC) -\KV@toks@=\toks14 -) -(/usr/share/texlive/texmf-dist/tex/latex/koma-script/scrlfile.sty -Package: scrlfile 2017/09/07 v3.24 KOMA-Script package (loading files) -))) -(/usr/share/texlive/texmf-dist/tex/latex/koma-script/tocbasic.sty -Package: tocbasic 2017/09/07 v3.24 KOMA-Script package (handling toc-files) -\scr@dte@tocline@numberwidth=\skip41 -\scr@dte@tocline@numbox=\box26 -) -Package tocbasic Info: omitting babel extension for `toc' -(tocbasic) because of feature `nobabel' available -(tocbasic) for `toc' on input line 133. -Package tocbasic Info: omitting babel extension for `lof' -(tocbasic) because of feature `nobabel' available -(tocbasic) for `lof' on input line 135. -Package tocbasic Info: omitting babel extension for `lot' -(tocbasic) because of feature `nobabel' available -(tocbasic) for `lot' on input line 136. -Package scrartcl Info: You've used standard option `11pt'. -(scrartcl) This is correct! -(scrartcl) Internally I'm using `fontsize=11pt'. -(scrartcl) If you'd like to set the option with \KOMAoptions, -(scrartcl) you'd have to use `fontsize=11pt' there -(scrartcl) instead of `11pt', too. -Class scrartcl Info: File `scrsize11pt.clo' used to setup font sizes on input l -ine 2080. - -(/usr/share/texlive/texmf-dist/tex/latex/koma-script/scrsize11pt.clo -File: scrsize11pt.clo 2017/09/07 v3.24 KOMA-Script font size class option (11pt -) -) -(/usr/share/texlive/texmf-dist/tex/latex/koma-script/typearea.sty -Package: typearea 2017/09/07 v3.24 KOMA-Script package (type area) -\ta@bcor=\skip42 -\ta@div=\count79 -\ta@hblk=\skip43 -\ta@vblk=\skip44 -\ta@temp=\skip45 -\footheight=\skip46 -Package typearea Info: These are the values describing the layout: -(typearea) DIV = 10 -(typearea) BCOR = 0.0pt -(typearea) \paperwidth = 597.50793pt -(typearea) \textwidth = 418.25555pt -(typearea) DIV departure = -6% -(typearea) \evensidemargin = 17.3562pt -(typearea) \oddsidemargin = 17.3562pt -(typearea) \paperheight = 845.04694pt -(typearea) \textheight = 595.80026pt -(typearea) \topmargin = -25.16531pt -(typearea) \headheight = 17.0pt -(typearea) \headsep = 20.40001pt -(typearea) \topskip = 11.0pt -(typearea) \footskip = 47.6pt -(typearea) \baselineskip = 13.6pt -(typearea) on input line 1686. -) -\c@part=\count80 -\c@section=\count81 -\c@subsection=\count82 -\c@subsubsection=\count83 -\c@paragraph=\count84 -\c@subparagraph=\count85 -\scr@dte@part@maxnumwidth=\skip47 -\scr@dte@section@maxnumwidth=\skip48 -\scr@dte@subsection@maxnumwidth=\skip49 -\scr@dte@subsubsection@maxnumwidth=\skip50 -\scr@dte@paragraph@maxnumwidth=\skip51 -\scr@dte@subparagraph@maxnumwidth=\skip52 -LaTeX Info: Redefining \textsubscript on input line 4161. -\abovecaptionskip=\skip53 -\belowcaptionskip=\skip54 -\c@pti@nb@sid@b@x=\box27 -\c@figure=\count86 -\c@table=\count87 -Class scrartcl Info: Redefining `\numberline' on input line 5319. -\bibindent=\dimen102 -) -(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty -Package: graphicx 2017/06/01 v1.1a Enhanced LaTeX Graphics (DPC,SPQR) - -(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty -Package: graphics 2017/06/25 v1.2c Standard LaTeX Graphics (DPC,SPQR) - -(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty -Package: trig 2016/01/03 v1.10 sin cos tan (DPC) -) -(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg -File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration -) -Package graphics Info: Driver file: pdftex.def on input line 99. - -(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def -File: pdftex.def 2018/01/08 v1.0l Graphics/color driver for pdftex -)) -\Gin@req@height=\dimen103 -\Gin@req@width=\dimen104 -) -(./structure.tex (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty -Package: amsmath 2017/09/02 v2.17a AMS math features -\@mathmargin=\skip55 - -For additional information on amsmath, use the `?' option. -(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty -Package: amstext 2000/06/29 v2.01 AMS text - -(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty -File: amsgen.sty 1999/11/30 v2.0 generic functions -\@emptytoks=\toks15 -\ex@=\dimen105 -)) -(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty -Package: amsbsy 1999/11/29 v1.2d Bold Symbols -\pmbraise@=\dimen106 -) -(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty -Package: amsopn 2016/03/08 v2.02 operator names -) -\inf@bad=\count88 -LaTeX Info: Redefining \frac on input line 213. -\uproot@=\count89 -\leftroot@=\count90 -LaTeX Info: Redefining \overline on input line 375. -\classnum@=\count91 -\DOTSCASE@=\count92 -LaTeX Info: Redefining \ldots on input line 472. -LaTeX Info: Redefining \dots on input line 475. -LaTeX Info: Redefining \cdots on input line 596. -\Mathstrutbox@=\box28 -\strutbox@=\box29 -\big@size=\dimen107 -LaTeX Font Info: Redeclaring font encoding OML on input line 712. -LaTeX Font Info: Redeclaring font encoding OMS on input line 713. -\macc@depth=\count93 -\c@MaxMatrixCols=\count94 -\dotsspace@=\muskip10 -\c@parentequation=\count95 -\dspbrk@lvl=\count96 -\tag@help=\toks16 -\row@=\count97 -\column@=\count98 -\maxfields@=\count99 -\andhelp@=\toks17 -\eqnshift@=\dimen108 -\alignsep@=\dimen109 -\tagshift@=\dimen110 -\tagwidth@=\dimen111 -\totwidth@=\dimen112 -\lineht@=\dimen113 -\@envbody=\toks18 -\multlinegap=\skip56 -\multlinetaggap=\skip57 -\mathdisplay@stack=\toks19 -LaTeX Info: Redefining \[ on input line 2817. -LaTeX Info: Redefining \] on input line 2818. -) -(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty -Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support -\symAMSa=\mathgroup4 -\symAMSb=\mathgroup5 -LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' -(Font) U/euf/m/n --> U/euf/b/n on input line 106. -) -(/usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty -Package: amsthm 2017/10/31 v2.20.4 -\thm@style=\toks20 -\thm@bodyfont=\toks21 -\thm@headfont=\toks22 -\thm@notefont=\toks23 -\thm@headpunct=\toks24 -\thm@preskip=\skip58 -\thm@postskip=\skip59 -\thm@headsep=\skip60 -\dth@everypar=\toks25 -) -(/usr/share/texlive/texmf-dist/tex/latex/listings/listings.sty -\lst@mode=\count100 -\lst@gtempboxa=\box30 -\lst@token=\toks26 -\lst@length=\count101 -\lst@currlwidth=\dimen114 -\lst@column=\count102 -\lst@pos=\count103 -\lst@lostspace=\dimen115 -\lst@width=\dimen116 -\lst@newlines=\count104 -\lst@lineno=\count105 -\lst@maxwidth=\dimen117 - -(/usr/share/texlive/texmf-dist/tex/latex/listings/lstmisc.sty -File: lstmisc.sty 2015/06/04 1.6 (Carsten Heinz) -\c@lstnumber=\count106 -\lst@skipnumbers=\count107 -\lst@framebox=\box31 -) -(/usr/share/texlive/texmf-dist/tex/latex/listings/listings.cfg -File: listings.cfg 2015/06/04 1.6 listings configuration -)) -Package: listings 2015/06/04 1.6 (Carsten Heinz) - -(/usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty -Package: babel 2018/02/14 3.18 The Babel package - -(/usr/share/texlive/texmf-dist/tex/generic/babel/switch.def -File: switch.def 2018/02/14 3.18 Babel switching mechanism -) -(/usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf -Language: english 2017/06/06 v3.3r English support from the babel system - -(/usr/share/texlive/texmf-dist/tex/generic/babel/babel.def -File: babel.def 2018/02/14 3.18 Babel common definitions -\babel@savecnt=\count108 -\U@D=\dimen118 - -(/usr/share/texlive/texmf-dist/tex/generic/babel/txtbabel.def) -\bbl@dirlevel=\count109 -) -\l@canadian = a dialect from \language\l@american -\l@australian = a dialect from \language\l@british -\l@newzealand = a dialect from \language\l@british -)) -(/usr/share/texlive/texmf-dist/tex/latex/booktabs/booktabs.sty -Package: booktabs 2016/04/27 v1.618033 publication quality tables -\heavyrulewidth=\dimen119 -\lightrulewidth=\dimen120 -\cmidrulewidth=\dimen121 -\belowrulesep=\dimen122 -\belowbottomsep=\dimen123 -\aboverulesep=\dimen124 -\abovetopsep=\dimen125 -\cmidrulesep=\dimen126 -\cmidrulekern=\dimen127 -\defaultaddspace=\dimen128 -\@cmidla=\count110 -\@cmidlb=\count111 -\@aboverulesep=\dimen129 -\@belowrulesep=\dimen130 -\@thisruleclass=\count112 -\@lastruleclass=\count113 -\@thisrulewidth=\dimen131 -) -(/usr/share/texlive/texmf-dist/tex/latex/enumitem/enumitem.sty -Package: enumitem 2011/09/28 v3.5.2 Customized lists -\labelindent=\skip61 -\enit@outerparindent=\dimen132 -\enit@toks=\toks27 -\enit@inbox=\box32 -\enitdp@description=\count114 -) -(/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty -Package: geometry 2010/09/12 v5.6 Page Geometry - -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty -Package: ifpdf 2017/03/15 v3.2 Provides the ifpdf switch -) -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty -Package: ifvtex 2016/05/16 v1.6 Detect VTeX and its facilities (HO) -Package ifvtex Info: VTeX not detected. -) -(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty -Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional -) -\Gm@cnth=\count115 -\Gm@cntv=\count116 -\c@Gm@tempcnt=\count117 -\Gm@bindingoffset=\dimen133 -\Gm@wd@mp=\dimen134 -\Gm@odd@mp=\dimen135 -\Gm@even@mp=\dimen136 -\Gm@layoutwidth=\dimen137 -\Gm@layoutheight=\dimen138 -\Gm@layouthoffset=\dimen139 -\Gm@layoutvoffset=\dimen140 -\Gm@dimlist=\toks28 -) -(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty -Package: inputenc 2015/03/17 v1.2c Input encoding file -\inpenc@prehook=\toks29 -\inpenc@posthook=\toks30 - -(/usr/share/texlive/texmf-dist/tex/latex/base/utf8.def -File: utf8.def 2017/01/28 v1.1t UTF-8 support for inputenc -Now handling font encoding OML ... -... no UTF-8 mapping file for font encoding OML -Now handling font encoding T1 ... -... processing UTF-8 mapping file for font encoding T1 - -(/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.dfu -File: t1enc.dfu 2017/01/28 v1.1t UTF-8 support for inputenc - defining Unicode char U+00A0 (decimal 160) - defining Unicode char U+00A1 (decimal 161) - defining Unicode char U+00A3 (decimal 163) - defining Unicode char U+00AB (decimal 171) - defining Unicode char U+00AD (decimal 173) - defining Unicode char U+00BB (decimal 187) - defining Unicode char U+00BF (decimal 191) - defining Unicode char U+00C0 (decimal 192) - defining Unicode char U+00C1 (decimal 193) - defining Unicode char U+00C2 (decimal 194) - defining Unicode char U+00C3 (decimal 195) - defining Unicode char U+00C4 (decimal 196) - defining Unicode char U+00C5 (decimal 197) - defining Unicode char U+00C6 (decimal 198) - defining Unicode char U+00C7 (decimal 199) - defining Unicode char U+00C8 (decimal 200) - defining Unicode char U+00C9 (decimal 201) - defining Unicode char U+00CA (decimal 202) - defining Unicode char U+00CB (decimal 203) - defining Unicode char U+00CC (decimal 204) - defining Unicode char U+00CD (decimal 205) - defining Unicode char U+00CE (decimal 206) - defining Unicode char U+00CF (decimal 207) - defining Unicode char U+00D0 (decimal 208) - defining Unicode char U+00D1 (decimal 209) - defining Unicode char U+00D2 (decimal 210) - defining Unicode char U+00D3 (decimal 211) - defining Unicode char U+00D4 (decimal 212) - defining Unicode char U+00D5 (decimal 213) - defining Unicode char U+00D6 (decimal 214) - defining Unicode char U+00D8 (decimal 216) - defining Unicode char U+00D9 (decimal 217) - defining Unicode char U+00DA (decimal 218) - defining Unicode char U+00DB (decimal 219) - defining Unicode char U+00DC (decimal 220) - defining Unicode char U+00DD (decimal 221) - defining Unicode char U+00DE (decimal 222) - defining Unicode char U+00DF (decimal 223) - defining Unicode char U+00E0 (decimal 224) - defining Unicode char U+00E1 (decimal 225) - defining Unicode char U+00E2 (decimal 226) - defining Unicode char U+00E3 (decimal 227) - defining Unicode char U+00E4 (decimal 228) - defining Unicode char U+00E5 (decimal 229) - defining Unicode char U+00E6 (decimal 230) - defining Unicode char U+00E7 (decimal 231) - defining Unicode char U+00E8 (decimal 232) - defining Unicode char U+00E9 (decimal 233) - defining Unicode char U+00EA (decimal 234) - defining Unicode char U+00EB (decimal 235) - defining Unicode char U+00EC (decimal 236) - defining Unicode char U+00ED (decimal 237) - defining Unicode char U+00EE (decimal 238) - defining Unicode char U+00EF (decimal 239) - defining Unicode char U+00F0 (decimal 240) - defining Unicode char U+00F1 (decimal 241) - defining Unicode char U+00F2 (decimal 242) - defining Unicode char U+00F3 (decimal 243) - defining Unicode char U+00F4 (decimal 244) - defining Unicode char U+00F5 (decimal 245) - defining Unicode char U+00F6 (decimal 246) - defining Unicode char U+00F8 (decimal 248) - defining Unicode char U+00F9 (decimal 249) - defining Unicode char U+00FA (decimal 250) - defining Unicode char U+00FB (decimal 251) - defining Unicode char U+00FC (decimal 252) - defining Unicode char U+00FD (decimal 253) - defining Unicode char U+00FE (decimal 254) - defining Unicode char U+00FF (decimal 255) - defining Unicode char U+0100 (decimal 256) - defining Unicode char U+0101 (decimal 257) - defining Unicode char U+0102 (decimal 258) - defining Unicode char U+0103 (decimal 259) - defining Unicode char U+0104 (decimal 260) - defining Unicode char U+0105 (decimal 261) - defining Unicode char U+0106 (decimal 262) - defining Unicode char U+0107 (decimal 263) - defining Unicode char U+0108 (decimal 264) - defining Unicode char U+0109 (decimal 265) - defining Unicode char U+010A (decimal 266) - defining Unicode char U+010B (decimal 267) - defining Unicode char U+010C (decimal 268) - defining Unicode char U+010D (decimal 269) - defining Unicode char U+010E (decimal 270) - defining Unicode char U+010F (decimal 271) - defining Unicode char U+0110 (decimal 272) - defining Unicode char U+0111 (decimal 273) - defining Unicode char U+0112 (decimal 274) - defining Unicode char U+0113 (decimal 275) - defining Unicode char U+0114 (decimal 276) - defining Unicode char U+0115 (decimal 277) - defining Unicode char U+0116 (decimal 278) - defining Unicode char U+0117 (decimal 279) - defining Unicode char U+0118 (decimal 280) - defining Unicode char U+0119 (decimal 281) - defining Unicode char U+011A (decimal 282) - defining Unicode char U+011B (decimal 283) - defining Unicode char U+011C (decimal 284) - defining Unicode char U+011D (decimal 285) - defining Unicode char U+011E (decimal 286) - defining Unicode char U+011F (decimal 287) - defining Unicode char U+0120 (decimal 288) - defining Unicode char U+0121 (decimal 289) - defining Unicode char U+0122 (decimal 290) - defining Unicode char U+0123 (decimal 291) - defining Unicode char U+0124 (decimal 292) - defining Unicode char U+0125 (decimal 293) - defining Unicode char U+0128 (decimal 296) - defining Unicode char U+0129 (decimal 297) - defining Unicode char U+012A (decimal 298) - defining Unicode char U+012B (decimal 299) - defining Unicode char U+012C (decimal 300) - defining Unicode char U+012D (decimal 301) - defining Unicode char U+012E (decimal 302) - defining Unicode char U+012F (decimal 303) - defining Unicode char U+0130 (decimal 304) - defining Unicode char U+0131 (decimal 305) - defining Unicode char U+0132 (decimal 306) - defining Unicode char U+0133 (decimal 307) - defining Unicode char U+0134 (decimal 308) - defining Unicode char U+0135 (decimal 309) - defining Unicode char U+0136 (decimal 310) - defining Unicode char U+0137 (decimal 311) - defining Unicode char U+0139 (decimal 313) - defining Unicode char U+013A (decimal 314) - defining Unicode char U+013B (decimal 315) - defining Unicode char U+013C (decimal 316) - defining Unicode char U+013D (decimal 317) - defining Unicode char U+013E (decimal 318) - defining Unicode char U+0141 (decimal 321) - defining Unicode char U+0142 (decimal 322) - defining Unicode char U+0143 (decimal 323) - defining Unicode char U+0144 (decimal 324) - defining Unicode char U+0145 (decimal 325) - defining Unicode char U+0146 (decimal 326) - defining Unicode char U+0147 (decimal 327) - defining Unicode char U+0148 (decimal 328) - defining Unicode char U+014A (decimal 330) - defining Unicode char U+014B (decimal 331) - defining Unicode char U+014C (decimal 332) - defining Unicode char U+014D (decimal 333) - defining Unicode char U+014E (decimal 334) - defining Unicode char U+014F (decimal 335) - defining Unicode char U+0150 (decimal 336) - defining Unicode char U+0151 (decimal 337) - defining Unicode char U+0152 (decimal 338) - defining Unicode char U+0153 (decimal 339) - defining Unicode char U+0154 (decimal 340) - defining Unicode char U+0155 (decimal 341) - defining Unicode char U+0156 (decimal 342) - defining Unicode char U+0157 (decimal 343) - defining Unicode char U+0158 (decimal 344) - defining Unicode char U+0159 (decimal 345) - defining Unicode char U+015A (decimal 346) - defining Unicode char U+015B (decimal 347) - defining Unicode char U+015C (decimal 348) - defining Unicode char U+015D (decimal 349) - defining Unicode char U+015E (decimal 350) - defining Unicode char U+015F (decimal 351) - defining Unicode char U+0160 (decimal 352) - defining Unicode char U+0161 (decimal 353) - defining Unicode char U+0162 (decimal 354) - defining Unicode char U+0163 (decimal 355) - defining Unicode char U+0164 (decimal 356) - defining Unicode char U+0165 (decimal 357) - defining Unicode char U+0168 (decimal 360) - defining Unicode char U+0169 (decimal 361) - defining Unicode char U+016A (decimal 362) - defining Unicode char U+016B (decimal 363) - defining Unicode char U+016C (decimal 364) - defining Unicode char U+016D (decimal 365) - defining Unicode char U+016E (decimal 366) - defining Unicode char U+016F (decimal 367) - defining Unicode char U+0170 (decimal 368) - defining Unicode char U+0171 (decimal 369) - defining Unicode char U+0172 (decimal 370) - defining Unicode char U+0173 (decimal 371) - defining Unicode char U+0174 (decimal 372) - defining Unicode char U+0175 (decimal 373) - defining Unicode char U+0176 (decimal 374) - defining Unicode char U+0177 (decimal 375) - defining Unicode char U+0178 (decimal 376) - defining Unicode char U+0179 (decimal 377) - defining Unicode char U+017A (decimal 378) - defining Unicode char U+017B (decimal 379) - defining Unicode char U+017C (decimal 380) - defining Unicode char U+017D (decimal 381) - defining Unicode char U+017E (decimal 382) - defining Unicode char U+01CD (decimal 461) - defining Unicode char U+01CE (decimal 462) - defining Unicode char U+01CF (decimal 463) - defining Unicode char U+01D0 (decimal 464) - defining Unicode char U+01D1 (decimal 465) - defining Unicode char U+01D2 (decimal 466) - defining Unicode char U+01D3 (decimal 467) - defining Unicode char U+01D4 (decimal 468) - defining Unicode char U+01E2 (decimal 482) - defining Unicode char U+01E3 (decimal 483) - defining Unicode char U+01E6 (decimal 486) - defining Unicode char U+01E7 (decimal 487) - defining Unicode char U+01E8 (decimal 488) - defining Unicode char U+01E9 (decimal 489) - defining Unicode char U+01EA (decimal 490) - defining Unicode char U+01EB (decimal 491) - defining Unicode char U+01F0 (decimal 496) - defining Unicode char U+01F4 (decimal 500) - defining Unicode char U+01F5 (decimal 501) - defining Unicode char U+0218 (decimal 536) - defining Unicode char U+0219 (decimal 537) - defining Unicode char U+021A (decimal 538) - defining Unicode char U+021B (decimal 539) - defining Unicode char U+0232 (decimal 562) - defining Unicode char U+0233 (decimal 563) - defining Unicode char U+1E02 (decimal 7682) - defining Unicode char U+1E03 (decimal 7683) - defining Unicode char U+200C (decimal 8204) - defining Unicode char U+2010 (decimal 8208) - defining Unicode char U+2011 (decimal 8209) - defining Unicode char U+2012 (decimal 8210) - defining Unicode char U+2013 (decimal 8211) - defining Unicode char U+2014 (decimal 8212) - defining Unicode char U+2015 (decimal 8213) - defining Unicode char U+2018 (decimal 8216) - defining Unicode char U+2019 (decimal 8217) - defining Unicode char U+201A (decimal 8218) - defining Unicode char U+201C (decimal 8220) - defining Unicode char U+201D (decimal 8221) - defining Unicode char U+201E (decimal 8222) - defining Unicode char U+2030 (decimal 8240) - defining Unicode char U+2031 (decimal 8241) - defining Unicode char U+2039 (decimal 8249) - defining Unicode char U+203A (decimal 8250) - defining Unicode char U+2423 (decimal 9251) - defining Unicode char U+1E20 (decimal 7712) - defining Unicode char U+1E21 (decimal 7713) -) -Now handling font encoding OT1 ... -... processing UTF-8 mapping file for font encoding OT1 - -(/usr/share/texlive/texmf-dist/tex/latex/base/ot1enc.dfu -File: ot1enc.dfu 2017/01/28 v1.1t UTF-8 support for inputenc - defining Unicode char U+00A0 (decimal 160) - defining Unicode char U+00A1 (decimal 161) - defining Unicode char U+00A3 (decimal 163) - defining Unicode char U+00AD (decimal 173) - defining Unicode char U+00B8 (decimal 184) - defining Unicode char U+00BF (decimal 191) - defining Unicode char U+00C5 (decimal 197) - defining Unicode char U+00C6 (decimal 198) - defining Unicode char U+00D8 (decimal 216) - defining Unicode char U+00DF (decimal 223) - defining Unicode char U+00E6 (decimal 230) - defining Unicode char U+00EC (decimal 236) - defining Unicode char U+00ED (decimal 237) - defining Unicode char U+00EE (decimal 238) - defining Unicode char U+00EF (decimal 239) - defining Unicode char U+00F8 (decimal 248) - defining Unicode char U+0131 (decimal 305) - defining Unicode char U+0141 (decimal 321) - defining Unicode char U+0142 (decimal 322) - defining Unicode char U+0152 (decimal 338) - defining Unicode char U+0153 (decimal 339) - defining Unicode char U+0174 (decimal 372) - defining Unicode char U+0175 (decimal 373) - defining Unicode char U+0176 (decimal 374) - defining Unicode char U+0177 (decimal 375) - defining Unicode char U+0218 (decimal 536) - defining Unicode char U+0219 (decimal 537) - defining Unicode char U+021A (decimal 538) - defining Unicode char U+021B (decimal 539) - defining Unicode char U+2013 (decimal 8211) - defining Unicode char U+2014 (decimal 8212) - defining Unicode char U+2018 (decimal 8216) - defining Unicode char U+2019 (decimal 8217) - defining Unicode char U+201C (decimal 8220) - defining Unicode char U+201D (decimal 8221) -) -Now handling font encoding OMS ... -... processing UTF-8 mapping file for font encoding OMS - -(/usr/share/texlive/texmf-dist/tex/latex/base/omsenc.dfu -File: omsenc.dfu 2017/01/28 v1.1t UTF-8 support for inputenc - defining Unicode char U+00A7 (decimal 167) - defining Unicode char U+00B6 (decimal 182) - defining Unicode char U+00B7 (decimal 183) - defining Unicode char U+2020 (decimal 8224) - defining Unicode char U+2021 (decimal 8225) - defining Unicode char U+2022 (decimal 8226) -) -Now handling font encoding OMX ... -... no UTF-8 mapping file for font encoding OMX -Now handling font encoding U ... -... no UTF-8 mapping file for font encoding U - defining Unicode char U+00A9 (decimal 169) - defining Unicode char U+00AA (decimal 170) - defining Unicode char U+00AE (decimal 174) - defining Unicode char U+00BA (decimal 186) - defining Unicode char U+02C6 (decimal 710) - defining Unicode char U+02DC (decimal 732) - defining Unicode char U+200C (decimal 8204) - defining Unicode char U+2026 (decimal 8230) - defining Unicode char U+2122 (decimal 8482) - defining Unicode char U+2423 (decimal 9251) -)) -(/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty -Package: fontenc 2017/04/05 v2.0i Standard LaTeX package - -(/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.def -File: t1enc.def 2017/04/05 v2.0i Standard LaTeX file -LaTeX Font Info: Redeclaring font encoding T1 on input line 48. -)) -(/usr/share/texlive/texmf-dist/tex/latex/fourier/fourier.sty -Package: fourier 2005/01/01 1.4 fourier-GUTenberg package -Now handling font encoding FML ... -... no UTF-8 mapping file for font encoding FML -Now handling font encoding FMS ... -... no UTF-8 mapping file for font encoding FMS -Now handling font encoding FMX ... -... no UTF-8 mapping file for font encoding FMX - -(/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty -Package: fontenc 2017/04/05 v2.0i Standard LaTeX package - -(/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.def -File: t1enc.def 2017/04/05 v2.0i Standard LaTeX file -LaTeX Font Info: Redeclaring font encoding T1 on input line 48. -)) -(/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty -Package: textcomp 2017/04/05 v2.0i Standard LaTeX package -Package textcomp Info: Sub-encoding information: -(textcomp) 5 = only ISO-Adobe without \textcurrency -(textcomp) 4 = 5 + \texteuro -(textcomp) 3 = 4 + \textohm -(textcomp) 2 = 3 + \textestimated + \textcurrency -(textcomp) 1 = TS1 - \textcircled - \t -(textcomp) 0 = TS1 (full) -(textcomp) Font families with sub-encoding setting implement -(textcomp) only a restricted character set as indicated. -(textcomp) Family '?' is the default used for unknown fonts. -(textcomp) See the documentation for details. -Package textcomp Info: Setting ? sub-encoding to TS1/1 on input line 79. - -(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def -File: ts1enc.def 2001/06/05 v3.0e (jk/car/fm) Standard LaTeX file -Now handling font encoding TS1 ... -... processing UTF-8 mapping file for font encoding TS1 - -(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu -File: ts1enc.dfu 2017/01/28 v1.1t UTF-8 support for inputenc - defining Unicode char U+00A2 (decimal 162) - defining Unicode char U+00A3 (decimal 163) - defining Unicode char U+00A4 (decimal 164) - defining Unicode char U+00A5 (decimal 165) - defining Unicode char U+00A6 (decimal 166) - defining Unicode char U+00A7 (decimal 167) - defining Unicode char U+00A8 (decimal 168) - defining Unicode char U+00A9 (decimal 169) - defining Unicode char U+00AA (decimal 170) - defining Unicode char U+00AC (decimal 172) - defining Unicode char U+00AE (decimal 174) - defining Unicode char U+00AF (decimal 175) - defining Unicode char U+00B0 (decimal 176) - defining Unicode char U+00B1 (decimal 177) - defining Unicode char U+00B2 (decimal 178) - defining Unicode char U+00B3 (decimal 179) - defining Unicode char U+00B4 (decimal 180) - defining Unicode char U+00B5 (decimal 181) - defining Unicode char U+00B6 (decimal 182) - defining Unicode char U+00B7 (decimal 183) - defining Unicode char U+00B9 (decimal 185) - defining Unicode char U+00BA (decimal 186) - defining Unicode char U+00BC (decimal 188) - defining Unicode char U+00BD (decimal 189) - defining Unicode char U+00BE (decimal 190) - defining Unicode char U+00D7 (decimal 215) - defining Unicode char U+00F7 (decimal 247) - defining Unicode char U+0192 (decimal 402) - defining Unicode char U+02C7 (decimal 711) - defining Unicode char U+02D8 (decimal 728) - defining Unicode char U+02DD (decimal 733) - defining Unicode char U+0E3F (decimal 3647) - defining Unicode char U+2016 (decimal 8214) - defining Unicode char U+2020 (decimal 8224) - defining Unicode char U+2021 (decimal 8225) - defining Unicode char U+2022 (decimal 8226) - defining Unicode char U+2030 (decimal 8240) - defining Unicode char U+2031 (decimal 8241) - defining Unicode char U+203B (decimal 8251) - defining Unicode char U+203D (decimal 8253) - defining Unicode char U+2044 (decimal 8260) - defining Unicode char U+204E (decimal 8270) - defining Unicode char U+2052 (decimal 8274) - defining Unicode char U+20A1 (decimal 8353) - defining Unicode char U+20A4 (decimal 8356) - defining Unicode char U+20A6 (decimal 8358) - defining Unicode char U+20A9 (decimal 8361) - defining Unicode char U+20AB (decimal 8363) - defining Unicode char U+20AC (decimal 8364) - defining Unicode char U+20B1 (decimal 8369) - defining Unicode char U+2103 (decimal 8451) - defining Unicode char U+2116 (decimal 8470) - defining Unicode char U+2117 (decimal 8471) - defining Unicode char U+211E (decimal 8478) - defining Unicode char U+2120 (decimal 8480) - defining Unicode char U+2122 (decimal 8482) - defining Unicode char U+2126 (decimal 8486) - defining Unicode char U+2127 (decimal 8487) - defining Unicode char U+212E (decimal 8494) - defining Unicode char U+2190 (decimal 8592) - defining Unicode char U+2191 (decimal 8593) - defining Unicode char U+2192 (decimal 8594) - defining Unicode char U+2193 (decimal 8595) - defining Unicode char U+2329 (decimal 9001) - defining Unicode char U+232A (decimal 9002) - defining Unicode char U+2422 (decimal 9250) - defining Unicode char U+25E6 (decimal 9702) - defining Unicode char U+25EF (decimal 9711) - defining Unicode char U+266A (decimal 9834) -)) -LaTeX Info: Redefining \oldstylenums on input line 334. -Package textcomp Info: Setting cmr sub-encoding to TS1/0 on input line 349. -Package textcomp Info: Setting cmss sub-encoding to TS1/0 on input line 350. -Package textcomp Info: Setting cmtt sub-encoding to TS1/0 on input line 351. -Package textcomp Info: Setting cmvtt sub-encoding to TS1/0 on input line 352. -Package textcomp Info: Setting cmbr sub-encoding to TS1/0 on input line 353. -Package textcomp Info: Setting cmtl sub-encoding to TS1/0 on input line 354. -Package textcomp Info: Setting ccr sub-encoding to TS1/0 on input line 355. -Package textcomp Info: Setting ptm sub-encoding to TS1/4 on input line 356. -Package textcomp Info: Setting pcr sub-encoding to TS1/4 on input line 357. -Package textcomp Info: Setting phv sub-encoding to TS1/4 on input line 358. -Package textcomp Info: Setting ppl sub-encoding to TS1/3 on input line 359. -Package textcomp Info: Setting pag sub-encoding to TS1/4 on input line 360. -Package textcomp Info: Setting pbk sub-encoding to TS1/4 on input line 361. -Package textcomp Info: Setting pnc sub-encoding to TS1/4 on input line 362. -Package textcomp Info: Setting pzc sub-encoding to TS1/4 on input line 363. -Package textcomp Info: Setting bch sub-encoding to TS1/4 on input line 364. -Package textcomp Info: Setting put sub-encoding to TS1/5 on input line 365. -Package textcomp Info: Setting uag sub-encoding to TS1/5 on input line 366. -Package textcomp Info: Setting ugq sub-encoding to TS1/5 on input line 367. -Package textcomp Info: Setting ul8 sub-encoding to TS1/4 on input line 368. -Package textcomp Info: Setting ul9 sub-encoding to TS1/4 on input line 369. -Package textcomp Info: Setting augie sub-encoding to TS1/5 on input line 370. -Package textcomp Info: Setting dayrom sub-encoding to TS1/3 on input line 371. -Package textcomp Info: Setting dayroms sub-encoding to TS1/3 on input line 372. - -Package textcomp Info: Setting pxr sub-encoding to TS1/0 on input line 373. -Package textcomp Info: Setting pxss sub-encoding to TS1/0 on input line 374. -Package textcomp Info: Setting pxtt sub-encoding to TS1/0 on input line 375. -Package textcomp Info: Setting txr sub-encoding to TS1/0 on input line 376. -Package textcomp Info: Setting txss sub-encoding to TS1/0 on input line 377. -Package textcomp Info: Setting txtt sub-encoding to TS1/0 on input line 378. -Package textcomp Info: Setting lmr sub-encoding to TS1/0 on input line 379. -Package textcomp Info: Setting lmdh sub-encoding to TS1/0 on input line 380. -Package textcomp Info: Setting lmss sub-encoding to TS1/0 on input line 381. -Package textcomp Info: Setting lmssq sub-encoding to TS1/0 on input line 382. -Package textcomp Info: Setting lmvtt sub-encoding to TS1/0 on input line 383. -Package textcomp Info: Setting lmtt sub-encoding to TS1/0 on input line 384. -Package textcomp Info: Setting qhv sub-encoding to TS1/0 on input line 385. -Package textcomp Info: Setting qag sub-encoding to TS1/0 on input line 386. -Package textcomp Info: Setting qbk sub-encoding to TS1/0 on input line 387. -Package textcomp Info: Setting qcr sub-encoding to TS1/0 on input line 388. -Package textcomp Info: Setting qcs sub-encoding to TS1/0 on input line 389. -Package textcomp Info: Setting qpl sub-encoding to TS1/0 on input line 390. -Package textcomp Info: Setting qtm sub-encoding to TS1/0 on input line 391. -Package textcomp Info: Setting qzc sub-encoding to TS1/0 on input line 392. -Package textcomp Info: Setting qhvc sub-encoding to TS1/0 on input line 393. -Package textcomp Info: Setting futs sub-encoding to TS1/4 on input line 394. -Package textcomp Info: Setting futx sub-encoding to TS1/4 on input line 395. -Package textcomp Info: Setting futj sub-encoding to TS1/4 on input line 396. -Package textcomp Info: Setting hlh sub-encoding to TS1/3 on input line 397. -Package textcomp Info: Setting hls sub-encoding to TS1/3 on input line 398. -Package textcomp Info: Setting hlst sub-encoding to TS1/3 on input line 399. -Package textcomp Info: Setting hlct sub-encoding to TS1/5 on input line 400. -Package textcomp Info: Setting hlx sub-encoding to TS1/5 on input line 401. -Package textcomp Info: Setting hlce sub-encoding to TS1/5 on input line 402. -Package textcomp Info: Setting hlcn sub-encoding to TS1/5 on input line 403. -Package textcomp Info: Setting hlcw sub-encoding to TS1/5 on input line 404. -Package textcomp Info: Setting hlcf sub-encoding to TS1/5 on input line 405. -Package textcomp Info: Setting pplx sub-encoding to TS1/3 on input line 406. -Package textcomp Info: Setting pplj sub-encoding to TS1/3 on input line 407. -Package textcomp Info: Setting ptmx sub-encoding to TS1/4 on input line 408. -Package textcomp Info: Setting ptmj sub-encoding to TS1/4 on input line 409. -) -(/usr/share/texlive/texmf-dist/tex/latex/fourier/fourier-orns.sty -Package: fourier-orns 2004/01/30 1.1 fourier-ornaments package -) -LaTeX Font Info: Redeclaring symbol font `operators' on input line 50. -LaTeX Font Info: Encoding `OT1' has changed to `T1' for symbol font -(Font) `operators' in the math version `normal' on input line 50. -LaTeX Font Info: Overwriting symbol font `operators' in version `normal' -(Font) OT1/cmr/m/n --> T1/futs/m/n on input line 50. -LaTeX Font Info: Encoding `OT1' has changed to `T1' for symbol font -(Font) `operators' in the math version `bold' on input line 50. -LaTeX Font Info: Overwriting symbol font `operators' in version `bold' -(Font) OT1/cmr/bx/n --> T1/futs/m/n on input line 50. -LaTeX Font Info: Overwriting symbol font `operators' in version `bold' -(Font) T1/futs/m/n --> T1/futs/b/n on input line 51. -LaTeX Font Info: Redeclaring symbol font `letters' on input line 59. -LaTeX Font Info: Encoding `OML' has changed to `FML' for symbol font -(Font) `letters' in the math version `normal' on input line 59. -LaTeX Font Info: Overwriting symbol font `letters' in version `normal' -(Font) OML/cmm/m/it --> FML/futmi/m/it on input line 59. -LaTeX Font Info: Encoding `OML' has changed to `FML' for symbol font -(Font) `letters' in the math version `bold' on input line 59. -LaTeX Font Info: Overwriting symbol font `letters' in version `bold' -(Font) OML/cmm/b/it --> FML/futmi/m/it on input line 59. -\symotherletters=\mathgroup6 -LaTeX Font Info: Overwriting symbol font `letters' in version `bold' -(Font) FML/futmi/m/it --> FML/futmi/b/it on input line 61. -LaTeX Font Info: Overwriting symbol font `otherletters' in version `bold' -(Font) FML/futm/m/it --> FML/futm/b/it on input line 62. -LaTeX Font Info: Redeclaring math symbol \Gamma on input line 63. -LaTeX Font Info: Redeclaring math symbol \Delta on input line 64. -LaTeX Font Info: Redeclaring math symbol \Theta on input line 65. -LaTeX Font Info: Redeclaring math symbol \Lambda on input line 66. -LaTeX Font Info: Redeclaring math symbol \Xi on input line 67. -LaTeX Font Info: Redeclaring math symbol \Pi on input line 68. -LaTeX Font Info: Redeclaring math symbol \Sigma on input line 69. -LaTeX Font Info: Redeclaring math symbol \Upsilon on input line 70. -LaTeX Font Info: Redeclaring math symbol \Phi on input line 71. -LaTeX Font Info: Redeclaring math symbol \Psi on input line 72. -LaTeX Font Info: Redeclaring math symbol \Omega on input line 73. -LaTeX Font Info: Redeclaring symbol font `symbols' on input line 113. -LaTeX Font Info: Encoding `OMS' has changed to `FMS' for symbol font -(Font) `symbols' in the math version `normal' on input line 113. -LaTeX Font Info: Overwriting symbol font `symbols' in version `normal' -(Font) OMS/cmsy/m/n --> FMS/futm/m/n on input line 113. -LaTeX Font Info: Encoding `OMS' has changed to `FMS' for symbol font -(Font) `symbols' in the math version `bold' on input line 113. -LaTeX Font Info: Overwriting symbol font `symbols' in version `bold' -(Font) OMS/cmsy/b/n --> FMS/futm/m/n on input line 113. -LaTeX Font Info: Redeclaring symbol font `largesymbols' on input line 114. -LaTeX Font Info: Encoding `OMX' has changed to `FMX' for symbol font -(Font) `largesymbols' in the math version `normal' on input line 1 -14. -LaTeX Font Info: Overwriting symbol font `largesymbols' in version `normal' -(Font) OMX/cmex/m/n --> FMX/futm/m/n on input line 114. -LaTeX Font Info: Encoding `OMX' has changed to `FMX' for symbol font -(Font) `largesymbols' in the math version `bold' on input line 114 -. -LaTeX Font Info: Overwriting symbol font `largesymbols' in version `bold' -(Font) OMX/cmex/m/n --> FMX/futm/m/n on input line 114. -LaTeX Font Info: Redeclaring math alphabet \mathbf on input line 115. -LaTeX Font Info: Overwriting math alphabet `\mathbf' in version `normal' -(Font) OT1/cmr/bx/n --> T1/futs/bx/n on input line 115. -LaTeX Font Info: Overwriting math alphabet `\mathbf' in version `bold' -(Font) OT1/cmr/bx/n --> T1/futs/bx/n on input line 115. -LaTeX Font Info: Redeclaring math alphabet \mathrm on input line 116. -LaTeX Font Info: Redeclaring math alphabet \mathit on input line 117. -LaTeX Font Info: Overwriting math alphabet `\mathit' in version `normal' -(Font) OT1/cmr/m/it --> T1/futs/m/it on input line 117. -LaTeX Font Info: Overwriting math alphabet `\mathit' in version `bold' -(Font) OT1/cmr/bx/it --> T1/futs/m/it on input line 117. -LaTeX Font Info: Redeclaring math alphabet \mathcal on input line 118. -LaTeX Font Info: Redeclaring math symbol \parallel on input line 134. -LaTeX Font Info: Redeclaring math symbol \hbar on input line 148. -LaTeX Font Info: Redeclaring math symbol \square on input line 153. -LaTeX Font Info: Redeclaring math symbol \varkappa on input line 186. -LaTeX Font Info: Redeclaring math symbol \varvarrho on input line 187. -LaTeX Font Info: Redeclaring math delimiter \Vert on input line 210. -LaTeX Font Info: Redeclaring math delimiter \vert on input line 215. -LaTeX Font Info: Redeclaring math delimiter \lvert on input line 217. -LaTeX Font Info: Redeclaring math delimiter \rvert on input line 219. -LaTeX Font Info: Redeclaring math delimiter \lVert on input line 221. -LaTeX Font Info: Redeclaring math delimiter \rVert on input line 223. -LaTeX Font Info: Redeclaring math delimiter \Downarrow on input line 225. -LaTeX Font Info: Redeclaring math delimiter \backslash on input line 227. -LaTeX Font Info: Redeclaring math delimiter \rangle on input line 229. -LaTeX Font Info: Redeclaring math delimiter \langle on input line 231. -LaTeX Font Info: Redeclaring math delimiter \rbrace on input line 233. -LaTeX Font Info: Redeclaring math delimiter \lbrace on input line 235. -LaTeX Font Info: Redeclaring math delimiter \rceil on input line 237. -LaTeX Font Info: Redeclaring math delimiter \lceil on input line 239. -LaTeX Font Info: Redeclaring math delimiter \rfloor on input line 241. -LaTeX Font Info: Redeclaring math delimiter \lfloor on input line 243. -LaTeX Font Info: Redeclaring math accent \acute on input line 247. -LaTeX Font Info: Redeclaring math accent \grave on input line 248. -LaTeX Font Info: Redeclaring math accent \ddot on input line 249. -LaTeX Font Info: Redeclaring math accent \tilde on input line 250. -LaTeX Font Info: Redeclaring math accent \bar on input line 251. -LaTeX Font Info: Redeclaring math accent \breve on input line 252. -LaTeX Font Info: Redeclaring math accent \check on input line 253. -LaTeX Font Info: Redeclaring math accent \hat on input line 254. -LaTeX Font Info: Redeclaring math accent \dot on input line 255. -LaTeX Font Info: Redeclaring math accent \mathring on input line 256. -\symUfutm=\mathgroup7 -) -(/usr/share/texlive/texmf-dist/tex/latex/sectsty/sectsty.sty -Package: sectsty 2002/02/25 v2.0.2 Commands to change all sectional heading sty -les -)) (./report.aux - -LaTeX Warning: Label `lst:parser' multiply defined. - -) -\openout1 = `report.aux'. - -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 46. -LaTeX Font Info: ... okay on input line 46. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 46. -LaTeX Font Info: ... okay on input line 46. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 46. -LaTeX Font Info: ... okay on input line 46. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 46. -LaTeX Font Info: ... okay on input line 46. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 46. -LaTeX Font Info: ... okay on input line 46. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 46. -LaTeX Font Info: ... okay on input line 46. -LaTeX Font Info: Checking defaults for FML/futm/m/it on input line 46. -LaTeX Font Info: Try loading font information for FML+futm on input line 46. - - (/usr/share/texlive/texmf-dist/tex/latex/fourier/fmlfutm.fd -File: fmlfutm.fd 2004/10/30 Fontinst v1.926 font definitions for FML/futm. -) -LaTeX Font Info: ... okay on input line 46. -LaTeX Font Info: Checking defaults for FMS/futm/m/n on input line 46. -LaTeX Font Info: Try loading font information for FMS+futm on input line 46. - - -(/usr/share/texlive/texmf-dist/tex/latex/fourier/fmsfutm.fd -File: fmsfutm.fd 2004/10/30 Fontinst v1.926 font definitions for FMS/futm. -) -LaTeX Font Info: ... okay on input line 46. -LaTeX Font Info: Checking defaults for FMX/futm/m/n on input line 46. -LaTeX Font Info: Try loading font information for FMX+futm on input line 46. - - -(/usr/share/texlive/texmf-dist/tex/latex/fourier/fmxfutm.fd -File: fmxfutm.fd futm-extension -) -LaTeX Font Info: ... okay on input line 46. -LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 46. -LaTeX Font Info: Try loading font information for TS1+cmr on input line 46. - -(/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd -File: ts1cmr.fd 2014/09/29 v2.5h Standard LaTeX font definitions -) -LaTeX Font Info: ... okay on input line 46. -LaTeX Font Info: Try loading font information for T1+futs on input line 46. - -(/usr/share/texlive/texmf-dist/tex/latex/fourier/t1futs.fd -File: t1futs.fd 2004/03/02 Fontinst v1.926 font definitions for T1/futs. -) -(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii -[Loading MPS to PDF converter (version 2006.09.02).] -\scratchcounter=\count118 -\scratchdimen=\dimen141 -\scratchbox=\box33 -\nofMPsegments=\count119 -\nofMParguments=\count120 -\everyMPshowfont=\toks31 -\MPscratchCnt=\count121 -\MPscratchDim=\dimen142 -\MPnumerator=\count122 -\makeMPintoPDFobject=\count123 -\everyMPtoPDFconversion=\toks32 -) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty -Package: epstopdf-base 2016/05/15 v2.6 Base part for package epstopdf - -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty -Package: infwarerr 2016/05/16 v1.4 Providing info/warning/error messages (HO) -) -(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty -Package: grfext 2016/05/16 v1.2 Manage graphics extensions (HO) - -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvdefinekeys.sty -Package: kvdefinekeys 2016/05/16 v1.4 Define keys (HO) - -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty -Package: ltxcmds 2016/05/16 v1.23 LaTeX kernel commands for general use (HO) -))) -(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty -Package: kvoptions 2016/05/16 v3.12 Key value format for package options (HO) - -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty -Package: kvsetkeys 2016/05/16 v1.17 Key value parser (HO) - -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/etexcmds.sty -Package: etexcmds 2016/05/16 v1.6 Avoid name clashes with e-TeX commands (HO) - -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifluatex.sty -Package: ifluatex 2016/05/16 v1.4 Provides the ifluatex switch (HO) -Package ifluatex Info: LuaTeX not detected. -) -Package etexcmds Info: Could not find \expanded. -(etexcmds) That can mean that you are not using pdfTeX 1.50 or -(etexcmds) that some package has redefined \expanded. -(etexcmds) In the latter case, load this package earlier. -))) -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty -Package: pdftexcmds 2018/01/21 v0.26 Utility functions of pdfTeX for LuaTeX (HO -) -Package pdftexcmds Info: LuaTeX not detected. -Package pdftexcmds Info: \pdf@primitive is available. -Package pdftexcmds Info: \pdf@ifprimitive is available. -Package pdftexcmds Info: \pdfdraftmode found. -) -Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 -38. -Package grfext Info: Graphics extension search list: -(grfext) [.pdf,.png,.jpg,.mps,.jpeg,.jbig2,.jb2,.PDF,.PNG,.JPG,.JPE -G,.JBIG2,.JB2,.eps] -(grfext) \AppendGraphicsExtensions on input line 456. - -(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg -File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv -e -)) -\c@lstlisting=\count124 - -*geometry* driver: auto-detecting -*geometry* detected driver: pdftex -*geometry* verbose mode - [ preamble ] result: -* driver: pdftex -* paper: a4paper -* layout: -* layoutoffset:(h,v)=(0.0pt,0.0pt) -* modes: -* h-part:(L,W,R)=(85.35826pt, 426.79135pt, 85.35826pt) -* v-part:(T,H,B)=(71.13188pt, 688.5567pt, 85.35826pt) -* \paperwidth=597.50787pt -* \paperheight=845.04684pt -* \textwidth=426.79135pt -* \textheight=688.5567pt -* \oddsidemargin=13.08827pt -* \evensidemargin=13.08827pt -* \topmargin=-43.81721pt -* \headheight=21.33955pt -* \headsep=21.33955pt -* \topskip=11.0pt -* \footskip=42.67912pt -* \marginparwidth=59.7508pt -* \marginparsep=12.8401pt -* \columnsep=10.0pt -* \skip\footins=10.0pt plus 4.0pt minus 2.0pt -* \hoffset=0.0pt -* \voffset=0.0pt -* \mag=1000 -* \@twocolumnfalse -* \@twosidefalse -* \@mparswitchfalse -* \@reversemarginfalse -* (1in=72.27pt=25.4mm, 1cm=28.453pt) - -LaTeX Font Info: Try loading font information for T1+cmss on input line 49. -(/usr/share/texlive/texmf-dist/tex/latex/base/t1cmss.fd -File: t1cmss.fd 2014/09/29 v2.5h Standard LaTeX font definitions -) -LaTeX Font Info: Try loading font information for FML+futmi on input line 49 -. - -(/usr/share/texlive/texmf-dist/tex/latex/fourier/fmlfutmi.fd -File: fmlfutmi.fd 2004/10/30 Fontinst v1.926 font definitions for FML/futmi. -) -LaTeX Font Info: Font shape `FMX/futm/m/n' will be -(Font) scaled to size 13.24796pt on input line 49. -LaTeX Font Info: Font shape `FMX/futm/m/n' will be -(Font) scaled to size 9.19998pt on input line 49. -LaTeX Font Info: Font shape `FMX/futm/m/n' will be -(Font) scaled to size 7.35999pt on input line 49. -LaTeX Font Info: Try loading font information for U+msa on input line 49. - -(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd -File: umsa.fd 2013/01/14 v3.01 AMS symbols A -) -LaTeX Font Info: Try loading font information for U+msb on input line 49. - -(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd -File: umsb.fd 2013/01/14 v3.01 AMS symbols B -) -LaTeX Font Info: Font shape `U/futm/m/n' will be -(Font) scaled to size 13.24796pt on input line 49. -LaTeX Font Info: Font shape `U/futm/m/n' will be -(Font) scaled to size 9.19998pt on input line 49. -LaTeX Font Info: Font shape `U/futm/m/n' will be -(Font) scaled to size 7.35999pt on input line 49. - - -Class scrartcl Warning: incompatible usage of \@ssect detected. -(scrartcl) You've used the KOMA-Script implementation of \@ssect -(scrartcl) from within a non compatible caller, that does not -(scrartcl) \scr@s@ct@@nn@m@ locally. -(scrartcl) This could result in several error messages on input li -ne 56. - -LaTeX Font Info: Try loading font information for T1+cmtt on input line 74. -(/usr/share/texlive/texmf-dist/tex/latex/base/t1cmtt.fd -File: t1cmtt.fd 2014/09/29 v2.5h Standard LaTeX font definitions -) -LaTeX Font Info: Font shape `T1/futs/bx/n' in size <12> not available -(Font) Font shape `T1/futs/b/n' tried instead on input line 77. - [1 - - -{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] -LaTeX Font Info: Font shape `T1/futs/bx/n' in size <10.95> not available -(Font) Font shape `T1/futs/b/n' tried instead on input line 94. - -(/usr/share/texlive/texmf-dist/tex/latex/listings/lstlang1.sty -File: lstlang1.sty 2015/06/04 1.6 listings language file -) -(./resources/parser.py) [2] -Overfull \hbox (29.69118pt too wide) in paragraph at lines 125--126 -[]\T1/futs/m/n/10.95 En la primera pasada so-la-mente recolec-ta-mos to-dos los - tipos definidos. A este vis-i-tor, \T1/cmtt/m/n/10.95 TypeCollector - [] - -[3] (./resources/case.cl) -LaTeX Font Info: Font shape `FMX/futm/m/n' will be -(Font) scaled to size 10.07397pt on input line 155. -LaTeX Font Info: Font shape `FMX/futm/m/n' will be -(Font) scaled to size 7.63599pt on input line 155. -LaTeX Font Info: Font shape `FMX/futm/m/n' will be -(Font) scaled to size 5.51999pt on input line 155. -LaTeX Font Info: Font shape `U/futm/m/n' will be -(Font) scaled to size 10.07397pt on input line 155. -LaTeX Font Info: Font shape `U/futm/m/n' will be -(Font) scaled to size 7.63599pt on input line 155. -LaTeX Font Info: Font shape `U/futm/m/n' will be -(Font) scaled to size 5.51999pt on input line 155. - -Overfull \hbox (8.54066pt too wide) in paragraph at lines 161--162 -\T1/futs/m/n/10.95 con el ob-je-tivo de im-ple-men-tar de forma más sen-cilla l -as fun-ciones \T1/cmtt/m/n/10.95 in_int\T1/futs/m/n/10.95 , \T1/cmtt/m/n/10.95 -in_string\T1/futs/m/n/10.95 , \T1/cmtt/m/n/10.95 out_int - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 167--168 - - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 169--170 - - [] - -[4] -LaTeX Font Info: Try loading font information for TS1+futs on input line 173 -. - (/usr/share/texlive/texmf-dist/tex/latex/fourier/ts1futs.fd -File: ts1futs.fd 2004/03/26 Fontinst v1.926 font definitions for TS1/futs. -) -Overfull \hbox (1.90201pt too wide) in paragraph at lines 193--194 -[]\T1/futs/m/n/10.95 Rastrea las lo-cal-iza-ciones donde una vari-able lo-cal p -uede ser en-con-trada. - [] - -[5] -Underfull \hbox (badness 10000) in paragraph at lines 212--213 - - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 214--215 - - [] - - -File: resources/object.png Graphic file (type png) - -Package pdftex.def Info: resources/object.png used on input line 222. -(pdftex.def) Requested size: 256.07741pt x 131.01648pt. -[6 <./resources/object.png (PNG copy)>] [7] [8] (./report.aux) - -LaTeX Warning: There were multiply-defined labels. - - ) -Here is how much of TeX's memory you used: - 8898 strings out of 492982 - 132501 string characters out of 6134896 - 310835 words of memory out of 5000000 - 12253 multiletter control sequences out of 15000+600000 - 100154 words of font info for 106 fonts, out of 8000000 for 9000 - 1141 hyphenation exceptions out of 8191 - 51i,7n,51p,8838b,1254s stack positions out of 5000i,500n,10000p,200000b,80000s -{/usr/share/texmf/fonts/enc/dvips/cm-super/cm-super-t1.enc}{/usr/share/texliv -e/texmf-dist/fonts/enc/dvips/base/8r.enc} -Output written on report.pdf (8 pages, 156672 bytes). -PDF statistics: - 54 PDF objects out of 1000 (max. 8388607) - 37 compressed objects within 1 object stream - 0 named destinations out of 1000 (max. 500000) - 6 words of extra memory for PDF output out of 10000 (max. 10000000) - diff --git a/doc/report/report.out b/doc/report/report.out deleted file mode 100644 index 8410c6f3..00000000 --- a/doc/report/report.out +++ /dev/null @@ -1,12 +0,0 @@ -\BOOKMARK [1][-]{section.1}{Uso del compilador}{}% 1 -\BOOKMARK [1][-]{section.2}{Arquitectura del compilador}{}% 2 -\BOOKMARK [2][-]{subsection.2.1}{An\341lisis sint\341ctico}{section.2}% 3 -\BOOKMARK [3][-]{subsubsection.2.1.1}{An\341lisis l\351xico}{subsection.2.1}% 4 -\BOOKMARK [3][-]{subsubsection.2.1.2}{Parsing}{subsection.2.1}% 5 -\BOOKMARK [2][-]{subsection.2.2}{An\341lisis sem\341ntico}{section.2}% 6 -\BOOKMARK [2][-]{subsection.2.3}{Generaci\363n de c\363digo}{section.2}% 7 -\BOOKMARK [3][-]{subsubsection.2.3.1}{C\363digo Intermedio}{subsection.2.3}% 8 -\BOOKMARK [3][-]{subsubsection.2.3.2}{C\363digo de M\341quina}{subsection.2.3}% 9 -\BOOKMARK [1][-]{section.3}{Problemas t\351cnicos y te\363ricos}{}% 10 -\BOOKMARK [2][-]{subsection.3.1}{Tipos por valor y por referencia}{section.3}% 11 -\BOOKMARK [2][-]{subsection.3.2}{Valor Void en Mips}{section.3}% 12 diff --git a/doc/report/report.pdf b/doc/report/report.pdf index 0a0af8d6fb7f6f4c3c68b4a86c48757d0284d94a..16c6d60b2e7aa6d4a6742ba2a038f36eb532c045 100644 GIT binary patch delta 119413 zcmV)JK)b(y$O*0336LWMIWRaNmr>9GCx4Y$OLN>d629wK%#l--VF-W($=tNwWXmbL z>{!ZSE6RZ)X^C4Lk{Zr$>3YzUs1#MCFhwV=5B&cd`-)z(1!-sdmfOnNHZrrDEKolFki{{jxO?@I{O~m{`FKU!wlXYj07|ho)HP(V{l5 zc~r#YI*&FEO>CAtz60HX0E>psuAThg_?|^n7f*D9N~HIn?Jfz51M*frn13WG*15}| zpL~Zq;KHC5)6Fgcc2dhLVL@U{@cTqG3X>$uNd0If+R?n*?rau(*zQc62mgkTJouT0 z-to{I_=s>GCf>t;8+?TSI(X|AWf4di`@H!B^*_xIj*N}H@>7l&J29q8cTwR zz}7&fDJdCSlGoVtN99J#Yk!}iO(VA*%++N*0>xbxG_w0x)3~htcqWy=$TMjtwSmEr zFy(pKG!g@NSj`TwOZiwh6J&z+XJa%)O$%VhGkQx|&)J6oB9{e~5Q3?es0hb+K=H!n zeXO08Mku))-3KHWp_;=a7Lg6@c}>26IL4+*TC;u*+2V+SB z9nU*fag&adpsim~cGx|0Q_BpWGG5FAfUVpDunF$qt$8@ZZI5dgF*ej`=GL9pXaOYv zzy+mUf2c^qLDN00k<9>(l=(aIssBgXC}9QZg$2~H!x@0JG}cR%5M-x1Xi=-!LF)ph z=nLqcj{P3d35S~!7JmU)fC0tO+=J;yL0|Q<)*A#Zh_t|Q7Ii= zv@L(^4%{BfM-oy@E(_WtfD2?fTLGw{e0HevMPeKho1C6SJ`^omfi@6(m04QBy7wv_#%b(s zvWFNE4yz7q@-VhO7X1Ls!X-)akB&FgML}B24GSgLlj%agEDi%1OR>sIl!Z~^j~EZ- zs_bo;D}BMonSakDS=D9pSo3%33~j?( zM5(IXO^>W6P>b@99*Keo=6RkTRHFwcMhzU8ty>Ny=q#{ylWxe!Sz4 ziy%`u4@^LxjCsZW5#*gHVASXwS)+}Evz!{4#u*1hrz3`S8gU$5X9GBlmQ|EZ?Jy3< zX7P9ib$=6pql$9Q$#S~sbMs}J1m8kCtCLC1eOrd(^O`}#kZb4J!k0{NdTdJZ;)GFk zl7!AouuX%0wq1nf!S;!L zb6?0BiIo~TNz_u*-qbmVkJSv2)g?0UAXzW8?|-Uc?Xb4*q>da2Wi(t%nu3323@s-Ux^XQf{ zM+KYsS-isMpW=_O0qkcH444SFE*M}Rxt4C}l}ZWiu|TUxVzL2Jt@l7jL;4V8t)hb( z&woKqz)7dRGN6vL6mrFEjm6y5$G~vk4C9*N0>-M$TQ`A46#P6M1+)xikjc`T$X?J} z=d~%NLEPmm2s$$m*-mxX;EHZnT8_>BBr?QR2OgDBf?Wr4E7yeFF|^jlh;eB4tGCp| zzQ5&4<+sDa6bkgsE{1(NP?Ciz5KA&H*zV~+S9n<3 zr84rnlx_I`7PF-6Tg9M~67N0jUM~jIzf%nAJhY(e?-YX?3Num*)qhaZiKznow7m?^ zD-~G25)W{AthwbFz^01dAKz_(&Hrw}%6{OH7hG|Y<(zOsDc1=%4N+(Jki4cq<9}Ne zP^rA&ApK>fi9Ma_+mGj>Eb*+6 z%YwHETwU3oC^^Pu+Lx)sT~DR+QHU2Uw^XJ|r3aq~-(ZRFK0QQ9q~M>D#LHiRzwFD4YA(A{wG|N~n*tYU5HcMB2WFO*;gDz*Xm@_h5%5r&fHnE?Gem-&N z6xz?lNJb@GvZI;I;@f4!FfsVZy>r)(da^cMv#G&SI25m8QPe8FmhgGz26LsA=dfBZl(b-Km8r^(+a?FLxs_8OPm5`N*+T*ob4Lm9D!FGA8W4+|>U;Df(E&e@oI1Sn*NOn=0i6{i($?($gi zI@w6P*YZSp_?9K^>#C8Z0(8X!(yDbV<3t~|(2pKj@X{4k9izjJy?ZV{&P{2W7qy>! z*4!4|wbC53Mzlr`+jS@T_>93+7)&p!U=^SSGc0Y#;e=4`-m`Q%0bnMVPggI0kqE%| zKsY!rOJMM`uPi$c*?+0rG{u6oo}fMzlg)h9Tg}SdZ)mJxx};dtUcVMXoEC?EoK`o! z4ndiFl)BLHcKQkAd$su78c54rpfp_}`qOC$KC?u9`a#MSAm~y4F-E>QsfqDflZ=^1 zT{z*dQPy~lzBKY4DbH2V?n#)Zc6zroLBnqp15{sbC&REKynp%(HhRKqHAkFfK2-Vv{h zmGV4GCAH?IJAAUT9#z4w;uO;RPW--gkQ&h)`IYl1nCk-jn#>?T=qOAta~PHLOApZ( z;y5-DzswqNK7S*d!M17`l`Hv1;bE(p%#^q6w6%Vga`QPEah$gKD#4FvwcHj<=A_i+ z{IR4LDl~y8W+;>+S|I`npBjD^;foSFD0IQ}v!77P~NzRo9Kd4#>6jrh|`0kIh zEAA2y7%g1Igc!%O+|1Dl!;XpqP zKaP{cvA`;rL9AL?F$lR{YzHN48*udVV6{a+fD(=KUK(0Ww>+b-cfP6$XhtiA4%1K%vNE&sT{X|&Jo)QOQ`~43sU%Bp-rU_3242gX zJcF*x+`MUS-Ue|L?sT9d9q!V+41NlA84TFWVpC z6I~}1i&oJ6MC=fd$o;NG`f2Q97a+KM7#zBHO2r7KYQ`{C0SH`woSWbcfLFoTi~^N} z%Qo8Sh&a{V=m@^qWd?X!GH=1OU}r=u>gEw~CM6yDc_xOOEkm%Y9Jw@Sbk1>De-q zPMT~nU_C&oAeL>g>1W_KNRS1E`ZuAz#$q7wi876Q>^2>LHx-9^tC>2VX#tVyv;gP9 z0qEuk)I@+@O0`9?~93~ zu2~r@1lP`MWlZLNL}{s|QI98~{%Gk$%+bHlcqM>|3rr^TK5*wnnrFMQ0t3g6ER!X1 z8v#LkPncbfl>m3LYVq6@C@Zd0r4B-G{K{-O-umQiC00a_weJS8EnbXP(bICBi#BLi;Qp(TSbA#V^Rg&0ji9hKEv6@47X6%xGwPQSlBnX}s$1}@TQzF=z=zC z7Or6rMN#;2Wa$xS0@kG)ILz@}C@`W%uYf4A@nNiVIX9=eD9HrjlYx>ycMcl+i5svg zdt3^Zy+eZW$xj8nqM?Qr7`u9T3h#PxtO)R7Im1P#{pA3L;@ZNxP=Hls>6JGf@+(t5-garcm&d#F^9f6F1QS;^;HOh`=7966Nf!vk_B#`2#X6pkr3xCfDnllH^^^gp;i1iT08}f*2%St zJ6Gt<<0Wicd&Tgqv%Y1vNtU26ODI);sWD5?rHQgES)>%3=|qx8s&w<58Nx-G8gqq= zB#UR?Ly{y^^rPjrXy0(2sTIOQi#S;U;D|p?;wT5iR+_np|8@!N*w3I162pKKokxAK zkqF%w4%vJkQ1)W5E#d8)KgB|Vt(Pzbz#bX@i0U}J}IeX$w zUsm_X*>vc#C5nC@#V_V>C&J7b;clMXQlI+%(Gi*I-wE5{&yLE1VTbCQIYbsct z0ybGHZ22qZ^4G5+ELxqodI8veOMQ!yb>NZmc@@}rVj(+iJA`nN1K3~BlZ6RPV$1#Q zz)#Xk=iyEagyMD_eKb#YOTyFJNoqa_B7|UbsXGUh$I&dEZbu=-$=J2=VHT6?xk^ZZ zn+B3sumBpP6ENnn+a-K|KeOGP)g_YD`t=x;?r?Mtm593~Pr~J-HLUTLba&_)=^)<4 zKDNR4yUGIRWqrlM2F(^tc55*#MH7)7RQu}cifo2hiVc=H8(%YFQp(t4TrKKg1%5vZ zg((+B@V30svkLX?;FAY<`7irkiYTuwpOrtXnn66txs}G~2C=?>?W`-Lx}0LafMGdt zngazXFOX@aZ{Wkdmok{gR5~$}ed(^Gne1mI&G3ORp>2k=v>%n}d#z)dRmQ zN?7_a&qIq{9#HjvxG|8A;03YW9*$ibrok7B**I)l_%bqCY_0e4!M}vM-*$e!1xuizv-!^>g)q0(R@3O-$1^yux!#<|y9# z<6?c*PMl<_qAX38Onn_DAUqc;EtbJc6hPqw7DOpSOnn@obFq7q(1ZmBE(}5tWM7V# z!6oK-NvJ-P@~X*f*+|mL+^2=}krP95n~G3fk^J0pPxl3fKV68+?d%YRGsavpMnp|Y z0QJYv!E4%o?KQ;x*no61_x5U|GBKGm9dwncoPH4J+y#)`1xZeOdBw7AfqK#9FbbrHDDi+*)b*H?bXULxve|Xo=K$?oRO=a9yuH#LeMst{IQ@!gX>iOocj1y zzu$DQCem@TMGE>YGK#Rq(R=p8ELg`W&R*KI&xomp&w2rKmRY2XGn2nErmx4Q-9jKsqa&{--VN|p#ZegxZ~p@5W3>k##1%H_tqQ;4R8e5-5Csq``aOk1B(|g*%gB!8@0n0yAxXui$xr=WFWEL9i*2(#nYR zm4>A^CD2Bb@ij4m#uka&;|$ZVtv_H6brDBemp@<*zX8IZo5LSK!|(g|v0`J_EkzJt z<%M2Vgq2yGNZ8^B$J0uDAv|5#*!6k0#uH{YbFuB*BfPtcw!PqgAa!0CdSFm{DxtM5 z-i9u^_e3jmwyu4ZO7NH^h;mKPF5U`hRlgsXRY1CNgt_OsP%p9j^w9%NMhHC^ES470x1-3SObz!IIagD2vx4SF|EFbz3Obcb%>D|oJCV`glnx=?FtJyb4PRM@z>SuJ$A z3}$+YDOfj%l2bkD!e^Sks?55K!n9cmzU}ZBEv0L!{+!utr&+VGyq13qSk*1%xEV_( zkKQl#B`#hn?io|QBtcHHv1>SVo?Q`#1RZwrB$NPUArBRPVVy`wWR#Iq-1L(hC{}Cz! zR$8W08!d@a^KAzU5;dfR1BKdX2Y&Ybu-ElqTILPCY^sFjT6TEl$-JDiQcKH^Otl~C zVcdnjci8R2%=g~z_Ni`dIDVlOCS42nHt>;ZXfwP2KK%90zuO1VA&Cp-Slv`lvSyah z$uED$q2(_#a>!>B>DLvP}Ud?hiAKmmiR+c*HQpgD4 zRpD6{LGM}Ca0#90reIvR3uymSL$r}WY2>}%1vwF$uFb@^)fxIW$i~+$Peh2!I05Z2 zjG2o#_z_pl;AB-J0uzP_U)IR=Gs{EQOniR=Y(@L7Wf04e*2cs24GIv7SXmF;S<3=#$z@g6bf)sKb;WOXK?qYi5$h3{C5w$h z=Sd~zHxy3Z<#k*yh673>z>~~{6|HOdoaMNj@bSYgExdmVe@eZl<<>8F3#KCBKf8Z- zUbzZ|+)}c*Y>HwK6eu>N3vlY6-=zc(MUiI+55R=504C(jgzymV_HmYbZ+hWF+l&qF z7>nCH2dq6U*UMgn6c-n@4zmI-f>tLs;_5^c zbplHg+P0|y*Xa8zG0X5rJIJUra}s~_xvaHqRBck-=!X#NyG=)jb+t&H#fRsY-en8<~$HD#7uwSCQz#$ zNl(mDQMN&E0W~_b!nV3O5oE_A`s<~wWP-TQh>mhbWT5q>^>P>!W|`g?4Zb2sW5qbP zyS_pm0ao@KU%OnAARw=fj4a*ZBW?qG%y;Z#_Va+cL>Y_hZ+^FsdzZN0{-?K#EP$G@uLRzMt0rduJ9hNypN}gBg zoC`}ctrB?*?y?1S0la#?mHn@TLNB%%ffC+7_R@Nu( zjdVP7vF03%Ix6RWbn1UF6zc%xRY9CC9i$)PNkXL^RPB50T zl&tWIjS4}?_i1>=txFhzhLwwb;a0Yc*xig%!zwQ=Q*+iT*&JMayyYQRbT8vX>?04nd7F^)kE z1*5{XL7gpkKFfbM0%xTkh5Fa7fRw~OXYM!g5+~kgQg|vb<79Laxm7%A#sRjewtk( zc(yJ@Ojd;MfRP4hpKs!zDK|$tw<3{4-0IIKi zM(Kb2<=V7pWVUYDUI>}uBL9)gQe<>USsWQ!6yDO!;=WpFfgg|r6T|h$P0u{5wAQ{k zUMHKDjG;?$q{to3#ElUUvZuWd;0$=m4SN-$zR>N=f-t+DiC5O^%!a)+2U9p%x}`yJ zdPt%`+4c_L@y`Zq%B3Xr2dKQI0D)f|qM3i;o9dJuqBztMZ>H%Yw8@hHkal(m{Cw6f zR+-EPdg(S!N8&I-DXglRVO(^JCk`5_Law0saVlm#%oA`c#w&Il{wDSNiwOWWQlXU&;ErIf^(Ecr6HfX z1iVEl)dX(3M#qLu0{cR`Fd>%AP^>-<)~@}q>>_uCaFG=~NkQF?z#;8BCPjCN18 z(5+n*d)m(B+KU}m2~~R9EBikXnxVCy_ehb}V%S9=1m`CRlx=BZtvZV|Z|v~nF7i2f z?;~twAxZGmbT)JECpTQ+Gy%!UTo?HM$yEOnFy0Py{BYq3`}lU2=o1XRqL$oDX3`Jz z(W)869yQWm%XIbqeKCJ&*t8L(F-;xWi>FLTbzW#`v;m@ZCD0Ye*vA8kLh_7v;hYbS5bEX@I{feklQwt7V?Jd_dd2q>>EDvv4X$ zO`K;5{m`ciaww&Joaqs3x>9D-8lbK#bCTpDCkYeDJj>(XS;X8)ttQ?IOJ`Ntu^YnyqD7$-HM8JrBr33-dHO1N z=TOfQ%BiOil&VO zXyofSZXO}+s9@`GB~iis+j|)M@sp%CY=Vq}htXOd{a1ga8oG09zVQ1*9H=-Y`TCBF zLy)K(;ppfPpfnZUy?bE^{!vrVZ#@`tb|kjQjNg}>RiZwSXa!1FN?!c>5eVi59P{vI zRJ8`~SR~gly-oK+T{?H>WDx86Gbe+@0$CuL>QS^gka!LEYqkA!Ex#yXzI&)0#dEc9 z-uQ>Xjr4ys3oYqHTG-Gi^CjKuxR#Es!F~egGNeXN+t+6zs`TM zx#E@QFy;^d1AlQ00P4#u!M{64Zi*YSJYxS)?<<3vd``_FWhbpU7B{^{2a#-R6`o3n?ORDogs&BTVT5-jOM z2~K~ve^X+oJ}_|vBn!+KfSbE==_aU`uL57}JI*v{)Q)Ay$;s_J)L^~vLU#W3D!+t5 z%-qfy8#|_VeqaIGt?5siO(^Zv@|ec;Hr8;*Z)q_-iV$duBFX>)A-+ zo_8PvnET8b@D>gQ_~UzUs)9UX21VHQ)7uD#pZ*V@F3*XRbSEeSFf$;RQP2S=f2CX9 zlbpB_fA?Q8k4)7KK@teKyIfVy=Tu$Fi7&D9bWWw%fnDRwz<6Ms+xzR&UlL*#cJ1uL z4j@FU)#{I5x3oXLd+~=qXLh5KI59Teyt~~L8Qhke+(MJhHt*`quTgW}mQl4;(Y}3e ztm(Epqq3-O@R~+@Y^&S5e%^e1e{WLt>9XCasO_qO8@pa^s-d~NII>4>b>C(Yer1FaI@R~>)l^A$!4caoTVjC zb>H?Keyw#DjnJv-?%=oTxaA^O{JcNjoVPkbF15DNdz0&~-S^y~!i(@Le@zGA)ka9I z=P&B5;*T?&qV#GG{PF}Zv44Me-l`<3jwq)%QtGO3Ux|r z9p{+=&RNE=_|k2rdOD4Zes;UMQFn z$YWEexX9EdPfVQT#b$qe@$0{mO%3m0QDajUoBvYJBm9}z6#3?`e|h`j?{f+^(?G$- z+S3S!<*Q%H3dt8$4(25Y84u+Ly40}W1f`b=4%G;LAFnJyovAQryH#n;pL zanW(w(r#=C{mN7{eY>;d4B!_`#9GuGo9gKM?JgtNk(QuG_2ML*yd z3A&2{Olwu2Y@WqsfAKs4d@YHE`KzReRZ@a5p)D12gLzuAT==cwH;K?)fCa(aa+5^g z;zf}-z|q66MxUJ-6bIZl^oyS)1%8s{Mf67yk-J|OV<}>U?{uQEuS(MByLACt9j8V; zPl8`fV^M@|oLnU2fUdPPVnKBWc~ z0e-<-7WqRxNEPY<#I$?*J<)GNzxah(Q3F#DT(GDH2E!-*f*P0{KU2B=0yQvMY|JwS z_|-HX@g$~%4|9QFKq=vbxcGXl&PP^yhQfaPJ2^D<< z9dh8lf2yfB0dH-K*aDCb(-fa|0Y#%r&h+4VaB?2_nRJ8Dx6|2TCORGK!pp8*nmB;| z!q0ozI8_>_HhnT30dt?^>{CZ!yeH&eH(txbSylT>!|!`(n9Y{%eTFwnN^4pO5@yZ) zK9LU)!eiTX%PCe0kOBN$pcU0Qi?WL=olW~iyK}-X=D^-SEBpPN{Z`4Jc@uQUQ6b(xRVSVgS5E z69nUR8FMm;K5^4YAPv5*7kGE*l3LaS;z2l))|WrO=7!VcRN!gSfYVx?MU;!oXM~Rz zY#rcFuCh>9f#7X_J`PI@odR;ny|v=he={4@5K=VGvGK`$8~7u9Nih|2i9^NLy^91D zi*Lz`Xh132KH=(Bs%EYp#+tkO$~P_zk{5BBXHN!04FeT6^!AWLy_UJKr@^YuQ7U;f zqAx5h`Pmd?|EQa_kSLVbwHohC5?Hv|dJhc+|MDu7^qn9Cd~qhVrw3YwG7+Z%e>eNf z@#KSZ(2?Uke$jhGQi=kK=ai{W<)aboOp$q*#JVQ(Rn6dd;ZZ3t(T8YMUBv@0!9Bo; zx$(8D?+Nhz!18eK!f^Qg4l);&N8gj9{$WYLnFTj8Q)nv2jp9xRDNB)=eFh&?9oS@Z zErqN5u(&s}wskH_KTu|cP&=DVe_)xfowA4uuN>TKiEOG&y@Nz2OHEuv!&lzTVPkXl zzLOWswRhZ^IKFfq!5sy6LYG@yRvY!wbKf7?58qU^qkc!#+lIBg6C_9E4}1;k*7*1m zx}ZCwSN+*Vzkan;T(=B}8|;be1M7LJ$ky1#RO(e@>{CrITFhsGIQ#VvHf>}LN#kO(wlw8lV( z{thMt=r-ZFjMadT&GB^be{nDs^bT+KtZbF*D9xP^o|*-*n4CPK(l9thyQ z-9gonD;tFVde~P*C;FyB-++Tc> z5==twy~MZ_PYF*Jz1r?5_e2W84h`lvXZAZeYm5!IL@WY9*+j5OY^XYZwpG{|^UGzoD;eg_Sk2{RWnPlS(dbA>a(x|QbJi*zR?DclCqLiE;H#+elL zEw1IonKk5fIPtb)e+wgu{biJ!TfWlrSKZy>LaHQ*mCgh8HVH)N>N21ZB<88ONc3DA zQDaS_SuzJe9%o!!YN_}NF!>66F6tbZ;e@+}%MGH}B`XAslG!IyK~?&M^6hxWU7;uQ zi0^=1uxQSaX%2>>8K(s}6WW1HG({$t=-rTxU~Aoqza?d6f3G@@^7wpH-~p**AlW4pijbpjp8^K2Yl+>iSgpw6BipMZVqyt1#WLINT`;s*IP z8@#lr7yZ?Ej9^Y}*v&Il@pXT|VuhrAHb>ARraeI%s>Dh6(34{WWqn9E*eRw-1SPPC zd(7mgQadZ+=rj+Kq^*RvG?y!~enYMhZrd(ggEKddf0Am$?Qn6}9Uj)i?nmsq=__nQ zsLJqhmbB8iZdMN~e3T(-j)%w%X2$Yab+|)0Dc&o%))VTLvyw-nvu$j%vh^zuBnY^I zTa<|`YqMZ4;Zf;%mg^^BbG%mYlIph)!a?4+#hyO?x;bF5_BzAE} z4st2TfA)6{uAYUp!4-Of2~1ifrvjiYNce$;J!WwWvKm`gbp?=qakDH@a=8~7Bi1L^6P*Lfdjjda{DZhsY;R<=i(GGb(k{?zKR}K6lnvVYe_fsG6@5ESCm!6%6dyrdfm&yd7q~-K zn{CPkH0ug)b}9r}SM;fZ3f*+N<*H;(YPZ1uYv=4xg0Rwjt4RgbSn=0XiwhWRYd52M+VD_vMoD83S~`z2FR{DuCr%hKXRbH{ z#W!4^=B9L=!iGciwhGJ8-yfAPrb)o<;%mO!L=oJ_^*`^9n@boRLSWq-PV zl$Os%!nB>r6jHWmr=n9MD6Jw{2TmLN*XuPx9T$b4U3Jr+m&??EsHgJL>eQw^3z*u< z5vuG7z-wZq)c;dBx205h2A*`=1&(_!)o;j^VypGyp}M7o*D-`}H_AU6z)8zHe=%m- zC0&tDQF=PRoH2!3-2L#|Ia2{i7YVrOVQf8yZRx-vwx9a*atZ>{Ny?D#pI1h_sst<$ z%VMk2kkon>a$OUAiW&)Gg)^{#Qt2m!TFhvzvj!^saB$^Oe~{!Ans{bFmIcI6%B)xGFp`va-IajPvxV zI8iE3W_?W!_~~glEIK$W>7}Kk50yXbAyPRY>g2>NnAX52YMWz)2}<_hpaFC_@Hd94 z`0m*7=#d1;cP)zQT*sL%f4;Cvvz{Cfz$zHET*X1TYaDpWLGNuH0ZU zm#!)|9xskbsW#oh4zPkvhaU%ci8iCW%KLCCEmH#vaCXLm{^M=M~h?k?4#rh`aja9(Tlc&H33b1nTJ z)O2nl4=`6LCRDn8{Ao{Yu_`EgBBFtvFJMs{F8|)`f4TpJ;=@*0WN%_>lgc<21T`=)AeT|l0VjXWT1$`H zMiRc~R}6fjfQVtU`OIPuiQxcQc!6Luds;674oOcKP^2PKhR45t>)C8dl*Y(uFCy8G z>gwuxd{wO2wbVWXT*c%(BNy(J|y-T8C7yC=fU_yQ`$qdLk6j%9e6(VRQ&$j4((|N zOjnND2b)1}@T-V(=ph)ASZsu{8J-=bvR)(@0A{>}_Gg(v)kNxox5>;uL=lq}I*1izQJf9DMb; zJ5)W7B&or3C3QVGCwv$n+u;vK{cu$6Cv^tu!ZrDW2a|`n$seF2OijkTegFcyeVW+d z-EN=ZWSbR1Jr2A+=!Z0seZmuT)1FDYM{bzdQqc`@!|~ke;8w_#0oxrlRzi{8#^|;} zefY@H%Fs`ILfe0y*6a6`tfKNEVIELNcpd8PQ2f(O8p8r4xua_F;m|Uub10Y++(5QI z!zWM~IdSj-VC!*SqKL>7@lm;x1TjUVCeVxy6`y3KFZiAXlXFTajZp~bnX5v>z(zG) zx-OX@mD^x;ImBPl8&{dO&aw*I{ML!}Vr?I69+M1b zuq(ELPO0402pq{?h(x~xhXXg_z;+^K-D6tfayo-cm1LMb#OxAH;i7z}@|_(V|P@QhGx<@wK_fBE%qJnXo{ zt~?Ne^>`R%g4jB~dtna;k?e8EG;@%8*ynL*@{3S2jBJN_!m$mW^$E4LRZGQf#5wq@ zZfVDj&K230L|1SxsFy{~{sG3HCz*H)jpPDlat|`%$0cZTW+449!jC^!6cpQUcy0$; zS{Z*Q-VI;>39lgXE%@^BEHU!A(xU?QyDwEUsv93XJN09*KrMCGENSNl*68t`mJ=*YO?>}--V zx^095f@1j6gA1vcdLxuPFK`QHn24#uzQiRFyEkBe;u1!3hmNj*Ss9wt!Kxl&dy119 z*h!3vzGd5S5tfS&KounirwgGFFav<##x6Wp#0f78LO3uqp!VX13*11ZxxiR>f*ZxS zB1=5EBxAMjCt+lASX&c?B#DFf$`{+=^TKE4FcR5$R)kTJujR|Qaa`ckiM6s<^<0ZH z3KS@RPLd2h0JXwm+)BeVN|>q%5j7;idk>F#3dq`g2ajsf0V5P}`tW6)$|1n%*n6<* zwv97vp&>kDedXh=9azALY zZb=|&Sbn1d&1X)_V)3?p1@LW2Pvmi#wQS%y4=A~_^4jj6*WP1W56#{`wAhwjIH3IV zqHqw~LcD?HTpt@Kg26W=;qBaM=50BJz>Zs|gJUj`0XI6$!Be=AOY5RMqo&5@&OncU z+lxbWfcCC99S-&EnQ$oaP3}SpC+x}NA_7n2j5-6Ak~&9uYbBZm6wW;ADr3mJL|RCW z!?X(gAC6P#vMe^(DpDupgu;e3_aacYpQJ%VVf7AeSoZAn!sZQ9ey5PQ$fUS%oiYpT9vCmE>}J6GjH zmgtsz$*YzmH=O1gwh)Wz6Rs;u9yH?61ut507qKwZP=bqGT2*3gg&CE`>F zsN-9#k>Mg#&u16WfnY`LpS!+OFe$}9se_vGB1NI(O)IR#2?Yr%2~72=JA#LQwo!1} ztfQI;fH;thT!l7f06TN!r3#oN+K`fCS3RG}?xFb&yN0#qX<(23xCsFBwG=7D=|Ulm+JG8*4IvY6VCQ>Mh9GOdYK& zfCoI=4@|{rJ8V<`Xe-SD&5O2tht$dhLgd$Tt4SM*SYp!rT{sejtk-n;PXCS?~y)fN&dfk`VltxLGVa&I9K%W!nxIF=i#8igILsm-N@S|P|>IgT`S<7 zB-h%A3qFlw-&RAlRVRy!GA#30?WCK2>$^|wW~rhRQmRVSV3Dsc-3Cmu`7E!fQsSfiesK?Gg9O-U>xzmglb=~7E2*w-~K z;l@r947&F$W)E&tk1zb9f{|4))lil08d6{~2>u|83U@U?YmW!#(>yL`kqg4~fyu+- z8yaWREX-o(nTPiC{M&ijRJkM#qq6W+4!5MSk(4QkOqj=iW}VTpHw9p=bx5jt2)`35KU;XFc*p0VP%Q`az z4PTX#;rqfxNb3sRVZ$4|&*JUVsm;}dNIc3Zwnkh6+B5@`m!ZwR$_nz(6sa3230qWp z+%PkqArlsh3UX>L1OrzC>qsxQjYaf}L@wfMQhf4%aXWNzaTXl);tT|vUMLzBv?Ae8 zKC1p%5a29HJGP3w9Q^WjQm(?mLTO!glQfPeELog_>#bO46GBuX$zNX%PhgmJljDH5y%|6HVBqj|S! z87vIucQp`crR(FtV3N!2$+&SmpUD43Eyt2N9{MdNAhxE<|2kfYl{WPw+^e?z^6HlU zqG7%+maSNmhVk-;!%g1{J~5+z2k${A4J1@FG{vFcynFoSe?7$2M3X{BCj>DuHz1c$ z&;ciZm0DY`+_n*Z_pew4dC&r0MIx!2fj%To0=P&MH}P9t6gpa+wNhO+E3M(vU*Ea$ zqFtSw76#6WpP*8ZBKrwr}?T{P0)coFL~asZ!*eCPkbU zW|uJ2>ADEjYW*~it2DJlueTVPIM0-&=*IL}HtPRjqc+);aj7#)bgpUB6{{hQj_uNt z4hHD&pf4IxM;BI71K(Hd{HRUZw=?(7lPId6r04TKkC1VXw9{puRuL1Y(H}IwWjf@4 z-8SvqEw!+?>{SxArvpm9JEVCPr#goZ9cQMJea*{dUqrALu#NWzm6y@C&;X&b44J=1 zRz)!j%!Y`*}X^tKXm#me-btIaCXgLNq&lFN05(7dNMdMv+r} z6q56F;SVQE&23T{X}+r;`j$Iq`8{8MV03EQK;RnZF0d3TDq#(YZ6AR|DNPH@#JL{8 zh;hcmW0vOF;hBD_xz!;Fs+XO>nt=F%QYsR{dbVSz*Rj6z!jI4TWJi%~AsOb?{KmQ- zHtg05o>MVh+0H{q@kR2 zk5hoVJ?D1huD+gSEYt##fR@paS|RXj(1u8D6iIde=qMf=e=gpQ~g?)k@S;bM5ryks=lWQ?t%zY7vpyoScbz0YAq2S+yD(BT-88mBClMciiCmnbfg^5E zCu!t-e6m|rbXpoF&K$8nqgmtZ;g{cLT zBOUq|XrJX=EV#izIuV?I#mCi2KHCC2Srr#~7J{8amKM=p_y`RT8IF z?qSS9m5I2~DuOEUP_=up1W|KmN~{hp2uO}{v1r4q)x?S`(^ppb#Aw`Xh4gZv+H9kY&i&u za5o8jMg zm&KufzH&cJ=%)*}>SnRh)V*D0E2NKYL&%JFum~uB4wblnln)WcM_18S;e+~2b;8)u zX%h9B>!pgLZ-M&0%)+T5v+jiL#HJ54y>lRF{3(RSwT0Q=VBp>R-(E{d{DKlU?U@4U zX0@upL=#^@e*HOlCa7dpVTppUTe#wfwiP%q+nvs{I8Ulozyzz7JnIjQvu+3!0z7$> z)Imoa38-a%F*G$E!>AO3k0-$ju2}F3)qVFL;vr)6eLa9T$V91F5iZQ#>_P|Prh2p7 z)&-F-4#Xb+f+mJp&_DuN?b;k^#NK}jvM_Ci;MTfyswn$De^ z0Q}1*V!=2=U)DL!w^=6O%gTU{2^3+o*W~4Y+{j-;J4^yJ0QG27_>5-C@ZJqOU}M*s z#5u}k9};!rqbrz)dz&zYY~-=!op6E0Bb14Ohtup?preuVFa=vR`v32wqXjIAAwXti z$A+&VF*LYcAMJ>}3!^$ksBzoPdXTFj%aP;H*uI}Nwu=_BE!9k0OplhhbKdkG2 zxa&jw^iIac6`t&c84!9=_Bv1;!QO9`(GTvrWMaCHx=_8{b~i|GD-t?D!k9)tBv^U;j4KO=f*`osdQ7V zD37kB`4(|;g;{V3ucEIuXEmX>ASGXamR8ZgJ|{6zZnj-jOy9?@KDklI@TeL=CA=o7 zJK+mhMet$6Wo;O7OnsF8=@G{qZW!%0g?R2tH}ZXcHT1Dy3p&?8rCohIIG+^y=^M&+U9cwi-NKFa7~IBtcdt-sfZeut0v@``)fQLBMUrFwqDb!Ts@p1 zeM41MK)lVJTNG6+EmVTi+IBL3RaO8FozHxDI=6h$@($c>%g3@LF8m9R$ot1tBsn<` z;)q`d`xQCp89<(3v`J!>s8x!6WJEdm!_yhZb^P_3%dmDj+fR>tGk1A~pEm} z)np}s7Fcp=?OFnVKiMgE{mM;Yv%K0ff*yqe#A&>V^k8SNbhQE^ zxI4|xqAK;Q-YR}ps#Jh~)l}eG$i(Jq_*`R>S;lGOFzt-FnN-eK8X7R@AlDpZN;A`0 zYu<9$3M#(brN!^N`CKnxsjL{frr*#iGRdk3%O#4Uos3hmt(z&cUys^Z{Pj&hVkLq-eCFX0wnNKLc>c*PXb}7WeNvW z9T>IHEi9-EyC019*Vf*R3DWJS6(_*zy}jvS;HOO<{d6yo1-XzurU$=VJ2!4mi>DYj zUanSdbiB=+w&ojux_OYNMTpYf3Q=L_sxY0JD+FPDW3R{i$3}j*%GWBoeO9xF_0v8@ z%R0Fj20qqY-Myzu7A)axM_%{M)fq8#tZw6y%$h7WR+rj|zzmUoe=j}%KORhU zJ=~jUX`$3`{ij17&0IM@ z{@h=voJPN3sM zdZA*u^7myp`Q>}&A&~UJW(MgRT4IZA^@Y1NZYdJSfMY5*w2w58M)_Z83&-Y+^I}yN zS^VRZDZPwh=jJ1@IOlS|$p6HnI=BZqr~LOv+yQNWvp;0fmqxlaGFyu*?7RLf-$EJo zpBJrzE$fk7pf=q|g6`{I$PAo6E8%>enR9fS!f52kapn%oa2#kEk^-op&EP*CVOB-I z(2k+7@U_O`b!oWMsUb0`Bl*V9wv~O*H~sOofx;2x@-lnr899c zD|qvN4VO>zGO$t;8O2J=#B{gLmxM9TXuHj$e(}wP0;(S`*&;uMq0^JC=0YI#zPJON zbj8=ow2W<1{VrviR!;f8D1}QWt2W~(Vg?_?82Hzn(4E-wCAY+vfO2;x`bnJ}JBE8v zt!WbH^_qh_76l~{S-7+NJdIOR>t?Nt9C+ zIo_X@0=Xd4(xk(5A|ixzSHj%L1*{*j<%> zCDgI{bBa=xwY17mgLh$VV(=g;%XjeFKZkWZrR?D8I<-1+KsG56_+RrXKHO)firybA zScVI$j-7k!_gonk`U;Fqv&>whmlKL!Bf|$7i%QsVlFq^Y(MnL=Bn*IJI}e_II!s(@ zmNj>0?1qW#18ix$g?`v6TuCaul9FKb=jQuDsqn)qxG_3vxp5d zieAft2z7EeYQn4tHMAh`>ghsvje~>^6xhrI$X5qyRck`QX>bN2fYYkz9hq}%JzZ&9 zJtB)2@x0jz-YzDD6sZnfs1f;POXkc zht@yim|XA(mQFMdpjX>3GgmFrH0nRgG~LxbHJD~eY^+o2-@Q!DacEf$I;FUy32PWu z=Yb})pjdbhC%2o0;Wc1cCZ<)vI#OYWoO^4N*rw$MGc#4+HoTknbGNIVt133BqY3XK zC{MZ|ghfzzoM?k3+6WHy)#hn`*I*`PTqKz;@YAKaFj4PmO!pNg15UC4P4f;=l`PpW zB3AgJ%6PmC2zjuI4m4M|+{2v$9FA538^=b>VVT86zS7#N>q2{wF!TXNjAH}P@lddy zG?sNBG<2{+SWjBQB(9y%1c)13xxh(A#9kQ z_%@+|Xd&F|9oEQMj=nCv@Q?=t734AX zudE?X*h`lQxv{4)3P1>d)*+{FXF!YR<8td#0>~_~GK5UvK(j3%%|6T48_x)ISTDW9 z7(}4pKATo?Sru!>PHdb(7h6)y_^%egTSII4SmFOVHPY*Ipsc*Lvd(>gBIu7$B&Cw# z2Rhp>n?R9Oxl`xL`B3*Rhd*U4jXaEiFQ2h?^~i zGWHZ$W$vq$sOp9P8veThkd2%RcKk>x16>F< zuBPA(LLUjOj5O|xOiA|>8rz{AWlfGtKmpyj-E%48s&EYdp*f?GV%Yzi9#Eae*6sWw z@_e~8qCls>csP51a~81$*Qs8qXK;0|s9UWGfFXV?J?eIoM#FRHCSX&uZ>ab`xR)0#O)h(E>H#z+vHkDnML5Rx~|JuZ92DS_wM` zfv8$V@WdKdvCWx#YUGAK2(up_xj*)P!;B#JARtTJgj#L@)OfUwl|%c{(-IJ_41V4- zGixtFoS!roM*$6&*t{u3V@j-=zdcDqUKhVtqrK5+6X}Ji)$o&QSPWRXcx&efXg5Bz zXAHW&8fEH#w6HbM9Jj=fjqaMnTWq$AMco^es*U)(14R9K0FX@)iX=4E1;@8?L)KA> zo;3I%rO@(F4O_|?<|!X@PL5u~B^IWW!^@~Tnpci|p2*Nt;?RB%+f%Xz0p}`2{{7P} zIytw7&+QX`Gh-wNE&xg*b0?2Zj^3?vQIY0& zntjxU3R|;6lDrDzJ9Xou`5xL8{xVA38>-0Tlje=&WS*_SDGN?cm9v`7z%NPBRK}$- zym^aS6s>i@+B~l+x&>fS3x|7tJltnl^gW>eD*6lh0H}JQ{EmMANi~0_-=9ELWOejF z4Ie;%Yf#}^YI{%RzquMCGs>8MheO}V1gWLMk2i-B?FG?Z*HuYgm`RJcuE1h}t*1KL zZ49(zC5{L4G#|YJloRFDK+R@9;i$K2T50M9#B<0UV1NJlfX4H@C!L_!QsB0~msuo1 zMU9GX9AJ(|`Z((RzkV9NXi(=>=ux{e9Ly1aWOZ}{HQLBGJd1(|s}FJ$8NF~pYmVsf zEHWF|$q_R-p-Rftj4ant#k!exQX~|Luo>eRDy+O`?@Tq$Ea)OOvy`060&=l#3DOs2 zK17S$7l1Yya{2%{4Y=|wC+0COyMQAuTjn-G1zDyEA`13V_lf67xq0GP%cnyTg=CU{ zA~eit?6x0ZBAC*DMvj17z1>xN31~9o6MaWKnB^^q7e>9t>oR=W)qp0kahX;=sJ%0H z382p@Nnj$1GtAtQUb{JSoyV269&oXv4yXs5^&5_1n$;m6HDI^$fHU!x@gM64(QGUN z4I7Ie{&6TsA7D2LfJh8BlgpQDwyC*);pQ3GwgBksiQMB zl|+ULi5yY!jSqFhS39t9US{d3s#yn8D8d0OolR-DuphTkkD=ng%2(ZEnXqRq&rzJ-X1}^f65>cNx569v*Nv19@+pNtu7eb+k43gB!K8>n2eW9^);dhN-k>1lIU$mHKp8yU@r?qT)VwV7Ew|0S7r3eFl&y+NXocO#8 z_WENS$A83wyQvJ!_IN8Fz@%i<$V&%ri1tuW85@(WR^A0v88Fm;_#}*vaTBL-oqn^f zw|-Q8EBb&Lr)-7rF3WH483h5{=4RozBCbb3fS=C{LR1k1;i!j1n~S(AH__&kyR;Xw zcc~aF%IZnsh~AM}QgJe!CX>3}MJaNJ4A{F3JS$1DK=+TN11}QH310Vr-4~K5fRjaE zK(DtN_aQFt;^jJjjMCf`AlkVDzd;m+--qEp+ILwTeqzo-bK2Z{;Jv%1E|Q-T@Lp$W z0xhx08L4CMZlm1QMlK*f9U0~IgnM<>a7xE|uV)RbgF)^gRK}JBN6A|5oB59E7w$O8 z>|z+as|dwc2Pt%FM&C!LggR6(_q+JcC*<)W36kaHki}eoCXoRQ_vd5f<(o|$^0!GK zXXF+*%r$azA9{$b%CD8+6VC6%&L+Ep%9Ch5pI_beVsRP%usWwn-7+7ghVJO`aUO3z z9NZ*Evhac3%oY4di|tl3@#_;kdw#72e3KkG1$6%x12f|rgdUx}-;>zO8IQ_;ts&04B@9XgJ>gVfPV6oTSz#2l;Veuu5R;@sl{%NL#0!*keWKEoUv48Mg&$ zTZDFhRo^)AO0@SP8fhI@MZF2+{H6=FmuV7h(d~#8Qp< z^EJ6k0oK&u&j7}avnpk(OKke)-NQHk2Xuw|V3S?NCIvJwI5;4eQP2S=f1MiHlH9iO z-Cv=~i#b(Vh5&dfPmxQhQp&bm@!Bs@%HfifL>G_olA~z-_30BlmLskGG6Mn)pwZ~N z@$&Yozy2dhpP49(TpB;SeFse&X3&+T(3d99ZtG|N4&GXuoc?qBPXLY(xQGgaz(tq< zXv9FbzfALeJG`HM8BRAQe`x;KwL>GbHd_=)m^-J_UYu@hVuJ?f3?~y*CH&l<(%?Nd z>Js`h_{Z@q3d#X{I|Ocj$6tm%z|BMn?C7`o?_1;I;p-!OtPPVmSHS16YHouH)-CVf zy4X}RG@E2Zpm?F7W`fpeiS#b~jEuWts`!f15l2N%!Q?&u)wZTnfhIH`)u90qVmXQv}VKW@Bq=Xs?n-n~wjhvcH4w7AKC}Rm%e1TbCq5 zQ--`FUmflD=PsF#S052HbD_=S%>`${D}<-xH~Y&We?DQHc!-(_ha5KYb~RED@4R93>hWlwtO)Zg(N&lVN1Hhp=GGrR zgu|yv@WaV1jKX`qjUrpMZ(ZsJKHel32hH+aGIgp(_@gjknq^!5sN3oT^Pi1Vl^fUs znHB|!_*V9`F)+y>{}ZyPw90x}Vrt(bZCXMNnLkNN0mNlGe{SQbtVEQfnH#p=?1op! zj7&f+V~D3VC~G#MYe&dowtFj-jtFkn7&ciL{D2e#~l1NBfc5Mxcgn9imX{OCytZ zDCxd#He??H_a0&eR{!-Gqwb(uA%=m5#k<9{S zo4==~T4V>l!@8Vhh{Oo~zkB_|k0HXss7Hpb*e<2iGz8p6*ImLT5GE4Jay}x z!nxTOcz@$`U2YDfTDc!=3Acfzzc794woEdBc$FiuS}4OgiWSqz3563il9f+ z=}8>EdF(e;F9$M;@bmIfDgWD?fyOqWCdvLsBLwY0Ibj*ogij1`i6Z8-nD zxd*2qeuA~na`#zt57?Oe3FbZvf1||1$%Wua@j~$A{z9UfYs%d2GV%X$WaR(F1Hn$RU(ncLH4cpo zsJd|&5V3lV7f4yN76{f}qfGTW{=Dj(S|Fw70jNV!=~R{W<-psBZK8F+saa{Q=SL){ zn|1h`;T@3llarI?OGFFpe_^DoiN8?jV(lXIhwr0{0@jYBBKVe+%*1ePa#ind3;>Lh z%;2&gIHiR9)pS4#fq3lAVi-Z`(-8YcX)Y+TRYoh_qHQ-OabjiT&L8f|xc8>7oY+rXeQF*Ij3VrFX+Mcw=zv9iH*;eYg6no}H5KJvNx z$~?wrW)#}Sa~OmruJ?}Bi>WM#?LAp2=D7CX?@!`VB@#;#iarwjk%{fobvfT;a&a^wi8 zAv2bP+oFKs$)_ zSi<7u%9YwU);K>-z3a3>6&$*DQ5U$wahi{h0Or^g7WNfCY?V zQ2({Ge|;RZ^iAECYvre@#(v~1_r5BiYIg7Zi>3oucq+t=&dXeLYr zPBl_#0Bg;#Jz>@;dqWSKyhIiy6)36%d&}-UEwI}Ce^G9TW?%8bZR$XqWlwN?F=g+* zka&yDQxb1B@(%lW?25-rsp(o^P=ug~6o{jtMC6h)J++)%YzXVuBni_r*=K*y7oHn| zS9&k3oF-QZn|gB$KyY_UejC19PSC8B3%LL&m#NzQnXU1lf!7Xee}5~i#%UFeX%=N% z^uolve^B{Id(cHWQJkm>Ox0OE5E7Q8S>nW;LU0#5PBuGGR6cLQ{hWJxTwhGXd`ZTB zCeef`e6w%`Z9$>M#7-Ad#w!EdkQJo|quNE^tRxSIe3in}7JKywTX&oL$nwFz&%|BC zQ4$Mn;y5%>woeHi9^Qs|YMyjis@ijTh56nF*3_ zf3#nohgn{DC3(6*UWK`z$oU<((tAWn6Pj#Yf43{I>)_H64PRHMij*<>!Bm7_c)ToUp>r5l%GLyV(g4WIvsm;!*HIs*4f~^5)`5FhB_|iN2pscz<_Kf07JR z$jSO;3f6AuppoEiSUF&WiHr5L;bXgGK4$6GfD_xQD6mcX0q0+-G$BmM5SL*;XK$!E z*Mw+_fkz;8VQ|*aRLxXwqBt=mgT&5>~2R|{S zz_U~$TiECEf?1#1X;x0~)QK1Oe+YrPW>|9jze?u=|CKAx9=|Vw+(KTqy4d$+)3cMz z&z7#D+^(b&J$byFBYT#CbunM`Tz5~P4i<{T!hYFtHQ5*3-)KSRvxVo?0a@%PzAHYe z1ULL*;C>s@>|GyJts34udS79ZILyFj-#xH!{J`SpQxQc%y>Vy&A(e_qzMFo2cM zCp?~b18h5cFD@0IEamDAHV#wSIItwgV@@yO|9p{>8GiWm2__Dfq#O>t(}|j$b3VA= zRpot-fU)bivG^PKHC!~5q-_P*E8YW_duQ|Vlmk+Zh&Q2ix~a2kB8@9Zj4+#Q>?1zN zxps6BgTe*Ge919rxzxzZf3H!4_0~I#^%coU!!+~$%+Gl1*F>jS>1f<)$vNgJC)?p) zqG9=3f#7qYfh%Weq#g)Zz<(vj$sI1WkQ;g~9KZ z)VE_JE>PD(YfxxmoW_5QHX$c%louomVD)VeNyS|$STEiupg|X%e_CaY)!~#Fbn$IX z`3Ea5FLZZeU#tPmW87o=U2cl%m}{Qa>2FENt3L)!k1Q5t=?3pgP44@0W+4PDn9Tj% zwzME)8mdB9ODV&?t@NS_Uk;E8W&SArx5i8!J;BiXOW7TlgpLb?@gKj$1Y9a#^l(wW z=wZW^Fzh4678UG*fB4vJZhPq;$-|r4aV3Q^m2MAVTE2rp-8bx$nilW7DG71k$Y4TI zEFiV&)|KK+2nMC*rNg|~amFT=G)J){bdugP@@PSxM^Fb8;2Kux8qT7YB`u5f z{+9nyF&!|>G4Elet&uX@mV+#XS^D@n5KlmA8|%lsotEZyuQ>1_Ey&ik=%;UaeMG8{ z_^BH2Pm{=LQmr##bMHW6-*FnuB_?!9@kcc%XWLR278aR-*atl8-0@hBV_&_x{p$a! zN-pJ-Mb$O~H#0Jqkr4qE1T{1`HJ4G)0VjWbwsUl)?XxW!+ntWF;-q7{W7~FCk`>#w z*|E`a#~s@p+qP}q{=VPY=kBxb8F#$@yftf9)vS6j9tsjg6?!34J7b`@ovkxHGXoP3 zK+W0C9%Mu>Y-eo>U}E|UF)<@hP>47JjhsPtwxUMPKpubw&=jCx;tXH`Fmv&+uGjjsu?OcI2 z#z02^3lkFuFTmc+7~o=W`nSN}WdEm=0fCtrU<&$M(HLkBvPEG0N3N8unH_+c=|8xs zi~WE3T!D^Gf0Y8L|Cf3iz+dgAcD8@k9spCI83Loco%3Hc0BR9Cdk;sDxrH-;+JxqB zNiJ@>f4czuI}m`1hm$kV#t9&0YhveUZ|C?|mnj24$l4m9{7;Y*KpE%+baed({Ljb$ zASVD2Dj;8+`_}8sy1hRj1R`sy|--`dq z_^-|U|Jrg!f7i<$pu_afuKY{<`~BCS-v33Au&|xG7dzv~KpgT%xG_1Cz0z8cuQb4?Rk*a6cyk7R<%?(?S@XXVFEUd0h8VGuAX}&E!RAO}q7l5^>+! z*5U6%X6IXuat$Ew{k)1<67covFdZfWx zI6wkVOLx#KBRGE|c*>Y#0W+yXOvS~NAL9TZk&)J1+LPW%8f5fhgo>o>w?>WZttT

    AKsOA8Z_l4|FaV9T! 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 z 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 z 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

    mvR=D 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�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 OI5RXh3MC~)PeuxO2WJid delta 117275 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

    O|VxYv9WvaGtYujP(zf+ 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 JAq4NC1purows-&l diff --git a/doc/report/report.tex b/doc/report/report.tex deleted file mode 100644 index 4aa24bb9..00000000 --- a/doc/report/report.tex +++ /dev/null @@ -1,286 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Wenneker Assignment -% LaTeX Template -% Version 2.0 (12/1/2019) -% -% This template originates from: -% http://www.LaTeXTemplates.com -% -% Authors: -% Vel (vel@LaTeXTemplates.com) -% Frits Wenneker -% -% License: -% CC BY-NC-SA 3.0 (http://creativecommons.org/licenses/by-nc-sa/3.0/) -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%---------------------------------------------------------------------------------------- -% PACKAGES AND OTHER DOCUMENT CONFIGURATIONS -%---------------------------------------------------------------------------------------- - -\documentclass[11pt]{scrartcl} % Font size -\usepackage{graphicx} -\input{structure.tex} % Include the file specifying the document structure and custom commands - -%---------------------------------------------------------------------------------------- -% TITLE SECTION -%---------------------------------------------------------------------------------------- - -\title{ - \normalfont\normalsize - \textsc{Universidad de La Habana}\\ % Your university, school and/or department name(s) - \vspace{25pt} % Whitespace - \rule{\linewidth}{0.5pt}\\ % Thin top horizontal rule - \vspace{20pt} % Whitespace - {\huge Compilador de COOL}\\ % The assignment title - \vspace{12pt} % Whitespace - \rule{\linewidth}{2pt}\\ % Thick bottom horizontal rule - \vspace{12pt} % Whitespace -} - -\author{\textit{Amanda Marrero Santos} - C411 \\ \textit{Manuel S. Fernández Arias} - C411 \\ \textit{Loraine Monteagudo García} - C411 } % Your name - -\date{} % Today's date (\today) or a custom date - -\begin{document} - -\maketitle % Print the title - -%---------------------------------------------------------------------------------------- -% Uso del Compilador -%---------------------------------------------------------------------------------------- - -\section{Uso del compilador} - -\paragraph*{Detalles sobre las opciones de líneas de comando, si tiene opciones adicionales...} - -%---------------------------------------------------------------------------------------- -% Arquitectura del compilador -%---------------------------------------------------------------------------------------- - -\section{Arquitectura del compilador} - -Para el desarrollo del compilador se usó PLY, que es una implementación de Python pura del constructor de compilación lex/yacc. Incluye soporte al parser LALR(1) así como herramientas para el análisis léxico de validación de entrada y para el reporte de errores. - -El proceso de compilación se desarrolla en 3 fases: - -\begin{enumerate} - \item Análisis sintáctico: se trata de la comprobación del programa fuente hasta su representación en un árbol de derivación. Incluye desde la definición de la gramática hasta la construcción del lexer y el parser. - \item Análisis semántico: consiste en la revisión de las sentencias aceptadas en la fase anterior mediante la validación de que los predicados semánticos se cumplan. - \item Generación de código: después de la validación del programa fuente se genera el código intermedio para la posterior creación del código de máquina. -\end{enumerate} - -Cada una de estas fases se dividen en módulos independientes ubicado en \texttt{src}, que se integran en el archivo principal \texttt{main.py} - -%---------------------------------------------------------------------------------------- -\subsection{Análisis sintáctico} - -El análisis sintáctico se divide en 2 fases: en una se realiza el análisis léxico, con la construcción de un lexer y en la otra se realiza el proceso de parsing, definiendo la gramática e implementado un parser para la construcción del Ãrbol de Sintaxis Abstracta (AST). - -\subsubsection{Análisis léxico} - -En esta fase se procesa el programa fuente de izquierda a derecha y se agrupan en componentes léxicos (\textit{tokens}) que son secuencias de caracteres que tienen un significado. Todos los espacios en blanco, comentarios y demás información innecesaria se elimina del programa fuente. El lexer, por lo tanto, convierte una secuencia de caracteres (strings) en una secuencia de tokens. - -Después de determinar los caracteres especiales de COOL especificados en su documentación se deciden las propiedades necesarias para representar un token. Un token tiene un lexema, que no es más que el string que se hace corresponder al token y un tipo para agrupar los que tienen una característica similar. Este último puede ser igual o diferente al lexema: en las palabras reservadas sucede que su lexema es igual a su tipo, mientras que en los strings y en los números estos son diferentes. Mientras que un token puede tener infinitos lexemas, los distintos tipos son predeterminados. Además, para el reporte de errores se guarda la fila y la columna de cada token. - -La construcción del lexer se realiza mediante las herramientas de PLY. Para su construcción es necesario la definición de una variable \texttt{tokens} que es una lista con los distintos tipos de tokens. Después se especifica cuales secuencias de caracteres le corresponderán a cada tipo de token, esto se especifica mediante expresiones regulares. Para cada tipo de token se definió una función mediante la convención de PLY de nombrar \texttt{t\_tipo}, donde \texttt{tipo} es el tipo de token, y en el docstring la expresión regular que lo describe. - -%---------------------------------------------------------------------------------------- -\subsubsection{Parsing} - -El proceso de parsing consiste en analizar una secuencia de tokens y producir un árbol de derivación. Por lo tanto, se comprueba si lo obtenido en la fase anterior es sintácticamente correcto según la gramática del lenguaje. - -El parser también se implementó mediante PLY, especificando la gramática y las acciones para cada producción. Para cada regla gramatical hay una función cuyo nombre empieza con \texttt{p\_}. El docstring de la función contiene la forma de la producción, escrita en \textbf{EBNF} (Extended Backus-Naur Form). PLY usa los dos puntos (:) para separar la parte izquierda y la derecha de la producción gramatical. El símbolo del lado izquierdo de la primera función es considerado el símbolo inicial. El cuerpo de esa función contiene código que realiza la acción de esa producción. - -En cada producción se construye un nodo del árbol de sintaxis abstracta, como se hace en Listing \ref{lst:parser}. El parámetro \texttt{p} de la función contiene los resultados de las acciones que se realizaron para parsear el lado derecho de la producción. Se puede indexar en \texttt{p} para acceder a estos resultados, empezando con \texttt{p[1]} para el primer símbolo de la parte derecha. Para especificar el resultado de la acción actual se accede a \texttt{p[0]}. Así, por ejemplo, en la producción \texttt{program : class\_list} construimos el nodo \texttt{ProgramNode} conteniendo la lista de clases obtenida en \texttt{p[1]} y asignamos \texttt{ProgramNode} a \texttt{p[0]} - -\lstinputlisting[ -label=lst:parser, % Label for referencing this listing -language=Python, % Use Perl functions/syntax highlighting -frame=single, % Frame around the code listing -showstringspaces=false, % Don't put marks in string spaces -%numbers=left, % Line numbers on left -numberstyle=\tiny, % Line numbers styling -caption=Función de una regla gramatical en PLY, % Caption above the listing -]{resources/parser.py} - -El procesador de parser de PLY procesa la gramática y genera un parser que usa el algoritmo de shift-reduce LALR(1), que es uno de los más usados en la actualidad. Aunque LALR(1) no puede manejar todas las gramáticas libres de contexto la gramática de COOL usada fue refactorizada para ser procesada por LALR(1) sin errores. - -La gramática especificada en el manual de COOL fue reconstruida para eliminar cualquier ambigüedad y teniendo en cuenta la precedencia de los operadores presentes. - -Para la construcción del árbol de derivación se definieron cada uno de los nodos. El objetivo de dicho árbol es describir la forma en que la cadena es generada por la gramática. Intuitivamente, esta información nos permite "entender" sin ambigüedad el significado de la cadena. - -Además, se hizo uso de las herramientas de PLY para la recuperación de errores. - -%---------------------------------------------------------------------------------------- -\subsection{Análisis semántico} - -El objetivo del análisis semántico es validar que los predicados semánticos se cumplan. Para esto construye estructuras que permitan reunir y validar información sobre los tipos para la posterior fase de generación de código. - -El árbol de derivación es una estructura conveniente para ser explorada. Por lo tanto, el procedimiento para validar los predicados semánticos es recorrer cada nodo. La mayoría de las reglas semánticas nos hablan sobre las definiciones y uso de las variables y funciones, por lo que se hace necesario acceder a un "scope", donde están definidas las funciones y variables que se usan en dicho nodo. Además se usa un "contexto" para definir los distintos tipos que se construyen a lo largo del programa. En el mismo recorrido en que se valida las reglas semánticas se construyen estas estructuras auxiliares. - -Para realizar los recorridos en el árbol de derivación se hace uso del patrón visitor. Este patrón nos permite abstraer el concepto de procesamiento de un nodo. Se crean distintas clases implementando este patrón, haciendo cada una de ellas una pasada en el árbol para implementar varias funciones. - -En la primera pasada solamente recolectamos todos los tipos definidos. A este visitor, \texttt{TypeCollector} solamente le interesan los nodos \texttt{ProgramNode} y \texttt{ClassNode}. Su tarea consiste en crear el contexto y definir en este contexto todos los tipos que se encuentre. - -Luego en \texttt{TypeBuilder} se construyen todo el contexto de métodos y atributos. En este caso nos interesa además los nodos \texttt{FuncDeclarationNode} y \texttt{AttrDeclarationNode}. - -En el tercer recorrido se define el visitor \texttt{VarCollector} en el que se procede a la construcción de los scopes recolectando las variables definidas en el programa teniendo en cuenta la visibilidad de cada uno de ellos. Requieren especial atención los atributos, cuya inicialización no puede depender un atributo que esté definido posteriormente a él, esto se logra llevando un índice de los atributos que han sido definidos hasta el momento y buscando en el scope los atributos a partir de dicho índice. Un problema similar ocurre con las expresiones \texttt{let} y \texttt{case}, para las cuales un nuevo scope es creado para que las variables definidas dentro de dichas expresiones sean solamente visibles dentro de dicho scope. - -Por último, en \texttt{TypeChecker} se verifica la consistencia de tipos en todos los nodos del AST. Con el objetivo de detectar la mayor cantidad de errores en cada corrida se toman acciones como definir \texttt{ErrorType} para expresar un tipo que presentó algún error semántico. - -%---------------------------------------------------------------------------------------- -\subsection{Generación de código} - -Con el objetivo de generar código de COOL de forma más sencilla se genera además un código intermedio, CIL, ya que el salto directamente desde COOL a MIPS es demasiado complejo. - -\subsubsection{Código Intermedio} - -Para la generación de código intermedio de COOL a MIPS se usó el lenguaje CIL, bastante similar al impartido en clases de Compilación. Solamente se añadieron algunas instrucciones, la mayoría de ellas con el objetivo de representar de forma más eficiente los métodos de bajo nivel que existían en los objetos built-in de COOL. - -Para la generación de CIL se usa el patrón visitor, generando para cada nodo en COOL su conjunto de instrucciones equivalentes en el lenguaje intermedio. Además, para facilitar la generación de código de máquinas nos aseguramos de que todas las variables locales y las funciones tengan un nombre único a lo largo de todo el programa. - -Una instrucción que requirió especial interés fue \texttt{case} que tiene la forma: - -\lstinputlisting[ -label=lst:parser, % Label for referencing this listing -frame=single, % Frame around the code listing -showstringspaces=false, % Don't put marks in string spaces -%numbers=left, % Line numbers on left -numberstyle=\tiny, % Line numbers styling -caption=Forma de la expresión case, % Caption above the listing -]{resources/case.cl} - -Donde \texttt{expr0} es evaluado y si su tipo dinámico es \texttt{C} entonces es seleccionada la rama \texttt{typek} con el tipo más especializado tal que \texttt{C} se conforme a \texttt{type}. Para facilitar esta selección, cada una de las ramas $i$ de \texttt{case} fue ordenada de acuerdo a la profundidad que tiene \texttt{typei} con respecto al árbol de herencia que tiene como raíz a \texttt{Object}. Así, los nodos con una mayor profundidad son los más especializados. Luego, se tiene una instrucción especial en CIL para representar \textit{conforms}, que determina si la clase \texttt{C} se conforma con \texttt{$type_k$}. La primera rama $i$ que sea seleccionada será la que cumplirá con los requerimientos, entonces se asignará \texttt{ <- }, esta se evalúa y retorna \texttt{} - -La mayoría de los errores en runtime fueron comprobados generando el código CIL correspondiente, para esto se crea un nodo especial \texttt{ErrorNode}, que recibe el mensaje que se generará si se llega a dicho nodo. Por ejemplo, al crear el nodo \texttt{DivNode}, se chequea si el divisor es igual a cero, si lo es se crea un \texttt{ErrorNode} y en otro caso se ejecuta la división. El único error que no es analizado en la generación de código intermedio fue el de \textit{Substring out of range}, causado al llamarse la función \texttt{substr} de \texttt{String}; este error es comprobado directamente cuando se genera MIPS. - -Otra de las particularidades que se tuvo en cuenta para la generación de CIL fue la inicialización de los atributos, tanto los heredados como los propios de la clase. Cuando se crea una instancia de una clase se deben inicializar todos sus atributos con su expresión inicial si tienen alguna, en otro caso se usa su expresión por defecto. Con el objetivo de lograr esto se creó para cada tipo un constructor, cuyo cuerpo consiste en un bloque dándole un valor a cada uno de sus atributos. Este es llamado cada vez que se instancia un tipo. - -Los tipos built-in definidos en COOL, (Object, IO, Int, String, Bool) son definidos desde CIL. Para crear el cuerpo de cada una de sus funciones se hizo necesario la creación de nodos nuevos en CIL. \texttt{ExitNode} y \texttt{CopyNode} para la implementación de \texttt{abort} y \texttt{copy} de \texttt{Object}. Las instrucciones \texttt{Read} y \texttt{Print} fueron sustituidas por \texttt{ReadInt}, \texttt{ReadString}, \texttt{PrintInt} y \texttt{PrintString} con el objetivo de implementar de forma más sencilla las funciones \texttt{in\_int}, \texttt{in\_string}, \texttt{out\_int} y \texttt{out\_string} de \texttt{IO} respectivamente, y debido a que en Mips se requiere un trato diferenciado al tipo \texttt{int} y \texttt{string} cuando se hacen llamados al sistema. Para los métodos de \texttt{String}: \texttt{length}, \texttt{concat} y \texttt{substr} se crearon los nodos \texttt{LengthNode}, \texttt{ConcatNode} y \texttt{SubstringNode}. De esta forma, gran parte de las clases built-in se crean directamente en la generación de Mips para lograr mayor eficiencia y debido a las particularidades de cada una de las funciones que requieren de un procesamiento especial. - -\subsubsection{Código de Máquina} - -Para generar el código de máquinas se usa una vez más el patrón visitor, recorriendo todos los nodos de CIL que fueron creados. - -Entre las instrucciones se trata de manera especial la igualdad entre strings, que es realizada comparando carácter por carácter.\\ - -\textbf{Register Allocation:}\\ - -Uno de los principales problemas en la generación de código es decidir que valores guardar en cuales registros. Con el objetivo de hacer más eficiente dicha asignación se particionaron las instrucciones de cada una de las funciones del código intermedio en \textit{Bloques básicos}, que son una secuencia maximal de instrucciones que cumple que: -\begin{itemize} - \item El control de flujo solo puede entrar al bloque a través de la primera instrucción del bloque. Es decir, no hay saltos al medio del bloque. - \item Se dejará el bloque sin saltos ni llamados de función solo posiblemente en la última instrucción del bloque. -\end{itemize} - -En nuestro caso, en algunos bloques existirán saltos ya que algunas instrucciones de CIL, como \texttt{Concat}, \texttt{Length}, etc usan saltos cuando estos se generan en MIPS, pero como el código de estos nodos es creado directamente el uso eficiente de los registros y de las instrucciones de MIPS fue garantizado dentro de dichos nodos. - -Para formar dichos bloques primero se determina, dada una lista de instrucciones aquellas que son \textit{líderes}, que serán las primeras instrucciones de algún bloque básico. Las reglas para encontrar los líderes son: - -\begin{enumerate} - \item La primera instrucción en el código intermedio es un líder. - \item Cualquier instrucción que siga inmediatamente algún salto incondicional o condicional o alguna llamada a una función es un líder. - \item Cualquier instrucción que es el objetivo de algun salto incondicional o condicional es el líder. -\end{enumerate} - -Entonces, para cada líder, su bloque básico consiste en él mismo y en todas las instrucciones hasta pero sin incluir el siguiente líder o la última instrucción del código intermedio. - - -Para la asignación de las variables en los registros se usan 2 estructuras auxiliares: -\begin{description} - \item[Register descriptor:] Rastrea el actual "contenido" de los registros. Es consultado cuando algún registro es necesitado. A la entrada de un bloque, se asume que todos los registros están sin usar, por lo que a la salida cada uno de estos se limpian. - \item[Address descriptor:] Rastrea las localizaciones donde una variable local puede ser encontrada. Posible localizaciones: registros y pila. Todas las variables locales son guardadas en la pila ya que en los registros solo estarán de forma temporal. -\end{description} - -Además se calcula para cada instrucción una variable booleana \texttt{is\_live}, que determina si en una instrucción es usada el valor de dicha variable, notar que de cambiarle el valor a la variable esta no se considera usada, su valor es redefinido. Se computa también su \texttt{next\_use}, que contiene el índice de la instrución en donde fue usada después de esa instrucción. Para calcular dichas propiedades se recorre el bloque empezando por la última posición, en un principio todas las variables están "muertas" y su \texttt{next\_use} no está definido (es null). Para la realización de este algoritmo usamos una estructura auxiliar, \texttt{SymbolTable} que lleva cual es el último valor \texttt{next\_use} y \texttt{is\_live} de la variable. Para cada instrucción \texttt{x = y op z} que tiene como índice \textit{i} se hace lo siguiente: - -\begin{enumerate} - \item Se le asigna a la instrucción \textit{i} la información encontrada actualmente en la \texttt{SymbolTable} de \texttt{x}, \texttt{y} y \texttt{z}. - \item En la \texttt{SymbolTable}, le damos a \texttt{x} el valor de "no vivo" y "no next use". - \item En la \texttt{SymbolTable}, le damos a \texttt{y} y a \texttt{z} el valor de "vivo" y el \texttt{next\_use} de \texttt{y} y \texttt{z} a \textit{i} -\end{enumerate} - -Cada instrucción tiene: \texttt{out}, \texttt{in1}, \texttt{in2} para determinar cuales son los valores que necesitan registros. Así, si alguno de estos campos no es nulo y es ocupado por una variable se procede antes de procesamiento de dicha instrucción a asignarle registros a cada variable. Para la asignación de un registro se siguen las siguientes reglas: - -\begin{enumerate} - \item Si la variable está en un registro ya, entonces se retorna ese registro. - \item Si hay un registro sin usar, retorna este. - \item Se elige entre los registros llenos aquel que contenga la variable que sea menos usada en las instrucciones restantes del bloque, salvándose primero en el stack el contenido del registro y se retorna dicho registro. -\end{enumerate} - -Si se tiene una expresión del estilo \texttt{out = in1 op in2}, entonces notar que el registro de \texttt{out} puede usar uno de los registros de \texttt{in1} y \texttt{in2}, si ninguna de las instrucciones son usadas en las instrucciones siguientes. Se usa el \texttt{next\_use} de estas variables, comprobando que esta no haya sido usada en alguna instrucción siguiente y si esta \texttt{is\_live}, es decir, no se le reasigna un valor.\\ - -\textbf{Representación de los Objetos}\\ - -Otra de las problemáticas en la generación de código fue la representación de los objetos en memoria. Se necesita guardar información referente al tipo de objeto, los métodos del objeto, sus atributos y alguna manera de representar su padre. Esto último es necesario para la implementación de \texttt{ConformsNode}. - -A continuación se muestra un diagrama de como se representaron dichos objetos en memoria: - -\begin{figure}[h] - \centering - \includegraphics[width=0.6\textwidth]{resources/object.png} - \label{fig:objects} - \caption{Representación de los objetos en memoria} -\end{figure} - -Cuando se crean los tipos, para cada tipo se crea una tabla de \texttt{Type Info}, que guarda la información de los tipos que se presenta en la parte derecha de la Figura 2.1. \texttt{Type Name} es una referencia al nombre del tipo, y sirve como identificador del mismo, \texttt{Parent Type Info} guarda una referencia a la tabla de tipos del padre, mientras que \texttt{Dispatch Table} tiene una referencia a una tabla en la que están ubicadas, los métodos del objeto tal y como se guardan en CIL: primero los métodos de los padres y luego los de ellos. Los métodos sobreescritos son guardados en la misma posición que ocuparían en el padre. - -Luego, cuando se crea un objeto se calcula para cada uno de ellos el tamaño que ocupará: esto será igual al total de atributos más los 3 campos adicionales usados para guardar información del tipo. En el primer campo se pone el nombre del tipo, luego el tamaño que este ocupa, y después se busca la dirección del \texttt{Type Info} correspondiente al nuevo objeto que se crea. Después son ubicados los atributos primero la del padre y después los definidos por el objeto. - -Luego para buscar un atributo se calcula el offset de este atributo en su tipo estático, y este se le sumará más 3 porque ahí es en donde se empiezan a acceder a los atributos. - -Un algoritmo similar es el que se usa para acceder a los métodos: se busca en la posición 3 de la tabla del objeto, donde se obtiene \texttt{Type Info} y desde allí en la posición 3 se accede a la dirección del \texttt{Dispatch Table}, a partir de la cual se busca el índice de la función llamada según la información que se tiene del tipo estático del objeto, luego, esta función es llamada. Notar que en caso de que su tipo estático no coincida con su tipo dinámico no importa, porque en la dirección buscada estará la verdadera dirección del método. Este puede ser diferente si, por ejemplo, es sobreescrito. A este proceso se le llama \texttt{Dynamic Dispatch}, representado como \texttt{DynamicCallNode} en contraposición con \texttt{StaticCallNode}. En este último se especifica la función a llamar, es decir, no es necesario buscar dinámicamente en la información del objeto, se accede al método de un tipo especificado. - -Por otra parte, también requirió especial atención el nodo \texttt{ConformsNode}, usado para determinar si el tipo de una expresión se conforma con un \texttt{typen}. Para calcular esto se accede al \texttt{Type Info} del objeto y a partir de ahí, se realiza un ciclo por los \texttt{Parent Type Info} hasta encontrar alguno que sea igual a \texttt{typen}. La igualdad de tipos se comprueba accediendo a \texttt{Type Name}, como el mismo string es usado para representar este nombre, en el caso de que dicho string coincida con el nombre de \texttt{typen}, entonces se puede decir que los dos tipos son iguales. - -Existen otros nodos que hacen uso de esta representación de objetos. \texttt{TypeOfNode}, por ejemplo, devuelve el primer campo del objeto correspondiente al nombre del tipo. - -%---------------------------------------------------------------------------------------- -% Problemas técnicos -%---------------------------------------------------------------------------------------- - -\section{Problemas técnicos y teóricos} - -\subsection{Comentarios y strings en el lexer} - -En el proceso de tokenizacion de una cadena dos de los elementos más complicados resultan ser los comentarios y los strings. Para su procesamiento se definieron 2 nuevos estados en Lexer: \texttt{comments:exclusive} y \texttt{strings:exclusive}. - -Por definición la libreria PLY contiene el estado \texttt{initial} , donde se agrupan todas las reglas y tokens definidas para el procesamiento normal. En la definición de un nuevo estado, se definen nuevas reglas para el procesamiento especializado, es decir ,que ciertos tokens dentro de estos estados pueden ser analizados de manera diferente a que si estuvieran en el estado \texttt{initial}. -De esta manera cuando se entra en en uno de los estados todas las reglas que no correspondan al mismo son ignoradas. - -\textbf{Comentarios:} - -Tipo 1 (\texttt{--}): como es toda la línea no necesario entrar en un estado para procesarlo, con una expresión regular pudimos darle solución. - -Tipo 2 (\texttt{(*...*)}): con el primer \texttt{(*} entramos en el -estado de \texttt{commets}, así asumimos que a partir de ese momento todo es un comentario hasta q aparezca el \texttt{*)} que lo cierre, es decir, que cuando aparezca \texttt{*)}. No necesariamente regresamos al estado inicial donde las reglas que no son de comentarios no son ignoradas, sino que se tiene un control estricto de que comentario está cerrando dicho símbolo. Para esto se mantiene unos paréntesis balanceados con los inicios y finales de los comentarios y solo se regresa al estado inicial si el balance es igual a 0, lo que implica q ese \texttt{*)} cierra verdaderamente el inicio del comentario. - -\textbf{Strings:} - -En cuanto se analiza el carácter \texttt{"} desde el estado inicial del parser, se pasa al estado \texttt{strings}, donde definimos un conjunto de reglas especializadas para tokenizar de manera correcta el string. Entre dichas reglas se pueden destacar las siguientes: - -\begin{itemize} - \item \texttt{T\_strings\_newline}: encargada de analizar '\\n', carácter muy importante en los strings que representa el cambio de línea. - \item \texttt{T\_strings\_end}: Esta regla procesa el \texttt{"} dentro del estado \texttt{string}. Por defición si aparece dicho carácter en este estado significaría el fin del string en cuestión, a no ser esté antecedido por el carácter '\', en cuyo caso, se considera como parte del string. - -\end{itemize} - -\subsection{Tipos por valor y por referencia} - -Una de las problemáticas en el desarrollo del compilador fue la representación de los objetos built-in, en especial: \texttt{Int}, \texttt{Bool} y \texttt{String} que en realidad no son representados como objetos; los dos primeros son tratados por valor mientras el último aunque es por referencia no tiene campos y es guardado en el la sección .data de Mips. Sin embargo, todos son descendientes de \texttt{Object} que es la raíz de todas las clases en COOL y por lo tanto, poseen los métodos que están definidos en ese tipo. Con el objetivo de optimizar la memoria ocupada en el heap estos objetos no son guardados allí y no poseen la estructura de los objetos explicada anteriormente. - -Todas estas clases tienen en común que no es posible heredar de ellas, por lo tanto, una variable de tipo \texttt{Int}, \texttt{Bool} y \texttt{String} no es posible que sea otra cosa. Esto permite que no haya problemas a la hora de hacer dispatch: siempre es posible determinar la función a la que se va a llamar, por lo que las funciones de cada uno de estos tipos siempre se llaman estáticamente, determinando el nombre de la función. Los métodos que heredan de Object son redefinidos, ya que estos están implementados teniendo en cuenta la representación de objetos expuesta anteriormente que estos tipos no tienen. - -A su vez, se requiere un trato especial en nodos como \texttt{TypeOfNode} porque estas variables no tienen en su primer campo el nombre de su tipo. Para llevar a cabo este análisis se guarda, para cada variable el tipo de dirección a la que hace referencia. Se tienen como tipo de dirección: String, Bool, Int y por Referencia, este último para designar a los objetos representados mediante el modelo de objetos. - -Por otro lado, la única manera de tratar algún objeto tipo \texttt{String}, \texttt{Bool} o \texttt{Int} es haciendo un casteo de este objeto de manera indirecta: retornando uno de estos valores cuando el tipo de retorno del método es \texttt{Object} o pasándolos como parámetro cuando el tipo de argumento es \texttt{Object} o de manera general asignándolos a una variable tipo \texttt{Object}. En estos casos se espera que el valor del objeto sea por referencia, así que se hace \textit{Boxing} llevándolos a una representación de objetos, almacenándolos en el heap. Para esto se crea un nodo especial en CIL \texttt{BoxingNode} a partir del cual se llevará a cabo la conversión en Mips. Notar que el proceso contrario \textit{Unboxing} en el que se convierte un objeto por referencia a uno por valor no es necesario implementarlo en COOL: el casteo directo no existe en este lenguaje y asignar un objeto de tipo \texttt{Object} a uno \texttt{Bool}, \texttt{Int} o \texttt{String} consiste un error de tipos. - -\subsection{Valor Void en Mips} - -Otro de los problemas que se tuvo en cuenta fue la representación del valor nulo en Mips. Para modelar este valor se creo un nuevo tipo, denominado \texttt{Void}, que lo único que contiene es como primer campo el nombre del tipo \texttt{Void}. Para comprobar que un valor es void, por lo tanto, simplemente se comprueba que el nombre del tipo dinámico de una variable sea igual a texttt{Void}. Los errores de runtime ocasionados por intentar llamar estática o dinámicamente a una variable en void son controlados, así como la evaluación de una expresión en case, que de ser void ocasionaría un error al intentar buscar la información del tipo. Por lo tanto, lo único necesario para la representación de void fue ese campo de nombre del tipo. Comprobar si una expresión por lo tanto consiste solamente en determinar si su tipo es \texttt{Void}. - - -%---------------------------------------------------------------------------------------- - -\end{document} diff --git a/doc/report/resources/case.cl b/doc/report/resources/case.cl deleted file mode 100644 index 2492831b..00000000 --- a/doc/report/resources/case.cl +++ /dev/null @@ -1,5 +0,0 @@ -case of - : => ; - . . . - : => ; -esac diff --git a/doc/report/resources/luftballons.pl b/doc/report/resources/luftballons.pl deleted file mode 100644 index 534e2974..00000000 --- a/doc/report/resources/luftballons.pl +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/perl - -use strict; -use warnings; - -for (1..99) { print $_." Luftballons\n"; } - -# This is a commented line - -my $string = "Hello World!"; - -print $string."\n\n"; - -$string =~ s/Hello/Goodbye Cruel/; - -print $string."\n\n"; - -finale(); - -exit; - -sub finale { print "Fin.\n"; } \ No newline at end of file diff --git a/doc/report/resources/object.png b/doc/report/resources/object.png deleted file mode 100644 index bb5fb2469a9f50e0154abcf273b1ba509c27c5b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25224 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 delta 919 zcmYjOOHUI~6u#%qv!ydF4d4T62|}@jQb-IGbfqi}36}6sz<`Z0LqsyvD9N2*LVP4X zSR9bVRVS{L#EAV1#Es}rz_klwA`3Uhcp*RY0mAG2c%6bu`Mli=9REe8p*L(mb)KW;w z(zeEL@dAV3uEZ&3xEj+jJ#B(5#;X?TIp}FqY>`hgN>EoztP7n&X~%(ztiaNI#Enpi z>4-Z+KleW76R8XCdCA8m7!sx>%o3!Hz}uDGx={&J60S?gNJ!vl$-~ zW$xaC|8}~LW9hc!9MDdi$jrD2P0+w2a!$dt8lVC2XEuks=@D4MrR)$Oj%50wgpV>? zu!4!M$FLgcH}P9n9@c8S&^-W8YW!1oKRm1Pe0BiVYkWI9NYP}>O>FJS!&YUgXB=Py cKjf0?D=G)S=92g;Hw!k7_BMlExznq|KR__k_5c6? diff --git a/src/codegen/visitors/base_mips_visitor.py b/src/codegen/visitors/base_mips_visitor.py index 0b1876e5..f234241b 100644 --- a/src/codegen/visitors/base_mips_visitor.py +++ b/src/codegen/visitors/base_mips_visitor.py @@ -447,4 +447,20 @@ def conforms_to(self, rsrc, rdest, type_name): self.code.append(f'false_{loop_idx}:') self.code.append(f'li ${rdest}, 0') self.code.append(f'end_{loop_idx}:') + self.loop_idx += 1 + + def value_conforms_to_obj(self, rdest, typex, branch_type): + self.code.append('# Comparing value types in case node') + true_label = f'true_{self.loop_idx}' + end_label = f'end_{self.loop_idx}' + self.code.append('la $t9, type_Object') # si es de tipo object entonces se conforma + self.code.append(f'la $t8, type_{branch_type}') + self.code.append(f'beq $t9, $t8, {true_label}') + self.code.append(f'la $t9, type_{typex}') # si es del mismo tipo que él entonces se conforma + self.code.append(f'beq $t9, $t8, {true_label}') + self.code.append(f'li ${rdest}, 0') + self.code.append(f'j {end_label}') + self.code.append(f'{true_label}:') + self.code.append(f'li ${rdest}, 1') + self.code.append(f'{end_label}:') self.loop_idx += 1 \ No newline at end of file diff --git a/src/codegen/visitors/cil_visitor.py b/src/codegen/visitors/cil_visitor.py index 1fea5636..cf0d8f04 100644 --- a/src/codegen/visitors/cil_visitor.py +++ b/src/codegen/visitors/cil_visitor.py @@ -222,17 +222,14 @@ def visit(self, node: SelfNode, scope: Scope): @visitor.when(VariableNode) def visit(self, node: VariableNode, scope: Scope): try: + typex = scope.find_local(node.lex).type + name = self.to_var_name(node.lex) + return name, get_type(typex, self.current_type) + except: var_info = scope.find_attribute(node.lex) local_var = self.register_local(var_info.name) self.register_instruction(cil.GetAttribNode('self', var_info.name, self.current_type.name, local_var, var_info.type.name)) return local_var, get_type(var_info.type, self.current_type) - except: - try: - typex = scope.find_local(node.lex).type - except: - typex = self.current_type - name = self.to_var_name(node.lex) - return name, get_type(typex, self.current_type) @visitor.when(InstantiateNode) def visit(self, node: InstantiateNode, scope: Scope): @@ -339,7 +336,7 @@ def visit(self, node: CaseNode, scope: Scope): sorted_case_list = self.sort_option_nodes_by_type(node.case_list) for i, case in enumerate(sorted_case_list): next_label = cil.LabelNode(f'next__{self.idx}_{i}') - expr_i = self.visit(case, new_scope, expr, next_label) + expr_i = self.visit(case, new_scope.create_child(), expr, next_label, typex) self.register_instruction(cil.AssignNode(result, expr_i)) self.register_instruction(cil.GotoNode(end_label.label)) self.register_instruction(next_label) @@ -351,18 +348,19 @@ def visit(self, node: CaseNode, scope: Scope): return result, typex @visitor.when(OptionNode) - def visit(self, node: OptionNode, scope:Scope, expr, next_label): + def visit(self, node: OptionNode, scope:Scope, expr, next_label, type_e): aux = self.define_internal_local() self.register_instruction(cil.ConformsNode(aux, expr, node.typex)) self.register_instruction(cil.GotoIfFalseNode(aux, next_label.label)) - + local_var = self.register_local(node.id) typex = self.context.get_type(node.typex, node.type_pos) scope.define_variable(node.id, typex) - self.register_instruction(cil.AssignNode(local_var, expr)) + if typex.name == 'Object' and type_e.name in ['String', 'Int', 'Bool']: + self.register_instruction(cil.BoxingNode(local_var, type_e.name)) + else: + self.register_instruction(cil.AssignNode(local_var, expr)) expr_i, type_expr = self.visit(node.expr, scope) - if typex.name == 'Object' and type_expr.name in ['String', 'Int', 'Bool']: - self.register_instruction(cil.BoxingNode(expr_i, type_expr.name)) return expr_i @visitor.when(NotNode) diff --git a/src/codegen/visitors/mips_visitor.py b/src/codegen/visitors/mips_visitor.py index 3c2a32ec..4fdd95bc 100644 --- a/src/codegen/visitors/mips_visitor.py +++ b/src/codegen/visitors/mips_visitor.py @@ -728,20 +728,18 @@ def visit(self, node: CopyNode): @visitor.when(ConformsNode) def visit(self, node: ConformsNode): rdest = self.addr_desc.get_var_reg(node.dest) - if self.is_variable(node.expr): rsrc = self.addr_desc.get_var_reg(node.expr) if self.var_address[node.expr] == AddrType.REF: self.conforms_to(rsrc, rdest, node.type) elif self.var_address[node.expr] == AddrType.STR: - self.code.append(f'li ${rdest}, 0') + self.value_conforms_to_obj(rdest, 'String', node.type) elif self.var_address[node.expr] == AddrType.INT: - self.code.append(f'li ${rdest}, 0') + self.value_conforms_to_obj(rdest, 'Int', node.type) elif self.var_address[node.expr] == AddrType.BOOL: - self.code.append(f'li ${rdest}, 0') + self.value_conforms_to_obj(rdest, 'Bool', node.type) elif self.is_int(node.expr): - self.code.append(f'li ${rdest}, 0') - + self.value_conforms_to_obj(rdest, 'Int', node.type) @visitor.when(ErrorNode) def visit(self, node: ErrorNode): diff --git a/src/cool_parser/output_parser/parselog.txt b/src/cool_parser/output_parser/parselog.txt index 4f58f3c0..2cb03511 100644 --- a/src/cool_parser/output_parser/parselog.txt +++ b/src/cool_parser/output_parser/parselog.txt @@ -6146,19 +6146,19 @@ yacc.py: 411:State : 32 yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',29,1046) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',29,1046) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',29,1046) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',29,1046) @@ -6183,37 +6183,37 @@ yacc.py: 411:State : 91 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur true . LexToken(ccur,'}',29,1062) yacc.py: 471:Action : Reduce rule [atom -> true] with ['true'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur def_func semi id opar epsilon . LexToken(cpar,')',35,1254) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur def_func semi id opar param_list_empty . LexToken(cpar,')',35,1254) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur def_func semi id opar formals . LexToken(cpar,')',35,1254) @@ -6285,19 +6285,19 @@ yacc.py: 411:State : 113 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar . LexToken(cpar,')',35,1273) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar epsilon . LexToken(cpar,')',35,1273) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar arg_list_empty . LexToken(cpar,')',35,1273) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar args . LexToken(cpar,')',35,1273) @@ -6306,37 +6306,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar args cpar . LexToken(semi,';',35,1274) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['abort','(',[],')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'abort',35,1267), [])) + yacc.py: 506:Result : ((LexToken(id,'abort',35,1267), [])) yacc.py: 410: yacc.py: 411:State : 78 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur func_call . LexToken(semi,';',35,1274) - yacc.py: 471:Action : Reduce rule [factor -> func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar epsilon . LexToken(cpar,')',40,1389) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',40,1389) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals . LexToken(cpar,')',40,1389) @@ -6504,19 +6504,19 @@ yacc.py: 411:State : 113 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar . LexToken(cpar,')',40,1409) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar epsilon . LexToken(cpar,')',40,1409) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar arg_list_empty . LexToken(cpar,')',40,1409) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar args . LexToken(cpar,')',40,1409) @@ -6525,37 +6525,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar args cpar . LexToken(semi,';',40,1410) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['abort','(',[],')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'abort',40,1403), [])) + yacc.py: 506:Result : ((LexToken(id,'abort',40,1403), [])) yacc.py: 410: yacc.py: 411:State : 78 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur func_call . LexToken(semi,';',40,1410) - yacc.py: 471:Action : Reduce rule [factor -> func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['i',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'i',49,1777), LexToken(type ...) + yacc.py: 506:Result : ((LexToken(id,'i',49,1777), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar param . LexToken(cpar,')',49,1784) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',49,1784) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',49,1784) @@ -6734,37 +6734,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',50,1810) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Cons'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( id] with ['i'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['init','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'init',50,1812), [ id opar args cpar] with ['init','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'init',50,1812), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['cons','(',,')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['cons','(',,')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',53,1833) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',53,1833) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','List','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','List','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['car',':','Int'] and goto state 17 - yacc.py: 506:Result : ( ( id colon type] with ['cdr',':','List'] and goto state 17 - yacc.py: 506:Result : ( ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',76,2482) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',76,2482) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',76,2482) @@ -7097,37 +7097,37 @@ yacc.py: 411:State : 92 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur false . LexToken(ccur,'}',76,2499) yacc.py: 471:Action : Reduce rule [atom -> false] with ['false'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',78,2511) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',78,2511) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',78,2511) @@ -7191,37 +7191,37 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',78,2526) yacc.py: 471:Action : Reduce rule [atom -> id] with ['car'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',80,2538) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',80,2538) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',80,2538) @@ -7285,37 +7285,37 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',80,2554) yacc.py: 471:Action : Reduce rule [atom -> id] with ['cdr'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['i',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'i',82,2566), LexToken(type ...) + yacc.py: 506:Result : ((LexToken(id,'i',82,2566), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param . LexToken(comma,',',82,2573) @@ -7375,24 +7375,24 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma id colon type . LexToken(cpar,')',82,2586) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['rest',':','List'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'rest',82,2575), LexToken(t ...) + yacc.py: 506:Result : ((LexToken(id,'rest',82,2575), LexToken(t ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 - yacc.py: 506:Result : ([(LexToken(id,'rest',82,2575), LexToken( ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 + yacc.py: 506:Result : ([(LexToken(id,'rest',82,2575), LexToken( ...) yacc.py: 410: yacc.py: 411:State : 95 yacc.py: 430:Defaulted state 95: Reduce using 33 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param_list . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',82,2586) @@ -7429,42 +7429,42 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur ocur id larrow id . LexToken(semi,';',84,2615) yacc.py: 471:Action : Reduce rule [atom -> id] with ['i'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['car','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['car','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['rest'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['cdr','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['cdr','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['init','(',,')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['init','(',,')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',90,2655) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',90,2655) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Cons','inherits','List','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Cons','inherits','List','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['mylist',':','List'] and goto state 17 - yacc.py: 506:Result : ( ( id colon type] with ['l',':','List'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'l',107,3036), LexToken(typ ...) + yacc.py: 506:Result : ((LexToken(id,'l',107,3036), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param . LexToken(cpar,')',107,3044) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list . LexToken(cpar,')',107,3044) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',107,3044) @@ -7801,12 +7801,12 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if id . LexToken(dot,'.',108,3067) yacc.py: 471:Action : Reduce rule [atom -> id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar epsilon . LexToken(cpar,')',108,3074) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar arg_list_empty . LexToken(cpar,')',108,3074) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar args . LexToken(cpar,')',108,3074) @@ -7844,37 +7844,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar args cpar . LexToken(then,'then',108,3076) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['isNil','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'isNil',108,3068), [])) + yacc.py: 506:Result : ((LexToken(id,'isNil',108,3068), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot func_call . LexToken(then,'then',108,3076) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( string] with ['\n'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',108,3081), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',108,3081), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar epsilon . LexToken(cpar,')',110,3145) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar arg_list_empty . LexToken(cpar,')',110,3145) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar args . LexToken(cpar,')',110,3145) @@ -8043,48 +8043,48 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar args cpar . LexToken(cpar,')',110,3146) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['head','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'head',110,3140), [])) + yacc.py: 506:Result : ((LexToken(id,'head',110,3140), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot func_call . LexToken(cpar,')',110,3146) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_int','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_int',110,3130), [ id opar args cpar] with ['out_int','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_int',110,3130), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( string] with [' '] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',111,3155), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',111,3155), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar epsilon . LexToken(cpar,')',112,3196) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar arg_list_empty . LexToken(cpar,')',112,3196) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar args . LexToken(cpar,')',112,3196) @@ -8288,48 +8288,48 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar args cpar . LexToken(cpar,')',112,3197) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['tail','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'tail',112,3191), [])) + yacc.py: 506:Result : ((LexToken(id,'tail',112,3191), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot func_call . LexToken(cpar,')',112,3197) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['print_list','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'print_list',112,3178), [ id opar args cpar] with ['print_list','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'print_list',112,3178), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print_list','(',,')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print_list','(',,')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',126,3742) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',126,3742) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals . LexToken(cpar,')',126,3742) @@ -8540,12 +8540,12 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow new type . LexToken(dot,'.',128,3783) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','List'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3784), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3784), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3792), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3792), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3800), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3800), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3808), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3808), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3816), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3816), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar epsilon . LexToken(cpar,')',129,3851) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar arg_list_empty . LexToken(cpar,')',129,3851) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar args . LexToken(cpar,')',129,3851) @@ -9023,67 +9023,67 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar args cpar . LexToken(cpar,')',129,3852) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['isNil','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'isNil',129,3845), [])) + yacc.py: 506:Result : ((LexToken(id,'isNil',129,3845), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot func_call . LexToken(cpar,')',129,3852) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 124 - yacc.py: 506:Result : ( comp] with [] and goto state 124 + yacc.py: 506:Result : ( not expr] with ['not',] and goto state 77 - yacc.py: 506:Result : ( not expr] with ['not',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 133 - yacc.py: 506:Result : ( comp] with [] and goto state 133 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['print_list','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'print_list',131,3874), [ id opar args cpar] with ['print_list','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'print_list',131,3874), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar epsilon . LexToken(cpar,')',132,3924) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar arg_list_empty . LexToken(cpar,')',132,3924) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar args . LexToken(cpar,')',132,3924) @@ -9286,42 +9286,42 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar args cpar . LexToken(semi,';',132,3925) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['tail','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'tail',132,3919), [])) + yacc.py: 506:Result : ((LexToken(id,'tail',132,3919), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot func_call . LexToken(semi,';',132,3925) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 204 - yacc.py: 506:Result : ( comp] with [] and goto state 204 + yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 - yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi def_func semi epsilon . LexToken(ccur,'}',138,3957) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi def_func semi feature_list . LexToken(ccur,'}',138,3957) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( ( n.type_name(); + a : Int => a.type_name(); + esac; + + main(): IO { + out_string(a) + }; +}; diff --git a/src/semantic/types.py b/src/semantic/types.py index 841c9ee6..084db244 100644 --- a/src/semantic/types.py +++ b/src/semantic/types.py @@ -46,6 +46,8 @@ def __init__(self, name:str, pos, parent=True): self.methods = {} if parent: self.parent = ObjectType(pos) + else: + self.parent = None self.pos = pos def set_parent(self, parent): diff --git a/src/test.mips b/src/test.mips new file mode 100644 index 00000000..405a0a47 --- /dev/null +++ b/src/test.mips @@ -0,0 +1,1320 @@ +.text +.globl main +main: +# Save method directions in the methods array +la $v0, methods +la $t9, entry +sw $t9, 0($v0) +la $t9, function_abort_Object +sw $t9, 4($v0) +la $t9, function_type_name_Object +sw $t9, 8($v0) +la $t9, function_copy_Object +sw $t9, 12($v0) +la $t9, function_out_string_IO +sw $t9, 16($v0) +la $t9, function_out_int_IO +sw $t9, 20($v0) +la $t9, function_in_int_IO +sw $t9, 24($v0) +la $t9, function_in_string_IO +sw $t9, 28($v0) +la $t9, function_length_String +sw $t9, 32($v0) +la $t9, function_concat_String +sw $t9, 36($v0) +la $t9, function_substr_String +sw $t9, 40($v0) +la $t9, function_type_name_String +sw $t9, 44($v0) +la $t9, function_copy_String +sw $t9, 48($v0) +la $t9, function_type_name_Int +sw $t9, 52($v0) +la $t9, function_copy_Int +sw $t9, 56($v0) +la $t9, function_type_name_Bool +sw $t9, 60($v0) +la $t9, function_copy_Bool +sw $t9, 64($v0) +la $t9, function_abort_String +sw $t9, 68($v0) +la $t9, function_abort_Int +sw $t9, 72($v0) +la $t9, function_abort_Bool +sw $t9, 76($v0) +la $t9, function_Main_Main +sw $t9, 80($v0) +la $t9, function_main_Main +sw $t9, 84($v0) +# Save types directions in the types array +la $t9, types +# Save space to locate the type info +# Allocating memory +li $v0, 9 +li $a0, 12 +syscall +# Filling table methods +la $t8, type_String +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 0($t9) +# Table addr is now stored in t8 +move $t8, $v0 +# Creating the dispatch table +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 28 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $v1, methods +# Save the direction of the method function_length_String in a0 +lw $a0, 32($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 4($v0) +# Save the direction of the method function_concat_String in a0 +lw $a0, 36($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 8($v0) +# Save the direction of the method function_substr_String in a0 +lw $a0, 40($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 12($v0) +# Save the direction of the method function_abort_String in a0 +lw $a0, 68($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 16($v0) +# Save the direction of the method function_type_name_String in a0 +lw $a0, 44($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 20($v0) +# Save the direction of the method function_copy_String in a0 +lw $a0, 48($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 24($v0) +sw $v0, 8($t8) +# Allocating memory +li $v0, 9 +li $a0, 12 +syscall +# Filling table methods +la $t8, type_Int +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 4($t9) +# Table addr is now stored in t8 +move $t8, $v0 +# Creating the dispatch table +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 16 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $v1, methods +# Save the direction of the method function_abort_Int in a0 +lw $a0, 72($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 4($v0) +# Save the direction of the method function_type_name_Int in a0 +lw $a0, 52($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 8($v0) +# Save the direction of the method function_copy_Int in a0 +lw $a0, 56($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 12($v0) +sw $v0, 8($t8) +# Allocating memory +li $v0, 9 +li $a0, 12 +syscall +# Filling table methods +la $t8, type_Object +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 8($t9) +# Table addr is now stored in t8 +move $t8, $v0 +# Creating the dispatch table +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 16 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $v1, methods +# Save the direction of the method function_abort_Object in a0 +lw $a0, 4($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 4($v0) +# Save the direction of the method function_type_name_Object in a0 +lw $a0, 8($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 8($v0) +# Save the direction of the method function_copy_Object in a0 +lw $a0, 12($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 12($v0) +sw $v0, 8($t8) +# Allocating memory +li $v0, 9 +li $a0, 12 +syscall +# Filling table methods +la $t8, type_Bool +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 12($t9) +# Table addr is now stored in t8 +move $t8, $v0 +# Creating the dispatch table +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 16 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $v1, methods +# Save the direction of the method function_abort_Bool in a0 +lw $a0, 76($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 4($v0) +# Save the direction of the method function_type_name_Bool in a0 +lw $a0, 60($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 8($v0) +# Save the direction of the method function_copy_Bool in a0 +lw $a0, 64($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 12($v0) +sw $v0, 8($t8) +# Allocating memory +li $v0, 9 +li $a0, 12 +syscall +# Filling table methods +la $t8, type_IO +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 16($t9) +# Table addr is now stored in t8 +move $t8, $v0 +# Creating the dispatch table +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 32 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $v1, methods +# Save the direction of the method function_abort_Object in a0 +lw $a0, 4($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 4($v0) +# Save the direction of the method function_type_name_Object in a0 +lw $a0, 8($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 8($v0) +# Save the direction of the method function_copy_Object in a0 +lw $a0, 12($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 12($v0) +# Save the direction of the method function_out_string_IO in a0 +lw $a0, 16($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 16($v0) +# Save the direction of the method function_out_int_IO in a0 +lw $a0, 20($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 20($v0) +# Save the direction of the method function_in_int_IO in a0 +lw $a0, 24($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 24($v0) +# Save the direction of the method function_in_string_IO in a0 +lw $a0, 28($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 28($v0) +sw $v0, 8($t8) +# Allocating memory +li $v0, 9 +li $a0, 12 +syscall +# Filling table methods +la $t8, type_Main +sw $t8, 0($v0) +# Copying direction to array +sw $v0, 20($t9) +# Table addr is now stored in t8 +move $t8, $v0 +# Creating the dispatch table +# Allocate dispatch table in the heap +li $v0, 9 +li $a0, 40 +syscall +# I save the offset of every one of the methods of this type +# Save the direction of methods +la $v1, methods +# Save the direction of the method function_abort_Object in a0 +lw $a0, 4($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 4($v0) +# Save the direction of the method function_type_name_Object in a0 +lw $a0, 8($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 8($v0) +# Save the direction of the method function_copy_Object in a0 +lw $a0, 12($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 12($v0) +# Save the direction of the method function_out_string_IO in a0 +lw $a0, 16($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 16($v0) +# Save the direction of the method function_out_int_IO in a0 +lw $a0, 20($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 20($v0) +# Save the direction of the method function_in_string_IO in a0 +lw $a0, 28($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 24($v0) +# Save the direction of the method function_in_int_IO in a0 +lw $a0, 24($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 28($v0) +# Save the direction of the method function_main_Main in a0 +lw $a0, 84($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 32($v0) +# Save the direction of the method function_Main_Main in a0 +lw $a0, 80($v1) +# Save the direction of the method in his position in the dispatch table +sw $a0, 36($v0) +sw $v0, 8($t8) +# Copying parents +lw $v0, 0($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 4($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 8($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 12($t9) +li $t8, 0 +sw $t8, 4($v0) +lw $v0, 16($t9) +lw $t8, 8($t9) +sw $t8, 4($v0) +lw $v0, 20($t9) +lw $t8, 16($t9) +sw $t8, 4($v0) + +entry: +# Gets the params from the stack +move $fp, $sp +# Gets the frame pointer from the stack +# Updates stack pointer pushing local__internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local__internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +li $a0, 16 +syscall +# Loads the name of the variable and saves the name like the first field +la $t9, type_Main +sw $t9, 0($v0) +# Saves the size of the node +li $t9, 16 +sw $t9, 4($v0) +move $t0, $v0 +# Adding Type Info addr +la $t8, types +lw $v0, 20($t8) +sw $v0, 8($t0) +# Static Dispatch of the method Main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +# This function will consume the arguments +jal function_Main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# Static Dispatch of the method main +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t1, -0($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +# This function will consume the arguments +jal function_main_Main +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -4($fp) +# saves the return value +move $t0, $v0 +li $v0, 0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Object_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_abort_Object_self_0 +move $t1, $t0 +sw $t1, -4($fp) +# Exiting the program +li $t8, 0 +# Printing abort message +li $v0, 4 +la $a0, abort_msg +syscall +li $v0, 4 +lw $a0, 0($t0) +syscall +li $v0, 4 +la $a0, new_line +syscall +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) +sw $t1, -4($fp) + +function_type_name_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_type_name_Object_result_0 <- Type of self +lw $t1, 0($t0) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Object: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Object_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +lw $t9, 4($t0) +# Syscall to allocate memory of the object entry in heap +li $v0, 9 +move $a0, $t9 +syscall +move $t1, $v0 +# Loop to copy every field of the previous object +# t8 the register to loop +li $t8, 0 +loop_0: +# In t9 is stored the size of the object +bge $t8, $t9, exit_0 +lw $a0, ($t0) +sw $a0, ($v0) +addi $v0, $v0, 4 +addi $t0, $t0, 4 +# Increase loop counter +addi $t8, $t8, 4 +j loop_0 +exit_0: +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_out_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_string_String_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_string_String_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing a string +li $v0, 4 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_out_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value number +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_out_int_IO_self_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -8($fp) +# Moving self to local_out_int_IO_self_0 +move $t1, $t0 +sw $t1, -8($fp) +lw $t2, -0($fp) +# Printing an int +li $v0, 1 +move $a0, $t2 +syscall +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -8($fp) +sw $t2, -0($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_in_int_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_int_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Reading a int +li $v0, 5 +syscall +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_in_string_IO: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_in_string_IO_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t0, $v0 +# Reading a string +# Putting buffer in a0 +move $a0, $t0 +# Putting length of string in a1 +li $a1, 356 +li $v0, 8 +syscall +# Walks to eliminate the newline +move $t9, $t0 +start_1: +lb $t8, 0($t9) +beqz $t8, end_1 +add $t9, $t9, 1 +j start_1 +end_1: +addiu $t9, $t9, -1 +sb $0, ($t9) +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_length_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_length_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +move $t8, $t0 +# Determining the length of a string +loop_2: +lb $t9, 0($t8) +beq $t9, $zero, end_2 +addi $t8, $t8, 1 +j loop_2 +end_2: +sub $t1, $t8, $t0 +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_concat_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value word +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_concat_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -8($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +# Copy the first string to dest +move $a0, $t0 +move $a1, $t2 +sw $ra, ($sp) +addiu $sp, $sp, -4 +jal strcopier +# Concatenate second string on result buffer +move $a0, $t1 +move $a1, $v0 +jal strcopier +sb $0, 0($v0) +addiu $sp, $sp, 4 +lw $ra, ($sp) +j finish_3 +# Definition of strcopier +strcopier: +# In a0 is the source and in a1 is the destination +loop_3: +lb $t8, ($a0) +beq $t8, $zero, end_3 +addiu $a0, $a0, 1 +sb $t8, ($a1) +addiu $a1, $a1, 1 +b loop_3 +end_3: +move $v0, $a1 +jr $ra +finish_3: +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + + +function_substr_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Pops the register with the param value begin +addiu $fp, $fp, 4 +# Pops the register with the param value end +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_substr_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +lw $t1, -0($fp) +lw $t2, -12($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t2, $v0 +lw $t3, -8($fp) +# Getting the substring of a node +# Move to the first position in the string +li $v0, 0 +move $t8, $t3 +start_4: +lb $t9, 0($t8) +beqz $t9, error_4 +addi $v0, 1 +bgt $v0, $t0, end_len_4 +addi $t8, 1 +j start_4 +end_len_4: +# Saving dest to iterate over him +move $v0, $t2 +loop_4: +sub $t9, $v0, $t2 +beq $t9, $t1, end_4 +lb $t9, 0($t8) +beqz $t9, error_4 +sb $t9, 0($v0) +addi $t8, $t8, 1 +addi $v0, $v0, 1 +j loop_4 +error_4: +la $a0, index_error +li $v0, 4 +move $a0, $t3 +syscall +li $v0, 1 +move $a0, $t0 +syscall +li $v0, 1 +move $a0, $t1 +syscall +j .raise +end_4: +sb $0, 0($v0) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -12($fp) +sw $t3, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 16 +jr $ra + + +function_type_name_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_String_result_0 type_String +la $t0, type_String +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_String_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Allocating memory for the buffer +li $a0, 356 +li $v0, 9 +syscall +move $t1, $v0 +# Copy the first string to dest +move $a0, $t0 +move $a1, $t1 +sw $ra, ($sp) +addiu $sp, $sp, -4 +jal strcopier +sb $0, 0($v0) +addiu $sp, $sp, 4 +lw $ra, ($sp) +j finish_5 +finish_5: +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Int_result_0 type_Int +la $t0, type_Int +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_Int_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_Int_result_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_type_name_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_type_name_Bool_result_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -4($fp) +# Saves in local_type_name_Bool_result_0 type_Bool +la $t0, type_Bool +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_copy_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_copy_result_Bool_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# Moving self to local_copy_result_Bool_0 +move $t1, $t0 +sw $t1, -4($fp) +move $v0, $t1 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +# Removing all locals from stack +addiu $sp, $sp, 8 +jr $ra + + +function_abort_String: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_String_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self string_abort +la $t0, string_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Int: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Int_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self int_abort +la $t0, int_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_abort_Bool: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_abort_Bool_msg_0 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +# Saves in self bool_abort +la $t0, bool_abort +# Printing a string +li $v0, 4 +move $a0, $t0 +syscall +# Exiting the program +li $t8, 0 +li $v0, 17 +move $a0, $t8 +syscall +sw $t0, -0($fp) + +function_Main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_Main_Main_internal_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_1 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_2 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_3 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_n_4 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_5 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_6 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_7 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_8 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_a_9 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_10 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_11 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_12 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_Main_Main_internal_13 to the stack +addiu $sp, $sp, -4 +lw $t0, -8($fp) +# local_Main_Main_internal_1 <- Type of 1 +la $t0, type_Int +lw $t1, -12($fp) +# Saves in local_Main_Main_internal_2 data_0 +la $t1, data_0 +# local_Main_Main_internal_1 <- local_Main_Main_internal_1 = local_Main_Main_internal_2 +move $t8, $t0 +move $t9, $t1 +loop_6: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_6 +beqz $a1, mismatch_6 +seq $v0, $a0, $a1 +beqz $v0, mismatch_6 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_6 +mismatch_6: +li $v0, 0 +j end_6 +check_6: +bnez $a1, mismatch_6 +li $v0, 1 +end_6: +move $t0, $v0 +# If local_Main_Main_internal_1 goto error__50 +sw $t0, -8($fp) +sw $t1, -12($fp) +bnez $t0, error__50 +lw $t0, -16($fp) +# Comparing value types in case node +la $t9, type_Object +la $t8, type_Main +beq $t9, $t8, true_7 +la $t9, type_Int +beq $t9, $t8, true_7 +li $t0, 0 +j end_7 +true_7: +li $t0, 1 +end_7: +# If not local_Main_Main_internal_3 goto next__56_0 +sw $t0, -16($fp) +beqz $t0, next__56_0 +lw $t0, -20($fp) +# Moving 1 to local_Main_Main_n_4 +li $t0, 1 +sw $t0, -20($fp) +lw $t1, -28($fp) +# local_Main_Main_internal_6 <- Type of local_Main_Main_n_4 +la $t1, type_Int +lw $t2, -32($fp) +# Saves in local_Main_Main_internal_7 data_0 +la $t2, data_0 +# local_Main_Main_internal_6 <- local_Main_Main_internal_6 = local_Main_Main_internal_7 +move $t8, $t1 +move $t9, $t2 +loop_8: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_8 +beqz $a1, mismatch_8 +seq $v0, $a0, $a1 +beqz $v0, mismatch_8 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_8 +mismatch_8: +li $v0, 0 +j end_8 +check_8: +bnez $a1, mismatch_8 +li $v0, 1 +end_8: +move $t1, $v0 +# If not local_Main_Main_internal_6 goto continue__63 +sw $t0, -20($fp) +sw $t1, -28($fp) +sw $t2, -32($fp) +beqz $t1, continue__63 +la $a0, dispatch_error +j .raise +continue__63: +lw $t0, -20($fp) +lw $t1, -24($fp) +# Find the actual name in the dispatch table +# Gets in a0 the actual direction of the dispatch table +lw $t9, 8($t0) +lw $a0, 8($t9) +# Saves in t8 the direction of function_type_name_Object +lw $t8, 8($a0) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -20($fp) +sw $t1, -24($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -24($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +# Moving local_Main_Main_internal_5 to local_Main_Main_internal_0 +move $t1, $t0 +sw $t1, -4($fp) +sw $t0, -24($fp) +sw $t1, -4($fp) +j end__50 +next__56_0: +lw $t0, -36($fp) +# Comparing value types in case node +la $t9, type_Object +la $t8, type_Int +beq $t9, $t8, true_9 +la $t9, type_Int +beq $t9, $t8, true_9 +li $t0, 0 +j end_9 +true_9: +li $t0, 1 +end_9: +# If not local_Main_Main_internal_8 goto next__76_1 +sw $t0, -36($fp) +beqz $t0, next__76_1 +lw $t0, -40($fp) +# Moving 1 to local_Main_Main_a_9 +li $t0, 1 +sw $t0, -40($fp) +lw $t1, -48($fp) +# local_Main_Main_internal_11 <- Type of local_Main_Main_a_9 +la $t1, type_Int +lw $t2, -52($fp) +# Saves in local_Main_Main_internal_12 data_0 +la $t2, data_0 +# local_Main_Main_internal_11 <- local_Main_Main_internal_11 = local_Main_Main_internal_12 +move $t8, $t1 +move $t9, $t2 +loop_10: +lb $a0, ($t8) +lb $a1, ($t9) +beqz $a0, check_10 +beqz $a1, mismatch_10 +seq $v0, $a0, $a1 +beqz $v0, mismatch_10 +addi $t8, $t8, 1 +addi $t9, $t9, 1 +j loop_10 +mismatch_10: +li $v0, 0 +j end_10 +check_10: +bnez $a1, mismatch_10 +li $v0, 1 +end_10: +move $t1, $v0 +# If not local_Main_Main_internal_11 goto continue__83 +sw $t0, -40($fp) +sw $t1, -48($fp) +sw $t2, -52($fp) +beqz $t1, continue__83 +la $a0, dispatch_error +j .raise +continue__83: +lw $t0, -44($fp) +# Static Dispatch of the method type_name +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +lw $t1, -40($fp) +sw $t1, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -44($fp) +sw $t1, -40($fp) +# This function will consume the arguments +jal function_type_name_Int +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -44($fp) +# saves the return value +move $t0, $v0 +lw $t1, -4($fp) +# Moving local_Main_Main_internal_10 to local_Main_Main_internal_0 +move $t1, $t0 +sw $t1, -4($fp) +sw $t0, -44($fp) +sw $t1, -4($fp) +j end__50 +next__76_1: +la $a0, case_error +j .raise +error__50: +la $a0, case_void_error +j .raise +end__50: +lw $t0, -4($fp) +lw $t1, -0($fp) +# self . a <- SET local_Main_Main_internal_0 +sw $t0, 12($t1) +lw $t2, -56($fp) +# Moving self to local_Main_Main_internal_13 +move $t2, $t1 +sw $t2, -56($fp) +move $v0, $t2 +# Empty all used registers and saves them to memory +sw $t0, -4($fp) +sw $t1, -0($fp) +sw $t2, -56($fp) +# Removing all locals from stack +addiu $sp, $sp, 60 +jr $ra + + +function_main_Main: +# Gets the params from the stack +move $fp, $sp +# Pops the register with the param value self +addiu $fp, $fp, 4 +# Gets the frame pointer from the stack +# Updates stack pointer pushing local_main_Main_a_0 to the stack +addiu $sp, $sp, -4 +# Updates stack pointer pushing local_main_Main_internal_1 to the stack +addiu $sp, $sp, -4 +lw $t0, -0($fp) +lw $t1, -4($fp) +# local_main_Main_a_0 <- GET self . a +lw $t1, 12($t0) +lw $t2, -8($fp) +# Find the actual name in the dispatch table +# Gets in a0 the actual direction of the dispatch table +lw $t9, 8($t0) +lw $a0, 8($t9) +# Saves in t8 the direction of function_out_string_IO +lw $t8, 16($a0) +sw $fp, ($sp) +addiu $sp, $sp, -4 +sw $ra, ($sp) +addiu $sp, $sp, -4 +# Push the arguments to the stack +# The rest of the arguments are push into the stack +sw $t1, ($sp) +addiu $sp, $sp, -4 +# The rest of the arguments are push into the stack +sw $t0, ($sp) +addiu $sp, $sp, -4 +# Empty all used registers and saves them to memory +sw $t0, -0($fp) +sw $t1, -4($fp) +sw $t2, -8($fp) +# This function will consume the arguments +jal $t8 +# Pop ra register of return function of the stack +addiu $sp, $sp, 4 +lw $ra, ($sp) +# Pop fp register from the stack +addiu $sp, $sp, 4 +lw $fp, ($sp) +lw $t0, -8($fp) +# saves the return value +move $t0, $v0 +move $v0, $t0 +# Empty all used registers and saves them to memory +sw $t0, -8($fp) +# Removing all locals from stack +addiu $sp, $sp, 12 +jr $ra + +# Raise exception method +.raise: +li $v0, 4 +syscall +li $v0, 17 +li $a0, 1 +syscall + +.data +abort_msg: .asciiz "Abort called from class " +new_line: .asciiz " +" +string_abort: .asciiz "Abort called from class String +" +int_abort: .asciiz "Abort called from class Int +" +bool_abort: .asciiz "Abort called from class Bool +" +type_Object: .asciiz "Object" +type_IO: .asciiz "IO" +type_String: .asciiz "String" +type_Int: .asciiz "Int" +type_Bool: .asciiz "Bool" +type_Main: .asciiz "Main" +methods: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +type_Void: .asciiz "Void" +types: .word 0, 0, 0, 0, 0, 0 +data_0: .asciiz "Void" +zero_error: .asciiz "Division by zero error +" +case_void_error: .asciiz "Case on void error +" +dispatch_error: .asciiz "Dispatch on void error +" +case_error: .asciiz "Case statement without a matching branch error +" +index_error: .asciiz "Substring out of range error +" +heap_error: .asciiz "Heap overflow error +" \ No newline at end of file diff --git a/src/utils/utils.py b/src/utils/utils.py index 6aca4e6e..91dcba9a 100644 --- a/src/utils/utils.py +++ b/src/utils/utils.py @@ -13,6 +13,7 @@ def path_to_objet(typex): while c_type: path.append(c_type) + c_type = c_type.parent path.reverse() diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index b3825a9b..e2ff092c 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -12638,20 +12638,6 @@ lw $t1, -800($fp) # Moving 0 to local_main_Main_internal_199 li $t1, 0 sw $t1, -800($fp) -# Initialize new node -li $a0, 12 -li $v0, 9 -syscall -la $t9, type_Int -sw $t9, 0($v0) -li $t9, 12 -sw $t9, 4($v0) -move $t1, $v0 -# Saving the methods of object -# Adding Type Info addr -la $t8, types -lw $v0, 8($t8) -sw $v0, 8($t1) lw $t2, -704($fp) # Moving local_main_Main_internal_199 to local_main_Main_internal_175 move $t2, $t1 @@ -12781,15 +12767,15 @@ bnez $a1, mismatch_86 li $v0, 1 end_86: move $t2, $v0 -# If not local_main_Main_internal_203 goto continue__2159 +# If not local_main_Main_internal_203 goto continue__2158 sw $t0, -808($fp) sw $t1, -804($fp) sw $t2, -816($fp) sw $t3, -820($fp) -beqz $t2, continue__2159 +beqz $t2, continue__2158 la $a0, dispatch_error j .raise -continue__2159: +continue__2158: lw $t0, -804($fp) lw $t1, -812($fp) # Find the actual name in the dispatch table @@ -12899,16 +12885,16 @@ bnez $a1, mismatch_87 li $v0, 1 end_87: move $t3, $v0 -# If not local_main_Main_internal_208 goto continue__2178 +# If not local_main_Main_internal_208 goto continue__2177 sw $t0, -824($fp) sw $t1, -0($fp) sw $t2, -828($fp) sw $t3, -836($fp) sw $t4, -840($fp) -beqz $t3, continue__2178 +beqz $t3, continue__2177 la $a0, dispatch_error j .raise -continue__2178: +continue__2177: lw $t0, -828($fp) lw $t1, -832($fp) # Find the actual name in the dispatch table @@ -12970,16 +12956,16 @@ bnez $a1, mismatch_88 li $v0, 1 end_88: move $t3, $v0 -# If not local_main_Main_internal_212 goto continue__2192 +# If not local_main_Main_internal_212 goto continue__2191 sw $t0, -832($fp) sw $t1, -0($fp) sw $t2, -844($fp) sw $t3, -852($fp) sw $t4, -856($fp) -beqz $t3, continue__2192 +beqz $t3, continue__2191 la $a0, dispatch_error j .raise -continue__2192: +continue__2191: lw $t0, -844($fp) lw $t1, -848($fp) # Find the actual name in the dispatch table @@ -13038,15 +13024,15 @@ bnez $a1, mismatch_89 li $v0, 1 end_89: move $t2, $v0 -# If not local_main_Main_internal_215 goto continue__2205 +# If not local_main_Main_internal_215 goto continue__2204 sw $t0, -848($fp) sw $t1, -824($fp) sw $t2, -864($fp) sw $t3, -868($fp) -beqz $t2, continue__2205 +beqz $t2, continue__2204 la $a0, dispatch_error j .raise -continue__2205: +continue__2204: lw $t0, -824($fp) lw $t1, -860($fp) # Find the actual name in the dispatch table diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips index 0e646443..9b36cc98 100644 --- a/tests/codegen/hairyscary.mips +++ b/tests/codegen/hairyscary.mips @@ -2132,9 +2132,7 @@ addiu $sp, $sp, -4 addiu $sp, $sp, -4 # Updates stack pointer pushing local_doh_Foo_h_3 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_doh_Foo_i_4 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_doh_Foo_internal_5 to the stack +# Updates stack pointer pushing local_doh_Foo_internal_4 to the stack addiu $sp, $sp, -4 lw $t0, -0($fp) lw $t1, -8($fp) @@ -2153,13 +2151,10 @@ addi $t4, $t3, 2 # self . h <- SET local_doh_Foo_internal_2 sw $t4, 12($t0) lw $t5, -20($fp) -# local_doh_Foo_i_4 <- GET self . i -lw $t5, 20($t0) -lw $t6, -24($fp) -# Moving local_doh_Foo_i_4 to local_doh_Foo_internal_5 -move $t6, $t5 -sw $t6, -24($fp) -move $v0, $t6 +# Moving local_doh_Foo_i_0 to local_doh_Foo_internal_4 +move $t5, $t2 +sw $t5, -20($fp) +move $v0, $t5 # Empty all used registers and saves them to memory sw $t0, -0($fp) sw $t1, -8($fp) @@ -2167,9 +2162,8 @@ sw $t2, -4($fp) sw $t3, -16($fp) sw $t4, -12($fp) sw $t5, -20($fp) -sw $t6, -24($fp) # Removing all locals from stack -addiu $sp, $sp, 28 +addiu $sp, $sp, 24 jr $ra @@ -2350,11 +2344,11 @@ bnez $a1, mismatch_17 li $v0, 1 end_17: move $t1, $v0 -# If local_Bar_Bar_internal_1 goto error__215 +# If local_Bar_Bar_internal_1 goto error__213 sw $t0, -0($fp) sw $t1, -8($fp) sw $t2, -12($fp) -bnez $t1, error__215 +bnez $t1, error__213 lw $t0, -0($fp) lw $t1, -16($fp) la $t9, type_Bar @@ -2372,10 +2366,10 @@ j end_18 false_18: li $t1, 0 end_18: -# If not local_Bar_Bar_internal_3 goto next__221_0 +# If not local_Bar_Bar_internal_3 goto next__219_0 sw $t0, -0($fp) sw $t1, -16($fp) -beqz $t1, next__221_0 +beqz $t1, next__219_0 lw $t0, -0($fp) lw $t1, -20($fp) # Moving self to local_Bar_Bar_n_4 @@ -2388,8 +2382,8 @@ sw $t2, -4($fp) sw $t0, -0($fp) sw $t1, -20($fp) sw $t2, -4($fp) -j end__215 -next__221_0: +j end__213 +next__219_0: lw $t0, -0($fp) lw $t1, -24($fp) la $t9, type_Razz @@ -2407,10 +2401,10 @@ j end_19 false_19: li $t1, 0 end_19: -# If not local_Bar_Bar_internal_5 goto next__229_1 +# If not local_Bar_Bar_internal_5 goto next__227_1 sw $t0, -0($fp) sw $t1, -24($fp) -beqz $t1, next__229_1 +beqz $t1, next__227_1 lw $t0, -0($fp) lw $t1, -28($fp) # Moving self to local_Bar_Bar_n_6 @@ -2462,8 +2456,8 @@ move $t1, $t0 sw $t1, -4($fp) sw $t0, -32($fp) sw $t1, -4($fp) -j end__215 -next__229_1: +j end__213 +next__227_1: lw $t0, -0($fp) lw $t1, -36($fp) la $t9, type_Foo @@ -2481,10 +2475,10 @@ j end_20 false_20: li $t1, 0 end_20: -# If not local_Bar_Bar_internal_8 goto next__240_2 +# If not local_Bar_Bar_internal_8 goto next__238_2 sw $t0, -0($fp) sw $t1, -36($fp) -beqz $t1, next__240_2 +beqz $t1, next__238_2 lw $t0, -0($fp) lw $t1, -40($fp) # Moving self to local_Bar_Bar_n_9 @@ -2536,8 +2530,8 @@ move $t1, $t0 sw $t1, -4($fp) sw $t0, -44($fp) sw $t1, -4($fp) -j end__215 -next__240_2: +j end__213 +next__238_2: lw $t0, -0($fp) lw $t1, -48($fp) la $t9, type_Bazz @@ -2555,10 +2549,10 @@ j end_21 false_21: li $t1, 0 end_21: -# If not local_Bar_Bar_internal_11 goto next__251_3 +# If not local_Bar_Bar_internal_11 goto next__249_3 sw $t0, -0($fp) sw $t1, -48($fp) -beqz $t1, next__251_3 +beqz $t1, next__249_3 lw $t0, -0($fp) lw $t1, -52($fp) # Moving self to local_Bar_Bar_n_12 @@ -2610,14 +2604,14 @@ move $t1, $t0 sw $t1, -4($fp) sw $t0, -56($fp) sw $t1, -4($fp) -j end__215 -next__251_3: +j end__213 +next__249_3: la $a0, case_error j .raise -error__215: +error__213: la $a0, case_void_error j .raise -end__215: +end__213: lw $t0, -4($fp) lw $t1, -0($fp) # self . g <- SET local_Bar_Bar_internal_0 @@ -2697,13 +2691,13 @@ bnez $a1, mismatch_22 li $v0, 1 end_22: move $t3, $v0 -# If local_Bar_Bar_internal_17 goto error__274 +# If local_Bar_Bar_internal_17 goto error__272 sw $t0, -60($fp) sw $t1, -64($fp) sw $t2, -0($fp) sw $t3, -72($fp) sw $t4, -76($fp) -bnez $t3, error__274 +bnez $t3, error__272 lw $t0, -0($fp) lw $t1, -80($fp) la $t9, type_Bar @@ -2721,10 +2715,10 @@ j end_23 false_23: li $t1, 0 end_23: -# If not local_Bar_Bar_internal_19 goto next__280_0 +# If not local_Bar_Bar_internal_19 goto next__278_0 sw $t0, -0($fp) sw $t1, -80($fp) -beqz $t1, next__280_0 +beqz $t1, next__278_0 lw $t0, -0($fp) lw $t1, -84($fp) # Moving self to local_Bar_Bar_n_20 @@ -2737,8 +2731,8 @@ sw $t2, -68($fp) sw $t0, -0($fp) sw $t1, -84($fp) sw $t2, -68($fp) -j end__274 -next__280_0: +j end__272 +next__278_0: lw $t0, -0($fp) lw $t1, -88($fp) la $t9, type_Razz @@ -2756,10 +2750,10 @@ j end_24 false_24: li $t1, 0 end_24: -# If not local_Bar_Bar_internal_21 goto next__288_1 +# If not local_Bar_Bar_internal_21 goto next__286_1 sw $t0, -0($fp) sw $t1, -88($fp) -beqz $t1, next__288_1 +beqz $t1, next__286_1 lw $t0, -0($fp) lw $t1, -92($fp) # Moving self to local_Bar_Bar_n_22 @@ -2811,8 +2805,8 @@ move $t1, $t0 sw $t1, -68($fp) sw $t0, -96($fp) sw $t1, -68($fp) -j end__274 -next__288_1: +j end__272 +next__286_1: lw $t0, -0($fp) lw $t1, -100($fp) la $t9, type_Foo @@ -2830,10 +2824,10 @@ j end_25 false_25: li $t1, 0 end_25: -# If not local_Bar_Bar_internal_24 goto next__299_2 +# If not local_Bar_Bar_internal_24 goto next__297_2 sw $t0, -0($fp) sw $t1, -100($fp) -beqz $t1, next__299_2 +beqz $t1, next__297_2 lw $t0, -0($fp) lw $t1, -104($fp) # Moving self to local_Bar_Bar_n_25 @@ -2885,14 +2879,14 @@ move $t1, $t0 sw $t1, -68($fp) sw $t0, -108($fp) sw $t1, -68($fp) -j end__274 -next__299_2: +j end__272 +next__297_2: la $a0, case_error j .raise -error__274: +error__272: la $a0, case_void_error j .raise -end__274: +end__272: lw $t0, -68($fp) lw $t1, -0($fp) # self . a <- SET local_Bar_Bar_internal_16 @@ -2927,16 +2921,16 @@ bnez $a1, mismatch_26 li $v0, 1 end_26: move $t3, $v0 -# If not local_Bar_Bar_internal_32 goto continue__322 +# If not local_Bar_Bar_internal_32 goto continue__320 sw $t0, -68($fp) sw $t1, -0($fp) sw $t2, -124($fp) sw $t3, -132($fp) sw $t4, -136($fp) -beqz $t3, continue__322 +beqz $t3, continue__320 la $a0, dispatch_error j .raise -continue__322: +continue__320: lw $t0, -124($fp) lw $t1, -128($fp) # Find the actual name in the dispatch table @@ -2998,16 +2992,16 @@ bnez $a1, mismatch_27 li $v0, 1 end_27: move $t3, $v0 -# If not local_Bar_Bar_internal_36 goto continue__336 +# If not local_Bar_Bar_internal_36 goto continue__334 sw $t0, -128($fp) sw $t1, -0($fp) sw $t2, -140($fp) sw $t3, -148($fp) sw $t4, -152($fp) -beqz $t3, continue__336 +beqz $t3, continue__334 la $a0, dispatch_error j .raise -continue__336: +continue__334: lw $t0, -140($fp) lw $t1, -144($fp) # Find the actual name in the dispatch table @@ -3146,14 +3140,14 @@ bnez $a1, mismatch_28 li $v0, 1 end_28: move $t4, $v0 -# If local_Bar_Bar_internal_41 goto error__357 +# If local_Bar_Bar_internal_41 goto error__355 sw $t0, -160($fp) sw $t1, -116($fp) sw $t2, -112($fp) sw $t3, -0($fp) sw $t4, -168($fp) sw $t5, -172($fp) -bnez $t4, error__357 +bnez $t4, error__355 lw $t0, -0($fp) lw $t1, -176($fp) la $t9, type_Bar @@ -3171,10 +3165,10 @@ j end_29 false_29: li $t1, 0 end_29: -# If not local_Bar_Bar_internal_43 goto next__363_0 +# If not local_Bar_Bar_internal_43 goto next__361_0 sw $t0, -0($fp) sw $t1, -176($fp) -beqz $t1, next__363_0 +beqz $t1, next__361_0 lw $t0, -0($fp) lw $t1, -180($fp) # Moving self to local_Bar_Bar_n_44 @@ -3187,8 +3181,8 @@ sw $t2, -164($fp) sw $t0, -0($fp) sw $t1, -180($fp) sw $t2, -164($fp) -j end__357 -next__363_0: +j end__355 +next__361_0: lw $t0, -0($fp) lw $t1, -184($fp) la $t9, type_Razz @@ -3206,10 +3200,10 @@ j end_30 false_30: li $t1, 0 end_30: -# If not local_Bar_Bar_internal_45 goto next__371_1 +# If not local_Bar_Bar_internal_45 goto next__369_1 sw $t0, -0($fp) sw $t1, -184($fp) -beqz $t1, next__371_1 +beqz $t1, next__369_1 lw $t0, -0($fp) lw $t1, -188($fp) # Moving self to local_Bar_Bar_n_46 @@ -3261,14 +3255,14 @@ move $t1, $t0 sw $t1, -164($fp) sw $t0, -192($fp) sw $t1, -164($fp) -j end__357 -next__371_1: +j end__355 +next__369_1: la $a0, case_error j .raise -error__357: +error__355: la $a0, case_void_error j .raise -end__357: +end__355: lw $t0, -164($fp) lw $t1, -0($fp) # self . e <- SET local_Bar_Bar_internal_40 @@ -3303,16 +3297,16 @@ bnez $a1, mismatch_31 li $v0, 1 end_31: move $t3, $v0 -# If not local_Bar_Bar_internal_54 goto continue__395 +# If not local_Bar_Bar_internal_54 goto continue__393 sw $t0, -164($fp) sw $t1, -0($fp) sw $t2, -212($fp) sw $t3, -220($fp) sw $t4, -224($fp) -beqz $t3, continue__395 +beqz $t3, continue__393 la $a0, dispatch_error j .raise -continue__395: +continue__393: lw $t0, -216($fp) # Static Dispatch of the method doh sw $fp, ($sp) @@ -3369,16 +3363,16 @@ bnez $a1, mismatch_32 li $v0, 1 end_32: move $t3, $v0 -# If not local_Bar_Bar_internal_58 goto continue__409 +# If not local_Bar_Bar_internal_58 goto continue__407 sw $t0, -216($fp) sw $t1, -0($fp) sw $t2, -228($fp) sw $t3, -236($fp) sw $t4, -240($fp) -beqz $t3, continue__409 +beqz $t3, continue__407 la $a0, dispatch_error j .raise -continue__409: +continue__407: lw $t0, -228($fp) lw $t1, -232($fp) # Find the actual name in the dispatch table @@ -3444,7 +3438,7 @@ bnez $a1, mismatch_33 li $v0, 1 end_33: move $t5, $v0 -# If not local_Bar_Bar_internal_62 goto continue__424 +# If not local_Bar_Bar_internal_62 goto continue__422 sw $t0, -232($fp) sw $t1, -216($fp) sw $t2, -208($fp) @@ -3452,10 +3446,10 @@ sw $t3, -0($fp) sw $t4, -244($fp) sw $t5, -252($fp) sw $t6, -256($fp) -beqz $t5, continue__424 +beqz $t5, continue__422 la $a0, dispatch_error j .raise -continue__424: +continue__422: lw $t0, -244($fp) lw $t1, -248($fp) # Find the actual name in the dispatch table @@ -3836,11 +3830,11 @@ bnez $a1, mismatch_34 li $v0, 1 end_34: move $t1, $v0 -# If local_Razz_Razz_internal_1 goto error__461 +# If local_Razz_Razz_internal_1 goto error__459 sw $t0, -0($fp) sw $t1, -8($fp) sw $t2, -12($fp) -bnez $t1, error__461 +bnez $t1, error__459 lw $t0, -0($fp) lw $t1, -16($fp) la $t9, type_Bar @@ -3858,10 +3852,10 @@ j end_35 false_35: li $t1, 0 end_35: -# If not local_Razz_Razz_internal_3 goto next__467_0 +# If not local_Razz_Razz_internal_3 goto next__465_0 sw $t0, -0($fp) sw $t1, -16($fp) -beqz $t1, next__467_0 +beqz $t1, next__465_0 lw $t0, -0($fp) lw $t1, -20($fp) # Moving self to local_Razz_Razz_n_4 @@ -3874,8 +3868,8 @@ sw $t2, -4($fp) sw $t0, -0($fp) sw $t1, -20($fp) sw $t2, -4($fp) -j end__461 -next__467_0: +j end__459 +next__465_0: lw $t0, -0($fp) lw $t1, -24($fp) la $t9, type_Razz @@ -3893,10 +3887,10 @@ j end_36 false_36: li $t1, 0 end_36: -# If not local_Razz_Razz_internal_5 goto next__475_1 +# If not local_Razz_Razz_internal_5 goto next__473_1 sw $t0, -0($fp) sw $t1, -24($fp) -beqz $t1, next__475_1 +beqz $t1, next__473_1 lw $t0, -0($fp) lw $t1, -28($fp) # Moving self to local_Razz_Razz_n_6 @@ -3948,8 +3942,8 @@ move $t1, $t0 sw $t1, -4($fp) sw $t0, -32($fp) sw $t1, -4($fp) -j end__461 -next__475_1: +j end__459 +next__473_1: lw $t0, -0($fp) lw $t1, -36($fp) la $t9, type_Foo @@ -3967,10 +3961,10 @@ j end_37 false_37: li $t1, 0 end_37: -# If not local_Razz_Razz_internal_8 goto next__486_2 +# If not local_Razz_Razz_internal_8 goto next__484_2 sw $t0, -0($fp) sw $t1, -36($fp) -beqz $t1, next__486_2 +beqz $t1, next__484_2 lw $t0, -0($fp) lw $t1, -40($fp) # Moving self to local_Razz_Razz_n_9 @@ -4022,8 +4016,8 @@ move $t1, $t0 sw $t1, -4($fp) sw $t0, -44($fp) sw $t1, -4($fp) -j end__461 -next__486_2: +j end__459 +next__484_2: lw $t0, -0($fp) lw $t1, -48($fp) la $t9, type_Bazz @@ -4041,10 +4035,10 @@ j end_38 false_38: li $t1, 0 end_38: -# If not local_Razz_Razz_internal_11 goto next__497_3 +# If not local_Razz_Razz_internal_11 goto next__495_3 sw $t0, -0($fp) sw $t1, -48($fp) -beqz $t1, next__497_3 +beqz $t1, next__495_3 lw $t0, -0($fp) lw $t1, -52($fp) # Moving self to local_Razz_Razz_n_12 @@ -4096,14 +4090,14 @@ move $t1, $t0 sw $t1, -4($fp) sw $t0, -56($fp) sw $t1, -4($fp) -j end__461 -next__497_3: +j end__459 +next__495_3: la $a0, case_error j .raise -error__461: +error__459: la $a0, case_void_error j .raise -end__461: +end__459: lw $t0, -4($fp) lw $t1, -0($fp) # self . g <- SET local_Razz_Razz_internal_0 @@ -4183,13 +4177,13 @@ bnez $a1, mismatch_39 li $v0, 1 end_39: move $t3, $v0 -# If local_Razz_Razz_internal_17 goto error__520 +# If local_Razz_Razz_internal_17 goto error__518 sw $t0, -60($fp) sw $t1, -64($fp) sw $t2, -0($fp) sw $t3, -72($fp) sw $t4, -76($fp) -bnez $t3, error__520 +bnez $t3, error__518 lw $t0, -0($fp) lw $t1, -80($fp) la $t9, type_Bar @@ -4207,10 +4201,10 @@ j end_40 false_40: li $t1, 0 end_40: -# If not local_Razz_Razz_internal_19 goto next__526_0 +# If not local_Razz_Razz_internal_19 goto next__524_0 sw $t0, -0($fp) sw $t1, -80($fp) -beqz $t1, next__526_0 +beqz $t1, next__524_0 lw $t0, -0($fp) lw $t1, -84($fp) # Moving self to local_Razz_Razz_n_20 @@ -4223,8 +4217,8 @@ sw $t2, -68($fp) sw $t0, -0($fp) sw $t1, -84($fp) sw $t2, -68($fp) -j end__520 -next__526_0: +j end__518 +next__524_0: lw $t0, -0($fp) lw $t1, -88($fp) la $t9, type_Razz @@ -4242,10 +4236,10 @@ j end_41 false_41: li $t1, 0 end_41: -# If not local_Razz_Razz_internal_21 goto next__534_1 +# If not local_Razz_Razz_internal_21 goto next__532_1 sw $t0, -0($fp) sw $t1, -88($fp) -beqz $t1, next__534_1 +beqz $t1, next__532_1 lw $t0, -0($fp) lw $t1, -92($fp) # Moving self to local_Razz_Razz_n_22 @@ -4297,8 +4291,8 @@ move $t1, $t0 sw $t1, -68($fp) sw $t0, -96($fp) sw $t1, -68($fp) -j end__520 -next__534_1: +j end__518 +next__532_1: lw $t0, -0($fp) lw $t1, -100($fp) la $t9, type_Foo @@ -4316,10 +4310,10 @@ j end_42 false_42: li $t1, 0 end_42: -# If not local_Razz_Razz_internal_24 goto next__545_2 +# If not local_Razz_Razz_internal_24 goto next__543_2 sw $t0, -0($fp) sw $t1, -100($fp) -beqz $t1, next__545_2 +beqz $t1, next__543_2 lw $t0, -0($fp) lw $t1, -104($fp) # Moving self to local_Razz_Razz_n_25 @@ -4371,14 +4365,14 @@ move $t1, $t0 sw $t1, -68($fp) sw $t0, -108($fp) sw $t1, -68($fp) -j end__520 -next__545_2: +j end__518 +next__543_2: la $a0, case_error j .raise -error__520: +error__518: la $a0, case_void_error j .raise -end__520: +end__518: lw $t0, -68($fp) lw $t1, -0($fp) # self . a <- SET local_Razz_Razz_internal_16 @@ -4413,16 +4407,16 @@ bnez $a1, mismatch_43 li $v0, 1 end_43: move $t3, $v0 -# If not local_Razz_Razz_internal_32 goto continue__568 +# If not local_Razz_Razz_internal_32 goto continue__566 sw $t0, -68($fp) sw $t1, -0($fp) sw $t2, -124($fp) sw $t3, -132($fp) sw $t4, -136($fp) -beqz $t3, continue__568 +beqz $t3, continue__566 la $a0, dispatch_error j .raise -continue__568: +continue__566: lw $t0, -124($fp) lw $t1, -128($fp) # Find the actual name in the dispatch table @@ -4484,16 +4478,16 @@ bnez $a1, mismatch_44 li $v0, 1 end_44: move $t3, $v0 -# If not local_Razz_Razz_internal_36 goto continue__582 +# If not local_Razz_Razz_internal_36 goto continue__580 sw $t0, -128($fp) sw $t1, -0($fp) sw $t2, -140($fp) sw $t3, -148($fp) sw $t4, -152($fp) -beqz $t3, continue__582 +beqz $t3, continue__580 la $a0, dispatch_error j .raise -continue__582: +continue__580: lw $t0, -140($fp) lw $t1, -144($fp) # Find the actual name in the dispatch table @@ -4632,14 +4626,14 @@ bnez $a1, mismatch_45 li $v0, 1 end_45: move $t4, $v0 -# If local_Razz_Razz_internal_41 goto error__603 +# If local_Razz_Razz_internal_41 goto error__601 sw $t0, -160($fp) sw $t1, -116($fp) sw $t2, -112($fp) sw $t3, -0($fp) sw $t4, -168($fp) sw $t5, -172($fp) -bnez $t4, error__603 +bnez $t4, error__601 lw $t0, -0($fp) lw $t1, -176($fp) la $t9, type_Bar @@ -4657,10 +4651,10 @@ j end_46 false_46: li $t1, 0 end_46: -# If not local_Razz_Razz_internal_43 goto next__609_0 +# If not local_Razz_Razz_internal_43 goto next__607_0 sw $t0, -0($fp) sw $t1, -176($fp) -beqz $t1, next__609_0 +beqz $t1, next__607_0 lw $t0, -0($fp) lw $t1, -180($fp) # Moving self to local_Razz_Razz_n_44 @@ -4673,8 +4667,8 @@ sw $t2, -164($fp) sw $t0, -0($fp) sw $t1, -180($fp) sw $t2, -164($fp) -j end__603 -next__609_0: +j end__601 +next__607_0: lw $t0, -0($fp) lw $t1, -184($fp) la $t9, type_Razz @@ -4692,10 +4686,10 @@ j end_47 false_47: li $t1, 0 end_47: -# If not local_Razz_Razz_internal_45 goto next__617_1 +# If not local_Razz_Razz_internal_45 goto next__615_1 sw $t0, -0($fp) sw $t1, -184($fp) -beqz $t1, next__617_1 +beqz $t1, next__615_1 lw $t0, -0($fp) lw $t1, -188($fp) # Moving self to local_Razz_Razz_n_46 @@ -4747,14 +4741,14 @@ move $t1, $t0 sw $t1, -164($fp) sw $t0, -192($fp) sw $t1, -164($fp) -j end__603 -next__617_1: +j end__601 +next__615_1: la $a0, case_error j .raise -error__603: +error__601: la $a0, case_void_error j .raise -end__603: +end__601: lw $t0, -164($fp) lw $t1, -0($fp) # self . e <- SET local_Razz_Razz_internal_40 @@ -4789,16 +4783,16 @@ bnez $a1, mismatch_48 li $v0, 1 end_48: move $t3, $v0 -# If not local_Razz_Razz_internal_54 goto continue__641 +# If not local_Razz_Razz_internal_54 goto continue__639 sw $t0, -164($fp) sw $t1, -0($fp) sw $t2, -212($fp) sw $t3, -220($fp) sw $t4, -224($fp) -beqz $t3, continue__641 +beqz $t3, continue__639 la $a0, dispatch_error j .raise -continue__641: +continue__639: lw $t0, -216($fp) # Static Dispatch of the method doh sw $fp, ($sp) @@ -4855,16 +4849,16 @@ bnez $a1, mismatch_49 li $v0, 1 end_49: move $t3, $v0 -# If not local_Razz_Razz_internal_58 goto continue__655 +# If not local_Razz_Razz_internal_58 goto continue__653 sw $t0, -216($fp) sw $t1, -0($fp) sw $t2, -228($fp) sw $t3, -236($fp) sw $t4, -240($fp) -beqz $t3, continue__655 +beqz $t3, continue__653 la $a0, dispatch_error j .raise -continue__655: +continue__653: lw $t0, -228($fp) lw $t1, -232($fp) # Find the actual name in the dispatch table @@ -4930,7 +4924,7 @@ bnez $a1, mismatch_50 li $v0, 1 end_50: move $t5, $v0 -# If not local_Razz_Razz_internal_62 goto continue__670 +# If not local_Razz_Razz_internal_62 goto continue__668 sw $t0, -232($fp) sw $t1, -216($fp) sw $t2, -208($fp) @@ -4938,10 +4932,10 @@ sw $t3, -0($fp) sw $t4, -244($fp) sw $t5, -252($fp) sw $t6, -256($fp) -beqz $t5, continue__670 +beqz $t5, continue__668 la $a0, dispatch_error j .raise -continue__670: +continue__668: lw $t0, -244($fp) lw $t1, -248($fp) # Find the actual name in the dispatch table @@ -5140,11 +5134,11 @@ bnez $a1, mismatch_51 li $v0, 1 end_51: move $t1, $v0 -# If local_Bazz_Bazz_internal_1 goto error__697 +# If local_Bazz_Bazz_internal_1 goto error__695 sw $t0, -0($fp) sw $t1, -8($fp) sw $t2, -12($fp) -bnez $t1, error__697 +bnez $t1, error__695 lw $t0, -0($fp) lw $t1, -16($fp) la $t9, type_Bar @@ -5162,10 +5156,10 @@ j end_52 false_52: li $t1, 0 end_52: -# If not local_Bazz_Bazz_internal_3 goto next__703_0 +# If not local_Bazz_Bazz_internal_3 goto next__701_0 sw $t0, -0($fp) sw $t1, -16($fp) -beqz $t1, next__703_0 +beqz $t1, next__701_0 lw $t0, -0($fp) lw $t1, -20($fp) # Moving self to local_Bazz_Bazz_n_4 @@ -5178,8 +5172,8 @@ sw $t2, -4($fp) sw $t0, -0($fp) sw $t1, -20($fp) sw $t2, -4($fp) -j end__697 -next__703_0: +j end__695 +next__701_0: lw $t0, -0($fp) lw $t1, -24($fp) la $t9, type_Razz @@ -5197,10 +5191,10 @@ j end_53 false_53: li $t1, 0 end_53: -# If not local_Bazz_Bazz_internal_5 goto next__711_1 +# If not local_Bazz_Bazz_internal_5 goto next__709_1 sw $t0, -0($fp) sw $t1, -24($fp) -beqz $t1, next__711_1 +beqz $t1, next__709_1 lw $t0, -0($fp) lw $t1, -28($fp) # Moving self to local_Bazz_Bazz_n_6 @@ -5252,8 +5246,8 @@ move $t1, $t0 sw $t1, -4($fp) sw $t0, -32($fp) sw $t1, -4($fp) -j end__697 -next__711_1: +j end__695 +next__709_1: lw $t0, -0($fp) lw $t1, -36($fp) la $t9, type_Foo @@ -5271,10 +5265,10 @@ j end_54 false_54: li $t1, 0 end_54: -# If not local_Bazz_Bazz_internal_8 goto next__722_2 +# If not local_Bazz_Bazz_internal_8 goto next__720_2 sw $t0, -0($fp) sw $t1, -36($fp) -beqz $t1, next__722_2 +beqz $t1, next__720_2 lw $t0, -0($fp) lw $t1, -40($fp) # Moving self to local_Bazz_Bazz_n_9 @@ -5326,8 +5320,8 @@ move $t1, $t0 sw $t1, -4($fp) sw $t0, -44($fp) sw $t1, -4($fp) -j end__697 -next__722_2: +j end__695 +next__720_2: lw $t0, -0($fp) lw $t1, -48($fp) la $t9, type_Bazz @@ -5345,10 +5339,10 @@ j end_55 false_55: li $t1, 0 end_55: -# If not local_Bazz_Bazz_internal_11 goto next__733_3 +# If not local_Bazz_Bazz_internal_11 goto next__731_3 sw $t0, -0($fp) sw $t1, -48($fp) -beqz $t1, next__733_3 +beqz $t1, next__731_3 lw $t0, -0($fp) lw $t1, -52($fp) # Moving self to local_Bazz_Bazz_n_12 @@ -5400,14 +5394,14 @@ move $t1, $t0 sw $t1, -4($fp) sw $t0, -56($fp) sw $t1, -4($fp) -j end__697 -next__733_3: +j end__695 +next__731_3: la $a0, case_error j .raise -error__697: +error__695: la $a0, case_void_error j .raise -end__697: +end__695: lw $t0, -4($fp) lw $t1, -0($fp) # self . g <- SET local_Bazz_Bazz_internal_0 @@ -5551,9 +5545,7 @@ addiu $sp, $sp, -4 addiu $sp, $sp, -4 # Updates stack pointer pushing local_doh_Bazz_h_3 to the stack addiu $sp, $sp, -4 -# Updates stack pointer pushing local_doh_Bazz_i_4 to the stack -addiu $sp, $sp, -4 -# Updates stack pointer pushing local_doh_Bazz_internal_5 to the stack +# Updates stack pointer pushing local_doh_Bazz_internal_4 to the stack addiu $sp, $sp, -4 lw $t0, -0($fp) lw $t1, -8($fp) @@ -5572,13 +5564,10 @@ addi $t4, $t3, 1 # self . h <- SET local_doh_Bazz_internal_2 sw $t4, 12($t0) lw $t5, -20($fp) -# local_doh_Bazz_i_4 <- GET self . i -lw $t5, 20($t0) -lw $t6, -24($fp) -# Moving local_doh_Bazz_i_4 to local_doh_Bazz_internal_5 -move $t6, $t5 -sw $t6, -24($fp) -move $v0, $t6 +# Moving local_doh_Bazz_i_0 to local_doh_Bazz_internal_4 +move $t5, $t2 +sw $t5, -20($fp) +move $v0, $t5 # Empty all used registers and saves them to memory sw $t0, -0($fp) sw $t1, -8($fp) @@ -5586,9 +5575,8 @@ sw $t2, -4($fp) sw $t3, -16($fp) sw $t4, -12($fp) sw $t5, -20($fp) -sw $t6, -24($fp) # Removing all locals from stack -addiu $sp, $sp, 28 +addiu $sp, $sp, 24 jr $ra

    B)?q!B0nw{H{EuGQ?gGrgDt=Rh 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

    WAitRKa8&fE^E~yrW*(|3W`Tsh=sjG8 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 Y{PMPYeSA5cpSPR;0O;eM%Mm&S0GP9h&j0`b literal 36200 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 <- }, esta se evalúa y retorna \texttt{} + +La mayoría de los errores en runtime fueron comprobados generando el código CIL correspondiente, para esto se crea un nodo especial \texttt{ErrorNode}, que recibe el mensaje que se generará si se llega a dicho nodo. Por ejemplo, al crear el nodo \texttt{DivNode}, se chequea si el divisor es igual a cero, si lo es se crea un \texttt{ErrorNode} y en otro caso se ejecuta la división. El único error que no es analizado en la generación de código intermedio fue el de \textit{Substring out of range}, causado al llamarse la función \texttt{substr} de \texttt{String}; este error es comprobado directamente cuando se genera MIPS. + +Otra de las particularidades que se tuvo en cuenta para la generación de CIL fue la inicialización de los atributos, tanto los heredados como los propios de la clase. Cuando se crea una instancia de una clase se deben inicializar todos sus atributos con su expresión inicial si tienen alguna, en otro caso se usa su expresión por defecto. Con el objetivo de lograr esto se creó para cada tipo un constructor, cuyo cuerpo consiste en un bloque dándole un valor a cada uno de sus atributos. Este es llamado cada vez que se instancia un tipo. + +Los tipos built-in definidos en COOL, (Object, IO, Int, String, Bool) son definidos desde CIL. Para crear el cuerpo de cada una de sus funciones se hizo necesario la creación de nodos nuevos en CIL. \texttt{ExitNode} y \texttt{CopyNode} para la implementación de \texttt{abort} y \texttt{copy} de \texttt{Object}. Las instrucciones \texttt{Read} y \texttt{Print} fueron sustituidas por \texttt{ReadInt}, \texttt{ReadString}, \texttt{PrintInt} y \texttt{PrintString} con el objetivo de implementar de forma más sencilla las funciones \texttt{in\_int}, \texttt{in\_string}, \texttt{out\_int} y \texttt{out\_string} de \texttt{IO} respectivamente, y debido a que en Mips se requiere un trato diferenciado al tipo \texttt{int} y \texttt{string} cuando se hacen llamados al sistema. Para los métodos de \texttt{String}: \texttt{length}, \texttt{concat} y \texttt{substr} se crearon los nodos \texttt{LengthNode}, \texttt{ConcatNode} y \texttt{SubstringNode}. De esta forma, gran parte de las clases built-in se crean directamente en la generación de Mips para lograr mayor eficiencia y debido a las particularidades de cada una de las funciones que requieren de un procesamiento especial. \subsubsection{Código de Máquina} -\begin{itemize} - \item Describir el código Mips que se genera. - \item Explicar como se llegó a implementar con un visitor. -\end{itemize} +Para generar el código de máquinas se usa una vez más el patrón visitor, recorriendo todos los nodos de CIL que fueron creados. -\subsection{Optimización} +Entre las instrucciones se trata de manera especial la igualdad entre strings, que es realizada comparando carácter por carácter.\\\\ +\textbf{Register Allocation:}\\ + +Uno de los principales problemas en la generación de código es decidir que valores guardar en cuales registros. Con el objetivo de hacer más eficiente dicha asignación se particionaron las instrucciones de cada una de las funciones del código intermedio en \textit{Bloques básicos}, que son una secuencia maximal de instrucciones que cumple que: \begin{itemize} - \item No tengo ni idea de qué poner aquí. + \item El control de flujo solo puede entrar al bloque a través de la primera instrucción del bloque. Es decir, no hay saltos al medio del bloque. + \item Se dejará el bloque sin saltos ni llamados de función solo posiblemente en la última instrucción del bloque. \end{itemize} +En nuestro caso, en algunos bloques existirán saltos ya que algunas instrucciones de CIL, como \texttt{Concat}, \texttt{Length}, etc usan saltos cuando estos se generan en MIPS, pero como el código de estos nodos es creado directamente el uso eficiente de los registros y de las instrucciones de MIPS fue garantizado dentro de dichos nodos. + +Para formar dichos bloques primero se determina, dada una lista de instrucciones aquellas que son \textit{líderes}, que serán las primeras instrucciones de algún bloque básico. Las reglas para encontrar los líderes son: + +\begin{enumerate} + \item La primera instrucción en el código intermedio es un líder. + \item Cualquier instrucción que siga inmediatamente algún salto incondicional o condicional o alguna llamada a una función es un líder. + \item Cualquier instrucción que es el objetivo de algun salto incondicional o condicional es el líder. +\end{enumerate} + +Entonces, para cada líder, su bloque básico consiste en él mismo y en todas las instrucciones hasta pero sin incluir el siguiente líder o la última instrucción del código intermedio. + + +Para la asignación de las variables en los registros se usan 2 estructuras auxiliares: +\begin{description} + \item[Register descriptor:] Rastrea el actual "contenido" de los registros. Es consultado cuando algún registro es necesitado. A la entrada de un bloque, se asume que todos los registros están sin usar, por lo que a la salida cada uno de estos se limpian. + \item[Address descriptor:] Rastrea las localizaciones donde una variable local puede ser encontrada. Posible localizaciones: registros y pila. Todas las variables locales son guardadas en la pila ya que en los registros solo estarán de forma temporal. +\end{description} + +Además se calcula para cada instrucción una variable booleana \texttt{is\_live}, que determina si en una instrucción es usada el valor de dicha variable, notar que de cambiarle el valor a la variable esta no se considera usada, su valor es redefinido. Se computa también su \texttt{next\_use}, que contiene el índice de la instrución en donde fue usada después de esa instrucción. Para calcular dichas propiedades se recorre el bloque empezando por la última posición, en un principio todas las variables están "muertas" y su \texttt{next\_use} no está definido (es null). Para la realización de este algoritmo usamos una estructura auxiliar, \texttt{SymbolTable} que lleva cual es el último valor \texttt{next\_use} y \texttt{is\_live} de la variable. Para cada instrucción \texttt{x = y op z} que tiene como índice \textit{i} se hace lo siguiente: + +\begin{enumerate} + \item Se le asigna a la instrucción \textit{i} la información encontrada actualmente en la \texttt{SymbolTable} de \texttt{x}, \texttt{y} y \texttt{z}. + \item En la \texttt{SymbolTable}, le damos a \texttt{x} el valor de "no vivo" y "no next use". + \item En la \texttt{SymbolTable}, le damos a \texttt{y} y a \texttt{z} el valor de "vivo" y el \texttt{next\_use} de \texttt{y} y \texttt{z} a \textit{i} +\end{enumerate} + +Cada instrucción tiene: \texttt{out}, \texttt{in1}, \texttt{in2} para determinar cuales son los valores que necesitan registros. Así, si alguno de estos campos no es nulo y es ocupado por una variable se procede antes de procesamiento de dicha instrucción a asignarle registros a cada variable. Para la asignación de un registro se siguen las siguientes reglas: + +\begin{enumerate} + \item Si la variable está en un registro ya, entonces se retorna ese registro. + \item Si hay un registro sin usar, retorna este. + \item Se elige entre los registros llenos aquel que contenga la variable que sea menos usada en las instrucciones restantes del bloque, salvándose primero en el stack el contenido del registro y se retorna dicho registro. +\end{enumerate} + +Si se tiene una expresión del estilo \texttt{out = in1 op in2}, entonces notar que el registro de \texttt{out} puede usar uno de los registros de \texttt{in1} y \texttt{in2}, si ninguna de las instrucciones son usadas en las instrucciones siguientes. Se usa el \texttt{next\_use} de estas variables, comprobando que esta no haya sido usada en alguna instrucción siguiente y si esta \texttt{is\_live}, es decir, no se le reasigna un valor.\\\\ + +\textbf{Representación de los Objetos}\\ + +Otra de las problemáticas en la generación de código fue la representación de los objetos en memoria. Se necesita guardar información referente al tipo de objeto, los métodos del objeto, sus atributos y alguna manera de representar su padre. Esto último es necesario para la implementación de \texttt{ConformsNode}. + +A continuación se muestra un diagrama de como se representaron dichos objetos en memoria: + +\begin{figure}[h] + \centering + \includegraphics[width=0.6\textwidth]{resources/object.png} + \label{fig:objects} + \caption{Representación de los objetos en memoria} +\end{figure} + +Cuando se crean los tipos, para cada tipo se crea una tabla de \texttt{Type Info}, que guarda la información de los tipos que se presenta en la parte derecha de la Figura 2.1. \texttt{Type Name} es una referencia al nombre del tipo, y sirve como identificador del mismo, \texttt{Parent Type Info} guarda una referencia a la tabla de tipos del padre, mientras que \texttt{Dispatch Table} tiene una referencia a una tabla en la que están ubicadas, los métodos del objeto tal y como se guardan en CIL: primero los métodos de los padres y luego los de ellos. Los métodos sobreescritos son guardados en la misma posición que ocuparían en el padre. + +Luego, cuando se crea un objeto se calcula para cada uno de ellos el tamaño que ocupará: esto será igual al total de atributos más los 3 campos adicionales usados para guardar información del tipo. En el primer campo se pone el nombre del tipo, luego el tamaño que este ocupa, y después se busca la dirección del \texttt{Type Info} correspondiente al nuevo objeto que se crea. Después son ubicados los atributos primero la del padre y después los definidos por el objeto. + +Luego para buscar un atributo se calcula el offset de este atributo en su tipo estático, y este se le sumará más 3 porque ahí es en donde se empiezan a acceder a los atributos. + +Un algoritmo similar es el que se usa para acceder a los métodos: se busca en la posición 3 de la tabla del objeto, donde se obtiene \texttt{Type Info} y desde allí en la posición 3 se accede a la dirección del \texttt{Dispatch Table}, a partir de la cual se busca el índice de la función llamada según la información que se tiene del tipo estático del objeto, luego, esta función es llamada. Notar que en caso de que su tipo estático no coincida con su tipo dinámico no importa, porque en la dirección buscada estará la verdadera dirección del método. Este puede ser diferente si, por ejemplo, es sobreescrito. A este proceso se le llama \texttt{Dynamic Dispatch}, representado como \texttt{DynamicCallNode} en contraposición con \texttt{StaticCallNode}. En este último se especifica la función a llamar, es decir, no es necesario buscar dinámicamente en la información del objeto, se accede al método de un tipo especificado. + +Por otra parte, también requirió especial atención el nodo \texttt{ConformsNode}, usado para determinar si el tipo de una expresión se conforma con un \texttt{typen}. Para calcular esto se accede al \texttt{Type Info} del objeto y a partir de ahí, se realiza un ciclo por los \texttt{Parent Type Info} hasta encontrar alguno que sea igual a \texttt{typen}. La igualdad de tipos se comprueba accediendo a \texttt{Type Name}, como el mismo string es usado para representar este nombre, en el caso de que dicho string coincida con el nombre de \texttt{typen}, entonces se puede decir que los dos tipos son iguales. + +Existen otros nodos que hacen uso de esta representación de objetos. \texttt{TypeOfNode}, por ejemplo, devuelve el primer campo del objeto correspondiente al nombre del tipo. + %---------------------------------------------------------------------------------------- % Problemas técnicos %---------------------------------------------------------------------------------------- -\section{Problemas técnicos} +\section{Problemas técnicos y teóricos} + +\subsection{Tipos por valor y por referencia} + +Una de las problemáticas en el desarrollo del compilador fue la representación de los objetos built-in, en especial: \texttt{Int}, \texttt{Bool} y \texttt{String} que en realidad no son representados como objetos; los dos primeros son tratados por valor mientras el último aunque es por referencia no tiene campos y es guardado en el la sección .data de Mips. Sin embargo, todos son descendientes de \texttt{Object} que es la raíz de todas las clases en COOL y por lo tanto, poseen los métodos que están definidos en ese tipo. Con el objetivo de optimizar la memoria ocupada en el heap estos objetos no son guardados allí y no poseen la estructura de los objetos explicada anteriormente. + +Todas estas clases tienen en común que no es posible heredar de ellas, por lo tanto, una variable de tipo \texttt{Int}, \texttt{Bool} y \texttt{String} no es posible que sea otra cosa. Esto permite que no haya problemas a la hora de hacer dispatch: siempre es posible determinar la función a la que se va a llamar, por lo que las funciones de cada uno de estos tipos siempre se llaman estáticamente, determinando el nombre de la función. Los métodos que heredan de Object son redefinidos, ya que estos están implementados teniendo en cuenta la representación de objetos expuesta anteriormente que estos tipos no tienen. + +A su vez, se requiere un trato especial en nodos como \texttt{TypeOfNode} porque estas variables no tienen en su primer campo el nombre de su tipo. Para llevar a cabo este análisis se guarda, para cada variable el tipo de dirección a la que hace referencia. Se tienen como tipo de dirección: String, Bool, Int y por Referencia, este último para designar a los objetos representados mediante el modelo de objetos. + +Por otro lado, la única manera de tratar algún objeto tipo \texttt{String}, \texttt{Bool} o \texttt{Int} es haciendo un casteo de este objeto de manera indirecta: retornando uno de estos valores cuando el tipo de retorno del método es \texttt{Object} o pasándolos como parámetro cuando el tipo de argumento es \texttt{Object} o de manera general asignándolos a una variable tipo \texttt{Object}. En estos casos se espera que el valor del objeto sea por referencia, así que se hace \textit{Boxing} llevándolos a una representación de objetos, almacenándolos en el heap. Para esto se crea un nodo especial en CIL \texttt{BoxingNode} a partir del cual se llevará a cabo la conversión en Mips. Notar que el proceso contrario \textit{Unboxing} en el que se convierte un objeto por referencia a uno por valor no es necesario implementarlo en COOL: el casteo directo no existe en este lenguaje y asignar un objeto de tipo \texttt{Object} a uno \texttt{Bool}, \texttt{Int} o \texttt{String} consiste un error de tipos. + +\subsection{Valor Void en Mips} + +Otro de los problemas que se tuvo en cuenta fue la representación del valor nulo en Mips. Para modelar este valor se creo un nuevo tipo, denominado \texttt{Void}, que lo único que contiene es como primer campo el nombre del tipo \texttt{Void}. Para comprobar que un valor es void, por lo tanto, simplemente se comprueba que el nombre del tipo dinámico de una variable sea igual a "texttt{Void}. Los errores de runtime ocasionados por intentar llamar estática o dinámicamente a una variable en void son controlado, así como la evaluación de una expresión en case, que de ser void ocasionaría un error al intentar buscar la información del tipo. Por lo tanto, lo único necesario para la representación de void fue ese campo de nombre del tipo. Comprobar si una expresión por lo tanto consiste solamente en determinar si su tipo es \texttt{Void}. -\paragraph{Detalles sobre cualquier problema teórico o técnico interesante que haya necesitado resolver de forma particular.} \begin{itemize} \item Hablar de los comentarios y los strings en el lexer. - \item Hablar de la recuperación de errores en la gramática de PLY. - \item Hablar de cómo se implementaron los tipos \textit{built-in}. \end{itemize} %---------------------------------------------------------------------------------------- diff --git a/doc/report/resources/case.cl b/doc/report/resources/case.cl new file mode 100644 index 00000000..2492831b --- /dev/null +++ b/doc/report/resources/case.cl @@ -0,0 +1,5 @@ +case of + : => ; + . . . + : => ; +esac diff --git a/doc/report/resources/object.png b/doc/report/resources/object.png new file mode 100644 index 0000000000000000000000000000000000000000..bb5fb2469a9f50e0154abcf273b1ba509c27c5b1 GIT binary patch literal 25224 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 PB|l@z>@@ai-Xo7RVkvjMo>uxU!jNK z;Gn*NWEYX*Cb-(c2atlV;CIEr-Yp0B`~Gn7-8k2dT$5#qfx{p58lO*cLP0NhTB!>M zY`}RU_LaF})Q`Bl!L)c^_`8`_HpbVc4 zMKC%%Y_u;qm#0m8f8)e$_NA?+ciuS;zjGJ7{6!YdjUfqTkRG=4?+6LFYCa}7#4u;1 iWmo}S74T$S#k;0~vsQrG_|CFXG#prEgk)^a|NH_ol!{gW delta 554 zcmZ9}Jxjw-6o>JiBsOU@4fN)g=G##l^*02dC1>!CAk7c+#!+tUn$&@IUjeJ*BEBasto%ers(#Dk_0bIz?($z}<*F zt}WP!uFy+#$8NbjKI8+5cF8=X=q0grv6mciE)>yU$r_5x$T&(y+d)Z>2p_5_r$fmw zLQsCRA~wc|aG{A()?>*sGKq4o#~(~Hl0zBjF3JoevnZ=Z3&mk1kMd-cP!<^}1k#nc zjHQ->}?dq=r(rv5f9*lC%eM zqZ1tY`}Ko%#}{zhf$W_ecHG^lpF0-RuXt{L0%XX721eAJdj}9{!MOv0emF1S(~GbX0i0hwy|iqL&duLuO}I=9d*qEAvCl{Y?emL0cZU<7_)TaMiHk*)C5r zV-qkF?1U@cDC>i-ygl%T7F743CEpIqDm$1Cdn%LRmuTWCf;9w72zDaCy~_3MI8^!8 zdK@?;u`KxMYZ*)iPEQ%?j3=d>VOi^k(#NR7r0oow@tPK7c4U>f?lbMCEn8K}Z+Xt2 zswm}`#-@!jZ7N3Kgk%Kq3!RXLEFOgX$%Y}(wyhHRtx+5ZO<)84`rrk?agOWyHG))bkVjgxj#KBaw!_YkDXwjxjE!Uw?> zs0kO{kMBH6=N8qBPUpc-p<4A6n(GblPbk3)GP>|V8|U>Oqx!%AC3p3?Aiixrar}cmBrx$$axAu3v)MdN(QGk;}rx; z2?hzM%{Vm*4-hP(86Tnr(U`-;G6bSUv&2RSMkVP5iIX~fH^F}^!Vl8AIGPjF2{ZzO zU>pwCMAZUPJw{qMp3q`85Uyn9=)V^IX;$|=QJ$V#w5?R0nin;nt6tV40ut>>^;b&4 zd_W?M1GFG+Y+YDG^Y;`P(_yq`IlBoLYIZ3(+y&QL8|CjMXpaY>vGy6;A@YJ7Bv0S;r*Ny##%5y)GhK*zCjl&)8NIr!;q|mV}L{n?;T(+F#5Y`7MLu zWv1FFTGOL?I-wh5;;H3F;kV^=p~vU++YOFyi0DT?1(AkLECR1L6xa@m6CdSp;|jJ8 zo^L#lFEP$ITgj)A$z_bv6{|KdRGr#hlI_gNyjU@_bt`&Ui0<6KM7&6eM8BF#A2t#R zz86k5HOEEBA~y>HnXm3+xV==}C*hZ-j?MIsf*&QoYL_(6!dek7SJJvD=P6|Uj?(F+ z=*DpdQq4VVE6g^}Ip*`<3pcfRm+&u|l{{&-Mg32cS4(pIFz-jk#c^lh6=#TLp=;%3 zEQ7Xq7rOwimQHpAx?6Uy5Z4k>QDJK8qHg!X?Uo2T20yl(W~YUVi*U7d9ebTssOJ$youV){W`Ooon>?(xYrkoU2Q4ueG5FDo%LMNeT!GKq*H+b9na_@&%dH^NC=8F<+n8;(VYQq63q|@Jpa1{> delta 1898 zcmZ`(U2IfU5WaJ}yWPLu{onp=x7$K#Z=t`~0#zTd0j;4MTM(oMZkO)TA4(U`?qbnv ziK!5wAe4z3q9N^rFPbQ@QF$|w2V)we_~uQFi4R6&G~rQ#i8E)b#1+Z}2jEmU)R$wp}SPo-<}hRm(0U-RW4uVUjCXgZHbW^{y}^ z)C7z%XZ~0N9#VtbQiCqy>m!za6Q%+*+@{lXnB`NpWjptR>0~`N;@;~yN||(3o(%4e zgkkBwI-Ff5|KB=ludsQ7g>8 z;|!w=;|vox8QbKzPG&C33W2K_tO>w6DxXLyXKD|Xj@0)luUI`&zZk_oY8#WXM%i|J zo+VamYRs@hmgijC%A@R(HAxX-a-a$&ZkNxiG!t@bE3);;Q);_&pU1HQmZ zbt$?6zt=UwF$~1F!wT++k2r=nY6{HJ!_Fyk(!}rDB-l_G4kwW1bh-Ofn4PhYd0Hp;ELq zy$_XHn$opW6Ui9aFsJaHrus;Ze3mmqNsV0oq~NDRrJA`s7RqvuO=QMS7^mqSD7Exyb}<|A65iE&k|ib_ z>e|DpSu@?Y_IPCeR$iqu6bME zaWv_5BcdqW( zuyT3Wy3F%3e%y8*UX^(k@Wu9>aBkK9wS5O==KKqIw4)a;uiD>q?105pyT5Z6yt!)M z>D&p|@qXu7FH^H@@|`_`X4eW_#HYIJH(%naE;GEraE0M2!y>~q1`pK~!W-SOP|yiM XH;oF-Mi`?}jbC+lfT#Fpw+4R!22`ys diff --git a/src/codegen/visitors/base_cil_visitor.py b/src/codegen/visitors/base_cil_visitor.py index 3abc1a7b..9d80c849 100644 --- a/src/codegen/visitors/base_cil_visitor.py +++ b/src/codegen/visitors/base_cil_visitor.py @@ -122,8 +122,7 @@ def create_built_in(self): f1_params = [ParamNode("self", 'Object')] f1_localVars = [LocalNode("local_abort_Object_self_0")] f1_intructions = [cil.AssignNode(f1_localVars[0].name,f1_params[0].name, self.index), - cil.ExitNode(f1_params[0].name, idx=self.index), - cil.ReturnNode(f1_localVars[0].name, self.index)] + cil.ExitNode(f1_params[0].name, idx=self.index)] f1 = FunctionNode("function_abort_Object",f1_params,f1_localVars,f1_intructions) f2_params = [ParamNode("self", 'Object')] @@ -270,4 +269,9 @@ def check_void(self, expr): self.register_instruction(cil.LoadNode(void_expr, self.void_data)) self.register_instruction(cil.EqualNode(result, result, void_expr)) return result - \ No newline at end of file + + # def handle_arguments(self, args, scope, arg_type): + # args_node = [] + # for arg, typex in self.visit(node.args): + # if typex.name in ['String', 'Int', 'Bool']: + \ No newline at end of file diff --git a/src/codegen/visitors/base_mips_visitor.py b/src/codegen/visitors/base_mips_visitor.py index 683c9488..0b1876e5 100644 --- a/src/codegen/visitors/base_mips_visitor.py +++ b/src/codegen/visitors/base_mips_visitor.py @@ -156,17 +156,17 @@ def construct_next_use(self, basic_blocks: List[List[InstructionNode]]): def get_reg(self, inst: InstructionNode): if self.is_variable(inst.in1): - self.get_reg_var(inst.in1) + in1_reg = self.get_reg_var(inst.in1) if self.is_variable(inst.in2): - self.get_reg_var(inst.in2) + in2_reg = self.get_reg_var(inst.in2) # Comprobar si se puede usar uno de estos registros tambien para el destino nu_entry = self.next_use[inst.index] if nu_entry.in1islive and nu_entry.in1nextuse < inst.index: - update_register(inst.out, in1_reg) + self.update_register(inst.out, in1_reg) return if nu_entry.in2islive and nu_entry.in2nextuse < inst.index: - update_register(inst.out, in2_reg) + self.update_register(inst.out, in2_reg) return # Si no buscar un registro para z por el otro procedimiento if self.is_variable(inst.out): @@ -177,24 +177,25 @@ def get_reg_var(self, var): curr_inst = self.inst register = self.addr_desc.get_var_reg(var) if register is not None: # ya la variable está en un registro - return + return register var_st = self.symbol_table.lookup(var) register = self.reg_desc.find_empty_reg() if register is not None: self.update_register(var, register) self.load_var_code(var) - return + return register + next_use = self.next_use[inst.index] # Choose a register that requires the minimal number of load and store instructions score = self.initialize_score() # keeps the score of each variable (the amount of times a variable in a register is used) for inst in self.block[1:]: inst: InstructionNode - if self.is_variable(inst.in1): - self._update_score(score, inst.in1) - if self.is_variable(inst.in2): + if self.is_variable(inst.in1) and inst.in1 not in [curr_inst.in1, curr_inst.in2, curr_inst.out] and next_use.in1islive: + self._update_score(score, inst.in1) + if self.is_variable(inst.in2) and inst.in2 not in [curr_inst.in1, curr_inst.in2, curr_inst.out] and next_use.in2islive: self._update_score(score, inst.in2) - if self.is_variable(inst.out): + if self.is_variable(inst.out) and inst.out not in [curr_inst.in1, curr_inst.in2, curr_inst.out] and next_use.outislive: self._update_score(score, inst.out) # Chooses the one that is used less @@ -204,6 +205,7 @@ def get_reg_var(self, var): self.update_register(var, register) self.load_var_code(var) + return register def initialize_score(self): score = {} diff --git a/src/codegen/visitors/cil_visitor.py b/src/codegen/visitors/cil_visitor.py index 54df7da0..caf6c035 100644 --- a/src/codegen/visitors/cil_visitor.py +++ b/src/codegen/visitors/cil_visitor.py @@ -85,10 +85,19 @@ def visit(self, node: FuncDeclarationNode, scope: Scope): for p_name, p_type in node.params: self.register_param(p_name, p_type.value) - value, _ = self.visit(node.body, scope) - + value, typex = self.visit(node.body, scope) + if not isinstance(value, str): + result = self.define_internal_local() + self.register_instruction(cil.AssignNode(result, value)) + else: + result = value + + # Boxing if necessary + if (typex.name == 'Int' or typex.name == 'String' or typex.name == 'Bool') and self.current_method.return_type.name == 'Object': + self.register_instruction(cil.BoxingNode(result, typex.name)) + # Handle RETURN - self.register_instruction(cil.ReturnNode(value)) + self.register_instruction(cil.ReturnNode(result)) self.current_method = None @@ -137,13 +146,12 @@ def visit(self, node: CallNode, scope: Scope): else: result = self.define_internal_local() - # continue_label = cil.LabelNode(f'continue__{self.index}') - # isvoid = self.check_void(obj) - # self.register_instruction(cil.GotoIfFalseNode(isvoid, continue_label.label)) - # self.register_instruction(cil.ErrorNode('dispatch_error')) - # self.register_instruction(continue_label) + continue_label = cil.LabelNode(f'continue__{self.index}') + isvoid = self.check_void(obj) + self.register_instruction(cil.GotoIfFalseNode(isvoid, continue_label.label)) + self.register_instruction(cil.ErrorNode('dispatch_error')) + self.register_instruction(continue_label) - # name = self.to_function_name(node.id, otype.name) if otype in [StringType(), IntType(), BoolType()]: self.register_instruction(cil.StaticCallNode(otype.name, node.id, result, args_node, rtype.name)) else: @@ -166,13 +174,12 @@ def visit(self, node: BaseCallNode, scope: Scope): else: result = self.define_internal_local() - # continue_label = cil.LabelNode(f'continue__{self.index}') - # isvoid = self.check_void(obj) - # self.register_instruction(cil.GotoIfFalseNode(isvoid, continue_label.label)) - # self.register_instruction(cil.ErrorNode('dispatch_error')) - # self.register_instruction(continue_label) + continue_label = cil.LabelNode(f'continue__{self.index}') + isvoid = self.check_void(obj) + self.register_instruction(cil.GotoIfFalseNode(isvoid, continue_label.label)) + self.register_instruction(cil.ErrorNode('dispatch_error')) + self.register_instruction(continue_label) - # name = self.to_function_name(node.id, node.type) self.register_instruction(cil.StaticCallNode(node.type, node.id, result, args_node, rtype.name)) return result, self._return_type(otype, node) @@ -318,8 +325,6 @@ def visit(self, node: LetNode, scope: Scope): self.visit(init, child_scope) expr, typex = self.visit(node.expr, child_scope) - # result = self.define_internal_local() - # self.register_instruction(cil.AssignNode(result, expr)) return expr, typex diff --git a/src/codegen/visitors/mips_visitor.py b/src/codegen/visitors/mips_visitor.py index e46a5c47..adac1990 100644 --- a/src/codegen/visitors/mips_visitor.py +++ b/src/codegen/visitors/mips_visitor.py @@ -310,37 +310,13 @@ def visit(self, node:AllocateNode): self.code.append(f'li $t9, {size}') # saves the size of the node self.code.append(f'sw $t9, 4($v0)') # this is the second file of the table offset self.code.append(f'move ${rdest}, $v0') # guarda la nueva dirección de la variable en el registro destino - - # self.create_dispatch_table(node.type) # memory of dispatch table in v0 - # self.code.append(f'sw $v0, 8(${rdest})') # save a pointer of the dispatch table in the 3th position - + idx = self.types.index(node.type) self.code.append('# Adding Type Info addr') self.code.append('la $t8, types') self.code.append(f'lw $v0, {4*idx}($t8)') self.code.append(f'sw $v0, 8(${rdest})') - # def create_dispatch_table(self, type_name): - # # Get methods of the dispatch table - # methods = self.dispatch_table.get_methods(type_name) - # # Allocate the dispatch table in the heap - # self.code.append('# Allocate dispatch table in the heap') - # self.code.append('li $v0, 9') # code to request memory - # dispatch_table_size = 4*len(methods) - # self.code.append(f'li $a0, {dispatch_table_size+4}') - # self.code.append('syscall') # Memory of the dispatch table in v0 - - # self.code.append(f'# I save the offset of every one of the methods of this type') - # self.code.append('# Save the direction of methods') - # self.code.append('la $t8, methods') # cargo la dirección de methods - # for i, meth in enumerate(methods, 1): - # # guardo el offset de cada uno de los métodos de este tipo - # offset = 4*self.methods.index(meth) - # self.code.append(f'# Save the direction of the method {meth} in t9') - # self.code.append(f'lw $t9, {offset}($t8)') # cargo la dirección del método en t9 - # self.code.append('# Save the direction of the method in his position in the dispatch table') - # self.code.append(f'sw $t9, {4*i}($v0)') # guardo la direccion del metodo en su posicion en el dispatch table - @visitor.when(TypeOfNode) def visit(self, node:TypeOfNode): @@ -356,13 +332,8 @@ def visit(self, node:TypeOfNode): self.code.append(f'la ${rdest}, type_Int') elif self.var_address[node.obj] == AddrType.BOOL: self.code.append(f'la ${rdest}, type_Bool') - # elif self.var_address[node.obj] == AddrType.VOID: - # self.code.append(f'lw ${rdest}, type_{VOID_NAME}') elif self.is_int(node.obj): self.code.append(f'la ${rdest}, type_Int') - # elif self.is_void(node.obj): - # self.code.append(f'la ${rdest}, type_{VOID_NAME}') - self.var_address[node.dest] = AddrType.STR @visitor.when(LabelNode) @@ -789,4 +760,25 @@ def visit(self, node:VoidConstantNode): self.code.append('sw $t9, 0($v0)') # saves the name like the first field self.code.append(f'move ${rdest}, $v0') self.var_address[node.obj] = AddrType.REF - \ No newline at end of file + + @visitor.when(BoxingNode) + def visit(self, node:BoxingNode): + "Node to convert a value type into object" + rdest = self.addr_desc.get_var_reg(node.dest) + self.code.append('# Initialize new node') + self.code.append('li $a0, 12') + self.code.append('li $v0, 9') + self.code.append('syscall') + + self.code.append(f'la $t9, type_{node.type}') + self.code.append('sw $t9, 0($v0)') # saves the name like the first field + self.code.append('li $t9, 12') + self.code.append('sw $t9, 4($v0)') # saves the size like the second field + self.code.append(f'move ${rdest}, $v0') + + self.code.append('# Saving the methods of object') + idx = self.types.index('Object') + self.code.append('# Adding Type Info addr') + self.code.append('la $t8, types') + self.code.append(f'lw $v0, {4*idx}($t8)') + self.code.append(f'sw $v0, 8(${rdest})') diff --git a/src/cool_parser/output_parser/parselog.txt b/src/cool_parser/output_parser/parselog.txt index ad7f11ca..48eac652 100644 --- a/src/cool_parser/output_parser/parselog.txt +++ b/src/cool_parser/output_parser/parselog.txt @@ -6146,19 +6146,19 @@ yacc.py: 411:State : 32 yacc.py: 435:Stack : class type ocur id opar . LexToken(cpar,')',29,1046) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur id opar epsilon . LexToken(cpar,')',29,1046) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur id opar param_list_empty . LexToken(cpar,')',29,1046) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur id opar formals . LexToken(cpar,')',29,1046) @@ -6183,37 +6183,37 @@ yacc.py: 411:State : 91 yacc.py: 435:Stack : class type ocur id opar formals cpar colon type ocur true . LexToken(ccur,'}',29,1062) yacc.py: 471:Action : Reduce rule [atom -> true] with ['true'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur def_func semi id opar epsilon . LexToken(cpar,')',35,1254) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur def_func semi id opar param_list_empty . LexToken(cpar,')',35,1254) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur def_func semi id opar formals . LexToken(cpar,')',35,1254) @@ -6285,19 +6285,19 @@ yacc.py: 411:State : 113 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar . LexToken(cpar,')',35,1273) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar epsilon . LexToken(cpar,')',35,1273) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar arg_list_empty . LexToken(cpar,')',35,1273) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar args . LexToken(cpar,')',35,1273) @@ -6306,37 +6306,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur id opar args cpar . LexToken(semi,';',35,1274) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['abort','(',[],')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'abort',35,1267), [])) + yacc.py: 506:Result : ((LexToken(id,'abort',35,1267), [])) yacc.py: 410: yacc.py: 411:State : 78 yacc.py: 435:Stack : class type ocur def_func semi id opar formals cpar colon type ocur ocur func_call . LexToken(semi,';',35,1274) - yacc.py: 471:Action : Reduce rule [factor -> func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( num] with [0.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar epsilon . LexToken(cpar,')',40,1389) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',40,1389) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals . LexToken(cpar,')',40,1389) @@ -6504,19 +6504,19 @@ yacc.py: 411:State : 113 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar . LexToken(cpar,')',40,1409) yacc.py: 474:Action : Reduce rule [epsilon -> ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar epsilon . LexToken(cpar,')',40,1409) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar arg_list_empty . LexToken(cpar,')',40,1409) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar args . LexToken(cpar,')',40,1409) @@ -6525,37 +6525,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur id opar args cpar . LexToken(semi,';',40,1410) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['abort','(',[],')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'abort',40,1403), [])) + yacc.py: 506:Result : ((LexToken(id,'abort',40,1403), [])) yacc.py: 410: yacc.py: 411:State : 78 yacc.py: 435:Stack : class type ocur def_func semi def_func semi id opar formals cpar colon type ocur ocur func_call . LexToken(semi,';',40,1410) - yacc.py: 471:Action : Reduce rule [factor -> func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['i',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'i',49,1777), LexToken(type ...) + yacc.py: 506:Result : ((LexToken(id,'i',49,1777), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar param . LexToken(cpar,')',49,1784) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',49,1784) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'i',49,1777), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',49,1784) @@ -6734,37 +6734,37 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi id opar formals cpar colon type ocur opar new type . LexToken(cpar,')',50,1810) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','Cons'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( id] with ['i'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 211 - yacc.py: 506:Result : ([ expr] with [] and goto state 211 + yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 - yacc.py: 506:Result : ([ expr comma arg_list] with [,',',] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['init','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'init',50,1812), [ id opar args cpar] with ['init','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'init',50,1812), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['cons','(',,')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['cons','(',,')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',53,1833) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : class type ocur def_func semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',53,1833) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 14 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 14 + yacc.py: 506:Result : ([ class type ocur feature_list ccur semi] with ['class','List','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type ocur feature_list ccur semi] with ['class','List','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['car',':','Int'] and goto state 17 - yacc.py: 506:Result : ( ( id colon type] with ['cdr',':','List'] and goto state 17 - yacc.py: 506:Result : ( ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar epsilon . LexToken(cpar,')',76,2482) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar param_list_empty . LexToken(cpar,')',76,2482) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals . LexToken(cpar,')',76,2482) @@ -7097,37 +7097,37 @@ yacc.py: 411:State : 92 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi id opar formals cpar colon type ocur false . LexToken(ccur,'}',76,2499) yacc.py: 471:Action : Reduce rule [atom -> false] with ['false'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['isNil','(',[],')',':','Bool','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',78,2511) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',78,2511) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals . LexToken(cpar,')',78,2511) @@ -7191,37 +7191,37 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',78,2526) yacc.py: 471:Action : Reduce rule [atom -> id] with ['car'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['head','(',[],')',':','Int','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar epsilon . LexToken(cpar,')',80,2538) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar param_list_empty . LexToken(cpar,')',80,2538) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals . LexToken(cpar,')',80,2538) @@ -7285,37 +7285,37 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi id opar formals cpar colon type ocur id . LexToken(ccur,'}',80,2554) yacc.py: 471:Action : Reduce rule [atom -> id] with ['cdr'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['tail','(',[],')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( id colon type] with ['i',':','Int'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'i',82,2566), LexToken(type ...) + yacc.py: 506:Result : ((LexToken(id,'i',82,2566), LexToken(type ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param . LexToken(comma,',',82,2573) @@ -7375,24 +7375,24 @@ yacc.py: 411:State : 96 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma id colon type . LexToken(cpar,')',82,2586) yacc.py: 471:Action : Reduce rule [param -> id colon type] with ['rest',':','List'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'rest',82,2575), LexToken(t ...) + yacc.py: 506:Result : ((LexToken(id,'rest',82,2575), LexToken(t ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 - yacc.py: 506:Result : ([(LexToken(id,'rest',82,2575), LexToken( ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 95 + yacc.py: 506:Result : ([(LexToken(id,'rest',82,2575), LexToken( ...) yacc.py: 410: yacc.py: 411:State : 95 yacc.py: 430:Defaulted state 95: Reduce using 33 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param comma param_list . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [param_list -> param comma param_list] with [,',',] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar param_list . LexToken(cpar,')',82,2586) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'i',82,2566), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals . LexToken(cpar,')',82,2586) @@ -7429,42 +7429,42 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi id opar formals cpar colon type ocur ocur id larrow id . LexToken(semi,';',84,2615) yacc.py: 471:Action : Reduce rule [atom -> id] with ['i'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['car','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['car','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['rest'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['cdr','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['cdr','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['self'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['init','(',,')',':','List','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['init','(',,')',':','List','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi epsilon . LexToken(ccur,'}',90,2655) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class class type inherits type ocur def_attr semi def_attr semi def_func semi def_func semi def_func semi def_func semi feature_list . LexToken(ccur,'}',90,2655) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Cons','inherits','List','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Cons','inherits','List','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( id colon type] with ['mylist',':','List'] and goto state 17 - yacc.py: 506:Result : ( ( id colon type] with ['l',':','List'] and goto state 44 - yacc.py: 506:Result : ((LexToken(id,'l',107,3036), LexToken(typ ...) + yacc.py: 506:Result : ((LexToken(id,'l',107,3036), LexToken(typ ...) yacc.py: 410: yacc.py: 411:State : 44 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param . LexToken(cpar,')',107,3044) - yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 - yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) + yacc.py: 471:Action : Reduce rule [param_list -> param] with [] and goto state 42 + yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) yacc.py: 410: yacc.py: 411:State : 42 yacc.py: 430:Defaulted state 42: Reduce using 30 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar param_list . LexToken(cpar,')',107,3044) - yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 - yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) + yacc.py: 471:Action : Reduce rule [formals -> param_list] with [] and goto state 51 + yacc.py: 506:Result : ([(LexToken(id,'l',107,3036), LexToken(ty ...) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals . LexToken(cpar,')',107,3044) @@ -7801,12 +7801,12 @@ yacc.py: 411:State : 72 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if id . LexToken(dot,'.',108,3067) yacc.py: 471:Action : Reduce rule [atom -> id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar epsilon . LexToken(cpar,')',108,3074) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar arg_list_empty . LexToken(cpar,')',108,3074) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar args . LexToken(cpar,')',108,3074) @@ -7844,37 +7844,37 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot id opar args cpar . LexToken(then,'then',108,3076) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['isNil','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'isNil',108,3068), [])) + yacc.py: 506:Result : ((LexToken(id,'isNil',108,3068), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if factor dot func_call . LexToken(then,'then',108,3076) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 132 - yacc.py: 506:Result : ( comp] with [] and goto state 132 + yacc.py: 506:Result : ( string] with ['\n'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',108,3081), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',108,3081), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 203 - yacc.py: 506:Result : ( comp] with [] and goto state 203 + yacc.py: 506:Result : ( id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar epsilon . LexToken(cpar,')',110,3145) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar arg_list_empty . LexToken(cpar,')',110,3145) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar args . LexToken(cpar,')',110,3145) @@ -8043,48 +8043,48 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot id opar args cpar . LexToken(cpar,')',110,3146) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['head','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'head',110,3140), [])) + yacc.py: 506:Result : ((LexToken(id,'head',110,3140), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur id opar factor dot func_call . LexToken(cpar,')',110,3146) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_int','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_int',110,3130), [ id opar args cpar] with ['out_int','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_int',110,3130), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( string] with [' '] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['out_string','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'out_string',111,3155), [ id opar args cpar] with ['out_string','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'out_string',111,3155), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['l'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar epsilon . LexToken(cpar,')',112,3196) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar arg_list_empty . LexToken(cpar,')',112,3196) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar args . LexToken(cpar,')',112,3196) @@ -8288,48 +8288,48 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot id opar args cpar . LexToken(cpar,')',112,3197) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['tail','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'tail',112,3191), [])) + yacc.py: 506:Result : ((LexToken(id,'tail',112,3191), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi id opar formals cpar colon type ocur if expr then expr else ocur expr semi expr semi id opar factor dot func_call . LexToken(cpar,')',112,3197) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['print_list','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'print_list',112,3178), [ id opar args cpar] with ['print_list','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'print_list',112,3178), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 228 - yacc.py: 506:Result : ( comp] with [] and goto state 228 + yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 - yacc.py: 506:Result : ( if expr then expr else expr fi] with ['if',,'then',,'else',,'fi'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print_list','(',,')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['print_list','(',,')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 45 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 45 yacc.py: 430:Defaulted state 45: Reduce using 34 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar epsilon . LexToken(cpar,')',126,3742) yacc.py: 471:Action : Reduce rule [param_list_empty -> epsilon] with [None] and goto state 43 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 43 yacc.py: 430:Defaulted state 43: Reduce using 31 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar param_list_empty . LexToken(cpar,')',126,3742) yacc.py: 471:Action : Reduce rule [formals -> param_list_empty] with [[]] and goto state 51 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 51 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals . LexToken(cpar,')',126,3742) @@ -8540,12 +8540,12 @@ yacc.py: 411:State : 134 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur id larrow new type . LexToken(dot,'.',128,3783) yacc.py: 471:Action : Reduce rule [atom -> new type] with ['new','List'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( num] with [1.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3784), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3784), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [2.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3792), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3792), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [3.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3800), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3800), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [4.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3808), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3808), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( num] with [5.0] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['cons','(',,')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'cons',128,3816), [ id opar args cpar] with ['cons','(',,')'] and goto state 167 + yacc.py: 506:Result : ((LexToken(id,'cons',128,3816), [ factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar epsilon . LexToken(cpar,')',129,3851) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar arg_list_empty . LexToken(cpar,')',129,3851) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar args . LexToken(cpar,')',129,3851) @@ -9023,67 +9023,67 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot id opar args cpar . LexToken(cpar,')',129,3852) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['isNil','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'isNil',129,3845), [])) + yacc.py: 506:Result : ((LexToken(id,'isNil',129,3845), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while opar not factor dot func_call . LexToken(cpar,')',129,3852) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 124 - yacc.py: 506:Result : ( comp] with [] and goto state 124 + yacc.py: 506:Result : ( not expr] with ['not',] and goto state 77 - yacc.py: 506:Result : ( not expr] with ['not',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 123 - yacc.py: 506:Result : ( comp] with [] and goto state 123 + yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 - yacc.py: 506:Result : ( opar expr cpar] with ['(',,')'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 133 - yacc.py: 506:Result : ( comp] with [] and goto state 133 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 155 - yacc.py: 506:Result : ( comp] with [] and goto state 155 + yacc.py: 506:Result : ( expr] with [] and goto state 148 - yacc.py: 506:Result : ([ expr] with [] and goto state 148 + yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 - yacc.py: 506:Result : ([ arg_list] with [] and goto state 153 + yacc.py: 506:Result : ([ id opar args cpar] with ['print_list','(',,')'] and goto state 78 - yacc.py: 506:Result : ((LexToken(id,'print_list',131,3874), [ id opar args cpar] with ['print_list','(',,')'] and goto state 78 + yacc.py: 506:Result : ((LexToken(id,'print_list',131,3874), [ func_call] with [] and goto state 77 - yacc.py: 506:Result : ( func_call] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( id] with ['mylist'] and goto state 79 - yacc.py: 506:Result : ( ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( ] with [] and goto state 150 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 150 yacc.py: 430:Defaulted state 150: Reduce using 96 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar epsilon . LexToken(cpar,')',132,3924) yacc.py: 471:Action : Reduce rule [arg_list_empty -> epsilon] with [None] and goto state 149 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 149 yacc.py: 430:Defaulted state 149: Reduce using 92 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar arg_list_empty . LexToken(cpar,')',132,3924) yacc.py: 471:Action : Reduce rule [args -> arg_list_empty] with [[]] and goto state 153 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 153 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar args . LexToken(cpar,')',132,3924) @@ -9286,42 +9286,42 @@ yacc.py: 411:State : 191 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot id opar args cpar . LexToken(semi,';',132,3925) yacc.py: 471:Action : Reduce rule [func_call -> id opar args cpar] with ['tail','(',[],')'] and goto state 167 - yacc.py: 506:Result : ((LexToken(id,'tail',132,3919), [])) + yacc.py: 506:Result : ((LexToken(id,'tail',132,3919), [])) yacc.py: 410: yacc.py: 411:State : 167 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi id opar formals cpar colon type ocur ocur expr semi while expr loop ocur expr semi id larrow factor dot func_call . LexToken(semi,';',132,3925) - yacc.py: 471:Action : Reduce rule [factor -> factor dot func_call] with [,'.',] and goto state 77 - yacc.py: 506:Result : ( factor dot func_call] with [,'.',] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 152 - yacc.py: 506:Result : ( comp] with [] and goto state 152 + yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 - yacc.py: 506:Result : ( id larrow expr] with ['mylist','<-',] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 204 - yacc.py: 506:Result : ( comp] with [] and goto state 204 + yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 - yacc.py: 506:Result : ( while expr loop expr pool] with ['while',,'loop',,'pool'] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 111 - yacc.py: 506:Result : ( comp] with [] and goto state 111 + yacc.py: 506:Result : ( expr semi] with [,';'] and goto state 190 - yacc.py: 506:Result : ([ expr semi] with [,';'] and goto state 190 + yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 - yacc.py: 506:Result : ([ expr semi block] with [,';',] and goto state 135 + yacc.py: 506:Result : ([ ocur block ccur] with ['{',,'}'] and goto state 79 - yacc.py: 506:Result : ( ocur block ccur] with ['{',,'}'] and goto state 79 + yacc.py: 506:Result : ( atom] with [] and goto state 77 - yacc.py: 506:Result : ( atom] with [] and goto state 77 + yacc.py: 506:Result : ( factor] with [] and goto state 76 - yacc.py: 506:Result : ( factor] with [] and goto state 76 + yacc.py: 506:Result : ( base_call] with [] and goto state 75 - yacc.py: 506:Result : ( base_call] with [] and goto state 75 + yacc.py: 506:Result : ( term] with [] and goto state 74 - yacc.py: 506:Result : ( term] with [] and goto state 74 + yacc.py: 506:Result : ( op] with [] and goto state 73 - yacc.py: 506:Result : ( op] with [] and goto state 73 + yacc.py: 506:Result : ( comp] with [] and goto state 206 - yacc.py: 506:Result : ( comp] with [] and goto state 206 + yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 - yacc.py: 506:Result : ( id opar formals cpar colon type ocur expr ccur] with ['main','(',[],')',':','Object','{',,'}'] and goto state 18 + yacc.py: 506:Result : ( ] with [] and goto state 16 - yacc.py: 548:Result : (None) + yacc.py: 548:Result : (None) yacc.py: 410: yacc.py: 411:State : 16 yacc.py: 430:Defaulted state 16: Reduce using 14 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi def_func semi epsilon . LexToken(ccur,'}',138,3957) yacc.py: 471:Action : Reduce rule [feature_list -> epsilon] with [None] and goto state 48 - yacc.py: 506:Result : ([]) + yacc.py: 506:Result : ([]) yacc.py: 410: yacc.py: 411:State : 48 yacc.py: 430:Defaulted state 48: Reduce using 16 yacc.py: 435:Stack : def_class def_class class type inherits type ocur def_attr semi def_func semi def_func semi feature_list . LexToken(ccur,'}',138,3957) - yacc.py: 471:Action : Reduce rule [feature_list -> def_func semi feature_list] with [,';',[]] and goto state 48 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',[]] and goto state 48 + yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 - yacc.py: 506:Result : ([ def_func semi feature_list] with [,';',] and goto state 47 + yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 - yacc.py: 506:Result : ([ def_attr semi feature_list] with [,';',] and goto state 53 + yacc.py: 506:Result : ([ class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 - yacc.py: 506:Result : ( class type inherits type ocur feature_list ccur semi] with ['class','Main','inherits','IO','{',,'}',';'] and goto state 3 + yacc.py: 506:Result : ( def_class] with [] and goto state 6 - yacc.py: 506:Result : ([ def_class] with [] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 6 + yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 - yacc.py: 506:Result : ([ def_class class_list] with [,] and goto state 2 + yacc.py: 506:Result : ([ class_list] with [] and goto state 1 - yacc.py: 506:Result : ( class_list] with [] and goto state 1 + yacc.py: 506:Result : ( ( ( Date: Sun, 29 Nov 2020 21:49:18 -0700 Subject: [PATCH 57/60] Adding strings and comments treatment in lexer in report --- doc/report/report.aux | 5 +++-- doc/report/report.log | 20 +++++--------------- doc/report/report.pdf | Bin 152812 -> 156672 bytes doc/report/report.synctex.gz | Bin 81738 -> 88218 bytes doc/report/report.tex | 34 +++++++++++++++++++++++++++------- 5 files changed, 35 insertions(+), 24 deletions(-) diff --git a/doc/report/report.aux b/doc/report/report.aux index eb32d51b..a8c9b632 100644 --- a/doc/report/report.aux +++ b/doc/report/report.aux @@ -17,5 +17,6 @@ \newlabel{fig:objects}{{2.3.2}{6}} \@writefile{lof}{\contentsline {figure}{\numberline {2.1}{\ignorespaces Representaci\IeC {\'o}n de los objetos en memoria}}{6}} \@writefile{toc}{\contentsline {section}{\numberline {3}Problemas t\IeC {\'e}cnicos y te\IeC {\'o}ricos}{7}} -\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Tipos por valor y por referencia}{7}} -\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Valor Void en Mips}{8}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Comentarios y strings en el lexer}{7}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Tipos por valor y por referencia}{8}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Valor Void en Mips}{8}} diff --git a/doc/report/report.log b/doc/report/report.log index 3ecb2440..b5b6f7d2 100644 --- a/doc/report/report.log +++ b/doc/report/report.log @@ -1,4 +1,4 @@ -This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=pdflatex 2018.11.1) 29 NOV 2020 20:48 +This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=pdflatex 2018.11.1) 29 NOV 2020 21:47 entering extended mode restricted \write18 enabled. %&-line parsing enabled. @@ -1142,11 +1142,6 @@ Underfull \hbox (badness 10000) in paragraph at lines 167--168 [] -Underfull \hbox (badness 10000) in paragraph at lines 167--168 - - [] - - Underfull \hbox (badness 10000) in paragraph at lines 169--170 [] @@ -1168,11 +1163,6 @@ Underfull \hbox (badness 10000) in paragraph at lines 212--213 [] -Underfull \hbox (badness 10000) in paragraph at lines 212--213 - - [] - - Underfull \hbox (badness 10000) in paragraph at lines 214--215 [] @@ -1188,10 +1178,10 @@ LaTeX Warning: There were multiply-defined labels. ) Here is how much of TeX's memory you used: - 8897 strings out of 492982 - 132494 string characters out of 6134896 + 8898 strings out of 492982 + 132501 string characters out of 6134896 310835 words of memory out of 5000000 - 12252 multiletter control sequences out of 15000+600000 + 12253 multiletter control sequences out of 15000+600000 100154 words of font info for 106 fonts, out of 8000000 for 9000 1141 hyphenation exceptions out of 8191 51i,7n,51p,8838b,1254s stack positions out of 5000i,500n,10000p,200000b,80000s @@ -1201,7 +1191,7 @@ ype1/adobe/utopia/putb8a.pfb> -Output written on report.pdf (8 pages, 152812 bytes). +Output written on report.pdf (8 pages, 156672 bytes). PDF statistics: 54 PDF objects out of 1000 (max. 8388607) 37 compressed objects within 1 object stream diff --git a/doc/report/report.pdf b/doc/report/report.pdf index ce860c387ccef8001de9f55448dd24de16f92a52..0a0af8d6fb7f6f4c3c68b4a86c48757d0284d94a 100644 GIT binary patch delta 88237 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 z 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